@ai-group/chat-sdk 2.1.4 → 2.1.6

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 (32) hide show
  1. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js +2 -2
  2. package/dist/cjs/components/XAdkChatbot/components/FunctionCallRender/index.js.map +2 -2
  3. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js +4 -2
  4. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/index.js.map +2 -2
  5. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +38 -0
  6. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js +51 -0
  7. package/dist/cjs/components/XAdkChatbot/components/MarkdownRender/styles.js.map +7 -0
  8. package/dist/cjs/components/XAdkChatbot/index.js +8 -0
  9. package/dist/cjs/components/XAdkChatbot/index.js.map +2 -2
  10. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js +4 -4
  11. package/dist/cjs/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +1 -1
  12. package/dist/cjs/hooks/useADKChat.js +11 -11
  13. package/dist/cjs/hooks/useADKChat.js.map +2 -2
  14. package/dist/cjs/services/api.js +2 -1
  15. package/dist/cjs/services/api.js.map +2 -2
  16. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js +2 -2
  17. package/dist/esm/components/XAdkChatbot/components/FunctionCallRender/index.js.map +1 -1
  18. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js +24 -16
  19. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/index.js.map +1 -1
  20. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.d.ts +38 -0
  21. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js +12 -0
  22. package/dist/esm/components/XAdkChatbot/components/MarkdownRender/styles.js.map +1 -0
  23. package/dist/esm/components/XAdkChatbot/index.js +8 -0
  24. package/dist/esm/components/XAdkChatbot/index.js.map +1 -1
  25. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js +4 -4
  26. package/dist/esm/components/XAdkWebProvider/XAdkWebProvider.stories.js.map +1 -1
  27. package/dist/esm/hooks/useADKChat.js +18 -14
  28. package/dist/esm/hooks/useADKChat.js.map +1 -1
  29. package/dist/esm/services/api.js +2 -1
  30. package/dist/esm/services/api.js.map +1 -1
  31. package/dist/umd/chat-sdk.min.js +1 -1
  32. package/package.json +15 -13
