@zero-library/chat-agent 2.1.16 → 2.1.17

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/index.cjs.js CHANGED
@@ -8,13 +8,13 @@ var react = require('react');
8
8
  var valtio = require('valtio');
9
9
  var icons = require('@ant-design/icons');
10
10
  var x = require('@ant-design/x');
11
- var classNames8 = require('classnames');
11
+ var classNames9 = require('classnames');
12
12
  var InfiniteScroll = require('react-infinite-scroll-component');
13
13
 
14
14
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
15
15
 
16
16
  var dayjs__default = /*#__PURE__*/_interopDefault(dayjs);
17
- var classNames8__default = /*#__PURE__*/_interopDefault(classNames8);
17
+ var classNames9__default = /*#__PURE__*/_interopDefault(classNames9);
18
18
  var InfiniteScroll__default = /*#__PURE__*/_interopDefault(InfiniteScroll);
19
19
 
20
20
  var __defProp = Object.defineProperty;
@@ -26,31 +26,9 @@ var __export = (target, all) => {
26
26
  for (var name in all)
27
27
  __defProp(target, name, { get: all[name], enumerable: true });
28
28
  };
29
- function transform(source, fieldMap) {
30
- const result = {};
31
- for (const [targetKey, mapping] of Object.entries(fieldMap)) {
32
- const key = targetKey;
33
- if (typeof mapping === "function") {
34
- result[key] = mapping(source);
35
- } else if (typeof mapping === "string" && source && mapping in source) {
36
- result[key] = source[mapping];
37
- } else {
38
- result[key] = mapping;
39
- }
40
- }
41
- return result;
42
- }
43
- function transforms(sources, fieldMap) {
44
- return sources?.map((source) => transform(source, fieldMap)) || [];
45
- }
46
- var copy, classifyTime, replaceThinkTags;
29
+ var classifyTime, copy;
47
30
  var init_utils = __esm({
48
31
  "src/core/utils.ts"() {
49
- copy = (value) => {
50
- common.copyText(value).then(() => {
51
- antd.message.success("\u590D\u5236\u6210\u529F");
52
- });
53
- };
54
32
  classifyTime = (timestamp) => {
55
33
  const now = dayjs__default.default();
56
34
  const target = dayjs__default.default(timestamp);
@@ -68,8 +46,10 @@ var init_utils = __esm({
68
46
  return "\u66F4\u65E9";
69
47
  }
70
48
  };
71
- replaceThinkTags = (str) => {
72
- return str.replace(/<think>/g, ":::alert type=think data={content:'").replace(/<\/think>/g, "'} :::");
49
+ copy = (value) => {
50
+ common.copyText(value).then(() => {
51
+ antd.message.success("\u590D\u5236\u6210\u529F");
52
+ });
73
53
  };
74
54
  }
75
55
  });
@@ -511,7 +491,7 @@ function createChatStore() {
511
491
  config.hooks = hooks;
512
492
  };
513
493
  const setUserInfo = (userInfo) => {
514
- config.userInfo = transform(userInfo || common.getCurrentUser() || {}, {
494
+ config.userInfo = common.transform(userInfo || common.getCurrentUser() || {}, {
515
495
  id: (userInfo2) => {
516
496
  return String(userInfo2["id"]);
517
497
  },
@@ -542,7 +522,7 @@ function createChatStore() {
542
522
  try {
543
523
  receiver.loading = true;
544
524
  const { data } = await config.services.request.agentInfoQuery(agentId);
545
- receiver.active = transform(data, {
525
+ receiver.active = common.transform(data, {
546
526
  name: "agentName",
547
527
  logo: "logo",
548
528
  description: "description",
@@ -574,7 +554,7 @@ function createChatStore() {
574
554
  };
575
555
  const switchExpert = (expert) => {
576
556
  if (receiver.active.id === expert.memberId) return;
577
- receiver.active = transform(expert, {
557
+ receiver.active = common.transform(expert, {
578
558
  name: "memberName",
579
559
  logo: "memberAvatar",
580
560
  id: "memberId"
@@ -644,7 +624,7 @@ function createChatStore() {
644
624
  ...conversations.list.params
645
625
  });
646
626
  if (receiver.active.id !== targetId) return;
647
- const items = transforms(data?.items || [], {
627
+ const items = common.transforms(data?.items || [], {
648
628
  key: "id",
649
629
  id: "id",
650
630
  label: "title",
@@ -1009,9 +989,6 @@ function createChatStore() {
1009
989
  // src/ui/layouts/index.tsx
1010
990
  init_Context();
1011
991
 
1012
- // src/components/MessageRender.tsx
1013
- init_utils();
1014
-
1015
992
  // src/ui/common/markdownAlert/index.ts
1016
993
  var customComponents = {
1017
994
  appCard: () => Promise.resolve().then(() => (init_AppCard(), AppCard_exports)),
@@ -1036,8 +1013,8 @@ var MessageRender_default = ({ message: message3, placement }) => {
1036
1013
  x.Bubble,
1037
1014
  {
1038
1015
  placement,
1039
- className: classNames8__default.default({ [styles_module_default2.loadingMessage]: message3.type }),
1040
- content: /* @__PURE__ */ jsxRuntime.jsx(common.RenderMarkdown, { content: replaceThinkTags(message3.msgContent), customComponents })
1016
+ className: classNames9__default.default({ [styles_module_default2.loadingMessage]: message3.type }),
1017
+ content: /* @__PURE__ */ jsxRuntime.jsx(common.RenderMarkdown, { content: message3.msgContent, customComponents })
1041
1018
  }
1042
1019
  ),
1043
1020
  message3.msgFiles?.map((file) => /* @__PURE__ */ jsxRuntime.jsx(
@@ -1063,7 +1040,7 @@ var MessageRender_default = ({ message: message3, placement }) => {
1063
1040
  message3.quoteMsg?.id && /* @__PURE__ */ jsxRuntime.jsx(
1064
1041
  x.Bubble,
1065
1042
  {
1066
- className: classNames8__default.default(styles_module_default2.chatQuoteMsg),
1043
+ className: classNames9__default.default(styles_module_default2.chatQuoteMsg),
1067
1044
  placement,
1068
1045
  content: /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { vertical: true, gap: 8, children: [
1069
1046
  message3.quoteMsg.msgContent && /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { children: [
@@ -1124,7 +1101,73 @@ var styles_module_default3 = {
1124
1101
  nsAvatarListItem: "styles_module_nsAvatarListItem",
1125
1102
  nsAvatarListItemIcon: "styles_module_nsAvatarListItemIcon",
1126
1103
  nsAvatarListItemIconActive: "styles_module_nsAvatarListItemIconActive",
1127
- nsAvatarListItemName: "styles_module_nsAvatarListItemName"
1104
+ nsAvatarListItemName: "styles_module_nsAvatarListItemName",
1105
+ think: "styles_module_think2",
1106
+ loadingMessage: "styles_module_loadingMessage2"
1107
+ };
1108
+ function extractThinkContent(content) {
1109
+ let main = content;
1110
+ const thinkContents = [];
1111
+ let buffer = "";
1112
+ const regex = /<think>(.*?)<\/think>/gs;
1113
+ for (const match of content.matchAll(regex)) {
1114
+ const thinkText = match[1].trim();
1115
+ thinkContents.push(thinkText);
1116
+ main = main.replace(match[0], "");
1117
+ }
1118
+ const lastStart = content.lastIndexOf("<think>");
1119
+ const lastEnd = content.lastIndexOf("</think>");
1120
+ if (lastStart > lastEnd) {
1121
+ buffer = content.slice(lastStart).replace("<think>", "");
1122
+ main = main.slice(0, lastStart);
1123
+ }
1124
+ return { mainContent: main, thinkContents, thinkBuffer: buffer };
1125
+ }
1126
+ function renderMarkdownPanel(content, label, key) {
1127
+ return {
1128
+ key,
1129
+ label,
1130
+ children: /* @__PURE__ */ jsxRuntime.jsx(common.RenderMarkdown, { content, customComponents })
1131
+ };
1132
+ }
1133
+ var MessageAIRender_default = ({ message: message3, placement }) => {
1134
+ const { mainContent, thinkContents, thinkBuffer } = react.useMemo(() => {
1135
+ if (!message3?.msgContent) return { mainContent: "", thinkContents: [], thinkBuffer: "" };
1136
+ return extractThinkContent(message3.msgContent);
1137
+ }, [message3?.msgContent]);
1138
+ if (!message3.msgContent) {
1139
+ return /* @__PURE__ */ jsxRuntime.jsx(antd.Typography, { children: /* @__PURE__ */ jsxRuntime.jsx(antd.Spin, { size: "small" }) });
1140
+ }
1141
+ return /* @__PURE__ */ jsxRuntime.jsx(antd.Flex, { vertical: true, children: /* @__PURE__ */ jsxRuntime.jsx(
1142
+ x.Bubble,
1143
+ {
1144
+ placement,
1145
+ className: classNames9__default.default({ [styles_module_default3.loadingMessage]: message3.type && message3.type !== "TEXT_MESSAGE_END" }),
1146
+ content: /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1147
+ thinkContents.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(
1148
+ antd.Collapse,
1149
+ {
1150
+ ghost: true,
1151
+ size: "small",
1152
+ className: styles_module_default3.think,
1153
+ defaultActiveKey: thinkContents.map((_, i) => `think-${i}`),
1154
+ items: thinkContents.map((content, index) => renderMarkdownPanel(content, `\u601D\u8003\u8FC7\u7A0B`, `think-${index}`))
1155
+ }
1156
+ ),
1157
+ thinkBuffer && /* @__PURE__ */ jsxRuntime.jsx(
1158
+ antd.Collapse,
1159
+ {
1160
+ ghost: true,
1161
+ size: "small",
1162
+ className: styles_module_default3.think,
1163
+ defaultActiveKey: ["buffer-think"],
1164
+ items: [renderMarkdownPanel(thinkBuffer, "\u4ED4\u7EC6\u601D\u8003\u4E2D...", "buffer-think")]
1165
+ }
1166
+ ),
1167
+ /* @__PURE__ */ jsxRuntime.jsx(common.RenderMarkdown, { content: mainContent, customComponents })
1168
+ ] })
1169
+ }
1170
+ ) });
1128
1171
  };
1129
1172
  var BubbleListItems_default = ({ firstMessage = false, avatar = { user: false, agent: true, other: true } }) => {
1130
1173
  const chatStore = useChatStore();
@@ -1174,7 +1217,7 @@ var BubbleListItems_default = ({ firstMessage = false, avatar = { user: false, a
1174
1217
  /* @__PURE__ */ jsxRuntime.jsx(
1175
1218
  x.Welcome,
1176
1219
  {
1177
- className: classNames8__default.default(styles_module_default3.chatWelcome, "p-t-32"),
1220
+ className: classNames9__default.default(styles_module_default3.chatWelcome, "p-t-32"),
1178
1221
  variant: "borderless",
1179
1222
  icon: /* @__PURE__ */ jsxRuntime.jsx(antd.Avatar, { shape: "square", size: 58, src: receiverState.active.logo }),
1180
1223
  title: `\u4F60\u597D\uFF0C\u6211\u662F${receiverState.active.name || ""}`,
@@ -1192,7 +1235,7 @@ var BubbleListItems_default = ({ firstMessage = false, avatar = { user: false, a
1192
1235
  label: "\u{1F914} \u63A8\u8350\u95EE\u9898:",
1193
1236
  children: receiverState.active.config.recommendQuestions.map(({ question }) => ({
1194
1237
  key: question,
1195
- description: /* @__PURE__ */ jsxRuntime.jsx("span", { onClick: () => chatStore.sendMessage(question), className: classNames8__default.default(styles_module_default3.chatWelcomePrompts, "text-ellipsis"), children: question })
1238
+ description: /* @__PURE__ */ jsxRuntime.jsx("span", { onClick: () => chatStore.sendMessage(question), className: classNames9__default.default(styles_module_default3.chatWelcomePrompts, "text-ellipsis"), children: question })
1196
1239
  }))
1197
1240
  }
1198
1241
  ]
@@ -1238,7 +1281,8 @@ var BubbleListItems_default = ({ firstMessage = false, avatar = { user: false, a
1238
1281
  placement: role.placement,
1239
1282
  variant: "borderless",
1240
1283
  avatar: role.avatar,
1241
- content: /* @__PURE__ */ jsxRuntime.jsx(MessageRender_default, { message: message3, placement: role.placement }),
1284
+ // content: <MessageRender message={message as ConversationMessage} placement={role.placement} />,
1285
+ content: role.user === "agent" ? /* @__PURE__ */ jsxRuntime.jsx(MessageAIRender_default, { message: message3, placement: role.placement }) : /* @__PURE__ */ jsxRuntime.jsx(MessageRender_default, { message: message3, placement: role.placement }),
1242
1286
  footer: role.user === "agent" && /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { children: [
1243
1287
  /* @__PURE__ */ jsxRuntime.jsx(antd.Button, { onClick: () => copy(message3.msgContent), color: "default", variant: "text", size: "small", icon: /* @__PURE__ */ jsxRuntime.jsx(icons.CopyOutlined, {}) }),
1244
1288
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1324,7 +1368,7 @@ var BubbleListItems_default = ({ firstMessage = false, avatar = { user: false, a
1324
1368
  autoScroll: false,
1325
1369
  ref: listRef,
1326
1370
  items: bubbleListItems,
1327
- className: classNames8__default.default(styles_module_default3.nsBubbleList, "height-full", "scroll-fade-in", "zero-chat-bubbles"),
1371
+ className: classNames9__default.default(styles_module_default3.nsBubbleList, "height-full", "scroll-fade-in", "zero-chat-bubbles"),
1328
1372
  onScroll: handleScroll
1329
1373
  },
1330
1374
  conversationState.active.id
@@ -1359,7 +1403,7 @@ var CharacterList_default = () => {
1359
1403
  /* @__PURE__ */ jsxRuntime.jsx(
1360
1404
  antd.Avatar,
1361
1405
  {
1362
- className: classNames8__default.default(styles_module_default3.nsAvatarListItemIcon, "cursor-pointer", {
1406
+ className: classNames9__default.default(styles_module_default3.nsAvatarListItemIcon, "cursor-pointer", {
1363
1407
  [styles_module_default3.nsAvatarListItemIconActive]: activeCharacter.id === item.id
1364
1408
  }),
1365
1409
  size: 50,
@@ -1454,7 +1498,7 @@ var ChatHeader_default = ({
1454
1498
  const chatStore = useChatStore();
1455
1499
  const receiverState = valtio.useSnapshot(chatStore.receiver);
1456
1500
  const configState = valtio.useSnapshot(chatStore.config);
1457
- return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { justify: "space-between", align: "center", className: classNames8__default.default(styles_module_default3.nsChatHeader, "zero-chat-header"), children: [
1501
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { justify: "space-between", align: "center", className: classNames9__default.default(styles_module_default3.nsChatHeader, "zero-chat-header"), children: [
1458
1502
  /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { gap: 4, align: "center", children: [
1459
1503
  /* @__PURE__ */ jsxRuntime.jsx(
1460
1504
  common.RenderWrapper,
@@ -1764,7 +1808,7 @@ var SenderPromptsItems_default = () => {
1764
1808
  title: /* @__PURE__ */ jsxRuntime.jsx(
1765
1809
  "div",
1766
1810
  {
1767
- className: classNames8__default.default(styles_module_default3.nsSenderListTitle, "text-ellipsis"),
1811
+ className: classNames9__default.default(styles_module_default3.nsSenderListTitle, "text-ellipsis"),
1768
1812
  children: `${receiverState.active.name}\u5F00\u59CB\u5173\u6CE8${question.name}\u5185\u5BB9\uFF01`
1769
1813
  }
1770
1814
  ),
@@ -1893,7 +1937,7 @@ var ConversationListHeader_default = () => {
1893
1937
  type: "primary",
1894
1938
  shape: "round",
1895
1939
  onClick: () => chatStore.createConversation(),
1896
- className: classNames8__default.default("m-t-16"),
1940
+ className: classNames9__default.default("m-t-16"),
1897
1941
  icon: /* @__PURE__ */ jsxRuntime.jsx(icons.PlusOutlined, {}),
1898
1942
  children: "\u65B0\u5EFA\u4F1A\u8BDD"
1899
1943
  }
@@ -1901,7 +1945,7 @@ var ConversationListHeader_default = () => {
1901
1945
  ] });
1902
1946
  };
1903
1947
  var ConversationListPanel_default = ({ header }) => {
1904
- return /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { vertical: true, className: classNames8__default.default("height-full", "zero-chat-conversations", styles_module_default3.nsConversationListPanel), children: [
1948
+ return /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { vertical: true, className: classNames9__default.default("height-full", "zero-chat-conversations", styles_module_default3.nsConversationListPanel), children: [
1905
1949
  /* @__PURE__ */ jsxRuntime.jsx(common.RenderWrapper, { control: header, DefaultComponent: ConversationListHeader_default }),
1906
1950
  /* @__PURE__ */ jsxRuntime.jsx("div", { className: "full-scroll", children: /* @__PURE__ */ jsxRuntime.jsx(ConversationList_default, {}) })
1907
1951
  ] });
@@ -1999,7 +2043,7 @@ var layouts_default = react.forwardRef(({ theme, params, userInfo, hooks, layout
1999
2043
  react.useEffect(() => {
2000
2044
  configState.hooks?.onBeforeInit?.();
2001
2045
  }, []);
2002
- return /* @__PURE__ */ jsxRuntime.jsx(x.XProvider, { theme: { cssVar: true, ...theme }, children: /* @__PURE__ */ jsxRuntime.jsx(ChatProvider, { store: chatStore, children: /* @__PURE__ */ jsxRuntime.jsx(antd.Spin, { spinning: receiverState.loading, wrapperClassName: "full-spin", children: /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { vertical: true, className: classNames8__default.default(styles_module_default4.nsChatLayout, "zero-chat-layout", "height-full"), children: [
2046
+ return /* @__PURE__ */ jsxRuntime.jsx(x.XProvider, { theme: { cssVar: true, ...theme }, children: /* @__PURE__ */ jsxRuntime.jsx(ChatProvider, { store: chatStore, children: /* @__PURE__ */ jsxRuntime.jsx(antd.Spin, { spinning: receiverState.loading, wrapperClassName: "full-spin", children: /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { vertical: true, className: classNames9__default.default(styles_module_default4.nsChatLayout, "zero-chat-layout", "height-full"), children: [
2003
2047
  /* @__PURE__ */ jsxRuntime.jsx(common.RenderWrapper, { control: configState.layout.globalHeader, DefaultComponent: ChatHeader_default }),
2004
2048
  /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { className: "full-scroll", children: [
2005
2049
  /* @__PURE__ */ jsxRuntime.jsx(common.RenderWrapper, { control: configState.layout.leftPanel }),
@@ -2053,15 +2097,15 @@ var layouts_default = react.forwardRef(({ theme, params, userInfo, hooks, layout
2053
2097
  }
2054
2098
  )
2055
2099
  ] }) }),
2056
- /* @__PURE__ */ jsxRuntime.jsx(antd.Splitter.Panel, { collapsible: false, max: 800, min: 400, size: sizes[1], children: /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { vertical: true, className: classNames8__default.default("height-full"), children: [
2100
+ /* @__PURE__ */ jsxRuntime.jsx(antd.Splitter.Panel, { collapsible: false, max: 800, min: 400, size: sizes[1], children: /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { vertical: true, className: classNames9__default.default("height-full"), children: [
2057
2101
  /* @__PURE__ */ jsxRuntime.jsx(common.RenderWrapper, { control: configState.layout.chatHeader, DefaultComponent: ChatHeader_default }),
2058
- /* @__PURE__ */ jsxRuntime.jsx(antd.Flex, { vertical: true, className: classNames8__default.default("full-scroll"), children: /* @__PURE__ */ jsxRuntime.jsxs(
2102
+ /* @__PURE__ */ jsxRuntime.jsx(antd.Flex, { vertical: true, className: classNames9__default.default("full-scroll"), children: /* @__PURE__ */ jsxRuntime.jsxs(
2059
2103
  antd.Flex,
2060
2104
  {
2061
2105
  justify: "center",
2062
2106
  vertical: true,
2063
2107
  gap: 24,
2064
- className: classNames8__default.default("height-full", styles_module_default4.nsChatBody, "zero-chat-body", styles_module_default4.nsBodyWidth),
2108
+ className: classNames9__default.default("height-full", styles_module_default4.nsChatBody, "zero-chat-body", styles_module_default4.nsBodyWidth),
2065
2109
  children: [
2066
2110
  common.shouldRender(configState.layout.messageList) && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "full-scroll", children: /* @__PURE__ */ jsxRuntime.jsx(common.RenderWrapper, { control: configState.layout.messageList, DefaultComponent: BubbleListItems_default }) }),
2067
2111
  /* @__PURE__ */ jsxRuntime.jsxs(antd.Flex, { vertical: true, gap: 8, children: [