@ai-group/chat-sdk 0.2.8 → 0.2.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/dist/cjs/components/XAiChatbot/index.js +2 -1
  2. package/dist/cjs/components/XAiChatbot/index.js.map +2 -2
  3. package/dist/cjs/components/XAiChatbot/styles.d.ts +1 -0
  4. package/dist/cjs/components/XAiChatbot/styles.js +13 -0
  5. package/dist/cjs/components/XAiChatbot/styles.js.map +2 -2
  6. package/dist/cjs/components/XAiConversations/XAiConversations.stories.d.ts +6 -0
  7. package/dist/cjs/components/XAiConversations/XAiConversations.stories.js +82 -0
  8. package/dist/cjs/components/XAiConversations/XAiConversations.stories.js.map +7 -0
  9. package/dist/cjs/components/XAiConversations/index.d.ts +4 -0
  10. package/dist/cjs/components/XAiConversations/index.js +59 -0
  11. package/dist/cjs/components/XAiConversations/index.js.map +7 -0
  12. package/dist/cjs/components/XAiProvider/XAiProvider.stories.d.ts +2 -2
  13. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js +12 -12
  14. package/dist/cjs/components/XAiProvider/XAiProvider.stories.js.map +2 -2
  15. package/dist/cjs/components/XAiProvider/demo.styles.d.ts +35 -0
  16. package/dist/cjs/components/XAiProvider/demo.styles.js +37 -0
  17. package/dist/cjs/components/XAiProvider/demo.styles.js.map +7 -0
  18. package/dist/cjs/components/XAiProvider/index.js +6 -3
  19. package/dist/cjs/components/XAiProvider/index.js.map +3 -3
  20. package/dist/cjs/hooks/useAgentGenerator.d.ts +3 -0
  21. package/dist/cjs/hooks/useAgentGenerator.js +84 -1
  22. package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
  23. package/dist/cjs/services/api.d.ts +33 -0
  24. package/dist/cjs/services/api.js +33 -0
  25. package/dist/cjs/services/api.js.map +2 -2
  26. package/dist/cjs/types/XAiChatbot.d.ts +2 -0
  27. package/dist/cjs/types/XAiChatbot.js.map +1 -1
  28. package/dist/cjs/types/XAiConversations.d.ts +4 -0
  29. package/dist/cjs/types/XAiConversations.js +18 -0
  30. package/dist/cjs/types/XAiConversations.js.map +7 -0
  31. package/dist/cjs/types/index.d.ts +1 -0
  32. package/dist/cjs/types/index.js +3 -1
  33. package/dist/cjs/types/index.js.map +2 -2
  34. package/dist/esm/components/XAiChatbot/index.js +5 -0
  35. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  36. package/dist/esm/components/XAiChatbot/styles.d.ts +1 -0
  37. package/dist/esm/components/XAiChatbot/styles.js +18 -17
  38. package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
  39. package/dist/esm/components/XAiConversations/XAiConversations.stories.d.ts +6 -0
  40. package/dist/esm/components/XAiConversations/XAiConversations.stories.js +42 -0
  41. package/dist/esm/components/XAiConversations/XAiConversations.stories.js.map +1 -0
  42. package/dist/esm/components/XAiConversations/index.d.ts +4 -0
  43. package/dist/esm/components/XAiConversations/index.js +27 -0
  44. package/dist/esm/components/XAiConversations/index.js.map +1 -0
  45. package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +2 -2
  46. package/dist/esm/components/XAiProvider/XAiProvider.stories.js +38 -180
  47. package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
  48. package/dist/esm/components/XAiProvider/demo.styles.d.ts +35 -0
  49. package/dist/esm/components/XAiProvider/demo.styles.js +12 -0
  50. package/dist/esm/components/XAiProvider/demo.styles.js.map +1 -0
  51. package/dist/esm/components/XAiProvider/index.js +12 -2
  52. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  53. package/dist/esm/hooks/useAgentGenerator.d.ts +3 -0
  54. package/dist/esm/hooks/useAgentGenerator.js +154 -10
  55. package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
  56. package/dist/esm/services/api.d.ts +33 -0
  57. package/dist/esm/services/api.js +75 -0
  58. package/dist/esm/services/api.js.map +1 -1
  59. package/dist/esm/types/XAiChatbot.d.ts +2 -0
  60. package/dist/esm/types/XAiChatbot.js.map +1 -1
  61. package/dist/esm/types/XAiConversations.d.ts +4 -0
  62. package/dist/esm/types/XAiConversations.js +2 -0
  63. package/dist/esm/types/XAiConversations.js.map +1 -0
  64. package/dist/esm/types/index.d.ts +1 -0
  65. package/dist/esm/types/index.js +1 -0
  66. package/dist/esm/types/index.js.map +1 -1
  67. package/dist/umd/chat-sdk.min.js +1 -1
  68. package/package.json +1 -1
