@ai-group/chat-sdk 3.0.5 → 3.0.7

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 (66) hide show
  1. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js +10 -0
  2. package/dist/cjs/components/XAdkChatbot/XAdkChatbot.stories.js.map +2 -2
  3. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.d.ts +1 -0
  4. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +2 -0
  5. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
  6. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +7 -1
  7. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +2 -2
  8. package/dist/cjs/components/XAdkChatbot/index.js +18 -1
  9. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  10. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.js +2 -2
  11. package/dist/cjs/components/XAdkProvider/XAdkProvider.stories.js.map +1 -1
  12. package/dist/cjs/components/XAdkProvider/compound/Messages.js +63 -9
  13. package/dist/cjs/components/XAdkProvider/compound/Messages.js.map +3 -3
  14. package/dist/cjs/components/XAdkProvider/context/ChatActionContext.d.ts +5 -0
  15. package/dist/cjs/components/XAdkProvider/context/ChatActionContext.js.map +2 -2
  16. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  17. package/dist/cjs/components/XAdkProvider/context/ChatStateContext.js.map +2 -2
  18. package/dist/cjs/components/XAdkProvider/index.d.ts +1 -1
  19. package/dist/cjs/components/XAdkProvider/index.js +13 -7
  20. package/dist/cjs/components/XAdkProvider/index.js.map +2 -2
  21. package/dist/cjs/components/XAdkSender/XAdkSender.stories.d.ts +2 -2
  22. package/dist/cjs/components/XAdkSender/XAdkSender.stories.js.map +2 -2
  23. package/dist/cjs/hooks/useADKChat.d.ts +4 -0
  24. package/dist/cjs/hooks/useADKChat.js +24 -2
  25. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  26. package/dist/cjs/types/ChatHook.d.ts +6 -1
  27. package/dist/cjs/types/ChatHook.js.map +1 -1
  28. package/dist/cjs/types/XAdkChatbot.d.ts +1 -1
  29. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  30. package/dist/cjs/types/XAdkProvider.d.ts +6 -1
  31. package/dist/cjs/types/XAdkProvider.js.map +1 -1
  32. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js +8 -0
  33. package/dist/esm/components/XAdkChatbot/XAdkChatbot.stories.js.map +1 -1
  34. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.d.ts +1 -0
  35. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +2 -0
  36. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  37. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +1 -1
  38. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -1
  39. package/dist/esm/components/XAdkChatbot/index.js +26 -5
  40. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  41. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.js +2 -2
  42. package/dist/esm/components/XAdkProvider/XAdkProvider.stories.js.map +1 -1
  43. package/dist/esm/components/XAdkProvider/compound/Messages.js +124 -11
  44. package/dist/esm/components/XAdkProvider/compound/Messages.js.map +1 -1
  45. package/dist/esm/components/XAdkProvider/context/ChatActionContext.d.ts +5 -0
  46. package/dist/esm/components/XAdkProvider/context/ChatActionContext.js.map +1 -1
  47. package/dist/esm/components/XAdkProvider/context/ChatStateContext.d.ts +2 -0
  48. package/dist/esm/components/XAdkProvider/context/ChatStateContext.js.map +1 -1
  49. package/dist/esm/components/XAdkProvider/index.d.ts +1 -1
  50. package/dist/esm/components/XAdkProvider/index.js +26 -7
  51. package/dist/esm/components/XAdkProvider/index.js.map +1 -1
  52. package/dist/esm/components/XAdkSender/XAdkSender.stories.d.ts +2 -2
  53. package/dist/esm/components/XAdkSender/XAdkSender.stories.js +13 -13
  54. package/dist/esm/components/XAdkSender/XAdkSender.stories.js.map +1 -1
  55. package/dist/esm/hooks/useADKChat.d.ts +4 -0
  56. package/dist/esm/hooks/useADKChat.js +79 -28
  57. package/dist/esm/hooks/useADKChat.js.map +1 -1
  58. package/dist/esm/types/ChatHook.d.ts +6 -1
  59. package/dist/esm/types/ChatHook.js.map +1 -1
  60. package/dist/esm/types/XAdkChatbot.d.ts +1 -1
  61. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  62. package/dist/esm/types/XAdkProvider.d.ts +6 -1
  63. package/dist/esm/types/XAdkProvider.js.map +1 -1
  64. package/dist/umd/chat-sdk.min.css +1 -1
  65. package/dist/umd/chat-sdk.min.js +1 -1
  66. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"names":["css","withBasicStyles","useStyles","markdownWrapper","_templateObject","_taggedTemplateLiteral","markdownHost","_templateObject2"],"sources":["../../../../../../src/components/XAdkChatbot/components/MarkdownRender/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n markdownWrapper: css`\n display: grid;\n grid-template-columns: minmax(0, 1fr); /* 关键:允许内容收缩 */\n max-width: 100%; /* 自定义最大宽度 */\n margin: 0 auto;\n `,\n\n markdownHost: css`\n container-type: inline-size;\n width: 100%;\n overflow: auto;\n\n /* ===== Markdown 基础排版 ===== */\n\n p {\n margin: 8px 0;\n line-height: 1.6;\n }\n\n ul,\n ol {\n padding-left: 20px;\n }\n\n li {\n margin: 4px 0;\n }\n\n /* ===== Table 样式 ===== */\n\n table {\n border-collapse: collapse;\n width: 100%;\n max-width: 100%;\n margin: 12px 0;\n font-size: 14px;\n }\n\n thead {\n background: #fafafa;\n }\n\n th,\n td {\n border: 1px solid #e5e6eb;\n padding: 8px 12px;\n text-align: left;\n }\n\n th {\n font-weight: 600;\n }\n\n tbody tr:hover {\n background: #fafafa;\n }\n\n /* ===== Code ===== */\n\n pre {\n margin: 12px 0;\n }\n\n ant-highlightCode {\n max-width: min(100%, 80ch);\n overflow-x: auto;\n }\n\n /* ===== 图片 ===== */\n\n img {\n max-width: 100%;\n border-radius: 6px;\n }\n `,\n}));\n\nexport default useStyles;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,eAAe,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,qOAKnB;IAEDC,YAAY,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA;EAoEnB,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
1
+ {"version":3,"names":["css","withBasicStyles","useStyles","markdownWrapper","_templateObject","_taggedTemplateLiteral","markdownHost","_templateObject2"],"sources":["../../../../../../src/components/XAdkChatbot/components/MarkdownRender/styles.tsx"],"sourcesContent":["import { css } from \"@emotion/css\";\nimport { withBasicStyles } from \"@/styles/common\";\n\nexport const useStyles = withBasicStyles(() => ({\n markdownWrapper: css`\n display: grid;\n grid-template-columns: minmax(0, 1fr); /* 关键:允许内容收缩 */\n max-width: 100%; /* 自定义最大宽度 */\n margin: 0 auto;\n `,\n\n markdownHost: css`\n container-type: inline-size;\n width: 100%;\n overflow: auto;\n\n /* ===== Markdown 基础排版 ===== */\n\n p {\n margin: 8px 0;\n line-height: 1.6;\n }\n\n ul,\n ol {\n padding-left: 20px;\n margin-top: 0;\n margin-bottom: 8px;\n }\n\n li {\n margin: 0 0 4px 0 !important;\n }\n\n u {\n text-decoration: underline;\n }\n\n /* ===== Table 样式 ===== */\n\n table {\n border-collapse: collapse;\n width: 100%;\n max-width: 100%;\n margin: 12px 0;\n font-size: 14px;\n }\n\n thead {\n background: #fafafa;\n }\n\n th,\n td {\n border: 1px solid #e5e6eb;\n padding: 8px 12px;\n text-align: left;\n }\n\n th {\n font-weight: 600;\n }\n\n tbody tr:hover {\n background: #fafafa;\n }\n\n /* ===== Code ===== */\n\n pre {\n margin: 12px 0;\n }\n\n ant-highlightCode {\n max-width: min(100%, 80ch);\n overflow-x: auto;\n }\n\n /* ===== 图片 ===== */\n\n img {\n max-width: 100%;\n border-radius: 6px;\n }\n `,\n}));\n\nexport default useStyles;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,eAAe,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,qOAKnB;IAEDC,YAAY,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA;EA0EnB,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
@@ -48,19 +48,40 @@ var XAdkChatbot = function XAdkChatbot(_ref) {
48
48
  enableGrouping = _ref$enableGrouping === void 0 ? true : _ref$enableGrouping,
49
49
  _ref$enableProcessPar = _ref.enableProcessParsing,
50
50
  enableProcessParsing = _ref$enableProcessPar === void 0 ? true : _ref$enableProcessPar,
51
- parseOptions = _ref.parseOptions;
51
+ parseOptions = _ref.parseOptions,
52
+ _ref$initialized = _ref.initialized,
53
+ initialized = _ref$initialized === void 0 ? false : _ref$initialized;
52
54
  var styles = useStyles();
53
55
  var listRef = useRef(null);
54
56
  var lastScrollTopRef = useRef(0);
55
57
  var userHasScrolledRef = useRef(false);
56
58
  var messagesEndRef = useRef(null);
59
+ var prevInitializedRef = useRef(false);
57
60
 
58
- // 滚动到底部
61
+ // 初始化完成时滚动到底部
59
62
  useEffect(function () {
60
- var _messagesEndRef$curre;
63
+ if (!initialized) return;
64
+ if (!messages.length) return;
65
+ if (prevInitializedRef.current) return; // 只在第一次 initialized+messages 就绪时触发
66
+ prevInitializedRef.current = true;
67
+ // 推迟到浏览器完成 paint 后执行,确保 DOM 高度已撑开
68
+ var timer = setTimeout(function () {
69
+ var _messagesEndRef$curre;
70
+ (_messagesEndRef$curre = messagesEndRef.current) === null || _messagesEndRef$curre === void 0 || _messagesEndRef$curre.scrollIntoView({
71
+ behavior: "auto"
72
+ });
73
+ }, 0);
74
+ return function () {
75
+ return clearTimeout(timer);
76
+ };
77
+ }, [initialized, messages]);
78
+
79
+ // 流式输出时滚动到底部
80
+ useEffect(function () {
81
+ var _messagesEndRef$curre2;
61
82
  if (!loading) return;
62
83
  if (userHasScrolledRef.current) return;
63
- (_messagesEndRef$curre = messagesEndRef.current) === null || _messagesEndRef$curre === void 0 || _messagesEndRef$curre.scrollIntoView({
84
+ (_messagesEndRef$curre2 = messagesEndRef.current) === null || _messagesEndRef$curre2 === void 0 || _messagesEndRef$curre2.scrollIntoView({
64
85
  behavior: "smooth"
65
86
  });
66
87
  }, [loading, messages]);
@@ -365,7 +386,7 @@ var XAdkChatbot = function XAdkChatbot(_ref) {
365
386
  })
366
387
  }))]
367
388
  }, group.id);
368
- }, [enableProcessParsing, parseOptions, showFnCallDetail, onConfirm, loading, showRetry, showCopy, showLog, onRetry, onCopy, onShowLog, styles]);
389
+ }, [enableProcessParsing, parseOptions, showFnCallDetail, onConfirm, loading, showRetry, showCopy, showLog, onRetry, onCopy, onShowLog, actions, styles]);
369
390
 
370
391
  // ========== 渲染用户消息组 ==========
