@ai-group/chat-sdk 0.2.8 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. package/dist/cjs/components/XAiChatbot/index.js +14 -5
  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 +7 -4
  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 +162 -69
  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/styles/markdown.js +140 -138
  27. package/dist/cjs/styles/markdown.js.map +2 -2
  28. package/dist/cjs/types/XAiChatbot.d.ts +2 -0
  29. package/dist/cjs/types/XAiChatbot.js.map +1 -1
  30. package/dist/cjs/types/XAiConversations.d.ts +4 -0
  31. package/dist/cjs/types/XAiConversations.js +18 -0
  32. package/dist/cjs/types/XAiConversations.js.map +7 -0
  33. package/dist/cjs/types/index.d.ts +1 -0
  34. package/dist/cjs/types/index.js +3 -1
  35. package/dist/cjs/types/index.js.map +2 -2
  36. package/dist/esm/components/XAiChatbot/index.js +22 -4
  37. package/dist/esm/components/XAiChatbot/index.js.map +1 -1
  38. package/dist/esm/components/XAiChatbot/styles.d.ts +1 -0
  39. package/dist/esm/components/XAiChatbot/styles.js +18 -17
  40. package/dist/esm/components/XAiChatbot/styles.js.map +1 -1
  41. package/dist/esm/components/XAiConversations/XAiConversations.stories.d.ts +6 -0
  42. package/dist/esm/components/XAiConversations/XAiConversations.stories.js +42 -0
  43. package/dist/esm/components/XAiConversations/XAiConversations.stories.js.map +1 -0
  44. package/dist/esm/components/XAiConversations/index.d.ts +4 -0
  45. package/dist/esm/components/XAiConversations/index.js +27 -0
  46. package/dist/esm/components/XAiConversations/index.js.map +1 -0
  47. package/dist/esm/components/XAiProvider/XAiProvider.stories.d.ts +2 -2
  48. package/dist/esm/components/XAiProvider/XAiProvider.stories.js +38 -180
  49. package/dist/esm/components/XAiProvider/XAiProvider.stories.js.map +1 -1
  50. package/dist/esm/components/XAiProvider/demo.styles.d.ts +35 -0
  51. package/dist/esm/components/XAiProvider/demo.styles.js +12 -0
  52. package/dist/esm/components/XAiProvider/demo.styles.js.map +1 -0
  53. package/dist/esm/components/XAiProvider/index.js +14 -3
  54. package/dist/esm/components/XAiProvider/index.js.map +1 -1
  55. package/dist/esm/hooks/useAgentGenerator.d.ts +3 -0
  56. package/dist/esm/hooks/useAgentGenerator.js +268 -114
  57. package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
  58. package/dist/esm/services/api.d.ts +33 -0
  59. package/dist/esm/services/api.js +75 -0
  60. package/dist/esm/services/api.js.map +1 -1
  61. package/dist/esm/styles/markdown.js +1 -1
  62. package/dist/esm/styles/markdown.js.map +1 -1
  63. package/dist/esm/types/XAiChatbot.d.ts +2 -0
  64. package/dist/esm/types/XAiChatbot.js.map +1 -1
  65. package/dist/esm/types/XAiConversations.d.ts +4 -0
  66. package/dist/esm/types/XAiConversations.js +2 -0
  67. package/dist/esm/types/XAiConversations.js.map +1 -0
  68. package/dist/esm/types/index.d.ts +1 -0
  69. package/dist/esm/types/index.js +1 -0
  70. package/dist/esm/types/index.js.map +1 -1
  71. package/dist/umd/chat-sdk.min.js +1 -1
  72. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAiProvider/XAiProvider.stories.tsx"],
