@ai-group/chat-sdk 3.0.15 → 3.1.0
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.
- package/dist/cjs/components/XAdkChatbot/components/ThinkRender/index.d.ts +2 -2
- package/dist/cjs/components/XAdkChatbot/components/ThinkRender/index.js +25 -10
- package/dist/cjs/components/XAdkChatbot/components/ThinkRender/index.js.map +2 -2
- package/dist/cjs/components/XAdkChatbot/index.js +10 -3
- package/dist/cjs/components/XAdkChatbot/index.js.map +3 -3
- package/dist/cjs/components/XAdkThoughtChain/index.d.ts +4 -0
- package/dist/cjs/components/{XAiThoughtChain → XAdkThoughtChain}/index.js +37 -24
- package/dist/cjs/components/XAdkThoughtChain/index.js.map +7 -0
- package/dist/{esm/components/XAiThoughtChain → cjs/components/XAdkThoughtChain}/styles.d.ts +1 -0
- package/dist/cjs/components/{XAiThoughtChain → XAdkThoughtChain}/styles.js +29 -14
- package/dist/cjs/components/XAdkThoughtChain/styles.js.map +7 -0
- package/dist/cjs/index.d.ts +3 -3
- package/dist/cjs/index.js +3 -3
- package/dist/cjs/index.js.map +3 -3
- package/dist/cjs/types/{XAiThoughtChain.d.ts → XAdkThoughtChain.d.ts} +5 -3
- package/dist/cjs/types/{XAiThoughtChain.js → XAdkThoughtChain.js} +4 -4
- package/dist/cjs/types/XAdkThoughtChain.js.map +7 -0
- package/dist/cjs/types/index.d.ts +1 -1
- package/dist/cjs/types/index.js +2 -2
- package/dist/cjs/types/index.js.map +2 -2
- package/dist/esm/components/XAdkChatbot/components/ThinkRender/index.d.ts +2 -2
- package/dist/esm/components/XAdkChatbot/components/ThinkRender/index.js +28 -18
- package/dist/esm/components/XAdkChatbot/components/ThinkRender/index.js.map +1 -1
- package/dist/esm/components/XAdkChatbot/index.js +2 -2
- package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
- package/dist/esm/components/XAdkThoughtChain/index.d.ts +4 -0
- package/dist/esm/components/{XAiThoughtChain → XAdkThoughtChain}/index.js +26 -21
- package/dist/esm/components/XAdkThoughtChain/index.js.map +1 -0
- package/dist/{cjs/components/XAiThoughtChain → esm/components/XAdkThoughtChain}/styles.d.ts +1 -0
- package/dist/esm/components/XAdkThoughtChain/styles.js +42 -0
- package/dist/esm/components/XAdkThoughtChain/styles.js.map +1 -0
- package/dist/esm/index.d.ts +3 -3
- package/dist/esm/index.js +2 -2
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/{XAiThoughtChain.d.ts → XAdkThoughtChain.d.ts} +5 -3
- package/dist/esm/types/XAdkThoughtChain.js +2 -0
- package/dist/esm/types/XAdkThoughtChain.js.map +1 -0
- package/dist/esm/types/index.d.ts +1 -1
- package/dist/esm/types/index.js +1 -1
- package/dist/esm/types/index.js.map +1 -1
- package/dist/umd/chat-sdk.min.js +1 -1
- package/package.json +2 -2
- package/dist/cjs/components/XAiThoughtChain/index.d.ts +0 -4
- package/dist/cjs/components/XAiThoughtChain/index.js.map +0 -7
- package/dist/cjs/components/XAiThoughtChain/styles.js.map +0 -7
- package/dist/cjs/types/XAiThoughtChain.js.map +0 -7
- package/dist/esm/components/XAiThoughtChain/index.d.ts +0 -4
- package/dist/esm/components/XAiThoughtChain/index.js.map +0 -1
- package/dist/esm/components/XAiThoughtChain/styles.js +0 -40
- package/dist/esm/components/XAiThoughtChain/styles.js.map +0 -1
- package/dist/esm/types/XAiThoughtChain.js +0 -2
- package/dist/esm/types/XAiThoughtChain.js.map +0 -1
package/dist/cjs/index.js
CHANGED
|
@@ -37,12 +37,12 @@ __export(src_exports, {
|
|
|
37
37
|
XAdkChatbot: () => import_XAdkChatbot.default,
|
|
38
38
|
XAdkProvider: () => import_XAdkProvider.default,
|
|
39
39
|
XAdkSender: () => import_XAdkSender.default,
|
|
40
|
+
XAdkThoughtChain: () => import_XAdkThoughtChain.default,
|
|
40
41
|
XAiChatbot: () => import_XAiChatbot.default,
|
|
41
42
|
XAiConversations: () => import_XAiConversations.default,
|
|
42
43
|
XAiProvider: () => import_XAiProvider.default,
|
|
43
44
|
XAiSDK: () => import_XAiSDK.default,
|
|
44
45
|
XAiSender: () => import_XAiSender.default,
|
|
45
|
-
XAiThoughtChain: () => import_XAiThoughtChain.default,
|
|
46
46
|
request: () => import_request.default,
|
|
47
47
|
useADKChat: () => import_useADKChat.default,
|
|
48
48
|
useChatActions: () => import_context.useChatActions,
|
|
@@ -59,7 +59,7 @@ var import_XAiSDK = __toESM(require("./components/XAiSDK"));
|
|
|
59
59
|
var import_XAiSender = __toESM(require("./components/XAiSender"));
|
|
60
60
|
var import_FileGallery = __toESM(require("./components/FileGallery"));
|
|
61
61
|
var import_XAiConversations = __toESM(require("./components/XAiConversations"));
|
|
62
|
-
var
|
|
62
|
+
var import_XAdkThoughtChain = __toESM(require("./components/XAdkThoughtChain"));
|
|
63
63
|
var import_useXAiSDK = __toESM(require("./hooks/useXAiSDK"));
|
|
64
64
|
var import_request = __toESM(require("./utils/request"));
|
|
65
65
|
var import_XAdkProvider = __toESM(require("./components/XAdkProvider"));
|
|
@@ -80,12 +80,12 @@ var import_ThinkRender = __toESM(require("./components/XAdkChatbot/components/Th
|
|
|
80
80
|
XAdkChatbot,
|
|
81
81
|
XAdkProvider,
|
|
82
82
|
XAdkSender,
|
|
83
|
+
XAdkThoughtChain,
|
|
83
84
|
XAiChatbot,
|
|
84
85
|
XAiConversations,
|
|
85
86
|
XAiProvider,
|
|
86
87
|
XAiSDK,
|
|
87
88
|
XAiSender,
|
|
88
|
-
XAiThoughtChain,
|
|
89
89
|
request,
|
|
90
90
|
useADKChat,
|
|
91
91
|
useChatActions,
|
package/dist/cjs/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA,
|
|
6
|
-
"names": ["FileGallery", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "
|
|
4
|
+
"sourcesContent": ["// index.ts\nimport { useXAi } from \"./context/AiProviderContext\";\nimport XAiProvider from \"./components/XAiProvider\";\nimport XAiChatbot from \"./components/XAiChatbot\";\nimport XAiSDK from \"./components/XAiSDK\";\nimport XAiSender from \"./components/XAiSender\";\nimport FileGallery from \"./components/FileGallery\";\nimport XAiConversations from \"./components/XAiConversations\";\nimport XAdkThoughtChain from \"./components/XAdkThoughtChain\";\nimport useXAiSDK from \"./hooks/useXAiSDK\";\nimport request from \"./utils/request\";\n\n// 新的 Compound Components 架构\nimport XAdkProvider from \"./components/XAdkProvider\";\nimport XAdkChatbot from \"./components/XAdkChatbot\";\nimport XAdkSender from \"./components/XAdkSender\";\nimport useADKChat from \"./hooks/useADKChat\";\n\n// 导出新的 Context Hooks\nexport {\n useChatState,\n useChatActions,\n useSession,\n} from \"./components/XAdkProvider/context\";\n\nexport * from \"./types\";\n\n// 导出自定义 Hook 相关类型\nexport type { ChatHookResult, ChatHookFactory } from \"./types/ChatHook\";\n\n// 旧 API - 保持向后兼容\nexport {\n useXAi,\n XAiProvider,\n XAiChatbot,\n XAiSDK,\n XAiSender,\n XAiConversations,\n useXAiSDK,\n request,\n};\n\n// 新 API - 推荐使用\nexport {\n XAdkProvider,\n XAdkChatbot,\n XAdkSender,\n FileGallery,\n XAdkThoughtChain,\n useADKChat,\n};\n\n// 基础组件导出 - 供高级用户和业务侧使用\nexport { default as MarkdownRender } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport { default as FunctionCallRender } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport { default as ThinkRender } from \"./components/XAdkChatbot/components/ThinkRender\";\n\n// 基础组件类型导出\nexport type { MarkdownRenderProps } from \"./components/XAdkChatbot/components/MarkdownRender\";\nexport type { FunctionCallRenderProps } from \"./components/XAdkChatbot/components/FunctionCallRender\";\nexport type {\n XAdkThoughtChainProps,\n ThoughtChainItemType,\n} from \"./types/XAdkThoughtChain\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,wCAAAA;AAAA,EAAA;AAAA;AAAA;AAAA,wCAAAC;AAAA,EAAA,wCAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA,gDAAAC;AAAA,EAAA,sCAAAC;AAAA,EAAA,4BAAAC;AAAA,EAAA,kCAAAC;AAAA,EAAA,8BAAAC;AAAA,EAAA,oCAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA,oCAAAC;AAAA;AAAA;AACA,+BAAuB;AACvB,yBAAwB;AACxB,wBAAuB;AACvB,oBAAmB;AACnB,uBAAsB;AACtB,yBAAwB;AACxB,8BAA6B;AAC7B,8BAA6B;AAC7B,uBAAsB;AACtB,qBAAoB;AAGpB,0BAAyB;AACzB,yBAAwB;AACxB,wBAAuB;AACvB,wBAAuB;AAGvB,qBAIO;AAEP,wBAAc,oBAzBd;AAqDA,4BAA0C;AAC1C,gCAA8C;AAC9C,yBAAuC;",
|
|
6
|
+
"names": ["FileGallery", "XAdkChatbot", "XAdkProvider", "XAdkSender", "XAdkThoughtChain", "XAiChatbot", "XAiConversations", "XAiProvider", "XAiSDK", "XAiSender", "request", "useADKChat", "useXAiSDK"]
|
|
7
7
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import React from "react";
|
|
1
|
+
import React, { type ReactNode } from "react";
|
|
2
2
|
import { IMessage } from "./XAdkChatbot";
|
|
3
|
-
export interface
|
|
3
|
+
export interface XAdkThoughtChainProps {
|
|
4
4
|
defaultOpen?: boolean;
|
|
5
5
|
loading?: boolean;
|
|
6
|
-
title?:
|
|
6
|
+
title?: ReactNode;
|
|
7
7
|
items: ThoughtChainItemType[];
|
|
8
8
|
showFnCallDetail?: boolean;
|
|
9
9
|
onConfirm?: (fnCall: any, confirmed: boolean) => void;
|
|
10
|
+
blink?: boolean;
|
|
10
11
|
}
|
|
11
12
|
export interface TimelineItemProps {
|
|
12
13
|
icon: React.ReactNode;
|
|
@@ -14,6 +15,7 @@ export interface TimelineItemProps {
|
|
|
14
15
|
children: React.ReactNode;
|
|
15
16
|
collapsible?: boolean;
|
|
16
17
|
defaultOpen?: boolean;
|
|
18
|
+
blink?: boolean;
|
|
17
19
|
}
|
|
18
20
|
export interface ThoughtChainItemType {
|
|
19
21
|
type: "tool" | "text";
|
|
@@ -12,7 +12,7 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
12
12
|
};
|
|
13
13
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
14
14
|
|
|
15
|
-
// src/types/
|
|
16
|
-
var
|
|
17
|
-
module.exports = __toCommonJS(
|
|
18
|
-
//# sourceMappingURL=
|
|
15
|
+
// src/types/XAdkThoughtChain.ts
|
|
16
|
+
var XAdkThoughtChain_exports = {};
|
|
17
|
+
module.exports = __toCommonJS(XAdkThoughtChain_exports);
|
|
18
|
+
//# sourceMappingURL=XAdkThoughtChain.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/types/XAdkThoughtChain.ts"],
|
|
4
|
+
"sourcesContent": ["import React, { type ReactNode } from \"react\";\nimport { IMessage } from \"./XAdkChatbot\";\n\nexport interface XAdkThoughtChainProps {\n defaultOpen?: boolean;\n loading?: boolean;\n title?: ReactNode;\n items: ThoughtChainItemType[];\n showFnCallDetail?: boolean; // 是否可查看调用方法入参\n onConfirm?: (fnCall: any, confirmed: boolean) => void;\n blink?: boolean; // 加载中是否开启闪动效果,默认 false\n}\n\nexport interface TimelineItemProps {\n icon: React.ReactNode;\n title: React.ReactNode;\n children: React.ReactNode;\n collapsible?: boolean; // 是否可展示\n defaultOpen?: boolean; // 是否默认展开\n blink?: boolean; // 是否开启闪动效果\n}\n\nexport interface ThoughtChainItemType {\n type: \"tool\" | \"text\"; // 思维节点类型,目前仅支持 tool | text\n key: string; // 思维节点唯一标识符\n content: string; // 思维节点内容\n title?: React.ReactNode; // 思维节点标题\n collapsible?: boolean; // 思维节点是否可折叠\n msg?: IMessage; // 思维节点信息,tool 类型必传\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -6,6 +6,6 @@ export * from "./XAiConversations";
|
|
|
6
6
|
export * from "./XAdkProvider";
|
|
7
7
|
export * from "./XAdkChatbot";
|
|
8
8
|
export * from "./XAdkSender";
|
|
9
|
-
export * from "./
|
|
9
|
+
export * from "./XAdkThoughtChain";
|
|
10
10
|
export * from "./FileGallery";
|
|
11
11
|
export * from "./common";
|
package/dist/cjs/types/index.js
CHANGED
|
@@ -24,7 +24,7 @@ __reExport(types_exports, require("./XAiConversations"), module.exports);
|
|
|
24
24
|
__reExport(types_exports, require("./XAdkProvider"), module.exports);
|
|
25
25
|
__reExport(types_exports, require("./XAdkChatbot"), module.exports);
|
|
26
26
|
__reExport(types_exports, require("./XAdkSender"), module.exports);
|
|
27
|
-
__reExport(types_exports, require("./
|
|
27
|
+
__reExport(types_exports, require("./XAdkThoughtChain"), module.exports);
|
|
28
28
|
__reExport(types_exports, require("./FileGallery"), module.exports);
|
|
29
29
|
__reExport(types_exports, require("./common"), module.exports);
|
|
30
30
|
// Annotate the CommonJS export names for ESM import in node:
|
|
@@ -37,7 +37,7 @@ __reExport(types_exports, require("./common"), module.exports);
|
|
|
37
37
|
...require("./XAdkProvider"),
|
|
38
38
|
...require("./XAdkChatbot"),
|
|
39
39
|
...require("./XAdkSender"),
|
|
40
|
-
...require("./
|
|
40
|
+
...require("./XAdkThoughtChain"),
|
|
41
41
|
...require("./FileGallery"),
|
|
42
42
|
...require("./common")
|
|
43
43
|
});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/types/index.ts"],
|
|
4
|
-
"sourcesContent": ["export * from \"./XAiChatbot\";\nexport * from \"./XAiMessage\";\nexport * from \"./XAiProvider\";\nexport * from \"./XAiSender\";\nexport * from \"./XAiConversations\";\nexport * from \"./XAdkProvider\";\nexport * from \"./XAdkChatbot\";\nexport * from \"./XAdkSender\";\nexport * from \"./
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,wBAHd;AAIA,0BAAc,+BAJd;AAKA,0BAAc,2BALd;AAMA,0BAAc,0BANd;AAOA,0BAAc,yBAPd;AAQA,0BAAc
|
|
4
|
+
"sourcesContent": ["export * from \"./XAiChatbot\";\nexport * from \"./XAiMessage\";\nexport * from \"./XAiProvider\";\nexport * from \"./XAiSender\";\nexport * from \"./XAiConversations\";\nexport * from \"./XAdkProvider\";\nexport * from \"./XAdkChatbot\";\nexport * from \"./XAdkSender\";\nexport * from \"./XAdkThoughtChain\";\nexport * from \"./FileGallery\";\nexport * from \"./common\";\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;AAAA;AAAA;AAAA,0BAAc,yBAAd;AACA,0BAAc,yBADd;AAEA,0BAAc,0BAFd;AAGA,0BAAc,wBAHd;AAIA,0BAAc,+BAJd;AAKA,0BAAc,2BALd;AAMA,0BAAc,0BANd;AAOA,0BAAc,yBAPd;AAQA,0BAAc,+BARd;AASA,0BAAc,0BATd;AAUA,0BAAc,qBAVd;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
+
import type { ThinkProps } from '@ant-design/x';
|
|
1
2
|
import React from 'react';
|
|
2
3
|
import type { IMessage } from "../../../../types";
|
|
3
|
-
export interface ThinkRenderProps {
|
|
4
|
+
export interface ThinkRenderProps extends Omit<ThinkProps, 'children'> {
|
|
4
5
|
msg: IMessage;
|
|
5
|
-
loading?: boolean;
|
|
6
6
|
}
|
|
7
7
|
declare const ThinkRender: React.FC<ThinkRenderProps>;
|
|
8
8
|
export default ThinkRender;
|
|
@@ -1,32 +1,42 @@
|
|
|
1
|
+
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
1
2
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
3
|
+
import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
|
|
4
|
+
var _excluded = ["msg", "loading", "title", "expanded", "onExpand", "defaultExpanded"];
|
|
2
5
|
import { Think } from '@ant-design/x';
|
|
3
6
|
import React, { useEffect, useState } from 'react';
|
|
4
7
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
5
8
|
var ThinkRender = function ThinkRender(_ref) {
|
|
6
9
|
var msg = _ref.msg,
|
|
7
|
-
loading = _ref.loading
|
|
8
|
-
|
|
10
|
+
loading = _ref.loading,
|
|
11
|
+
title = _ref.title,
|
|
12
|
+
expanded = _ref.expanded,
|
|
13
|
+
onExpand = _ref.onExpand,
|
|
14
|
+
defaultExpanded = _ref.defaultExpanded,
|
|
15
|
+
rest = _objectWithoutProperties(_ref, _excluded);
|
|
16
|
+
var isControlled = expanded !== undefined;
|
|
17
|
+
var _useState = useState(defaultExpanded !== null && defaultExpanded !== void 0 ? defaultExpanded : false),
|
|
9
18
|
_useState2 = _slicedToArray(_useState, 2),
|
|
10
|
-
|
|
11
|
-
|
|
19
|
+
innerExpand = _useState2[0],
|
|
20
|
+
setInnerExpand = _useState2[1];
|
|
12
21
|
useEffect(function () {
|
|
13
|
-
if (
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
22
|
+
if (isControlled) return;
|
|
23
|
+
setInnerExpand(!!loading);
|
|
24
|
+
}, [loading, isControlled]);
|
|
25
|
+
var expandValue = isControlled ? expanded : innerExpand;
|
|
26
|
+
var handleExpand = function handleExpand(val) {
|
|
27
|
+
if (!isControlled) {
|
|
28
|
+
setInnerExpand(val);
|
|
17
29
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
onExpand === null || onExpand === void 0 || onExpand(val);
|
|
31
|
+
};
|
|
32
|
+
return /*#__PURE__*/_jsx(Think, _objectSpread(_objectSpread({
|
|
33
|
+
title: title !== null && title !== void 0 ? title : loading ? '思考中...' : '深度思考',
|
|
21
34
|
loading: loading,
|
|
22
|
-
expanded:
|
|
23
|
-
onExpand:
|
|
24
|
-
|
|
25
|
-
return !v;
|
|
26
|
-
});
|
|
27
|
-
},
|
|
35
|
+
expanded: expandValue,
|
|
36
|
+
onExpand: handleExpand
|
|
37
|
+
}, rest), {}, {
|
|
28
38
|
children: msg.text
|
|
29
|
-
});
|
|
39
|
+
}));
|
|
30
40
|
};
|
|
31
41
|
export default ThinkRender;
|
|
32
42
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Think","React","useEffect","useState","jsx","_jsx","ThinkRender","_ref","msg","loading","_useState","_useState2","_slicedToArray","
|
|
1
|
+
{"version":3,"names":["Think","React","useEffect","useState","jsx","_jsx","ThinkRender","_ref","msg","loading","title","expanded","onExpand","defaultExpanded","rest","_objectWithoutProperties","_excluded","isControlled","undefined","_useState","_useState2","_slicedToArray","innerExpand","setInnerExpand","expandValue","handleExpand","val","_objectSpread","children","text"],"sources":["../../../../../../src/components/XAdkChatbot/components/ThinkRender/index.tsx"],"sourcesContent":["import { Think } from '@ant-design/x';\nimport type { ThinkProps } from '@ant-design/x';\nimport React, { useEffect, useState } from 'react';\nimport type { IMessage } from '@/types';\n\nexport interface ThinkRenderProps extends Omit<ThinkProps, 'children'> {\n msg: IMessage;\n}\n\nconst ThinkRender: React.FC<ThinkRenderProps> = ({\n msg,\n loading,\n title,\n expanded,\n onExpand,\n defaultExpanded,\n ...rest\n}) => {\n const isControlled = expanded !== undefined;\n const [innerExpand, setInnerExpand] = useState(defaultExpanded ?? false);\n\n useEffect(() => {\n if (isControlled) return;\n setInnerExpand(!!loading);\n }, [loading, isControlled]);\n\n const expandValue = isControlled ? expanded : innerExpand;\n\n const handleExpand = (val: boolean) => {\n if (!isControlled) {\n setInnerExpand(val);\n }\n onExpand?.(val);\n };\n\n return (\n <Think\n title={title ?? (loading ? '思考中...' : '深度思考')}\n loading={loading}\n expanded={expandValue}\n onExpand={handleExpand}\n {...rest}\n >\n {msg.text}\n </Think>\n );\n};\n\nexport default ThinkRender;\n"],"mappings":";;;;AAAA,SAASA,KAAK,QAAQ,eAAe;AAErC,OAAOC,KAAK,IAAIC,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAOnD,IAAMC,WAAuC,GAAG,SAA1CA,WAAuCA,CAAAC,IAAA,EAQvC;EAAA,IAPJC,GAAG,GAAAD,IAAA,CAAHC,GAAG;IACHC,OAAO,GAAAF,IAAA,CAAPE,OAAO;IACPC,KAAK,GAAAH,IAAA,CAALG,KAAK;IACLC,QAAQ,GAAAJ,IAAA,CAARI,QAAQ;IACRC,QAAQ,GAAAL,IAAA,CAARK,QAAQ;IACRC,eAAe,GAAAN,IAAA,CAAfM,eAAe;IACZC,IAAI,GAAAC,wBAAA,CAAAR,IAAA,EAAAS,SAAA;EAEP,IAAMC,YAAY,GAAGN,QAAQ,KAAKO,SAAS;EAC3C,IAAAC,SAAA,GAAsChB,QAAQ,CAACU,eAAe,aAAfA,eAAe,cAAfA,eAAe,GAAI,KAAK,CAAC;IAAAO,UAAA,GAAAC,cAAA,CAAAF,SAAA;IAAjEG,WAAW,GAAAF,UAAA;IAAEG,cAAc,GAAAH,UAAA;EAElClB,SAAS,CAAC,YAAM;IACd,IAAIe,YAAY,EAAE;IAClBM,cAAc,CAAC,CAAC,CAACd,OAAO,CAAC;EAC3B,CAAC,EAAE,CAACA,OAAO,EAAEQ,YAAY,CAAC,CAAC;EAE3B,IAAMO,WAAW,GAAGP,YAAY,GAAGN,QAAQ,GAAGW,WAAW;EAEzD,IAAMG,YAAY,GAAG,SAAfA,YAAYA,CAAIC,GAAY,EAAK;IACrC,IAAI,CAACT,YAAY,EAAE;MACjBM,cAAc,CAACG,GAAG,CAAC;IACrB;IACAd,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAGc,GAAG,CAAC;EACjB,CAAC;EAED,oBACErB,IAAA,CAACL,KAAK,EAAA2B,aAAA,CAAAA,aAAA;IACJjB,KAAK,EAAEA,KAAK,aAALA,KAAK,cAALA,KAAK,GAAKD,OAAO,GAAG,QAAQ,GAAG,MAAQ;IAC9CA,OAAO,EAAEA,OAAQ;IACjBE,QAAQ,EAAEa,WAAY;IACtBZ,QAAQ,EAAEa;EAAa,GACnBX,IAAI;IAAAc,QAAA,EAEPpB,GAAG,CAACqB;EAAI,EACJ,CAAC;AAEZ,CAAC;AAED,eAAevB,WAAW"}
|
|
@@ -9,7 +9,7 @@ import { useStyles } from "./styles";
|
|
|
9
9
|
import MarkdownRender from "./components/MarkdownRender";
|
|
10
10
|
import FunctionCallRender from "./components/FunctionCallRender";
|
|
11
11
|
import FileGallery from "../FileGallery";
|
|
12
|
-
import
|
|
12
|
+
import XAdkThoughtChain from "../XAdkThoughtChain";
|
|
13
13
|
import { parseAgentMessage } from "../../utils";
|
|
14
14
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
15
15
|
import { jsxs as _jsxs } from "react/jsx-runtime";
|
|
@@ -314,7 +314,7 @@ var XAdkChatbot = function XAdkChatbot(_ref) {
|
|
|
314
314
|
className: styles.botMsg,
|
|
315
315
|
children: [nodes.map(function (node, idx) {
|
|
316
316
|
if (node.type === "process") {
|
|
317
|
-
return /*#__PURE__*/_jsx(
|
|
317
|
+
return /*#__PURE__*/_jsx(XAdkThoughtChain, {
|
|
318
318
|
loading: isGroupLoading,
|
|
319
319
|
title: "\u601D\u7EF4\u94FE\u5DF2\u5B8C\u6210",
|
|
320
320
|
items: node.items,
|
|
@@ -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","_ref$initialized","initialized","onFileClick","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","onClick","isLastBotMsg","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 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 onFileClick,\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} onFileClick={onFileClick} />\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} 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 ? 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 onFileClick,\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 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),\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","XAdkThoughtChain","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","onFileClick","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","onClick","isLastBotMsg","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 type { IMessage, XAdkChatbotProps, ChatGroup } from \"@/types\";\nimport type { ThoughtChainItemType } from \"@/types/XAdkThoughtChain\";\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 onFileClick,\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\n key={`${msg.id}-${i}`}\n text={msg.text}\n onFileClick={onFileClick}\n />\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 <XAdkThoughtChain\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} 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 ? 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 onFileClick,\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 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),\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,6 +1,6 @@
|
|
|
1
1
|
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
|
|
2
2
|
import React, { useState, useEffect } from "react";
|
|
3
|
-
import { CheckCircleFilled, SyncOutlined, ThunderboltOutlined, PartitionOutlined,
|
|
3
|
+
import { CheckCircleFilled, SyncOutlined, ThunderboltOutlined, PartitionOutlined, RightOutlined, DownOutlined } from "@ant-design/icons";
|
|
4
4
|
import MarkdownRender from "../XAdkChatbot/components/MarkdownRender";
|
|
5
5
|
import FunctionCallRender from "../XAdkChatbot/components/FunctionCallRender";
|
|
6
6
|
import { useStyles } from "./styles";
|
|
@@ -14,7 +14,8 @@ var TimelineItem = function TimelineItem(_ref) {
|
|
|
14
14
|
_ref$collapsible = _ref.collapsible,
|
|
15
15
|
collapsible = _ref$collapsible === void 0 ? true : _ref$collapsible,
|
|
16
16
|
_ref$defaultOpen = _ref.defaultOpen,
|
|
17
|
-
defaultOpen = _ref$defaultOpen === void 0 ? true : _ref$defaultOpen
|
|
17
|
+
defaultOpen = _ref$defaultOpen === void 0 ? true : _ref$defaultOpen,
|
|
18
|
+
blink = _ref.blink;
|
|
18
19
|
var _useState = useState(defaultOpen),
|
|
19
20
|
_useState2 = _slicedToArray(_useState, 2),
|
|
20
21
|
isOpen = _useState2[0],
|
|
@@ -35,6 +36,7 @@ var TimelineItem = function TimelineItem(_ref) {
|
|
|
35
36
|
return collapsible ? setIsOpen(!isOpen) : undefined;
|
|
36
37
|
},
|
|
37
38
|
children: [/*#__PURE__*/_jsx("div", {
|
|
39
|
+
className: blink ? styles.blink : undefined,
|
|
38
40
|
children: title
|
|
39
41
|
}), collapsible && /*#__PURE__*/_jsx("span", {
|
|
40
42
|
className: styles.arrowIcon,
|
|
@@ -48,7 +50,8 @@ var TimelineItem = function TimelineItem(_ref) {
|
|
|
48
50
|
});
|
|
49
51
|
};
|
|
50
52
|
var TimelineTextItem = function TimelineTextItem(_ref2) {
|
|
51
|
-
var item = _ref2.item
|
|
53
|
+
var item = _ref2.item,
|
|
54
|
+
blink = _ref2.blink;
|
|
52
55
|
return /*#__PURE__*/_jsx(TimelineItem, {
|
|
53
56
|
icon: /*#__PURE__*/_jsx("span", {
|
|
54
57
|
className: useStyles().timelineIcon,
|
|
@@ -58,6 +61,7 @@ var TimelineTextItem = function TimelineTextItem(_ref2) {
|
|
|
58
61
|
className: useStyles().titleText,
|
|
59
62
|
children: item.title
|
|
60
63
|
}),
|
|
64
|
+
blink: blink,
|
|
61
65
|
children: /*#__PURE__*/_jsx(MarkdownRender, {
|
|
62
66
|
text: cleanProcessText(item.content)
|
|
63
67
|
})
|
|
@@ -68,7 +72,8 @@ var TimelineToolItem = function TimelineToolItem(_ref3) {
|
|
|
68
72
|
var msg = _ref3.msg,
|
|
69
73
|
collapsible = _ref3.collapsible,
|
|
70
74
|
onConfirm = _ref3.onConfirm,
|
|
71
|
-
showFnCallDetail = _ref3.showFnCallDetail
|
|
75
|
+
showFnCallDetail = _ref3.showFnCallDetail,
|
|
76
|
+
blink = _ref3.blink;
|
|
72
77
|
var styles = useStyles();
|
|
73
78
|
var needsConfirm = msg.functionCall && !msg.functionResponse;
|
|
74
79
|
var isDone = !!msg.functionResponse;
|
|
@@ -92,6 +97,7 @@ var TimelineToolItem = function TimelineToolItem(_ref3) {
|
|
|
92
97
|
title: titleNode,
|
|
93
98
|
collapsible: collapsible,
|
|
94
99
|
defaultOpen: needsConfirm,
|
|
100
|
+
blink: blink,
|
|
95
101
|
children: [statusInfo && typeof statusInfo === "string" && /*#__PURE__*/_jsx("div", {
|
|
96
102
|
className: styles.statusInfo,
|
|
97
103
|
children: statusInfo
|
|
@@ -102,7 +108,7 @@ var TimelineToolItem = function TimelineToolItem(_ref3) {
|
|
|
102
108
|
})]
|
|
103
109
|
});
|
|
104
110
|
};
|
|
105
|
-
var
|
|
111
|
+
var XAdkThoughtChain = function XAdkThoughtChain(_ref4) {
|
|
106
112
|
var _ref4$defaultOpen = _ref4.defaultOpen,
|
|
107
113
|
defaultOpen = _ref4$defaultOpen === void 0 ? false : _ref4$defaultOpen,
|
|
108
114
|
_ref4$showFnCallDetai = _ref4.showFnCallDetail,
|
|
@@ -112,6 +118,8 @@ var XAiThoughtChain = function XAiThoughtChain(_ref4) {
|
|
|
112
118
|
_ref4$items = _ref4.items,
|
|
113
119
|
items = _ref4$items === void 0 ? [] : _ref4$items,
|
|
114
120
|
loading = _ref4.loading,
|
|
121
|
+
_ref4$blink = _ref4.blink,
|
|
122
|
+
blink = _ref4$blink === void 0 ? false : _ref4$blink,
|
|
115
123
|
onConfirm = _ref4.onConfirm;
|
|
116
124
|
var styles = useStyles();
|
|
117
125
|
var _useState3 = useState(defaultOpen),
|
|
@@ -123,19 +131,17 @@ var XAiThoughtChain = function XAiThoughtChain(_ref4) {
|
|
|
123
131
|
return setIsOpen(true);
|
|
124
132
|
});
|
|
125
133
|
}, [loading]);
|
|
134
|
+
var shouldBlink = blink && loading;
|
|
126
135
|
return /*#__PURE__*/_jsxs("div", {
|
|
127
136
|
className: styles.thoughtChainBlock,
|
|
128
|
-
children: [/*#__PURE__*/
|
|
137
|
+
children: [/*#__PURE__*/_jsx("div", {
|
|
129
138
|
className: styles.thoughtHeader,
|
|
130
139
|
onClick: function onClick() {
|
|
131
140
|
return setIsOpen(!isOpen);
|
|
132
141
|
},
|
|
133
|
-
children:
|
|
142
|
+
children: /*#__PURE__*/_jsxs("div", {
|
|
134
143
|
className: styles.headerLeft,
|
|
135
144
|
children: [/*#__PURE__*/_jsx("div", {
|
|
136
|
-
className: "".concat(styles.caret, " ").concat(isOpen ? "open" : ""),
|
|
137
|
-
children: /*#__PURE__*/_jsx(CaretRightOutlined, {})
|
|
138
|
-
}), /*#__PURE__*/_jsx("div", {
|
|
139
145
|
className: styles.statusIcon,
|
|
140
146
|
children: loading ? /*#__PURE__*/_jsx(SyncOutlined, {
|
|
141
147
|
spin: true,
|
|
@@ -148,33 +154,32 @@ var XAiThoughtChain = function XAiThoughtChain(_ref4) {
|
|
|
148
154
|
}
|
|
149
155
|
})
|
|
150
156
|
}), /*#__PURE__*/_jsx("span", {
|
|
151
|
-
className: styles.headerTitle,
|
|
157
|
+
className: "".concat(styles.headerTitle).concat(shouldBlink ? " ".concat(styles.blink) : ""),
|
|
152
158
|
children: loading ? "深度思考与执行中..." : title
|
|
159
|
+
}), /*#__PURE__*/_jsx("div", {
|
|
160
|
+
className: "".concat(styles.caret, " ").concat(isOpen ? "open" : ""),
|
|
161
|
+
children: /*#__PURE__*/_jsx(RightOutlined, {})
|
|
153
162
|
})]
|
|
154
|
-
})
|
|
155
|
-
className: styles.headerRight,
|
|
156
|
-
children: items.length > 0 && /*#__PURE__*/_jsxs("span", {
|
|
157
|
-
className: styles.stepCount,
|
|
158
|
-
children: [items.length, " \u4E2A\u6B65\u9AA4"]
|
|
159
|
-
})
|
|
160
|
-
})]
|
|
163
|
+
})
|
|
161
164
|
}), isOpen && /*#__PURE__*/_jsx("div", {
|
|
162
165
|
className: styles.thinkingBody,
|
|
163
166
|
children: /*#__PURE__*/_jsx("div", {
|
|
164
167
|
className: styles.timeline,
|
|
165
168
|
children: items.map(function (item, i) {
|
|
166
169
|
return item.type === "text" ? /*#__PURE__*/_jsx(TimelineTextItem, {
|
|
167
|
-
item: item
|
|
170
|
+
item: item,
|
|
171
|
+
blink: shouldBlink
|
|
168
172
|
}, item.key || i) : /*#__PURE__*/_jsx(TimelineToolItem, {
|
|
169
173
|
msg: item.msg,
|
|
170
174
|
collapsible: item.collapsible,
|
|
171
175
|
showFnCallDetail: showFnCallDetail,
|
|
172
|
-
onConfirm: onConfirm
|
|
176
|
+
onConfirm: onConfirm,
|
|
177
|
+
blink: shouldBlink
|
|
173
178
|
}, "tool-".concat(item.key || i));
|
|
174
179
|
})
|
|
175
180
|
})
|
|
176
181
|
})]
|
|
177
182
|
});
|
|
178
183
|
};
|
|
179
|
-
export default
|
|
184
|
+
export default XAdkThoughtChain;
|
|
180
185
|
//# sourceMappingURL=index.js.map
|