371
392
  var renderUserGroup = useCallback(function (group) {
@@ -1 +1 @@
1
- {"version":3,"names":["React","useMemo","useCallback","useEffect","useRef","Button","Flex","Tooltip","message","antdMessage","clsx","SwapRightOutlined","ReloadOutlined","CopyOutlined","InfoCircleOutlined","CheckCircleFilled","copy","useStyles","MarkdownRender","FunctionCallRender","FileGallery","XAiThoughtChain","parseAgentMessage","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","scrollThreshold","XAdkChatbot","_ref","_ref$loading","loading","prologue","suggestions","messages","showFnCallDetail","onConfirm","onSuggest","showRetry","showCopy","showLog","onRetry","onCopy","onShowLog","actions","className","style","_ref$enableGrouping","enableGrouping","_ref$enableProcessPar","enableProcessParsing","parseOptions","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","_messagesEndRef$curre","current","scrollIntoView","behavior","handleScroll","el","currentTop","scrollTop","isAtBottom","Math","abs","scrollHeight","clientHeight","listElement","addEventListener","removeEventListener","chatGroups","map","msg","_msg$isLike","id","role","msgs","invocationId","allFiles","fileData","isLike","groups","forEach","isRealUserQuery","functionResponse","functionCall","lastGroup","length","isLastGroupAgent","push","_msg$isLike2","concat","g","reduce","acc","m","_toConsumableArray","renderBotGroup","group","isLastGroup","botMsg","children","i","text","showDetail","mergedToolMap","Map","callId","has","set","_objectSpread","_mergedToolMap$get","get","tool","name","args","nodes","currentProcessItems","processedToolIds","Set","flushProcessItems","type","items","key","mergedMsg","content","add","parts","part","partIdx","includes","titleMap","planning","replanning","reasoning","action_log","process_text","title","trim","lastNode","fullTextToCopy","filter","join","lastBotMsg","hasProcess","some","n","isGroupLoading","node","idx","defaultOpen","showBadge","findIndex","successBadge","fileSection","fileHeader","display","flexWrap","gap","file","index","isLastBotMsg","metaFooter","actionIcons","onClick","success","timestamp","renderUserGroup","userMsg","userContainer","align","marginBottom","card","renderSuggestions","suggestionWrapper","item","suggestion","suggestContent","icon","iconPosition","whiteSpace","height","wordWrap","textAlign","padding","lineHeight","wrapper","list","ref"],"sources":["../../../../src/components/XAdkChatbot/index.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useRef } from \"react\";\nimport { Button, Flex, Tooltip, message as antdMessage } from \"antd\";\nimport clsx from \"clsx\";\nimport {\n SwapRightOutlined,\n ReloadOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n CheckCircleFilled,\n} from \"@ant-design/icons\";\nimport copy from \"copy-to-clipboard\";\nimport { useStyles } from \"./styles\";\nimport MarkdownRender from \"./components/MarkdownRender\";\nimport FunctionCallRender from \"./components/FunctionCallRender\";\nimport FileGallery from \"../FileGallery\";\nimport XAiThoughtChain from \"@/components/XAiThoughtChain\";\nimport { parseAgentMessage } from \"@/utils\";\nimport type { IMessage, XAdkChatbotProps, ChatGroup } from \"@/types\";\nimport type { ThoughtChainItemType } from \"@/types/XAiThoughtChain\";\n\nconst scrollThreshold = 10;\n\n/**\n * XAdkChatbot - 增强版聊天组件\n *\n * 新增功能:\n * - ✅ 自动消息分组 (enableGrouping)\n * - ✅ 自动解析思维链 (enableProcessParsing)\n * - ✅ 文件展示 (FileGallery)\n * - ✅ 操作栏 (重试/复制/日志)\n * - ✅ 欢迎页面 (agentName/agentIcon/description)\n */\nconst XAdkChatbot: React.FC<XAdkChatbotProps> = ({\n loading = false,\n prologue,\n suggestions,\n messages,\n showFnCallDetail,\n onConfirm,\n onSuggest,\n showRetry,\n showCopy,\n showLog,\n onRetry,\n onCopy,\n onShowLog,\n actions,\n className,\n style,\n // welcome = null,\n enableGrouping = true,\n enableProcessParsing = true,\n parseOptions,\n}) => {\n const styles = useStyles();\n const listRef = useRef<HTMLDivElement>(null);\n const lastScrollTopRef = useRef(0);\n const userHasScrolledRef = useRef(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n // 滚动到底部\n useEffect(() => {\n if (!loading) return;\n if (userHasScrolledRef.current) return;\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\n }, [loading, messages]);\n\n // 处理滚动事件\n const handleScroll = useCallback(() => {\n const el = listRef.current;\n if (!el) return;\n const currentTop = el.scrollTop;\n\n if (currentTop < lastScrollTopRef.current) {\n userHasScrolledRef.current = true;\n }\n\n const isAtBottom =\n Math.abs(el.scrollHeight - currentTop - el.clientHeight) <=\n scrollThreshold;\n if (isAtBottom) {\n userHasScrolledRef.current = false;\n }\n\n lastScrollTopRef.current = currentTop;\n }, []);\n\n useEffect(() => {\n const listElement = listRef.current;\n if (!listElement) return;\n\n listElement.addEventListener(\"scroll\", handleScroll);\n return () => {\n listElement.removeEventListener(\"scroll\", handleScroll);\n };\n }, [handleScroll]);\n\n // ========== 消息分组逻辑 ==========\n const chatGroups = useMemo(() => {\n if (!enableGrouping) {\n // 不分组,每条消息独立\n return messages.map((msg) => ({\n id: msg.id,\n role: msg.role,\n msgs: [msg],\n invocationId: msg.invocationId,\n allFiles: msg.fileData || [],\n isLike: msg.isLike ?? 0,\n }));\n }\n\n const groups: ChatGroup[] = [];\n messages.forEach((msg) => {\n // 过滤 followup 消息\n if ((msg as any).role === \"followup\") return;\n\n const isRealUserQuery =\n msg.role === \"user\" && !msg.functionResponse && !msg.functionCall;\n const lastGroup = groups[groups.length - 1];\n const isLastGroupAgent = lastGroup?.role === \"bot\";\n\n if (isLastGroupAgent && !isRealUserQuery) {\n // 合并到上一个 bot 分组\n lastGroup.msgs.push(msg);\n if (msg.invocationId) lastGroup.invocationId = msg.invocationId;\n // 更新 isLike: 取最新的非0值,或保持当前值\n if (msg.isLike && msg.isLike !== 0) {\n lastGroup.isLike = msg.isLike;\n }\n } else {\n // 创建新分组\n groups.push({\n id: msg.id || `group-${groups.length}`,\n role: isRealUserQuery ? \"user\" : \"bot\",\n msgs: [msg],\n invocationId: msg.invocationId,\n allFiles: [],\n isLike: msg.isLike ?? 0,\n });\n }\n });\n\n // 合并文件\n groups.forEach((g) => {\n g.allFiles = g.msgs.reduce(\n (acc, m) => [...acc, ...(m.fileData || [])],\n [] as any[],\n );\n });\n\n return groups;\n }, [messages, enableGrouping]);\n\n // ========== 渲染 Bot 消息组 ==========\n const renderBotGroup = useCallback(\n (group: ChatGroup, isLastGroup: boolean) => {\n const { msgs, allFiles } = group;\n\n if (!enableProcessParsing) {\n // 不解析 process,简单渲染\n return (\n <div key={group.id} className={styles.botMsg}>\n {msgs.map((msg, i) => {\n if (msg.text) {\n return (\n <MarkdownRender key={`${msg.id}-${i}`} text={msg.text} />\n );\n }\n if (msg.functionCall) {\n return (\n <FunctionCallRender\n key={`${msg.id}-${i}`}\n msg={msg}\n showDetail={showFnCallDetail}\n onConfirm={onConfirm}\n />\n );\n }\n return null;\n })}\n </div>\n );\n }\n\n // ========== 解析 Process 内容 ==========\n\n // 1. 合并工具调用\n const mergedToolMap = new Map<string, IMessage>();\n msgs.forEach((msg) => {\n if (msg.functionCall) {\n const callId = msg.functionCall.id || \"\";\n if (!mergedToolMap.has(callId)) {\n mergedToolMap.set(callId, { ...msg });\n } else {\n mergedToolMap.set(callId, {\n ...(mergedToolMap.get(callId) ?? {}),\n ...msg,\n });\n }\n } else if (msg.functionResponse) {\n const callId = msg.functionResponse.id || \"\";\n if (mergedToolMap.has(callId)) {\n const tool = mergedToolMap.get(callId);\n if (tool) tool.functionResponse = msg.functionResponse;\n } else {\n mergedToolMap.set(callId, {\n ...msg,\n functionCall: {\n id: callId,\n name: msg.functionResponse.name || \"Unknown\",\n args: {},\n },\n });\n }\n }\n });\n\n // 2. 解析文本消息中的 process 内容\n type RenderNode =\n | { type: \"text\"; content: string; key: string }\n | { type: \"process\"; items: ThoughtChainItemType[]; key: string };\n\n const nodes: RenderNode[] = [];\n let currentProcessItems: ThoughtChainItemType[] = [];\n const processedToolIds = new Set<string>();\n\n const flushProcessItems = () => {\n if (currentProcessItems.length > 0) {\n nodes.push({\n type: \"process\",\n items: [...currentProcessItems],\n key: `process-${nodes.length}`,\n });\n currentProcessItems = [];\n }\n };\n\n msgs.forEach((msg) => {\n // 处理工具调用\n if (msg.functionCall) {\n const callId = msg.functionCall.id || \"\";\n if (!processedToolIds.has(callId)) {\n const mergedMsg = mergedToolMap.get(callId);\n if (mergedMsg) {\n currentProcessItems.push({\n type: \"tool\",\n key: `tool-${callId}`,\n content: \"\",\n msg: mergedMsg,\n });\n processedToolIds.add(callId);\n }\n }\n }\n // 处理文本消息\n else if (msg.text && !msg.functionResponse) {\n const parts = parseAgentMessage(msg.text, parseOptions as any);\n\n parts.forEach((part, partIdx) => {\n // process 内容放入 currentProcessItems\n if (\n [\n \"planning\",\n \"replanning\",\n \"reasoning\",\n \"action_log\",\n \"process_text\",\n ].includes(part.type)\n ) {\n const titleMap: Record<string, string> = {\n planning: \"任务规划\",\n replanning: \"重新规划\",\n reasoning: \"推理分析\",\n action_log: \"行动记录\",\n process_text: \"过程分析\",\n };\n\n currentProcessItems.push({\n type: \"text\",\n key: `${msg.id}-${partIdx}`,\n content: part.content,\n title: titleMap[part.type] || \"分析\",\n });\n }\n // 普通文本内容\n else {\n flushProcessItems();\n if (part.content.trim()) {\n const lastNode = nodes[nodes.length - 1];\n if (lastNode?.type === \"text\") {\n // 合并到上一个文本节点\n lastNode.content += \"\\n\\n\" + part.content;\n } else {\n nodes.push({\n type: \"text\",\n content: part.content,\n key: `text-${msg.id}-${partIdx}`,\n });\n }\n }\n }\n });\n }\n });\n\n // 最后flush一次\n flushProcessItems();\n\n // 3. 准备操作栏数据\n const fullTextToCopy = msgs\n .filter((m) => !m.functionCall && !m.functionResponse)\n .map((m) => m.text || \"\")\n .join(\"\");\n\n const lastBotMsg = msgs[msgs.length - 1];\n const hasProcess = nodes.some((n) => n.type === \"process\");\n const isGroupLoading = loading && isLastGroup;\n\n // 4. 渲染\n return (\n <div key={group.id} className={styles.botMsg}>\n {nodes.map((node, idx) => {\n if (node.type === \"process\") {\n return (\n <XAiThoughtChain\n key={node.key}\n loading={isGroupLoading}\n title=\"思维链已完成\"\n items={node.items}\n showFnCallDetail={showFnCallDetail}\n onConfirm={onConfirm}\n defaultOpen={isGroupLoading}\n />\n );\n }\n\n // 文本节点\n const showBadge =\n hasProcess && nodes.findIndex((n) => n.type === \"text\") === idx;\n return (\n <div key={node.key}>\n {showBadge && (\n <div className={styles.successBadge}>\n <CheckCircleFilled /> 已完成所有规划任务\n </div>\n )}\n <MarkdownRender text={node.content} />\n </div>\n );\n })}\n\n {/* 文件展示 */}\n {allFiles.length > 0 && (\n <div className={styles.fileSection}>\n <div className={styles.fileHeader}>\n <span>生成文件 ({allFiles.length})</span>\n </div>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"8px\" }}>\n {allFiles.map((file, index) => (\n <FileGallery key={index} file={file} />\n ))}\n </div>\n </div>\n )}\n\n {/* 操作栏 */}\n {!isGroupLoading &&\n (actions\n ? actions({ message: group, isLastBotMsg: isLastGroup })\n : (showRetry || showCopy || showLog) && (\n <div className={styles.metaFooter}>\n <Flex gap={16} className={styles.actionIcons}>\n {showRetry && isLastGroup && (\n <Tooltip title=\"重新生成\">\n <ReloadOutlined onClick={onRetry} />\n </Tooltip>\n )}\n {showCopy && (\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n onClick={() => {\n copy(fullTextToCopy);\n antdMessage.success(\"复制成功\");\n onCopy?.(fullTextToCopy);\n }}\n />\n </Tooltip>\n )}\n {showLog && lastBotMsg?.invocationId && (\n <Tooltip title=\"查看日志\">\n <InfoCircleOutlined\n onClick={() =>\n onShowLog?.(\n lastBotMsg.invocationId!,\n lastBotMsg.timestamp,\n )\n }\n />\n </Tooltip>\n )}\n </Flex>\n </div>\n ))}\n </div>\n );\n },\n [\n enableProcessParsing,\n parseOptions,\n showFnCallDetail,\n onConfirm,\n loading,\n showRetry,\n showCopy,\n showLog,\n onRetry,\n onCopy,\n onShowLog,\n styles,\n ],\n );\n\n // ========== 渲染用户消息组 ==========\n const renderUserGroup = useCallback(\n (group: ChatGroup) => {\n return (\n <div key={group.id} className={styles.userMsg}>\n {group.msgs.map((m, i) => (\n <div key={m.id || i} className={styles.userContainer}>\n {/* 文件展示 */}\n {m.fileData && m.fileData.length > 0 && (\n <>\n {m.fileData.map((file, index) => (\n <FileGallery\n key={index}\n file={file}\n align=\"left\"\n style={{ marginBottom: \"16px\" }}\n />\n ))}\n </>\n )}\n {/* 文本展示 */}\n {m.text && <div className={styles.card}>{m.text}</div>}\n </div>\n ))}\n </div>\n );\n },\n [styles],\n );\n\n // ========== 欢迎页面 ==========\n // const isEmpty =\n // messages.length === 0 &&\n // !prologue &&\n // (!suggestions || suggestions.length === 0);\n\n // const renderWelcome = () => {\n // if (!isEmpty) return null;\n\n // return (\n // <>\n // {welcome ?? (\n // <div className={styles.welcomeWrapper}>\n // {agentIcon && (\n // <img src={agentIcon} alt=\"icon\" className={styles.welcomeIcon} />\n // )}\n // {agentName && (\n // <div className={styles.welcomeTitle}>{agentName}</div>\n // )}\n // {description && (\n // <div className={styles.welcomeDesc}>{description}</div>\n // )}\n // </div>\n // )}\n // </>\n // );\n // };\n\n // ========== 渲染建议问题 ==========\n const renderSuggestions = () => {\n if (!suggestions || suggestions.length === 0) return null;\n\n return (\n <div className={styles.suggestionWrapper}>\n {suggestions.map((item) => (\n <div key={item} className={styles.suggestion}>\n <div className={styles.suggestContent}>\n <Button\n type=\"text\"\n icon={<SwapRightOutlined />}\n iconPosition=\"end\"\n onClick={() => {\n if (!item) return;\n onSuggest?.(item);\n }}\n style={{\n whiteSpace: \"normal\",\n height: \"auto\",\n wordWrap: \"break-word\",\n textAlign: \"left\",\n padding: \"4px 15px\",\n lineHeight: \"1.5\",\n }}\n >\n {item}\n </Button>\n </div>\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <div className={clsx(styles.wrapper, className)} style={style}>\n <div className={styles.list} ref={listRef}>\n {/* 开场白 */}\n {prologue && (\n <div className={styles.prologue}>\n <MarkdownRender text={prologue} />\n </div>\n )}\n\n {/* 欢迎页面 */}\n {/* {renderWelcome()} */}\n\n {/* 消息列表 */}\n {chatGroups.map((group, idx) =>\n group.role === \"user\"\n ? renderUserGroup(group)\n : renderBotGroup(group, idx === chatGroups.length - 1),\n )}\n\n {/* 建议问题 */}\n {renderSuggestions()}\n\n <div ref={messagesEndRef} />\n </div>\n </div>\n );\n};\n\nexport default XAdkChatbot;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useMemo","useCallback","useEffect","useRef","Button","Flex","Tooltip","message","antdMessage","clsx","SwapRightOutlined","ReloadOutlined","CopyOutlined","InfoCircleOutlined","CheckCircleFilled","copy","useStyles","MarkdownRender","FunctionCallRender","FileGallery","XAiThoughtChain","parseAgentMessage","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","scrollThreshold","XAdkChatbot","_ref","_ref$loading","loading","prologue","suggestions","messages","showFnCallDetail","onConfirm","onSuggest","showRetry","showCopy","showLog","onRetry","onCopy","onShowLog","actions","className","style","_ref$enableGrouping","enableGrouping","_ref$enableProcessPar","enableProcessParsing","parseOptions","_ref$initialized","initialized","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","prevInitializedRef","length","current","timer","setTimeout","_messagesEndRef$curre","scrollIntoView","behavior","clearTimeout","_messagesEndRef$curre2","handleScroll","el","currentTop","scrollTop","isAtBottom","Math","abs","scrollHeight","clientHeight","listElement","addEventListener","removeEventListener","chatGroups","map","msg","_msg$isLike","id","role","msgs","invocationId","allFiles","fileData","isLike","groups","forEach","isRealUserQuery","functionResponse","functionCall","lastGroup","isLastGroupAgent","push","_msg$isLike2","concat","g","reduce","acc","m","_toConsumableArray","renderBotGroup","group","isLastGroup","botMsg","children","i","text","showDetail","mergedToolMap","Map","callId","has","set","_objectSpread","_mergedToolMap$get","get","tool","name","args","nodes","currentProcessItems","processedToolIds","Set","flushProcessItems","type","items","key","mergedMsg","content","add","parts","part","partIdx","includes","titleMap","planning","replanning","reasoning","action_log","process_text","title","trim","lastNode","fullTextToCopy","filter","join","lastBotMsg","hasProcess","some","n","isGroupLoading","node","idx","defaultOpen","showBadge","findIndex","successBadge","fileSection","fileHeader","display","flexWrap","gap","file","index","isLastBotMsg","metaFooter","actionIcons","onClick","success","timestamp","renderUserGroup","userMsg","userContainer","align","marginBottom","card","renderSuggestions","suggestionWrapper","item","suggestion","suggestContent","icon","iconPosition","whiteSpace","height","wordWrap","textAlign","padding","lineHeight","wrapper","list","ref"],"sources":["../../../../src/components/XAdkChatbot/index.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useRef } from \"react\";\nimport { Button, Flex, Tooltip, message as antdMessage } from \"antd\";\nimport clsx from \"clsx\";\nimport {\n SwapRightOutlined,\n ReloadOutlined,\n CopyOutlined,\n InfoCircleOutlined,\n CheckCircleFilled,\n} from \"@ant-design/icons\";\nimport copy from \"copy-to-clipboard\";\nimport { useStyles } from \"./styles\";\nimport MarkdownRender from \"./components/MarkdownRender\";\nimport FunctionCallRender from \"./components/FunctionCallRender\";\nimport FileGallery from \"../FileGallery\";\nimport XAiThoughtChain from \"@/components/XAiThoughtChain\";\nimport { parseAgentMessage } from \"@/utils\";\nimport type { IMessage, XAdkChatbotProps, ChatGroup } from \"@/types\";\nimport type { ThoughtChainItemType } from \"@/types/XAiThoughtChain\";\n\nconst scrollThreshold = 10;\n\n/**\n * XAdkChatbot - 增强版聊天组件\n *\n * 新增功能:\n * - ✅ 自动消息分组 (enableGrouping)\n * - ✅ 自动解析思维链 (enableProcessParsing)\n * - ✅ 文件展示 (FileGallery)\n * - ✅ 操作栏 (重试/复制/日志)\n * - ✅ 欢迎页面 (agentName/agentIcon/description)\n */\nconst XAdkChatbot: React.FC<XAdkChatbotProps> = ({\n loading = false,\n prologue,\n suggestions,\n messages,\n showFnCallDetail,\n onConfirm,\n onSuggest,\n showRetry,\n showCopy,\n showLog,\n onRetry,\n onCopy,\n onShowLog,\n actions,\n className,\n style,\n // welcome = null,\n enableGrouping = true,\n enableProcessParsing = true,\n parseOptions,\n initialized = false,\n}) => {\n const styles = useStyles();\n const listRef = useRef<HTMLDivElement>(null);\n const lastScrollTopRef = useRef(0);\n const userHasScrolledRef = useRef(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n const prevInitializedRef = useRef(false);\n\n // 初始化完成时滚动到底部\n useEffect(() => {\n if (!initialized) return;\n if (!messages.length) return;\n if (prevInitializedRef.current) return; // 只在第一次 initialized+messages 就绪时触发\n prevInitializedRef.current = true;\n // 推迟到浏览器完成 paint 后执行,确保 DOM 高度已撑开\n const timer = setTimeout(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: \"auto\" });\n }, 0);\n return () => clearTimeout(timer);\n }, [initialized, messages]);\n\n // 流式输出时滚动到底部\n useEffect(() => {\n if (!loading) return;\n if (userHasScrolledRef.current) return;\n messagesEndRef.current?.scrollIntoView({ behavior: \"smooth\" });\n }, [loading, messages]);\n\n // 处理滚动事件\n const handleScroll = useCallback(() => {\n const el = listRef.current;\n if (!el) return;\n const currentTop = el.scrollTop;\n\n if (currentTop < lastScrollTopRef.current) {\n userHasScrolledRef.current = true;\n }\n\n const isAtBottom =\n Math.abs(el.scrollHeight - currentTop - el.clientHeight) <=\n scrollThreshold;\n if (isAtBottom) {\n userHasScrolledRef.current = false;\n }\n\n lastScrollTopRef.current = currentTop;\n }, []);\n\n useEffect(() => {\n const listElement = listRef.current;\n if (!listElement) return;\n\n listElement.addEventListener(\"scroll\", handleScroll);\n return () => {\n listElement.removeEventListener(\"scroll\", handleScroll);\n };\n }, [handleScroll]);\n\n // ========== 消息分组逻辑 ==========\n const chatGroups = useMemo(() => {\n if (!enableGrouping) {\n // 不分组,每条消息独立\n return messages.map((msg) => ({\n id: msg.id,\n role: msg.role,\n msgs: [msg],\n invocationId: msg.invocationId,\n allFiles: msg.fileData || [],\n isLike: msg.isLike ?? 0,\n }));\n }\n\n const groups: ChatGroup[] = [];\n messages.forEach((msg) => {\n // 过滤 followup 消息\n if ((msg as any).role === \"followup\") return;\n\n const isRealUserQuery =\n msg.role === \"user\" && !msg.functionResponse && !msg.functionCall;\n const lastGroup = groups[groups.length - 1];\n const isLastGroupAgent = lastGroup?.role === \"bot\";\n\n if (isLastGroupAgent && !isRealUserQuery) {\n // 合并到上一个 bot 分组\n lastGroup.msgs.push(msg);\n if (msg.invocationId) lastGroup.invocationId = msg.invocationId;\n // 更新 isLike: 取最新的非0值,或保持当前值\n if (msg.isLike && msg.isLike !== 0) {\n lastGroup.isLike = msg.isLike;\n }\n } else {\n // 创建新分组\n groups.push({\n id: msg.id || `group-${groups.length}`,\n role: isRealUserQuery ? \"user\" : \"bot\",\n msgs: [msg],\n invocationId: msg.invocationId,\n allFiles: [],\n isLike: msg.isLike ?? 0,\n });\n }\n });\n\n // 合并文件\n groups.forEach((g) => {\n g.allFiles = g.msgs.reduce(\n (acc, m) => [...acc, ...(m.fileData || [])],\n [] as any[],\n );\n });\n\n return groups;\n }, [messages, enableGrouping]);\n\n // ========== 渲染 Bot 消息组 ==========\n const renderBotGroup = useCallback(\n (group: ChatGroup, isLastGroup: boolean) => {\n const { msgs, allFiles } = group;\n\n if (!enableProcessParsing) {\n // 不解析 process,简单渲染\n return (\n <div key={group.id} className={styles.botMsg}>\n {msgs.map((msg, i) => {\n if (msg.text) {\n return (\n <MarkdownRender key={`${msg.id}-${i}`} text={msg.text} />\n );\n }\n if (msg.functionCall) {\n return (\n <FunctionCallRender\n key={`${msg.id}-${i}`}\n msg={msg}\n showDetail={showFnCallDetail}\n onConfirm={onConfirm}\n />\n );\n }\n return null;\n })}\n </div>\n );\n }\n\n // ========== 解析 Process 内容 ==========\n\n // 1. 合并工具调用\n const mergedToolMap = new Map<string, IMessage>();\n msgs.forEach((msg) => {\n if (msg.functionCall) {\n const callId = msg.functionCall.id || \"\";\n if (!mergedToolMap.has(callId)) {\n mergedToolMap.set(callId, { ...msg });\n } else {\n mergedToolMap.set(callId, {\n ...(mergedToolMap.get(callId) ?? {}),\n ...msg,\n });\n }\n } else if (msg.functionResponse) {\n const callId = msg.functionResponse.id || \"\";\n if (mergedToolMap.has(callId)) {\n const tool = mergedToolMap.get(callId);\n if (tool) tool.functionResponse = msg.functionResponse;\n } else {\n mergedToolMap.set(callId, {\n ...msg,\n functionCall: {\n id: callId,\n name: msg.functionResponse.name || \"Unknown\",\n args: {},\n },\n });\n }\n }\n });\n\n // 2. 解析文本消息中的 process 内容\n type RenderNode =\n | { type: \"text\"; content: string; key: string }\n | { type: \"process\"; items: ThoughtChainItemType[]; key: string };\n\n const nodes: RenderNode[] = [];\n let currentProcessItems: ThoughtChainItemType[] = [];\n const processedToolIds = new Set<string>();\n\n const flushProcessItems = () => {\n if (currentProcessItems.length > 0) {\n nodes.push({\n type: \"process\",\n items: [...currentProcessItems],\n key: `process-${nodes.length}`,\n });\n currentProcessItems = [];\n }\n };\n\n msgs.forEach((msg) => {\n // 处理工具调用\n if (msg.functionCall) {\n const callId = msg.functionCall.id || \"\";\n if (!processedToolIds.has(callId)) {\n const mergedMsg = mergedToolMap.get(callId);\n if (mergedMsg) {\n currentProcessItems.push({\n type: \"tool\",\n key: `tool-${callId}`,\n content: \"\",\n msg: mergedMsg,\n });\n processedToolIds.add(callId);\n }\n }\n }\n // 处理文本消息\n else if (msg.text && !msg.functionResponse) {\n const parts = parseAgentMessage(msg.text, parseOptions as any);\n\n parts.forEach((part, partIdx) => {\n // process 内容放入 currentProcessItems\n if (\n [\n \"planning\",\n \"replanning\",\n \"reasoning\",\n \"action_log\",\n \"process_text\",\n ].includes(part.type)\n ) {\n const titleMap: Record<string, string> = {\n planning: \"任务规划\",\n replanning: \"重新规划\",\n reasoning: \"推理分析\",\n action_log: \"行动记录\",\n process_text: \"过程分析\",\n };\n\n currentProcessItems.push({\n type: \"text\",\n key: `${msg.id}-${partIdx}`,\n content: part.content,\n title: titleMap[part.type] || \"分析\",\n });\n }\n // 普通文本内容\n else {\n flushProcessItems();\n if (part.content.trim()) {\n const lastNode = nodes[nodes.length - 1];\n if (lastNode?.type === \"text\") {\n // 合并到上一个文本节点\n lastNode.content += \"\\n\\n\" + part.content;\n } else {\n nodes.push({\n type: \"text\",\n content: part.content,\n key: `text-${msg.id}-${partIdx}`,\n });\n }\n }\n }\n });\n }\n });\n\n // 最后flush一次\n flushProcessItems();\n\n // 3. 准备操作栏数据\n const fullTextToCopy = msgs\n .filter((m) => !m.functionCall && !m.functionResponse)\n .map((m) => m.text || \"\")\n .join(\"\");\n\n const lastBotMsg = msgs[msgs.length - 1];\n const hasProcess = nodes.some((n) => n.type === \"process\");\n const isGroupLoading = loading && isLastGroup;\n\n // 4. 渲染\n return (\n <div key={group.id} className={styles.botMsg}>\n {nodes.map((node, idx) => {\n if (node.type === \"process\") {\n return (\n <XAiThoughtChain\n key={node.key}\n loading={isGroupLoading}\n title=\"思维链已完成\"\n items={node.items}\n showFnCallDetail={showFnCallDetail}\n onConfirm={onConfirm}\n defaultOpen={isGroupLoading}\n />\n );\n }\n\n // 文本节点\n const showBadge =\n hasProcess && nodes.findIndex((n) => n.type === \"text\") === idx;\n return (\n <div key={node.key}>\n {showBadge && (\n <div className={styles.successBadge}>\n <CheckCircleFilled /> 已完成所有规划任务\n </div>\n )}\n <MarkdownRender text={node.content} />\n </div>\n );\n })}\n\n {/* 文件展示 */}\n {allFiles.length > 0 && (\n <div className={styles.fileSection}>\n <div className={styles.fileHeader}>\n <span>生成文件 ({allFiles.length})</span>\n </div>\n <div style={{ display: \"flex\", flexWrap: \"wrap\", gap: \"8px\" }}>\n {allFiles.map((file, index) => (\n <FileGallery key={index} file={file} />\n ))}\n </div>\n </div>\n )}\n\n {/* 操作栏 */}\n {!isGroupLoading &&\n (actions\n ? actions({ message: group, isLastBotMsg: isLastGroup })\n : (showRetry || showCopy || showLog) && (\n <div className={styles.metaFooter}>\n <Flex gap={16} className={styles.actionIcons}>\n {showRetry && isLastGroup && (\n <Tooltip title=\"重新生成\">\n <ReloadOutlined onClick={onRetry} />\n </Tooltip>\n )}\n {showCopy && (\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n onClick={() => {\n copy(fullTextToCopy);\n antdMessage.success(\"复制成功\");\n onCopy?.(fullTextToCopy);\n }}\n />\n </Tooltip>\n )}\n {showLog && lastBotMsg?.invocationId && (\n <Tooltip title=\"查看日志\">\n <InfoCircleOutlined\n onClick={() =>\n onShowLog?.(\n lastBotMsg.invocationId!,\n lastBotMsg.timestamp,\n )\n }\n />\n </Tooltip>\n )}\n </Flex>\n </div>\n ))}\n </div>\n );\n },\n [\n enableProcessParsing,\n parseOptions,\n showFnCallDetail,\n onConfirm,\n loading,\n showRetry,\n showCopy,\n showLog,\n onRetry,\n onCopy,\n onShowLog,\n actions,\n styles,\n ],\n );\n\n // ========== 渲染用户消息组 ==========\n const renderUserGroup = useCallback(\n (group: ChatGroup) => {\n return (\n <div key={group.id} className={styles.userMsg}>\n {group.msgs.map((m, i) => (\n <div key={m.id || i} className={styles.userContainer}>\n {/* 文件展示 */}\n {m.fileData && m.fileData.length > 0 && (\n <>\n {m.fileData.map((file, index) => (\n <FileGallery\n key={index}\n file={file}\n align=\"left\"\n style={{ marginBottom: \"16px\" }}\n />\n ))}\n </>\n )}\n {/* 文本展示 */}\n {m.text && <div className={styles.card}>{m.text}</div>}\n </div>\n ))}\n </div>\n );\n },\n [styles],\n );\n\n // ========== 欢迎页面 ==========\n // const isEmpty =\n // messages.length === 0 &&\n // !prologue &&\n // (!suggestions || suggestions.length === 0);\n\n // const renderWelcome = () => {\n // if (!isEmpty) return null;\n\n // return (\n // <>\n // {welcome ?? (\n // <div className={styles.welcomeWrapper}>\n // {agentIcon && (\n // <img src={agentIcon} alt=\"icon\" className={styles.welcomeIcon} />\n // )}\n // {agentName && (\n // <div className={styles.welcomeTitle}>{agentName}</div>\n // )}\n // {description && (\n // <div className={styles.welcomeDesc}>{description}</div>\n // )}\n // </div>\n // )}\n // </>\n // );\n // };\n\n // ========== 渲染建议问题 ==========\n const renderSuggestions = () => {\n if (!suggestions || suggestions.length === 0) return null;\n\n return (\n <div className={styles.suggestionWrapper}>\n {suggestions.map((item) => (\n <div key={item} className={styles.suggestion}>\n <div className={styles.suggestContent}>\n <Button\n type=\"text\"\n icon={<SwapRightOutlined />}\n iconPosition=\"end\"\n onClick={() => {\n if (!item) return;\n onSuggest?.(item);\n }}\n style={{\n whiteSpace: \"normal\",\n height: \"auto\",\n wordWrap: \"break-word\",\n textAlign: \"left\",\n padding: \"4px 15px\",\n lineHeight: \"1.5\",\n }}\n >\n {item}\n </Button>\n </div>\n </div>\n ))}\n </div>\n );\n };\n\n return (\n <div className={clsx(styles.wrapper, className)} style={style}>\n <div className={styles.list} ref={listRef}>\n {/* 开场白 */}\n {prologue && (\n <div className={styles.prologue}>\n <MarkdownRender text={prologue} />\n </div>\n )}\n\n {/* 欢迎页面 */}\n {/* {renderWelcome()} */}\n\n {/* 消息列表 */}\n {chatGroups.map((group, idx) =>\n group.role === \"user\"\n ? renderUserGroup(group)\n : renderBotGroup(group, idx === chatGroups.length - 1),\n )}\n\n {/* 建议问题 */}\n {renderSuggestions()}\n\n <div ref={messagesEndRef} />\n </div>\n </div>\n );\n};\n\nexport default XAdkChatbot;\n"],"mappings":"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"}
@@ -97,9 +97,9 @@ export var 带会话列表 = {
97
97
  },
98
98
  args: {
99
99
  url: "https://m-poc-dev.zaxline.com",
100
- token: "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iLCJhdWQiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iLCJuYmYiOjE3NzM2NDk5MjIsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MzY1NzEyMiwiaWF0IjoxNzczNjQ5OTIyLCJqdGkiOiI1NzY3Mjk3MC05ZmZlLTQzYmYtOTBmMy03ZDlmNDY4OTZjMGEiLCJjbGllbnRfaWQiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8ifQ.ojer50ubE3oyBxPDW9JsZpQkzuvlbHYtLgl4jpdnUB1GSnlhNTPw9tShDuoLVjrKeeSVYsqfNTk-JN4xmYUxHs4cdy0-Sn6j2oLfbFYXI1p_8oQqOllhPKJWQA-JiOWMjm6iHpYOnotx14oGfgO6EKD2I9kLvRkje0DuEVKsj22s_XEimpfMCLtxCgn-lzmIVr90MU_1jt01q7MnPOA35rKTPlVLUg2Mw3a7JsmBPSvR25uDiX0x_ueG3riSko1cY37TXuSPIuBsD6N6aptv1RZ25-pGt6DjP3QOKnLfLc9N7_jIIcfbRzYYOOxp0Y4ond6fF5wWZI8S1wckZbBHiA",
100
+ token: "eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiLCJhdWQiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiLCJuYmYiOjE3NzQyNDg2OTIsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3NDI1NTg5MiwiaWF0IjoxNzc0MjQ4NjkyLCJqdGkiOiJmNGJiZGQxOS03OWRjLTRjZGEtOGMwYy1jZTllNWVhOTJmYzMiLCJjbGllbnRfaWQiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkifQ.AqjF0Q5Gsu25xArL9L5YDwWbHO1ZHxmr86eZSTyM-jumtzc6oLWYBIYNkRX9iXkmRryM09a5Xyn2ZjYSSomu0mudHxAK6qNHCtsIsJctxUvWL5nb-9r2DdH1lsjaD6jLOlv4DePO-ww_QOlhElSPkTO4858VWXSQNqQgD2tFOw1bFlFZvqTWUZkdS-l17tHceupBlX_VR8qn5otJaZAYaQS58uUQ3ry5AGufIYqrKeAWctmwhIX5P1D0TbIjGw91SlYds7VZrkMgMOe4DJQVjwcVfg4OnFxDwXXYjIE8ikHczwt4xFRPnRIM4W3huGdejFS04QOn95a7vdwy_Dwqbw",
101
101
  config: {
102
- appNo: "MFX5TxlheIKbekZHKoeOVNlo"
102
+ appNo: "D61c91a3XJdS8r7Dy4uqXnZi"
103
103
  }
104
104
  }
105
105
  };
@@ -1 +1 @@
1
- {"version":3,"names":["Button","Space","XAdkProvider","useChatState","useChatActions","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","meta","title","component","parameters","layout","docs","description","tags","argTypes","url","control","token","默认布局","render","args","style","height","children","config","DefaultLayout","showSessionList","allowUpload","clearBtnShow","story","appNo","带会话列表","header","showFnCallDetail","自定义布局","display","flex","flexDirection","padding","background","color","borderBottom","margin","fontSize","overflow","Messages","Sender","CustomStatsBar","_useChatState","messages","loading","appInfo","_useChatActions","chat","quickQuestions","justifyContent","alignItems","marginBottom","length","appName","wrap","map","q","i","size","onClick","text","disabled","使用Hooks","Chatbot","简化界面","width","maxWidth","borderRadius","boxShadow"],"sources":["../../../../src/components/XAdkProvider/XAdkProvider.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { Button, Space } from \"antd\";\nimport XAdkProvider from \"./index\";\nimport { useChatState, useChatActions } from \"./context\";\n\nconst meta: Meta<typeof XAdkProvider> = {\n title: \"AI组件/XAdkProvider 对话容器\",\n component: XAdkProvider,\n parameters: {\n layout: \"fullscreen\",\n docs: {\n description: {\n component: `\n# XAdkProvider - 新一代 Compound Components 架构\n\n基于 Compound Components 模式的 AI 聊天 SDK,提供完全可组合的聊天界面。\n\n## 核心特性\n\n- 🧩 **完全可组合**: 自由组合子组件,构建任意布局\n- 🪝 **Hooks 访问**: 通过 Hooks 轻松访问状态和方法\n- ⚡ **性能优化**: Context 三层分离,避免不必要的 rerender\n- 🔙 **向后兼容**: 旧 API 完全保留,平滑升级\n- 📘 **TypeScript**: 完整的类型支持\n\n## 可用组件\n\n- \\`XAdkProvider.DefaultLayout\\` - 默认布局 (类似 ChatGPT/DeepSeek)\n- \\`XAdkProvider.Chatbot\\` - 完整的聊天界面 (Messages + Sender)\n- \\`XAdkProvider.Messages\\` - 消息列表\n- \\`XAdkProvider.Sender\\` - 输入框\n- \\`XAdkProvider.Sidebar\\` - 会话列表\n- \\`XAdkProvider.Header\\` - 可选头部\n\n## 可用 Hooks\n\n- \\`useChatState()\\` - 访问聊天状态\n- \\`useChatActions()\\` - 访问聊天方法\n- \\`useSession()\\` - 访问会话管理\n\n## 配置说明\n\n请在使用前配置:\n- \\`url\\`: AI 服务地址 (默认: window.location.origin)\n- \\`token\\`: 认证令牌 (必填)\n- \\`config.appNo\\`: 应用编号 (必填)\n `,\n },\n },\n },\n tags: [\"autodocs\"],\n argTypes: {\n url: {\n description: \"AI 服务地址\",\n control: \"text\",\n },\n token: {\n description: \"认证令牌\",\n control: \"text\",\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// ============================================\n// 示例 1: 默认布局 (类似 ChatGPT)\n// ============================================\nexport const 默认布局: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.DefaultLayout\n showSessionList={false}\n allowUpload={true}\n clearBtnShow={true}\n />\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n默认布局,类似 ChatGPT 的界面风格。\n\n\\`\\`\\`tsx\n<XAdkProvider url=\"...\" token=\"...\" config={{ appNo: 'xxx' }}>\n <XAdkProvider.DefaultLayout\n showSessionList={false}\n allowUpload={true}\n clearBtnShow={true}\n />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiLCJhdWQiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiLCJuYmYiOjE3NzI3ODU3OTMsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc5Mjk5MywiaWF0IjoxNzcyNzg1NzkzLCJqdGkiOiI4MmFjMGZmZS1lZDBlLTRiMjMtYWE3NS04NmUzZjA1OTQ2NmEiLCJjbGllbnRfaWQiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMifQ.bBipIkOwu4BQqtH_ijT1V12yw5SnDpu7HAZhWrzjRSF7NUlqXr3m25f1VU_jiE9wyHO0Pj0VMMox1xVrE90JT9zgFL2sa4IDLpoHl6B2sr-3pY8WsvTLnk9PBSyTfOjmuSRwNDZyQYx0p4xJKd0yhf5Acfh5vuvH8pW7ksGpEXKvCLqc9tpeLytE1qZm_eSWt_rjTxDzvwMv33RAWO_fEigezoXfOe8ALtWpIDXEoza6cI--2buVM6-ZAFJHwe0CA_rx5E5H7QpmonUlZZhu9JVEL7HCc76MWLnuRP9TlNuicsR3JrYvkZ8nkG4oiBSWaHAgOVizGXaf2Elr7edTNA\",\n config: {\n appNo: \"wTXH8NReD6NIhWKVfBQCxWvS\",\n },\n },\n};\n\n// ============================================\n// 示例 2: 带会话列表 (类似 DeepSeek)\n// ============================================\nexport const 带会话列表: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.DefaultLayout\n header={<></>}\n showSessionList={true}\n allowUpload={true}\n clearBtnShow={false}\n showFnCallDetail={true}\n />\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n带会话列表的布局,类似 DeepSeek/元宝 的界面风格。\n\n左侧显示历史会话列表,右侧显示聊天区域。\n\n特点:\n- ✅ 左右布局: 左侧 280px 宽的会话列表,右侧聊天区域\n- ✅ 会话管理: 支持新建、切换、重命名、删除会话\n- ✅ 自动加载: 会话列表自动加载历史记录\n- ✅ 响应式: 窄屏自动切换到侧边栏模式\n\n\\`\\`\\`tsx\n<XAdkProvider\n url=\"...\"\n token=\"...\"\n config={{\n appNo: 'xxx',\n session: {\n showSessionList: true,\n }\n }}\n>\n <XAdkProvider.DefaultLayout\n showSessionList={true}\n allowUpload={true}\n />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iLCJhdWQiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iLCJuYmYiOjE3NzM2NDk5MjIsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MzY1NzEyMiwiaWF0IjoxNzczNjQ5OTIyLCJqdGkiOiI1NzY3Mjk3MC05ZmZlLTQzYmYtOTBmMy03ZDlmNDY4OTZjMGEiLCJjbGllbnRfaWQiOiJNRlg1VHhsaGVJS2Jla1pIS29lT1ZObG8ifQ.ojer50ubE3oyBxPDW9JsZpQkzuvlbHYtLgl4jpdnUB1GSnlhNTPw9tShDuoLVjrKeeSVYsqfNTk-JN4xmYUxHs4cdy0-Sn6j2oLfbFYXI1p_8oQqOllhPKJWQA-JiOWMjm6iHpYOnotx14oGfgO6EKD2I9kLvRkje0DuEVKsj22s_XEimpfMCLtxCgn-lzmIVr90MU_1jt01q7MnPOA35rKTPlVLUg2Mw3a7JsmBPSvR25uDiX0x_ueG3riSko1cY37TXuSPIuBsD6N6aptv1RZ25-pGt6DjP3QOKnLfLc9N7_jIIcfbRzYYOOxp0Y4ond6fF5wWZI8S1wckZbBHiA\",\n config: {\n appNo: \"MFX5TxlheIKbekZHKoeOVNlo\",\n },\n },\n};\n\n// ============================================\n// 示例 3: 自定义布局\n// ============================================\nexport const 自定义布局: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <div style={{ display: \"flex\", height: \"100%\" }}>\n {/* 左侧会话列表 */}\n {/* <div\n style={{\n width: 300,\n borderRight: \"1px solid #f0f0f0\",\n background: \"#fafafa\",\n }}\n >\n <XAdkProvider.Sidebar />\n </div> */}\n\n {/* 右侧聊天区 */}\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {/* 自定义头部 */}\n <div\n style={{\n padding: \"16px 24px\",\n background: \"linear-gradient(135deg, #667eea 0%, #764ba2 100%)\",\n color: \"white\",\n borderBottom: \"1px solid rgba(255,255,255,0.1)\",\n }}\n >\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>🤖 AI 智能助手</h2>\n </div>\n\n {/* 消息区 */}\n <div style={{ flex: 1, overflow: \"hidden\", background: \"#f9fafb\" }}>\n <XAdkProvider.Messages />\n </div>\n\n {/* 输入区 */}\n <XAdkProvider.Sender allowUpload={true} clearBtnShow={true} />\n </div>\n </div>\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n完全自定义的布局,展示 Compound Components 的灵活性。\n\n可以任意组合 Sidebar、Messages、Sender 等组件。\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzMwNjI5MjUsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MzA3MDEyNSwiaWF0IjoxNzczMDYyOTI1LCJqdGkiOiI0YmY3MjcxOS03NzNkLTRkZGYtOGYzNC01YjAwNjA5MWE3Y2IiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.AcWWnsWZVHvvpbT9IG64oo6mNNUFDKuaTMSCRMUvgiRyfn8f4Y64GBF_VR_XhgvNgNczXx5pXlU5AEXlvwA3RXv5Voy5Vl1dvyrLOtjZivnRJVeDVzn8Af57cXKE9QBZAS94bUMAtfmZmvqer4Lw6wuFNSg6G32BCpQH6ifR8zei3scf1Gcs0QXr00KcT3dFROmAzJscJC_KnXxGx_729BlQqupdJ05KEGHDIokqJNy5Ev_40IPmW-ZDJprXpEdReHfHnPuaUgGQRAJEW2yTf2OsyNenOwA9l0iKYK1ENDnBpsr08VUgMhJBKq-quzP5AE3eLIn-3KR0O-yT4lyBiQ\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n\n// ============================================\n// 示例 4: 使用 Hooks\n// ============================================\nconst CustomStatsBar = () => {\n const { messages, loading, appInfo } = useChatState();\n const { chat } = useChatActions();\n\n const quickQuestions = [\"介绍一下你自己\", \"你能帮我做什么?\", \"如何开始使用?\"];\n\n return (\n <div\n style={{\n padding: \"16px 20px\",\n background: \"white\",\n borderBottom: \"1px solid #f0f0f0\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginBottom: \"12px\",\n }}\n >\n <Space>\n <span style={{ fontSize: \"12px\", color: \"#999\" }}>\n 💬 消息数: <strong>{messages.length}</strong>\n </span>\n <span style={{ fontSize: \"12px\", color: \"#999\" }}>\n 🤖 {appInfo?.appName || \"加载中...\"}\n </span>\n </Space>\n <span\n style={{ fontSize: \"12px\", color: loading ? \"#1890ff\" : \"#52c41a\" }}\n >\n {loading ? \"● 生成中...\" : \"● 就绪\"}\n </span>\n </div>\n <div style={{ fontSize: \"12px\", color: \"#666\", marginBottom: \"8px\" }}>\n 💡 快捷问题:\n </div>\n <Space wrap>\n {quickQuestions.map((q, i) => (\n <Button\n key={i}\n size=\"small\"\n onClick={() => chat({ text: q })}\n disabled={loading}\n >\n {q}\n </Button>\n ))}\n </Space>\n </div>\n );\n};\n\nexport const 使用Hooks: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <div\n style={{ display: \"flex\", flexDirection: \"column\", height: \"100%\" }}\n >\n <CustomStatsBar />\n <div style={{ flex: 1 }}>\n <XAdkProvider.Chatbot />\n </div>\n </div>\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n使用 \\`useChatState\\` 和 \\`useChatActions\\` Hooks 访问状态和方法。\n\n可以在任意子组件中使用这些 Hooks 来访问聊天数据和操作。\n\n\\`\\`\\`tsx\nfunction CustomStatsBar() {\n const { messages, loading } = useChatState();\n const { chat } = useChatActions();\n\n return (\n <div>\n <p>消息数: {messages.length}</p>\n <button onClick={() => chat({ text: 'Hello' })}>\n 发送\n </button>\n </div>\n );\n}\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3NjE1OTQsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc2ODc5NCwiaWF0IjoxNzcyNzYxNTk0LCJqdGkiOiI2M2IyMjRkNC1iODY3LTQzNjYtYTM5ZC1hZjNmOWQ0M2YyZmMiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.QNI4bD6MjIIvv-_SFxYEOiNv9304Ps5WF3b8_qmi3YIrqJQiaJ-iT1_fENpe9dD25RXcpgIv2Xnz9cI3Lz3gHfPKwoefijhrD7_Ye-9C5ztM2OI5pfoUurc1xPvjS7FGrTMZHNbpIFXyPoDAxtzGt-hLoQAEhBhLib8lLAbAQACmBOYy3KGwJg4sSFvbLkGWgqkH2aqC8MdH50ce35leybbEJu7ImithH3rj4E2oF6EqTb3vK181DFooEJ9E_LaC_hrw8zqGh9PSJah1rO3nxUDOPnz946RLKUi0xLOtz42l6qY2nUFsd9axYunGnk2ds5gg-PcBZN_X_aa-w7SLnw\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n\n// ============================================\n// 示例 5: 简化的 Chatbot\n// ============================================\nexport const 简化界面: Story = {\n render: (args) => (\n <div\n style={{\n height: \"100vh\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"#f5f5f5\",\n padding: \"40px\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n maxWidth: \"900px\",\n height: \"700px\",\n background: \"white\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n boxShadow: \"0 8px 24px rgba(0,0,0,0.12)\",\n }}\n >\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.Chatbot />\n </XAdkProvider>\n </div>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n最简化的聊天界面,只包含消息列表和输入框。\n\n适合嵌入到其他页面或作为对话窗口使用。\n\n\\`\\`\\`tsx\n<XAdkProvider url=\"...\" token=\"...\" config={{ appNo: 'xxx' }}>\n <XAdkProvider.Chatbot />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3NjE1OTQsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc2ODc5NCwiaWF0IjoxNzcyNzYxNTk0LCJqdGkiOiI2M2IyMjRkNC1iODY3LTQzNjYtYTM5ZC1hZjNmOWQ0M2YyZmMiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.QNI4bD6MjIIvv-_SFxYEOiNv9304Ps5WF3b8_qmi3YIrqJQiaJ-iT1_fENpe9dD25RXcpgIv2Xnz9cI3Lz3gHfPKwoefijhrD7_Ye-9C5ztM2OI5pfoUurc1xPvjS7FGrTMZHNbpIFXyPoDAxtzGt-hLoQAEhBhLib8lLAbAQACmBOYy3KGwJg4sSFvbLkGWgqkH2aqC8MdH50ce35leybbEJu7ImithH3rj4E2oF6EqTb3vK181DFooEJ9E_LaC_hrw8zqGh9PSJah1rO3nxUDOPnz946RLKUi0xLOtz42l6qY2nUFsd9axYunGnk2ds5gg-PcBZN_X_aa-w7SLnw\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n"],"mappings":"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"}
1
+ {"version":3,"names":["Button","Space","XAdkProvider","useChatState","useChatActions","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","meta","title","component","parameters","layout","docs","description","tags","argTypes","url","control","token","默认布局","render","args","style","height","children","config","DefaultLayout","showSessionList","allowUpload","clearBtnShow","story","appNo","带会话列表","header","showFnCallDetail","自定义布局","display","flex","flexDirection","padding","background","color","borderBottom","margin","fontSize","overflow","Messages","Sender","CustomStatsBar","_useChatState","messages","loading","appInfo","_useChatActions","chat","quickQuestions","justifyContent","alignItems","marginBottom","length","appName","wrap","map","q","i","size","onClick","text","disabled","使用Hooks","Chatbot","简化界面","width","maxWidth","borderRadius","boxShadow"],"sources":["../../../../src/components/XAdkProvider/XAdkProvider.stories.tsx"],"sourcesContent":["import type { Meta, StoryObj } from \"@storybook/react-vite\";\nimport { Button, Space } from \"antd\";\nimport XAdkProvider from \"./index\";\nimport { useChatState, useChatActions } from \"./context\";\n\nconst meta: Meta<typeof XAdkProvider> = {\n title: \"AI组件/XAdkProvider 对话容器\",\n component: XAdkProvider,\n parameters: {\n layout: \"fullscreen\",\n docs: {\n description: {\n component: `\n# XAdkProvider - 新一代 Compound Components 架构\n\n基于 Compound Components 模式的 AI 聊天 SDK,提供完全可组合的聊天界面。\n\n## 核心特性\n\n- 🧩 **完全可组合**: 自由组合子组件,构建任意布局\n- 🪝 **Hooks 访问**: 通过 Hooks 轻松访问状态和方法\n- ⚡ **性能优化**: Context 三层分离,避免不必要的 rerender\n- 🔙 **向后兼容**: 旧 API 完全保留,平滑升级\n- 📘 **TypeScript**: 完整的类型支持\n\n## 可用组件\n\n- \\`XAdkProvider.DefaultLayout\\` - 默认布局 (类似 ChatGPT/DeepSeek)\n- \\`XAdkProvider.Chatbot\\` - 完整的聊天界面 (Messages + Sender)\n- \\`XAdkProvider.Messages\\` - 消息列表\n- \\`XAdkProvider.Sender\\` - 输入框\n- \\`XAdkProvider.Sidebar\\` - 会话列表\n- \\`XAdkProvider.Header\\` - 可选头部\n\n## 可用 Hooks\n\n- \\`useChatState()\\` - 访问聊天状态\n- \\`useChatActions()\\` - 访问聊天方法\n- \\`useSession()\\` - 访问会话管理\n\n## 配置说明\n\n请在使用前配置:\n- \\`url\\`: AI 服务地址 (默认: window.location.origin)\n- \\`token\\`: 认证令牌 (必填)\n- \\`config.appNo\\`: 应用编号 (必填)\n `,\n },\n },\n },\n tags: [\"autodocs\"],\n argTypes: {\n url: {\n description: \"AI 服务地址\",\n control: \"text\",\n },\n token: {\n description: \"认证令牌\",\n control: \"text\",\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// ============================================\n// 示例 1: 默认布局 (类似 ChatGPT)\n// ============================================\nexport const 默认布局: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.DefaultLayout\n showSessionList={false}\n allowUpload={true}\n clearBtnShow={true}\n />\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n默认布局,类似 ChatGPT 的界面风格。\n\n\\`\\`\\`tsx\n<XAdkProvider url=\"...\" token=\"...\" config={{ appNo: 'xxx' }}>\n <XAdkProvider.DefaultLayout\n showSessionList={false}\n allowUpload={true}\n clearBtnShow={true}\n />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiLCJhdWQiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiLCJuYmYiOjE3NzI3ODU3OTMsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMiXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc5Mjk5MywiaWF0IjoxNzcyNzg1NzkzLCJqdGkiOiI4MmFjMGZmZS1lZDBlLTRiMjMtYWE3NS04NmUzZjA1OTQ2NmEiLCJjbGllbnRfaWQiOiJ3VFhIOE5SZUQ2TkloV0tWZkJRQ3hXdlMifQ.bBipIkOwu4BQqtH_ijT1V12yw5SnDpu7HAZhWrzjRSF7NUlqXr3m25f1VU_jiE9wyHO0Pj0VMMox1xVrE90JT9zgFL2sa4IDLpoHl6B2sr-3pY8WsvTLnk9PBSyTfOjmuSRwNDZyQYx0p4xJKd0yhf5Acfh5vuvH8pW7ksGpEXKvCLqc9tpeLytE1qZm_eSWt_rjTxDzvwMv33RAWO_fEigezoXfOe8ALtWpIDXEoza6cI--2buVM6-ZAFJHwe0CA_rx5E5H7QpmonUlZZhu9JVEL7HCc76MWLnuRP9TlNuicsR3JrYvkZ8nkG4oiBSWaHAgOVizGXaf2Elr7edTNA\",\n config: {\n appNo: \"wTXH8NReD6NIhWKVfBQCxWvS\",\n },\n },\n};\n\n// ============================================\n// 示例 2: 带会话列表 (类似 DeepSeek)\n// ============================================\nexport const 带会话列表: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.DefaultLayout\n header={<></>}\n showSessionList={true}\n allowUpload={true}\n clearBtnShow={false}\n showFnCallDetail={true}\n />\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n带会话列表的布局,类似 DeepSeek/元宝 的界面风格。\n\n左侧显示历史会话列表,右侧显示聊天区域。\n\n特点:\n- ✅ 左右布局: 左侧 280px 宽的会话列表,右侧聊天区域\n- ✅ 会话管理: 支持新建、切换、重命名、删除会话\n- ✅ 自动加载: 会话列表自动加载历史记录\n- ✅ 响应式: 窄屏自动切换到侧边栏模式\n\n\\`\\`\\`tsx\n<XAdkProvider\n url=\"...\"\n token=\"...\"\n config={{\n appNo: 'xxx',\n session: {\n showSessionList: true,\n }\n }}\n>\n <XAdkProvider.DefaultLayout\n showSessionList={true}\n allowUpload={true}\n />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiLCJhdWQiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiLCJuYmYiOjE3NzQyNDg2OTIsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkiXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3NDI1NTg5MiwiaWF0IjoxNzc0MjQ4NjkyLCJqdGkiOiJmNGJiZGQxOS03OWRjLTRjZGEtOGMwYy1jZTllNWVhOTJmYzMiLCJjbGllbnRfaWQiOiJENjFjOTFhM1hKZFM4cjdEeTR1cVhuWmkifQ.AqjF0Q5Gsu25xArL9L5YDwWbHO1ZHxmr86eZSTyM-jumtzc6oLWYBIYNkRX9iXkmRryM09a5Xyn2ZjYSSomu0mudHxAK6qNHCtsIsJctxUvWL5nb-9r2DdH1lsjaD6jLOlv4DePO-ww_QOlhElSPkTO4858VWXSQNqQgD2tFOw1bFlFZvqTWUZkdS-l17tHceupBlX_VR8qn5otJaZAYaQS58uUQ3ry5AGufIYqrKeAWctmwhIX5P1D0TbIjGw91SlYds7VZrkMgMOe4DJQVjwcVfg4OnFxDwXXYjIE8ikHczwt4xFRPnRIM4W3huGdejFS04QOn95a7vdwy_Dwqbw\",\n config: {\n appNo: \"D61c91a3XJdS8r7Dy4uqXnZi\",\n },\n },\n};\n\n// ============================================\n// 示例 3: 自定义布局\n// ============================================\nexport const 自定义布局: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <div style={{ display: \"flex\", height: \"100%\" }}>\n {/* 左侧会话列表 */}\n {/* <div\n style={{\n width: 300,\n borderRight: \"1px solid #f0f0f0\",\n background: \"#fafafa\",\n }}\n >\n <XAdkProvider.Sidebar />\n </div> */}\n\n {/* 右侧聊天区 */}\n <div style={{ flex: 1, display: \"flex\", flexDirection: \"column\" }}>\n {/* 自定义头部 */}\n <div\n style={{\n padding: \"16px 24px\",\n background: \"linear-gradient(135deg, #667eea 0%, #764ba2 100%)\",\n color: \"white\",\n borderBottom: \"1px solid rgba(255,255,255,0.1)\",\n }}\n >\n <h2 style={{ margin: 0, fontSize: \"18px\" }}>🤖 AI 智能助手</h2>\n </div>\n\n {/* 消息区 */}\n <div style={{ flex: 1, overflow: \"hidden\", background: \"#f9fafb\" }}>\n <XAdkProvider.Messages />\n </div>\n\n {/* 输入区 */}\n <XAdkProvider.Sender allowUpload={true} clearBtnShow={true} />\n </div>\n </div>\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n完全自定义的布局,展示 Compound Components 的灵活性。\n\n可以任意组合 Sidebar、Messages、Sender 等组件。\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzMwNjI5MjUsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3MzA3MDEyNSwiaWF0IjoxNzczMDYyOTI1LCJqdGkiOiI0YmY3MjcxOS03NzNkLTRkZGYtOGYzNC01YjAwNjA5MWE3Y2IiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.AcWWnsWZVHvvpbT9IG64oo6mNNUFDKuaTMSCRMUvgiRyfn8f4Y64GBF_VR_XhgvNgNczXx5pXlU5AEXlvwA3RXv5Voy5Vl1dvyrLOtjZivnRJVeDVzn8Af57cXKE9QBZAS94bUMAtfmZmvqer4Lw6wuFNSg6G32BCpQH6ifR8zei3scf1Gcs0QXr00KcT3dFROmAzJscJC_KnXxGx_729BlQqupdJ05KEGHDIokqJNy5Ev_40IPmW-ZDJprXpEdReHfHnPuaUgGQRAJEW2yTf2OsyNenOwA9l0iKYK1ENDnBpsr08VUgMhJBKq-quzP5AE3eLIn-3KR0O-yT4lyBiQ\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n\n// ============================================\n// 示例 4: 使用 Hooks\n// ============================================\nconst CustomStatsBar = () => {\n const { messages, loading, appInfo } = useChatState();\n const { chat } = useChatActions();\n\n const quickQuestions = [\"介绍一下你自己\", \"你能帮我做什么?\", \"如何开始使用?\"];\n\n return (\n <div\n style={{\n padding: \"16px 20px\",\n background: \"white\",\n borderBottom: \"1px solid #f0f0f0\",\n }}\n >\n <div\n style={{\n display: \"flex\",\n justifyContent: \"space-between\",\n alignItems: \"center\",\n marginBottom: \"12px\",\n }}\n >\n <Space>\n <span style={{ fontSize: \"12px\", color: \"#999\" }}>\n 💬 消息数: <strong>{messages.length}</strong>\n </span>\n <span style={{ fontSize: \"12px\", color: \"#999\" }}>\n 🤖 {appInfo?.appName || \"加载中...\"}\n </span>\n </Space>\n <span\n style={{ fontSize: \"12px\", color: loading ? \"#1890ff\" : \"#52c41a\" }}\n >\n {loading ? \"● 生成中...\" : \"● 就绪\"}\n </span>\n </div>\n <div style={{ fontSize: \"12px\", color: \"#666\", marginBottom: \"8px\" }}>\n 💡 快捷问题:\n </div>\n <Space wrap>\n {quickQuestions.map((q, i) => (\n <Button\n key={i}\n size=\"small\"\n onClick={() => chat({ text: q })}\n disabled={loading}\n >\n {q}\n </Button>\n ))}\n </Space>\n </div>\n );\n};\n\nexport const 使用Hooks: Story = {\n render: (args) => (\n <div style={{ height: \"100vh\" }}>\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <div\n style={{ display: \"flex\", flexDirection: \"column\", height: \"100%\" }}\n >\n <CustomStatsBar />\n <div style={{ flex: 1 }}>\n <XAdkProvider.Chatbot />\n </div>\n </div>\n </XAdkProvider>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n使用 \\`useChatState\\` 和 \\`useChatActions\\` Hooks 访问状态和方法。\n\n可以在任意子组件中使用这些 Hooks 来访问聊天数据和操作。\n\n\\`\\`\\`tsx\nfunction CustomStatsBar() {\n const { messages, loading } = useChatState();\n const { chat } = useChatActions();\n\n return (\n <div>\n <p>消息数: {messages.length}</p>\n <button onClick={() => chat({ text: 'Hello' })}>\n 发送\n </button>\n </div>\n );\n}\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3NjE1OTQsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc2ODc5NCwiaWF0IjoxNzcyNzYxNTk0LCJqdGkiOiI2M2IyMjRkNC1iODY3LTQzNjYtYTM5ZC1hZjNmOWQ0M2YyZmMiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.QNI4bD6MjIIvv-_SFxYEOiNv9304Ps5WF3b8_qmi3YIrqJQiaJ-iT1_fENpe9dD25RXcpgIv2Xnz9cI3Lz3gHfPKwoefijhrD7_Ye-9C5ztM2OI5pfoUurc1xPvjS7FGrTMZHNbpIFXyPoDAxtzGt-hLoQAEhBhLib8lLAbAQACmBOYy3KGwJg4sSFvbLkGWgqkH2aqC8MdH50ce35leybbEJu7ImithH3rj4E2oF6EqTb3vK181DFooEJ9E_LaC_hrw8zqGh9PSJah1rO3nxUDOPnz946RLKUi0xLOtz42l6qY2nUFsd9axYunGnk2ds5gg-PcBZN_X_aa-w7SLnw\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n\n// ============================================\n// 示例 5: 简化的 Chatbot\n// ============================================\nexport const 简化界面: Story = {\n render: (args) => (\n <div\n style={{\n height: \"100vh\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n background: \"#f5f5f5\",\n padding: \"40px\",\n }}\n >\n <div\n style={{\n width: \"100%\",\n maxWidth: \"900px\",\n height: \"700px\",\n background: \"white\",\n borderRadius: \"12px\",\n overflow: \"hidden\",\n boxShadow: \"0 8px 24px rgba(0,0,0,0.12)\",\n }}\n >\n <XAdkProvider url={args.url} token={args.token} config={args.config}>\n <XAdkProvider.Chatbot />\n </XAdkProvider>\n </div>\n </div>\n ),\n parameters: {\n docs: {\n description: {\n story: `\n最简化的聊天界面,只包含消息列表和输入框。\n\n适合嵌入到其他页面或作为对话窗口使用。\n\n\\`\\`\\`tsx\n<XAdkProvider url=\"...\" token=\"...\" config={{ appNo: 'xxx' }}>\n <XAdkProvider.Chatbot />\n</XAdkProvider>\n\\`\\`\\`\n `,\n },\n },\n },\n args: {\n url: \"https://m-poc-dev.zaxline.com\",\n token:\n \"eyJhbGciOiJSUzI1NiJ9.eyJzdWIiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJhdWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iLCJuYmYiOjE3NzI3NjE1OTQsInVzZXJfaWQiOiJWNFNPSG1KbzNaZWE0Uk51ZzdYWDJBPT0iLCJzY29wZSI6WyIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08iXSwiaXNzIjoiaHR0cDovL2htLWF1dGgtc2VydmVyLnhsaW5lLWRldi50ZXN0LnhpbmtlLmJpeiIsImV4cCI6MTc3Mjc2ODc5NCwiaWF0IjoxNzcyNzYxNTk0LCJqdGkiOiI2M2IyMjRkNC1iODY3LTQzNjYtYTM5ZC1hZjNmOWQ0M2YyZmMiLCJjbGllbnRfaWQiOiIzanQyWWJEamV3Vm4yUEhSS2FEZkpFZ08ifQ.QNI4bD6MjIIvv-_SFxYEOiNv9304Ps5WF3b8_qmi3YIrqJQiaJ-iT1_fENpe9dD25RXcpgIv2Xnz9cI3Lz3gHfPKwoefijhrD7_Ye-9C5ztM2OI5pfoUurc1xPvjS7FGrTMZHNbpIFXyPoDAxtzGt-hLoQAEhBhLib8lLAbAQACmBOYy3KGwJg4sSFvbLkGWgqkH2aqC8MdH50ce35leybbEJu7ImithH3rj4E2oF6EqTb3vK181DFooEJ9E_LaC_hrw8zqGh9PSJah1rO3nxUDOPnz946RLKUi0xLOtz42l6qY2nUFsd9axYunGnk2ds5gg-PcBZN_X_aa-w7SLnw\",\n config: {\n appNo: \"3jt2YbDjewVn2PHRKaDfJEgO\",\n },\n },\n};\n"],"mappings":"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"}
@@ -1,8 +1,16 @@
1
- import React from "react";
1
+ import _regeneratorRuntime from "@babel/runtime/helpers/esm/regeneratorRuntime";
2
+ import _asyncToGenerator from "@babel/runtime/helpers/esm/asyncToGenerator";
3
+ import React, { useCallback } from "react";
4
+ import { message, Tooltip, Flex } from "antd";
5
+ import { LikeFilled, LikeOutlined, ReloadOutlined, CopyOutlined } from "@ant-design/icons";
6
+ import copy from "copy-to-clipboard";
2
7
  import XAdkChatbot from "../../XAdkChatbot";
8
+ import DislikeFeedback from "./DislikeFeedBack";
3
9
  import { useChatState } from "../context/ChatStateContext";
4
10
  import { useChatActions } from "../context/ChatActionContext";
5
11
  import { jsx as _jsx } from "react/jsx-runtime";
12
+ import { Fragment as _Fragment } from "react/jsx-runtime";
13
+ import { jsxs as _jsxs } from "react/jsx-runtime";
6
14
  /**
7
15
  * Messages - XAdkProvider 的消息展示组件
8
16
  *
@@ -16,24 +24,128 @@ var Messages = function Messages(_ref) {
16
24
  messages = _useChatState.messages,
17
25
  loading = _useChatState.loading,
18
26
  prologue = _useChatState.prologue,
19
- suggestions = _useChatState.suggestions;
27
+ suggestions = _useChatState.suggestions,
28
+ initialized = _useChatState.initialized,
29
+ showFeedback = _useChatState.showFeedback,
30
+ appInfo = _useChatState.appInfo;
20
31
  var _useChatActions = useChatActions(),
21
32
  suggestChat = _useChatActions.suggestChat,
22
- reChat = _useChatActions.reChat;
33
+ reChat = _useChatActions.reChat,
34
+ likeMessage = _useChatActions.likeMessage;
35
+ var primaryColor = (appInfo === null || appInfo === void 0 ? void 0 : appInfo.appTheme) || "#1677ff";
36
+ var defaultActions = useCallback(function (_ref2) {
37
+ var _group$isLike;
38
+ var group = _ref2.message,
39
+ isLastBotMsg = _ref2.isLastBotMsg;
40
+ // 取该组最后一条 bot 消息的 invocationId 和 isLike 状态
41
+ var lastMsg = group.msgs[group.msgs.length - 1];
42
+ var invocationId = lastMsg === null || lastMsg === void 0 ? void 0 : lastMsg.invocationId;
43
+ var isLikeVal = (_group$isLike = group.isLike) !== null && _group$isLike !== void 0 ? _group$isLike : 0;
44
+ var fullText = group.msgs.filter(function (m) {
45
+ return !m.functionCall && !m.functionResponse;
46
+ }).map(function (m) {
47
+ return m.text || "";
48
+ }).join("");
49
+ return /*#__PURE__*/_jsxs(Flex, {
50
+ gap: 16,
51
+ align: "center",
52
+ style: {
53
+ padding: "4px 0",
54
+ color: "#81858c"
55
+ },
56
+ children: [isLastBotMsg && /*#__PURE__*/_jsx(Tooltip, {
57
+ title: "\u91CD\u65B0\u751F\u6210",
58
+ children: /*#__PURE__*/_jsx(ReloadOutlined, {
59
+ style: {
60
+ cursor: "pointer"
61
+ },
62
+ onClick: reChat
63
+ })
64
+ }), /*#__PURE__*/_jsx(Tooltip, {
65
+ title: "\u590D\u5236\u5185\u5BB9",
66
+ children: /*#__PURE__*/_jsx(CopyOutlined, {
67
+ style: {
68
+ cursor: "pointer"
69
+ },
70
+ onClick: function onClick() {
71
+ copy(fullText);
72
+ message.success("复制成功");
73
+ }
74
+ })
75
+ }), showFeedback && invocationId && /*#__PURE__*/_jsxs(_Fragment, {
76
+ children: [/*#__PURE__*/_jsx(Tooltip, {
77
+ title: "\u8D5E",
78
+ children: isLikeVal === 1 ? /*#__PURE__*/_jsx(LikeFilled, {
79
+ style: {
80
+ color: primaryColor,
81
+ cursor: "pointer"
82
+ }
83
+ }) : /*#__PURE__*/_jsx(LikeOutlined, {
84
+ style: {
85
+ cursor: "pointer"
86
+ },
87
+ onClick: /*#__PURE__*/_asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee() {
88
+ var ok;
89
+ return _regeneratorRuntime().wrap(function _callee$(_context) {
90
+ while (1) switch (_context.prev = _context.next) {
91
+ case 0:
92
+ if (!(isLikeVal !== 0)) {
93
+ _context.next = 3;
94
+ break;
95
+ }
96
+ message.warning("已收到您的反馈,无需重复提交");
97
+ return _context.abrupt("return");
98
+ case 3:
99
+ _context.next = 5;
100
+ return likeMessage(invocationId, 1);
101
+ case 5:
102
+ ok = _context.sent;
103
+ if (ok) message.success("感谢您的反馈");else message.error("反馈失败,请稍后再试");
104
+ case 7:
105
+ case "end":
106
+ return _context.stop();
107
+ }
108
+ }, _callee);
109
+ }))
110
+ })
111
+ }), /*#__PURE__*/_jsx(DislikeFeedback, {
112
+ msg: group,
113
+ activeColor: primaryColor,
114
+ onSubmit: ( /*#__PURE__*/function () {
115
+ var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(formData) {
116
+ var ok;
117
+ return _regeneratorRuntime().wrap(function _callee2$(_context2) {
118
+ while (1) switch (_context2.prev = _context2.next) {
119
+ case 0:
120
+ _context2.next = 2;
121
+ return likeMessage(invocationId, -1, formData);
122
+ case 2:
123
+ ok = _context2.sent;
124
+ if (ok) message.success("已收到您的反馈,我们会努力做得更好");else message.error("反馈失败,请稍后再试");
125
+ return _context2.abrupt("return", ok);
126
+ case 5:
127
+ case "end":
128
+ return _context2.stop();
129
+ }
130
+ }, _callee2);
131
+ }));
132
+ return function (_x) {
133
+ return _ref4.apply(this, arguments);
134
+ };
135
+ }())
136
+ })]
137
+ })]
138
+ });
139
+ }, [reChat, likeMessage, showFeedback, primaryColor]);
23
140
  return /*#__PURE__*/_jsx(XAdkChatbot, {
24
141
  messages: messages,
25
142
  loading: loading,
26
143
  prologue: prologue,
27
144
  suggestions: suggestions,
28
145
  onSuggest: suggestChat
29
- // 操作栏
146
+ // 操作栏:使用外部传入的 actions,否则用内置默认 actions
30
147
  ,
31
- showRetry: true,
32
- showCopy: true,
33
- showLog: false,
34
- onRetry: reChat,
35
- onShowLog: function onShowLog() {},
36
- actions: actions
148
+ actions: actions !== null && actions !== void 0 ? actions : defaultActions
37
149
  // 启用分组和解析
38
150
  ,
39
151
  enableGrouping: true,
@@ -42,7 +154,8 @@ var Messages = function Messages(_ref) {
42
154
  ,
43
155
  parseOptions: {
44
156
  mode: "comment"
45
- }
157
+ },
158
+ initialized: initialized
46
159
  // 样式
47
160
  ,
48
161
  className: className,
@@ -1 +1 @@
1
- {"version":3,"names":["React","XAdkChatbot","useChatState","useChatActions","jsx","_jsx","Messages","_ref","actions","className","style","_useChatState","messages","loading","prologue","suggestions","_useChatActions","suggestChat","reChat","onSuggest","showRetry","showCopy","showLog","onRetry","onShowLog","enableGrouping","enableProcessParsing","parseOptions","mode"],"sources":["../../../../../src/components/XAdkProvider/compound/Messages.tsx"],"sourcesContent":["import React from \"react\";\nimport XAdkChatbot from \"../../XAdkChatbot\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type { ActionProps } from \"@/types\";\n\nexport interface XAdkMessagesProps {\n /** 自定义操作栏渲染 */\n actions?: ActionProps;\n /** 类名 */\n className?: string;\n /** 样式 */\n style?: React.CSSProperties;\n}\n\n/**\n * Messages - XAdkProvider 的消息展示组件\n *\n * 使用 XAdkChatbot 渲染消息列表\n */\nconst Messages: React.FC<XAdkMessagesProps> = ({\n actions,\n className,\n style,\n}) => {\n const { messages, loading, prologue, suggestions } = useChatState();\n const { suggestChat, reChat } = useChatActions();\n\n return (\n <XAdkChatbot\n messages={messages}\n loading={loading}\n prologue={prologue}\n suggestions={suggestions}\n onSuggest={suggestChat}\n // 操作栏\n showRetry\n showCopy\n showLog={false}\n onRetry={reChat}\n onShowLog={() => {}}\n actions={actions}\n // 启用分组和解析\n enableGrouping={true}\n enableProcessParsing={true}\n // 使用注释模式解析\n parseOptions={{ mode: \"comment\" }}\n // 样式\n className={className}\n style={style}\n />\n );\n};\n\nexport default Messages;\n"],"mappings":"AAAA,OAAOA,KAAK,MAAM,OAAO;AACzB,OAAOC,WAAW;AAClB,SAASC,YAAY;AACrB,SAASC,cAAc;AAAuC,SAAAC,GAAA,IAAAC,IAAA;AAY9D;AACA;AACA;AACA;AACA;AACA,IAAMC,QAAqC,GAAG,SAAxCA,QAAqCA,CAAAC,IAAA,EAIrC;EAAA,IAHJC,OAAO,GAAAD,IAAA,CAAPC,OAAO;IACPC,SAAS,GAAAF,IAAA,CAATE,SAAS;IACTC,KAAK,GAAAH,IAAA,CAALG,KAAK;EAEL,IAAAC,aAAA,GAAqDT,YAAY,CAAC,CAAC;IAA3DU,QAAQ,GAAAD,aAAA,CAARC,QAAQ;IAAEC,OAAO,GAAAF,aAAA,CAAPE,OAAO;IAAEC,QAAQ,GAAAH,aAAA,CAARG,QAAQ;IAAEC,WAAW,GAAAJ,aAAA,CAAXI,WAAW;EAChD,IAAAC,eAAA,GAAgCb,cAAc,CAAC,CAAC;IAAxCc,WAAW,GAAAD,eAAA,CAAXC,WAAW;IAAEC,MAAM,GAAAF,eAAA,CAANE,MAAM;EAE3B,oBACEb,IAAA,CAACJ,WAAW;IACVW,QAAQ,EAAEA,QAAS;IACnBC,OAAO,EAAEA,OAAQ;IACjBC,QAAQ,EAAEA,QAAS;IACnBC,WAAW,EAAEA,WAAY;IACzBI,SAAS,EAAEF;IACX;IAAA;IACAG,SAAS;IACTC,QAAQ;IACRC,OAAO,EAAE,KAAM;IACfC,OAAO,EAAEL,MAAO;IAChBM,SAAS,EAAE,SAAAA,UAAA,EAAM,CAAC,CAAE;IACpBhB,OAAO,EAAEA;IACT;IAAA;IACAiB,cAAc,EAAE,IAAK;IACrBC,oBAAoB,EAAE;IACtB;IAAA;IACAC,YAAY,EAAE;MAAEC,IAAI,EAAE;IAAU;IAChC;IAAA;IACAnB,SAAS,EAAEA,SAAU;IACrBC,KAAK,EAAEA;EAAM,CACd,CAAC;AAEN,CAAC;AAED,eAAeJ,QAAQ"}
1
+ {"version":3,"names":["React","useCallback","message","Tooltip","Flex","LikeFilled","LikeOutlined","ReloadOutlined","CopyOutlined","copy","XAdkChatbot","DislikeFeedback","useChatState","useChatActions","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","Messages","_ref","actions","className","style","_useChatState","messages","loading","prologue","suggestions","initialized","showFeedback","appInfo","_useChatActions","suggestChat","reChat","likeMessage","primaryColor","appTheme","defaultActions","_ref2","_group$isLike","group","isLastBotMsg","lastMsg","msgs","length","invocationId","isLikeVal","isLike","fullText","filter","m","functionCall","functionResponse","map","text","join","gap","align","padding","color","children","title","cursor","onClick","success","_asyncToGenerator","_regeneratorRuntime","mark","_callee","ok","wrap","_callee$","_context","prev","next","warning","abrupt","sent","error","stop","msg","activeColor","onSubmit","_ref4","_callee2","formData","_callee2$","_context2","_x","apply","arguments","onSuggest","enableGrouping","enableProcessParsing","parseOptions","mode"],"sources":["../../../../../src/components/XAdkProvider/compound/Messages.tsx"],"sourcesContent":["import React, { useCallback } from \"react\";\nimport { message, Tooltip, Flex } from \"antd\";\nimport { LikeFilled, LikeOutlined, ReloadOutlined, CopyOutlined } from \"@ant-design/icons\";\nimport copy from \"copy-to-clipboard\";\nimport XAdkChatbot from \"../../XAdkChatbot\";\nimport DislikeFeedback from \"./DislikeFeedBack\";\nimport { useChatState } from \"../context/ChatStateContext\";\nimport { useChatActions } from \"../context/ChatActionContext\";\nimport type { ActionProps } from \"@/types\";\n\nexport interface XAdkMessagesProps {\n /** 自定义操作栏渲染 */\n actions?: ActionProps;\n /** 类名 */\n className?: string;\n /** 样式 */\n style?: React.CSSProperties;\n}\n\n/**\n * Messages - XAdkProvider 的消息展示组件\n *\n * 使用 XAdkChatbot 渲染消息列表\n */\nconst Messages: React.FC<XAdkMessagesProps> = ({\n actions,\n className,\n style,\n}) => {\n const { messages, loading, prologue, suggestions, initialized, showFeedback, appInfo } = useChatState();\n const { suggestChat, reChat, likeMessage } = useChatActions();\n\n const primaryColor = appInfo?.appTheme || \"#1677ff\";\n\n const defaultActions = useCallback<ActionProps>(({ message: group, isLastBotMsg }) => {\n // 取该组最后一条 bot 消息的 invocationId 和 isLike 状态\n const lastMsg = group.msgs[group.msgs.length - 1];\n const invocationId = lastMsg?.invocationId;\n const isLikeVal = group.isLike ?? 0;\n\n const fullText = group.msgs\n .filter((m) => !m.functionCall && !m.functionResponse)\n .map((m) => m.text || \"\")\n .join(\"\");\n\n return (\n <Flex gap={16} align=\"center\" style={{ padding: \"4px 0\", color: \"#81858c\" }}>\n {isLastBotMsg && (\n <Tooltip title=\"重新生成\">\n <ReloadOutlined style={{ cursor: \"pointer\" }} onClick={reChat} />\n </Tooltip>\n )}\n <Tooltip title=\"复制内容\">\n <CopyOutlined\n style={{ cursor: \"pointer\" }}\n onClick={() => {\n copy(fullText);\n message.success(\"复制成功\");\n }}\n />\n </Tooltip>\n {showFeedback && invocationId && (\n <>\n <Tooltip title=\"赞\">\n {isLikeVal === 1 ? (\n <LikeFilled style={{ color: primaryColor, cursor: \"pointer\" }} />\n ) : (\n <LikeOutlined\n style={{ cursor: \"pointer\" }}\n onClick={async () => {\n if (isLikeVal !== 0) {\n message.warning(\"已收到您的反馈,无需重复提交\");\n return;\n }\n const ok = await likeMessage(invocationId, 1);\n if (ok) message.success(\"感谢您的反馈\");\n else message.error(\"反馈失败,请稍后再试\");\n }}\n />\n )}\n </Tooltip>\n <DislikeFeedback\n msg={group}\n activeColor={primaryColor}\n onSubmit={async (formData) => {\n const ok = await likeMessage(invocationId, -1, formData);\n if (ok) message.success(\"已收到您的反馈,我们会努力做得更好\");\n else message.error(\"反馈失败,请稍后再试\");\n return ok;\n }}\n />\n </>\n )}\n </Flex>\n );\n }, [reChat, likeMessage, showFeedback, primaryColor]);\n\n return (\n <XAdkChatbot\n messages={messages}\n loading={loading}\n prologue={prologue}\n suggestions={suggestions}\n onSuggest={suggestChat}\n // 操作栏:使用外部传入的 actions,否则用内置默认 actions\n actions={actions ?? defaultActions}\n // 启用分组和解析\n enableGrouping={true}\n enableProcessParsing={true}\n // 使用注释模式解析\n parseOptions={{ mode: \"comment\" }}\n initialized={initialized}\n // 样式\n className={className}\n style={style}\n />\n );\n};\n\nexport default Messages;\n"],"mappings":"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"}
@@ -20,6 +20,11 @@ export interface ChatActionContextType {
20
20
  confirmFnCall: (fnCall: FunctionCall, confirmed: boolean) => void;
21
21
  /** 设置消息列表 */
22
22
  setMessages: React.Dispatch<React.SetStateAction<IMessage[]>>;
23
+ /** 点赞/点踩消息 */
24
+ likeMessage: (invocationId: string, isLike: 1 | -1, feedbackData?: {
25
+ feedbackTags?: string;
26
+ feedbackDescription?: string;
27
+ }) => Promise<boolean>;
23
28
  }
24
29
  export declare const ChatActionContext: import("react").Context<ChatActionContextType | null>;
25
30
  /**
@@ -1 +1 @@
1
- {"version":3,"names":["createContext","useContext","ChatActionContext","useChatActions","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatActionContext.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { SendContent, FunctionCall, IMessage } from '@/types';\n\n/**\n * 聊天动作 Context\n * 只包含操作方法,不包含状态数据\n * 与 ChatStateContext 分离可以优化性能\n */\nexport interface ChatActionContextType {\n /** 发送消息 */\n chat: (content: SendContent) => void;\n /** 停止聊天 */\n stopChat: () => void;\n /** 清空/重置聊天 */\n clearChat: () => void;\n /** 重新发送 */\n reChat: () => void;\n /** 使用建议问题 */\n suggestChat: (text: string) => void;\n /** 确认函数调用 */\n confirmFnCall: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 设置消息列表 */\n setMessages: React.Dispatch<React.SetStateAction<IMessage[]>>;\n}\n\nexport const ChatActionContext = createContext<ChatActionContextType | null>(null);\n\n/**\n * 使用聊天动作 Hook\n * @returns ChatActionContextType\n * @throws Error 如果在 XAdkProvider 外部使用\n */\nexport const useChatActions = () => {\n const context = useContext(ChatActionContext);\n if (!context) {\n throw new Error('useChatActions must be used within XAdkProvider');\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAGjD;AACA;AACA;AACA;AACA;;AAkBA,OAAO,IAAMC,iBAAiB,gBAAGF,aAAa,CAA+B,IAAI,CAAC;;AAElF;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMG,cAAc,GAAG,SAAjBA,cAAcA,CAAA,EAAS;EAClC,IAAMC,OAAO,GAAGH,UAAU,CAACC,iBAAiB,CAAC;EAC7C,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,iDAAiD,CAAC;EACpE;EACA,OAAOD,OAAO;AAChB,CAAC"}
1
+ {"version":3,"names":["createContext","useContext","ChatActionContext","useChatActions","context","Error"],"sources":["../../../../../src/components/XAdkProvider/context/ChatActionContext.tsx"],"sourcesContent":["import { createContext, useContext } from 'react';\nimport type { SendContent, FunctionCall, IMessage } from '@/types';\n\n/**\n * 聊天动作 Context\n * 只包含操作方法,不包含状态数据\n * 与 ChatStateContext 分离可以优化性能\n */\nexport interface ChatActionContextType {\n /** 发送消息 */\n chat: (content: SendContent) => void;\n /** 停止聊天 */\n stopChat: () => void;\n /** 清空/重置聊天 */\n clearChat: () => void;\n /** 重新发送 */\n reChat: () => void;\n /** 使用建议问题 */\n suggestChat: (text: string) => void;\n /** 确认函数调用 */\n confirmFnCall: (fnCall: FunctionCall, confirmed: boolean) => void;\n /** 设置消息列表 */\n setMessages: React.Dispatch<React.SetStateAction<IMessage[]>>;\n /** 点赞/点踩消息 */\n likeMessage: (\n invocationId: string,\n isLike: 1 | -1,\n feedbackData?: { feedbackTags?: string; feedbackDescription?: string },\n ) => Promise<boolean>;\n}\n\nexport const ChatActionContext = createContext<ChatActionContextType | null>(null);\n\n/**\n * 使用聊天动作 Hook\n * @returns ChatActionContextType\n * @throws Error 如果在 XAdkProvider 外部使用\n */\nexport const useChatActions = () => {\n const context = useContext(ChatActionContext);\n if (!context) {\n throw new Error('useChatActions must be used within XAdkProvider');\n }\n return context;\n};\n"],"mappings":"AAAA,SAASA,aAAa,EAAEC,UAAU,QAAQ,OAAO;;AAGjD;AACA;AACA;AACA;AACA;;AAwBA,OAAO,IAAMC,iBAAiB,gBAAGF,aAAa,CAA+B,IAAI,CAAC;;AAElF;AACA;AACA;AACA;AACA;AACA,OAAO,IAAMG,cAAc,GAAG,SAAjBA,cAAcA,CAAA,EAAS;EAClC,IAAMC,OAAO,GAAGH,UAAU,CAACC,iBAAiB,CAAC;EAC7C,IAAI,CAACE,OAAO,EAAE;IACZ,MAAM,IAAIC,KAAK,CAAC,iDAAiD,CAAC;EACpE;EACA,OAAOD,OAAO;AAChB,CAAC"}