@zero-library/chat-agent 2.1.10 → 2.1.11

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
@@ -5,10 +5,10 @@ var antd = require('antd');
5
5
  var dayjs = require('dayjs');
6
6
  var jsxRuntime = require('react/jsx-runtime');
7
7
  var react = require('react');
8
+ var valtio = require('valtio');
8
9
  var icons = require('@ant-design/icons');
9
10
  var x = require('@ant-design/x');
10
11
  var classNames8 = require('classnames');
11
- var valtio = require('valtio');
12
12
  var InfiniteScroll = require('react-infinite-scroll-component');
13
13
 
14
14
  function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
@@ -26,19 +26,6 @@ var __export = (target, all) => {
26
26
  for (var name in all)
27
27
  __defProp(target, name, { get: all[name], enumerable: true });
28
28
  };
29
- var docQuery, fileCreate;
30
- var init_file = __esm({
31
- "src/services/file.ts"() {
32
- docQuery = (paramsStr) => {
33
- return common.request.get(`/uc/doc?${paramsStr}`);
34
- };
35
- fileCreate = async (fileContent, fileName, targetFormat = "docx") => {
36
- const blob = await common.request.post(`/uc/doc/convert`, { fileContent, fileName, targetFormat }, { responseType: "blob" });
37
- const url = URL.createObjectURL(blob);
38
- common.downloadFile(url, fileName);
39
- };
40
- }
41
- });
42
29
  function transform(source, fieldMap) {
43
30
  const result = {};
44
31
  for (const [targetKey, mapping] of Object.entries(fieldMap)) {
@@ -154,14 +141,16 @@ var init_FileView = __esm({
154
141
  var DocDrawer_default;
155
142
  var init_DocDrawer = __esm({
156
143
  "src/ui/common/markdownAlert/components/DocDrawer.tsx"() {
157
- init_file();
144
+ init_Context();
158
145
  DocDrawer_default = ({ title, open, onClose, fileUrl }) => {
146
+ const chatStore = useChatStore();
147
+ const configState = valtio.useSnapshot(chatStore.config);
159
148
  const [content, setContent] = react.useState("");
160
149
  const [loading, setLoading] = react.useState(false);
161
150
  const getContent = async () => {
162
151
  try {
163
152
  setLoading(true);
164
- const res = await docQuery(fileUrl);
153
+ const res = await configState.services.request.docQuery(fileUrl);
165
154
  setContent(res.data?.content);
166
155
  } finally {
167
156
  setLoading(false);
@@ -308,52 +297,95 @@ var init_QuoteList = __esm({
308
297
  }
309
298
  });
310
299
 
311
- // src/ui/layouts/index.tsx
312
- init_file();
313
-
314
300
  // src/stores/index.ts
315
301
  init_utils();
316
- var conversationsQuery = (params) => {
317
- return common.request.get("/lolr/conversation", params);
318
- };
319
- var conversationCreate = (params) => {
320
- return common.request.post("/lolr/conversation", params);
321
- };
322
- var conversationDelete = (conversationId) => {
323
- return common.request.delete("/lolr/conversation", { conversationId });
324
- };
325
- var conversationRecentQuery = (params) => {
326
- return common.request.get("/lolr/conversation/recent", params);
327
- };
328
- var conversationMessagesQuery = (params) => {
329
- return common.request.get("/lolr/conversation/message", params);
330
- };
331
- var feedbackUpdate = (params) => {
332
- return common.request.put("/lolr/conversation/message/feedback", params);
333
- };
334
- var messageSuggestedQuery = (msgId, maxCount = 3) => {
335
- return common.request.get("/lolr/conversation/suggest", { msgId, maxCount });
336
- };
337
- var conversationMemberQuery = (conversationId) => {
338
- return common.request.get("/lolr/conversation/member", { conversationId });
339
- };
340
- var conversationMessageSend = (params) => {
341
- return common.request.post("/lolr/conversation/send", params);
342
- };
343
- var conversationStop = (conversationId) => {
344
- return common.request.post("/lolr/conversation/stop", { conversationId });
345
- };
346
- var agentInfoQuery = (agentId) => {
347
- return common.request.get("/lolr/agent/detail", { agentId });
348
- };
349
- var agentCharacterQuery = (agentId) => {
350
- return common.request.get("/lolr/character", { agentId });
351
- };
352
- var agentCharacterSelect = (agentId, characterId) => {
353
- return common.request.post("/lolr/character/user", { agentId, characterId });
302
+
303
+ // src/services/index.ts
304
+ var createChatService = (request) => {
305
+ const conversationsQuery = (params) => {
306
+ return request.get("/lolr/conversation", params);
307
+ };
308
+ const conversationCreate = (params) => {
309
+ return request.post("/lolr/conversation", params);
310
+ };
311
+ const conversationDelete = (conversationId) => {
312
+ return request.delete("/lolr/conversation", { conversationId });
313
+ };
314
+ const conversationRecentUpdate = (params) => {
315
+ return request.put("/lolr/conversation/recent", params);
316
+ };
317
+ const conversationRecentQuery = (params) => {
318
+ return request.get("/lolr/conversation/recent", params);
319
+ };
320
+ const conversationMessagesQuery = (params) => {
321
+ return request.get("/lolr/conversation/message", params);
322
+ };
323
+ const conversationMessageRead = (conversationId) => {
324
+ return request.put("/lolr/conversation/message/read", { conversationId });
325
+ };
326
+ const feedbackUpdate = (params) => {
327
+ return request.put("/lolr/conversation/message/feedback", params);
328
+ };
329
+ const messageSuggestedQuery = (msgId, maxCount = 3) => {
330
+ return request.get("/lolr/conversation/suggest", { msgId, maxCount });
331
+ };
332
+ const conversationMemberQuery = (conversationId) => {
333
+ return request.get("/lolr/conversation/member", { conversationId });
334
+ };
335
+ const conversationStateUpdate = (conversationId, state) => {
336
+ return request.put("/lolr/conversation/state", { conversationId, state });
337
+ };
338
+ const conversationMessageSend = (params) => {
339
+ return request.post("/lolr/conversation/send", params);
340
+ };
341
+ const conversationStop = (conversationId) => {
342
+ return request.post("/lolr/conversation/stop", { conversationId });
343
+ };
344
+ const agentInfoQuery = (agentId) => {
345
+ return request.get("/lolr/agent/detail", { agentId });
346
+ };
347
+ const agentCharacterQuery = (agentId) => {
348
+ return request.get("/lolr/character", { agentId });
349
+ };
350
+ const agentCharacterSelect = (agentId, characterId) => {
351
+ return request.post("/lolr/character/user", { agentId, characterId });
352
+ };
353
+ const fileUpload = (formData) => {
354
+ return request.post("/lolr/storage/upload", formData, { timeout: 5 * 60 * 1e3 });
355
+ };
356
+ return {
357
+ conversationsQuery,
358
+ conversationCreate,
359
+ conversationDelete,
360
+ conversationRecentUpdate,
361
+ conversationRecentQuery,
362
+ conversationMessagesQuery,
363
+ conversationMessageRead,
364
+ feedbackUpdate,
365
+ messageSuggestedQuery,
366
+ conversationMemberQuery,
367
+ conversationStateUpdate,
368
+ conversationMessageSend,
369
+ conversationStop,
370
+ agentInfoQuery,
371
+ agentCharacterQuery,
372
+ agentCharacterSelect,
373
+ fileUpload
374
+ };
354
375
  };
355
- var fileUpload = (formData) => {
356
- return common.request.post("/lolr/storage/upload", formData, { timeout: 5 * 60 * 1e3 });
376
+ var createFileService = (request) => {
377
+ const docQuery = (paramsStr) => {
378
+ return request.get(`/uc/doc?${paramsStr}`);
379
+ };
380
+ const fileCreate = async (fileContent, fileName, targetFormat = "docx") => {
381
+ const blob = await request.post(`/uc/doc/convert`, { fileContent, fileName, targetFormat }, { responseType: "blob" });
382
+ const url = URL.createObjectURL(blob);
383
+ common.downloadFile(url, fileName);
384
+ };
385
+ return {
386
+ docQuery,
387
+ fileCreate
388
+ };
357
389
  };
358
390
 
359
391
  // src/stores/index.ts
@@ -397,6 +429,9 @@ var defaultExpertLayout = {
397
429
  };
398
430
  function createChatStore() {
399
431
  const config = valtio.proxy({
432
+ services: {
433
+ websocketBaseUrls: []
434
+ },
400
435
  hooks: {},
401
436
  layout: {},
402
437
  preview: {
@@ -409,6 +444,14 @@ function createChatStore() {
409
444
  userInfo: {},
410
445
  params: {}
411
446
  });
447
+ const setServices = ({ baseUrl = "/api" } = {}) => {
448
+ config.services.baseUrl = baseUrl;
449
+ if (!config.services.websocketBaseUrls?.includes(baseUrl)) {
450
+ config.services.websocketBaseUrls = [...config.services.websocketBaseUrls, baseUrl];
451
+ }
452
+ const request = common.createRequest(baseUrl);
453
+ config.services.request = { ...createChatService(request), ...createFileService(request) };
454
+ };
412
455
  const setPreview = (file = {}, isEdit = false) => {
413
456
  if (common.shouldRender(config.layout.preview)) {
414
457
  config.preview = {
@@ -464,7 +507,7 @@ function createChatStore() {
464
507
  }
465
508
  try {
466
509
  receiver.loading = true;
467
- const { data } = await agentInfoQuery(agentId);
510
+ const { data } = await config.services.request.agentInfoQuery(agentId);
468
511
  receiver.active = transform(data, {
469
512
  name: "agentName",
470
513
  logo: "logo",
@@ -515,7 +558,7 @@ function createChatStore() {
515
558
  const getCharacters = async (agentId) => {
516
559
  try {
517
560
  character.loading = true;
518
- const { data } = await agentCharacterQuery(agentId);
561
+ const { data } = await config.services.request.agentCharacterQuery(agentId);
519
562
  if (receiver.active.id !== agentId) return;
520
563
  character.list = data;
521
564
  const active = data.find((item) => item.selected);
@@ -536,7 +579,7 @@ function createChatStore() {
536
579
  if (!c.id) return;
537
580
  try {
538
581
  character.switchLoading = true;
539
- await agentCharacterSelect(receiver.active.id, c.id);
582
+ await config.services.request.agentCharacterSelect(receiver.active.id, c.id);
540
583
  character.active = { ...c };
541
584
  closeCharacterList();
542
585
  } finally {
@@ -559,7 +602,7 @@ function createChatStore() {
559
602
  const getConversations = async (targetId, targetType) => {
560
603
  try {
561
604
  conversations.loading = true;
562
- const { data } = await conversationsQuery({
605
+ const { data } = await config.services.request.conversationsQuery({
563
606
  targetId,
564
607
  targetType,
565
608
  businessId: config.params.businessId,
@@ -586,7 +629,7 @@ function createChatStore() {
586
629
  const canProceed = await config.hooks?.onBeforeDelConversation?.(conversationId);
587
630
  if (canProceed === false) return;
588
631
  conversations.delLoading = true;
589
- await conversationDelete(conversationId);
632
+ await config.services.request.conversationDelete(conversationId);
590
633
  antd.message.success("\u5220\u9664\u6210\u529F");
591
634
  conversations.list.items = conversations.list.items.filter((item) => item.key !== conversationId);
592
635
  delete conversation.messages[conversationId];
@@ -637,7 +680,7 @@ function createChatStore() {
637
680
  if (!messages?.length) return;
638
681
  let lastMessage = messages[messages.length - 1];
639
682
  if (!lastMessage || lastMessage.sender.type !== 3 || lastMessage.id !== messageId) return;
640
- const { data } = await messageSuggestedQuery(messageId);
683
+ const { data } = await config.services.request.messageSuggestedQuery(messageId);
641
684
  lastMessage = messages[messages.length - 1];
642
685
  if (lastMessage.id !== messageId) return;
643
686
  conversation.messages[conversationId].questionList = data;
@@ -645,7 +688,7 @@ function createChatStore() {
645
688
  const feedback = async (conversationId, messageId, msgFeedback, index) => {
646
689
  try {
647
690
  conversation.feedback.loading = true;
648
- await feedbackUpdate({ conversationId, id: messageId, msgFeedback });
691
+ await config.services.request.feedbackUpdate({ conversationId, id: messageId, msgFeedback });
649
692
  antd.message.success("\u611F\u8C22\u60A8\u7684\u53CD\u9988");
650
693
  conversation.messages[conversationId].message[index].msgFeedback = msgFeedback;
651
694
  } finally {
@@ -666,7 +709,7 @@ function createChatStore() {
666
709
  };
667
710
  const resolveConversationId = async (receiverId, strategy = 2) => {
668
711
  if (strategy === 1) {
669
- const { data } = await conversationRecentQuery({
712
+ const { data } = await config.services.request.conversationRecentQuery({
670
713
  receiverId,
671
714
  receiverType: 3,
672
715
  businessId: config.params.businessId,
@@ -674,7 +717,7 @@ function createChatStore() {
674
717
  });
675
718
  return data;
676
719
  } else {
677
- const { data } = await conversationCreate({
720
+ const { data } = await config.services.request.conversationCreate({
678
721
  receiverId,
679
722
  receiverType: 3,
680
723
  businessId: config.params.businessId,
@@ -689,7 +732,7 @@ function createChatStore() {
689
732
  };
690
733
  const initConversation = async (conversationId) => {
691
734
  try {
692
- const { data } = await conversationMemberQuery(conversationId);
735
+ const { data } = await config.services.request.conversationMemberQuery(conversationId);
693
736
  conversation.active = { id: conversationId, member: {} };
694
737
  data.forEach((member) => {
695
738
  if (member.memberType === 3) {
@@ -749,7 +792,7 @@ function createChatStore() {
749
792
  setInitMessage(conversationId);
750
793
  }
751
794
  if (conversation.messages[conversationId].message.length === 0) {
752
- const { data } = await conversationMessagesQuery({
795
+ const { data } = await config.services.request.conversationMessagesQuery({
753
796
  pageNo: 1,
754
797
  pageSize: 1e3,
755
798
  conversationId
@@ -809,7 +852,7 @@ function createChatStore() {
809
852
  setHeaderOpen(false);
810
853
  }
811
854
  try {
812
- await conversationMessageSend(sendParams);
855
+ await config.services.request.conversationMessageSend(sendParams);
813
856
  config.hooks?.onAfterSend?.();
814
857
  } finally {
815
858
  conversation.messages[conversationId].loading = false;
@@ -817,7 +860,7 @@ function createChatStore() {
817
860
  };
818
861
  const cancelReceive = async () => {
819
862
  console.log("\u53D6\u6D88\u63A5\u6536");
820
- await conversationStop(conversation.active.id);
863
+ await config.services.request.conversationStop(conversation.active.id);
821
864
  };
822
865
  const updateConversationTitle = (conversationId, title) => {
823
866
  const idx = conversations.list.items.findIndex((item) => item.id === conversationId);
@@ -887,6 +930,7 @@ function createChatStore() {
887
930
  };
888
931
  return {
889
932
  config,
933
+ setServices,
890
934
  setPreview,
891
935
  setLayout,
892
936
  setHooks,
@@ -1440,7 +1484,7 @@ var styles_module_default3 = {
1440
1484
  chatAttachments: "styles_module_chatAttachments",
1441
1485
  chatSender: "styles_module_chatSender"
1442
1486
  };
1443
- var Attachments_default = react.forwardRef(({ fileUploadConfig = [], fileList = [], onChange, extraParams }, ref) => {
1487
+ var Attachments_default = react.forwardRef(({ fileUpload, fileUploadConfig = [], fileList = [], onChange, extraParams }, ref) => {
1444
1488
  const { message: message3 } = antd.App.useApp();
1445
1489
  const fileListRef = react.useRef([]);
1446
1490
  const [attachedFiles, setAttachedFiles, getAttachedFiles] = common.useRefState([]);
@@ -1605,11 +1649,11 @@ var ChatSender_default = react.forwardRef(
1605
1649
  extraFooter,
1606
1650
  extraFooterBelow,
1607
1651
  sendBtnProps,
1608
- fileUpload: fileUpload2
1652
+ fileUpload
1609
1653
  }, ref) => {
1610
1654
  const senderRef = react.useRef(null);
1611
1655
  const { inputValue, setInputValue } = common.useSyncInput(content || "", onContentChange);
1612
- const attachmentsNode = (fileUpload2?.config?.length ?? 0 > 0) && /* @__PURE__ */ jsxRuntime.jsx(antd.Badge, { dot: !!fileList?.length && !headerOpen, children: /* @__PURE__ */ jsxRuntime.jsx(antd.Button, { type: "text", icon: /* @__PURE__ */ jsxRuntime.jsx(icons.PaperClipOutlined, {}), onClick: () => onHeaderOpenChange(!headerOpen) }) });
1656
+ const attachmentsNode = (fileUpload?.config?.length ?? 0 > 0) && /* @__PURE__ */ jsxRuntime.jsx(antd.Badge, { dot: !!fileList?.length && !headerOpen, children: /* @__PURE__ */ jsxRuntime.jsx(antd.Button, { type: "text", icon: /* @__PURE__ */ jsxRuntime.jsx(icons.PaperClipOutlined, {}), onClick: () => onHeaderOpenChange(!headerOpen) }) });
1613
1657
  const attachmentsRef = react.useRef();
1614
1658
  const senderHeader = /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
1615
1659
  /* @__PURE__ */ jsxRuntime.jsx(x.Sender.Header, { title: "\u9009\u62E9\u6587\u4EF6", open: headerOpen, onOpenChange: onHeaderOpenChange, children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -1617,9 +1661,10 @@ var ChatSender_default = react.forwardRef(
1617
1661
  {
1618
1662
  ref: attachmentsRef,
1619
1663
  fileList,
1664
+ fileUpload: fileUpload.request,
1620
1665
  onChange: onFileListChange,
1621
- fileUploadConfig: fileUpload2.config,
1622
- extraParams: fileUpload2.params
1666
+ fileUploadConfig: fileUpload.config,
1667
+ extraParams: fileUpload.params
1623
1668
  }
1624
1669
  ) }),
1625
1670
  extraHeader
@@ -1715,6 +1760,7 @@ var SenderPromptsItems_default = () => {
1715
1760
  var ChatSender_default2 = react.forwardRef(
1716
1761
  ({ placeholder, extraBtn = false, referencesBtn = false, sendBtnProps, footerBelow = false, prompts = true }, ref) => {
1717
1762
  const chatStore = useChatStore();
1763
+ const configState = valtio.useSnapshot(chatStore.config);
1718
1764
  const receiverState = valtio.useSnapshot(chatStore.receiver);
1719
1765
  const conversationState = valtio.useSnapshot(chatStore.conversation);
1720
1766
  const chatMessage = react.useMemo(
@@ -1746,6 +1792,7 @@ var ChatSender_default2 = react.forwardRef(
1746
1792
  onCancel: chatStore.cancelReceive,
1747
1793
  onFocus: chatStore.config.hooks?.onSenderFocus,
1748
1794
  fileUpload: {
1795
+ request: configState.services.request?.fileUpload,
1749
1796
  config: receiverState.active.config?.fileUpload
1750
1797
  },
1751
1798
  sendBtnProps: common.isFunction(sendBtnProps) ? sendBtnProps() : {},
@@ -1850,9 +1897,12 @@ var styles_module_default4 = {
1850
1897
  nsChatBody: "styles_module_nsChatBody",
1851
1898
  nsBodyWidth: "styles_module_nsBodyWidth"
1852
1899
  };
1853
- var layouts_default = react.forwardRef(({ theme, params, userInfo, hooks, layout, config }, ref) => {
1900
+ var layouts_default = react.forwardRef(({ theme, params, userInfo, hooks, layout, config, services }, ref) => {
1854
1901
  const chatStore = react.useMemo(() => createChatStore(), []);
1855
1902
  const senderRef = react.useRef();
1903
+ common.useDeepEffect(() => {
1904
+ chatStore.setServices(services);
1905
+ }, [services]);
1856
1906
  common.useDeepEffect(() => {
1857
1907
  if (config?.conversationId) {
1858
1908
  chatStore.switchConversation(config.conversationId);
@@ -1886,6 +1936,7 @@ var layouts_default = react.forwardRef(({ theme, params, userInfo, hooks, layout
1886
1936
  setReferences: chatStore.setReferences,
1887
1937
  setMessage: chatStore.setContent,
1888
1938
  setFiles: chatStore.setFileList,
1939
+ setServices: chatStore.setServices,
1889
1940
  setParams: chatStore.setParams,
1890
1941
  senderFocus: (options) => {
1891
1942
  senderRef.current?.focus(options);
@@ -1908,7 +1959,19 @@ var layouts_default = react.forwardRef(({ theme, params, userInfo, hooks, layout
1908
1959
  }
1909
1960
  }, [hasPreView]);
1910
1961
  common.useWebSocket({
1911
- url: common.getWebSocketUrl(`/api/lolr/conversation/ws/subscribe?NS-TOKEN=${common.getToken()}`, common.isLocalhost() ? "192.168.6.23" : ""),
1962
+ url: configState.services.websocketBaseUrls?.[0] && common.getWebSocketUrl(
1963
+ `${configState.services.websocketBaseUrls?.[0]}/lolr/conversation/ws/subscribe?NS-TOKEN=${common.getToken()}`,
1964
+ common.isLocalhost() ? "192.168.6.23" : ""
1965
+ ),
1966
+ onMessage: chatStore.acceptMessage,
1967
+ clientHeartbeat: false,
1968
+ reconnectInterval: 1e4
1969
+ });
1970
+ common.useWebSocket({
1971
+ url: configState.services.websocketBaseUrls?.[1] && common.getWebSocketUrl(
1972
+ `${configState.services.websocketBaseUrls?.[1]}/lolr/conversation/ws/subscribe?NS-TOKEN=${common.getToken()}`,
1973
+ common.isLocalhost() ? "192.168.6.23" : ""
1974
+ ),
1912
1975
  onMessage: chatStore.acceptMessage,
1913
1976
  clientHeartbeat: false,
1914
1977
  reconnectInterval: 1e4
@@ -1965,7 +2028,7 @@ var layouts_default = react.forwardRef(({ theme, params, userInfo, hooks, layout
1965
2028
  }
1966
2029
  });
1967
2030
  },
1968
- onDownloadFile: (content, type) => fileCreate(content, configState.preview.file.fileName, type),
2031
+ onDownloadFile: (content, type) => configState.services.request.fileCreate(content, configState.preview.file.fileName, type),
1969
2032
  extraNav: /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: /* @__PURE__ */ jsxRuntime.jsx(antd.Tag, { bordered: false, color: "default", className: "cursor-pointer", onClick: () => chatStore.setPreview(), children: /* @__PURE__ */ jsxRuntime.jsx(icons.CloseOutlined, {}) }) })
1970
2033
  }
1971
2034
  )