@ai-group/chat-sdk 3.3.8 → 3.3.10

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","useMemo","useCallback","useEffect","useRef","Button","Flex","Tooltip","message","antdMessage","clsx","SwapRightOutlined","ReloadOutlined","CopyOutlined","InfoCircleOutlined","CheckCircleFilled","copy","useStyles","MarkdownRender","FunctionCallRender","FileGallery","XAdkThoughtChain","parseAgentMessage","mergeChatStrategies","defaultToolKindResolver","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","scrollThreshold","XAdkChatbot","_ref","_mergedStrategies$par","_ref$loading","loading","prologue","suggestions","messages","showFnCallDetail","onConfirm","onSuggest","showRetry","showCopy","showLog","onRetry","onCopy","onShowLog","actions","actionsExtra","className","style","_ref$enableGrouping","enableGrouping","_ref$enableProcessPar","enableProcessParsing","parseOptions","_ref$initialized","initialized","onFileClick","renderFunctionCall","toolKindResolver","strategies","preset","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","prevInitializedRef","mergedStrategies","resolveToolKind","name","msg","_ref2","_toolKindResolver","_mergedStrategies$res","call","parseProcessMessage","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$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","_renderFunctionCall","_msg$functionCall","showDetail","kind","renderApproval","renderHandoff","mergedToolMap","Map","callId","has","set","_objectSpread","_mergedToolMap$get","get","tool","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","actionProps","isLastBotMsg","actionExtraNode","node","idx","defaultOpen","showBadge","findIndex","successBadge","fileSection","fileHeader","display","flexWrap","gap","file","index","onClick","metaFooter","actionIcons","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 XAdkThoughtChain from \"@/components/XAdkThoughtChain\";\nimport { parseAgentMessage } from \"@/utils\";\nimport { mergeChatStrategies } from \"@/presets/xGroupAdk\";\nimport type { IMessage, XAdkChatbotProps, ChatGroup } from \"@/types\";\nimport type { ThoughtChainItemType } from \"@/types/XAdkThoughtChain\";\nimport { defaultToolKindResolver } from \"@/types/FunctionCallRender\";\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 actionsExtra,\n className,\n style,\n // welcome = null,\n enableGrouping = true,\n enableProcessParsing = true,\n parseOptions,\n initialized = false,\n onFileClick,\n renderFunctionCall,\n toolKindResolver,\n strategies,\n preset,\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 const mergedStrategies = useMemo(\n () => mergeChatStrategies(preset, strategies),\n [preset, strategies],\n );\n const resolveToolKind = useCallback(\n (name?: string, msg?: IMessage) =>\n toolKindResolver?.(name) ??\n mergedStrategies.resolveToolKind?.({ name, msg }) ??\n defaultToolKindResolver(name),\n [toolKindResolver, mergedStrategies],\n );\n const parseProcessMessage =\n mergedStrategies.parseProcessMessage ?? parseAgentMessage;\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, renderFunctionCall?: XAdkChatbotProps[\"renderFunctionCall\"]) => {\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\n key={`${msg.id}-${i}`}\n text={msg.text}\n onFileClick={onFileClick}\n />\n );\n }\n if (msg.functionCall) {\n return (\n renderFunctionCall?.(msg) ?? (\n <FunctionCallRender\n key={`${msg.id}-${i}`}\n msg={msg}\n showDetail={showFnCallDetail}\n onConfirm={onConfirm}\n kind={resolveToolKind(msg.functionCall?.name, msg)}\n renderApproval={mergedStrategies.renderApproval}\n renderHandoff={mergedStrategies.renderHandoff}\n />\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 = parseProcessMessage(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 const actionProps = { message: group, isLastBotMsg: isLastGroup };\n const actionExtraNode = actionsExtra?.(actionProps);\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 <XAdkThoughtChain\n key={node.key}\n loading={isGroupLoading}\n title=\"思维链已完成\"\n items={node.items}\n showFnCallDetail={showFnCallDetail}\n onConfirm={onConfirm}\n defaultOpen={isGroupLoading}\n renderFunctionCall={renderFunctionCall}\n toolKindResolver={(name) => resolveToolKind(name)}\n strategies={mergedStrategies}\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} onFileClick={onFileClick} />\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} onClick={onFileClick} />\n ))}\n </div>\n </div>\n )}\n\n {/* 操作栏 */}\n {!isGroupLoading &&\n ((actions || showRetry || showCopy || showLog || actionExtraNode) && (\n <div className={styles.metaFooter}>\n {actions ? (\n actions(actionProps)\n ) : (\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 )}\n {actionExtraNode}\n </div>\n ))}\n </div>\n );\n },\n [\n enableProcessParsing,\n parseOptions,\n parseProcessMessage,\n showFnCallDetail,\n onConfirm,\n loading,\n showRetry,\n showCopy,\n showLog,\n onRetry,\n onCopy,\n onShowLog,\n actions,\n actionsExtra,\n onFileClick,\n styles,\n resolveToolKind,\n mergedStrategies,\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 onClick={onFileClick}\n />\n ))}\n </>\n )}\n {/* 文本展示 */}\n {m.text && <div className={styles.card}>{m.text}</div>}\n </div>\n ))}\n </div>\n );\n },\n [styles, onFileClick],\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} onFileClick={onFileClick} />\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, renderFunctionCall),\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","copy","useStyles","MarkdownRender","FunctionCallRender","FileGallery","XAdkThoughtChain","parseAgentMessage","mergeChatStrategies","defaultToolKindResolver","jsx","_jsx","jsxs","_jsxs","Fragment","_Fragment","scrollThreshold","XAdkChatbot","_ref","_mergedStrategies$par","_ref$loading","loading","prologue","suggestions","messages","showFnCallDetail","onConfirm","onSuggest","showRetry","showCopy","showLog","onRetry","onCopy","onShowLog","actions","actionsExtra","className","style","_ref$enableGrouping","enableGrouping","_ref$enableProcessPar","enableProcessParsing","parseOptions","_ref$initialized","initialized","onFileClick","renderFunctionCall","toolKindResolver","strategies","preset","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","prevInitializedRef","mergedStrategies","resolveToolKind","name","msg","_ref2","_toolKindResolver","_mergedStrategies$res","call","parseProcessMessage","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$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","_renderFunctionCall","_msg$functionCall","showDetail","kind","renderApproval","renderHandoff","mergedToolMap","Map","callId","has","set","_objectSpread","_mergedToolMap$get","get","tool","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","actionProps","isLastBotMsg","actionExtraNode","node","idx","defaultOpen","fileSection","fileHeader","display","flexWrap","gap","file","index","onClick","metaFooter","actionIcons","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 XAdkThoughtChain from \"@/components/XAdkThoughtChain\";\nimport { parseAgentMessage } from \"@/utils\";\nimport { mergeChatStrategies } from \"@/presets/xGroupAdk\";\nimport type { IMessage, XAdkChatbotProps, ChatGroup } from \"@/types\";\nimport type { ThoughtChainItemType } from \"@/types/XAdkThoughtChain\";\nimport { defaultToolKindResolver } from \"@/types/FunctionCallRender\";\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 actionsExtra,\n className,\n style,\n // welcome = null,\n enableGrouping = true,\n enableProcessParsing = true,\n parseOptions,\n initialized = false,\n onFileClick,\n renderFunctionCall,\n toolKindResolver,\n strategies,\n preset,\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 const mergedStrategies = useMemo(\n () => mergeChatStrategies(preset, strategies),\n [preset, strategies],\n );\n const resolveToolKind = useCallback(\n (name?: string, msg?: IMessage) =>\n toolKindResolver?.(name) ??\n mergedStrategies.resolveToolKind?.({ name, msg }) ??\n defaultToolKindResolver(name),\n [toolKindResolver, mergedStrategies],\n );\n const parseProcessMessage =\n mergedStrategies.parseProcessMessage ?? parseAgentMessage;\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 (\n group: ChatGroup,\n isLastGroup: boolean,\n renderFunctionCall?: XAdkChatbotProps[\"renderFunctionCall\"],\n ) => {\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\n key={`${msg.id}-${i}`}\n text={msg.text}\n onFileClick={onFileClick}\n />\n );\n }\n if (msg.functionCall) {\n return (\n renderFunctionCall?.(msg) ?? (\n <FunctionCallRender\n key={`${msg.id}-${i}`}\n msg={msg}\n showDetail={showFnCallDetail}\n onConfirm={onConfirm}\n kind={resolveToolKind(msg.functionCall?.name, msg)}\n renderApproval={mergedStrategies.renderApproval}\n renderHandoff={mergedStrategies.renderHandoff}\n />\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 = parseProcessMessage(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 const actionProps = { message: group, isLastBotMsg: isLastGroup };\n const actionExtraNode = actionsExtra?.(actionProps);\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 <XAdkThoughtChain\n key={node.key}\n loading={isGroupLoading}\n title=\"思维链已完成\"\n items={node.items}\n showFnCallDetail={showFnCallDetail}\n onConfirm={onConfirm}\n defaultOpen={isGroupLoading}\n renderFunctionCall={renderFunctionCall}\n toolKindResolver={(name) => resolveToolKind(name)}\n strategies={mergedStrategies}\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} onFileClick={onFileClick} />\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} onClick={onFileClick} />\n ))}\n </div>\n </div>\n )}\n\n {/* 操作栏 */}\n {!isGroupLoading &&\n (actions ||\n showRetry ||\n showCopy ||\n showLog ||\n actionExtraNode) && (\n <div className={styles.metaFooter}>\n {actions ? (\n actions(actionProps)\n ) : (\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 )}\n {actionExtraNode}\n </div>\n )}\n </div>\n );\n },\n [\n enableProcessParsing,\n parseOptions,\n parseProcessMessage,\n showFnCallDetail,\n onConfirm,\n loading,\n showRetry,\n showCopy,\n showLog,\n onRetry,\n onCopy,\n onShowLog,\n actions,\n actionsExtra,\n onFileClick,\n styles,\n resolveToolKind,\n mergedStrategies,\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 onClick={onFileClick}\n />\n ))}\n </>\n )}\n {/* 文本展示 */}\n {m.text && <div className={styles.card}>{m.text}</div>}\n </div>\n ))}\n </div>\n );\n },\n [styles, onFileClick],\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} onFileClick={onFileClick} />\n </div>\n )}\n\n {/* 欢迎页面 */}\n {/* {renderWelcome()} */}\n\n {/* 消息列表 */}\n {chatGroups.map((group, idx) =>\n group.role === \"user\"\n ? renderUserGroup(group)\n : renderBotGroup(\n group,\n idx === chatGroups.length - 1,\n renderFunctionCall,\n ),\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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"}
@@ -280,8 +280,10 @@ function useADKChat(_ref) {
280
280
  // 处理消息部分(关键更新)
281
281
  var processPart = useCallback(function (event, part) {
282
282
  var _event$groundingMetad2;
283
+ var ignore = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
283
284
  var renderedContent = (_event$groundingMetad2 = event.groundingMetadata) === null || _event$groundingMetad2 === void 0 || (_event$groundingMetad2 = _event$groundingMetad2.searchEntryPoint) === null || _event$groundingMetad2 === void 0 ? void 0 : _event$groundingMetad2.renderedContent;
284
285
  if (part.text) {
286
+ if (ignore) return;
285
287
  var newChunk = part.text;
286
288
  if (!textMsgRef.current || textMsgRef.current.thought !== part.thought) {
287
289
  var newMessage = {
@@ -412,10 +414,6 @@ function useADKChat(_ref) {
412
414
 
413
415
  // 处理新的数据格式: { data: {...}, result: {...} }
414
416
  var chunkJson = rawData;
415
- // 忽略 partial为 false 包
416
- if (chunkJson.partial === false) {
417
- return;
418
- }
419
417
  if (rawData.data && rawData.result) {
420
418
  // 转换为旧格式
421
419
  chunkJson = _objectSpread(_objectSpread({}, rawData.data), {}, {
@@ -443,8 +441,10 @@ function useADKChat(_ref) {
443
441
  _step2;
444
442
  try {
445
443
  for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
444
+ var _chunkJson;
446
445
  var part = _step2.value;
447
- processPart(chunkJson, part);
446
+ // partial为 true 时忽略该条消息文本
447
+ processPart(chunkJson, part, ((_chunkJson = chunkJson) === null || _chunkJson === void 0 ? void 0 : _chunkJson.partial) === false);
448
448
  }
449
449
  } catch (err) {
450
450
  _iterator2.e(err);