4
- "sourcesContent": ["import type { Meta, StoryObj } from '@storybook/react-vite';\nimport React from 'react';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\n\nconst meta: Meta<typeof XAiProvider> = {\n title: 'AI组件/XAiProvider AI容器',\n component: XAiProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n url: {\n control: 'text',\n description: 'AI 服务地址',\n },\n token: {\n control: 'text',\n description: '认证 token',\n },\n providerId: {\n control: 'text',\n description: 'Provider 唯一标识',\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const WithProvider: Story = {\n render: (args) => (\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args}>\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://via.placeholder.com/40',\n }}\n />\n </XAiProvider>\n </div>\n ),\n args: {\n url: 'http://ai-platform.xline-dev.test.xinke.biz',\n token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJjYWIxYjM3Ni03MmZjLTRkNWEtOTIzMC01N2U3NmZiMGI4NmQiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQzMTc1OTAsImV4cCI6MTc1NDkyMjM5MCwidHlwZSI6InJlZnJlc2giLCJjbGllbnRfaWQiOiJBcHAxOTUwMDIwNTk0NDUyNjYwMjI0Iiwic2NvcGUiOiJhbGwiLCJwbGF0Zm9ybV90eXBlIjoiTWFpblN0YXRpb24ifQ.crZFQRycuHHA1iIIFJ5ak9kS1-04Eqro-QWWG8HZj6Dz7DkLWYuQBPCrUlCtavGu0XW5tqHZ5WW4tdST06FvEA',\n config: {\n appNo: 'App1952213101022154752',\n pt: 'MainStation',\n tc: 'ZABX',\n },\n providerId: 'demo-provider',\n },\n};\n\n// 多个 Provider 示例\nexport const MultipleProviders: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px' }}>\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-1\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 1',\n subtitle: '第一个聊天机器人',\n avatar: 'https://via.placeholder.com/40',\n }}\n />\n </XAiProvider>\n </div>\n\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-2\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 2',\n subtitle: '第二个聊天机器人',\n avatar: 'https://via.placeholder.com/40',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n url: 'https://api.example.com/ai',\n token: 'your-token-here',\n },\n};\n\n// // 自定义消息处理示例\n// export const CustomMessageHandling: Story = {\n// render: (args) => (\n// <div style={{ width: '400px', height: '600px' }}>\n// <XAiProvider {...args}>\n// <XAiChatbot\n// navbarShow\n// navbar={{\n// title: '自定义处理',\n// subtitle: '自定义消息处理逻辑',\n// avatar: 'https://via.placeholder.com/40',\n// }}\n// messageActions={[\n// {\n// key: 'custom',\n// icon: <span>🔧</span>,\n// tooltip: '自定义操作',\n// },\n// ]}\n// onMessagesActionsCallback={(index, data) => {\n// console.log('自定义操作:', index, data);\n// }}\n// />\n// </XAiProvider>\n// </div>\n// ),\n// args: {\n// url: 'https://api.example.com/ai',\n// token: 'your-token-here',\n// providerId: 'custom-provider',\n// },\n// };\n\n// // 示例 1: 使用通用 Hook 的组件\n// const GenericComponent = React.memo<{ title: string }>(({ title }) => {\n// const { isInProvider, getProviderValue } = useProviderContext({\n// props: { title },\n// });\n\n// const providerMethods = useProviderMethods();\n\n// const handleCustomAction = () => {\n// if (isInProvider) {\n// providerMethods.sendMessage?.('自定义消息');\n// } else {\n// console.log('独立组件动作');\n// }\n// };\n\n// return (\n// <div style={{ padding: '20px', border: '1px solid #ccc', marginBottom: '10px' }}>\n// <h3>{title}</h3>\n// <p>是否在 Provider 中: {isInProvider ? '是' : '否'}</p>\n// <p>消息数量: {getProviderValue('messages')?.length || 0}</p>\n// <button onClick={handleCustomAction}>\n// {isInProvider ? '使用 Provider 方法' : '使用原有回调'}\n// </button>\n// </div>\n// );\n// });\n\n// // 示例 2: 自定义聊天组件\n// const CustomChatComponent = React.memo(() => {\n// const { isInProvider, getProviderValue } = useProviderContext({\n// props: {},\n// });\n\n// const providerMethods = useProviderMethods();\n\n// const messageCount = getProviderValue('messages')?.length || 0;\n// const theme = messageCount > 5 ? 'dark' : 'light';\n\n// return (\n// <div style={{\n// padding: '20px',\n// backgroundColor: theme === 'dark' ? '#333' : '#fff',\n// color: theme === 'dark' ? '#fff' : '#333',\n// border: '1px solid #ccc',\n// marginBottom: '10px',\n// }}\n// >\n// <h3>自定义聊天组件</h3>\n// <p>主题: {theme}</p>\n// <p>是否在 Provider 中: {isInProvider ? '是' : ''}</p>\n// <button\n// onClick={() => providerMethods.sendMessage?.('Hello from custom component')}\n// disabled={!isInProvider}\n// >\n// 发送消息\n// </button>\n// </div>\n// );\n// });\n\n// // 展示 Hook 灵活性的示例\n// export const HookFlexibilityExample: Story = {\n// render: (args) => (\n// <div style={{ width: '600px', height: '800px' }}>\n// <XAiProvider {...args}>\n// <div style={{ padding: '20px' }}>\n// <h3>Hook 灵活性示例</h3>\n// <p>展示不同组件如何使用相同的 Hook</p>\n\n// {/* 不同的组件使用相同的 Hook */}\n// <div style={{ marginBottom: '20px' }}>\n// <GenericComponent title=\"组件 A\" />\n// <GenericComponent title=\"组件 B\" />\n// <CustomChatComponent />\n// </div>\n\n// {/* 聊天机器人 */}\n// <XAiChatbot\n// navbarShow\n// navbar={{\n// title: '灵活 Hook 示例',\n// subtitle: '所有组件共享 Provider 状态',\n// avatar: 'https://via.placeholder.com/40',\n// }}\n// />\n// </div>\n// </XAiProvider>\n// </div>\n// ),\n// args: {\n// url: 'https://api.example.com/ai',\n// token: 'your-token-here',\n// providerId: 'flexibility-example',\n// },\n// parameters: {\n// docs: {\n// description: {\n// story: '展示如何使用 useProviderContext 和 useProviderMethods Hook 来创建可复用的组件。',\n// },\n// },\n// },\n// };\n\n// // 展示独立组件 vs Provider 组件的对比\n// export const ComponentComparison: Story = {\n// render: (args) => (\n// <div style={{ display: 'flex', gap: '20px', padding: '20px' }}>\n// {/* 独立使用的组件 */}\n// <div style={{ width: '300px' }}>\n// <h4>独立组件</h4>\n// <GenericComponent title=\"独立组件\" />\n// <CustomChatComponent />\n// </div>\n\n// {/* 在 Provider 中的组件 */}\n// <div style={{ width: '300px' }}>\n// <h4>Provider 中的组件</h4>\n// <XAiProvider {...args}>\n// <GenericComponent title=\"Provider 组件\" />\n// <CustomChatComponent />\n// <XAiChatbot\n// navbarShow\n// navbar={{\n// title: '示例聊天机器人',\n// subtitle: '在 Provider 中',\n// avatar: 'https://via.placeholder.com/40',\n// }}\n// />\n// </XAiProvider>\n// </div>\n// </div>\n// ),\n// args: {\n// url: 'https://api.example.com/ai',\n// token: 'your-token-here',\n// providerId: 'comparison-example',\n// },\n// };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAkB;AAClB,mBAAwB;AACxB,wBAAuB;AAEvB,IAAM,OAAiC;AAAA,EACrC,OAAO;AAAA,EACP,WAAW,aAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,aAAa;AAAA,QACX,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU;AAAA,IACR,KAAK;AAAA,MACH,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,YAAY;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAEA,YAAY;AAAA,IACV,CAAC,UACC,6BAAAC,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,OAAO,KAC5B,6BAAAA,QAAA,cAAC,WAAM,CACT;AAAA,EAEJ;AACF;AAEA,IAAO,8BAAQ;AAIR,IAAM,eAAsB;AAAA,EACjC,QAAQ,CAAC,SACP,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,QACf,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF;AAAA,EAEF,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAGO,IAAM,oBAA2B;AAAA,EACtC,QAAQ,CAAC,SACP,6BAAAD,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,KACzC,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,MAAM,YAAW,gBAChC,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF,GAEA,6BAAAD,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,MAAM,YAAW,gBAChC,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF,CACF;AAAA,EAEF,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AACF;",
4
+ "sourcesContent": ["import React from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport XAiProvider from './index';\nimport XAiChatbot from '../XAiChatbot';\nimport XAiConversations from '../XAiConversations';\nimport useStyles from './demo.styles';\n\nconst meta: Meta<typeof XAiProvider> = {\n title: 'AI组件/XAiProvider AI容器',\n component: XAiProvider,\n parameters: {\n layout: 'centered',\n docs: {\n description: {\n component: 'AI 聊天机器人容器组件,提供全局上下文和消息管理功能。',\n },\n },\n },\n tags: ['autodocs'],\n argTypes: {\n url: {\n control: 'text',\n description: 'AI 服务地址',\n },\n token: {\n control: 'text',\n description: '认证 token',\n },\n providerId: {\n control: 'text',\n description: 'Provider 唯一标识',\n },\n },\n // 添加装饰器,确保组件有必要的上下文\n decorators: [\n (Story) => (\n <div style={{ padding: '20px' }}>\n <Story />\n </div>\n ),\n ],\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 使用 Provider 的 XAiChatbot\nexport const 单聊天窗口: Story = {\n render: (args) => (\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args}>\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 聊天机器人',\n subtitle: '由 Provider 管理消息',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n ),\n args: {\n url: 'http://ai-platform.xline-dev.test.xinke.biz',\n token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJkZGUzOTcwOS0wMDdlLTQ5YWItYjIzMy1iMTZmYzRkMDU2N2QiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQ1Njc4NTMsImV4cCI6MTc1NDU3NTA1MywidHlwZSI6ImFjY2VzcyIsImNsaWVudF9pZCI6IkFwcDE5NTAwMjA1OTQ0NTI2NjAyMjQiLCJzY29wZSI6ImFsbCIsInBsYXRmb3JtX3R5cGUiOiJNYWluU3RhdGlvbiJ9.jH9muK_MWcE9NtWxPJRqeoeGsnRf79B2oOpQjemJ6kY5_UjAT06BWlX3bszHeRbJbk1OM_kfCeugiO3Gokpj2A',\n config: {\n appNo: 'App1950020594452660224',\n pt: 'MainStation',\n tc: 'ZABX',\n },\n providerId: 'demo-provider',\n },\n};\n\n// export const 带历史记录聊天窗口: Story = {\n// render: (args) => {\n// function WithStyles(props: any) {\n// const styles = useStyles();\n// return (\n// <XAiProvider {...props}>\n// <div className={styles.wrapper}>\n// <div>\n// <XAiConversations />\n// </div>\n// <div>\n// <XAiChatbot />\n// </div>\n// </div>\n// </XAiProvider>\n// );\n// }\n// return <WithStyles {...args} />;\n// },\n// args: {\n// url: 'http://ai-platform.xline-dev.test.xinke.biz',\n// token: 'eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiJjYWIxYjM3Ni03MmZjLTRkNWEtOTIzMC01N2U3NmZiMGI4NmQiLCJzdWIiOiJSZXgiLCJpc3MiOiJodHRwOi8vY2hhdC10ZXN0LnpheGxpbmUuY29tIiwiYXVkIjoiTWFpblN0YXRpb24iLCJpYXQiOjE3NTQzMTc1OTAsImV4cCI6MTc1NDkyMjM5MCwidHlwZSI6InJlZnJlc2giLCJjbGllbnRfaWQiOiJBcHAxOTUwMDIwNTk0NDUyNjYwMjI0Iiwic2NvcGUiOiJhbGwiLCJwbGF0Zm9ybV90eXBlIjoiTWFpblN0YXRpb24ifQ.crZFQRycuHHA1iIIFJ5ak9kS1-04Eqro-QWWG8HZj6Dz7DkLWYuQBPCrUlCtavGu0XW5tqHZ5WW4tdST06FvEA',\n// config: {\n// appNo: 'App1952213101022154752',\n// pt: 'MainStation',\n// tc: 'ZABX',\n// },\n// providerId: 'demo-provider',\n// },\n// };\n\n// 多个 Provider 示例\nexport const 多容器示例: Story = {\n render: (args) => (\n <div style={{ display: 'flex', gap: '20px' }}>\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-1\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 1',\n subtitle: '第一个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n\n <div style={{ width: '400px', height: '600px' }}>\n <XAiProvider {...args} providerId=\"provider-2\">\n <XAiChatbot\n navbarShow\n navbar={{\n title: 'Provider 2',\n subtitle: '第二个聊天机器人',\n avatar: 'https://gw.alipayobjects.com/zos/bmw-prod/b874caa9-4458-412a-9ac6-a61486180a62.svg',\n }}\n />\n </XAiProvider>\n </div>\n </div>\n ),\n args: {\n url: 'https://api.example.com/ai',\n token: 'your-token-here',\n },\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAkB;AAElB,mBAAwB;AACxB,wBAAuB;AAIvB,IAAM,OAAiC;AAAA,EACrC,OAAO;AAAA,EACP,WAAW,aAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,IACR,MAAM;AAAA,MACJ,aAAa;AAAA,QACX,WAAW;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU;AAAA,IACR,KAAK;AAAA,MACH,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,OAAO;AAAA,MACL,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,IACA,YAAY;AAAA,MACV,SAAS;AAAA,MACT,aAAa;AAAA,IACf;AAAA,EACF;AAAA;AAAA,EAEA,YAAY;AAAA,IACV,CAAC,UACC,6BAAAC,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,OAAO,KAC5B,6BAAAA,QAAA,cAAC,WAAM,CACT;AAAA,EAEJ;AACF;AAEA,IAAO,8BAAQ;AAIR,IAAM,QAAe;AAAA,EAC1B,QAAQ,CAAC,SACP,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,QACf,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF;AAAA,EAEF,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,IACN;AAAA,IACA,YAAY;AAAA,EACd;AACF;AAkCO,IAAM,QAAe;AAAA,EAC1B,QAAQ,CAAC,SACP,6BAAAD,QAAA,cAAC,SAAI,OAAO,EAAE,SAAS,QAAQ,KAAK,OAAO,KACzC,6BAAAA,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,MAAM,YAAW,gBAChC,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF,GAEA,6BAAAD,QAAA,cAAC,SAAI,OAAO,EAAE,OAAO,SAAS,QAAQ,QAAQ,KAC5C,6BAAAA,QAAA,cAAC,aAAAD,SAAA,EAAa,GAAG,MAAM,YAAW,gBAChC,6BAAAC,QAAA;AAAA,IAAC,kBAAAC;AAAA,IAAA;AAAA,MACC,YAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,UAAU;AAAA,QACV,QAAQ;AAAA,MACV;AAAA;AAAA,EACF,CACF,CACF,CACF;AAAA,EAEF,MAAM;AAAA,IACJ,KAAK;AAAA,IACL,OAAO;AAAA,EACT;AACF;",
6
6
  "names": ["XAiProvider", "React", "XAiChatbot"]
7
7
  }
@@ -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 || {};
@@ -69,7 +71,7 @@ var XAiProvider = ({
69
71
  import_antd.message.success("复制成功");
70
72
  break;
71
73
  case 2:
72
- setMessages((prev) => prev.filter((item) => item.id !== id));
74
+ setMessages((prev) => prev.filter((item) => item.id !== id && item.type !== "SuggestionMessage"));
73
75
  import_antd.message.success("删除成功");
74
76
  break;
75
77
  }
@@ -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 // 删除该条消息及建议类消息\n setMessages((prev) => prev.filter((item) => item.id !== id && item.type !== 'SuggestionMessage'));\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;AAEH,oBAAY,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,KAAK,OAAO,MAAM,KAAK,SAAS,mBAAmB,CAAC;AAChG,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 || {};
@@ -301,69 +303,68 @@ var useAgentGenerator = ({
301
303
  const setMessage = async (messageType, content) => {
302
304
  switch (messageType) {
303
305
  case "prologue": {
304
- const prologueMessageIndex = messages.findIndex((item) => {
305
- var _a;
306
- return (_a = item.extra) == null ? void 0 : _a.prologue;
307
- });
308
- if (prologueMessageIndex === -1) {
309
- const newMessage = {
310
- type: "TextMessage",
311
- id: (0, import_uuid.v4)(),
312
- createdAt: /* @__PURE__ */ new Date(),
313
- role: import_XAiMessage.MessageRole.assistant,
314
- status: import_XAiMessage.MessageStatus.done,
315
- content: {
316
- text: content
317
- },
318
- extra: {
319
- prologue: true,
320
- noFooter: true
321
- }
322
- };
323
- setMessages((prev) => [newMessage, ...prev]);
324
- } else {
325
- setMessages((prev) => prev.map((item) => {
306
+ setMessages((prev) => {
307
+ const prologueMessageIndex = prev.findIndex((item) => {
308
+ var _a;
309
+ return (_a = item.extra) == null ? void 0 : _a.prologue;
310
+ });
311
+ if (prologueMessageIndex === -1) {
312
+ const newMessage = {
313
+ type: "TextMessage",
314
+ id: (0, import_uuid.v4)(),
315
+ createdAt: /* @__PURE__ */ new Date(),
316
+ role: import_XAiMessage.MessageRole.assistant,
317
+ status: import_XAiMessage.MessageStatus.done,
318
+ content: {
319
+ text: content
320
+ },
321
+ extra: {
322
+ prologue: true,
323
+ noFooter: true
324
+ }
325
+ };
326
+ return [newMessage, ...prev];
327
+ }
328
+ return prev.map((item) => {
326
329
  var _a;
327
330
  if (((_a = item.extra) == null ? void 0 : _a.prologue) && item.content && "text" in item.content) {
328
331
  item.content.text = content;
329
332
  }
330
333
  return item;
331
- }));
332
- }
334
+ });
335
+ });
333
336
  break;
334
337
  }
335
338
  case "suggest": {
336
- const suggestMessageIndex = messages.findIndex((item) => item.type === "SuggestionMessage");
337
- if (suggestMessageIndex === -1) {
338
- const prologueMessageIndex = messages.findIndex((item) => {
339
- var _a;
340
- return (_a = item.extra) == null ? void 0 : _a.prologue;
341
- });
342
- const newMessage = {
343
- id: (0, import_uuid.v4)(),
344
- type: "SuggestionMessage",
345
- createdAt: /* @__PURE__ */ new Date(),
346
- status: import_XAiMessage.MessageStatus.done,
347
- role: import_XAiMessage.MessageRole.suggestion,
348
- content
349
- };
350
- if (prologueMessageIndex === -1) {
351
- setMessages((prev) => [newMessage, ...prev]);
352
- } else {
353
- setMessages((prev) => {
354
- const newMessages = [...prev];
355
- newMessages.splice(prologueMessageIndex + 1, 0, newMessage);
356
- return newMessages;
339
+ setMessages((prev) => {
340
+ const suggestMessageIndex = prev.findIndex((item) => item.type === "SuggestionMessage");
341
+ if (suggestMessageIndex === -1) {
342
+ const prologueMessageIndex = prev.findIndex((item) => {
343
+ var _a;
344
+ return (_a = item.extra) == null ? void 0 : _a.prologue;
357
345
  });
346
+ const newMessage = {
347
+ id: (0, import_uuid.v4)(),
348
+ type: "SuggestionMessage",
349
+ createdAt: /* @__PURE__ */ new Date(),
350
+ status: import_XAiMessage.MessageStatus.done,
351
+ role: import_XAiMessage.MessageRole.suggestion,
352
+ content
353
+ };
354
+ if (prologueMessageIndex === -1) {
355
+ return [newMessage, ...prev];
356
+ }
357
+ const newMessages = [...prev];
358
+ newMessages.splice(prologueMessageIndex + 1, 0, newMessage);
359
+ return newMessages;
358
360
  }
359
- } else {
360
- setMessages((prev) => prev.map((item) => {
361
+ return prev.map((item) => {
361
362
  if (item.type === "SuggestionMessage") {
362
363
  item.content = content;
363
364
  }
364
365
  return item;
365
- }));
366
- }
366
+ });
367
+ });
367
368
  break;
368
369
  }
369
370
  default:
@@ -394,7 +395,8 @@ var useAgentGenerator = ({
394
395
  {
395
396
  appParams: {
396
397
  inputs_msg: content
397
- }
398
+ },
399
+ sessionId: currentSession
398
400
  },
399
401
  {
400
402
  Authorization: `Bearer ${token}`
@@ -441,28 +443,116 @@ var useAgentGenerator = ({
441
443
  return newMessages;
442
444
  });
443
445
  };
444
- (0, import_react.useEffect)(() => {
445
- if (appInfo) {
446
- const { onboardingInfo = {} } = appInfo;
447
- const { suggested_questions = [], prologue = "" } = onboardingInfo || {};
448
- if (prologue) {
449
- setMessage("prologue", prologue);
450
- } else {
451
- setMessages((prev) => prev.filter((item) => {
452
- var _a;
453
- return !((_a = item.extra) == null ? void 0 : _a.prologue);
454
- }));
455
- }
456
- const formatSuggests = suggested_questions.filter((item) => item);
457
- if (formatSuggests.length > 0) {
458
- const suggestMessages = formatSuggests.map((item, index) => ({
459
- key: index + 1,
460
- description: item
461
- }));
446
+ const formatMessages = (data) => {
447
+ setMessages((prev) => {
448
+ const initMessagesList = [];
449
+ data.forEach((item) => {
450
+ var _a;
451
+ const { content, messageTime, role } = item || {};
452
+ if (role === "USER") {
453
+ const newMessage = {
454
+ type: "TextMessage",
455
+ id: (0, import_uuid.v4)(),
456
+ createdAt: messageTime,
457
+ role: import_XAiMessage.MessageRole.user,
458
+ status: import_XAiMessage.MessageStatus.done,
459
+ content: {
460
+ text: content
461
+ }
462
+ };
463
+ initMessagesList.push(newMessage);
464
+ } else if (role === "AI") {
465
+ const contentObj = (0, import_utils.safeJsonParse)(content);
466
+ const newMessage = {
467
+ id: (0, import_uuid.v4)(),
468
+ type: "TextMessage",
469
+ createdAt: messageTime,
470
+ role: import_XAiMessage.MessageRole.assistant,
471
+ content: { text: (_a = contentObj == null ? void 0 : contentObj.result) == null ? void 0 : _a.result },
472
+ thinks: [],
473
+ status: import_XAiMessage.MessageStatus.done
474
+ };
475
+ initMessagesList.push(newMessage);
476
+ }
477
+ });
478
+ return [...prev, ...initMessagesList];
479
+ });
480
+ };
481
+ const initPrologue = async () => {
482
+ const { onboardingInfo = {} } = appInfo;
483
+ const { suggested_questions = [], prologue = "" } = onboardingInfo || {};
484
+ if (prologue) {
485
+ setMessage("prologue", prologue);
486
+ } else {
487
+ setMessages((prev) => prev.filter((item) => {
488
+ var _a;
489
+ return !((_a = item.extra) == null ? void 0 : _a.prologue);
490
+ }));
491
+ }
492
+ const formatSuggests = suggested_questions.filter((item) => item);
493
+ if (formatSuggests.length > 0) {
494
+ const suggestMessages = formatSuggests.map((item, index) => ({
495
+ key: index + 1,
496
+ description: item
497
+ }));
498
+ const hasMessages = messages.some((item) => {
499
+ var _a;
500
+ return !((_a = item.extra) == null ? void 0 : _a.prologue) && item.type !== "SuggestionMessage";
501
+ });
502
+ if (!hasMessages) {
462
503
  setMessage("suggest", suggestMessages);
504
+ }
505
+ } else {
506
+ setMessages((prev) => prev.filter((item) => !(item.type === "SuggestionMessage")));
507
+ }
508
+ };
509
+ const initAppConversations = async () => {
510
+ var _a, _b, _c, _d;
511
+ try {
512
+ const result = await (0, import_api.fetchSessionList)({
513
+ url,
514
+ appNo,
515
+ pt,
516
+ tc,
517
+ token
518
+ });
519
+ if (result == null ? void 0 : result.success) {
520
+ if (((_a = result == null ? void 0 : result.data) == null ? void 0 : _a.length) > 0) {
521
+ setSessionList(result.data);
522
+ const { sessionId } = result.data[0];
523
+ if (sessionId) {
524
+ setCurrentSession(sessionId);
525
+ const sessionResult = await (0, import_api.fetchSessionDetail)({
526
+ url,
527
+ appNo,
528
+ pt,
529
+ tc,
530
+ sessionId,
531
+ token
532
+ });
533
+ if (sessionResult == null ? void 0 : sessionResult.success) {
534
+ 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) || [];
535
+ if (sessionsData.length > 0) {
536
+ formatMessages(sessionsData);
537
+ }
538
+ }
539
+ } else {
540
+ setCurrentSession((0, import_uuid.v4)());
541
+ }
542
+ } else {
543
+ setSessionList([]);
544
+ setCurrentSession((0, import_uuid.v4)());
545
+ initPrologue();
546
+ }
463
547
  } else {
464
- setMessages((prev) => prev.filter((item) => !(item.type === "SuggestionMessage")));
548
+ initPrologue();
465
549
  }
550
+ } catch {
551
+ }
552
+ };
553
+ (0, import_react.useEffect)(() => {
554
+ if (appInfo) {
555
+ initAppConversations();
466
556
  }
467
557
  }, [appInfo]);
468
558
  return {
@@ -470,8 +560,11 @@ var useAgentGenerator = ({
470
560
  messages,
471
561
  loading,
472
562
  content: responseData.content,
563
+ sessionsList,
564
+ currentSession,
473
565
  reChat,
474
566
  chat,
567
+ setCurrentSession,
475
568
  setMessage,
476
569
  setMessages,
477
570
  stopChat