@ai-group/chat-sdk 2.1.3 → 2.1.5

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 (91) hide show
  1. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +2 -2
  2. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js +5 -6
  3. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js.map +2 -2
  4. package/dist/cjs/components/XAdkChatbot/index.js +13 -1
  5. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  6. package/dist/cjs/components/XAdkSender/XAdkSender.stories.js +28 -2
  7. package/dist/cjs/components/XAdkSender/XAdkSender.stories.js.map +2 -2
  8. package/dist/cjs/components/XAdkSender/index.js +36 -50
  9. package/dist/cjs/components/XAdkSender/index.js.map +2 -2
  10. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js +8 -8
  11. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +2 -2
  12. package/dist/cjs/components/XAdkWebProvider/index.js +6 -3
  13. package/dist/cjs/components/XAdkWebProvider/index.js.map +2 -2
  14. package/dist/cjs/components/XAiSender/XAiSender.stories.js +1 -1
  15. package/dist/cjs/components/XAiSender/XAiSender.stories.js.map +2 -2
  16. package/dist/cjs/hooks/useADKChat.d.ts +6 -15
  17. package/dist/cjs/hooks/useADKChat.js +113 -38
  18. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  19. package/dist/cjs/hooks/useAgentGenerator.js +1 -1
  20. package/dist/cjs/hooks/useAgentGenerator.js.map +2 -2
  21. package/dist/cjs/services/api.d.ts +5 -5
  22. package/dist/cjs/services/api.js +6 -9
  23. package/dist/cjs/services/api.js.map +2 -2
  24. package/dist/cjs/types/XAdkChatbot.d.ts +17 -4
  25. package/dist/cjs/types/XAdkChatbot.js.map +1 -1
  26. package/dist/cjs/types/XAdkProvider.d.ts +34 -9
  27. package/dist/cjs/types/XAdkProvider.js.map +1 -1
  28. package/dist/cjs/types/XAdkSender.d.ts +13 -2
  29. package/dist/cjs/types/XAdkSender.js.map +1 -1
  30. package/dist/cjs/types/XAiProvider.d.ts +1 -28
  31. package/dist/cjs/types/XAiProvider.js.map +2 -2
  32. package/dist/cjs/types/XAiSender.d.ts +2 -0
  33. package/dist/cjs/types/XAiSender.js.map +1 -1
  34. package/dist/cjs/types/common.d.ts +6 -0
  35. package/dist/cjs/types/common.js +18 -0
  36. package/dist/cjs/types/common.js.map +7 -0
  37. package/dist/cjs/types/index.d.ts +2 -0
  38. package/dist/cjs/types/index.js +5 -1
  39. package/dist/cjs/types/index.js.map +2 -2
  40. package/dist/cjs/utils/chat.d.ts +1 -1
  41. package/dist/cjs/utils/umdEntry.d.ts +9 -9
  42. package/dist/cjs/utils/umdEntry.js +1 -0
  43. package/dist/cjs/utils/umdEntry.js.map +2 -2
  44. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.d.ts +2 -2
  45. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js +5 -5
  46. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js.map +1 -1
  47. package/dist/esm/components/XAdkChatbot/index.js +14 -1
  48. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  49. package/dist/esm/components/XAdkSender/XAdkSender.stories.js +51 -2
  50. package/dist/esm/components/XAdkSender/XAdkSender.stories.js.map +1 -1
  51. package/dist/esm/components/XAdkSender/index.js +53 -75
  52. package/dist/esm/components/XAdkSender/index.js.map +1 -1
  53. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js +13 -14
  54. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +1 -1
  55. package/dist/esm/components/XAdkWebProvider/index.js +30 -22
  56. package/dist/esm/components/XAdkWebProvider/index.js.map +1 -1
  57. package/dist/esm/components/XAiSender/XAiSender.stories.js +1 -1
  58. package/dist/esm/components/XAiSender/XAiSender.stories.js.map +1 -1
  59. package/dist/esm/hooks/useADKChat.d.ts +6 -15
  60. package/dist/esm/hooks/useADKChat.js +189 -73
  61. package/dist/esm/hooks/useADKChat.js.map +1 -1
  62. package/dist/esm/hooks/useAgentGenerator.js +1 -1
  63. package/dist/esm/hooks/useAgentGenerator.js.map +1 -1
  64. package/dist/esm/services/api.d.ts +5 -5
  65. package/dist/esm/services/api.js +8 -11
  66. package/dist/esm/services/api.js.map +1 -1
  67. package/dist/esm/types/XAdkChatbot.d.ts +17 -4
  68. package/dist/esm/types/XAdkChatbot.js.map +1 -1
  69. package/dist/esm/types/XAdkProvider.d.ts +34 -9
  70. package/dist/esm/types/XAdkProvider.js.map +1 -1
  71. package/dist/esm/types/XAdkSender.d.ts +13 -2
  72. package/dist/esm/types/XAdkSender.js.map +1 -1
  73. package/dist/esm/types/XAiProvider.d.ts +1 -28
  74. package/dist/esm/types/XAiProvider.js +0 -7
  75. package/dist/esm/types/XAiProvider.js.map +1 -1
  76. package/dist/esm/types/XAiSender.d.ts +2 -0
  77. package/dist/esm/types/XAiSender.js.map +1 -1
  78. package/dist/esm/types/common.d.ts +6 -0
  79. package/dist/esm/types/common.js +2 -0
  80. package/dist/esm/types/common.js.map +1 -0
  81. package/dist/esm/types/index.d.ts +2 -0
  82. package/dist/esm/types/index.js +2 -0
  83. package/dist/esm/types/index.js.map +1 -1
  84. package/dist/esm/utils/chat.d.ts +1 -1
  85. package/dist/esm/utils/chat.js +4 -4
  86. package/dist/esm/utils/chat.js.map +1 -1
  87. package/dist/esm/utils/umdEntry.d.ts +9 -9
  88. package/dist/esm/utils/umdEntry.js +1 -1
  89. package/dist/esm/utils/umdEntry.js.map +1 -1
  90. package/dist/umd/chat-sdk.min.js +1 -1
  91. package/package.json +15 -13