@@ -0,0 +1,35 @@
1
+ declare const useStyles: () => {
2
+ wrapper: string;
3
+ } & {
4
+ w: (width: string | number) => string;
5
+ h: (height: string | number) => string;
6
+ p: (padding: string) => string;
7
+ pb: (padding: string | number) => string;
8
+ pt: (padding: string | number) => string;
9
+ pl: (padding: string | number) => string;
10
+ pr: (padding: string | number) => string;
11
+ m: (margin: string) => string;
12
+ mb: (margin: string | number) => string;
13
+ mt: (margin: string | number) => string;
14
+ ml: (margin: string | number) => string;
15
+ mr: (margin: string | number) => string;
16
+ text: (size: string | number) => string;
17
+ weight: (size: number) => string;
18
+ textColor: (c: string) => string;
19
+ bg: (c: string) => string;
20
+ rs: (radius: string | number) => string;
21
+ gap: (g: string | number) => string;
22
+ flex: string;
23
+ flexCenter: string;
24
+ flexBetween: string;
25
+ flexColumn: string;
26
+ flex1: string;
27
+ cursor: (type: string) => string;
28
+ border: (color: string, width?: string) => string;
29
+ boxShadow: (shadow: string) => string;
30
+ transition: (property?: string, duration?: string) => string;
31
+ overflow: (type: string) => string;
32
+ position: (type: string) => string;
33
+ zIndex: (index: number) => string;
34
+ };
35
+ export default useStyles;
@@ -0,0 +1,37 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+
19
+ // src/components/XAiProvider/demo.styles.tsx
20
+ var demo_styles_exports = {};
21
+ __export(demo_styles_exports, {
22
+ default: () => demo_styles_default
23
+ });
24
+ module.exports = __toCommonJS(demo_styles_exports);
25
+ var import_css = require("@emotion/css");
26
+ var import_common = require("../../styles/common");
27
+ var useStyles = (0, import_common.withBasicStyles)(() => ({
28
+ // 静态样式
29
+ wrapper: import_css.css`
30
+ width: '100vw';
31
+ height: '100vh';
32
+ backgroundColor: rgb(240, 242, 245);
33
+ display: flex;
34
+ `
35
+ }));
36
+ var demo_styles_default = useStyles;
37
+ //# sourceMappingURL=demo.styles.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/components/XAiProvider/demo.styles.tsx"],
4
+ "sourcesContent": ["import { css } from '@emotion/css';\nimport { withBasicStyles } from '@/styles/common';\n\nconst useStyles = withBasicStyles(() => ({\n // 静态样式\n wrapper: css`\n width: '100vw';\n height: '100vh';\n backgroundColor: rgb(240, 242, 245);\n display: flex;\n `,\n}));\n\nexport default useStyles;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAAoB;AACpB,oBAAgC;AAEhC,IAAM,gBAAY,+BAAgB,OAAO;AAAA;AAAA,EAEvC,SAAS;AAAA;AAAA;AAAA;AAAA;AAAA;AAMX,EAAE;AAEF,IAAO,sBAAQ;",
6
+ "names": []
7
+ }
@@ -34,6 +34,7 @@ __export(XAiProvider_exports, {
34
34
  module.exports = __toCommonJS(XAiProvider_exports);
35
35
  var import_react = __toESM(require("react"));
36
36
  var import_antd = require("antd");
37
+ var import_uuid = require("uuid");
37
38
  var import_copy_to_clipboard = __toESM(require("copy-to-clipboard"));
38
39
  var import_x = require("@ant-design/x");
39
40
  var import_AiProviderContext = require("../../context/AiProviderContext");
@@ -48,7 +49,7 @@ var XAiProvider = ({
48
49
  onError,
49
50
  children
50
51
  }) => {
51
- const { appInfo, chat, stopChat, reChat, messages, loading, setMessages } = (0, import_useAgentGenerator.default)({ url, token, config, onError, onSuccess });
52
+ const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = (0, import_useAgentGenerator.default)({ url, token, config, onError, onSuccess });
52
53
  const { appName, icon } = appInfo || {};
53
54
  const handleSendMessage = (_type, content) => {
54
55
  chat(content);
@@ -56,6 +57,7 @@ var XAiProvider = ({
56
57
  const handleClearMessage = () => {
57
58
  stopChat();
58
59
  setMessages([]);
60
+ setCurrentSession((0, import_uuid.v4)());
59
61
  };
60
62
  const handleActions = (index, actionData) => {
61
63
  const { content, id } = actionData || {};
@@ -90,10 +92,11 @@ var XAiProvider = ({
90
92
  import_AiProviderContext.XAiContext.Provider,
91
93
  {
92
94
  value: {
93
- avatar: icon,
94
- userAvatar: import_user.default,
95
+ avatar: /* @__PURE__ */ import_react.default.createElement("img", { src: icon, alt: "智能体头像" }),
96
+ userAvatar: /* @__PURE__ */ import_react.default.createElement("img", { src: import_user.default, alt: "用户头像" }),
95
97
  emptyStateImage: icon,
96
98
  emptyStateText: appName,
99
+ footerTips: "内容由AI生成,无法确保真实准确,仅供参考",
97
100
  providerId,
98
101
  token,
99
102
  messages,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAiProvider/index.tsx"],
4
- "sourcesContent": ["import React from 'react';\nimport { message, Divider } from 'antd';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider: React.FC<XAiProviderProps> = ({\n url,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n children,\n}: XAiProviderProps) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, setMessages } = useAgentGenerator({ url, token, config, onError, onSuccess });\n\n const { appName, icon } = appInfo || {};\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleClearMessage = () => {\n stopChat();\n setMessages([]);\n };\n\n // 工具栏按钮点击\n const handleActions = (index: number, actionData: any) => {\n const { content, id } = actionData || {};\n const { text = '' } = content;\n switch (index) {\n case 0:\n reChat();\n break;\n case 1:\n copy(text);\n message.success('复制成功');\n break;\n case 2:\n setMessages((prev: any[]) => prev.filter((item: any) => item.id !== id));\n message.success('删除成功');\n break;\n }\n };\n\n // 建议消息点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev: any[]) => prev.filter((m: any) => m.id !== id));\n };\n\n const ToolTip = (messageData: any) => {\n const finalResult = (messageData?.think || []).find((item: any) => item.actionName === 'FINISHED');\n if (!finalResult) return null;\n const { cost, token: tokenCount } = finalResult.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { (cost !== undefined && cost !== null) && <div>{cost}s</div> }\n { tokenCount && <Divider type=\"vertical\" /> }\n { tokenCount && <div>{ tokenCount } tokens</div> }\n </div>\n );\n };\n\n return (\n <XProvider>\n <XAiContext.Provider value={{\n avatar: icon,\n userAvatar: userIcon,\n emptyStateImage: icon,\n emptyStateText: appName,\n providerId,\n token,\n messages,\n loading,\n error: null,\n messageTooltip: ToolTip,\n onSend: handleSendMessage,\n onClear: handleClearMessage,\n onStop: stopChat,\n onSuggestMessageClick: handleSuggestMessageClick,\n onMessagesActionsCallback: handleActions,\n isInProvider: true,\n }}\n >\n {children}\n </XAiContext.Provider>\n </XProvider>\n );\n};\n\nexport default XAiProvider;\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAiC;AACjC,+BAAiB;AACjB,eAA0B;AAC1B,+BAA2B;AAE3B,+BAA8B;AAC9B,kBAAqB;AAErB,IAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AAEtB,QAAM,EAAE,SAAS,MAAM,UAAU,QAAQ,UAAU,SAAS,YAAY,QAAI,yBAAAA,SAAkB,EAAE,KAAK,OAAO,QAAQ,SAAS,UAAU,CAAC;AAExI,QAAM,EAAE,SAAS,KAAK,IAAI,WAAW,CAAC;AAGtC,QAAM,oBAAoB,CAAC,OAAe,YAAoB;AAC5D,SAAK,OAAO;AAAA,EACd;AAGA,QAAM,qBAAqB,MAAM;AAC/B,aAAS;AACT,gBAAY,CAAC,CAAC;AAAA,EAChB;AAGA,QAAM,gBAAgB,CAAC,OAAe,eAAoB;AACxD,UAAM,EAAE,SAAS,GAAG,IAAI,cAAc,CAAC;AACvC,UAAM,EAAE,OAAO,GAAG,IAAI;AACtB,YAAQ,OAAO;AAAA,MACb,KAAK;AACH,eAAO;AACP;AAAA,MACF,KAAK;AACH,qCAAAC,SAAK,IAAI;AACT,4BAAQ,QAAQ,MAAM;AACtB;AAAA,MACF,KAAK;AACH,oBAAY,CAAC,SAAgB,KAAK,OAAO,CAAC,SAAc,KAAK,OAAO,EAAE,CAAC;AACvE,4BAAQ,QAAQ,MAAM;AACtB;AAAA,IACJ;AAAA,EACF;AAGA,QAAM,4BAA4B,CAAC,OAAY,OAAe;AAC5D,gBAAY,CAAC,SAAgB,KAAK,OAAO,CAAC,MAAW,EAAE,OAAO,EAAE,CAAC;AAAA,EACnE;AAEA,QAAM,UAAU,CAAC,gBAAqB;AACpC,UAAM,gBAAe,2CAAa,UAAS,CAAC,GAAG,KAAK,CAAC,SAAc,KAAK,eAAe,UAAU;AACjG,QAAI,CAAC;AAAa,aAAO;AACzB,UAAM,EAAE,MAAM,OAAO,WAAW,IAAI,YAAY,SAAS,CAAC;AAC1D,QAAI,CAAC,QAAQ,CAAC;AAAO,aAAO;AAC5B,WACE,6BAAAC,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,UAAU,QAAQ,OAAO,WAAW,MAAM,GAAG,cAAc,OAAO,KAClH,SAAS,UAAa,SAAS,QAAS,6BAAAA,QAAA,cAAC,aAAK,MAAK,GAAC,GACrD,cAAc,6BAAAA,QAAA,cAAC,uBAAQ,MAAK,YAAW,GACvC,cAAc,6BAAAA,QAAA,cAAC,aAAM,YAAY,SAAO,CAC5C;AAAA,EAEJ;AAEA,SACE,6BAAAA,QAAA,cAAC,0BACC,6BAAAA,QAAA;AAAA,IAAC,oCAAW;AAAA,IAAX;AAAA,MAAoB,OAAO;AAAA,QAC1B,QAAQ;AAAA,QACR,YAAY,YAAAC;AAAA,QACZ,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,uBAAuB;AAAA,QACvB,2BAA2B;AAAA,QAC3B,cAAc;AAAA,MAChB;AAAA;AAAA,IAEG;AAAA,EACH,CACF;AAEJ;AAEA,IAAO,sBAAQ;",
6
- "names": ["useAgentGenerator", "copy", "React", "userIcon"]
4
+ "sourcesContent": ["import React from 'react';\nimport { message, Divider } from 'antd';\nimport { v4 as uuidV4 } from 'uuid';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport { XAiContext } from '@/context/AiProviderContext';\nimport { XAiProviderProps } from '@/types/XAiProvider';\nimport useAgentGenerator from '@/hooks/useAgentGenerator';\nimport userIcon from '@/assets/user.png';\n\nconst XAiProvider: React.FC<XAiProviderProps> = ({\n url,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n children,\n}: XAiProviderProps) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const { appInfo, chat, stopChat, reChat, messages, loading, setCurrentSession, setMessages } = useAgentGenerator({ url, token, config, onError, onSuccess });\n\n const { appName, icon } = appInfo || {};\n\n // 发送消息\n const handleSendMessage = (_type: string, content: string) => {\n chat(content);\n };\n\n // 清空消息\n const handleClearMessage = () => {\n stopChat();\n setMessages([]);\n setCurrentSession(uuidV4());\n };\n\n // 工具栏按钮点击\n const handleActions = (index: number, actionData: any) => {\n const { content, id } = actionData || {};\n const { text = '' } = content;\n switch (index) {\n case 0:\n reChat();\n break;\n case 1:\n copy(text);\n message.success('复制成功');\n break;\n case 2:\n setMessages((prev: any[]) => prev.filter((item: any) => item.id !== id));\n message.success('删除成功');\n break;\n }\n };\n\n // 建议消息点击\n const handleSuggestMessageClick = (_item: any, id: string) => {\n setMessages((prev: any[]) => prev.filter((m: any) => m.id !== id));\n };\n\n const ToolTip = (messageData: any) => {\n const finalResult = (messageData?.think || []).find((item: any) => item.actionName === 'FINISHED');\n if (!finalResult) return null;\n const { cost, token: tokenCount } = finalResult.extra || {};\n if (!cost && !token) return null;\n return (\n <div style={{ display: 'flex', alignItems: 'center', fontSize: '12px', color: '#949494', flex: 1, paddingRight: '40px' }}>\n { (cost !== undefined && cost !== null) && <div>{cost}s</div> }\n { tokenCount && <Divider type=\"vertical\" /> }\n { tokenCount && <div>{ tokenCount } tokens</div> }\n </div>\n );\n };\n\n return (\n <XProvider>\n <XAiContext.Provider value={{\n avatar: <img src={icon} alt=\"智能体头像\" />,\n userAvatar: <img src={userIcon} alt=\"用户头像\" />,\n emptyStateImage: icon,\n emptyStateText: appName,\n footerTips: '内容由AI生成,无法确保真实准确,仅供参考',\n providerId,\n token,\n messages,\n loading,\n error: null,\n messageTooltip: ToolTip,\n onSend: handleSendMessage,\n onClear: handleClearMessage,\n onStop: stopChat,\n onSuggestMessageClick: handleSuggestMessageClick,\n onMessagesActionsCallback: handleActions,\n isInProvider: true,\n }}\n >\n {children}\n </XAiContext.Provider>\n </XProvider>\n );\n};\n\nexport default XAiProvider;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAClB,kBAAiC;AACjC,kBAA6B;AAC7B,+BAAiB;AACjB,eAA0B;AAC1B,+BAA2B;AAE3B,+BAA8B;AAC9B,kBAAqB;AAErB,IAAM,cAA0C,CAAC;AAAA,EAC/C;AAAA,EACA;AAAA,EACA;AAAA,EACA,aAAa;AAAA,EACb;AAAA,EACA;AAAA,EACA;AACF,MAAwB;AAEtB,QAAM,EAAE,SAAS,MAAM,UAAU,QAAQ,UAAU,SAAS,mBAAmB,YAAY,QAAI,yBAAAA,SAAkB,EAAE,KAAK,OAAO,QAAQ,SAAS,UAAU,CAAC;AAE3J,QAAM,EAAE,SAAS,KAAK,IAAI,WAAW,CAAC;AAGtC,QAAM,oBAAoB,CAAC,OAAe,YAAoB;AAC5D,SAAK,OAAO;AAAA,EACd;AAGA,QAAM,qBAAqB,MAAM;AAC/B,aAAS;AACT,gBAAY,CAAC,CAAC;AACd,0BAAkB,YAAAC,IAAO,CAAC;AAAA,EAC5B;AAGA,QAAM,gBAAgB,CAAC,OAAe,eAAoB;AACxD,UAAM,EAAE,SAAS,GAAG,IAAI,cAAc,CAAC;AACvC,UAAM,EAAE,OAAO,GAAG,IAAI;AACtB,YAAQ,OAAO;AAAA,MACb,KAAK;AACH,eAAO;AACP;AAAA,MACF,KAAK;AACH,qCAAAC,SAAK,IAAI;AACT,4BAAQ,QAAQ,MAAM;AACtB;AAAA,MACF,KAAK;AACH,oBAAY,CAAC,SAAgB,KAAK,OAAO,CAAC,SAAc,KAAK,OAAO,EAAE,CAAC;AACvE,4BAAQ,QAAQ,MAAM;AACtB;AAAA,IACJ;AAAA,EACF;AAGA,QAAM,4BAA4B,CAAC,OAAY,OAAe;AAC5D,gBAAY,CAAC,SAAgB,KAAK,OAAO,CAAC,MAAW,EAAE,OAAO,EAAE,CAAC;AAAA,EACnE;AAEA,QAAM,UAAU,CAAC,gBAAqB;AACpC,UAAM,gBAAe,2CAAa,UAAS,CAAC,GAAG,KAAK,CAAC,SAAc,KAAK,eAAe,UAAU;AACjG,QAAI,CAAC;AAAa,aAAO;AACzB,UAAM,EAAE,MAAM,OAAO,WAAW,IAAI,YAAY,SAAS,CAAC;AAC1D,QAAI,CAAC,QAAQ,CAAC;AAAO,aAAO;AAC5B,WACE,6BAAAC,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,YAAY,UAAU,UAAU,QAAQ,OAAO,WAAW,MAAM,GAAG,cAAc,OAAO,KAClH,SAAS,UAAa,SAAS,QAAS,6BAAAA,QAAA,cAAC,aAAK,MAAK,GAAC,GACrD,cAAc,6BAAAA,QAAA,cAAC,uBAAQ,MAAK,YAAW,GACvC,cAAc,6BAAAA,QAAA,cAAC,aAAM,YAAY,SAAO,CAC5C;AAAA,EAEJ;AAEA,SACE,6BAAAA,QAAA,cAAC,0BACC,6BAAAA,QAAA;AAAA,IAAC,oCAAW;AAAA,IAAX;AAAA,MAAoB,OAAO;AAAA,QAC1B,QAAQ,6BAAAA,QAAA,cAAC,SAAI,KAAK,MAAM,KAAI,SAAQ;AAAA,QACpC,YAAY,6BAAAA,QAAA,cAAC,SAAI,KAAK,YAAAC,SAAU,KAAI,QAAO;AAAA,QAC3C,iBAAiB;AAAA,QACjB,gBAAgB;AAAA,QAChB,YAAY;AAAA,QACZ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO;AAAA,QACP,gBAAgB;AAAA,QAChB,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,uBAAuB;AAAA,QACvB,2BAA2B;AAAA,QAC3B,cAAc;AAAA,MAChB;AAAA;AAAA,IAEG;AAAA,EACH,CACF;AAEJ;AAEA,IAAO,sBAAQ;",
6
+ "names": ["useAgentGenerator", "uuidV4", "copy", "React", "userIcon"]
7
7
  }
@@ -63,8 +63,11 @@ declare const useAgentGenerator: ({ url, token, config, onError, onSuccess, }: U
63
63
  messages: Messages[];
64
64
  loading: boolean;
65
65
  content: any;
66
+ sessionsList: any[];
67
+ currentSession: string;
66
68
  reChat: () => void;
67
69
  chat: (content: any) => Promise<void>;
70
+ setCurrentSession: import("react").Dispatch<import("react").SetStateAction<string>>;
68
71
  setMessage: (messageType: string, content: any) => Promise<void>;
69
72
  setMessages: import("react").Dispatch<import("react").SetStateAction<Messages[]>>;
70
73
  stopChat: () => void;
@@ -83,6 +83,8 @@ var useAgentGenerator = ({
83
83
  }) => {
84
84
  const textSpeed = 60;
85
85
  const [messages, setMessages] = (0, import_react.useState)([]);
86
+ const [sessionsList, setSessionList] = (0, import_react.useState)([]);
87
+ const [currentSession, setCurrentSession] = (0, import_react.useState)("");
86
88
  const [appInfo, setAppInfo] = (0, import_react.useState)(null);
87
89
  const requestInfo = (0, import_react.useRef)({});
88
90
  const { appNo, pt, tc } = config || {};
@@ -394,7 +396,8 @@ var useAgentGenerator = ({
394
396
  {
395
397
  appParams: {
396
398
  inputs_msg: content
397
- }
399
+ },
400
+ sessionId: currentSession
398
401
  },
399
402
  {
400
403
  Authorization: `Bearer ${token}`
@@ -441,8 +444,85 @@ var useAgentGenerator = ({
441
444
  return newMessages;
442
445
  });
443
446
  };
447
+ const formatMessages = (data) => {
448
+ setMessages((prev) => {
449
+ const initMessagesList = [];
450
+ data.forEach((item) => {
451
+ var _a;
452
+ const { content, messageTime, role } = item || {};
453
+ if (role === "USER") {
454
+ const newMessage = {
455
+ type: "TextMessage",
456
+ id: (0, import_uuid.v4)(),
457
+ createdAt: messageTime,
458
+ role: import_XAiMessage.MessageRole.user,
459
+ status: import_XAiMessage.MessageStatus.done,
460
+ content: {
461
+ text: content
462
+ }
463
+ };
464
+ initMessagesList.push(newMessage);
465
+ } else if (role === "AI") {
466
+ const contentObj = (0, import_utils.safeJsonParse)(content);
467
+ const newMessage = {
468
+ id: (0, import_uuid.v4)(),
469
+ type: "TextMessage",
470
+ createdAt: messageTime,
471
+ role: import_XAiMessage.MessageRole.assistant,
472
+ content: { text: (_a = contentObj == null ? void 0 : contentObj.result) == null ? void 0 : _a.result },
473
+ thinks: [],
474
+ status: import_XAiMessage.MessageStatus.done
475
+ };
476
+ initMessagesList.push(newMessage);
477
+ }
478
+ });
479
+ return [...prev, ...initMessagesList];
480
+ });
481
+ };
482
+ const initAppConversations = async () => {
483
+ var _a, _b, _c, _d;
484
+ try {
485
+ const result = await (0, import_api.fetchSessionList)({
486
+ url,
487
+ appNo,
488
+ pt,
489
+ tc,
490
+ token
491
+ });
492
+ if (result == null ? void 0 : result.success) {
493
+ if (((_a = result == null ? void 0 : result.data) == null ? void 0 : _a.length) > 0) {
494
+ setSessionList(result.data);
495
+ const { sessionId } = result.data[0];
496
+ if (sessionId) {
497
+ setCurrentSession(sessionId);
498
+ const sessionResult = await (0, import_api.fetchSessionDetail)({
499
+ url,
500
+ appNo,
501
+ pt,
502
+ tc,
503
+ sessionId,
504
+ token
505
+ });
506
+ if (sessionResult == null ? void 0 : sessionResult.success) {
507
+ const sessionsData = ((_d = (_c = (_b = sessionResult == null ? void 0 : sessionResult.data) == null ? void 0 : _b.list) == null ? void 0 : _c[0]) == null ? void 0 : _d.sessionMessages) || [];
508
+ if (sessionsData.length > 0) {
509
+ formatMessages(sessionsData);
510
+ }
511
+ }
512
+ } else {
513
+ setCurrentSession((0, import_uuid.v4)());
514
+ }
515
+ } else {
516
+ setSessionList([]);
517
+ setCurrentSession((0, import_uuid.v4)());
518
+ }
519
+ }
520
+ } catch {
521
+ }
522
+ };
444
523
  (0, import_react.useEffect)(() => {
445
524
  if (appInfo) {
525
+ initAppConversations();
446
526
  const { onboardingInfo = {} } = appInfo;
447
527
  const { suggested_questions = [], prologue = "" } = onboardingInfo || {};
448
528
  if (prologue) {
@@ -470,8 +550,11 @@ var useAgentGenerator = ({
470
550
  messages,
471
551
  loading,
472
552
  content: responseData.content,
553
+ sessionsList,
554
+ currentSession,
473
555
  reChat,
474
556
  chat,
557
+ setCurrentSession,
475
558
  setMessage,
476
559
  setMessages,
477
560
  stopChat
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useAgentGenerator.ts"],
4
- "sourcesContent": ["import { useState, useEffect, useRef } from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport { useEventStreamRequest } from '@/hooks/useEventStreamRequest';\nimport { MessageRole, MessageStatus, TextMessage, SuggestionMessage, Messages } from '@/types/XAiMessage';\nimport { Error, ErrorCode } from '@/types/XAiProvider';\nimport { request } from '@/utils/request';\nimport { safeJsonParse } from '@/utils/index';\nimport { fetchAppConfig } from '@/services/api';\n// 图标\nimport documentIcon from '@/assets/document.png';\nimport completedIcon from '@/assets/completed.png';\nimport completedExpandIcon from '@/assets/completed-black.png';\nimport documentExpandIcon from '@/assets/document-black.png';\nimport qaIcon from '@/assets/qa.png';\nimport qaExpandIcon from '@/assets/qa-black.png';\nimport skillNoIcon from '@/assets/skillNo.png';\nimport skillNoExpandIcon from '@/assets/skillNo-black.png';\nimport toolIcon from '@/assets/tools.png';\nimport toolExpandIcon from '@/assets/tools-black.png';\n\nexport type ContentType = 'TEXT' | 'IMAGE' | 'FILE';\n\nexport interface ImageUrl {\n url: string;\n name: string;\n}\n\nexport interface FileUrl {\n url: string;\n fileName: string;\n suffix: string;\n}\n\nexport interface Content {\n text?: string;\n imageUrl?: ImageUrl;\n fileUrl?: FileUrl;\n}\n\nexport interface ContentDef {\n description: string;\n contentType: ContentType;\n content: Content;\n}\n// contents 类型\nexport type Contents = ContentDef[];\n\n// —————————————— 接口字段定义 ————————————\nexport enum ActionType {\n recallKnowledgeStart = 'RECALL_KNOWLEDGE_START', // 知识库召回开始\n recallKnowledgeEnd = 'RECALL_KNOWLEDGE_END', // 知识库召回结束\n invokeToolStart = 'INVOKE_AGENT_TOOL_START', // 开始调用工具\n invokeToolEnd = 'INVOKE_AGENT_TOOL_END', // 调用工具完成\n suggest = 'FOLLOW_UP', // 用户提示\n response = 'RESPONSE', // 响应\n finish = 'FINISHED', // 结束\n}\n\nexport enum ProcessStatus {\n start = 'START',\n end = 'END',\n}\n\nexport enum ActionAvailability {\n disabled = 'disabled', // 不可用\n enabled = 'enabled', // 可用\n remote = 'remote', // 远程可用\n}\n\nexport type ThinkStep = any; // 临时定义,后续可完善\n\n/**\n* 工具/动作定义\n*/\nexport interface Action {\n name: string; // 名称\n description: string; // 描述\n jsonSchema: string; // 参数JSON Schema\n available?: ActionAvailability; // 可用性\n error?: Error; // 错误信息\n}\n\nexport interface UseAgentGeneratorProps {\n url: string;\n token: string;\n config: any;\n onError?: (error: Error) => void;\n onSuccess?: (appInfo: any) => void;\n}\nconst useAgentGenerator = ({\n url,\n token,\n config,\n onError,\n onSuccess,\n}: UseAgentGeneratorProps) => {\n const textSpeed = 60;\n\n const [messages, setMessages] = useState<Messages[]>([]);\n const [appInfo, setAppInfo] = useState<any>(null);\n const requestInfo = useRef<{ requestId?: string; sensitiveWords?: string[] }>({});\n\n const { appNo, pt, tc } = config || {};\n\n // 初始化时获取配置\n useEffect(() => {\n if (url && config) {\n const initConfig = async () => {\n try {\n const result = await fetchAppConfig({ url, ...config });\n if (result.success) {\n setAppInfo(result.data);\n\n const { enableFlag, isDeleted } = result.data?.publishDTO || {};\n if (!enableFlag) {\n onError?.({\n code: ErrorCode.APP_NOT_ENABLE,\n message: '应用未启用或者已下架',\n });\n } else if (isDeleted === 'Y') {\n onError?.({\n code: ErrorCode.APP_DELETED,\n message: '应用已下架',\n });\n } else {\n onSuccess?.(result.data);\n }\n } else {\n onError?.({\n code: ErrorCode.APP_NOT_FOUND,\n message: result?.message || '获取聊天配置失败',\n });\n }\n } catch (error) {\n console.error('获取聊天配置失败', error);\n onError?.({\n code: ErrorCode.API_ERROR,\n message: '获取聊天配置失败',\n });\n }\n };\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url, config]);\n\n const { start, loading, responseData, stop } = useEventStreamRequest({\n streaming: true,\n textSpeed,\n onClose: () => {\n // close的时机有可能在setMessages之前,所以需要延迟一下\n setTimeout(() => {\n if (requestInfo.current?.sensitiveWords && requestInfo.current?.requestId) {\n request.post(url);\n }\n }, 500);\n },\n onOpen(res) {\n console.log('res-----open:', res);\n },\n });\n\n // 数据更新\n useEffect(() => {\n if (!responseData || !responseData.content || !responseData.data) return;\n\n let response = responseData.data || responseData.content;\n if (typeof response === 'string') {\n response = safeJsonParse(response, {\n action: ActionType.response,\n data: {\n contentType: 'TEXT',\n content: '解析响应数据时出错,请重试',\n success: false,\n errorMsg: '响应数据格式错误',\n },\n });\n }\n\n setMessages((prevMessages) => {\n let newMessages = [...prevMessages];\n // 消息类型判断\n const { action, data } = response;\n const { uniqueId, contentType, content, toolType, args, knowledgeType, success = true, errorMsg } = data;\n\n // 建议类信息 特殊处理\n if (action === ActionType.suggest) {\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex === -1) {\n const newMessage: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [{\n key: uuidV4(),\n description: content,\n }],\n };\n newMessages.push(newMessage);\n } else {\n const suggestMsg = newMessages[suggestMessageIndex] as SuggestionMessage;\n if (suggestMsg?.content) {\n suggestMsg.content.push({\n key: uuidV4(),\n description: content,\n });\n }\n }\n return newMessages;\n }\n\n // 找到最后一条 AI 消息\n const lastAIMsgIndex = [...prevMessages].reverse().findIndex(\n (m) => m.role === MessageRole.assistant && m.type === 'TextMessage' && (m.status === 'init' || m.status === 'pending'),\n );\n const realIndex = lastAIMsgIndex === -1 ? -1 : prevMessages.length - 1 - lastAIMsgIndex;\n const lastAIMsg = realIndex !== -1 ? prevMessages[realIndex] : null;\n\n let aiMsg: TextMessage | undefined;\n\n if (!lastAIMsg) {\n aiMsg = {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: { text: '' },\n thinks: [],\n status: MessageStatus.init,\n };\n newMessages.push(aiMsg);\n } else if (lastAIMsg.type === 'TextMessage') {\n aiMsg = { ...lastAIMsg };\n } else if (lastAIMsg.type === 'ImageMessage') {\n aiMsg = undefined;\n }\n\n // 如果 aiMsg 为 undefined,则跳过处理\n if (!aiMsg) {\n return newMessages;\n }\n\n switch (action) {\n case ActionType.recallKnowledgeStart:\n aiMsg.thinks = aiMsg.thinks || [];\n aiMsg.thinks.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: knowledgeType === 'DOCUMENT' ? '已搜索文档知识库' : '已搜索问答知识库',\n arguments: args,\n extra: {\n ...data,\n icon: knowledgeType === 'DOCUMENT' ? documentIcon : qaIcon,\n expandIcon: knowledgeType === 'DOCUMENT' ? documentExpandIcon : qaExpandIcon,\n },\n });\n break;\n case ActionType.recallKnowledgeEnd: {\n // 需要给之前的recallKnowledgeStart添加cost - 通过uniqueId关联\n const recallKnowledgeMsg = aiMsg.thinks?.find((item) => item.id === uniqueId);\n if (recallKnowledgeMsg) {\n recallKnowledgeMsg.extra.cost = data?.cost ? (data?.cost / 1000).toFixed(2) : 0;\n }\n break;\n }\n case ActionType.invokeToolStart:\n aiMsg.thinks = aiMsg.thinks || [];\n aiMsg.thinks.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: toolType === 'SKILL' ? '已调用工作流' : '已调用工具',\n arguments: args,\n extra: {\n ...data,\n icon: toolType === 'SKILL' ? skillNoIcon : toolIcon,\n expandIcon: toolType === 'SKILL' ? skillNoExpandIcon : toolExpandIcon,\n },\n });\n break;\n case ActionType.invokeToolEnd: {\n // 需要给之前的invokeToolStart添加cost - 通过uniqueId关联\n const invokeToolMsg = aiMsg.thinks?.find((item) => item.id === uniqueId);\n if (invokeToolMsg) {\n invokeToolMsg.extra.cost = data?.cost ? (data?.cost / 1000).toFixed(2) : 0;\n }\n break;\n }\n case ActionType.response:\n if (success) {\n // 正常渲染\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n if (contentType === 'TEXT' && 'text' in aiMsg.content) {\n aiMsg.content.text += content;\n }\n } else {\n // 调用失败\n aiMsg.status = MessageStatus.failed;\n aiMsg.content.text = `<span style=\"color: red;\">❌ ${errorMsg}</span>`;\n }\n break;\n case ActionType.finish:\n aiMsg.thinks = aiMsg.thinks || [];\n aiMsg.thinks.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n extra: {\n ...data,\n cost: data?.cost ? (data?.cost / 1000).toFixed(2) : 0,\n icon: completedIcon,\n expandIcon: completedExpandIcon,\n },\n });\n aiMsg.status = MessageStatus.done;\n break;\n // 其他类型略\n }\n\n // 更新消息数组\n if (lastAIMsg && lastAIMsg.type === 'TextMessage') {\n newMessages[realIndex] = aiMsg;\n } else if (!lastAIMsg) {\n // 只有 newMessages 最后一条是 TextMessage 时才替换,否则 push\n if (newMessages.length > 0 && newMessages[newMessages.length - 1].type === 'TextMessage') {\n newMessages[newMessages.length - 1] = aiMsg;\n } else {\n // 只 push TextMessage,不替换非 TextMessage\n newMessages = [...newMessages, aiMsg];\n }\n }\n return newMessages;\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [responseData]);\n\n // 添加对话(非普通对话)\n const setMessage = async (messageType: string, content: any) => {\n switch (messageType) {\n case 'prologue': {\n const prologueMessageIndex = messages.findIndex((item) => item.extra?.prologue);\n if (prologueMessageIndex === -1) {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.assistant,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n extra: {\n prologue: true,\n noFooter: true,\n },\n };\n setMessages((prev) => [newMessage, ...prev]);\n } else {\n setMessages((prev) => prev.map((item) => {\n if (item.extra?.prologue && item.content && 'text' in item.content) {\n item.content.text = content;\n }\n return item;\n }));\n }\n break;\n }\n case 'suggest': {\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex === -1) {\n const prologueMessageIndex = messages.findIndex((item) => item.extra?.prologue);\n const newMessage: Messages = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content,\n };\n if (prologueMessageIndex === -1) {\n // 如果没有开场白,则插入到最前面\n setMessages((prev) => [newMessage, ...prev]);\n } else {\n // 如果有开场白,则插到开场白后面\n setMessages((prev) => {\n const newMessages = [...prev];\n newMessages.splice(prologueMessageIndex + 1, 0, newMessage);\n return newMessages;\n });\n }\n } else {\n setMessages((prev) => prev.map((item) => {\n if (item.type === 'SuggestionMessage') {\n item.content = content;\n }\n return item;\n }));\n }\n break;\n }\n default:\n break;\n }\n };\n\n // 简单对话\n const chat = async (content: any) => {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.user,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n };\n\n setMessages((prev) => {\n // 若存在对话建议,先删除对话建议\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex !== -1) {\n prev.splice(suggestMessageIndex, 1);\n }\n // 插入用户消息\n prev.push(newMessage);\n return prev;\n });\n\n start(\n `${url}/appouter/${appNo}/sendMsg?pt=${pt}&tc=${tc}`,\n {\n appParams: {\n inputs_msg: content,\n },\n },\n {\n Authorization: `Bearer ${token}`,\n },\n );\n };\n\n // 重新生成方法\n const reChat = () => {\n setMessages((prevMessages) => {\n // 1. 删除最新一条 AI 消息\n const lastAIMsgIndex = [...prevMessages].reverse().findIndex(\n (m) => m.role === MessageRole.assistant && m.type === 'TextMessage',\n );\n const newMessages = [...prevMessages];\n if (lastAIMsgIndex !== -1) {\n const realIndex = newMessages.length - 1 - lastAIMsgIndex;\n newMessages.splice(realIndex, 1);\n }\n\n // 2. 若存在对话建议,先删除对话建议\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex !== -1) {\n newMessages.splice(suggestMessageIndex, 1);\n }\n\n // 3. 找到最新一条用户消息,且类型为 TextMessage\n const lastUserMsg = [...newMessages].reverse().find(\n (m) => m.role === MessageRole.user && m.type === 'TextMessage',\n ) as TextMessage | undefined;\n if (lastUserMsg && lastUserMsg.content && typeof lastUserMsg.content.text === 'string') {\n // 重新发起 chat\n chat(lastUserMsg.content.text);\n }\n\n return newMessages;\n });\n };\n\n const stopChat = () => {\n stop();\n setMessages((prevMessages) => {\n // 找到我所有进行中的消息,并设置为结束\n const newMessages = [...prevMessages];\n newMessages.forEach((m) => {\n if (m.status === MessageStatus.pending) {\n m.status = MessageStatus.done;\n } else if (m.status === MessageStatus.init) {\n if (m.type === 'TextMessage') {\n m.content.text = '<span style=\"color: #cbcbcb;\">用户已取消</span>';\n }\n m.status = MessageStatus.done;\n }\n });\n return newMessages;\n });\n };\n\n // 初始化应用\n useEffect(() => {\n if (appInfo) {\n const { onboardingInfo = {} } = appInfo;\n // eslint-disable-next-line camelcase\n const { suggested_questions = [], prologue = '' } = onboardingInfo || {};\n\n if (prologue) {\n setMessage('prologue', prologue);\n } else {\n setMessages((prev) => prev.filter((item) => !item.extra?.prologue));\n }\n\n // 过滤空内容\n const formatSuggests = suggested_questions.filter((item: string) => item);\n\n if (formatSuggests.length > 0) {\n const suggestMessages = formatSuggests.map((item: string, index: number) => ({\n key: index + 1,\n description: item,\n }));\n setMessage('suggest', suggestMessages);\n } else {\n setMessages((prev) => prev.filter((item) => !(item.type === 'SuggestionMessage')));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [appInfo]);\n\n return {\n appInfo,\n messages,\n loading,\n content: responseData.content,\n reChat,\n chat,\n setMessage,\n setMessages,\n stopChat,\n };\n};\n\nexport default useAgentGenerator;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useState, useEffect, useRef } from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport { useEventStreamRequest } from '@/hooks/useEventStreamRequest';\nimport { MessageRole, MessageStatus, TextMessage, SuggestionMessage, Messages } from '@/types/XAiMessage';\nimport { Error, ErrorCode } from '@/types/XAiProvider';\nimport { request } from '@/utils/request';\nimport { safeJsonParse } from '@/utils/index';\nimport { fetchAppConfig, fetchSessionList, fetchSessionDetail } from '@/services/api';\n// 图标\nimport documentIcon from '@/assets/document.png';\nimport completedIcon from '@/assets/completed.png';\nimport completedExpandIcon from '@/assets/completed-black.png';\nimport documentExpandIcon from '@/assets/document-black.png';\nimport qaIcon from '@/assets/qa.png';\nimport qaExpandIcon from '@/assets/qa-black.png';\nimport skillNoIcon from '@/assets/skillNo.png';\nimport skillNoExpandIcon from '@/assets/skillNo-black.png';\nimport toolIcon from '@/assets/tools.png';\nimport toolExpandIcon from '@/assets/tools-black.png';\n\nexport type ContentType = 'TEXT' | 'IMAGE' | 'FILE';\n\nexport interface ImageUrl {\n url: string;\n name: string;\n}\n\nexport interface FileUrl {\n url: string;\n fileName: string;\n suffix: string;\n}\n\nexport interface Content {\n text?: string;\n imageUrl?: ImageUrl;\n fileUrl?: FileUrl;\n}\n\nexport interface ContentDef {\n description: string;\n contentType: ContentType;\n content: Content;\n}\n// contents 类型\nexport type Contents = ContentDef[];\n\n// —————————————— 接口字段定义 ————————————\nexport enum ActionType {\n recallKnowledgeStart = 'RECALL_KNOWLEDGE_START', // 知识库召回开始\n recallKnowledgeEnd = 'RECALL_KNOWLEDGE_END', // 知识库召回结束\n invokeToolStart = 'INVOKE_AGENT_TOOL_START', // 开始调用工具\n invokeToolEnd = 'INVOKE_AGENT_TOOL_END', // 调用工具完成\n suggest = 'FOLLOW_UP', // 用户提示\n response = 'RESPONSE', // 响应\n finish = 'FINISHED', // 结束\n}\n\nexport enum ProcessStatus {\n start = 'START',\n end = 'END',\n}\n\nexport enum ActionAvailability {\n disabled = 'disabled', // 不可用\n enabled = 'enabled', // 可用\n remote = 'remote', // 远程可用\n}\n\nexport type ThinkStep = any; // 临时定义,后续可完善\n\n/**\n* 工具/动作定义\n*/\nexport interface Action {\n name: string; // 名称\n description: string; // 描述\n jsonSchema: string; // 参数JSON Schema\n available?: ActionAvailability; // 可用性\n error?: Error; // 错误信息\n}\n\nexport interface UseAgentGeneratorProps {\n url: string;\n token: string;\n config: any;\n onError?: (error: Error) => void;\n onSuccess?: (appInfo: any) => void;\n}\nconst useAgentGenerator = ({\n url,\n token,\n config,\n onError,\n onSuccess,\n}: UseAgentGeneratorProps) => {\n const textSpeed = 60;\n // 聊天记录\n const [messages, setMessages] = useState<Messages[]>([]);\n // 会话记录\n const [sessionsList, setSessionList] = useState<any[]>([]);\n // 当前会话\n const [currentSession, setCurrentSession] = useState<string>('');\n // 应用 配置\n const [appInfo, setAppInfo] = useState<any>(null);\n // 请求 配置\n const requestInfo = useRef<{ requestId?: string; sensitiveWords?: string[] }>({});\n\n const { appNo, pt, tc } = config || {};\n\n // 初始化时获取配置\n useEffect(() => {\n if (url && config) {\n const initConfig = async () => {\n try {\n const result = await fetchAppConfig({ url, ...config });\n if (result.success) {\n setAppInfo(result.data);\n\n const { enableFlag, isDeleted } = result.data?.publishDTO || {};\n if (!enableFlag) {\n onError?.({\n code: ErrorCode.APP_NOT_ENABLE,\n message: '应用未启用或者已下架',\n });\n } else if (isDeleted === 'Y') {\n onError?.({\n code: ErrorCode.APP_DELETED,\n message: '应用已下架',\n });\n } else {\n onSuccess?.(result.data);\n }\n } else {\n onError?.({\n code: ErrorCode.APP_NOT_FOUND,\n message: result?.message || '获取聊天配置失败',\n });\n }\n } catch (error) {\n console.error('获取聊天配置失败', error);\n onError?.({\n code: ErrorCode.API_ERROR,\n message: '获取聊天配置失败',\n });\n }\n };\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url, config]);\n\n const { start, loading, responseData, stop } = useEventStreamRequest({\n streaming: true,\n textSpeed,\n onClose: () => {\n // close的时机有可能在setMessages之前,所以需要延迟一下\n setTimeout(() => {\n if (requestInfo.current?.sensitiveWords && requestInfo.current?.requestId) {\n request.post(url);\n }\n }, 500);\n },\n onOpen(res) {\n console.log('res-----open:', res);\n },\n });\n\n // 数据更新\n useEffect(() => {\n if (!responseData || !responseData.content || !responseData.data) return;\n\n let response = responseData.data || responseData.content;\n if (typeof response === 'string') {\n response = safeJsonParse(response, {\n action: ActionType.response,\n data: {\n contentType: 'TEXT',\n content: '解析响应数据时出错,请重试',\n success: false,\n errorMsg: '响应数据格式错误',\n },\n });\n }\n\n setMessages((prevMessages) => {\n let newMessages = [...prevMessages];\n // 消息类型判断\n const { action, data } = response;\n const { uniqueId, contentType, content, toolType, args, knowledgeType, success = true, errorMsg } = data;\n\n // 建议类信息 特殊处理\n if (action === ActionType.suggest) {\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex === -1) {\n const newMessage: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [{\n key: uuidV4(),\n description: content,\n }],\n };\n // 插到末尾\n newMessages.push(newMessage);\n } else {\n const suggestMsg = newMessages[suggestMessageIndex] as SuggestionMessage;\n if (suggestMsg?.content) {\n suggestMsg.content.push({\n key: uuidV4(),\n description: content,\n });\n }\n }\n return newMessages;\n }\n\n // 找到最后一条 AI 消息\n const lastAIMsgIndex = [...prevMessages].reverse().findIndex(\n (m) => m.role === MessageRole.assistant && m.type === 'TextMessage' && (m.status === 'init' || m.status === 'pending'),\n );\n const realIndex = lastAIMsgIndex === -1 ? -1 : prevMessages.length - 1 - lastAIMsgIndex;\n const lastAIMsg = realIndex !== -1 ? prevMessages[realIndex] : null;\n\n let aiMsg: TextMessage | undefined;\n\n if (!lastAIMsg) {\n aiMsg = {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: { text: '' },\n thinks: [],\n status: MessageStatus.init,\n };\n newMessages.push(aiMsg);\n } else if (lastAIMsg.type === 'TextMessage') {\n aiMsg = { ...lastAIMsg };\n } else if (lastAIMsg.type === 'ImageMessage') {\n aiMsg = undefined;\n }\n\n // 如果 aiMsg 为 undefined,则跳过处理\n if (!aiMsg) {\n return newMessages;\n }\n\n switch (action) {\n case ActionType.recallKnowledgeStart:\n aiMsg.thinks = aiMsg.thinks || [];\n aiMsg.thinks.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: knowledgeType === 'DOCUMENT' ? '已搜索文档知识库' : '已搜索问答知识库',\n arguments: args,\n extra: {\n ...data,\n icon: knowledgeType === 'DOCUMENT' ? documentIcon : qaIcon,\n expandIcon: knowledgeType === 'DOCUMENT' ? documentExpandIcon : qaExpandIcon,\n },\n });\n break;\n case ActionType.recallKnowledgeEnd: {\n // 需要给之前的recallKnowledgeStart添加cost - 通过uniqueId关联\n const recallKnowledgeMsg = aiMsg.thinks?.find((item) => item.id === uniqueId);\n if (recallKnowledgeMsg) {\n recallKnowledgeMsg.extra.cost = data?.cost ? (data?.cost / 1000).toFixed(2) : 0;\n }\n break;\n }\n case ActionType.invokeToolStart:\n aiMsg.thinks = aiMsg.thinks || [];\n aiMsg.thinks.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: toolType === 'SKILL' ? '已调用工作流' : '已调用工具',\n arguments: args,\n extra: {\n ...data,\n icon: toolType === 'SKILL' ? skillNoIcon : toolIcon,\n expandIcon: toolType === 'SKILL' ? skillNoExpandIcon : toolExpandIcon,\n },\n });\n break;\n case ActionType.invokeToolEnd: {\n // 需要给之前的invokeToolStart添加cost - 通过uniqueId关联\n const invokeToolMsg = aiMsg.thinks?.find((item) => item.id === uniqueId);\n if (invokeToolMsg) {\n invokeToolMsg.extra.cost = data?.cost ? (data?.cost / 1000).toFixed(2) : 0;\n }\n break;\n }\n case ActionType.response:\n if (success) {\n // 正常渲染\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n if (contentType === 'TEXT' && 'text' in aiMsg.content) {\n aiMsg.content.text += content;\n }\n } else {\n // 调用失败\n aiMsg.status = MessageStatus.failed;\n aiMsg.content.text = `<span style=\"color: red;\">❌ ${errorMsg}</span>`;\n }\n break;\n case ActionType.finish:\n aiMsg.thinks = aiMsg.thinks || [];\n aiMsg.thinks.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n extra: {\n ...data,\n cost: data?.cost ? (data?.cost / 1000).toFixed(2) : 0,\n icon: completedIcon,\n expandIcon: completedExpandIcon,\n },\n });\n aiMsg.status = MessageStatus.done;\n break;\n // 其他类型略\n }\n\n // 更新消息数组\n if (lastAIMsg && lastAIMsg.type === 'TextMessage') {\n newMessages[realIndex] = aiMsg;\n } else if (!lastAIMsg) {\n // 只有 newMessages 最后一条是 TextMessage 时才替换,否则 push\n if (newMessages.length > 0 && newMessages[newMessages.length - 1].type === 'TextMessage') {\n newMessages[newMessages.length - 1] = aiMsg;\n } else {\n // 只 push TextMessage,不替换非 TextMessage\n newMessages = [...newMessages, aiMsg];\n }\n }\n return newMessages;\n });\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [responseData]);\n\n // 添加对话(非普通对话)\n const setMessage = async (messageType: string, content: any) => {\n switch (messageType) {\n case 'prologue': {\n const prologueMessageIndex = messages.findIndex((item) => item.extra?.prologue);\n if (prologueMessageIndex === -1) {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.assistant,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n extra: {\n prologue: true,\n noFooter: true,\n },\n };\n setMessages((prev) => [newMessage, ...prev]);\n } else {\n setMessages((prev) => prev.map((item) => {\n if (item.extra?.prologue && item.content && 'text' in item.content) {\n item.content.text = content;\n }\n return item;\n }));\n }\n break;\n }\n case 'suggest': {\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex === -1) {\n const prologueMessageIndex = messages.findIndex((item) => item.extra?.prologue);\n const newMessage: Messages = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content,\n };\n if (prologueMessageIndex === -1) {\n // 如果没有开场白,则插入到最前面\n setMessages((prev) => [newMessage, ...prev]);\n } else {\n // 如果有开场白,则插到开场白后面\n setMessages((prev) => {\n const newMessages = [...prev];\n newMessages.splice(prologueMessageIndex + 1, 0, newMessage);\n return newMessages;\n });\n }\n } else {\n setMessages((prev) => prev.map((item) => {\n if (item.type === 'SuggestionMessage') {\n item.content = content;\n }\n return item;\n }));\n }\n break;\n }\n default:\n break;\n }\n };\n\n // 简单对话\n const chat = async (content: any) => {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.user,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n };\n\n setMessages((prev) => {\n // 若存在对话建议,先删除对话建议\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex !== -1) {\n prev.splice(suggestMessageIndex, 1);\n }\n // 插入用户消息\n prev.push(newMessage);\n return prev;\n });\n\n start(\n `${url}/appouter/${appNo}/sendMsg?pt=${pt}&tc=${tc}`,\n {\n appParams: {\n inputs_msg: content,\n },\n sessionId: currentSession,\n },\n {\n Authorization: `Bearer ${token}`,\n },\n );\n };\n\n // 重新生成方法\n const reChat = () => {\n setMessages((prevMessages) => {\n // 1. 删除最新一条 AI 消息\n const lastAIMsgIndex = [...prevMessages].reverse().findIndex(\n (m) => m.role === MessageRole.assistant && m.type === 'TextMessage',\n );\n const newMessages = [...prevMessages];\n if (lastAIMsgIndex !== -1) {\n const realIndex = newMessages.length - 1 - lastAIMsgIndex;\n newMessages.splice(realIndex, 1);\n }\n\n // 2. 若存在对话建议,先删除对话建议\n const suggestMessageIndex = messages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestMessageIndex !== -1) {\n newMessages.splice(suggestMessageIndex, 1);\n }\n\n // 3. 找到最新一条用户消息,且类型为 TextMessage\n const lastUserMsg = [...newMessages].reverse().find(\n (m) => m.role === MessageRole.user && m.type === 'TextMessage',\n ) as TextMessage | undefined;\n if (lastUserMsg && lastUserMsg.content && typeof lastUserMsg.content.text === 'string') {\n // 重新发起 chat\n chat(lastUserMsg.content.text);\n }\n\n return newMessages;\n });\n };\n\n const stopChat = () => {\n stop();\n setMessages((prevMessages) => {\n // 找到我所有进行中的消息,并设置为结束\n const newMessages = [...prevMessages];\n newMessages.forEach((m) => {\n if (m.status === MessageStatus.pending) {\n m.status = MessageStatus.done;\n } else if (m.status === MessageStatus.init) {\n if (m.type === 'TextMessage') {\n m.content.text = '<span style=\"color: #cbcbcb;\">用户已取消</span>';\n }\n m.status = MessageStatus.done;\n }\n });\n return newMessages;\n });\n };\n\n // 初始化历史记录\n const formatMessages = (data: any) => {\n setMessages((prev) => {\n const initMessagesList: Messages[] = [];\n data.forEach((item: any) => {\n const { content, messageTime, role } = item || {};\n\n if (role === 'USER') {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: messageTime,\n role: MessageRole.user,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n };\n\n initMessagesList.push(newMessage);\n } else if (role === 'AI') {\n const contentObj = safeJsonParse(content);\n const newMessage: TextMessage = {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: messageTime,\n role: MessageRole.assistant,\n content: { text: contentObj?.result?.result },\n thinks: [],\n status: MessageStatus.done,\n };\n\n initMessagesList.push(newMessage);\n }\n });\n\n return [...prev, ...initMessagesList];\n });\n };\n\n // 获取聊天记录\n const initAppConversations = async () => {\n try {\n const result = await fetchSessionList({\n url,\n appNo,\n pt,\n tc,\n token,\n });\n\n if (result?.success) {\n if (result?.data?.length > 0) {\n setSessionList(result.data);\n const { sessionId } = result.data[0];\n if (sessionId) {\n setCurrentSession(sessionId); // 设置当前会话 id;\n const sessionResult = await fetchSessionDetail({\n url,\n appNo,\n pt,\n tc,\n sessionId,\n token,\n });\n\n if (sessionResult?.success) {\n const sessionsData = (sessionResult?.data as any)?.list?.[0]?.sessionMessages || [];\n\n if (sessionsData.length > 0) {\n formatMessages(sessionsData);\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSession(uuidV4());\n }\n } else {\n setSessionList([]);\n setCurrentSession(uuidV4());\n }\n }\n } catch {\n //\n }\n };\n\n // 初始化应用\n useEffect(() => {\n if (appInfo) {\n // 初始化历史数据\n initAppConversations();\n\n const { onboardingInfo = {} } = appInfo;\n // eslint-disable-next-line camelcase\n const { suggested_questions = [], prologue = '' } = onboardingInfo || {};\n\n // 初始化开场白\n if (prologue) {\n setMessage('prologue', prologue);\n } else {\n setMessages((prev) => prev.filter((item) => !item.extra?.prologue));\n }\n\n // 过滤空内容\n const formatSuggests = suggested_questions.filter((item: string) => item);\n\n // 初始化 预设问题\n if (formatSuggests.length > 0) {\n const suggestMessages = formatSuggests.map((item: string, index: number) => ({\n key: index + 1,\n description: item,\n }));\n setMessage('suggest', suggestMessages);\n } else {\n setMessages((prev) => prev.filter((item) => !(item.type === 'SuggestionMessage')));\n }\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [appInfo]);\n\n return {\n appInfo,\n messages,\n loading,\n content: responseData.content,\n sessionsList,\n currentSession,\n reChat,\n chat,\n setCurrentSession,\n setMessage,\n setMessages,\n stopChat,\n };\n};\n\nexport default useAgentGenerator;\n"],
5
+ "mappings": "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",
6
6
  "names": ["ActionType", "ProcessStatus", "ActionAvailability", "uuidV4", "documentIcon", "qaIcon", "documentExpandIcon", "qaExpandIcon", "skillNoIcon", "toolIcon", "skillNoExpandIcon", "toolExpandIcon", "completedIcon", "completedExpandIcon"]
7
7
  }
@@ -46,6 +46,14 @@ export interface ChatConfig {
46
46
  shareLink: string;
47
47
  };
48
48
  }
49
+ export interface sessionData {
50
+ sessionId: string;
51
+ gmtCreated: string;
52
+ userId: string;
53
+ title: string;
54
+ botNo: string;
55
+ appNo: string;
56
+ }
49
57
  /**
50
58
  * 获取聊天配置
51
59
  * 使用request,会自动添加token
@@ -67,3 +75,28 @@ export declare const sendMessage: ({ url, appNo, pt, tc, msg }: {
67
75
  tc: string;
68
76
  msg: string;
69
77
  }) => Promise<ApiResponse<ChatConfig>>;
78
+ /**
79
+ * 获取会话列表
80
+ */
81
+ export declare const fetchSessionList: ({ url, appNo, pt, tc, pageSize, pageNum, token }: {
82
+ url: string;
83
+ appNo: string;
84
+ pt: string;
85
+ tc: string;
86
+ pageSize?: number | undefined;
87
+ pageNum?: number | undefined;
88
+ token: string;
89
+ }) => Promise<ApiResponse<sessionData[]>>;
90
+ /**
91
+ * 获取会话明细
92
+ */
93
+ export declare const fetchSessionDetail: ({ url, appNo, pt, tc, sessionId, pageSize, pageNum, token }: {
94
+ url: string;
95
+ appNo: string;
96
+ pt: string;
97
+ tc: string;
98
+ sessionId: string;
99
+ pageSize?: number | undefined;
100
+ pageNum?: number | undefined;
101
+ token: string;
102
+ }) => Promise<ApiResponse<sessionData[]>>;
@@ -20,6 +20,8 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  var api_exports = {};
21
21
  __export(api_exports, {
22
22
  fetchAppConfig: () => fetchAppConfig,
23
+ fetchSessionDetail: () => fetchSessionDetail,
24
+ fetchSessionList: () => fetchSessionList,
23
25
  sendMessage: () => sendMessage
24
26
  });
25
27
  module.exports = __toCommonJS(api_exports);
@@ -41,9 +43,40 @@ var sendMessage = async ({ url, appNo, pt, tc, msg }) => {
41
43
  });
42
44
  return response.data;
43
45
  };
46
+ var fetchSessionList = async ({ url, appNo, pt, tc, pageSize = 10, pageNum = 1, token }) => {
47
+ const response = await import_request.request.post(`${url}/appouter/${appNo}/sessionIds`, {}, {
48
+ params: {
49
+ pt,
50
+ tc,
51
+ pageSize,
52
+ pageNum
53
+ },
54
+ headers: {
55
+ Authorization: `Bearer ${token}`
56
+ }
57
+ });
58
+ return response.data;
59
+ };
60
+ var fetchSessionDetail = async ({ url, appNo, pt, tc, sessionId, pageSize = 10, pageNum = 1, token }) => {
61
+ const response = await import_request.request.post(`${url}/appouter/${appNo}/sessionDetails`, {}, {
62
+ params: {
63
+ pt,
64
+ tc,
65
+ sessionId,
66
+ pageSize,
67
+ pageNum
68
+ },
69
+ headers: {
70
+ Authorization: `Bearer ${token}`
71
+ }
72
+ });
73
+ return response.data;
74
+ };
44
75
  // Annotate the CommonJS export names for ESM import in node:
45
76
  0 && (module.exports = {
46
77
  fetchAppConfig,
78
+ fetchSessionDetail,
79
+ fetchSessionList,
47
80
  sendMessage
48
81
  });
49
82
  //# sourceMappingURL=api.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/services/api.ts"],
4
- "sourcesContent": ["import { request } from '@/utils/request';\n\n// 服务端API响应接口\nexport interface ServerApiResponse<T = unknown> {\n data: T;\n code: string;\n success: boolean;\n message: string;\n serverTime: number;\n traceId: string;\n}\n\n// 标准API响应类型\nexport interface ApiResponse<T> {\n success: boolean;\n data: T;\n message?: string;\n code?: string;\n}\n\n// 聊天配置类型\nexport interface ChatConfig {\n botNo: string;\n appNo: string;\n appName: string;\n appTheme: string;\n description: string;\n icon: string;\n onboardingInfo: {\n prologue: string;\n suggested_questions: string[];\n };\n appVersionNo: string;\n publishDTO: {\n id: number;\n tenantId: string;\n botNo: string;\n publishNo: string;\n publishTime: string;\n publishVersionNo: string;\n publishVersionDesc: string;\n publishAppType: string;\n platformConfigInfo: string;\n appNo: string;\n appVersionNo: string;\n gmtCreated: string;\n enableFlag: number;\n gmtModified: string;\n creator: string;\n modifier: string;\n isDeleted: string;\n authLoginInfoDTO: Record<string, unknown>;\n shareLink: string;\n };\n}\n\n/**\n * 获取聊天配置\n * 使用request,会自动添加token\n */\nexport const fetchAppConfig = async ({ url, appNo, pt, tc }: { url: string; appNo: string; pt: string; tc: string }): Promise<ApiResponse<ChatConfig>> => {\n const response = await request.post<ApiResponse<ChatConfig>>(`${url}/appouter/config/${appNo}/initApp`, {}, {\n params: {\n pt, tc,\n },\n });\n return response.data;\n};\n\n/**\n * 获取聊天配置\n * 使用request,会自动添加token\n */\nexport const sendMessage = async ({ url, appNo, pt, tc, msg }: { url: string; appNo: string; pt: string; tc: string; msg: string }): Promise<ApiResponse<ChatConfig>> => {\n const response = await request.post<ApiResponse<ChatConfig>>(`${url}/appouter/${appNo}/sendMsg`, {\n pt, tc, msg,\n });\n return response.data;\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AA4DjB,IAAM,iBAAiB,OAAO,EAAE,KAAK,OAAO,IAAI,GAAG,MAAgG;AACxJ,QAAM,WAAW,MAAM,uBAAQ,KAA8B,GAAG,uBAAuB,iBAAiB,CAAC,GAAG;AAAA,IAC1G,QAAQ;AAAA,MACN;AAAA,MAAI;AAAA,IACN;AAAA,EACF,CAAC;AACD,SAAO,SAAS;AAClB;AAMO,IAAM,cAAc,OAAO,EAAE,KAAK,OAAO,IAAI,IAAI,IAAI,MAA6G;AACvK,QAAM,WAAW,MAAM,uBAAQ,KAA8B,GAAG,gBAAgB,iBAAiB;AAAA,IAC/F;AAAA,IAAI;AAAA,IAAI;AAAA,EACV,CAAC;AACD,SAAO,SAAS;AAClB;",
4
+ "sourcesContent": ["import { request } from '@/utils/request';\n\n// 服务端API响应接口\nexport interface ServerApiResponse<T = unknown> {\n data: T;\n code: string;\n success: boolean;\n message: string;\n serverTime: number;\n traceId: string;\n}\n\n// 标准API响应类型\nexport interface ApiResponse<T> {\n success: boolean;\n data: T;\n message?: string;\n code?: string;\n}\n\n// 聊天配置类型\nexport interface ChatConfig {\n botNo: string;\n appNo: string;\n appName: string;\n appTheme: string;\n description: string;\n icon: string;\n onboardingInfo: {\n prologue: string;\n // eslint-disable-next-line camelcase\n suggested_questions: string[];\n };\n appVersionNo: string;\n publishDTO: {\n id: number;\n tenantId: string;\n botNo: string;\n publishNo: string;\n publishTime: string;\n publishVersionNo: string;\n publishVersionDesc: string;\n publishAppType: string;\n platformConfigInfo: string;\n appNo: string;\n appVersionNo: string;\n gmtCreated: string;\n enableFlag: number;\n gmtModified: string;\n creator: string;\n modifier: string;\n isDeleted: string;\n authLoginInfoDTO: Record<string, unknown>;\n shareLink: string;\n };\n}\n\n// 会话记录\nexport interface sessionData {\n sessionId: string;\n gmtCreated: string;\n userId: string;\n title: string;\n botNo: string;\n appNo: string;\n}\n\n/**\n * 获取聊天配置\n * 使用request,会自动添加token\n */\nexport const fetchAppConfig = async ({ url, appNo, pt, tc }: { url: string; appNo: string; pt: string; tc: string }): Promise<ApiResponse<ChatConfig>> => {\n const response = await request.post<ApiResponse<ChatConfig>>(`${url}/appouter/config/${appNo}/initApp`, {}, {\n params: {\n pt, tc,\n },\n });\n return response.data;\n};\n\n/**\n * 获取聊天配置\n * 使用request,会自动添加token\n */\nexport const sendMessage = async ({ url, appNo, pt, tc, msg }: { url: string; appNo: string; pt: string; tc: string; msg: string }): Promise<ApiResponse<ChatConfig>> => {\n const response = await request.post<ApiResponse<ChatConfig>>(`${url}/appouter/${appNo}/sendMsg`, {\n pt, tc, msg,\n });\n return response.data;\n};\n\n/**\n * 获取会话列表\n */\nexport const fetchSessionList = async ({ url, appNo, pt, tc, pageSize = 10, pageNum = 1, token }:\n { url: string; appNo: string; pt: string; tc: string; pageSize?: number; pageNum?: number; token: string }) => {\n const response = await request.post<ApiResponse<sessionData[]>>(`${url}/appouter/${appNo}/sessionIds`, {}, {\n params: {\n pt,\n tc,\n pageSize,\n pageNum,\n },\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n\n/**\n * 获取会话明细\n */\nexport const fetchSessionDetail = async ({ url, appNo, pt, tc, sessionId, pageSize = 10, pageNum = 1, token }:\n { url: string; appNo: string; pt: string; tc: string; sessionId: string; pageSize?: number; pageNum?: number; token: string }) => {\n const response = await request.post<ApiResponse<sessionData[]>>(`${url}/appouter/${appNo}/sessionDetails`, {}, {\n params: {\n pt,\n tc,\n sessionId,\n pageSize,\n pageNum,\n },\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AAuEjB,IAAM,iBAAiB,OAAO,EAAE,KAAK,OAAO,IAAI,GAAG,MAAgG;AACxJ,QAAM,WAAW,MAAM,uBAAQ,KAA8B,GAAG,uBAAuB,iBAAiB,CAAC,GAAG;AAAA,IAC1G,QAAQ;AAAA,MACN;AAAA,MAAI;AAAA,IACN;AAAA,EACF,CAAC;AACD,SAAO,SAAS;AAClB;AAMO,IAAM,cAAc,OAAO,EAAE,KAAK,OAAO,IAAI,IAAI,IAAI,MAA6G;AACvK,QAAM,WAAW,MAAM,uBAAQ,KAA8B,GAAG,gBAAgB,iBAAiB;AAAA,IAC/F;AAAA,IAAI;AAAA,IAAI;AAAA,EACV,CAAC;AACD,SAAO,SAAS;AAClB;AAKO,IAAM,mBAAmB,OAAO,EAAE,KAAK,OAAO,IAAI,IAAI,WAAW,IAAI,UAAU,GAAG,MAAM,MACkB;AAC/G,QAAM,WAAW,MAAM,uBAAQ,KAAiC,GAAG,gBAAgB,oBAAoB,CAAC,GAAG;AAAA,IACzG,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;AAKO,IAAM,qBAAqB,OAAO,EAAE,KAAK,OAAO,IAAI,IAAI,WAAW,WAAW,IAAI,UAAU,GAAG,MAAM,MACwB;AAClI,QAAM,WAAW,MAAM,uBAAQ,KAAiC,GAAG,gBAAgB,wBAAwB,CAAC,GAAG;AAAA,IAC7G,QAAQ;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;",
6
6
  "names": []
7
7
  }
@@ -146,6 +146,8 @@ export interface XAiChatbotProps extends ChatbotMessageFields {
146
146
  rightAction?: IconButtonProps;
147
147
  /** 上传按钮是否显示 */
148
148
  uploadBtnShow?: boolean;
149
+ /** 底部文案 */
150
+ footerTips?: string;
149
151
  /** 帮助消息点击回调 */
150
152
  onSuggestMessageClick?: (item: PromptProps, id: string) => void;
151
153
  /** 消息左下角展示字段 */
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/XAiChatbot.ts"],
4
- "sourcesContent": ["import React, { ReactNode, RefObject, ChangeEvent, FocusEvent, MouseEvent } from 'react';\nimport type { PromptProps } from '@ant-design/x';\nimport type { MessageType } from 'src/client/base';\nimport type { Messages } from './XAiMessage';\n\n// 类型定义\nexport interface User {\n id: string;\n name: string;\n avatar?: string;\n }\n\nexport interface MessageProps {\n _id: string;\n type: string;\n content: Record<string, any>;\n createdAt: number;\n user: User;\n position?: 'left' | 'right' | 'center' | 'pop';\n hasTime?: boolean;\n status?: 'pending' | 'sent' | 'fail';\n }\n\nexport interface QuickReplyItemProps {\n name: string;\n code: string;\n icon?: string;\n img?: string;\n isNew?: boolean;\n isHighlight?: boolean;\n }\n\nexport interface ComposerHandle {\n setText: (text: string) => void;\n }\n\nexport interface ScrollToEndOptions {\n animated?: boolean;\n force?: boolean;\n }\n\nexport interface MessageContainerHandle {\n scrollToEnd: (options?: ScrollToEndOptions) => void;\n }\n\nexport interface NavbarProps {\n title?: string;\n subtitle?: string;\n avatar?: string;\n}\n\nexport interface ToolbarItemProps {\n id: string;\n icon: string;\n label: string;\n disabled?: boolean;\n }\n\nexport interface IconButtonProps {\n icon: string;\n onClick: () => void;\n disabled?: boolean;\n }\n\nexport interface RecorderProps {\n onStart?: () => void;\n onStop?: (audioBlob: Blob) => void;\n onError?: (error: Error) => void;\n }\n\nexport type InputType = 'text' | 'voice';\n\n// chatbot 会话字段\nexport interface ChatbotMessageFields {\n messages?: MessageType[];\n setMessages?: React.Dispatch<React.SetStateAction<MessageType[]>>;\n /** 发送消息回调 */\n onSend?: (type: string, content: string) => void;\n /** 清空消息回调 */\n onClear?: () => void;\n /** 停止生成回调 */\n onStop?: () => void;\n}\n\nexport interface ActionItem {\n key?: string;\n icon: React.ReactNode;\n tooltip?: string;\n}\n\n/**\n * AI 聊天机器人组件\n */\nexport interface XAiChatbotProps extends ChatbotMessageFields {\n /** 宽屏断点 */\n wideBreakpoint?: string;\n /** 导航栏展示 */\n navbarShow?: boolean;\n /** 导航栏配置 */\n navbar?: NavbarProps;\n /** 导航栏渲染函数,会覆盖 navbar */\n renderNavbar?: () => ReactNode;\n /** 是否加载中 */\n loading?: boolean;\n /** 加载更多文案 */\n loadMoreText?: string;\n /** 在消息列表上面的渲染函数 */\n renderBeforeMessageList?: () => ReactNode;\n /** 消息列表 ref */\n messagesRef?: RefObject<MessageContainerHandle>;\n /** 下拉加载回调 */\n onRefresh?: () => Promise<any>;\n /** 滚动消息列表回调 */\n onScroll?: (event: React.UIEvent<HTMLDivElement, UIEvent>) => void;\n /** 消息内容渲染函数 */\n renderMessageContent?: (message: MessageProps) => ReactNode;\n /** 快捷短语列表 */\n quickReplies?: QuickReplyItemProps[];\n /** 快捷短语是否可见 */\n quickRepliesVisible?: boolean;\n /** 点击快速回复回调 */\n onQuickReplyClick?: (item: QuickReplyItemProps, index: number) => void;\n /** 快捷短语的滚动回调 */\n onQuickReplyScroll?: () => void;\n /** 快捷短语渲染函数,会覆盖 quickReplies */\n renderQuickReplies?: () => ReactNode;\n /** 输入区 ref */\n composerRef?: RefObject<ComposerHandle>;\n /** 输入框初始内容 */\n text?: string;\n /** 空状态图片 */\n emptyStateImage?: string;\n /** 空状态文案 */\n emptyStateText?: string;\n /** 输入框占位符 */\n placeholder?: string;\n /** 输入框聚焦回调 */\n onInputFocus?: (event: FocusEvent) => void;\n /** 输入框更新回调 */\n onInputChange?: (value: string, event: ChangeEvent) => void;\n /** 输入框失去焦点回调 */\n onInputBlur?: (event: FocusEvent) => void;\n /** 输入框粘贴图片后的回调 */\n onImageSend?: (file: File) => Promise<any>;\n /** 输入方式 */\n inputType?: InputType;\n /** 输入方式切换回调 */\n onInputTypeChange?: (inputType: InputType) => void;\n /** 语音输入配置 */\n recorder?: RecorderProps;\n /** 工具栏配置 */\n toolbar?: ToolbarItemProps[];\n /** AI头像 */\n avatar?: ReactNode;\n /** 用户头像 */\n userAvatar?: ReactNode;\n /** 工具栏点击回调 */\n onToolbarClick?: (item: ToolbarItemProps, event: MouseEvent) => void;\n /** 工具栏打开/关闭回调 */\n onAccessoryToggle?: (isAccessoryOpen: boolean) => void;\n /** 输入框右边图标按钮配置 */\n rightAction?: IconButtonProps;\n /** 上传按钮是否显示 */\n uploadBtnShow?: boolean;\n /** 帮助消息点击回调 */\n onSuggestMessageClick?: (item: PromptProps, id: string) => void;\n /** 消息左下角展示字段 */\n messageTooltip?: (msg: Messages) => React.ReactNode;\n /** 消息右下角功能区 */\n messageActions?: ActionItem[];\n /** 消息右下角功能区点击回调 */\n onMessagesActionsCallback?: (index: number, data: Messages) => void; // 点击回调\n /** 输入组件 */\n Composer?: React.ElementType;\n }\n"],
4
+ "sourcesContent": ["import React, { ReactNode, RefObject, ChangeEvent, FocusEvent, MouseEvent } from 'react';\nimport type { PromptProps } from '@ant-design/x';\nimport type { MessageType } from 'src/client/base';\nimport type { Messages } from './XAiMessage';\n\n// 类型定义\nexport interface User {\n id: string;\n name: string;\n avatar?: string;\n }\n\nexport interface MessageProps {\n _id: string;\n type: string;\n content: Record<string, any>;\n createdAt: number;\n user: User;\n position?: 'left' | 'right' | 'center' | 'pop';\n hasTime?: boolean;\n status?: 'pending' | 'sent' | 'fail';\n }\n\nexport interface QuickReplyItemProps {\n name: string;\n code: string;\n icon?: string;\n img?: string;\n isNew?: boolean;\n isHighlight?: boolean;\n }\n\nexport interface ComposerHandle {\n setText: (text: string) => void;\n }\n\nexport interface ScrollToEndOptions {\n animated?: boolean;\n force?: boolean;\n }\n\nexport interface MessageContainerHandle {\n scrollToEnd: (options?: ScrollToEndOptions) => void;\n }\n\nexport interface NavbarProps {\n title?: string;\n subtitle?: string;\n avatar?: string;\n}\n\nexport interface ToolbarItemProps {\n id: string;\n icon: string;\n label: string;\n disabled?: boolean;\n }\n\nexport interface IconButtonProps {\n icon: string;\n onClick: () => void;\n disabled?: boolean;\n }\n\nexport interface RecorderProps {\n onStart?: () => void;\n onStop?: (audioBlob: Blob) => void;\n onError?: (error: Error) => void;\n }\n\nexport type InputType = 'text' | 'voice';\n\n// chatbot 会话字段\nexport interface ChatbotMessageFields {\n messages?: MessageType[];\n setMessages?: React.Dispatch<React.SetStateAction<MessageType[]>>;\n /** 发送消息回调 */\n onSend?: (type: string, content: string) => void;\n /** 清空消息回调 */\n onClear?: () => void;\n /** 停止生成回调 */\n onStop?: () => void;\n}\n\nexport interface ActionItem {\n key?: string;\n icon: React.ReactNode;\n tooltip?: string;\n}\n\n/**\n * AI 聊天机器人组件\n */\nexport interface XAiChatbotProps extends ChatbotMessageFields {\n /** 宽屏断点 */\n wideBreakpoint?: string;\n /** 导航栏展示 */\n navbarShow?: boolean;\n /** 导航栏配置 */\n navbar?: NavbarProps;\n /** 导航栏渲染函数,会覆盖 navbar */\n renderNavbar?: () => ReactNode;\n /** 是否加载中 */\n loading?: boolean;\n /** 加载更多文案 */\n loadMoreText?: string;\n /** 在消息列表上面的渲染函数 */\n renderBeforeMessageList?: () => ReactNode;\n /** 消息列表 ref */\n messagesRef?: RefObject<MessageContainerHandle>;\n /** 下拉加载回调 */\n onRefresh?: () => Promise<any>;\n /** 滚动消息列表回调 */\n onScroll?: (event: React.UIEvent<HTMLDivElement, UIEvent>) => void;\n /** 消息内容渲染函数 */\n renderMessageContent?: (message: MessageProps) => ReactNode;\n /** 快捷短语列表 */\n quickReplies?: QuickReplyItemProps[];\n /** 快捷短语是否可见 */\n quickRepliesVisible?: boolean;\n /** 点击快速回复回调 */\n onQuickReplyClick?: (item: QuickReplyItemProps, index: number) => void;\n /** 快捷短语的滚动回调 */\n onQuickReplyScroll?: () => void;\n /** 快捷短语渲染函数,会覆盖 quickReplies */\n renderQuickReplies?: () => ReactNode;\n /** 输入区 ref */\n composerRef?: RefObject<ComposerHandle>;\n /** 输入框初始内容 */\n text?: string;\n /** 空状态图片 */\n emptyStateImage?: string;\n /** 空状态文案 */\n emptyStateText?: string;\n /** 输入框占位符 */\n placeholder?: string;\n /** 输入框聚焦回调 */\n onInputFocus?: (event: FocusEvent) => void;\n /** 输入框更新回调 */\n onInputChange?: (value: string, event: ChangeEvent) => void;\n /** 输入框失去焦点回调 */\n onInputBlur?: (event: FocusEvent) => void;\n /** 输入框粘贴图片后的回调 */\n onImageSend?: (file: File) => Promise<any>;\n /** 输入方式 */\n inputType?: InputType;\n /** 输入方式切换回调 */\n onInputTypeChange?: (inputType: InputType) => void;\n /** 语音输入配置 */\n recorder?: RecorderProps;\n /** 工具栏配置 */\n toolbar?: ToolbarItemProps[];\n /** AI头像 */\n avatar?: ReactNode;\n /** 用户头像 */\n userAvatar?: ReactNode;\n /** 工具栏点击回调 */\n onToolbarClick?: (item: ToolbarItemProps, event: MouseEvent) => void;\n /** 工具栏打开/关闭回调 */\n onAccessoryToggle?: (isAccessoryOpen: boolean) => void;\n /** 输入框右边图标按钮配置 */\n rightAction?: IconButtonProps;\n /** 上传按钮是否显示 */\n uploadBtnShow?: boolean;\n /** 底部文案 */\n footerTips?: string;\n /** 帮助消息点击回调 */\n onSuggestMessageClick?: (item: PromptProps, id: string) => void;\n /** 消息左下角展示字段 */\n messageTooltip?: (msg: Messages) => React.ReactNode;\n /** 消息右下角功能区 */\n messageActions?: ActionItem[];\n /** 消息右下角功能区点击回调 */\n onMessagesActionsCallback?: (index: number, data: Messages) => void; // 点击回调\n /** 输入组件 */\n Composer?: React.ElementType;\n }\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;AAAA;AAAA;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,4 @@
1
+ import { type ConversationsProps } from '@ant-design/x';
2
+ export interface XAiConversationsProps extends ConversationsProps {
3
+ color?: string;
4
+ }
@@ -0,0 +1,18 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __copyProps = (to, from, except, desc) => {
6
+ if (from && typeof from === "object" || typeof from === "function") {
7
+ for (let key of __getOwnPropNames(from))
8
+ if (!__hasOwnProp.call(to, key) && key !== except)
9
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
10
+ }
11
+ return to;
12
+ };
13
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
14
+
15
+ // src/types/XAiConversations.ts
16
+ var XAiConversations_exports = {};
17
+ module.exports = __toCommonJS(XAiConversations_exports);
18
+ //# sourceMappingURL=XAiConversations.js.map