@@ -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 { 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: [{\n text,\n }],\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 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 setSessionList([]);\n setCurrentSessionId(v4());\n setPrologue('');\n setSuggestedQuestions([]);\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(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 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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",
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 } else {\n message.error('删除会话失败');\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 } else {\n message.error('更新会话失败');\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
  }
@@ -64,7 +64,8 @@ var closeSession = async ({ url, appNo, sessionId, token }) => {
64
64
  const response = await import_request.request.delete(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sessions/${sessionId}`, {
65
65
  headers: {
66
66
  Authorization: `Bearer ${token}`
67
- }
67
+ },
68
+ data: {}
68
69
  });
69
70
  return response.data;
70
71
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/services/api.ts"],
4
- "sourcesContent": ["import { request } from '@/utils/request';\n\n// 服务端API响应接口\nexport interface ServerApiResponse<T = unknown> {\n data: T;\n code: string;\n success: boolean;\n message: string;\n serverTime: number;\n traceId: string;\n}\n\n// 标准API响应类型\nexport interface ApiResponse<T> {\n data: T;\n pagination?: {\n hasMore: boolean;\n nextPage: number;\n total: number;\n };\n result: {\n status: string;\n message?: string;\n code: string;\n }\n}\n\n// 聊天配置类型\nexport interface ChatConfig {\n workspaceNo?: string;\n appNo: string;\n appName: string;\n appTheme: string;\n description?: string;\n icon?: string;\n onboardingInfo: {\n prologue: string;\n questionFiles?: { question: string; }[];\n // eslint-disable-next-line camelcase\n suggested_questions: string[];\n };\n appVersionNo?: string;\n publishDTO?: {\n id: number;\n tenantId: string;\n workspaceNo: string;\n publishNo: string;\n publishTime: string;\n publishVersionNo: string;\n publishVersionDesc: string;\n publishAppType: string;\n platformConfigInfo: string;\n appNo: string;\n appVersionNo: string;\n sessionTime?: string;\n enableFlag: number;\n gmtModified: string;\n creator: string;\n modifier: string;\n isDeleted: string;\n authLoginInfoDTO: Record<string, unknown>;\n shareLink: string;\n };\n}\n\n// 会话记录\nexport interface SessionData {\n sessionId: string;\n startTime: string;\n userId: string;\n title: string;\n workspaceNo: string;\n appNo: string;\n isLike: 1 | 0 | -1;\n}\n\n/**\n * 获取聊天配置\n * 使用request,会自动添加token\n */\nexport const fetchAppConfig = async ({ url, appNo }: { url: string; appNo: string }): Promise<ApiResponse<ChatConfig>> => {\n const response = await request.get<ApiResponse<ChatConfig>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}`, {\n headers: {\n 'Content-Type': 'application/json',\n 'x-za-application': appNo,\n },\n });\n return response.data;\n};\n\n/**\n * 发送消息\n * 使用request,会自动添加token\n */\nexport const sendMessage = async ({ url, appNo, msg }: { url: string; appNo: string; msg: string }): Promise<ApiResponse<ChatConfig>> => {\n const response = await request.post<ApiResponse<ChatConfig>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgSteaming`, {\n msg,\n });\n return response.data;\n};\n\n/**\n * 获取会话列表\n */\nexport const fetchSessionList = async ({ url, appNo, pageSize = 10, pageNum = 1, token }:\n { url: string; appNo: string; pageSize?: number; pageNum?: number; token: string }) => {\n const response = await request.get<ApiResponse<SessionData[]>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sessions?limit=${pageSize}&page=${pageNum}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n\nexport interface SessionDetailAction {\n artifactDelta: Record<string, unknown>;\n requestedAuthConfigs: Record<string, unknown>;\n stateDelta: Record<string, unknown>;\n requestedToolConfirmations: Record<string, unknown>;\n}\n\nexport interface SessionDetailPartFileData {\n displayName: string;\n fileUri: string;\n mimeType: string;\n}\n\nexport interface SessionDetailPart {\n // 可能包含文本、文件等不同类型字段\n text?: string;\n fileData?: SessionDetailPartFileData;\n [key: string]: unknown;\n}\n\nexport interface SessionDetail {\n author: string;\n id: string;\n sessionId: string;\n invocationId?: string;\n actions: SessionDetailAction;\n content: {\n role: string; // e.g. 'user' or 'model'\n parts: SessionDetailPart[];\n };\n timestamp: number;\n [key: string]: unknown;\n}\n\n/**\n * 获取会话明细\n */\nexport const fetchSessionDetail = async ({ url, appNo, sessionId, pageSize = 999, pageNum = 1, token }:\n { url: string; appNo: string; sessionId: string; pageSize?: number; pageNum?: number; token: string }) => {\n const response = await request.get<ApiResponse<SessionDetail[]>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sessionDetails?sessionId=${sessionId}&page=${pageNum}&limit=${pageSize}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n\n/**\n * 删除会话\n */\nexport const closeSession = async ({ url, appNo, sessionId, token }:\n { url: string; appNo: string; sessionId: string; token: string }) => {\n const response = await request.delete<ApiResponse<boolean>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sessions/${sessionId}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n\n/**\n * 修改会话标题\n */\nexport const updateSessionTitle = async ({ url, appNo, sessionId, title, token }:\n { url: string; appNo: string; sessionId: string; title: string; token: string }) => {\n const response = await request.put<ApiResponse<boolean>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sessions/${sessionId}/updateSessionTitle`, {\n title,\n }, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n\nexport const addFeedback = async (params: {\n url: string;\n appNo: string;\n token: string;\n requestId: string;\n isLike: 1 | -1;\n feedbackTags?: string;\n feedbackDescription?: string;\n}) => {\n const { url, appNo, token, requestId, ...rest } = params;\n const response = await request.post<ApiResponse<void>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/invocation/${requestId}/feedback`, rest, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AAgFjB,IAAM,iBAAiB,OAAO,EAAE,KAAK,MAAM,MAAwE;AACxH,QAAM,WAAW,MAAM,uBAAQ,IAA6B,GAAG,2CAA2C,SAAS;AAAA,IACjH,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,IACtB;AAAA,EACF,CAAC;AACD,SAAO,SAAS;AAClB;AAMO,IAAM,cAAc,OAAO,EAAE,KAAK,OAAO,IAAI,MAAqF;AACvI,QAAM,WAAW,MAAM,uBAAQ,KAA8B,GAAG,2CAA2C,yBAAyB;AAAA,IAClI;AAAA,EACF,CAAC;AACD,SAAO,SAAS;AAClB;AAKO,IAAM,mBAAmB,OAAO,EAAE,KAAK,OAAO,WAAW,IAAI,UAAU,GAAG,MAAM,MACE;AACvF,QAAM,WAAW,MAAM,uBAAQ,IAAgC,GAAG,2CAA2C,wBAAwB,iBAAiB,WAAW;AAAA,IAC/J,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;AAuCO,IAAM,qBAAqB,OAAO,EAAE,KAAK,OAAO,WAAW,WAAW,KAAK,UAAU,GAAG,MAAM,MACO;AAC1G,QAAM,WAAW,MAAM,uBAAQ,IAAkC,GAAG,2CAA2C,kCAAkC,kBAAkB,iBAAiB,YAAY;AAAA,IAC9L,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;AAKO,IAAM,eAAe,OAAO,EAAE,KAAK,OAAO,WAAW,MAAM,MACK;AACrE,QAAM,WAAW,MAAM,uBAAQ,OAA6B,GAAG,2CAA2C,kBAAkB,aAAa;AAAA,IACvI,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;AAKO,IAAM,qBAAqB,OAAO,EAAE,KAAK,OAAO,WAAW,OAAO,MAAM,MACO;AACpF,QAAM,WAAW,MAAM,uBAAQ,IAA0B,GAAG,2CAA2C,kBAAkB,gCAAgC;AAAA,IACvJ;AAAA,EACF,GAAG;AAAA,IACD,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;AAEO,IAAM,cAAc,OAAO,WAQ5B;AACJ,QAAM,EAAE,KAAK,OAAO,OAAO,WAAW,GAAG,KAAK,IAAI;AAClD,QAAM,WAAW,MAAM,uBAAQ,KAAwB,GAAG,2CAA2C,oBAAoB,sBAAsB,MAAM;AAAA,IACnJ,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;",
4
+ "sourcesContent": ["import { request } from '@/utils/request';\n\n// 服务端API响应接口\nexport interface ServerApiResponse<T = unknown> {\n data: T;\n code: string;\n success: boolean;\n message: string;\n serverTime: number;\n traceId: string;\n}\n\n// 标准API响应类型\nexport interface ApiResponse<T> {\n data: T;\n pagination?: {\n hasMore: boolean;\n nextPage: number;\n total: number;\n };\n result: {\n status: string;\n message?: string;\n code: string;\n }\n}\n\n// 聊天配置类型\nexport interface ChatConfig {\n workspaceNo?: string;\n appNo: string;\n appName: string;\n appTheme: string;\n description?: string;\n icon?: string;\n onboardingInfo: {\n prologue: string;\n questionFiles?: { question: string; }[];\n // eslint-disable-next-line camelcase\n suggested_questions: string[];\n };\n appVersionNo?: string;\n publishDTO?: {\n id: number;\n tenantId: string;\n workspaceNo: string;\n publishNo: string;\n publishTime: string;\n publishVersionNo: string;\n publishVersionDesc: string;\n publishAppType: string;\n platformConfigInfo: string;\n appNo: string;\n appVersionNo: string;\n sessionTime?: string;\n enableFlag: number;\n gmtModified: string;\n creator: string;\n modifier: string;\n isDeleted: string;\n authLoginInfoDTO: Record<string, unknown>;\n shareLink: string;\n };\n}\n\n// 会话记录\nexport interface SessionData {\n sessionId: string;\n startTime: string;\n userId: string;\n title: string;\n workspaceNo: string;\n appNo: string;\n isLike: 1 | 0 | -1;\n}\n\n/**\n * 获取聊天配置\n * 使用request,会自动添加token\n */\nexport const fetchAppConfig = async ({ url, appNo }: { url: string; appNo: string }): Promise<ApiResponse<ChatConfig>> => {\n const response = await request.get<ApiResponse<ChatConfig>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}`, {\n headers: {\n 'Content-Type': 'application/json',\n 'x-za-application': appNo,\n },\n });\n return response.data;\n};\n\n/**\n * 发送消息\n * 使用request,会自动添加token\n */\nexport const sendMessage = async ({ url, appNo, msg }: { url: string; appNo: string; msg: string }): Promise<ApiResponse<ChatConfig>> => {\n const response = await request.post<ApiResponse<ChatConfig>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgSteaming`, {\n msg,\n });\n return response.data;\n};\n\n/**\n * 获取会话列表\n */\nexport const fetchSessionList = async ({ url, appNo, pageSize = 10, pageNum = 1, token }:\n { url: string; appNo: string; pageSize?: number; pageNum?: number; token: string }) => {\n const response = await request.get<ApiResponse<SessionData[]>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sessions?limit=${pageSize}&page=${pageNum}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n\nexport interface SessionDetailAction {\n artifactDelta: Record<string, unknown>;\n requestedAuthConfigs: Record<string, unknown>;\n stateDelta: Record<string, unknown>;\n requestedToolConfirmations: Record<string, unknown>;\n}\n\nexport interface SessionDetailPartFileData {\n displayName: string;\n fileUri: string;\n mimeType: string;\n}\n\nexport interface SessionDetailPart {\n // 可能包含文本、文件等不同类型字段\n text?: string;\n fileData?: SessionDetailPartFileData;\n [key: string]: unknown;\n}\n\nexport interface SessionDetail {\n author: string;\n id: string;\n sessionId: string;\n invocationId?: string;\n actions: SessionDetailAction;\n content: {\n role: string; // e.g. 'user' or 'model'\n parts: SessionDetailPart[];\n };\n timestamp: number;\n [key: string]: unknown;\n}\n\n/**\n * 获取会话明细\n */\nexport const fetchSessionDetail = async ({ url, appNo, sessionId, pageSize = 999, pageNum = 1, token }:\n { url: string; appNo: string; sessionId: string; pageSize?: number; pageNum?: number; token: string }) => {\n const response = await request.get<ApiResponse<SessionDetail[]>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sessionDetails?sessionId=${sessionId}&page=${pageNum}&limit=${pageSize}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n\n/**\n * 删除会话\n */\nexport const closeSession = async ({ url, appNo, sessionId, token }:\n { url: string; appNo: string; sessionId: string; token: string }) => {\n const response = await request.delete<ApiResponse<boolean>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sessions/${sessionId}`, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n data: {}\n });\n\n return response.data;\n};\n\n/**\n * 修改会话标题\n */\nexport const updateSessionTitle = async ({ url, appNo, sessionId, title, token }:\n { url: string; appNo: string; sessionId: string; title: string; token: string }) => {\n const response = await request.put<ApiResponse<boolean>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sessions/${sessionId}/updateSessionTitle`, {\n title,\n }, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n\nexport const addFeedback = async (params: {\n url: string;\n appNo: string;\n token: string;\n requestId: string;\n isLike: 1 | -1;\n feedbackTags?: string;\n feedbackDescription?: string;\n}) => {\n const { url, appNo, token, requestId, ...rest } = params;\n const response = await request.post<ApiResponse<void>>(`${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/invocation/${requestId}/feedback`, rest, {\n headers: {\n Authorization: `Bearer ${token}`,\n },\n });\n\n return response.data;\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAwB;AAgFjB,IAAM,iBAAiB,OAAO,EAAE,KAAK,MAAM,MAAwE;AACxH,QAAM,WAAW,MAAM,uBAAQ,IAA6B,GAAG,2CAA2C,SAAS;AAAA,IACjH,SAAS;AAAA,MACP,gBAAgB;AAAA,MAChB,oBAAoB;AAAA,IACtB;AAAA,EACF,CAAC;AACD,SAAO,SAAS;AAClB;AAMO,IAAM,cAAc,OAAO,EAAE,KAAK,OAAO,IAAI,MAAqF;AACvI,QAAM,WAAW,MAAM,uBAAQ,KAA8B,GAAG,2CAA2C,yBAAyB;AAAA,IAClI;AAAA,EACF,CAAC;AACD,SAAO,SAAS;AAClB;AAKO,IAAM,mBAAmB,OAAO,EAAE,KAAK,OAAO,WAAW,IAAI,UAAU,GAAG,MAAM,MACE;AACvF,QAAM,WAAW,MAAM,uBAAQ,IAAgC,GAAG,2CAA2C,wBAAwB,iBAAiB,WAAW;AAAA,IAC/J,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;AAuCO,IAAM,qBAAqB,OAAO,EAAE,KAAK,OAAO,WAAW,WAAW,KAAK,UAAU,GAAG,MAAM,MACO;AAC1G,QAAM,WAAW,MAAM,uBAAQ,IAAkC,GAAG,2CAA2C,kCAAkC,kBAAkB,iBAAiB,YAAY;AAAA,IAC9L,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;AAKO,IAAM,eAAe,OAAO,EAAE,KAAK,OAAO,WAAW,MAAM,MACK;AACrE,QAAM,WAAW,MAAM,uBAAQ,OAA6B,GAAG,2CAA2C,kBAAkB,aAAa;AAAA,IACvI,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,IACA,MAAM,CAAC;AAAA,EACT,CAAC;AAED,SAAO,SAAS;AAClB;AAKO,IAAM,qBAAqB,OAAO,EAAE,KAAK,OAAO,WAAW,OAAO,MAAM,MACO;AACpF,QAAM,WAAW,MAAM,uBAAQ,IAA0B,GAAG,2CAA2C,kBAAkB,gCAAgC;AAAA,IACvJ;AAAA,EACF,GAAG;AAAA,IACD,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;AAEO,IAAM,cAAc,OAAO,WAQ5B;AACJ,QAAM,EAAE,KAAK,OAAO,OAAO,WAAW,GAAG,KAAK,IAAI;AAClD,QAAM,WAAW,MAAM,uBAAQ,KAAwB,GAAG,2CAA2C,oBAAoB,sBAAsB,MAAM;AAAA,IACnJ,SAAS;AAAA,MACP,eAAe,UAAU;AAAA,IAC3B;AAAA,EACF,CAAC;AAED,SAAO,SAAS;AAClB;",
6
6
  "names": []
7
7
  }
@@ -65,7 +65,7 @@ var FunctionCallRender = function FunctionCallRender(_ref) {
65
65
  }
66
66
  if (name === 'transferToAgent') {
67
67
  var _fnCall$args;
68
- var agentName = (_fnCall$args = fnCall.args) === null || _fnCall$args === void 0 ? void 0 : _fnCall$args.agentName;
68
+ var agentName = fnCall === null || fnCall === void 0 || (_fnCall$args = fnCall.args) === null || _fnCall$args === void 0 ? void 0 : _fnCall$args.agentName;
69
69
  return /*#__PURE__*/_jsx("div", {
70
70
  className: styles.wrapper,
71
71
  children: /*#__PURE__*/_jsxs("div", {
@@ -141,7 +141,7 @@ var FunctionCallRender = function FunctionCallRender(_ref) {
141
141
  width: 400
142
142
  },
143
143
  layout: "vertical",
144
- children: [renderItem(fnCall.args, '工具参数'), renderItem((_msg$functionResponse = msg.functionResponse) === null || _msg$functionResponse === void 0 ? void 0 : _msg$functionResponse.response, '工具响应')]
144
+ children: [renderItem(fnCall === null || fnCall === void 0 ? void 0 : fnCall.args, '工具参数'), renderItem((_msg$functionResponse = msg.functionResponse) === null || _msg$functionResponse === void 0 ? void 0 : _msg$functionResponse.response, '工具响应')]
145
145
  }),
146
146
  children: /*#__PURE__*/_jsxs("div", {
147
147
  className: styles.fnCall,
@@ -1 +1 @@
1
- {"version":3,"names":["React","Alert","Button","Flex","Form","Popover","Tooltip","Typography","CopyOutlined","ToolOutlined","CheckCircleTwoTone","LoadingOutlined","UserSwitchOutlined","InfoCircleOutlined","useStyles","JsonView","jsx","_jsx","jsxs","_jsxs","FunctionCallRender","_ref","_msg$functionResponse","msg","showDetail","onConfirm","styles","fnCall","functionCall","fnRes","functionResponse","name","_msg$functionCall","_fnRes$response","role","confirmed","response","className","wrapper","children","message","type","showIcon","alert","id","originalFn","args","originalFunctionCall","confirm","justify","gap","onClick","_fnCall$args","agentName","style","color","Text","ellipsis","tooltip","maxWidth","lineHeight","twoToneColor","renderItem","obj","text","str","JSON","stringify","Item","label","align","copyable","icon","marginBottom","value","renderResponse","res","_res$response","error","title","placement","content","width","layout"],"sources":["../../../../../../src/components/XAdkChatbot/components/FunctionCallRender/index.tsx"],"sourcesContent":["import React from 'react';\nimport { Alert, Button, Flex, Form, Popover, Tooltip, Typography } from 'antd';\nimport { CopyOutlined, ToolOutlined, CheckCircleTwoTone, LoadingOutlined, UserSwitchOutlined, InfoCircleOutlined } from '@ant-design/icons';\nimport type { IMessage, FunctionCall } from '@/types';\nimport { useStyles } from './styles';\nimport JsonView from '@/components/XAiJsonView';\n\nexport interface FunctionCallRenderProps {\n msg: IMessage;\n showDetail?: boolean;\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n}\n\nconst FunctionCallRender: React.FC<FunctionCallRenderProps> = ({ msg, showDetail, onConfirm }) => {\n const styles = useStyles();\n const fnCall = msg.functionCall as FunctionCall;\n const fnRes = msg.functionResponse;\n const name = fnCall?.name || fnRes?.name;\n if (name === 'adk_request_confirmation') {\n if (fnRes) {\n if (msg.role === 'bot') return null;\n const confirmed = fnRes.response?.confirmed;\n return (\n <div key={msg.id} className={styles.wrapper}>\n {confirmed\n ? <Alert message=\"已确认\" type=\"success\" showIcon className={styles.alert} />\n : <Alert message=\"已取消\" type=\"error\" showIcon className={styles.alert} />}\n </div>\n );\n }\n const originalFn = msg?.functionCall?.args?.originalFunctionCall;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.confirm}>\n <div className=\"mb-4\">请确认是否执行工具:{originalFn?.name}</div>\n <Flex justify=\"end\" gap={8}>\n <Button type=\"default\" onClick={() => onConfirm?.(fnCall, false)}>取消</Button>\n <Button type=\"primary\" onClick={() => onConfirm?.(fnCall, true)}>\n 确认\n </Button>\n </Flex>\n </div>\n </div>\n );\n }\n if (name === 'transferToAgent') {\n const agentName = fnCall.args?.agentName;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.fnCall}>\n <UserSwitchOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: agentName }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 任务转交:{agentName}\n </Typography.Text>\n {msg.functionResponse\n ? <CheckCircleTwoTone twoToneColor=\"#52c41a\" />\n : <LoadingOutlined />}\n </div>\n </div>\n );\n }\n const renderItem = (obj: any, text: string) => {\n const str = JSON.stringify(obj, null, 2);\n return (\n <Form.Item\n label={(\n <Flex align=\"center\">\n <span className=\"mr-2\">{text}</span>\n <Typography.Text\n copyable={{\n text: str,\n icon: <CopyOutlined />,\n }}\n />\n </Flex>\n )}\n style={{ marginBottom: 12 }}\n >\n <JsonView value={str} />\n </Form.Item>\n );\n };\n const renderResponse = () => {\n const res = msg.functionResponse;\n if (res) {\n if (res.response?.error) {\n return (\n <Tooltip title={res.response.error}>\n <InfoCircleOutlined style={{ color: '#faad14' }} />\n </Tooltip>\n );\n }\n return <CheckCircleTwoTone twoToneColor=\"#52c41a\" />;\n }\n return <LoadingOutlined />;\n };\n return (\n <div key={msg.id} className={styles.wrapper}>\n {showDetail ? (\n <Popover\n placement=\"left\"\n content={(\n <Form style={{ width: 400 }} layout=\"vertical\">\n {renderItem(fnCall.args, '工具参数')}\n {renderItem(msg.functionResponse?.response, '工具响应')}\n </Form>\n )}\n >\n <div className={styles.fnCall}>\n <ToolOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: name }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 调用工具:{name}\n </Typography.Text>\n {renderResponse()}\n </div>\n </Popover>\n ) : (\n <div className={styles.fnCall}>\n <ToolOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: name }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 调用工具:{name}\n </Typography.Text>\n {renderResponse()}\n </div>\n )}\n </div>\n );\n};\n\nexport default FunctionCallRender;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","Alert","Button","Flex","Form","Popover","Tooltip","Typography","CopyOutlined","ToolOutlined","CheckCircleTwoTone","LoadingOutlined","UserSwitchOutlined","InfoCircleOutlined","useStyles","JsonView","jsx","_jsx","jsxs","_jsxs","FunctionCallRender","_ref","_msg$functionResponse","msg","showDetail","onConfirm","styles","fnCall","functionCall","fnRes","functionResponse","name","_msg$functionCall","_fnRes$response","role","confirmed","response","className","wrapper","children","message","type","showIcon","alert","id","originalFn","args","originalFunctionCall","confirm","justify","gap","onClick","_fnCall$args","agentName","style","color","Text","ellipsis","tooltip","maxWidth","lineHeight","twoToneColor","renderItem","obj","text","str","JSON","stringify","Item","label","align","copyable","icon","marginBottom","value","renderResponse","res","_res$response","error","title","placement","content","width","layout"],"sources":["../../../../../../src/components/XAdkChatbot/components/FunctionCallRender/index.tsx"],"sourcesContent":["import React from 'react';\nimport { Alert, Button, Flex, Form, Popover, Tooltip, Typography } from 'antd';\nimport { CopyOutlined, ToolOutlined, CheckCircleTwoTone, LoadingOutlined, UserSwitchOutlined, InfoCircleOutlined } from '@ant-design/icons';\nimport type { IMessage, FunctionCall } from '@/types';\nimport { useStyles } from './styles';\nimport JsonView from '@/components/XAiJsonView';\n\nexport interface FunctionCallRenderProps {\n msg: IMessage;\n showDetail?: boolean;\n onConfirm?: (fnCall: FunctionCall, confirmed: boolean) => void;\n}\n\nconst FunctionCallRender: React.FC<FunctionCallRenderProps> = ({ msg, showDetail, onConfirm }) => {\n const styles = useStyles();\n const fnCall = msg.functionCall as FunctionCall;\n const fnRes = msg.functionResponse;\n const name = fnCall?.name || fnRes?.name;\n if (name === 'adk_request_confirmation') {\n if (fnRes) {\n if (msg.role === 'bot') return null;\n const confirmed = fnRes.response?.confirmed;\n return (\n <div key={msg.id} className={styles.wrapper}>\n {confirmed\n ? <Alert message=\"已确认\" type=\"success\" showIcon className={styles.alert} />\n : <Alert message=\"已取消\" type=\"error\" showIcon className={styles.alert} />}\n </div>\n );\n }\n const originalFn = msg?.functionCall?.args?.originalFunctionCall;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.confirm}>\n <div className=\"mb-4\">请确认是否执行工具:{originalFn?.name}</div>\n <Flex justify=\"end\" gap={8}>\n <Button type=\"default\" onClick={() => onConfirm?.(fnCall, false)}>取消</Button>\n <Button type=\"primary\" onClick={() => onConfirm?.(fnCall, true)}>\n 确认\n </Button>\n </Flex>\n </div>\n </div>\n );\n }\n if (name === 'transferToAgent') {\n const agentName = fnCall?.args?.agentName;\n return (\n <div key={msg.id} className={styles.wrapper}>\n <div className={styles.fnCall}>\n <UserSwitchOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: agentName }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 任务转交:{agentName}\n </Typography.Text>\n {msg.functionResponse\n ? <CheckCircleTwoTone twoToneColor=\"#52c41a\" />\n : <LoadingOutlined />}\n </div>\n </div>\n );\n }\n const renderItem = (obj: any, text: string) => {\n const str = JSON.stringify(obj, null, 2);\n return (\n <Form.Item\n label={(\n <Flex align=\"center\">\n <span className=\"mr-2\">{text}</span>\n <Typography.Text\n copyable={{\n text: str,\n icon: <CopyOutlined />,\n }}\n />\n </Flex>\n )}\n style={{ marginBottom: 12 }}\n >\n <JsonView value={str} />\n </Form.Item>\n );\n };\n const renderResponse = () => {\n const res = msg.functionResponse;\n if (res) {\n if (res.response?.error) {\n return (\n <Tooltip title={res.response.error}>\n <InfoCircleOutlined style={{ color: '#faad14' }} />\n </Tooltip>\n );\n }\n return <CheckCircleTwoTone twoToneColor=\"#52c41a\" />;\n }\n return <LoadingOutlined />;\n };\n return (\n <div key={msg.id} className={styles.wrapper}>\n {showDetail ? (\n <Popover\n placement=\"left\"\n content={(\n <Form style={{ width: 400 }} layout=\"vertical\">\n {renderItem(fnCall?.args, '工具参数')}\n {renderItem(msg.functionResponse?.response, '工具响应')}\n </Form>\n )}\n >\n <div className={styles.fnCall}>\n <ToolOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: name }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 调用工具:{name}\n </Typography.Text>\n {renderResponse()}\n </div>\n </Popover>\n ) : (\n <div className={styles.fnCall}>\n <ToolOutlined style={{ color: '#888' }} />\n <Typography.Text\n ellipsis={{ tooltip: name }}\n style={{ maxWidth: 300, lineHeight: '16px' }}\n >\n 调用工具:{name}\n </Typography.Text>\n {renderResponse()}\n </div>\n )}\n </div>\n );\n};\n\nexport default FunctionCallRender;\n"],"mappings":"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"}
@@ -3,6 +3,7 @@ import XMarkdown from '@ant-design/x-markdown';
3
3
  import HighlightCode from '@ant-design/x-markdown/plugins/HighlightCode';
4
4
  import Latex from '@ant-design/x-markdown/plugins/Latex';
5
5
  import { Flex } from 'antd';
6
+ import { useStyles } from "./styles";
6
7
  import { BarsOutlined, BulbOutlined, ThunderboltOutlined, CheckCircleOutlined } from '@ant-design/icons';
7
8
  import { jsx as _jsx } from "react/jsx-runtime";
8
9
  import { jsxs as _jsxs } from "react/jsx-runtime";
@@ -47,23 +48,30 @@ var ThinkComponent = /*#__PURE__*/React.memo(function (props) {
47
48
  });
48
49
  var MarkdownRender = function MarkdownRender(_ref) {
49
50
  var text = _ref.text;
51
+ var styles = useStyles();
50
52
  var markdown = text.replaceAll(/\/\*\s*PLANNING\s*\*\//g, '<tag type="planning"></tag>').replaceAll(/\/\*\s*REPLANNING\s*\*\//g, '<tag type="replanning"></tag>').replaceAll(/\/\*\s*REASONING\s*\*\//g, '<tag type="reasoning"></tag>').replaceAll(/\/\*\s*ACTION\s*\*\//g, '<tag type="action"></tag>').replaceAll(/\/\*\s*FINAL_ANSWER\s*\*\//g, '<tag type="final_answer"></tag>');
51
- return /*#__PURE__*/_jsx(XMarkdown, {
52
- content: markdown,
53
- paragraphTag: "div",
54
- config: {
55
- extensions: Latex()
56
- },
57
- components: {
58
- tag: ThinkComponent,
59
- code: CodeComponent
60
- },
61
- streaming: {
62
- enableAnimation: true,
63
- animationConfig: {
64
- fadeDuration: 400
65
- }
66
- }
53
+ return /*#__PURE__*/_jsx("div", {
54
+ className: styles.markdownWrapper,
55
+ children: /*#__PURE__*/_jsx("div", {
56
+ className: styles.markdownHost,
57
+ children: /*#__PURE__*/_jsx(XMarkdown, {
58
+ content: markdown,
59
+ paragraphTag: "div",
60
+ config: {
61
+ extensions: Latex()
62
+ },
63
+ components: {
64
+ tag: ThinkComponent,
65
+ code: CodeComponent
66
+ },
67
+ streaming: {
68
+ enableAnimation: true,
69
+ animationConfig: {
70
+ fadeDuration: 400
71
+ }
72
+ }
73
+ })
74
+ })
67
75
  });
68
76
  };
69
77
  export default MarkdownRender;
@@ -1 +1 @@
1
- {"version":3,"names":["React","XMarkdown","HighlightCode","Latex","Flex","BarsOutlined","BulbOutlined","ThunderboltOutlined","CheckCircleOutlined","jsx","_jsx","jsxs","_jsxs","CodeComponent","props","_className$match","className","children","lang","match","ThinkComponent","memo","type","titleMap","planning","replanning","reasoning","action","final_answer","iconMap","align","gap","style","color","margin","MarkdownRender","_ref","text","markdown","replaceAll","content","paragraphTag","config","extensions","components","tag","code","streaming","enableAnimation","animationConfig","fadeDuration"],"sources":["../../../../../../src/components/XAdkChatbot/components/MarkdownRender/index.tsx"],"sourcesContent":["import React from 'react';\nimport XMarkdown, { type ComponentProps } from '@ant-design/x-markdown';\nimport HighlightCode from '@ant-design/x-markdown/plugins/HighlightCode';\nimport Latex from '@ant-design/x-markdown/plugins/Latex';\nimport { Flex } from 'antd';\nimport { BarsOutlined, BulbOutlined, ThunderboltOutlined, CheckCircleOutlined } from '@ant-design/icons';\n\nconst CodeComponent: React.FC<ComponentProps> = (props) => {\n const { className, children } = props;\n const lang = className?.match(/language-(\\w+)/)?.[1] || '';\n\n if (typeof children !== 'string') return null;\n return <HighlightCode lang={lang}>{children}</HighlightCode>;\n};\n\nexport interface MarkdownRenderProps {\n text: string;\n}\n\nconst ThinkComponent = React.memo((props: ComponentProps) => {\n const type = (props.type || '') as string;\n const titleMap: Record<string, string> = {\n planning: '规划',\n replanning: '重新规划',\n reasoning: '推理',\n action: '行动',\n final_answer: '最终答案',\n };\n const iconMap = {\n planning: <BarsOutlined />,\n replanning: <BarsOutlined />,\n reasoning: <BulbOutlined />,\n action: <ThunderboltOutlined />,\n final_answer: <CheckCircleOutlined />,\n };\n\n return (\n <Flex align=\"center\" gap={8} style={{ color: '#888', margin: '4px 0' }}>\n {type in titleMap && iconMap[type as keyof typeof iconMap]}\n <span>{titleMap[type]}</span>\n </Flex>\n );\n});\n\nconst MarkdownRender: React.FC<MarkdownRenderProps> = ({ text }) => {\n const markdown = text\n .replaceAll(/\\/\\*\\s*PLANNING\\s*\\*\\//g, '<tag type=\"planning\"></tag>')\n .replaceAll(/\\/\\*\\s*REPLANNING\\s*\\*\\//g, '<tag type=\"replanning\"></tag>')\n .replaceAll(/\\/\\*\\s*REASONING\\s*\\*\\//g, '<tag type=\"reasoning\"></tag>')\n .replaceAll(/\\/\\*\\s*ACTION\\s*\\*\\//g, '<tag type=\"action\"></tag>')\n .replaceAll(/\\/\\*\\s*FINAL_ANSWER\\s*\\*\\//g, '<tag type=\"final_answer\"></tag>');\n return (\n <XMarkdown\n content={markdown}\n paragraphTag=\"div\"\n config={{\n extensions: Latex(),\n }}\n components={{\n tag: ThinkComponent,\n code: CodeComponent,\n }}\n streaming={{\n enableAnimation: true,\n animationConfig: {\n fadeDuration: 400,\n },\n }}\n />\n );\n};\n\nexport default MarkdownRender;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","XMarkdown","HighlightCode","Latex","Flex","useStyles","BarsOutlined","BulbOutlined","ThunderboltOutlined","CheckCircleOutlined","jsx","_jsx","jsxs","_jsxs","CodeComponent","props","_className$match","className","children","lang","match","ThinkComponent","memo","type","titleMap","planning","replanning","reasoning","action","final_answer","iconMap","align","gap","style","color","margin","MarkdownRender","_ref","text","styles","markdown","replaceAll","markdownWrapper","markdownHost","content","paragraphTag","config","extensions","components","tag","code","streaming","enableAnimation","animationConfig","fadeDuration"],"sources":["../../../../../../src/components/XAdkChatbot/components/MarkdownRender/index.tsx"],"sourcesContent":["import React from 'react';\nimport XMarkdown, { type ComponentProps } from '@ant-design/x-markdown';\nimport HighlightCode from '@ant-design/x-markdown/plugins/HighlightCode';\nimport Latex from '@ant-design/x-markdown/plugins/Latex';\nimport { Flex } from 'antd';\nimport { useStyles } from './styles';\nimport { BarsOutlined, BulbOutlined, ThunderboltOutlined, CheckCircleOutlined } from '@ant-design/icons';\n\nconst CodeComponent: React.FC<ComponentProps> = (props) => {\n const { className, children } = props;\n const lang = className?.match(/language-(\\w+)/)?.[1] || '';\n\n if (typeof children !== 'string') return null;\n return <HighlightCode lang={lang}>{children}</HighlightCode>;\n};\n\nexport interface MarkdownRenderProps {\n text: string;\n}\n\nconst ThinkComponent = React.memo((props: ComponentProps) => {\n const type = (props.type || '') as string;\n const titleMap: Record<string, string> = {\n planning: '规划',\n replanning: '重新规划',\n reasoning: '推理',\n action: '行动',\n final_answer: '最终答案',\n };\n const iconMap = {\n planning: <BarsOutlined />,\n replanning: <BarsOutlined />,\n reasoning: <BulbOutlined />,\n action: <ThunderboltOutlined />,\n final_answer: <CheckCircleOutlined />,\n };\n\n return (\n <Flex align=\"center\" gap={8} style={{ color: '#888', margin: '4px 0' }}>\n {type in titleMap && iconMap[type as keyof typeof iconMap]}\n <span>{titleMap[type]}</span>\n </Flex>\n );\n});\n\nconst MarkdownRender: React.FC<MarkdownRenderProps> = ({ text }) => {\n const styles = useStyles();\n const markdown = text\n .replaceAll(/\\/\\*\\s*PLANNING\\s*\\*\\//g, '<tag type=\"planning\"></tag>')\n .replaceAll(/\\/\\*\\s*REPLANNING\\s*\\*\\//g, '<tag type=\"replanning\"></tag>')\n .replaceAll(/\\/\\*\\s*REASONING\\s*\\*\\//g, '<tag type=\"reasoning\"></tag>')\n .replaceAll(/\\/\\*\\s*ACTION\\s*\\*\\//g, '<tag type=\"action\"></tag>')\n .replaceAll(/\\/\\*\\s*FINAL_ANSWER\\s*\\*\\//g, '<tag type=\"final_answer\"></tag>');\n return (\n <div className={styles.markdownWrapper}>\n <div className={styles.markdownHost}>\n <XMarkdown\n content={markdown}\n paragraphTag=\"div\"\n config={{\n extensions: Latex(),\n }}\n components={{\n tag: ThinkComponent,\n code: CodeComponent,\n }}\n streaming={{\n enableAnimation: true,\n animationConfig: {\n fadeDuration: 400,\n },\n }}\n />\n </div>\n </div>\n );\n};\n\nexport default MarkdownRender;\n"],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export declare const useStyles: () => {
2
+ markdownWrapper: string;
3
+ markdownHost: string;
4
+ } & {
5
+ w: (width: string | number) => string;
6
+ h: (height: string | number) => string;
7
+ p: (padding: string) => string;
8
+ pb: (padding: string | number) => string;
9
+ pt: (padding: string | number) => string;
10
+ pl: (padding: string | number) => string;
11
+ pr: (padding: string | number) => string;
12
+ m: (margin: string) => string;
13
+ mb: (margin: string | number) => string;
14
+ mt: (margin: string | number) => string;
15
+ ml: (margin: string | number) => string;
16
+ mr: (margin: string | number) => string;
17
+ text: (size: string | number) => string;
18
+ weight: (size: number) => string;
19
+ textColor: (c: string) => string;
20
+ bg: (c: string) => string;
21
+ rs: (radius: string | number) => string;
22
+ gap: (g: string | number) => string;
23
+ flex: string;
24
+ flexCenter: string;
25
+ flexBetween: string;
26
+ flexColumn: string;
27
+ flex1: string;
28
+ cursor: (type: string) => string;
29
+ border: (color: string, width?: string) => string;
30
+ boxShadow: (shadow: string) => string;
31
+ transition: (property?: string, duration?: string) => string;
32
+ overflow: (type: string) => string;
33
+ position: (type: string) => string;
34
+ zIndex: (index: number) => string;
35
+ flexCenterGap2: string;
36
+ flexCenterGap4: string;
37
+ };
38
+ export default useStyles;
@@ -0,0 +1,12 @@
1
+ import _taggedTemplateLiteral from "@babel/runtime/helpers/esm/taggedTemplateLiteral";
2
+ var _templateObject, _templateObject2;
3
+ import { css } from '@emotion/css';
4
+ import { withBasicStyles } from "../../../../styles/common";
5
+ export var useStyles = withBasicStyles(function () {
6
+ return {
7
+ markdownWrapper: css(_templateObject || (_templateObject = _taggedTemplateLiteral(["\n display: grid;\n grid-template-columns: minmax(0, 1fr); /* \u5173\u952E\uFF1A\u5141\u8BB8\u5185\u5BB9\u6536\u7F29 */\n max-width: 100%; /* \u81EA\u5B9A\u4E49\u6700\u5927\u5BBD\u5EA6 */\n margin: 0 auto;\n "]))),
8
+ markdownHost: css(_templateObject2 || (_templateObject2 = _taggedTemplateLiteral(["\n container-type: inline-size; /* \u542F\u7528\u5BB9\u5668\u67E5\u8BE2 */\n width: 100%;\n overflow: auto;\n\n ant-highlightCode {\n max-width: min(100%, 80ch); /* \u53CC\u91CD\u7EA6\u675F */\n overflow-x: auto;\n }\n "])))
9
+ };
10
+ });
11
+ export default useStyles;
12
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["css","withBasicStyles","useStyles","markdownWrapper","_templateObject","_taggedTemplateLiteral","markdownHost","_templateObject2"],"sources":["../../../../../../src/components/XAdkChatbot/components/MarkdownRender/styles.tsx"],"sourcesContent":["import { css } from '@emotion/css';\nimport { withBasicStyles } from '@/styles/common';\n\nexport const useStyles = withBasicStyles(() => ({\n markdownWrapper: css`\n display: grid;\n grid-template-columns: minmax(0, 1fr); /* 关键:允许内容收缩 */\n max-width: 100%; /* 自定义最大宽度 */\n margin: 0 auto;\n `,\n\n\n markdownHost: css`\n container-type: inline-size; /* 启用容器查询 */\n width: 100%;\n overflow: auto;\n\n ant-highlightCode {\n max-width: min(100%, 80ch); /* 双重约束 */\n overflow-x: auto;\n }\n `,\n}));\n\nexport default useStyles;\n"],"mappings":";;AAAA,SAASA,GAAG,QAAQ,cAAc;AAClC,SAASC,eAAe;AAExB,OAAO,IAAMC,SAAS,GAAGD,eAAe,CAAC;EAAA,OAAO;IAC9CE,eAAe,EAAEH,GAAG,CAAAI,eAAA,KAAAA,eAAA,GAAAC,sBAAA,qOAKnB;IAGDC,YAAY,EAAEN,GAAG,CAAAO,gBAAA,KAAAA,gBAAA,GAAAF,sBAAA;EAUnB,CAAC;AAAA,CAAC,CAAC;AAEH,eAAeH,SAAS"}
@@ -211,6 +211,14 @@ var XAdkChatbot = function XAdkChatbot(_ref) {
211
211
  if (!item) return;
212
212
  onSuggest === null || onSuggest === void 0 || onSuggest(item);
213
213
  },
214
+ style: {
215
+ whiteSpace: 'normal',
216
+ height: 'auto',
217
+ wordWrap: 'break-word',
218
+ textAlign: 'left',
219
+ padding: '4px 15px',
220
+ lineHeight: '1.5'
221
+ },
214
222
  children: item
215
223
  })
216
224
  })
@@ -1 +1 @@
1
- {"version":3,"names":["React","useMemo","useCallback","useEffect","useRef","Button","SwapRightOutlined","useStyles","MarkdownRender","FunctionCallRender","ThinkRender","XAdkSender","jsx","_jsx","jsxs","_jsxs","scrollThreshold","XAdkChatbot","_ref","_ref$allowUpload","allowUpload","_ref$uploadRequest","uploadRequest","_ref$loading","loading","prologue","suggestions","messages","_ref$initialized","initialized","footer","showFnCallDetail","_ref$clearBtnShow","clearBtnShow","onConfirm","onSubmit","onSuggest","onStop","onClear","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","_messagesEndRef$curre","current","scrollIntoView","behavior","handleScroll","el","currentTop","scrollTop","isAtBottom","Math","abs","scrollHeight","clientHeight","listElement","addEventListener","removeEventListener","handleSubmit","_ref2","text","files","trim","queueMicrotask","_messagesEndRef$curre2","setTimeout","lastIndex","length","lastMessageMap","map","Map","_iterator","_createForOfIteratorHelper","_step","s","n","done","msg","value","role","invocationId","set","id","err","e","f","className","wrapper","children","list","ref","i","userMsg","card","concat","functionResponse","showDetail","isLast","isLoading","isLastBotMsg","get","thought","botMsg","message","isLastMsg","fnCall","functionCall","item","suggestion","suggestContent","type","icon","iconPosition","onClick"],"sources":["../../../../src/components/XAdkChatbot/index.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useRef } from 'react';\nimport { Button } from 'antd';\nimport { SwapRightOutlined } from '@ant-design/icons';\nimport { useStyles } from './styles';\nimport MarkdownRender from './components/MarkdownRender';\nimport FunctionCallRender from './components/FunctionCallRender';\nimport ThinkRender from './components/ThinkRender';\nimport XAdkSender from '../XAdkSender';\nimport type { IMessage, XAdkChatbotProps, SendContent } from '@/types';\n\nconst scrollThreshold = 10; // 滚动阈值\n\n\nconst XAdkChatbot: React.FC<XAdkChatbotProps> = ({ \n allowUpload = false,\n uploadRequest = () => {},\n loading = false,\n prologue,\n suggestions,\n messages,\n initialized = true,\n footer,\n showFnCallDetail,\n clearBtnShow = true,\n onConfirm,\n onSubmit,\n onSuggest,\n onStop,\n onClear,\n }) => {\n const styles = useStyles();\n const listRef = useRef<HTMLDivElement>(null);\n const lastScrollTopRef = useRef(0);\n const userHasScrolledRef = useRef(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!loading) return;\n if (userHasScrolledRef.current) return;\n messagesEndRef.current?.scrollIntoView({\n behavior: 'smooth',\n });\n }, [loading, messages]);\n\n // 处理滚动事件 - 检测用户是否手动滚动\n const handleScroll = useCallback(() => {\n const el = listRef.current;\n if (!el) return;\n const currentTop = el.scrollTop;\n // 如果向上滚动,说明是手动干预\n if (currentTop < lastScrollTopRef.current) {\n userHasScrolledRef.current = true;\n }\n // 如果向下并且已经到了底部,则恢复自动\n const isAtBottom = \n Math.abs(el.scrollHeight - currentTop - el.clientHeight) <= scrollThreshold;\n\n if (isAtBottom) {\n userHasScrolledRef.current = false;\n }\n\n // 更新上次位置\n lastScrollTopRef.current = currentTop;\n }, []);\n\n // 监听滚动事件\n useEffect(() => {\n const listElement = listRef.current\n if (!listElement) return;\n\n listElement.addEventListener('scroll', handleScroll);\n return () => {\n listElement.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n // 发送消息\n const handleSubmit = ({ text, files }: SendContent) => {\n if (loading) return;\n if (!text?.trim()) return;\n onSubmit?.({ text, files });\n // 滚动\n queueMicrotask(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'instant' });\n });\n // 重置用户滚动状态\n setTimeout(() => {\n userHasScrolledRef.current = false;\n }, 0);\n };\n\n const lastIndex = messages.length - 1;\n\n const lastMessageMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const msg of messages) {\n if (msg.role === 'bot' && msg.invocationId) {\n map.set(msg.invocationId, msg.id);\n }\n }\n return map;\n }, [messages]);\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.list} ref={listRef}>\n <div className={styles.prologue}>\n {prologue}\n </div>\n {messages.map((msg, i) => {\n if (msg.role === 'user') {\n if (msg.text) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <div className={styles.card}>{msg.text}</div>\n </div>\n );\n }\n if (msg.functionResponse) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} />\n </div>\n );\n }\n return null;\n }\n const isLast = i === lastIndex;\n const isLoading = isLast && loading;\n const isLastBotMsg = lastMessageMap.get(msg?.invocationId || '') === msg.id;\n \n if (msg.text) {\n if (msg.thought) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <ThinkRender\n msg={msg}\n loading={isLoading}\n />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <MarkdownRender text={msg.text} />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n const fnCall = msg.functionCall;\n if (fnCall) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} onConfirm={onConfirm}/>\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n })}\n <div>\n {suggestions?.map((item) => (\n <div key={item} className={styles.suggestion}>\n <div className={styles.suggestContent}>\n <Button\n type=\"text\"\n icon={<SwapRightOutlined />}\n iconPosition='end'\n onClick={() => {\n if (!item) return;\n onSuggest?.(item);\n }}\n >\n {item}\n </Button>\n </div>\n </div>\n ))}\n </div>\n <div ref={messagesEndRef} />\n </div>\n <XAdkSender\n allowUpload={allowUpload}\n uploadRequest={uploadRequest}\n loading={loading}\n clearBtnShow={clearBtnShow}\n onSubmit={handleSubmit}\n onClear={onClear}\n onStop={onStop}\n />\n </div>\n );\n};\n\nexport default XAdkChatbot;"],"mappings":"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"}
1
+ {"version":3,"names":["React","useMemo","useCallback","useEffect","useRef","Button","SwapRightOutlined","useStyles","MarkdownRender","FunctionCallRender","ThinkRender","XAdkSender","jsx","_jsx","jsxs","_jsxs","scrollThreshold","XAdkChatbot","_ref","_ref$allowUpload","allowUpload","_ref$uploadRequest","uploadRequest","_ref$loading","loading","prologue","suggestions","messages","_ref$initialized","initialized","footer","showFnCallDetail","_ref$clearBtnShow","clearBtnShow","onConfirm","onSubmit","onSuggest","onStop","onClear","styles","listRef","lastScrollTopRef","userHasScrolledRef","messagesEndRef","_messagesEndRef$curre","current","scrollIntoView","behavior","handleScroll","el","currentTop","scrollTop","isAtBottom","Math","abs","scrollHeight","clientHeight","listElement","addEventListener","removeEventListener","handleSubmit","_ref2","text","files","trim","queueMicrotask","_messagesEndRef$curre2","setTimeout","lastIndex","length","lastMessageMap","map","Map","_iterator","_createForOfIteratorHelper","_step","s","n","done","msg","value","role","invocationId","set","id","err","e","f","className","wrapper","children","list","ref","i","userMsg","card","concat","functionResponse","showDetail","isLast","isLoading","isLastBotMsg","get","thought","botMsg","message","isLastMsg","fnCall","functionCall","item","suggestion","suggestContent","type","icon","iconPosition","onClick","style","whiteSpace","height","wordWrap","textAlign","padding","lineHeight"],"sources":["../../../../src/components/XAdkChatbot/index.tsx"],"sourcesContent":["import React, { useMemo, useCallback, useEffect, useRef } from 'react';\nimport { Button } from 'antd';\nimport { SwapRightOutlined } from '@ant-design/icons';\nimport { useStyles } from './styles';\nimport MarkdownRender from './components/MarkdownRender';\nimport FunctionCallRender from './components/FunctionCallRender';\nimport ThinkRender from './components/ThinkRender';\nimport XAdkSender from '../XAdkSender';\nimport type { IMessage, XAdkChatbotProps, SendContent } from '@/types';\n\nconst scrollThreshold = 10; // 滚动阈值\n\n\nconst XAdkChatbot: React.FC<XAdkChatbotProps> = ({ \n allowUpload = false,\n uploadRequest = () => {},\n loading = false,\n prologue,\n suggestions,\n messages,\n initialized = true,\n footer,\n showFnCallDetail,\n clearBtnShow = true,\n onConfirm,\n onSubmit,\n onSuggest,\n onStop,\n onClear,\n }) => {\n const styles = useStyles();\n const listRef = useRef<HTMLDivElement>(null);\n const lastScrollTopRef = useRef(0);\n const userHasScrolledRef = useRef(false);\n const messagesEndRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!loading) return;\n if (userHasScrolledRef.current) return;\n messagesEndRef.current?.scrollIntoView({\n behavior: 'smooth',\n });\n }, [loading, messages]);\n\n // 处理滚动事件 - 检测用户是否手动滚动\n const handleScroll = useCallback(() => {\n const el = listRef.current;\n if (!el) return;\n const currentTop = el.scrollTop;\n // 如果向上滚动,说明是手动干预\n if (currentTop < lastScrollTopRef.current) {\n userHasScrolledRef.current = true;\n }\n // 如果向下并且已经到了底部,则恢复自动\n const isAtBottom = \n Math.abs(el.scrollHeight - currentTop - el.clientHeight) <= scrollThreshold;\n\n if (isAtBottom) {\n userHasScrolledRef.current = false;\n }\n\n // 更新上次位置\n lastScrollTopRef.current = currentTop;\n }, []);\n\n // 监听滚动事件\n useEffect(() => {\n const listElement = listRef.current\n if (!listElement) return;\n\n listElement.addEventListener('scroll', handleScroll);\n return () => {\n listElement.removeEventListener('scroll', handleScroll);\n };\n }, []);\n\n // 发送消息\n const handleSubmit = ({ text, files }: SendContent) => {\n if (loading) return;\n if (!text?.trim()) return;\n onSubmit?.({ text, files });\n // 滚动\n queueMicrotask(() => {\n messagesEndRef.current?.scrollIntoView({ behavior: 'instant' });\n });\n // 重置用户滚动状态\n setTimeout(() => {\n userHasScrolledRef.current = false;\n }, 0);\n };\n\n const lastIndex = messages.length - 1;\n\n const lastMessageMap = useMemo(() => {\n const map = new Map<string, string>();\n for (const msg of messages) {\n if (msg.role === 'bot' && msg.invocationId) {\n map.set(msg.invocationId, msg.id);\n }\n }\n return map;\n }, [messages]);\n\n return (\n <div className={styles.wrapper}>\n <div className={styles.list} ref={listRef}>\n <div className={styles.prologue}>\n {prologue}\n </div>\n {messages.map((msg, i) => {\n if (msg.role === 'user') {\n if (msg.text) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <div className={styles.card}>{msg.text}</div>\n </div>\n );\n }\n if (msg.functionResponse) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.userMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} />\n </div>\n );\n }\n return null;\n }\n const isLast = i === lastIndex;\n const isLoading = isLast && loading;\n const isLastBotMsg = lastMessageMap.get(msg?.invocationId || '') === msg.id;\n \n if (msg.text) {\n if (msg.thought) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <ThinkRender\n msg={msg}\n loading={isLoading}\n />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <MarkdownRender text={msg.text} />\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n const fnCall = msg.functionCall;\n if (fnCall) {\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n <FunctionCallRender msg={msg} showDetail={showFnCallDetail} onConfirm={onConfirm}/>\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n }\n return (\n <div key={`${msg.id}-${i}`} className={styles.botMsg}>\n {!isLoading && footer?.({ message: msg as IMessage, isLastMsg: isLast, isLastBotMsg })}\n </div>\n );\n })}\n <div>\n {suggestions?.map((item) => (\n <div key={item} className={styles.suggestion}>\n <div className={styles.suggestContent}>\n <Button\n type=\"text\"\n icon={<SwapRightOutlined />}\n iconPosition='end'\n onClick={() => {\n if (!item) return;\n onSuggest?.(item);\n }}\n style={{ \n whiteSpace: 'normal',\n height: 'auto',\n wordWrap: 'break-word',\n textAlign: 'left',\n padding: '4px 15px',\n lineHeight: '1.5'\n }}\n >\n {item}\n </Button>\n </div>\n </div>\n ))}\n </div>\n <div ref={messagesEndRef} />\n </div>\n <XAdkSender\n allowUpload={allowUpload}\n uploadRequest={uploadRequest}\n loading={loading}\n clearBtnShow={clearBtnShow}\n onSubmit={handleSubmit}\n onClear={onClear}\n onStop={onStop}\n />\n </div>\n );\n};\n\nexport default XAdkChatbot;"],"mappings":";AAAA,OAAOA,KAAK,IAAIC,OAAO,EAAEC,WAAW,EAAEC,SAAS,EAAEC,MAAM,QAAQ,OAAO;AACtE,SAASC,MAAM,QAAQ,MAAM;AAC7B,SAASC,iBAAiB,QAAQ,mBAAmB;AACrD,SAASC,SAAS;AAClB,OAAOC,cAAc;AACrB,OAAOC,kBAAkB;AACzB,OAAOC,WAAW;AAClB,OAAOC,UAAU;AAAsB,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAGvC,IAAMC,eAAe,GAAG,EAAE,CAAC,CAAC;;AAG5B,IAAMC,WAAuC,GAAG,SAA1CA,WAAuCA,CAAAC,IAAA,EAgBtC;EAAA,IAAAC,gBAAA,GAAAD,IAAA,CAfLE,WAAW;IAAXA,WAAW,GAAAD,gBAAA,cAAG,KAAK,GAAAA,gBAAA;IAAAE,kBAAA,GAAAH,IAAA,CACnBI,aAAa;IAAbA,aAAa,GAAAD,kBAAA,cAAG,YAAM,CAAC,CAAC,GAAAA,kBAAA;IAAAE,YAAA,GAAAL,IAAA,CACxBM,OAAO;IAAPA,OAAO,GAAAD,YAAA,cAAG,KAAK,GAAAA,YAAA;IACfE,QAAQ,GAAAP,IAAA,CAARO,QAAQ;IACRC,WAAW,GAAAR,IAAA,CAAXQ,WAAW;IACXC,QAAQ,GAAAT,IAAA,CAARS,QAAQ;IAAAC,gBAAA,GAAAV,IAAA,CACRW,WAAW;IAAXA,WAAW,GAAAD,gBAAA,cAAG,IAAI,GAAAA,gBAAA;IAClBE,MAAM,GAAAZ,IAAA,CAANY,MAAM;IACNC,gBAAgB,GAAAb,IAAA,CAAhBa,gBAAgB;IAAAC,iBAAA,GAAAd,IAAA,CAChBe,YAAY;IAAZA,YAAY,GAAAD,iBAAA,cAAG,IAAI,GAAAA,iBAAA;IACnBE,SAAS,GAAAhB,IAAA,CAATgB,SAAS;IACTC,QAAQ,GAAAjB,IAAA,CAARiB,QAAQ;IACRC,SAAS,GAAAlB,IAAA,CAATkB,SAAS;IACTC,MAAM,GAAAnB,IAAA,CAANmB,MAAM;IACNC,OAAO,GAAApB,IAAA,CAAPoB,OAAO;EAEP,IAAMC,MAAM,GAAGhC,SAAS,CAAC,CAAC;EAC1B,IAAMiC,OAAO,GAAGpC,MAAM,CAAiB,IAAI,CAAC;EAC5C,IAAMqC,gBAAgB,GAAGrC,MAAM,CAAC,CAAC,CAAC;EAClC,IAAMsC,kBAAkB,GAAGtC,MAAM,CAAC,KAAK,CAAC;EACxC,IAAMuC,cAAc,GAAGvC,MAAM,CAAiB,IAAI,CAAC;EAEnDD,SAAS,CAAC,YAAM;IAAA,IAAAyC,qBAAA;IACd,IAAI,CAACpB,OAAO,EAAE;IACd,IAAIkB,kBAAkB,CAACG,OAAO,EAAE;IAChC,CAAAD,qBAAA,GAAAD,cAAc,CAACE,OAAO,cAAAD,qBAAA,eAAtBA,qBAAA,CAAwBE,cAAc,CAAC;MACrCC,QAAQ,EAAE;IACZ,CAAC,CAAC;EACJ,CAAC,EAAE,CAACvB,OAAO,EAAEG,QAAQ,CAAC,CAAC;;EAEvB;EACA,IAAMqB,YAAY,GAAG9C,WAAW,CAAC,YAAM;IACrC,IAAM+C,EAAE,GAAGT,OAAO,CAACK,OAAO;IAC1B,IAAI,CAACI,EAAE,EAAE;IACT,IAAMC,UAAU,GAAGD,EAAE,CAACE,SAAS;IAC/B;IACA,IAAID,UAAU,GAAGT,gBAAgB,CAACI,OAAO,EAAE;MACzCH,kBAAkB,CAACG,OAAO,GAAG,IAAI;IACnC;IACA;IACA,IAAMO,UAAU,GACdC,IAAI,CAACC,GAAG,CAACL,EAAE,CAACM,YAAY,GAAGL,UAAU,GAAGD,EAAE,CAACO,YAAY,CAAC,IAAIxC,eAAe;IAE7E,IAAIoC,UAAU,EAAE;MACdV,kBAAkB,CAACG,OAAO,GAAG,KAAK;IACpC;;IAEA;IACAJ,gBAAgB,CAACI,OAAO,GAAGK,UAAU;EACvC,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA/C,SAAS,CAAC,YAAM;IACd,IAAMsD,WAAW,GAAGjB,OAAO,CAACK,OAAO;IACnC,IAAI,CAACY,WAAW,EAAE;IAElBA,WAAW,CAACC,gBAAgB,CAAC,QAAQ,EAAEV,YAAY,CAAC;IACpD,OAAO,YAAM;MACXS,WAAW,CAACE,mBAAmB,CAAC,QAAQ,EAAEX,YAAY,CAAC;IACzD,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;;EAEN;EACA,IAAMY,YAAY,GAAG,SAAfA,YAAYA,CAAAC,KAAA,EAAqC;IAAA,IAA/BC,IAAI,GAAAD,KAAA,CAAJC,IAAI;MAAEC,KAAK,GAAAF,KAAA,CAALE,KAAK;IACjC,IAAIvC,OAAO,EAAE;IACb,IAAI,EAACsC,IAAI,aAAJA,IAAI,eAAJA,IAAI,CAAEE,IAAI,CAAC,CAAC,GAAE;IACnB7B,QAAQ,aAARA,QAAQ,eAARA,QAAQ,CAAG;MAAE2B,IAAI,EAAJA,IAAI;MAAEC,KAAK,EAALA;IAAM,CAAC,CAAC;IAC3B;IACAE,cAAc,CAAC,YAAM;MAAA,IAAAC,sBAAA;MACnB,CAAAA,sBAAA,GAAAvB,cAAc,CAACE,OAAO,cAAAqB,sBAAA,eAAtBA,sBAAA,CAAwBpB,cAAc,CAAC;QAAEC,QAAQ,EAAE;MAAU,CAAC,CAAC;IACjE,CAAC,CAAC;IACF;IACAoB,UAAU,CAAC,YAAM;MACfzB,kBAAkB,CAACG,OAAO,GAAG,KAAK;IACpC,CAAC,EAAE,CAAC,CAAC;EACP,CAAC;EAED,IAAMuB,SAAS,GAAGzC,QAAQ,CAAC0C,MAAM,GAAG,CAAC;EAErC,IAAMC,cAAc,GAAGrE,OAAO,CAAC,YAAM;IACnC,IAAMsE,GAAG,GAAG,IAAIC,GAAG,CAAiB,CAAC;IAAC,IAAAC,SAAA,GAAAC,0BAAA,CACpB/C,QAAQ;MAAAgD,KAAA;IAAA;MAA1B,KAAAF,SAAA,CAAAG,CAAA,MAAAD,KAAA,GAAAF,SAAA,CAAAI,CAAA,IAAAC,IAAA,GAA4B;QAAA,IAAjBC,GAAG,GAAAJ,KAAA,CAAAK,KAAA;QACZ,IAAID,GAAG,CAACE,IAAI,KAAK,KAAK,IAAIF,GAAG,CAACG,YAAY,EAAE;UAC1CX,GAAG,CAACY,GAAG,CAACJ,GAAG,CAACG,YAAY,EAAEH,GAAG,CAACK,EAAE,CAAC;QACnC;MACF;IAAC,SAAAC,GAAA;MAAAZ,SAAA,CAAAa,CAAA,CAAAD,GAAA;IAAA;MAAAZ,SAAA,CAAAc,CAAA;IAAA;IACD,OAAOhB,GAAG;EACZ,CAAC,EAAE,CAAC5C,QAAQ,CAAC,CAAC;EAEd,oBACEZ,KAAA;IAAKyE,SAAS,EAAEjD,MAAM,CAACkD,OAAQ;IAAAC,QAAA,gBAC7B3E,KAAA;MAAKyE,SAAS,EAAEjD,MAAM,CAACoD,IAAK;MAACC,GAAG,EAAEpD,OAAQ;MAAAkD,QAAA,gBACxC7E,IAAA;QAAK2E,SAAS,EAAEjD,MAAM,CAACd,QAAS;QAAAiE,QAAA,EAC7BjE;MAAQ,CACN,CAAC,EACLE,QAAQ,CAAC4C,GAAG,CAAC,UAACQ,GAAG,EAAEc,CAAC,EAAK;QACxB,IAAId,GAAG,CAACE,IAAI,KAAK,MAAM,EAAE;UACvB,IAAIF,GAAG,CAACjB,IAAI,EAAE;YACZ,oBACIjD,IAAA;cAA4B2E,SAAS,EAAEjD,MAAM,CAACuD,OAAQ;cAAAJ,QAAA,eACpD7E,IAAA;gBAAK2E,SAAS,EAAEjD,MAAM,CAACwD,IAAK;gBAAAL,QAAA,EAAEX,GAAG,CAACjB;cAAI,CAAM;YAAC,MAAAkC,MAAA,CADlCjB,GAAG,CAACK,EAAE,OAAAY,MAAA,CAAIH,CAAC,CAEnB,CAAC;UAEZ;UACA,IAAId,GAAG,CAACkB,gBAAgB,EAAE;YACxB,oBACEpF,IAAA;cAA4B2E,SAAS,EAAEjD,MAAM,CAACuD,OAAQ;cAAAJ,QAAA,eACpD7E,IAAA,CAACJ,kBAAkB;gBAACsE,GAAG,EAAEA,GAAI;gBAACmB,UAAU,EAAEnE;cAAiB,CAAE;YAAC,MAAAiE,MAAA,CADnDjB,GAAG,CAACK,EAAE,OAAAY,MAAA,CAAIH,CAAC,CAEnB,CAAC;UAEV;UACA,OAAO,IAAI;QACb;QACA,IAAMM,MAAM,GAAGN,CAAC,KAAKzB,SAAS;QAC9B,IAAMgC,SAAS,GAAGD,MAAM,IAAI3E,OAAO;QACnC,IAAM6E,YAAY,GAAG/B,cAAc,CAACgC,GAAG,CAAC,CAAAvB,GAAG,aAAHA,GAAG,uBAAHA,GAAG,CAAEG,YAAY,KAAI,EAAE,CAAC,KAAKH,GAAG,CAACK,EAAE;QAE3E,IAAIL,GAAG,CAACjB,IAAI,EAAE;UACZ,IAAIiB,GAAG,CAACwB,OAAO,EAAE;YACf,oBACExF,KAAA;cAA4ByE,SAAS,EAAEjD,MAAM,CAACiE,MAAO;cAAAd,QAAA,gBACnD7E,IAAA,CAACH,WAAW;gBACVqE,GAAG,EAAEA,GAAI;gBACTvD,OAAO,EAAE4E;cAAU,CACpB,CAAC,EACD,CAACA,SAAS,KAAItE,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAG;gBAAE2E,OAAO,EAAE1B,GAAe;gBAAE2B,SAAS,EAAEP,MAAM;gBAAEE,YAAY,EAAZA;cAAa,CAAC,CAAC;YAAA,MAAAL,MAAA,CAL3EjB,GAAG,CAACK,EAAE,OAAAY,MAAA,CAAIH,CAAC,CAMnB,CAAC;UAEV;UACA,oBACE9E,KAAA;YAA4ByE,SAAS,EAAEjD,MAAM,CAACiE,MAAO;YAAAd,QAAA,gBACnD7E,IAAA,CAACL,cAAc;cAACsD,IAAI,EAAEiB,GAAG,CAACjB;YAAK,CAAE,CAAC,EACjC,CAACsC,SAAS,KAAItE,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAG;cAAE2E,OAAO,EAAE1B,GAAe;cAAE2B,SAAS,EAAEP,MAAM;cAAEE,YAAY,EAAZA;YAAa,CAAC,CAAC;UAAA,MAAAL,MAAA,CAF3EjB,GAAG,CAACK,EAAE,OAAAY,MAAA,CAAIH,CAAC,CAGnB,CAAC;QAEV;QACA,IAAMc,MAAM,GAAG5B,GAAG,CAAC6B,YAAY;QAC/B,IAAID,MAAM,EAAE;UACV,oBACE5F,KAAA;YAA4ByE,SAAS,EAAEjD,MAAM,CAACiE,MAAO;YAAAd,QAAA,gBACnD7E,IAAA,CAACJ,kBAAkB;cAACsE,GAAG,EAAEA,GAAI;cAACmB,UAAU,EAAEnE,gBAAiB;cAACG,SAAS,EAAEA;YAAU,CAAC,CAAC,EAClF,CAACkE,SAAS,KAAItE,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAG;cAAE2E,OAAO,EAAE1B,GAAe;cAAE2B,SAAS,EAAEP,MAAM;cAAEE,YAAY,EAAZA;YAAa,CAAC,CAAC;UAAA,MAAAL,MAAA,CAF3EjB,GAAG,CAACK,EAAE,OAAAY,MAAA,CAAIH,CAAC,CAGnB,CAAC;QAEV;QACA,oBACEhF,IAAA;UAA4B2E,SAAS,EAAEjD,MAAM,CAACiE,MAAO;UAAAd,QAAA,EAClD,CAACU,SAAS,KAAItE,MAAM,aAANA,MAAM,uBAANA,MAAM,CAAG;YAAE2E,OAAO,EAAE1B,GAAe;YAAE2B,SAAS,EAAEP,MAAM;YAAEE,YAAY,EAAZA;UAAa,CAAC,CAAC;QAAA,MAAAL,MAAA,CAD3EjB,GAAG,CAACK,EAAE,OAAAY,MAAA,CAAIH,CAAC,CAEnB,CAAC;MAEV,CAAC,CAAC,eACFhF,IAAA;QAAA6E,QAAA,EACGhE,WAAW,aAAXA,WAAW,uBAAXA,WAAW,CAAE6C,GAAG,CAAC,UAACsC,IAAI;UAAA,oBACrBhG,IAAA;YAAgB2E,SAAS,EAAEjD,MAAM,CAACuE,UAAW;YAAApB,QAAA,eAC3C7E,IAAA;cAAK2E,SAAS,EAAEjD,MAAM,CAACwE,cAAe;cAAArB,QAAA,eACpC7E,IAAA,CAACR,MAAM;gBACL2G,IAAI,EAAC,MAAM;gBACXC,IAAI,eAAEpG,IAAA,CAACP,iBAAiB,IAAE,CAAE;gBAC5B4G,YAAY,EAAC,KAAK;gBAClBC,OAAO,EAAE,SAAAA,QAAA,EAAM;kBACb,IAAI,CAACN,IAAI,EAAE;kBACXzE,SAAS,aAATA,SAAS,eAATA,SAAS,CAAGyE,IAAI,CAAC;gBACnB,CAAE;gBACFO,KAAK,EAAE;kBACLC,UAAU,EAAE,QAAQ;kBACpBC,MAAM,EAAE,MAAM;kBACdC,QAAQ,EAAE,YAAY;kBACtBC,SAAS,EAAE,MAAM;kBACjBC,OAAO,EAAE,UAAU;kBACnBC,UAAU,EAAE;gBACd,CAAE;gBAAAhC,QAAA,EAEDmB;cAAI,CACC;YAAC,CACN;UAAC,GArBEA,IAsBL,CAAC;QAAA,CACP;MAAC,CACC,CAAC,eACNhG,IAAA;QAAK+E,GAAG,EAAEjD;MAAe,CAAE,CAAC;IAAA,CACzB,CAAC,eACN9B,IAAA,CAACF,UAAU;MACTS,WAAW,EAAEA,WAAY;MACzBE,aAAa,EAAEA,aAAc;MAC7BE,OAAO,EAAEA,OAAQ;MACjBS,YAAY,EAAEA,YAAa;MAC3BE,QAAQ,EAAEyB,YAAa;MACvBtB,OAAO,EAAEA,OAAQ;MACjBD,MAAM,EAAEA;IAAO,CAChB,CAAC;EAAA,CACC,CAAC;AAEV,CAAC;AAED,eAAepB,WAAW"}
@@ -83,9 +83,9 @@ export var 单聊天窗口实例 = {
83
83
  },
84
84
  args: {
85
85
  url: 'https://m-poc-dev.zaxline.com',
86
- token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiYU5HbmZXS1pEUWVNWXkzd0NWSFc5VjVMIl0sImV4cCI6MTc2NzUzNjE2NSwianRpIjoicnktX0RIQnVFbE9tQW1rZWtLNjBnNzREaGk0IiwiY2xpZW50X2lkIjoiYU5HbmZXS1pEUWVNWXkzd0NWSFc5VjVMIn0.UnedO15cSkYyE6u6ZQATLXSYIYb0GylP7RjeJYHDTVwGPuYKOHENgYMbXkL_FOe_V8681eZ5uXpR5k31HsziIjp_GtZdUqLv5O_bEzZ5gKMPmy9uXpr56M-IiB2c6GZRbJF-DI1b4J9QJcvwlIvQG-I2ug50cGmlZ4YHhRrjHnU6Z8j8iJoF4CLUgzG5R0UasIlonfI1uVUXX1lqD4iomZ7UDWodPLi2QpjlCkUq2kaJbjRSZAPHpugff4ZKzAl47nO2deBOBbmDkzPnKmibCwJ5rZVtYIYvWLq8iX0qgkhXEkEn20DB717WPGi779qB8vxOx4rGlwuegRAz_05_qg',
86
+ token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIl0sImV4cCI6MTc2Nzk1MjM0NywianRpIjoiSHpLMll4cVdjSTA3QWtmOHlsQXYwV0w0aE5jIiwiY2xpZW50X2lkIjoiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIn0.AjABoyZFxAACkfy-ywLlfaJd6YY0Ir3pBGx_-HzW9di9p_4rnptbFI4adk9pktSVtlLB0cs45SU6uzp6VCJUj9-q-MP8QBqL6i7u2HV9e-kuBJgyIZD4t0PsazpJNu4rDlBAymYzw73ptLPjCwsUkckUz4Xhy1WmR8mpmuG0nuSWzlDlWKiaPgeMhA0Cnp4BV47zplvQ-r60VkarCg9JGHQNmIkQfG3llcjc-ZK4UKVkrFZynXhcCsp1ry7TwfRnwtXwQ1kZXDmeQxWFudhVaHwthraFF-fkHmYZpyTDrZQJY2Rn9nWO59ZHNh3I6-KiKdsNzv8Jl5T_dCUVPj7l3w',
87
87
  config: {
88
- appNo: 'aNGnfWKZDQeMYy3wCVHW9V5L'
88
+ appNo: 'MFX5TxlheIKbekZHKoeOVNlo'
89
89
  },
90
90
  providerId: 'demo-provider'
91
91
  }
@@ -135,9 +135,9 @@ export var 携带历史记录实例 = {
135
135
  },
136
136
  args: {
137
137
  url: 'https://m-poc-dev.zaxline.com',
138
- token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiYU5HbmZXS1pEUWVNWXkzd0NWSFc5VjVMIl0sImV4cCI6MTc2Nzg2MTk3NiwianRpIjoiUVpWODZPRVNMQXFRTWNpcUxwYm1zWFk2UWpzIiwiY2xpZW50X2lkIjoiYU5HbmZXS1pEUWVNWXkzd0NWSFc5VjVMIn0.U6GGZ87DYMQLf7wUO6t7ABRlT2dxwKfseaCji0Hj85Clh-26YZ66lq5O6ly54kgwH8KKQ-88X0TGHRajMcg4GDmrIzHJyEj0piIrfmt_iK7MGFmmpyXtob4JppQxcSB_Fv1nwc67kl4QbPTtsoAGpcPRn1b6vQcDjPoCVwzggws-ExKJS4cFskgr-ll6ihawvFm6xT5hUKdaOwfQT--q836S1NW-O2hZwytTujCWn6E1wdo4spYhy2HmzHHTT1spYG0vs1tr6iBY01mJpcMRDr4kJFFQah5a6H_-TxwO2mOMcjuvHeb1wle-00GwtsQryTz0awKRGqNqR6tLJD_7Rg',
138
+ token: 'eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoiVjRTT0htSm8zWmVhNFJOdWc3WFgyQT09Iiwic2NvcGUiOlsiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIl0sImV4cCI6MTc2Nzk1MjM0NywianRpIjoiSHpLMll4cVdjSTA3QWtmOHlsQXYwV0w0aE5jIiwiY2xpZW50X2lkIjoiTUZYNVR4bGhlSUtiZWtaSEtvZU9WTmxvIn0.AjABoyZFxAACkfy-ywLlfaJd6YY0Ir3pBGx_-HzW9di9p_4rnptbFI4adk9pktSVtlLB0cs45SU6uzp6VCJUj9-q-MP8QBqL6i7u2HV9e-kuBJgyIZD4t0PsazpJNu4rDlBAymYzw73ptLPjCwsUkckUz4Xhy1WmR8mpmuG0nuSWzlDlWKiaPgeMhA0Cnp4BV47zplvQ-r60VkarCg9JGHQNmIkQfG3llcjc-ZK4UKVkrFZynXhcCsp1ry7TwfRnwtXwQ1kZXDmeQxWFudhVaHwthraFF-fkHmYZpyTDrZQJY2Rn9nWO59ZHNh3I6-KiKdsNzv8Jl5T_dCUVPj7l3w',
139
139
  config: {
140
- appNo: 'aNGnfWKZDQeMYy3wCVHW9V5L',
140
+ appNo: 'MFX5TxlheIKbekZHKoeOVNlo',
141
141
  session: {
142
142
  showSessionList: true
143
143
  }