@@ -53,6 +53,8 @@ var XAdkWebProvider = (0, import_react.forwardRef)(({
53
53
  config,
54
54
  providerId = "defaultId",
55
55
  onSuccess,
56
+ onStream,
57
+ onMessage,
56
58
  onError
57
59
  }, ref) => {
58
60
  var _a, _b, _c;
@@ -71,11 +73,11 @@ var XAdkWebProvider = (0, import_react.forwardRef)(({
71
73
  stopChat,
72
74
  clearChat,
73
75
  suggestChat,
76
+ confirmFnCall,
74
77
  deleteSession,
75
78
  updateSession,
76
79
  setCurrentSessionDetail
77
- } = (0, import_useADKChat.default)({ url, config, token, onSuccess, onError });
78
- const { appName, icon } = appInfo || {};
80
+ } = (0, import_useADKChat.default)({ url, config, token, onSuccess, onError, onStream, onMessage });
79
81
  (0, import_react.useImperativeHandle)(ref, () => ({
80
82
  startChat,
81
83
  stopChat,
@@ -109,7 +111,7 @@ var XAdkWebProvider = (0, import_react.forwardRef)(({
109
111
  };
110
112
  }, []);
111
113
  const handleSendMessage = async ({ text = "" }) => {
112
- await startChat(text);
114
+ await startChat({ text });
113
115
  };
114
116
  const handleAddFeedback = async (data) => {
115
117
  var _a2;
@@ -338,6 +340,7 @@ var XAdkWebProvider = (0, import_react.forwardRef)(({
338
340
  messages,
339
341
  footer: renderFooter,
340
342
  onSubmit: handleSendMessage,
343
+ onConfirm: confirmFnCall,
341
344
  onStop: stopChat,
342
345
  onClear: clearChat,
343
346
  onSuggest: suggestChat,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAdkWebProvider/index.tsx"],
4
- "sourcesContent": ["import { forwardRef, useImperativeHandle, useState, useRef, useEffect } from 'react';\nimport { message, Flex, Tooltip, Button, Modal, Input, ConfigProvider } from 'antd';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport type { ConversationsProps } from '@ant-design/x';\nimport { ExclamationCircleFilled, ReloadOutlined, CopyOutlined, LikeFilled, LikeOutlined } from '@ant-design/icons';\nimport { XAdkProviderProps, XAdkProviderHandle } from '@/types/XAdkProvider';\nimport { MOBILE_MAX_WIDTH, API_SUCCESS_CODE } from '@/constants';\nimport type { IMessage, SendContent } from '@/types';\nimport XAdkChatbot from '../XAdkChatbot';\nimport DislikeFeedback from '../DislikeFeedback';\nimport useADKChat from '@/hooks/useADKChat';\nimport { addFeedback } from '@/services/api';\nimport { primaryBlue } from '@/styles/common';\nimport XAiConversations from '../XAiConversations';\nimport { useStyles } from './styles';\n\nconst { confirm } = Modal;\n\nconst XAdkWebProvider = forwardRef<XAdkProviderHandle, XAdkProviderProps>(({\n url = window.location.origin,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onError,\n}, ref) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const styles = useStyles();\n // const { textSpeed = 55 } = config?.chatProps || {};\n\n const {\n appInfo,\n loading,\n messages,\n prologue,\n suggestions,\n sessionList,\n currentSessionId,\n initialized,\n setMessages,\n startChat,\n stopChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n setCurrentSessionDetail,\n } = useADKChat({ url, config, token, onSuccess, onError });\n\n const { appName, icon } = appInfo || {};\n\n useImperativeHandle(ref, () => ({\n startChat,\n stopChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSessionDetail,\n }), [appInfo, messages, stopChat, setMessages, setCurrentSessionDetail]);\n\n const [_isNarrow, setIsNarrow] = useState<boolean>(false);\n const divRef = useRef<HTMLDivElement>(null);\n\n // 监听容器宽度变化\n useEffect(() => {\n const div = divRef.current;\n if (!div) return;\n\n // 创建监听器\n const resizeObserver = new ResizeObserver((entries) => {\n // eslint-disable-next-line no-restricted-syntax\n for (const entry of entries) {\n const { width } = entry.contentRect;\n setIsNarrow(width <= MOBILE_MAX_WIDTH);\n }\n });\n\n // 开始监听\n resizeObserver.observe(div);\n\n // 初始化检查\n const initialWidth = div.offsetWidth;\n setIsNarrow(initialWidth <= MOBILE_MAX_WIDTH);\n\n // 清理函数\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n // 发送消息\n const handleSendMessage = async ({ text = '' }: SendContent) => {\n await startChat(text);\n };\n\n // 处理添加反馈\n const handleAddFeedback = async (data: any) => {\n const { appNo } = config || {};\n const isLike = data?.raw?.isLike ?? 0;\n if (isLike !== 0) {\n message.warning('已收到您的反馈,无需重复提交');\n return;\n }\n if (appNo) {\n const { result } = await addFeedback({\n url,\n token,\n appNo,\n requestId: data.invocationId,\n isLike: 1,\n });\n if (result?.code === API_SUCCESS_CODE) {\n message.success('感谢您的反馈');\n setMessages((prev) => {\n return prev.map((item) => {\n if (item.id === data.id) {\n return {\n ...item,\n raw: {\n ...item.raw,\n isLike: 1, \n }\n };\n }\n return item;\n });\n });\n } else {\n message.error('反馈失败,请稍后再试');\n }\n }\n };\n\n\n const renderFooter = ({ message: msg = {} as IMessage, isLastBotMsg = false, isLastMsg = false}) => {\n if (isLastBotMsg) {\n return (\n <Flex gap={4} style={{ padding: '8px 0' }}>\n {isLastMsg && (\n <Tooltip title=\"重新生成\">\n <Button\n type=\"text\"\n size=\"small\"\n style={{ color: '#949494' }}\n icon={<ReloadOutlined />}\n onClick={() => {\n const lastMsg = messages.findLast((v) => {\n return v.role === 'user' && v.text;\n });\n handleSendMessage({ text: lastMsg?.text || '' });\n }}\n />\n </Tooltip>\n )}\n <Tooltip title=\"赞\">\n <Button\n type=\"text\"\n size=\"small\"\n style={{ color: '#949494' }}\n icon={msg.raw?.isLike === 1 ? <LikeFilled /> : <LikeOutlined />}\n onClick={() => handleAddFeedback(msg)}\n />\n </Tooltip>\n <Tooltip title=\"踩\">\n <DislikeFeedback\n msg={msg}\n activeColor={appInfo?.appTheme || primaryBlue}\n onSubmit={async (formData) => {\n const { result } = await addFeedback({\n ...formData,\n requestId: msg.invocationId,\n isLike: -1,\n url,\n appNo: config?.appNo,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n message.success('已收到您的反馈,我们会努力做的更好');\n setMessages((prev) => {\n return prev.map((item) => {\n if (item.id === msg.id) {\n return {\n ...item,\n isLike: -1,\n };\n }\n return item;\n });\n });\n return true;\n }\n message.error('反馈失败,请稍后再试');\n return false;\n }}\n />\n </Tooltip>\n <Tooltip title=\"复制\">\n <Button\n type=\"text\"\n size=\"small\"\n style={{ color: '#949494' }}\n icon={<CopyOutlined />}\n onClick={() => {\n const msgs = messages.filter((v) => {\n return v.role === 'bot'\n && v.invocationId === msg.invocationId\n && v.text;\n });\n const text = msgs.map((v) => {\n return v.text;\n }).join('\\n');\n const isOk = copy(text);\n if (isOk) {\n message.success('复制成功');\n }\n }}\n />\n </Tooltip>\n </Flex>\n );\n }\n return null;\n };\n\n // 修改会话内容\n const handleUpdateSession = (sessionId: string, title: string) => {\n updateSession(sessionId, title);\n };\n\n // 会话操作菜单\n const menuConfig: ConversationsProps['menu'] = (conversation) => ({\n items: [\n {\n label: '重命名',\n key: 'edit',\n },\n {\n label: '删除',\n key: 'delete',\n danger: true,\n },\n ],\n onClick: (menuInfo) => {\n menuInfo.domEvent.stopPropagation();\n const { key } = menuInfo;\n switch (key) {\n case 'edit': {\n let inputValue = conversation.label as string || '';\n confirm({\n title: '编辑对话名称',\n icon: null,\n content: (\n <Input\n defaultValue={inputValue}\n autoFocus\n style={{ width: '100%' }}\n onChange={(e) => {\n inputValue = e.target.value;\n }}\n />\n ),\n okText: '确认',\n cancelText: '取消',\n okButtonProps: {\n style: { background: '#000', borderColor: '#000', color: '#fff' },\n },\n onOk: () => {\n if (!inputValue.trim()) {\n message.error('对话名称不能为空');\n return Promise.reject();\n }\n handleUpdateSession(conversation.key, inputValue);\n },\n onCancel: () => {\n // 静默处理\n },\n });\n break;\n }\n case 'delete':\n confirm({\n title: '确认删除?',\n icon: <ExclamationCircleFilled />,\n content: '该对话内容将被删除无法恢复。',\n okText: '确认删除',\n okType: 'danger',\n cancelText: '取消',\n okButtonProps: {\n style: { background: '#ff4d4f', borderColor: '#ff4d4f', color: '#fff' },\n },\n onOk() {\n deleteSession(conversation.key);\n },\n onCancel() {\n //\n },\n });\n break;\n }\n },\n });\n\n // 是否展示清空按钮\n const clearBtnShow = typeof config?.chatProps?.clearBtnShow !== 'undefined'\n ? config.chatProps.clearBtnShow\n : !config?.session?.showSessionList;\n\n return (\n <ConfigProvider>\n <XProvider>\n <div\n ref={divRef}\n className={styles.providerWrapper}\n > \n {config?.session?.showSessionList && (\n <XAiConversations\n isNarrow={false}\n sessionList={sessionList}\n onActiveChange={(key) => setCurrentSessionDetail(key)}\n onNewChat={clearChat}\n activeKey={currentSessionId}\n menu={menuConfig}\n />\n )}\n <div className={styles.chatbotWrapper}>\n <div className={styles.content}>\n <XAdkChatbot\n allowUpload={config?.allowUpload}\n initialized={initialized}\n prologue={prologue}\n suggestions={suggestions}\n loading={loading}\n messages={messages}\n footer={renderFooter}\n onSubmit={handleSendMessage}\n onStop={stopChat}\n onClear={clearChat}\n onSuggest={suggestChat}\n clearBtnShow={clearBtnShow}\n />\n </div>\n </div>\n </div>\n </XProvider>\n </ConfigProvider>\n );\n});\n\nexport default XAdkWebProvider;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { forwardRef, useImperativeHandle, useState, useRef, useEffect } from 'react';\nimport { message, Flex, Tooltip, Button, Modal, Input, ConfigProvider } from 'antd';\nimport copy from 'copy-to-clipboard';\nimport { XProvider } from '@ant-design/x';\nimport type { ConversationsProps } from '@ant-design/x';\nimport { ExclamationCircleFilled, ReloadOutlined, CopyOutlined, LikeFilled, LikeOutlined } from '@ant-design/icons';\nimport { XAdkProviderProps, XAdkProviderHandle } from '@/types/XAdkProvider';\nimport { MOBILE_MAX_WIDTH, API_SUCCESS_CODE } from '@/constants';\nimport type { IMessage, SendContent } from '@/types';\nimport XAdkChatbot from '../XAdkChatbot';\nimport DislikeFeedback from '../DislikeFeedback';\nimport useADKChat from '@/hooks/useADKChat';\nimport { addFeedback } from '@/services/api';\nimport { primaryBlue } from '@/styles/common';\nimport XAiConversations from '../XAiConversations';\nimport { useStyles } from './styles';\n\nconst { confirm } = Modal;\n\nconst XAdkWebProvider = forwardRef<XAdkProviderHandle, XAdkProviderProps>(({\n url = window.location.origin,\n token,\n config,\n providerId = 'defaultId',\n onSuccess,\n onStream,\n onMessage,\n onError,\n}, ref) => {\n // 使用 useAgentGenerator Hook 管理消息状态\n const styles = useStyles();\n // const { textSpeed = 55 } = config?.chatProps || {};\n\n const {\n appInfo,\n loading,\n messages,\n prologue,\n suggestions,\n sessionList,\n currentSessionId,\n initialized,\n setMessages,\n startChat,\n stopChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n deleteSession,\n updateSession,\n setCurrentSessionDetail,\n } = useADKChat({ url, config, token, onSuccess, onError, onStream, onMessage });\n\n // const { appName, icon } = appInfo || {};\n\n useImperativeHandle(ref, () => ({\n startChat,\n stopChat,\n clearChat,\n suggestChat,\n deleteSession,\n updateSession,\n getAppInfo: () => appInfo,\n getMessages: () => messages,\n getSessions: () => sessionList,\n setMessages,\n setCurrentSessionDetail,\n }), [appInfo, messages, stopChat, setMessages, setCurrentSessionDetail]);\n\n const [_isNarrow, setIsNarrow] = useState<boolean>(false);\n const divRef = useRef<HTMLDivElement>(null);\n\n // 监听容器宽度变化\n useEffect(() => {\n const div = divRef.current;\n if (!div) return;\n\n // 创建监听器\n const resizeObserver = new ResizeObserver((entries) => {\n // eslint-disable-next-line no-restricted-syntax\n for (const entry of entries) {\n const { width } = entry.contentRect;\n setIsNarrow(width <= MOBILE_MAX_WIDTH);\n }\n });\n\n // 开始监听\n resizeObserver.observe(div);\n\n // 初始化检查\n const initialWidth = div.offsetWidth;\n setIsNarrow(initialWidth <= MOBILE_MAX_WIDTH);\n\n // 清理函数\n return () => {\n resizeObserver.disconnect();\n };\n }, []);\n\n // 发送消息\n const handleSendMessage = async ({ text = '' }: SendContent) => {\n await startChat({ text });\n };\n\n // 处理添加反馈\n const handleAddFeedback = async (data: any) => {\n const { appNo } = config || {};\n const isLike = data?.raw?.isLike ?? 0;\n if (isLike !== 0) {\n message.warning('已收到您的反馈,无需重复提交');\n return;\n }\n if (appNo) {\n const { result } = await addFeedback({\n url,\n token,\n appNo,\n requestId: data.invocationId,\n isLike: 1,\n });\n if (result?.code === API_SUCCESS_CODE) {\n message.success('感谢您的反馈');\n setMessages((prev) => {\n return prev.map((item) => {\n if (item.id === data.id) {\n return {\n ...item,\n raw: {\n ...item.raw,\n isLike: 1, \n }\n };\n }\n return item;\n });\n });\n } else {\n message.error('反馈失败,请稍后再试');\n }\n }\n };\n\n\n const renderFooter = ({ message: msg = {} as IMessage, isLastBotMsg = false, isLastMsg = false}) => {\n if (isLastBotMsg) {\n return (\n <Flex gap={4} style={{ padding: '8px 0' }}>\n {isLastMsg && (\n <Tooltip title=\"重新生成\">\n <Button\n type=\"text\"\n size=\"small\"\n style={{ color: '#949494' }}\n icon={<ReloadOutlined />}\n onClick={() => {\n const lastMsg = messages.findLast((v) => {\n return v.role === 'user' && v.text;\n });\n handleSendMessage({ text: lastMsg?.text || '' });\n }}\n />\n </Tooltip>\n )}\n <Tooltip title=\"赞\">\n <Button\n type=\"text\"\n size=\"small\"\n style={{ color: '#949494' }}\n icon={msg.raw?.isLike === 1 ? <LikeFilled /> : <LikeOutlined />}\n onClick={() => handleAddFeedback(msg)}\n />\n </Tooltip>\n <Tooltip title=\"踩\">\n <DislikeFeedback\n msg={msg}\n activeColor={appInfo?.appTheme || primaryBlue}\n onSubmit={async (formData) => {\n const { result } = await addFeedback({\n ...formData,\n requestId: msg.invocationId,\n isLike: -1,\n url,\n appNo: config?.appNo,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n message.success('已收到您的反馈,我们会努力做的更好');\n setMessages((prev) => {\n return prev.map((item) => {\n if (item.id === msg.id) {\n return {\n ...item,\n isLike: -1,\n };\n }\n return item;\n });\n });\n return true;\n }\n message.error('反馈失败,请稍后再试');\n return false;\n }}\n />\n </Tooltip>\n <Tooltip title=\"复制\">\n <Button\n type=\"text\"\n size=\"small\"\n style={{ color: '#949494' }}\n icon={<CopyOutlined />}\n onClick={() => {\n const msgs = messages.filter((v) => {\n return v.role === 'bot'\n && v.invocationId === msg.invocationId\n && v.text;\n });\n const text = msgs.map((v) => {\n return v.text;\n }).join('\\n');\n const isOk = copy(text);\n if (isOk) {\n message.success('复制成功');\n }\n }}\n />\n </Tooltip>\n </Flex>\n );\n }\n return null;\n };\n\n // 修改会话内容\n const handleUpdateSession = (sessionId: string, title: string) => {\n updateSession(sessionId, title);\n };\n\n // 会话操作菜单\n const menuConfig: ConversationsProps['menu'] = (conversation) => ({\n items: [\n {\n label: '重命名',\n key: 'edit',\n },\n {\n label: '删除',\n key: 'delete',\n danger: true,\n },\n ],\n onClick: (menuInfo) => {\n menuInfo.domEvent.stopPropagation();\n const { key } = menuInfo;\n switch (key) {\n case 'edit': {\n let inputValue = conversation.label as string || '';\n confirm({\n title: '编辑对话名称',\n icon: null,\n content: (\n <Input\n defaultValue={inputValue}\n autoFocus\n style={{ width: '100%' }}\n onChange={(e) => {\n inputValue = e.target.value;\n }}\n />\n ),\n okText: '确认',\n cancelText: '取消',\n okButtonProps: {\n style: { background: '#000', borderColor: '#000', color: '#fff' },\n },\n onOk: () => {\n if (!inputValue.trim()) {\n message.error('对话名称不能为空');\n return Promise.reject();\n }\n handleUpdateSession(conversation.key, inputValue);\n },\n onCancel: () => {\n // 静默处理\n },\n });\n break;\n }\n case 'delete':\n confirm({\n title: '确认删除?',\n icon: <ExclamationCircleFilled />,\n content: '该对话内容将被删除无法恢复。',\n okText: '确认删除',\n okType: 'danger',\n cancelText: '取消',\n okButtonProps: {\n style: { background: '#ff4d4f', borderColor: '#ff4d4f', color: '#fff' },\n },\n onOk() {\n deleteSession(conversation.key);\n },\n onCancel() {\n //\n },\n });\n break;\n }\n },\n });\n\n // 是否展示清空按钮\n const clearBtnShow = typeof config?.chatProps?.clearBtnShow !== 'undefined'\n ? config.chatProps.clearBtnShow\n : !config?.session?.showSessionList;\n\n return (\n <ConfigProvider>\n <XProvider>\n <div\n ref={divRef}\n className={styles.providerWrapper}\n > \n {config?.session?.showSessionList && (\n <XAiConversations\n isNarrow={false}\n sessionList={sessionList}\n onActiveChange={(key) => setCurrentSessionDetail(key)}\n onNewChat={clearChat}\n activeKey={currentSessionId}\n menu={menuConfig}\n />\n )}\n <div className={styles.chatbotWrapper}>\n <div className={styles.content}>\n <XAdkChatbot\n allowUpload={config?.allowUpload}\n initialized={initialized}\n prologue={prologue}\n suggestions={suggestions}\n loading={loading}\n messages={messages}\n footer={renderFooter}\n onSubmit={handleSendMessage}\n onConfirm={confirmFnCall}\n onStop={stopChat}\n onClear={clearChat}\n onSuggest={suggestChat}\n clearBtnShow={clearBtnShow}\n />\n </div>\n </div>\n </div>\n </XProvider>\n </ConfigProvider>\n );\n});\n\nexport default XAdkWebProvider;\n"],
5
+ "mappings": "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",
6
6
  "names": ["useADKChat", "_a", "DislikeFeedback", "copy", "XAiConversations", "XAdkChatbot"]
7
7
  }
@@ -57,8 +57,8 @@ var BasicUsageStory = () => {
57
57
  setContent(text);
58
58
  };
59
59
  const handleSendMessage = (obj) => {
60
+ console.log(obj);
60
61
  setLoading(true);
61
- console.info(obj);
62
62
  setTimeout(() => {
63
63
  setContent("");
64
64
  setFiles([]);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/components/XAiSender/XAiSender.stories.tsx"],
4
- "sourcesContent": ["import React, { useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport type { Attachment } from '@ant-design/x/es/attachments';\nimport XAiSender from '.';\n\nconst meta: Meta<typeof XAiSender> = {\n title: 'AI组件/XAiSender 输入框',\n component: XAiSender,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {},\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 基础用法\nconst BasicUsageStory = () => {\n const [files, setFiles] = useState<Attachment[]>([]);\n const [content, setContent] = useState('');\n const [loading, setLoading] = useState(false);\n\n // 模拟清空数据\n const handleClear = () => {\n console.info('clear');\n };\n\n // 模拟输入\n const handleChange = (text: string) => {\n setContent(text);\n };\n\n // 模拟快捷短语点击\n const handleSendMessage = (obj: any) => {\n setLoading(true);\n console.info(obj);\n setTimeout(() => {\n setContent('');\n setFiles([]);\n setLoading(false);\n }, 2000);\n };\n\n return (\n <div style={{ width: 440, border: '1px solid #eee', padding: 20 }}>\n <XAiSender\n loading={loading}\n value={content}\n enableUpload\n files={files}\n onChangeFiles={setFiles}\n uploadRequest={({ file, onProgress, onSuccess }) => {\n console.info(file);\n onProgress?.({\n percent: 50,\n });\n setTimeout(() => {\n onSuccess?.({});\n }, 1000);\n }}\n onClear={handleClear}\n onChange={handleChange}\n onSubmit={handleSendMessage}\n onStop={handleClear}\n footerTips=\"内容由AI生成,无法确保真实准确,仅供参考\"\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {},\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAGhC,eAAsB;AA4ChB;AA1CN,IAAM,OAA+B;AAAA,EACnC,OAAO;AAAA,EACP,WAAW,SAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU,CAAC;AACb;AAEA,IAAO,4BAAQ;AAIf,IAAM,kBAAkB,MAAM;AAC5B,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAuB,CAAC,CAAC;AACnD,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,EAAE;AACzC,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,KAAK;AAG5C,QAAM,cAAc,MAAM;AACxB,YAAQ,KAAK,OAAO;AAAA,EACtB;AAGA,QAAM,eAAe,CAAC,SAAiB;AACrC,eAAW,IAAI;AAAA,EACjB;AAGA,QAAM,oBAAoB,CAAC,QAAa;AACtC,eAAW,IAAI;AACf,YAAQ,KAAK,GAAG;AAChB,eAAW,MAAM;AACf,iBAAW,EAAE;AACb,eAAS,CAAC,CAAC;AACX,iBAAW,KAAK;AAAA,IAClB,GAAG,GAAI;AAAA,EACT;AAEA,SACE,4CAAC,SAAI,OAAO,EAAE,OAAO,KAAK,QAAQ,kBAAkB,SAAS,GAAG,GAC9D;AAAA,IAAC,SAAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,MACP,cAAY;AAAA,MACZ;AAAA,MACA,eAAe;AAAA,MACf,eAAe,CAAC,EAAE,MAAM,YAAY,UAAU,MAAM;AAClD,gBAAQ,KAAK,IAAI;AACjB,iDAAa;AAAA,UACX,SAAS;AAAA,QACX;AACA,mBAAW,MAAM;AACf,iDAAY,CAAC;AAAA,QACf,GAAG,GAAI;AAAA,MACT;AAAA,MACA,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,YAAW;AAAA;AAAA,EACb,GACF;AAEJ;AAEO,IAAM,OAAc;AAAA,EACzB,QAAQ;AAAA,EACR,MAAM,CAAC;AACT;",
4
+ "sourcesContent": ["import React, { useState } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react-vite';\nimport type { Attachment } from '@ant-design/x/es/attachments';\nimport XAiSender from '.';\n\nconst meta: Meta<typeof XAiSender> = {\n title: 'AI组件/XAiSender 输入框',\n component: XAiSender,\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {},\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\n// 基础用法\nconst BasicUsageStory = () => {\n const [files, setFiles] = useState<Attachment[]>([]);\n const [content, setContent] = useState('');\n const [loading, setLoading] = useState(false);\n\n // 模拟清空数据\n const handleClear = () => {\n console.info('clear');\n };\n\n // 模拟输入\n const handleChange = (text: string) => {\n setContent(text);\n };\n\n // 模拟快捷短语点击\n const handleSendMessage = (obj: any) => {\n console.log(obj);\n setLoading(true);\n setTimeout(() => {\n setContent('');\n setFiles([]);\n setLoading(false);\n }, 2000);\n };\n\n return (\n <div style={{ width: 440, border: '1px solid #eee', padding: 20 }}>\n <XAiSender\n loading={loading}\n value={content}\n enableUpload\n files={files}\n onChangeFiles={setFiles}\n uploadRequest={({ file, onProgress, onSuccess }) => {\n console.info(file);\n onProgress?.({\n percent: 50,\n });\n setTimeout(() => {\n onSuccess?.({});\n }, 1000);\n }}\n onClear={handleClear}\n onChange={handleChange}\n onSubmit={handleSendMessage}\n onStop={handleClear}\n footerTips=\"内容由AI生成,无法确保真实准确,仅供参考\"\n />\n </div>\n );\n};\n\nexport const 基础用法: Story = {\n render: BasicUsageStory,\n args: {},\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAgC;AAGhC,eAAsB;AA4ChB;AA1CN,IAAM,OAA+B;AAAA,EACnC,OAAO;AAAA,EACP,WAAW,SAAAA;AAAA,EACX,YAAY;AAAA,IACV,QAAQ;AAAA,EACV;AAAA,EACA,MAAM,CAAC,UAAU;AAAA,EACjB,UAAU,CAAC;AACb;AAEA,IAAO,4BAAQ;AAIf,IAAM,kBAAkB,MAAM;AAC5B,QAAM,CAAC,OAAO,QAAQ,QAAI,uBAAuB,CAAC,CAAC;AACnD,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,EAAE;AACzC,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAS,KAAK;AAG5C,QAAM,cAAc,MAAM;AACxB,YAAQ,KAAK,OAAO;AAAA,EACtB;AAGA,QAAM,eAAe,CAAC,SAAiB;AACrC,eAAW,IAAI;AAAA,EACjB;AAGA,QAAM,oBAAoB,CAAC,QAAa;AACtC,YAAQ,IAAI,GAAG;AACf,eAAW,IAAI;AACf,eAAW,MAAM;AACf,iBAAW,EAAE;AACb,eAAS,CAAC,CAAC;AACX,iBAAW,KAAK;AAAA,IAClB,GAAG,GAAI;AAAA,EACT;AAEA,SACE,4CAAC,SAAI,OAAO,EAAE,OAAO,KAAK,QAAQ,kBAAkB,SAAS,GAAG,GAC9D;AAAA,IAAC,SAAAA;AAAA,IAAA;AAAA,MACC;AAAA,MACA,OAAO;AAAA,MACP,cAAY;AAAA,MACZ;AAAA,MACA,eAAe;AAAA,MACf,eAAe,CAAC,EAAE,MAAM,YAAY,UAAU,MAAM;AAClD,gBAAQ,KAAK,IAAI;AACjB,iDAAa;AAAA,UACX,SAAS;AAAA,QACX;AACA,mBAAW,MAAM;AACf,iDAAY,CAAC;AAAA,QACf,GAAG,GAAI;AAAA,MACT;AAAA,MACA,SAAS;AAAA,MACT,UAAU;AAAA,MACV,UAAU;AAAA,MACV,QAAQ;AAAA,MACR,YAAW;AAAA;AAAA,EACb,GACF;AAEJ;AAEO,IAAM,OAAc;AAAA,EACzB,QAAQ;AAAA,EACR,MAAM,CAAC;AACT;",
6
6
  "names": ["XAiSender"]
7
7
  }
@@ -1,23 +1,14 @@
1
1
  /// <reference types="react" />
2
- import type { Event, IMessage, Part } from "../types";
3
- import { type Error, type Success, type SessionData } from "../types";
2
+ import { DebugOptions, FunctionCall, SendContent, SessionData, Event, IMessage, Part } from "../types";
4
3
  import { type ChatConfig } from "../services/api";
5
- export interface DebugOptions {
6
- url: string;
7
- sessionId?: string;
8
- config: any;
9
- token: string;
10
- type?: 'agentDebug' | 'appDebug';
11
- onError?: (error: Error) => void;
12
- onSuccess?: (data: Success) => void;
13
- onMessage?: (content: string, data: IMessage) => void;
14
- }
15
- declare function useADKChat({ url, token, config, type, onError, onMessage, onSuccess, }: DebugOptions): {
16
- appInfo: ChatConfig;
17
- startChat: (text: string) => Promise<void>;
4
+ declare function useADKChat({ url, token, config, type, onError, onMessage, onSuccess, onStream, }: DebugOptions): {
5
+ appInfo: ChatConfig | null;
6
+ startChat: ({ text, files, functionResponse }: SendContent) => Promise<void>;
7
+ reChat: () => void;
18
8
  stopChat: () => void;
19
9
  clearChat: () => void;
20
10
  suggestChat: (text: string) => void;
11
+ confirmFnCall: (fnCall: FunctionCall, confirmed: boolean) => void;
21
12
  initialized: boolean;
22
13
  currentSessionId: string;
23
14
  sessionList: SessionData[];
@@ -55,22 +55,13 @@ function useADKChat({
55
55
  type = "agentDebug",
56
56
  onError,
57
57
  onMessage,
58
- onSuccess
58
+ onSuccess,
59
+ onStream
59
60
  }) {
60
61
  const [loading, setLoading] = (0, import_react.useState)(false);
61
62
  const ctrl = (0, import_react.useRef)(null);
62
63
  const { appNo } = config || {};
63
- const [appInfo, setAppInfo] = (0, import_react.useState)({
64
- appNo,
65
- appVersionNo: "",
66
- appTheme: "",
67
- appName: "",
68
- onboardingInfo: {
69
- prologue: "",
70
- questionFiles: [],
71
- suggested_questions: []
72
- }
73
- });
64
+ const [appInfo, setAppInfo] = (0, import_react.useState)(null);
74
65
  const [initialized, setInitialized] = (0, import_react.useState)(false);
75
66
  const [sessionList, setSessionList] = (0, import_react.useState)([]);
76
67
  const [currentSessionId, setCurrentSessionId] = (0, import_react.useState)("");
@@ -179,6 +170,8 @@ function useADKChat({
179
170
  if ((_b = (_a = event == null ? void 0 : event.groundingMetadata) == null ? void 0 : _a.searchEntryPoint) == null ? void 0 : _b.renderedContent) {
180
171
  msg.renderedContent = event.groundingMetadata.searchEntryPoint.renderedContent;
181
172
  }
173
+ } else if (part.fileData) {
174
+ msg.fileData = [part.fileData];
182
175
  } else if (part.functionCall) {
183
176
  msg.functionCall = part.functionCall;
184
177
  } else if (part.functionResponse) {
@@ -299,6 +292,7 @@ function useADKChat({
299
292
  import_antd.message.warning(chunkJson.error);
300
293
  return;
301
294
  }
295
+ onStream == null ? void 0 : onStream(chunkJson);
302
296
  if (chunkJson.content) {
303
297
  if (chunkJson.content.role === "followup") {
304
298
  processFollowupPart(chunkJson);
@@ -314,7 +308,11 @@ function useADKChat({
314
308
  }
315
309
  },
316
310
  onclose: () => {
311
+ var _a;
317
312
  setLoading(false);
313
+ if (textMsgRef.current) {
314
+ onMessage == null ? void 0 : onMessage(((_a = textMsgRef.current) == null ? void 0 : _a.text) || "", textMsgRef.current);
315
+ }
318
316
  textMsgRef.current = null;
319
317
  resolve();
320
318
  },
@@ -327,38 +325,113 @@ function useADKChat({
327
325
  });
328
326
  });
329
327
  }, [type, currentSessionId, processActionArtifact, processErrorMessage, processPart]);
330
- const startChat = async (text) => {
328
+ const startChat = async ({ text = "", files = [], functionResponse }) => {
331
329
  if (loading)
332
330
  return;
333
- if (!text.trim())
331
+ if (!text.trim() && !functionResponse)
334
332
  return;
335
333
  setSuggestedQuestions([]);
336
334
  setMessages((prev) => {
337
- return [...prev, {
338
- id: (0, import_uuid.v4)(),
339
- role: "user",
340
- text
341
- }];
335
+ let temp = [...prev];
336
+ if (text.trim()) {
337
+ temp.push({
338
+ id: (0, import_uuid.v4)(),
339
+ role: "user",
340
+ text
341
+ });
342
+ }
343
+ if (files.length > 0) {
344
+ temp.push({
345
+ id: (0, import_uuid.v4)(),
346
+ role: "user",
347
+ fileData: files.map((file) => {
348
+ var _a, _b;
349
+ return {
350
+ displayName: file.name,
351
+ mimeType: (_a = file.response) == null ? void 0 : _a.mimeType,
352
+ fileUri: (_b = file.response) == null ? void 0 : _b.fileUrl
353
+ };
354
+ })
355
+ });
356
+ }
357
+ if (functionResponse) {
358
+ temp.push({
359
+ id: (0, import_uuid.v4)(),
360
+ role: "user",
361
+ functionResponse
362
+ });
363
+ }
364
+ return temp;
342
365
  });
343
366
  await sendMessageRequest({
344
367
  stream: true,
345
368
  sessionId: currentSessionId,
346
369
  content: {
347
370
  role: "user",
348
- parts: [{
349
- text
350
- }]
351
- }
371
+ parts: functionResponse ? [{ functionResponse }] : [{ text }]
372
+ },
373
+ files: files.map((file) => {
374
+ var _a, _b, _c, _d, _e;
375
+ return {
376
+ fileName: (_a = file.response) == null ? void 0 : _a.fileName,
377
+ fileId: (_b = file.response) == null ? void 0 : _b.fileId,
378
+ tempUrl: (_c = file.response) == null ? void 0 : _c.fileUrl,
379
+ type: (_d = file.response) == null ? void 0 : _d.fileType,
380
+ mimeType: (_e = file.response) == null ? void 0 : _e.mimeType
381
+ };
382
+ })
352
383
  });
353
384
  initAppConversations();
354
385
  };
386
+ const reChat = () => {
387
+ if (loading)
388
+ return;
389
+ if (messages.length === 0)
390
+ return;
391
+ setMessages((prev) => {
392
+ const newMessages = [...prev];
393
+ const lastAIIndex = newMessages.findLastIndex((msg) => msg.role === "bot");
394
+ if (lastAIIndex !== -1) {
395
+ newMessages.splice(lastAIIndex, 1);
396
+ }
397
+ setSuggestedQuestions([]);
398
+ const lastUserMessage = newMessages.findLast((msg) => msg.role === "user");
399
+ if (lastUserMessage) {
400
+ const { text = "", fileData = [] } = lastUserMessage;
401
+ sendMessageRequest({
402
+ stream: true,
403
+ sessionId: currentSessionId,
404
+ content: {
405
+ role: "user",
406
+ parts: [{
407
+ text
408
+ }]
409
+ },
410
+ files: fileData == null ? void 0 : fileData.map((file) => ({
411
+ fileName: file.displayName,
412
+ tempUrl: file.fileUri,
413
+ mimeType: file.mimeType
414
+ }))
415
+ });
416
+ }
417
+ return newMessages;
418
+ });
419
+ };
420
+ const confirmFnCall = (fnCall, confirmed) => {
421
+ const functionResponse = {
422
+ id: fnCall.id,
423
+ name: fnCall.name,
424
+ response: { confirmed }
425
+ };
426
+ startChat({ functionResponse });
427
+ };
355
428
  const suggestChat = (text) => {
356
429
  if (loading)
357
430
  return;
358
431
  if (!text.trim())
359
432
  return;
360
433
  setSuggestedQuestions([]);
361
- startChat(text);
434
+ startChat({ text });
362
435
  };
363
436
  const stopChat = (0, import_react.useCallback)(() => {
364
437
  var _a;
@@ -367,12 +440,13 @@ function useADKChat({
367
440
  textMsgRef.current = null;
368
441
  }, [ctrl]);
369
442
  const clearChat = () => {
370
- var _a;
443
+ var _a, _b;
371
444
  const newSessionId = (0, import_uuid.v4)();
372
445
  setCurrentSessionId(newSessionId);
373
446
  stopChat();
447
+ setPrologue(((_a = appInfo == null ? void 0 : appInfo.onboardingInfo) == null ? void 0 : _a.prologue) || "");
374
448
  setMessages([]);
375
- setSuggestedQuestions(((_a = appInfo == null ? void 0 : appInfo.onboardingInfo) == null ? void 0 : _a.suggested_questions) || []);
449
+ setSuggestedQuestions(((_b = appInfo == null ? void 0 : appInfo.onboardingInfo) == null ? void 0 : _b.suggested_questions) || []);
376
450
  };
377
451
  const formatMessages = (messages2, isReplace = false) => {
378
452
  const mapped = [];
@@ -473,7 +547,7 @@ function useADKChat({
473
547
  return {
474
548
  key: item.sessionId,
475
549
  label: item.title || "新对话",
476
- timestamp: new Date(item.sessionTime).getTime(),
550
+ timestamp: new Date(item.startTime).getTime(),
477
551
  messages: [],
478
552
  meta: {
479
553
  ...item
@@ -484,17 +558,16 @@ function useADKChat({
484
558
  setSessionPagination({ pageNum: sessionPagination.pageNum, pageSize: sessionPagination.pageSize, total: (pagination == null ? void 0 : pagination.total) || 0 });
485
559
  const { sessionId } = data == null ? void 0 : data[0];
486
560
  fetchDetail && setCurrentSessionDetail(sessionId);
561
+ if (!initialized) {
562
+ onSuccess == null ? void 0 : onSuccess({
563
+ code: import_types.SuccessCode.APP_MESSAGES_INIT_SUCCESS,
564
+ message: "初始化聊天记录成功"
565
+ });
566
+ setInitialized(true);
567
+ }
487
568
  } else {
488
- setSessionList([]);
489
- setCurrentSessionId((0, import_uuid.v4)());
490
- setPrologue("");
491
- setSuggestedQuestions([]);
569
+ clearChat();
492
570
  }
493
- onSuccess == null ? void 0 : onSuccess({
494
- code: import_types.SuccessCode.APP_MESSAGES_INIT_SUCCESS,
495
- message: "初始化聊天记录成功"
496
- });
497
- setInitialized(true);
498
571
  } else {
499
572
  setSessionList([]);
500
573
  setCurrentSessionId((0, import_uuid.v4)());
@@ -516,7 +589,7 @@ function useADKChat({
516
589
  token
517
590
  });
518
591
  if ((result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE) {
519
- initAppConversations(false);
592
+ initAppConversations();
520
593
  if (sessionId === currentSessionId) {
521
594
  clearChat();
522
595
  }
@@ -533,7 +606,7 @@ function useADKChat({
533
606
  token
534
607
  });
535
608
  if ((result == null ? void 0 : result.code) === import_constants.API_SUCCESS_CODE) {
536
- initAppConversations(false);
609
+ initAppConversations();
537
610
  }
538
611
  };
539
612
  const initConfig = async () => {
@@ -574,9 +647,11 @@ function useADKChat({
574
647
  return {
575
648
  appInfo,
576
649
  startChat,
650
+ reChat,
577
651
  stopChat,
578
652
  clearChat,
579
653
  suggestChat,
654
+ confirmFnCall,
580
655
  initialized,
581
656
  currentSessionId,
582
657
  sessionList,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useADKChat.ts"],
4
- "sourcesContent": ["import { useEffect, useCallback, useMemo, useRef, useState } from 'react';\nimport { fetchEventSource, EventStreamContentType } from '@microsoft/fetch-event-source';\nimport { message } from 'antd';\nimport { v4 } from 'uuid';\nimport type { AgentRunRequest, Event, FunctionResponse, IMessage, Part } from '@/types';\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from '@/constants';\nimport { type Error, ErrorCode, type SendContent, type Success, SuccessCode, type SessionData } from '@/types';\nimport { fetchAppConfig, fetchSessionList, fetchSessionDetail, closeSession, updateSessionTitle, type ChatConfig } from '@/services/api';\nimport { safeJsonParse } from '@/utils';\n\nexport interface DebugOptions {\n url: string\n sessionId?: string;\n config: any;\n token: string;\n type?: 'agentDebug' | 'appDebug';\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onMessage?: (content: string, data: IMessage) => void;\n}\n\nconst combineTextParts = (parts: Part[]) => {\n const result: Part[] = [];\n let combinedTextPart: Part|undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const part of parts) {\n if (part.text) {\n // 如果没有 combined 或 combined 思考类型跟当前 part 不同,则创建新的合并引用\n if (!combinedTextPart || combinedTextPart.thought !== part.thought) {\n combinedTextPart = { ...part };\n result.push(combinedTextPart);\n } else {\n combinedTextPart.text += part.text;\n }\n } else {\n combinedTextPart = undefined;\n result.push(part);\n }\n }\n return result;\n};\n\nfunction useADKChat({\n url,\n token,\n config = {},\n type = 'agentDebug',\n onError,\n onMessage,\n onSuccess,\n}: DebugOptions) {\n const [loading, setLoading] = useState(false);\n const ctrl = useRef<AbortController | null>(null);\n // 应用配置\n const { appNo } = config || {};\n // 智能体信息\n const [appInfo, setAppInfo] = useState<ChatConfig>({\n appNo,\n appVersionNo: '',\n appTheme: '',\n appName: '',\n onboardingInfo: {\n prologue: '',\n questionFiles: [],\n suggested_questions: [],\n },\n });\n // 初始化完成\n const [initialized, setInitialized] = useState(false);\n // 会话记录\n const [sessionList, setSessionList] = useState<SessionData[]>([]);\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>('');\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({ total: 0, pageNum: 1, pageSize: SESSION_PAGE_SIZE });\n // 开场白\n const [prologue, setPrologue] = useState<string>('');\n // 建议问题\n const [suggestedQuestions, setSuggestedQuestions] = useState<string[]>([]);\n const [messages, setMessages] = useState<IMessage[]>([]);\n const mergedMessages = useMemo(() => {\n const fnResMap: Record<string, FunctionResponse> = {};\n messages.forEach((msg) => {\n if (msg.functionResponse) {\n fnResMap[msg?.functionResponse?.id || ''] = msg.functionResponse;\n }\n });\n return messages.map((msg) => {\n if (msg.functionCall) {\n return {\n ...msg,\n functionResponse: fnResMap[msg?.functionCall?.id || ''],\n };\n }\n return msg;\n });\n }, [messages]);\n const textMsgRef = useRef<IMessage>(null);\n const eventDataRef = useRef<Map<string, any>>(new Map());\n\n // 插入消息\n const insertMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage?.isLoading) {\n return [...prev.slice(0, -1), msg, lastMessage];\n }\n return [...prev, msg];\n });\n }, []);\n\n // 初始化开场白预设置问题\n const insertSuggestedQuestions = (suggested_questions: string[] = []) => {\n if (!suggested_questions?.length) return;\n // 无消息内容 且 有建议问题时\n if (messages.length === 0 && suggested_questions.length) {\n setSuggestedQuestions(suggested_questions);\n };\n };\n\n // 初始化开场白\n const insertPrologue = (prologue: string) => {\n if (prologue) {\n setPrologue(prologue);\n }\n };\n\n // 更新消息\n const updateMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n return prev.map((m) => {\n if (m.id === msg.id) {\n return msg;\n }\n return m;\n });\n });\n }, []);\n\n // 存储事件\n const storeEvents = useCallback((part: Part | null, event: any) => {\n let title = '';\n\n if (part == null && event.actions?.artifactDelta) {\n title += 'eventAction: artifact';\n } else if (part) {\n if (part.text) {\n title += `text:${part.text}`;\n } else if (part.functionCall) {\n title += `functionCall:${part.functionCall.name}`;\n } else if (part.functionResponse) {\n title += `functionResponse:${part.functionResponse.name}`;\n } else if (part.executableCode) {\n title += `executableCode:${part.executableCode.code?.slice(0, 10)}`;\n } else if (part.codeExecutionResult) {\n title += `codeExecutionResult:${part.codeExecutionResult.outcome}`;\n } else if (part.errorMessage) {\n title += `errorMessage:${part.errorMessage}`;\n }\n }\n\n const updatedEvent = { ...event, title };\n\n const newEventData = new Map(eventDataRef.current);\n newEventData.set(event.id, updatedEvent);\n eventDataRef.current = newEventData;\n }, []);\n\n // 存储消息\n const storeMessage = useCallback((\n part: Part | null,\n event: Event,\n role: 'user' | 'bot',\n ) => {\n const msg: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n role,\n };\n\n if (part) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n };\n } else if (part.text) {\n msg.text = part.text;\n msg.thought = part.thought;\n\n if (event?.groundingMetadata?.searchEntryPoint?.renderedContent) {\n msg.renderedContent = event.groundingMetadata.searchEntryPoint.renderedContent;\n }\n } else if (part.functionCall) {\n msg.functionCall = part.functionCall;\n } else if (part.functionResponse) {\n msg.functionResponse = part.functionResponse;\n } else if (part.executableCode) {\n msg.executableCode = part.executableCode;\n } else if (part.codeExecutionResult) {\n msg.codeExecutionResult = part.codeExecutionResult;\n }\n }\n\n if (part && Object.keys(part).length > 0) {\n insertMessage(msg);\n }\n }, [insertMessage]);\n\n // 处理消息部分(关键更新)\n const processPart = useCallback((event: Event, part: Part) => {\n const renderedContent = event.groundingMetadata?.searchEntryPoint?.renderedContent;\n if (part.text) {\n const newChunk = part.text;\n\n if (!textMsgRef.current || textMsgRef.current.thought !== part.thought) {\n const newMessage: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n role: 'bot',\n text: newChunk,\n thought: part.thought,\n };\n\n if (renderedContent) {\n newMessage.renderedContent = renderedContent;\n }\n\n textMsgRef.current = newMessage;\n // 存储原数据\n storeEvents(part, event);\n // 插入消息\n insertMessage(newMessage);\n } else {\n if (event.partial === false) {\n storeEvents(part, event);\n textMsgRef.current = null;\n return;\n }\n if (renderedContent) {\n textMsgRef.current = {\n ...textMsgRef.current,\n renderedContent,\n };\n }\n textMsgRef.current = {\n ...textMsgRef.current,\n text: (textMsgRef.current.text || '') + newChunk,\n };\n updateMessage(textMsgRef.current);\n }\n } else {\n textMsgRef.current = null;\n storeEvents(part, event);\n storeMessage(\n part,\n event,\n 'bot',\n );\n }\n }, [storeEvents, storeMessage, insertMessage, updateMessage]);\n\n // 处理建议类消息\n const processFollowupPart = useCallback((event: Event) => {\n // 获取建议类消息的文本内容\n const part = event?.content?.parts?.[0] || null;\n const text = part?.text || '';\n storeEvents(part, event);\n if (text) {\n setSuggestedQuestions((prev) => [...prev, text]);\n }\n }, [storeEvents, insertMessage]);\n\n // 处理错误消息\n const processErrorMessage = useCallback((chunkJson: any) => {\n storeEvents(null, chunkJson);\n insertMessage({\n id: v4(),\n text: chunkJson.errorMessage,\n role: 'bot',\n });\n }, [storeEvents, insertMessage]);\n\n // 处理动作和制品\n const processActionArtifact = useCallback((event: any) => {\n if (event.actions && event.actions.artifactDelta) {\n storeEvents(null, event);\n storeMessage(null, event, 'bot');\n }\n }, [storeEvents, storeMessage]);\n\n // 发送消息请求\n const sendMessageRequest = useCallback((values: AgentRunRequest) => {\n return new Promise<void>((resolve) => {\n if (ctrl.current) {\n ctrl.current.abort();\n }\n setLoading(true);\n ctrl.current = new AbortController();\n const requestUrl = `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`;\n\n fetchEventSource(requestUrl, {\n method: 'POST',\n signal: ctrl.current.signal,\n body: JSON.stringify(values),\n openWhenHidden: true,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'no-cache',\n stream: 'true',\n Authorization: `Bearer ${token}`,\n },\n async onopen(response) {\n if (response.ok && response.headers.get('content-type') === EventStreamContentType) {\n // everything's good\n } else if (response.status >= 400 && response.status < 500 && response.status !== 429) {\n resolve();\n } else {\n resolve();\n }\n },\n onmessage: (event) => {\n const chunkJson: Event = safeJsonParse(event.data, {});\n if (chunkJson.error) {\n message.warning(chunkJson.error);\n return;\n }\n if (chunkJson.content) {\n // 建议类消息单独处理 \n if (chunkJson.content.role === 'followup') {\n processFollowupPart(chunkJson);\n return;\n }\n // eslint-disable-next-line no-restricted-syntax\n for (const part of combineTextParts(chunkJson.content.parts)) {\n processPart(chunkJson, part);\n }\n } else if (chunkJson.errorMessage) {\n processErrorMessage(chunkJson);\n } else if (chunkJson.actions) {\n processActionArtifact(chunkJson);\n }\n },\n onclose: () => {\n setLoading(false);\n textMsgRef.current = null;\n resolve();\n },\n onerror: (error) => {\n setLoading(false);\n resolve();\n console.error('EventSource failed:', error);\n throw error;\n },\n });\n });\n }, [type, currentSessionId, processActionArtifact, processErrorMessage, processPart]);\n\n // 发送会话\n const startChat = async (text: string) => {\n if (loading) return;\n if (!text.trim()) return;\n // 清空建议问题\n setSuggestedQuestions([]);\n // 发送消息\n setMessages((prev) => {\n return [...prev, {\n id: v4(),\n role: 'user',\n text,\n }];\n });\n await sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: 'user',\n parts: [{\n text,\n }],\n },\n });\n // 获取聊天记录\n initAppConversations();\n };\n // 使用建议问题\n const suggestChat = (text: string) => {\n if (loading) return;\n if (!text.trim()) return;\n setSuggestedQuestions([]);\n startChat(text);\n };\n // 停止会话\n const stopChat = useCallback(() => {\n ctrl.current?.abort();\n setLoading(false);\n textMsgRef.current = null;\n }, [ctrl]);\n\n // 清除会话\n const clearChat = () => {\n const newSessionId = v4();\n setCurrentSessionId(newSessionId);\n // 重置聊天内容\n stopChat();\n setMessages([]);\n setSuggestedQuestions(appInfo?.onboardingInfo?.suggested_questions || []);\n };\n\n // 格式化会话记录\n const formatMessages = (messages: any[], isReplace = false) => {\n const mapped: IMessage[] = [];\n\n messages.forEach((item) => {\n if (!item || !item.content || !Array.isArray(item.content.parts)) return;\n\n const role = (item.content.role || '').toLowerCase() === 'user' ? 'user' : 'bot';\n const parts = Array.isArray(item.content.parts)\n ? item.content.parts.filter((p: any) => {\n if (!p) return false;\n return Boolean(\n p.text || p.inlineData || p.functionCall || p.functionResponse || p.fileData || p.executableCode || p.codeExecutionResult || p.errorMessage\n );\n })\n : [];\n\n if (parts.length === 0) return;\n\n parts.forEach((part: any) => {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n role,\n raw: item,\n } as IMessage;\n\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n } as any;\n }\n if (part.text) {\n msg.text = part.text;\n if (typeof part.thought !== 'undefined') msg.thought = part.thought;\n }\n if (part.functionCall) msg.functionCall = part.functionCall;\n if (part.functionResponse) msg.functionResponse = part.functionResponse;\n if (part.fileData) {\n msg.inlineData = {\n displayName: part.fileData.displayName || '',\n data: part.fileData.fileUri,\n mimeType: part.fileData.mimeType,\n } as any;\n }\n if (part.executableCode) msg.executableCode = part.executableCode;\n if (part.codeExecutionResult) msg.codeExecutionResult = part.codeExecutionResult;\n if (part.errorMessage) msg.text = part.errorMessage;\n\n mapped.push(msg);\n });\n });\n\n setMessages((prev) => (isReplace ? mapped : [...prev, ...mapped]));\n };\n\n\n // 设置当前会话详情\n const setCurrentSessionDetail = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n setPrologue(appInfo?.onboardingInfo?.prologue || '');\n // 新接口直接返回按 event/item 结构的数组,传入 formatMessages 处理\n if (Array.isArray(data) && data.length > 0) {\n formatMessages(data, true);\n } else {\n setSuggestedQuestions(appInfo?.onboardingInfo?.suggested_questions || []);\n }\n }\n\n \n } else {\n // 兼容 无 session异常\n setCurrentSessionId(v4());\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n setLoading(true);\n\n const { data = [], pagination, result } = await fetchSessionList({\n url,\n appNo,\n token,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || '新对话',\n timestamp: new Date(item.sessionTime).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({ pageNum: sessionPagination.pageNum, pageSize: sessionPagination.pageSize, total: pagination?.total || 0 });\n const { sessionId } = data?.[0];\n fetchDetail && setCurrentSessionDetail(sessionId);\n } else {\n // 页面报错 初始化\n setSessionList([]);\n setCurrentSessionId(v4());\n setPrologue('');\n setSuggestedQuestions([]);\n }\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: '初始化聊天记录成功',\n });\n setInitialized(true);\n } else {\n setSessionList([]);\n setCurrentSessionId(v4());\n setPrologue('');\n setSuggestedQuestions([]);\n }\n } catch {\n //\n } finally {\n setLoading(false);\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations(false);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n clearChat();\n }\n }\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations(false);\n }\n };\n\n // 初始化应用\n const initConfig = async () => {\n try {\n setLoading(true);\n const { data, result } = await fetchAppConfig({ url, appNo });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: '初始化配置成功',\n });\n } else {\n onError?.({\n code: (result.code as ErrorCode) || ErrorCode.APP_NOT_FOUND,\n message: result.message || '获取应用配置失败',\n });\n }\n } catch (error) {\n onError?.({\n code: ErrorCode.API_ERROR,\n message: '获取应用配置失败',\n });\n } finally {\n setLoading(false);\n }\n };\n\n // 初始化—获取配置\n useEffect(() => {\n if (url && appNo) {\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url, appNo]);\n\n // 初始化-聊天记录\n useEffect(() => {\n if (appInfo) {\n initAppConversations(true);\n }\n }, [appInfo]);\n\n return {\n appInfo,\n startChat,\n stopChat,\n clearChat,\n suggestChat,\n initialized,\n currentSessionId,\n sessionList,\n prologue,\n suggestions: suggestedQuestions,\n loading,\n messages: mergedMessages,\n insertSuggestedQuestions,\n insertPrologue,\n deleteSession,\n updateSession,\n setSuggestedQuestions,\n setCurrentSessionDetail,\n setMessages,\n storeEvents,\n storeMessage,\n };\n}\n\nexport default useADKChat;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useEffect, useCallback, useMemo, useRef, useState } from 'react';\nimport { fetchEventSource, EventStreamContentType } from '@microsoft/fetch-event-source';\nimport { message } from 'antd';\nimport { v4 } from 'uuid';\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from '@/constants';\nimport {\n SuccessCode,\n ErrorCode,\n DebugOptions,\n FunctionCall,\n SendContent,\n SessionData,\n AgentRunRequest,\n Event,\n FunctionResponse,\n IMessage,\n Part,\n} from '@/types';\nimport {\n fetchAppConfig,\n fetchSessionList,\n fetchSessionDetail,\n closeSession,\n updateSessionTitle,\n type ChatConfig\n} from '@/services/api';\nimport { safeJsonParse } from '@/utils';\n\nconst combineTextParts = (parts: Part[]) => {\n const result: Part[] = [];\n let combinedTextPart: Part|undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const part of parts) {\n if (part.text) {\n // 如果没有 combined 或 combined 思考类型跟当前 part 不同,则创建新的合并引用\n if (!combinedTextPart || combinedTextPart.thought !== part.thought) {\n combinedTextPart = { ...part };\n result.push(combinedTextPart);\n } else {\n combinedTextPart.text += part.text;\n }\n } else {\n combinedTextPart = undefined;\n result.push(part);\n }\n }\n return result;\n};\n\nfunction useADKChat({\n url,\n token,\n config = {},\n type = 'agentDebug',\n onError,\n onMessage,\n onSuccess,\n onStream,\n}: DebugOptions) {\n const [loading, setLoading] = useState(false);\n const ctrl = useRef<AbortController | null>(null);\n // 应用配置\n const { appNo } = config || {};\n // 智能体信息\n // const [appInfo, setAppInfo] = useState<ChatConfig>({\n // appNo,\n // appVersionNo: '',\n // appTheme: '',\n // appName: '',\n // onboardingInfo: {\n // prologue: '',\n // questionFiles: [],\n // suggested_questions: [],\n // },\n // });\n const [appInfo, setAppInfo] = useState<ChatConfig | null>(null);\n // 初始化完成\n const [initialized, setInitialized] = useState(false);\n // 会话记录\n const [sessionList, setSessionList] = useState<SessionData[]>([]);\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>('');\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({ total: 0, pageNum: 1, pageSize: SESSION_PAGE_SIZE });\n // 开场白\n const [prologue, setPrologue] = useState<string>('');\n // 建议问题\n const [suggestedQuestions, setSuggestedQuestions] = useState<string[]>([]);\n const [messages, setMessages] = useState<IMessage[]>([]);\n const mergedMessages = useMemo(() => {\n const fnResMap: Record<string, FunctionResponse> = {};\n messages.forEach((msg) => {\n if (msg.functionResponse) {\n fnResMap[msg?.functionResponse?.id || ''] = msg.functionResponse;\n }\n });\n return messages.map((msg) => {\n if (msg.functionCall) {\n return {\n ...msg,\n functionResponse: fnResMap[msg?.functionCall?.id || ''],\n };\n }\n return msg;\n });\n }, [messages]);\n const textMsgRef = useRef<IMessage>(null);\n const eventDataRef = useRef<Map<string, any>>(new Map());\n\n // 插入消息\n const insertMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage?.isLoading) {\n return [...prev.slice(0, -1), msg, lastMessage];\n }\n return [...prev, msg];\n });\n }, []);\n\n // 初始化开场白预设置问题\n const insertSuggestedQuestions = (suggested_questions: string[] = []) => {\n if (!suggested_questions?.length) return;\n // 无消息内容 且 有建议问题时\n if (messages.length === 0 && suggested_questions.length) {\n setSuggestedQuestions(suggested_questions);\n };\n };\n\n // 初始化开场白\n const insertPrologue = (prologue: string) => {\n if (prologue) {\n setPrologue(prologue);\n }\n };\n\n // 更新消息\n const updateMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n return prev.map((m) => {\n if (m.id === msg.id) {\n return msg;\n }\n return m;\n });\n });\n }, []);\n\n // 存储事件\n const storeEvents = useCallback((part: Part | null, event: any) => {\n let title = '';\n\n if (part == null && event.actions?.artifactDelta) {\n title += 'eventAction: artifact';\n } else if (part) {\n if (part.text) {\n title += `text:${part.text}`;\n } else if (part.functionCall) {\n title += `functionCall:${part.functionCall.name}`;\n } else if (part.functionResponse) {\n title += `functionResponse:${part.functionResponse.name}`;\n } else if (part.executableCode) {\n title += `executableCode:${part.executableCode.code?.slice(0, 10)}`;\n } else if (part.codeExecutionResult) {\n title += `codeExecutionResult:${part.codeExecutionResult.outcome}`;\n } else if (part.errorMessage) {\n title += `errorMessage:${part.errorMessage}`;\n }\n }\n\n const updatedEvent = { ...event, title };\n\n const newEventData = new Map(eventDataRef.current);\n newEventData.set(event.id, updatedEvent);\n eventDataRef.current = newEventData;\n }, []);\n\n // 存储消息\n const storeMessage = useCallback((\n part: Part | null,\n event: Event,\n role: 'user' | 'bot',\n ) => {\n const msg: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n role,\n };\n\n if (part) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n };\n } else if (part.text) {\n msg.text = part.text;\n msg.thought = part.thought;\n\n if (event?.groundingMetadata?.searchEntryPoint?.renderedContent) {\n msg.renderedContent = event.groundingMetadata.searchEntryPoint.renderedContent;\n }\n } else if (part.fileData) {\n msg.fileData = [part.fileData];\n } else if (part.functionCall) {\n msg.functionCall = part.functionCall;\n } else if (part.functionResponse) {\n msg.functionResponse = part.functionResponse;\n } else if (part.executableCode) {\n msg.executableCode = part.executableCode;\n } else if (part.codeExecutionResult) {\n msg.codeExecutionResult = part.codeExecutionResult;\n }\n }\n\n if (part && Object.keys(part).length > 0) {\n insertMessage(msg);\n }\n }, [insertMessage]);\n\n // 处理消息部分(关键更新)\n const processPart = useCallback((event: Event, part: Part) => {\n const renderedContent = event.groundingMetadata?.searchEntryPoint?.renderedContent;\n if (part.text) {\n const newChunk = part.text;\n\n if (!textMsgRef.current || textMsgRef.current.thought !== part.thought) {\n const newMessage: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n role: 'bot',\n text: newChunk,\n thought: part.thought,\n };\n\n if (renderedContent) {\n newMessage.renderedContent = renderedContent;\n }\n\n textMsgRef.current = newMessage;\n // 存储原数据\n storeEvents(part, event);\n // 插入消息\n insertMessage(newMessage);\n } else {\n if (event.partial === false) {\n storeEvents(part, event);\n textMsgRef.current = null;\n return;\n }\n if (renderedContent) {\n textMsgRef.current = {\n ...textMsgRef.current,\n renderedContent,\n };\n }\n textMsgRef.current = {\n ...textMsgRef.current,\n text: (textMsgRef.current.text || '') + newChunk,\n };\n updateMessage(textMsgRef.current);\n }\n } else {\n textMsgRef.current = null;\n storeEvents(part, event);\n storeMessage(\n part,\n event,\n 'bot',\n );\n }\n }, [storeEvents, storeMessage, insertMessage, updateMessage]);\n\n // 处理建议类消息\n const processFollowupPart = useCallback((event: Event) => {\n // 获取建议类消息的文本内容\n const part = event?.content?.parts?.[0] || null;\n const text = part?.text || '';\n storeEvents(part, event);\n if (text) {\n setSuggestedQuestions((prev) => [...prev, text]);\n }\n }, [storeEvents, insertMessage]);\n\n // 处理错误消息\n const processErrorMessage = useCallback((chunkJson: any) => {\n storeEvents(null, chunkJson);\n insertMessage({\n id: v4(),\n text: chunkJson.errorMessage,\n role: 'bot',\n });\n }, [storeEvents, insertMessage]);\n\n // 处理动作和制品\n const processActionArtifact = useCallback((event: any) => {\n if (event.actions && event.actions.artifactDelta) {\n storeEvents(null, event);\n storeMessage(null, event, 'bot');\n }\n }, [storeEvents, storeMessage]);\n\n // 发送消息请求\n const sendMessageRequest = useCallback((values: AgentRunRequest) => {\n return new Promise<void>((resolve) => {\n if (ctrl.current) {\n ctrl.current.abort();\n }\n setLoading(true);\n ctrl.current = new AbortController();\n const requestUrl = `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`;\n\n fetchEventSource(requestUrl, {\n method: 'POST',\n signal: ctrl.current.signal,\n body: JSON.stringify(values),\n openWhenHidden: true,\n headers: {\n 'Content-Type': 'application/json',\n 'Cache-Control': 'no-cache',\n stream: 'true',\n Authorization: `Bearer ${token}`,\n },\n async onopen(response) {\n if (response.ok && response.headers.get('content-type') === EventStreamContentType) {\n // everything's good\n } else if (response.status >= 400 && response.status < 500 && response.status !== 429) {\n resolve();\n } else {\n resolve();\n }\n },\n onmessage: (event) => {\n const chunkJson: Event = safeJsonParse(event.data, {});\n if (chunkJson.error) {\n message.warning(chunkJson.error);\n return;\n }\n onStream?.(chunkJson);\n if (chunkJson.content) {\n // 建议类消息单独处理 \n if (chunkJson.content.role === 'followup') {\n processFollowupPart(chunkJson);\n return;\n }\n // eslint-disable-next-line no-restricted-syntax\n for (const part of combineTextParts(chunkJson.content.parts)) {\n processPart(chunkJson, part);\n }\n } else if (chunkJson.errorMessage) {\n processErrorMessage(chunkJson);\n } else if (chunkJson.actions) {\n processActionArtifact(chunkJson);\n }\n },\n onclose: () => {\n setLoading(false);\n if (textMsgRef.current) {\n onMessage?.(textMsgRef.current?.text || '', textMsgRef.current);\n }\n textMsgRef.current = null;\n resolve();\n },\n onerror: (error) => {\n setLoading(false);\n resolve();\n console.error('EventSource failed:', error);\n throw error;\n },\n });\n });\n }, [type, currentSessionId, processActionArtifact, processErrorMessage, processPart]);\n\n // 发送会话\n const startChat = async ({ text = '', files = [], functionResponse }: SendContent) => {\n if (loading) return;\n if (!text.trim() && !functionResponse) return;\n // 清空建议问题\n setSuggestedQuestions([]);\n // 发送消息\n setMessages((prev) => {\n let temp = [...prev];\n // 如果 text 存在\n if (text.trim()) {\n temp.push({\n id: v4(),\n role: 'user',\n text,\n });\n }\n // 如果file 存在\n if (files.length > 0) {\n temp.push({\n id: v4(),\n role: 'user',\n fileData: files.map(file => ({\n displayName: file.name,\n mimeType: file.response?.mimeType,\n fileUri: file.response?.fileUrl,\n })),\n });\n }\n // 如果 functionResponse 存在\n if (functionResponse) {\n temp.push({\n id: v4(),\n role: 'user',\n functionResponse,\n });\n }\n return temp;\n });\n await sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: 'user',\n parts: functionResponse ? [{ functionResponse }] : [{ text }],\n },\n files: files.map(file => ({\n fileName: file.response?.fileName,\n fileId: file.response?.fileId,\n tempUrl: file.response?.fileUrl,\n type: file.response?.fileType,\n mimeType: file.response?.mimeType,\n })),\n });\n // 获取聊天记录\n initAppConversations();\n };\n\n // 重新发送会话\n const reChat = () => {\n if (loading) return;\n if (messages.length === 0) return;\n setMessages((prev) => {\n const newMessages = [...prev];\n // 删除最后一条 AI 消息\n const lastAIIndex = newMessages.findLastIndex(msg => msg.role === 'bot');\n if (lastAIIndex !== -1) {\n newMessages.splice(lastAIIndex, 1);\n }\n // 清空建议问题\n setSuggestedQuestions([]);\n // 重新发送最后一条用户消息\n const lastUserMessage = newMessages.findLast(msg => msg.role === 'user');\n if (lastUserMessage) {\n const { text = '', fileData = [] } = lastUserMessage;\n sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: 'user',\n parts: [{\n text,\n }],\n },\n files: fileData?.map(file => ({\n fileName: file.displayName,\n tempUrl: file.fileUri,\n mimeType: file.mimeType,\n })),\n });\n }\n\n return newMessages;\n })\n };\n\n // 确认函数调用\n const confirmFnCall = (fnCall: FunctionCall, confirmed: boolean) => {\n const functionResponse = {\n id: fnCall.id,\n name: fnCall.name,\n response: { confirmed },\n };\n startChat({ functionResponse });\n };\n\n // 使用建议问题\n const suggestChat = (text: string) => {\n if (loading) return;\n if (!text.trim()) return;\n setSuggestedQuestions([]);\n startChat({ text });\n };\n // 停止会话\n const stopChat = useCallback(() => {\n ctrl.current?.abort();\n setLoading(false);\n textMsgRef.current = null;\n }, [ctrl]);\n\n // 清除/重置会话\n const clearChat = () => {\n const newSessionId = v4();\n setCurrentSessionId(newSessionId);\n // 重置聊天内容\n stopChat();\n setPrologue(appInfo?.onboardingInfo?.prologue || '');\n setMessages([]);\n setSuggestedQuestions(appInfo?.onboardingInfo?.suggested_questions || []);\n };\n\n // 格式化会话记录\n const formatMessages = (messages: any[], isReplace = false) => {\n const mapped: IMessage[] = [];\n\n messages.forEach((item) => {\n if (!item || !item.content || !Array.isArray(item.content.parts)) return;\n\n const role = (item.content.role || '').toLowerCase() === 'user' ? 'user' : 'bot';\n const parts = Array.isArray(item.content.parts)\n ? item.content.parts.filter((p: any) => {\n if (!p) return false;\n return Boolean(\n p.text || p.inlineData || p.functionCall || p.functionResponse || p.fileData || p.executableCode || p.codeExecutionResult || p.errorMessage\n );\n })\n : [];\n\n if (parts.length === 0) return;\n\n parts.forEach((part: any) => {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n role,\n raw: item,\n } as IMessage;\n\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n } as any;\n }\n if (part.text) {\n msg.text = part.text;\n if (typeof part.thought !== 'undefined') msg.thought = part.thought;\n }\n if (part.functionCall) msg.functionCall = part.functionCall;\n if (part.functionResponse) msg.functionResponse = part.functionResponse;\n if (part.fileData) {\n msg.inlineData = {\n displayName: part.fileData.displayName || '',\n data: part.fileData.fileUri,\n mimeType: part.fileData.mimeType,\n } as any;\n }\n if (part.executableCode) msg.executableCode = part.executableCode;\n if (part.codeExecutionResult) msg.codeExecutionResult = part.codeExecutionResult;\n if (part.errorMessage) msg.text = part.errorMessage;\n\n mapped.push(msg);\n });\n });\n\n setMessages((prev) => (isReplace ? mapped : [...prev, ...mapped]));\n };\n\n\n // 设置当前会话详情\n const setCurrentSessionDetail = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n setPrologue(appInfo?.onboardingInfo?.prologue || '');\n // 新接口直接返回按 event/item 结构的数组,传入 formatMessages 处理\n if (Array.isArray(data) && data.length > 0) {\n formatMessages(data, true);\n } else {\n setSuggestedQuestions(appInfo?.onboardingInfo?.suggested_questions || []);\n }\n }\n\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(v4());\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n setLoading(true);\n\n const { data = [], pagination, result } = await fetchSessionList({\n url,\n appNo,\n token,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || '新对话',\n timestamp: new Date(item.startTime).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({ pageNum: sessionPagination.pageNum, pageSize: sessionPagination.pageSize, total: pagination?.total || 0 });\n const { sessionId } = data?.[0];\n fetchDetail && setCurrentSessionDetail(sessionId);\n // 成功回调\n if (!initialized) {\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: '初始化聊天记录成功',\n });\n setInitialized(true);\n }\n } else {\n // 无会话记录时,初始化会话详情\n clearChat();\n }\n } else {\n setSessionList([]);\n setCurrentSessionId(v4());\n setPrologue('');\n setSuggestedQuestions([]);\n }\n } catch {\n //\n } finally {\n setLoading(false);\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations();\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n clearChat();\n }\n }\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations();\n }\n };\n\n // 初始化应用\n const initConfig = async () => {\n try {\n setLoading(true);\n const { data, result } = await fetchAppConfig({ url, appNo });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: '初始化配置成功',\n });\n } else {\n onError?.({\n code: (result.code as ErrorCode) || ErrorCode.APP_NOT_FOUND,\n message: result.message || '获取应用配置失败',\n });\n }\n } catch (error) {\n onError?.({\n code: ErrorCode.API_ERROR,\n message: '获取应用配置失败',\n });\n } finally {\n setLoading(false);\n }\n };\n\n // 初始化—获取配置\n useEffect(() => {\n if (url && appNo) {\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url, appNo]);\n\n // 初始化-聊天记录\n useEffect(() => {\n if (appInfo) {\n initAppConversations(true);\n }\n }, [appInfo]);\n\n return {\n appInfo,\n startChat,\n reChat,\n stopChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n initialized,\n currentSessionId,\n sessionList,\n prologue,\n suggestions: suggestedQuestions,\n loading,\n messages: mergedMessages,\n insertSuggestedQuestions,\n insertPrologue,\n deleteSession,\n updateSession,\n setSuggestedQuestions,\n setCurrentSessionDetail,\n setMessages,\n storeEvents,\n storeMessage,\n };\n}\n\nexport default useADKChat;\n"],
5
+ "mappings": "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",
6
6
  "names": ["prologue", "messages"]
7
7
  }
@@ -675,7 +675,7 @@ var useAgentGenerator = (params) => {
675
675
  return {
676
676
  key: item.sessionId,
677
677
  label: item.title || "新对话",
678
- timestamp: new Date(item.sessionTime).getTime(),
678
+ timestamp: new Date(item.startTime).getTime(),
679
679
  messages: [],
680
680
  meta: {
681
681
  ...item