@touchvue/chat 1.0.0-beta.48 → 1.0.0-beta.49

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 (42) hide show
  1. package/es/package.json.mjs +1 -1
  2. package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs +19 -8
  3. package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs.map +1 -1
  4. package/es/packages/components/touchchat/component/UploadView.vue2.mjs +51 -14
  5. package/es/packages/components/touchchat/component/UploadView.vue2.mjs.map +1 -1
  6. package/es/packages/components/touchchat/src/AiChat/Chat/types.mjs.map +1 -1
  7. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs +3 -1
  8. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -1
  9. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +14 -4
  10. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -1
  11. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +10 -1
  12. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
  13. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +39 -0
  14. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs.map +1 -1
  15. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs +32 -11
  16. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs.map +1 -1
  17. package/es/packages/components/touchchat/src/index.vue2.mjs +7 -2
  18. package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
  19. package/es/packages/components/touchchat/src/types/a2a.mjs.map +1 -1
  20. package/lib/package.json.js +1 -1
  21. package/lib/packages/components/touchchat/component/QuoteContent.vue2.js +18 -7
  22. package/lib/packages/components/touchchat/component/QuoteContent.vue2.js.map +1 -1
  23. package/lib/packages/components/touchchat/component/UploadView.vue2.js +50 -13
  24. package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -1
  25. package/lib/packages/components/touchchat/src/AiChat/Chat/types.js.map +1 -1
  26. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js +3 -1
  27. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -1
  28. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +14 -4
  29. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -1
  30. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +10 -1
  31. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
  32. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +39 -0
  33. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js.map +1 -1
  34. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js +31 -10
  35. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js.map +1 -1
  36. package/lib/packages/components/touchchat/src/index.vue2.js +6 -1
  37. package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
  38. package/lib/packages/components/touchchat/src/types/a2a.js.map +1 -1
  39. package/package.json +1 -1
  40. package/theme/components/index.css +41 -0
  41. package/theme/index.css +41 -0
  42. package/theme/skin/default.css +41 -0
@@ -1 +1 @@
1
- {"version":3,"file":"useChat.js","sources":["../../../../../../../../packages/components/touchchat/src/AiChat/Chat/useChat.ts"],"sourcesContent":["/**\n * 主聊天逻辑 Composable\n */\n\nimport { ref, watch, type Ref, nextTick } from 'vue'\nimport { MessageAction, ThinkStatus, type ChatMessage, type ModuleItem, type FileItem, type MessageProcessor, ChatMsgList } from './types'\nimport { createScriptMatcher } from './scriptMatcher'\nimport { useSSE } from './useSSE'\nimport { useScroll } from './useScroll'\nimport { useMessageRender } from './useMessageRender'\nimport { useCopy } from './useCopy'\n\nexport interface UseChatOptions {\n\tprops: { value: ChatMessage[] }\n\temit: (event: string, ...args: any[]) => void\n\tscripts: any[]\n\tunmatchText: string\n\tmodules: (string | ModuleItem)[]\n\tafterSend: (result: object) => void\n\tsendMessageInject: (value: string, fileList?: any[]) => void\n\tbeforeSend: () => { result: boolean; componentName?: string } | Promise<{ result: boolean; componentName?: string }>\n\tbottom: () => void\n\tstop: (item: ChatMessage, index: number) => void\n\tchatContainer: Ref<HTMLElement | null>\n\tchatInputRef?: Ref<any | null>\n}\n\nexport function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMessageInject, beforeSend, bottom, stop, chatContainer, chatInputRef }: UseChatOptions) {\n\t// 组件状态\n\tconst isMounted = ref(false)\n\tconst isChating = ref(false)\n\tconst inputValue = ref('')\n\tconst enableDeepThinking = ref(false)\n\tconst chatList = ref<ChatMessage[]>([])\n\tconst currIndex = ref(0)\n\tconst isUnmounting = ref(false)\n\tconst currentComponentName = ref('')\n\tconst fileData = ref<FileItem[]>([])\n\tconst activeAgentsName = ref<string>('')\n\tconst moduleInfo = ref<ModuleItem>((modules[0] as ModuleItem) || { name: 'deepseek-v3' })\n\tconst isDragging = ref(false)\n\tconst typeFlag = ref('')\n\n\t// 消息处理器状态\n\tconst currentMessageProcessor = ref<MessageProcessor | null>(null)\n\n\t// 消息渲染 composable\n\tconst { htmlContentRef, thinkingContentRef, reasoningContentRef, markdownToHtml, renderContent, enqueueRender } = useMessageRender({\n\t\tchatList,\n\t\tcurrIndex,\n\t\tisMounted,\n\t\tisUnmounting\n\t})\n\n\t// 滚动 composable\n\tconst { scrollToBottom, handleScroll } = useScroll({\n\t\tchatContainer,\n\t\tisMounted,\n\t\tisUnmounting,\n\t\tbottom\n\t})\n\n\t// 复制功能 composable\n\tconst { copyToClipboard } = useCopy()\n\n\t// 脚本匹配 - 需要将数组包装为 ref\n\tconst scriptsRef = ref(scripts)\n\tconst { activeScript, findMatchingScriptContent } = createScriptMatcher({\n\t\tscripts: scriptsRef,\n\t\tactiveAgentsName,\n\t\tfileData,\n\t\tunmatchText\n\t})\n\n\t// SSE\n\tconst { fetchStream, resultItem, openSSE, cleanupSSE } = useSSE({\n\t\tchatList,\n\t\tcurrIndex,\n\t\tisChating,\n\t\tisMounted,\n\t\tisUnmounting,\n\t\tinputValue,\n\t\tenableDeepThinking,\n\t\tcurrentComponentName,\n\t\ttypeFlag,\n\t\tmoduleInfo,\n\t\temit,\n\t\tafterSend,\n\t\tenqueueRender,\n\t\trenderContent,\n\t\tmarkdownToHtml,\n\t\tscrollToBottom,\n\t\tstop\n\t})\n\n\t// 监听 activeAgentsName\n\twatch(\n\t\t() => activeAgentsName,\n\t\t(val: any) => {\n\t\t\tif (!val) {\n\t\t\t\tactiveAgentsName.value = localStorage.getItem('activeAgentsName') as string\n\t\t\t}\n\t\t},\n\t\t{ immediate: true }\n\t)\n\n\t// 消息管理工具函数\n\tconst messageUtils = {\n\t\tupdateMessage: (index: number, updates: Partial<ChatMessage>): void => {\n\t\t\tif (index < 0 || index >= chatList.value.length) return\n\t\t\tchatList.value.splice(index, 1, { ...chatList.value[index], ...updates })\n\t\t\tnextTick(() => {\n\t\t\t\tconst message = chatList.value[index]\n\t\t\t\tif (message) {\n\t\t\t\t\trenderContent(message.content, 'main', index)\n\t\t\t\t\tif (message.thinkContent) {\n\t\t\t\t\t\trenderContent(message.thinkContent, 'thinking', index)\n\t\t\t\t\t}\n\t\t\t\t\tif (message.reasoningContent) {\n\t\t\t\t\t\trenderContent(message.reasoningContent, 'reasoning', index)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tdeleteMessageChain: (index: number): void => {\n\t\t\tif (index < 0 || index >= chatList.value.length) return\n\t\t\tif (chatList.value[index].user === 'u') {\n\t\t\t\tlet deleteCount = 1\n\t\t\t\tfor (let i = index + 1; i < chatList.value.length; i++) {\n\t\t\t\t\tif (chatList.value[i].user === 'ai') {\n\t\t\t\t\t\tdeleteCount++\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tchatList.value.splice(index, deleteCount)\n\t\t\t} else {\n\t\t\t\tchatList.value.splice(index, 1)\n\t\t\t}\n\t\t},\n\n\t\tcreateStandardMessage: (data: Partial<ChatMessage>): ChatMessage => ({\n\t\t\tchatId: data.chatId || 'ai_' + Math.random().toString(36).slice(2).padEnd(10, '0').slice(0, 10),\n\t\t\tuser: data.user || 'ai',\n\t\t\ttype: data.type || 'text',\n\t\t\tcontent: data.content || '',\n\t\t\tisChating: data.isChating ?? false,\n\t\t\tthinkContent: data.thinkContent || '',\n\t\t\treasoningContent: data.reasoningContent || '',\n\t\t\tisLiked: data.isLiked ?? false,\n\t\t\tisDisliked: data.isDisliked ?? false,\n\t\t\tisEditing: data.isEditing ?? false,\n\t\t\teditContent: data.editContent ?? '',\n\t\t\tmsgList: []\n\t\t})\n\t}\n\n\t// 更新消息\n\tconst update = (index: number, message: object) => {\n\t\tchatList.value[index] = { ...chatList.value[index], ...message }\n\t\t// console.log('update', chatList.value[index])\n\t}\n\n\t// 更新模块信息\n\tconst updateModule = (info: ModuleItem) => {\n\t\tmoduleInfo.value = info\n\t}\n\n\t// 处理智能体选择\n\tconst handleAgentSelect = (item: any) => {\n\t\tlocalStorage.setItem('activeAgentsName', item.name)\n\t\tconst aiMessage = item.intro\n\t\tmessageUtils.updateMessage(0, {\n\t\t\tcontent: '',\n\t\t\tisChating: false\n\t\t})\n\t\tsimulateStreamOutput(0, aiMessage)\n\t}\n\n\t// 渲染完成回调\n\tconst completeRendered = (chatId: string) => {\n\t\t// console.log('completeRendered', '渲染完成', chatId)\n\t\tif (currentMessageProcessor.value) {\n\t\t\tcurrentMessageProcessor.value.handleMessageComplete(chatId)\n\t\t}\n\t}\n\n\t// 初始化函数\n\tconst init = (): void => {\n\t\ttry {\n\t\t\tif (Array.isArray(props.value) && props.value.length && !scripts.length) {\n\t\t\t\tchatList.value = props.value.map((item: any) => ({\n\t\t\t\t\t...item,\n\t\t\t\t\tcontent: item.thinkContent ? item.content || '' : item.content || '',\n\t\t\t\t\tthinkContent: item.thinkContent || ''\n\t\t\t\t}))\n\n\t\t\t\tnextTick(() => {\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tif (activeAgentsName.value && chatList.value.length > 0 && chatList.value[0].user === 'ai') {\n\t\t\t\t\t\t\tconst aiMessage = chatList.value[0]\n\t\t\t\t\t\t\tmessageUtils.updateMessage(0, {\n\t\t\t\t\t\t\t\tcontent: '',\n\t\t\t\t\t\t\t\tisChating: true\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tsimulateStreamOutput(0, aiMessage.content)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchatList.value.forEach((item: any) => {\n\t\t\t\t\t\t\t\tif (item.thinkContent) {\n\t\t\t\t\t\t\t\t\trenderContent(item.thinkContent, 'thinking')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (item.reasoningContent) {\n\t\t\t\t\t\t\t\t\trenderContent(item.reasoningContent, 'reasoning')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (item.content) {\n\t\t\t\t\t\t\t\t\trenderContent(item.content, 'main')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// console.error('初始化失败:', error)\n\t\t}\n\t}\n\n\t// 模拟流式输出\n\tconst simulateStreamOutput = (aiIndex: number, msg: string | ChatMessage, callback?: () => void) => {\n\t\tconst message: string = typeof msg === 'string' ? msg : msg.content\n\t\tconst componentName = typeof msg === 'string' ? '' : msg.needSequenceProcessing ? msg.needSequenceType : ''\n\t\tconst isNeedSequenceProcessing = typeof msg === 'string' ? false : msg.needSequenceProcessing\n\n\t\tconst fn = () => {\n\t\t\tclearInterval(interval)\n\t\t\temit('sendMessage', [...chatList.value])\n\t\t\tif (componentName) {\n\t\t\t\tchatList.value[aiIndex].componentName = componentName\n\t\t\t}\n\t\t\tmessageUtils.updateMessage(aiIndex, {\n\t\t\t\tisChating: false\n\t\t\t})\n\t\t\tnextTick(() => {\n\t\t\t\trenderContent(message, 'main', aiIndex)\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tscrollToBottom()\n\t\t\t\t\tif (!isNeedSequenceProcessing && callback) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\tlet index = 0\n\t\tconst interval = setInterval(() => {\n\t\t\tif (index < message.length) {\n\t\t\t\tconst newContent = message\n\t\t\t\tmessageUtils.updateMessage(aiIndex, {\n\t\t\t\t\tcontent: newContent\n\t\t\t\t})\n\t\t\t\tnextTick(() => {\n\t\t\t\t\trenderContent(newContent, 'main', aiIndex)\n\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tindex++\n\t\t\t} else {\n\t\t\t\tfn()\n\t\t\t}\n\t\t}, 50)\n\t}\n\n\t// 监听props.value变化\n\twatch(\n\t\t() => props.value,\n\t\t(newVal: any, oldVal: any) => {\n\t\t\tif (!Array.isArray(newVal)) return\n\t\t\tif (newVal.length && JSON.stringify(newVal) !== JSON.stringify(oldVal)) {\n\t\t\t\tchatList.value = newVal.map(item => ({\n\t\t\t\t\t...item,\n\t\t\t\t\tcontent: item.thinkContent ? item.content || '' : item.content || '',\n\t\t\t\t\tthinkContent: item.thinkContent || ''\n\t\t\t\t}))\n\n\t\t\t\tnextTick(() => {\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tchatList.value.forEach((item: any) => {\n\t\t\t\t\t\t\tif (item.thinkContent) {\n\t\t\t\t\t\t\t\trenderContent(item.thinkContent, 'thinking')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (item.reasoningContent) {\n\t\t\t\t\t\t\t\trenderContent(item.reasoningContent, 'reasoning')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (item.content) {\n\t\t\t\t\t\t\t\trenderContent(item.content, 'main')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\t{ deep: true, immediate: true }\n\t)\n\n\t// 发送消息\n\tconst sendMessage = (content?: string, fileList?: any[], auto?: boolean, type?: string): void => {\n\t\tinputValue.value = content || ''\n\t\thandleBeforeSend(content, fileList, auto, type)\n\t}\n\n\t// 发送前处理\n\tconst handleBeforeSend = (content?: string, fileList?: any[], auto?: boolean, type?: string): void => {\n\t\tfileData.value = fileList || []\n\t\tif (beforeSend) {\n\t\t\tconst fn = beforeSend() as any\n\t\t\tif (fn && typeof fn.then === 'function') {\n\t\t\t\t;(Promise.resolve(fn) as Promise<{ result: boolean; componentName?: string }>)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif (res.result) {\n\t\t\t\t\t\t\tcurrentComponentName.value = res.componentName || ''\n\t\t\t\t\t\t\thandleSend(content, fileList, auto, type)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tconsole.log(error)\n\t\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (fn.result) {\n\t\t\t\t\tcurrentComponentName.value = fn.componentName || ''\n\t\t\t\t\thandleSend(content, fileList, auto, type)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 处理发送\n\tconst handleSend = (content?: string, fileList?: any[], auto?: boolean, type?: string): void => {\n\t\temit('beforeSendMessage')\n\t\tsendMessageInject(inputValue.value, fileData.value)\n\t\ttypeFlag.value = type || ''\n\t\tif (scripts && Array.isArray(scripts) && scripts.length > 0) {\n\t\t\tconst userInput = content ? content.replace(/\\n/g, '') : inputValue.value.replace(/\\n/g, '').trim()\n\t\t\tif (!userInput && !fileList?.length && auto) return\n\n\t\t\t// 添加用户消息\n\t\t\tconst userChatId = `user_${Date.now()}`\n\t\t\tconst userMessage: ChatMessage & ChatMsgList = {\n\t\t\t\tchatId: userChatId,\n\t\t\t\tuser: 'u',\n\t\t\t\ttype: 'text',\n\t\t\t\tcontent: userInput,\n\t\t\t\tisShowLike: false,\n\t\t\t\tisShowCopy: true,\n\t\t\t\tisWithDraw: false,\n\t\t\t\tisRead: false,\n\t\t\t\tfiles: fileList || [],\n\t\t\t\ttypeFlag: type,\n\t\t\t\tauto: auto || false,\n\t\t\t\tmsgList: []\n\t\t\t}\n\t\t\tchatList.value.push(userMessage)\n\t\t\temit('sendMessage', [...chatList.value])\n\n\t\t\t// 滚动到底部\n\t\t\tnextTick(() => {\n\t\t\t\trenderContent(userMessage.content, 'main', chatList.value.length - 1)\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tscrollToBottom()\n\t\t\t\t})\n\t\t\t})\n\n\t\t\t// 查找匹配的脚本内容\n\t\t\tconst result = findMatchingScriptContent(userInput)\n\n\t\t\tif (result && result.responses.length > 0) {\n\t\t\t\t// 存储新AI消息的数组\n\t\t\t\tconst newAiMessages: ChatMessage[] = []\n\n\t\t\t\tresult.responses.forEach((response: any, idx: number) => {\n\t\t\t\t\tconst pauseMarker = Array.isArray(response.data) ? '\\u200B'.repeat(20) : ''\n\t\t\t\t\tconst content = Array.isArray(response.data) ? response.data.join(pauseMarker) : response.data\n\n\t\t\t\t\tconst aiChatId = `ai_${Date.now()}_${idx}`\n\t\t\t\t\tconst aiMessage: ChatMessage = {\n\t\t\t\t\t\tchatId: aiChatId,\n\t\t\t\t\t\tuser: 'ai',\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\tcontent: content || '',\n\t\t\t\t\t\tcomponentName: response.type || '',\n\t\t\t\t\t\tisShowLike: true,\n\t\t\t\t\t\tisShowCopy: true,\n\t\t\t\t\t\tneedSequenceType: response.type || '',\n\t\t\t\t\t\tneedSequenceProcessing: response.needSequenceProcessing || false,\n\t\t\t\t\t\ttypeFlag: type,\n\t\t\t\t\t\tmsgList: [],\n\t\t\t\t\t\tlikeList: response.likeList\n\t\t\t\t\t}\n\t\t\t\t\tnewAiMessages.push(aiMessage)\n\t\t\t\t})\n\n\t\t\t\t// 创建消息处理器相关变量\n\t\t\t\tconst messageQueue = [...newAiMessages]\n\t\t\t\tlet isProcessing = false\n\t\t\t\tlet currentMessage: ChatMessage | null = null\n\n\t\t\t\t// 处理下一条消息\n\t\t\t\tconst processNextMessage = () => {\n\t\t\t\t\tif (messageQueue.length > 0 && !isProcessing) {\n\t\t\t\t\t\tisProcessing = true\n\t\t\t\t\t\tconst nextMessage = messageQueue.shift()\n\t\t\t\t\t\tif (nextMessage) {\n\t\t\t\t\t\t\tcurrentMessage = nextMessage\n\t\t\t\t\t\t\tchatList.value.push(currentMessage)\n\t\t\t\t\t\t\temit('sendMessage', [...chatList.value])\n\t\t\t\t\t\t\tconst msgIndex = chatList.value.length - 1\n\t\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\t\trenderContent(currentMessage?.content || '', 'main', msgIndex)\n\t\t\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t\t\t\t\tif (currentMessage) {\n\t\t\t\t\t\t\t\t\t\tconst messageToProcess = {\n\t\t\t\t\t\t\t\t\t\t\t...currentMessage,\n\t\t\t\t\t\t\t\t\t\t\tneedSequenceProcessing: true\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tsimulateStreamOutput(msgIndex, messageToProcess)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 处理消息完成事件\n\t\t\t\tconst handleMessageComplete = (chatId: string) => {\n\t\t\t\t\tif (currentMessage && currentMessage.chatId === chatId) {\n\t\t\t\t\t\tcurrentMessage = null\n\t\t\t\t\t\tisProcessing = false\n\t\t\t\t\t\tprocessNextMessage()\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 保存消息处理器\n\t\t\t\tconst processorObj = {\n\t\t\t\t\tmessageQueue,\n\t\t\t\t\tisProcessing,\n\t\t\t\t\tcurrentMessage,\n\t\t\t\t\tprocessNextMessage,\n\t\t\t\t\thandleMessageComplete\n\t\t\t\t}\n\t\t\t\tcurrentMessageProcessor.value = processorObj\n\n\t\t\t\t// 开始处理消息队列\n\t\t\t\tprocessNextMessage()\n\t\t\t} else {\n\t\t\t\t// 插入默认AI回复\n\t\t\t\tconst defaultAiChatId = `ai_${Date.now()}`\n\t\t\t\tconst defaultAiMessage: ChatMessage = {\n\t\t\t\t\tchatId: defaultAiChatId,\n\t\t\t\t\tuser: 'ai',\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tcontent: unmatchText,\n\t\t\t\t\tisShowLike: true,\n\t\t\t\t\tisShowCopy: true,\n\t\t\t\t\tmsgList: []\n\t\t\t\t}\n\t\t\t\tchatList.value.push(defaultAiMessage)\n\t\t\t\temit('sendMessage', [...chatList.value])\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tconst msgIndex = chatList.value.findIndex((item: any) => item.chatId === defaultAiChatId)\n\t\t\t\t\tif (msgIndex !== -1) {\n\t\t\t\t\t\trenderContent(defaultAiMessage.content, 'main', msgIndex)\n\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tinputValue.value = ''\n\t\t} else {\n\t\t\tconsole.log('content === useChat === 488', content)\n\t\t\t// 无脚本模式,直接发送\n\t\t\tif (content) {\n\t\t\t\tinputValue.value = content\n\t\t\t}\n\t\t\tif ((isChating.value || (!inputValue.value.trim() && !fileList?.length)) && !auto) return\n\n\t\t\tconst userChatId = 'user_' + Math.random().toString(36).slice(2).padEnd(10, '0').slice(0, 10)\n\t\t\tconst userMessage: ChatMessage & ChatMsgList = {\n\t\t\t\tchatId: userChatId,\n\t\t\t\tuser: 'u',\n\t\t\t\ttype: 'text',\n\t\t\t\tcontent: inputValue.value,\n\t\t\t\tfiles: fileList || [],\n\t\t\t\tmsgList: [],\n\t\t\t\tisRead: false\n\t\t\t}\n\t\t\tchatList.value.push(userMessage)\n\t\t\tconst index = chatList.value.length - 1\n\t\t\tnextTick(() => {\n\t\t\t\trenderContent(userMessage.content, 'main', index)\n\t\t\t\tscrollToBottom()\n\t\t\t})\n\t\t\tconsole.log('openSSE === useChat === 511')\n\t\t\topenSSE(inputValue.value, index + 1)\n\t\t\tinputValue.value = ''\n\t\t}\n\t}\n\n\t// 停止生成\n\tconst handleStop = (): void => {\n\t\tcleanupSSE()\n\n\t\tconst aiIndex = chatList.value.findIndex((item: any) => item.isChating)\n\t\tif (aiIndex !== -1) {\n\t\t\tconst currentAiMessage = chatList.value[aiIndex]\n\n\t\t\tif (currentAiMessage.content?.trim()) {\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tchatList.value[aiIndex] = {\n\t\t\t\t\t\t...currentAiMessage,\n\t\t\t\t\t\tcontent: currentAiMessage.content + '...',\n\t\t\t\t\t\tisChating: false\n\t\t\t\t\t}\n\t\t\t\t\trenderContent(chatList.value[aiIndex].content, 'main', aiIndex)\n\t\t\t\t\temit('sendMessage', chatList.value)\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (aiIndex > 0) {\n\t\t\t\t\tconst userMessageIndex = aiIndex - 1\n\t\t\t\t\tif (chatList.value[userMessageIndex].user === 'u') {\n\t\t\t\t\t\tchatList.value.splice(userMessageIndex, 2)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchatList.value.splice(aiIndex, 1)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tchatList.value.splice(aiIndex, 1)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst lastIndex = chatList.value.length - 1\n\t\t\tif (lastIndex >= 0 && chatList.value[lastIndex].user === 'u') {\n\t\t\t\tchatList.value.pop()\n\t\t\t}\n\t\t}\n\n\t\tisChating.value = false\n\t}\n\n\t// 处理消息操作\n\tconst handleMessageAction = (action: MessageAction, index: number): void => {\n\t\tconst message = chatList.value[index]\n\t\tif (!message) return\n\n\t\tswitch (action) {\n\t\t\tcase MessageAction.COPY: {\n\t\t\t\t// 使用复制功能\n\t\t\t\tcopyToClipboard(message.content, '复制成功', '复制失败')\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase MessageAction.EDIT:\n\t\t\t\tmessage.isEditing = true\n\t\t\t\tmessage.editContent = message.content\n\t\t\t\tbreak\n\t\t\tcase MessageAction.DELETE:\n\t\t\t\tmessageUtils.deleteMessageChain(index)\n\t\t\t\temit('sendMessage', chatList.value)\n\t\t\t\tbreak\n\t\t\tcase MessageAction.RETRY: {\n\t\t\t\tconst aiMessage = chatList.value[index]\n\t\t\t\tconst userMessageIndex = index - 1\n\t\t\t\tconst userMessage = chatList.value[userMessageIndex]\n\n\t\t\t\tif (userMessage && userMessage.user === 'u') {\n\t\t\t\t\tconst updatedAiMessage = {\n\t\t\t\t\t\t...aiMessage,\n\t\t\t\t\t\tcontent: '',\n\t\t\t\t\t\tthinkContent: '',\n\t\t\t\t\t\treasoningContent: '',\n\t\t\t\t\t\tisLiked: false,\n\t\t\t\t\t\tisDisliked: false,\n\t\t\t\t\t\tisChating: true,\n\t\t\t\t\t\tisRead: false,\n\t\t\t\t\t\tchatId: aiMessage.chatId,\n\t\t\t\t\t\tuser: aiMessage.user,\n\t\t\t\t\t\ttype: aiMessage.type,\n\t\t\t\t\t\tthinkStatus: ThinkStatus.COMPLETED,\n\t\t\t\t\t\tthinkStartTime: 0,\n\t\t\t\t\t\tthinkEndTime: 0\n\t\t\t\t\t}\n\t\t\t\t\tchatList.value.splice(index, 1, updatedAiMessage)\n\n\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\tif (htmlContentRef.value[index]) htmlContentRef.value[index].innerHTML = ''\n\t\t\t\t\t\tif (thinkingContentRef.value[index]) thinkingContentRef.value[index].innerHTML = ''\n\t\t\t\t\t\tif (reasoningContentRef.value[index]) reasoningContentRef.value[index].innerHTML = ''\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\topenSSE(userMessage.content || '', index)\n\t\t\t\t\t\t}, 50)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase MessageAction.LIKE:\n\t\t\t\tmessageUtils.updateMessage(index, {\n\t\t\t\t\tisLiked: true,\n\t\t\t\t\tisDisliked: false\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase MessageAction.DISLIKE:\n\t\t\t\tmessageUtils.updateMessage(index, {\n\t\t\t\t\tisLiked: false,\n\t\t\t\t\tisDisliked: true\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase MessageAction.WITHDRAW:\n\t\t\t\tconsole.log('withDraw')\n\t\t\t\tmessageUtils.updateMessage(index, {\n\t\t\t\t\tisWithDraw: true,\n\t\t\t\t\tuser: 'withDraw'\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\t// 保存编辑\n\tconst saveEdit = (index: number, newContent: string): void => {\n\t\tconst message = chatList.value[index]\n\t\tif (!message || !message.editContent) return\n\n\t\tchatList.value[index] = {\n\t\t\t...message,\n\t\t\tcontent: newContent,\n\t\t\tisEditing: false,\n\t\t\teditContent: undefined\n\t\t}\n\t\tnextTick(() => {\n\t\t\trenderContent(newContent, 'main', index)\n\t\t})\n\n\t\t// 删除后续的AI回复(如果有)\n\t\tconst hasDeletedAi = index + 1 < chatList.value.length && chatList.value[index + 1].user === 'ai'\n\t\tif (hasDeletedAi) {\n\t\t\tchatList.value.splice(index + 1, 1)\n\t\t}\n\n\t\t// 计算插入新AI消息的位置\n\t\t// 无论是否删除了AI消息,插入位置都是 index + 1\n\t\tconst insertPosition = index + 1\n\t\t// console.log('saveEdit调用openSSE,index:', index, 'insertPosition:', insertPosition, 'newContent:', newContent)\n\n\t\t// 等待下一个tick,确保Vue已经更新了DOM和refs\n\t\tnextTick(() => {\n\t\t\topenSSE(newContent, insertPosition)\n\t\t})\n\t\temit('sendMessage', chatList.value)\n\t}\n\n\t// 取消编辑\n\tconst cancelEdit = (index: number): void => {\n\t\tconst message = chatList.value[index]\n\t\tif (!message) return\n\n\t\tmessage.isEditing = false\n\t\tmessage.editContent = ''\n\t\tnextTick(() => {\n\t\t\trenderContent(message.content, 'main', index)\n\t\t})\n\t}\n\n\t// 处理拖拽事件\n\tconst handleDragEnter = () => {\n\t\tisDragging.value = true\n\t\t// 打开标记层以显示拖拽区域\n\t\tif (chatInputRef?.value) {\n\t\t\tchatInputRef.value.openMarkLayer()\n\t\t}\n\t}\n\n\tconst handleDragLeave = (e: DragEvent) => {\n\t\tconst rect = (e.target as HTMLElement).getBoundingClientRect()\n\t\tif (e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom) {\n\t\t\tisDragging.value = false\n\t\t}\n\t}\n\n\tconst handleDrop = async (e: DragEvent) => {\n\t\tisDragging.value = false\n\n\t\t// 获取拖拽的文件\n\t\tconst files = e.dataTransfer?.files\n\t\tif (files && files.length > 0) {\n\t\t\tconst fileList = await Promise.all(\n\t\t\t\tArray.from(files).map(async file => {\n\t\t\t\t\tlet base64 = ''\n\t\t\t\t\tif (file.type.startsWith('image/')) {\n\t\t\t\t\t\tbase64 = await new Promise(resolve => {\n\t\t\t\t\t\t\tconst reader = new FileReader()\n\t\t\t\t\t\t\treader.onload = e => {\n\t\t\t\t\t\t\t\tresolve(e.target?.result as string)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treader.readAsDataURL(file)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: Math.random().toString(36).slice(2).padEnd(10, '0').slice(0, 10),\n\t\t\t\t\t\tfile: file,\n\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t\tfileType: file.type,\n\t\t\t\t\t\tfileSize: file.size,\n\t\t\t\t\t\tlastModified: file.lastModified,\n\t\t\t\t\t\tpreview: URL.createObjectURL(file),\n\t\t\t\t\t\tbase64\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t\t// 调用 ChatInput 的 handlePaste 方法处理拖拽的文件\n\t\t\tif (chatInputRef?.value) {\n\t\t\t\tchatInputRef.value.handlePaste(fileList, 'drop')\n\t\t\t}\n\t\t}\n\n\t\t// 关闭标记层\n\t\tif (chatInputRef?.value) {\n\t\t\tchatInputRef.value.colseMarkLayer()\n\t\t}\n\t}\n\n\t// 组件生命周期\n\tconst onMounted = () => {\n\t\tif (!isMounted.value) {\n\t\t\tinit()\n\t\t}\n\t\tisMounted.value = true\n\t}\n\n\tconst onBeforeUnmount = () => {\n\t\tif (!isUnmounting.value) {\n\t\t\tisUnmounting.value = true\n\t\t\tcleanupSSE()\n\t\t\tisMounted.value = false\n\t\t}\n\t}\n\n\treturn {\n\t\t// 状态\n\t\tchatList,\n\t\tisChating,\n\t\tinputValue,\n\t\tenableDeepThinking,\n\t\tisMounted,\n\t\tisUnmounting,\n\t\tcurrentComponentName,\n\t\tfileData,\n\t\tactiveAgentsName,\n\t\tmoduleInfo,\n\t\tisDragging,\n\t\ttypeFlag,\n\t\tcurrIndex,\n\t\tfetchStream,\n\t\tresultItem,\n\t\tcurrentMessageProcessor,\n\t\tactiveScript,\n\t\thtmlContentRef,\n\t\tthinkingContentRef,\n\t\treasoningContentRef,\n\t\t// 方法\n\t\tinit,\n\t\tsendMessage,\n\t\thandleBeforeSend,\n\t\thandleSend,\n\t\thandleStop,\n\t\thandleMessageAction,\n\t\tsaveEdit,\n\t\tcancelEdit,\n\t\tcompleteRendered,\n\t\thandleAgentSelect,\n\t\tupdate,\n\t\tupdateModule,\n\t\tmessageUtils,\n\t\tsimulateStreamOutput,\n\t\thandleDragEnter,\n\t\thandleDragLeave,\n\t\thandleDrop,\n\t\tonMounted,\n\t\tonBeforeUnmount,\n\t\tcleanupSSE,\n\t\tscrollToBottom,\n\t\thandleScroll,\n\t\trenderContent,\n\t\tenqueueRender\n\t}\n}\n"],"names":["ref","useMessageRender","useScroll","useCopy","createScriptMatcher","useSSE","watch","nextTick","content","MessageAction","ThinkStatus","e","_a"],"mappings":"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"}
1
+ {"version":3,"file":"useChat.js","sources":["../../../../../../../../packages/components/touchchat/src/AiChat/Chat/useChat.ts"],"sourcesContent":["/**\n * 主聊天逻辑 Composable\n */\n\nimport { ref, watch, type Ref, nextTick } from 'vue'\nimport { MessageAction, ThinkStatus, type ChatMessage, type ModuleItem, type FileItem, type MessageProcessor, ChatMsgList } from './types'\nimport { createScriptMatcher } from './scriptMatcher'\nimport { useSSE } from './useSSE'\nimport { useScroll } from './useScroll'\nimport { useMessageRender } from './useMessageRender'\nimport { useCopy } from './useCopy'\n\nexport interface UseChatOptions {\n\tprops: { value: ChatMessage[] }\n\temit: (event: string, ...args: any[]) => void\n\tscripts: any[]\n\tunmatchText: string\n\tmodules: (string | ModuleItem)[]\n\tafterSend: (result: object) => void\n\tsendMessageInject: (value: string, fileList?: any[]) => void\n\tbeforeSend: () => { result: boolean; componentName?: string } | Promise<{ result: boolean; componentName?: string }>\n\tbottom: () => void\n\tstop: (item: ChatMessage, index: number) => void\n\tchatContainer: Ref<HTMLElement | null>\n\tchatInputRef?: Ref<any | null>\n}\n\nexport function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMessageInject, beforeSend, bottom, stop, chatContainer, chatInputRef }: UseChatOptions) {\n\t// 组件状态\n\tconst isMounted = ref(false)\n\tconst isChating = ref(false)\n\tconst inputValue = ref('')\n\tconst enableDeepThinking = ref(false)\n\tconst chatList = ref<ChatMessage[]>([])\n\tconst currIndex = ref(0)\n\tconst isUnmounting = ref(false)\n\tconst currentComponentName = ref('')\n\tconst fileData = ref<FileItem[]>([])\n\tconst activeAgentsName = ref<string>('')\n\tconst moduleInfo = ref<ModuleItem>((modules[0] as ModuleItem) || { name: 'deepseek-v3' })\n\tconst isDragging = ref(false)\n\tconst typeFlag = ref('')\n\n\t// 消息处理器状态\n\tconst currentMessageProcessor = ref<MessageProcessor | null>(null)\n\n\t// 消息渲染 composable\n\tconst { htmlContentRef, thinkingContentRef, reasoningContentRef, markdownToHtml, renderContent, enqueueRender } = useMessageRender({\n\t\tchatList,\n\t\tcurrIndex,\n\t\tisMounted,\n\t\tisUnmounting\n\t})\n\n\t// 滚动 composable\n\tconst { scrollToBottom, handleScroll } = useScroll({\n\t\tchatContainer,\n\t\tisMounted,\n\t\tisUnmounting,\n\t\tbottom\n\t})\n\n\t// 复制功能 composable\n\tconst { copyToClipboard } = useCopy()\n\n\t// 脚本匹配 - 需要将数组包装为 ref\n\tconst scriptsRef = ref(scripts)\n\tconst { activeScript, findMatchingScriptContent } = createScriptMatcher({\n\t\tscripts: scriptsRef,\n\t\tactiveAgentsName,\n\t\tfileData,\n\t\tunmatchText\n\t})\n\n\t// SSE\n\tconst { fetchStream, resultItem, openSSE, cleanupSSE } = useSSE({\n\t\tchatList,\n\t\tcurrIndex,\n\t\tisChating,\n\t\tisMounted,\n\t\tisUnmounting,\n\t\tinputValue,\n\t\tenableDeepThinking,\n\t\tcurrentComponentName,\n\t\ttypeFlag,\n\t\tmoduleInfo,\n\t\temit,\n\t\tfileData,\n\t\tafterSend,\n\t\tenqueueRender,\n\t\trenderContent,\n\t\tmarkdownToHtml,\n\t\tscrollToBottom,\n\t\tstop\n\t})\n\n\t// 监听 activeAgentsName\n\twatch(\n\t\t() => activeAgentsName,\n\t\t(val: any) => {\n\t\t\tif (!val) {\n\t\t\t\tactiveAgentsName.value = localStorage.getItem('activeAgentsName') as string\n\t\t\t}\n\t\t},\n\t\t{ immediate: true }\n\t)\n\n\t// 消息管理工具函数\n\tconst messageUtils = {\n\t\tupdateMessage: (index: number, updates: Partial<ChatMessage>): void => {\n\t\t\tif (index < 0 || index >= chatList.value.length) return\n\t\t\tchatList.value.splice(index, 1, { ...chatList.value[index], ...updates })\n\t\t\tnextTick(() => {\n\t\t\t\tconst message = chatList.value[index]\n\t\t\t\tif (message) {\n\t\t\t\t\trenderContent(message.content, 'main', index)\n\t\t\t\t\tif (message.thinkContent) {\n\t\t\t\t\t\trenderContent(message.thinkContent, 'thinking', index)\n\t\t\t\t\t}\n\t\t\t\t\tif (message.reasoningContent) {\n\t\t\t\t\t\trenderContent(message.reasoningContent, 'reasoning', index)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\n\t\tdeleteMessageChain: (index: number): void => {\n\t\t\tif (index < 0 || index >= chatList.value.length) return\n\t\t\tif (chatList.value[index].user === 'u') {\n\t\t\t\tlet deleteCount = 1\n\t\t\t\tfor (let i = index + 1; i < chatList.value.length; i++) {\n\t\t\t\t\tif (chatList.value[i].user === 'ai') {\n\t\t\t\t\t\tdeleteCount++\n\t\t\t\t\t} else {\n\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tchatList.value.splice(index, deleteCount)\n\t\t\t} else {\n\t\t\t\tchatList.value.splice(index, 1)\n\t\t\t}\n\t\t},\n\n\t\tcreateStandardMessage: (data: Partial<ChatMessage>): ChatMessage => ({\n\t\t\tchatId: data.chatId || 'ai_' + Math.random().toString(36).slice(2).padEnd(10, '0').slice(0, 10),\n\t\t\tuser: data.user || 'ai',\n\t\t\ttype: data.type || 'text',\n\t\t\tcontent: data.content || '',\n\t\t\tisChating: data.isChating ?? false,\n\t\t\tthinkContent: data.thinkContent || '',\n\t\t\treasoningContent: data.reasoningContent || '',\n\t\t\tisLiked: data.isLiked ?? false,\n\t\t\tisDisliked: data.isDisliked ?? false,\n\t\t\tisEditing: data.isEditing ?? false,\n\t\t\teditContent: data.editContent ?? '',\n\t\t\tmsgList: []\n\t\t})\n\t}\n\n\t// 更新消息\n\tconst update = (index: number, message: object) => {\n\t\tchatList.value[index] = { ...chatList.value[index], ...message }\n\t\t// console.log('update', chatList.value[index])\n\t}\n\n\t// 更新模块信息\n\tconst updateModule = (info: ModuleItem) => {\n\t\tmoduleInfo.value = info\n\t}\n\n\t// 处理智能体选择\n\tconst handleAgentSelect = (item: any) => {\n\t\tlocalStorage.setItem('activeAgentsName', item.name)\n\t\tconst aiMessage = item.intro\n\t\tmessageUtils.updateMessage(0, {\n\t\t\tcontent: '',\n\t\t\tisChating: false\n\t\t})\n\t\tsimulateStreamOutput(0, aiMessage)\n\t}\n\n\t// 渲染完成回调\n\tconst completeRendered = (chatId: string) => {\n\t\t// console.log('completeRendered', '渲染完成', chatId)\n\t\tif (currentMessageProcessor.value) {\n\t\t\tcurrentMessageProcessor.value.handleMessageComplete(chatId)\n\t\t}\n\t}\n\n\t// 初始化函数\n\tconst init = (): void => {\n\t\ttry {\n\t\t\tif (Array.isArray(props.value) && props.value.length && !scripts.length) {\n\t\t\t\tchatList.value = props.value.map((item: any) => ({\n\t\t\t\t\t...item,\n\t\t\t\t\tcontent: item.thinkContent ? item.content || '' : item.content || '',\n\t\t\t\t\tthinkContent: item.thinkContent || ''\n\t\t\t\t}))\n\n\t\t\t\tnextTick(() => {\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tif (activeAgentsName.value && chatList.value.length > 0 && chatList.value[0].user === 'ai') {\n\t\t\t\t\t\t\tconst aiMessage = chatList.value[0]\n\t\t\t\t\t\t\tmessageUtils.updateMessage(0, {\n\t\t\t\t\t\t\t\tcontent: '',\n\t\t\t\t\t\t\t\tisChating: true\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tsimulateStreamOutput(0, aiMessage.content)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tchatList.value.forEach((item: any) => {\n\t\t\t\t\t\t\t\tif (item.thinkContent) {\n\t\t\t\t\t\t\t\t\trenderContent(item.thinkContent, 'thinking')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (item.reasoningContent) {\n\t\t\t\t\t\t\t\t\trenderContent(item.reasoningContent, 'reasoning')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (item.content) {\n\t\t\t\t\t\t\t\t\trenderContent(item.content, 'main')\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t// console.error('初始化失败:', error)\n\t\t}\n\t}\n\n\t// 模拟流式输出\n\tconst simulateStreamOutput = (aiIndex: number, msg: string | ChatMessage, callback?: () => void) => {\n\t\tconst message: string = typeof msg === 'string' ? msg : msg.content\n\t\tconst componentName = typeof msg === 'string' ? '' : msg.needSequenceProcessing ? msg.needSequenceType : ''\n\t\tconst isNeedSequenceProcessing = typeof msg === 'string' ? false : msg.needSequenceProcessing\n\n\t\tconst fn = () => {\n\t\t\tclearInterval(interval)\n\t\t\temit('sendMessage', [...chatList.value])\n\t\t\tif (componentName) {\n\t\t\t\tchatList.value[aiIndex].componentName = componentName\n\t\t\t}\n\t\t\tmessageUtils.updateMessage(aiIndex, {\n\t\t\t\tisChating: false\n\t\t\t})\n\t\t\tnextTick(() => {\n\t\t\t\trenderContent(message, 'main', aiIndex)\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tscrollToBottom()\n\t\t\t\t\tif (!isNeedSequenceProcessing && callback) {\n\t\t\t\t\t\tcallback()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\tlet index = 0\n\t\tconst interval = setInterval(() => {\n\t\t\tif (index < message.length) {\n\t\t\t\tconst newContent = message\n\t\t\t\tmessageUtils.updateMessage(aiIndex, {\n\t\t\t\t\tcontent: newContent\n\t\t\t\t})\n\t\t\t\tnextTick(() => {\n\t\t\t\t\trenderContent(newContent, 'main', aiIndex)\n\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\tindex++\n\t\t\t} else {\n\t\t\t\tfn()\n\t\t\t}\n\t\t}, 50)\n\t}\n\n\t// 监听props.value变化\n\twatch(\n\t\t() => props.value,\n\t\t(newVal: any, oldVal: any) => {\n\t\t\tif (!Array.isArray(newVal)) return\n\t\t\tif (newVal.length && JSON.stringify(newVal) !== JSON.stringify(oldVal)) {\n\t\t\t\tchatList.value = newVal.map(item => ({\n\t\t\t\t\t...item,\n\t\t\t\t\tcontent: item.thinkContent ? item.content || '' : item.content || '',\n\t\t\t\t\tthinkContent: item.thinkContent || ''\n\t\t\t\t}))\n\n\t\t\t\tnextTick(() => {\n\t\t\t\t\trequestAnimationFrame(() => {\n\t\t\t\t\t\tchatList.value.forEach((item: any) => {\n\t\t\t\t\t\t\tif (item.thinkContent) {\n\t\t\t\t\t\t\t\trenderContent(item.thinkContent, 'thinking')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (item.reasoningContent) {\n\t\t\t\t\t\t\t\trenderContent(item.reasoningContent, 'reasoning')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (item.content) {\n\t\t\t\t\t\t\t\trenderContent(item.content, 'main')\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t}\n\t\t},\n\t\t{ deep: true, immediate: true }\n\t)\n\n\t// 发送消息\n\tconst sendMessage = (content?: string, fileList?: any[], auto?: boolean, type?: string): void => {\n\t\tinputValue.value = content || ''\n\t\thandleBeforeSend(content, fileList, auto, type)\n\t}\n\n\t// 发送前处理\n\tconst handleBeforeSend = (content?: string, fileList?: any[], auto?: boolean, type?: string): void => {\n\t\tfileData.value = fileList || []\n\t\tif (beforeSend) {\n\t\t\tconst fn = beforeSend() as any\n\t\t\tif (fn && typeof fn.then === 'function') {\n\t\t\t\t;(Promise.resolve(fn) as Promise<{ result: boolean; componentName?: string }>)\n\t\t\t\t\t.then(res => {\n\t\t\t\t\t\tif (res.result) {\n\t\t\t\t\t\t\tcurrentComponentName.value = res.componentName || ''\n\t\t\t\t\t\t\thandleSend(content, fileList, auto, type)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.catch(error => {\n\t\t\t\t\t\tconsole.log(error)\n\t\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (fn.result) {\n\t\t\t\t\tcurrentComponentName.value = fn.componentName || ''\n\t\t\t\t\thandleSend(content, fileList, auto, type)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// 处理发送\n\tconst handleSend = (content?: string, fileList?: any[], auto?: boolean, type?: string): void => {\n\t\temit('beforeSendMessage')\n\t\tsendMessageInject(inputValue.value, fileData.value)\n\t\ttypeFlag.value = type || ''\n\t\tif (scripts && Array.isArray(scripts) && scripts.length > 0) {\n\t\t\tconst userInput = content ? content.replace(/\\n/g, '') : inputValue.value.replace(/\\n/g, '').trim()\n\t\t\tif (!userInput && !fileList?.length && auto) return\n\n\t\t\t// 添加用户消息\n\t\t\tconst userChatId = `user_${Date.now()}`\n\t\t\tconst userMessage: ChatMessage & ChatMsgList = {\n\t\t\t\tchatId: userChatId,\n\t\t\t\tuser: 'u',\n\t\t\t\ttype: 'text',\n\t\t\t\tcontent: userInput,\n\t\t\t\tisShowLike: false,\n\t\t\t\tisShowCopy: true,\n\t\t\t\tisWithDraw: false,\n\t\t\t\tisRead: false,\n\t\t\t\tfiles: fileList || [],\n\t\t\t\ttypeFlag: type,\n\t\t\t\tauto: auto || false,\n\t\t\t\tmsgList: [],\n\t\t\t\tselecting: false\n\t\t\t}\n\t\t\tchatList.value.push(userMessage)\n\t\t\temit('sendMessage', [...chatList.value])\n\n\t\t\t// 滚动到底部\n\t\t\tnextTick(() => {\n\t\t\t\trenderContent(userMessage.content, 'main', chatList.value.length - 1)\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tscrollToBottom()\n\t\t\t\t})\n\t\t\t})\n\n\t\t\t// 查找匹配的脚本内容\n\t\t\tconst result = findMatchingScriptContent(userInput)\n\n\t\t\tif (result && result.responses.length > 0) {\n\t\t\t\t// 存储新AI消息的数组\n\t\t\t\tconst newAiMessages: ChatMessage[] = []\n\n\t\t\t\tresult.responses.forEach((response: any, idx: number) => {\n\t\t\t\t\tconst pauseMarker = Array.isArray(response.data) ? '\\u200B'.repeat(20) : ''\n\t\t\t\t\tconst content = Array.isArray(response.data) ? response.data.join(pauseMarker) : response.data\n\n\t\t\t\t\tconst aiChatId = `ai_${Date.now()}_${idx}`\n\t\t\t\t\tconst aiMessage: ChatMessage = {\n\t\t\t\t\t\tchatId: aiChatId,\n\t\t\t\t\t\tuser: 'ai',\n\t\t\t\t\t\ttype: 'text',\n\t\t\t\t\t\tcontent: content || '',\n\t\t\t\t\t\tcomponentName: response.type || '',\n\t\t\t\t\t\tisShowLike: true,\n\t\t\t\t\t\tisShowCopy: true,\n\t\t\t\t\t\tneedSequenceType: response.type || '',\n\t\t\t\t\t\tneedSequenceProcessing: response.needSequenceProcessing || false,\n\t\t\t\t\t\ttypeFlag: type,\n\t\t\t\t\t\tmsgList: [],\n\t\t\t\t\t\tlikeList: response.likeList\n\t\t\t\t\t}\n\t\t\t\t\tnewAiMessages.push(aiMessage)\n\t\t\t\t})\n\n\t\t\t\t// 创建消息处理器相关变量\n\t\t\t\tconst messageQueue = [...newAiMessages]\n\t\t\t\tlet isProcessing = false\n\t\t\t\tlet currentMessage: ChatMessage | null = null\n\n\t\t\t\t// 处理下一条消息\n\t\t\t\tconst processNextMessage = () => {\n\t\t\t\t\tif (messageQueue.length > 0 && !isProcessing) {\n\t\t\t\t\t\tisProcessing = true\n\t\t\t\t\t\tconst nextMessage = messageQueue.shift()\n\t\t\t\t\t\tif (nextMessage) {\n\t\t\t\t\t\t\tcurrentMessage = nextMessage\n\t\t\t\t\t\t\tchatList.value.push(currentMessage)\n\t\t\t\t\t\t\temit('sendMessage', [...chatList.value])\n\t\t\t\t\t\t\tconst msgIndex = chatList.value.length - 1\n\t\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\t\trenderContent(currentMessage?.content || '', 'main', msgIndex)\n\t\t\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t\t\t\t\tif (currentMessage) {\n\t\t\t\t\t\t\t\t\t\tconst messageToProcess = {\n\t\t\t\t\t\t\t\t\t\t\t...currentMessage,\n\t\t\t\t\t\t\t\t\t\t\tneedSequenceProcessing: true\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tsimulateStreamOutput(msgIndex, messageToProcess)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 处理消息完成事件\n\t\t\t\tconst handleMessageComplete = (chatId: string) => {\n\t\t\t\t\tif (currentMessage && currentMessage.chatId === chatId) {\n\t\t\t\t\t\tcurrentMessage = null\n\t\t\t\t\t\tisProcessing = false\n\t\t\t\t\t\tprocessNextMessage()\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// 保存消息处理器\n\t\t\t\tconst processorObj = {\n\t\t\t\t\tmessageQueue,\n\t\t\t\t\tisProcessing,\n\t\t\t\t\tcurrentMessage,\n\t\t\t\t\tprocessNextMessage,\n\t\t\t\t\thandleMessageComplete\n\t\t\t\t}\n\t\t\t\tcurrentMessageProcessor.value = processorObj\n\n\t\t\t\t// 开始处理消息队列\n\t\t\t\tprocessNextMessage()\n\t\t\t} else {\n\t\t\t\t// 插入默认AI回复\n\t\t\t\tconst defaultAiChatId = `ai_${Date.now()}`\n\t\t\t\tconst defaultAiMessage: ChatMessage = {\n\t\t\t\t\tchatId: defaultAiChatId,\n\t\t\t\t\tuser: 'ai',\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tcontent: unmatchText,\n\t\t\t\t\tisShowLike: true,\n\t\t\t\t\tisShowCopy: true,\n\t\t\t\t\tmsgList: []\n\t\t\t\t}\n\t\t\t\tchatList.value.push(defaultAiMessage)\n\t\t\t\temit('sendMessage', [...chatList.value])\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tconst msgIndex = chatList.value.findIndex((item: any) => item.chatId === defaultAiChatId)\n\t\t\t\t\tif (msgIndex !== -1) {\n\t\t\t\t\t\trenderContent(defaultAiMessage.content, 'main', msgIndex)\n\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\tscrollToBottom()\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tinputValue.value = ''\n\t\t} else {\n\t\t\tconsole.log('content === useChat === 488', content)\n\t\t\t// 无脚本模式,直接发送\n\t\t\tif (content) {\n\t\t\t\tinputValue.value = content\n\t\t\t}\n\t\t\tif ((isChating.value || (!inputValue.value.trim() && !fileList?.length)) && !auto) return\n\n\t\t\tconst userChatId = 'user_' + Math.random().toString(36).slice(2).padEnd(10, '0').slice(0, 10)\n\t\t\tconst userMessage: ChatMessage & ChatMsgList = {\n\t\t\t\tchatId: userChatId,\n\t\t\t\tuser: 'u',\n\t\t\t\ttype: 'text',\n\t\t\t\tcontent: inputValue.value,\n\t\t\t\tfiles: fileList || [],\n\t\t\t\tmsgList: [],\n\t\t\t\tisRead: false\n\t\t\t}\n\t\t\tchatList.value.push(userMessage)\n\t\t\tconst index = chatList.value.length - 1\n\t\t\tnextTick(() => {\n\t\t\t\trenderContent(userMessage.content, 'main', index)\n\t\t\t\tscrollToBottom()\n\t\t\t})\n\t\t\tconsole.log('openSSE === useChat === 511')\n\t\t\topenSSE(inputValue.value, index + 1)\n\t\t\tinputValue.value = ''\n\t\t}\n\t}\n\n\t// 停止生成\n\tconst handleStop = (): void => {\n\t\tcleanupSSE()\n\n\t\tconst aiIndex = chatList.value.findIndex((item: any) => item.isChating)\n\t\tif (aiIndex !== -1) {\n\t\t\tconst currentAiMessage = chatList.value[aiIndex]\n\n\t\t\tif (currentAiMessage.content?.trim()) {\n\t\t\t\tnextTick(() => {\n\t\t\t\t\tchatList.value[aiIndex] = {\n\t\t\t\t\t\t...currentAiMessage,\n\t\t\t\t\t\tcontent: currentAiMessage.content + '...',\n\t\t\t\t\t\tisChating: false\n\t\t\t\t\t}\n\t\t\t\t\trenderContent(chatList.value[aiIndex].content, 'main', aiIndex)\n\t\t\t\t\temit('sendMessage', chatList.value)\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tif (aiIndex > 0) {\n\t\t\t\t\tconst userMessageIndex = aiIndex - 1\n\t\t\t\t\tif (chatList.value[userMessageIndex].user === 'u') {\n\t\t\t\t\t\tchatList.value.splice(userMessageIndex, 2)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tchatList.value.splice(aiIndex, 1)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tchatList.value.splice(aiIndex, 1)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tconst lastIndex = chatList.value.length - 1\n\t\t\tif (lastIndex >= 0 && chatList.value[lastIndex].user === 'u') {\n\t\t\t\tchatList.value.pop()\n\t\t\t}\n\t\t}\n\n\t\tisChating.value = false\n\t}\n\n\t// 处理消息操作\n\tconst handleMessageAction = (action: MessageAction, index: number): void => {\n\t\tconst message = chatList.value[index]\n\t\tif (!message) return\n\n\t\tswitch (action) {\n\t\t\tcase MessageAction.COPY: {\n\t\t\t\t// 使用复制功能\n\t\t\t\tcopyToClipboard(message.content, '复制成功', '复制失败')\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase MessageAction.EDIT:\n\t\t\t\tmessage.isEditing = true\n\t\t\t\tmessage.editContent = message.content\n\t\t\t\tbreak\n\t\t\tcase MessageAction.DELETE:\n\t\t\t\tmessageUtils.deleteMessageChain(index)\n\t\t\t\temit('sendMessage', chatList.value)\n\t\t\t\tbreak\n\t\t\tcase MessageAction.RETRY: {\n\t\t\t\tconst aiMessage = chatList.value[index]\n\t\t\t\tconst userMessageIndex = index - 1\n\t\t\t\tconst userMessage = chatList.value[userMessageIndex]\n\n\t\t\t\tif (userMessage && userMessage.user === 'u') {\n\t\t\t\t\tconst updatedAiMessage = {\n\t\t\t\t\t\t...aiMessage,\n\t\t\t\t\t\tcontent: '',\n\t\t\t\t\t\tthinkContent: '',\n\t\t\t\t\t\treasoningContent: '',\n\t\t\t\t\t\tisLiked: false,\n\t\t\t\t\t\tisDisliked: false,\n\t\t\t\t\t\tisChating: true,\n\t\t\t\t\t\tisRead: false,\n\t\t\t\t\t\tchatId: aiMessage.chatId,\n\t\t\t\t\t\tuser: aiMessage.user,\n\t\t\t\t\t\ttype: aiMessage.type,\n\t\t\t\t\t\tthinkStatus: ThinkStatus.COMPLETED,\n\t\t\t\t\t\tthinkStartTime: 0,\n\t\t\t\t\t\tthinkEndTime: 0\n\t\t\t\t\t}\n\t\t\t\t\tchatList.value.splice(index, 1, updatedAiMessage)\n\n\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\tif (htmlContentRef.value[index]) htmlContentRef.value[index].innerHTML = ''\n\t\t\t\t\t\tif (thinkingContentRef.value[index]) thinkingContentRef.value[index].innerHTML = ''\n\t\t\t\t\t\tif (reasoningContentRef.value[index]) reasoningContentRef.value[index].innerHTML = ''\n\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\topenSSE(userMessage.content || '', index)\n\t\t\t\t\t\t}, 50)\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tcase MessageAction.LIKE:\n\t\t\t\tmessageUtils.updateMessage(index, {\n\t\t\t\t\tisLiked: true,\n\t\t\t\t\tisDisliked: false\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase MessageAction.DISLIKE:\n\t\t\t\tmessageUtils.updateMessage(index, {\n\t\t\t\t\tisLiked: false,\n\t\t\t\t\tisDisliked: true\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase MessageAction.WITHDRAW:\n\t\t\t\tconsole.log('withDraw')\n\t\t\t\tmessageUtils.updateMessage(index, {\n\t\t\t\t\tisWithDraw: true,\n\t\t\t\t\tuser: 'withDraw'\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\t// 保存编辑\n\tconst saveEdit = (index: number, newContent: string): void => {\n\t\tconst message = chatList.value[index]\n\t\tif (!message || !message.editContent) return\n\n\t\tchatList.value[index] = {\n\t\t\t...message,\n\t\t\tcontent: newContent,\n\t\t\tisEditing: false,\n\t\t\teditContent: undefined\n\t\t}\n\t\tnextTick(() => {\n\t\t\trenderContent(newContent, 'main', index)\n\t\t})\n\n\t\t// 删除后续的AI回复(如果有)\n\t\tconst hasDeletedAi = index + 1 < chatList.value.length && chatList.value[index + 1].user === 'ai'\n\t\tif (hasDeletedAi) {\n\t\t\tchatList.value.splice(index + 1, 1)\n\t\t}\n\n\t\t// 计算插入新AI消息的位置\n\t\t// 无论是否删除了AI消息,插入位置都是 index + 1\n\t\tconst insertPosition = index + 1\n\t\t// console.log('saveEdit调用openSSE,index:', index, 'insertPosition:', insertPosition, 'newContent:', newContent)\n\n\t\t// 等待下一个tick,确保Vue已经更新了DOM和refs\n\t\tnextTick(() => {\n\t\t\topenSSE(newContent, insertPosition)\n\t\t})\n\t\temit('sendMessage', chatList.value)\n\t}\n\n\t// 取消编辑\n\tconst cancelEdit = (index: number): void => {\n\t\tconst message = chatList.value[index]\n\t\tif (!message) return\n\n\t\tmessage.isEditing = false\n\t\tmessage.editContent = ''\n\t\tnextTick(() => {\n\t\t\trenderContent(message.content, 'main', index)\n\t\t})\n\t}\n\n\t// 处理拖拽事件\n\tconst handleDragEnter = () => {\n\t\tisDragging.value = true\n\t\t// 打开标记层以显示拖拽区域\n\t\tif (chatInputRef?.value) {\n\t\t\tchatInputRef.value.openMarkLayer()\n\t\t}\n\t}\n\n\tconst handleDragLeave = (e: DragEvent) => {\n\t\tconst rect = (e.target as HTMLElement).getBoundingClientRect()\n\t\tif (e.clientX < rect.left || e.clientX > rect.right || e.clientY < rect.top || e.clientY > rect.bottom) {\n\t\t\tisDragging.value = false\n\t\t}\n\t}\n\n\tconst handleDrop = async (e: DragEvent) => {\n\t\tisDragging.value = false\n\n\t\t// 获取拖拽的文件\n\t\tconst files = e.dataTransfer?.files\n\t\tif (files && files.length > 0) {\n\t\t\tconst fileList = await Promise.all(\n\t\t\t\tArray.from(files).map(async file => {\n\t\t\t\t\tlet base64 = ''\n\t\t\t\t\tif (file.type.startsWith('image/')) {\n\t\t\t\t\t\tbase64 = await new Promise(resolve => {\n\t\t\t\t\t\t\tconst reader = new FileReader()\n\t\t\t\t\t\t\treader.onload = e => {\n\t\t\t\t\t\t\t\tresolve(e.target?.result as string)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treader.readAsDataURL(file)\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid: Math.random().toString(36).slice(2).padEnd(10, '0').slice(0, 10),\n\t\t\t\t\t\tfile: file,\n\t\t\t\t\t\tname: file.name,\n\t\t\t\t\t\tfileType: file.type,\n\t\t\t\t\t\tfileSize: file.size,\n\t\t\t\t\t\tlastModified: file.lastModified,\n\t\t\t\t\t\tpreview: URL.createObjectURL(file),\n\t\t\t\t\t\tbase64\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t\t// 调用 ChatInput 的 handlePaste 方法处理拖拽的文件\n\t\t\tif (chatInputRef?.value) {\n\t\t\t\tchatInputRef.value.handlePaste(fileList, 'drop')\n\t\t\t}\n\t\t}\n\n\t\t// 关闭标记层\n\t\tif (chatInputRef?.value) {\n\t\t\tchatInputRef.value.colseMarkLayer()\n\t\t}\n\t}\n\n\t// 组件生命周期\n\tconst onMounted = () => {\n\t\tif (!isMounted.value) {\n\t\t\tinit()\n\t\t}\n\t\tisMounted.value = true\n\t}\n\n\tconst onBeforeUnmount = () => {\n\t\tif (!isUnmounting.value) {\n\t\t\tisUnmounting.value = true\n\t\t\tcleanupSSE()\n\t\t\tisMounted.value = false\n\t\t}\n\t}\n\n\treturn {\n\t\t// 状态\n\t\tchatList,\n\t\tisChating,\n\t\tinputValue,\n\t\tenableDeepThinking,\n\t\tisMounted,\n\t\tisUnmounting,\n\t\tcurrentComponentName,\n\t\tfileData,\n\t\tactiveAgentsName,\n\t\tmoduleInfo,\n\t\tisDragging,\n\t\ttypeFlag,\n\t\tcurrIndex,\n\t\tfetchStream,\n\t\tresultItem,\n\t\tcurrentMessageProcessor,\n\t\tactiveScript,\n\t\thtmlContentRef,\n\t\tthinkingContentRef,\n\t\treasoningContentRef,\n\t\t// 方法\n\t\tinit,\n\t\tsendMessage,\n\t\thandleBeforeSend,\n\t\thandleSend,\n\t\thandleStop,\n\t\thandleMessageAction,\n\t\tsaveEdit,\n\t\tcancelEdit,\n\t\tcompleteRendered,\n\t\thandleAgentSelect,\n\t\tupdate,\n\t\tupdateModule,\n\t\tmessageUtils,\n\t\tsimulateStreamOutput,\n\t\thandleDragEnter,\n\t\thandleDragLeave,\n\t\thandleDrop,\n\t\tonMounted,\n\t\tonBeforeUnmount,\n\t\tcleanupSSE,\n\t\tscrollToBottom,\n\t\thandleScroll,\n\t\trenderContent,\n\t\tenqueueRender\n\t}\n}\n"],"names":["ref","useMessageRender","useScroll","useCopy","createScriptMatcher","useSSE","watch","nextTick","content","MessageAction","ThinkStatus","e","_a"],"mappings":";;;;;;;;;;AA2BO,SAAS,OAAQ,CAAA,EAAE,KAAO,EAAA,IAAA,EAAM,SAAS,WAAa,EAAA,OAAA,EAAS,SAAW,EAAA,iBAAA,EAAmB,UAAY,EAAA,MAAA,EAAQ,IAAM,EAAA,aAAA,EAAe,cAAgC,EAAA;AAE5K,EAAM,MAAA,SAAA,GAAYA,QAAI,KAAK,CAAA,CAAA;AAC3B,EAAM,MAAA,SAAA,GAAYA,QAAI,KAAK,CAAA,CAAA;AAC3B,EAAM,MAAA,UAAA,GAAaA,QAAI,EAAE,CAAA,CAAA;AACzB,EAAM,MAAA,kBAAA,GAAqBA,QAAI,KAAK,CAAA,CAAA;AACpC,EAAM,MAAA,QAAA,GAAWA,OAAmB,CAAA,EAAE,CAAA,CAAA;AACtC,EAAM,MAAA,SAAA,GAAYA,QAAI,CAAC,CAAA,CAAA;AACvB,EAAM,MAAA,YAAA,GAAeA,QAAI,KAAK,CAAA,CAAA;AAC9B,EAAM,MAAA,oBAAA,GAAuBA,QAAI,EAAE,CAAA,CAAA;AACnC,EAAM,MAAA,QAAA,GAAWA,OAAgB,CAAA,EAAE,CAAA,CAAA;AACnC,EAAM,MAAA,gBAAA,GAAmBA,QAAY,EAAE,CAAA,CAAA;AACvC,EAAM,MAAA,UAAA,GAAaA,QAAiB,OAAQ,CAAA,CAAC,KAAoB,EAAE,IAAA,EAAM,eAAe,CAAA,CAAA;AACxF,EAAM,MAAA,UAAA,GAAaA,QAAI,KAAK,CAAA,CAAA;AAC5B,EAAM,MAAA,QAAA,GAAWA,QAAI,EAAE,CAAA,CAAA;AAGvB,EAAM,MAAA,uBAAA,GAA0BA,QAA6B,IAAI,CAAA,CAAA;AAGjE,EAAM,MAAA,EAAE,gBAAgB,kBAAoB,EAAA,mBAAA,EAAqB,gBAAgB,aAAe,EAAA,aAAA,KAAkBC,iCAAiB,CAAA;AAAA,IAClI,QAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,GACA,CAAA,CAAA;AAGD,EAAA,MAAM,EAAE,cAAA,EAAgB,YAAa,EAAA,GAAIC,mBAAU,CAAA;AAAA,IAClD,aAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,MAAA;AAAA,GACA,CAAA,CAAA;AAGD,EAAM,MAAA,EAAE,eAAgB,EAAA,GAAIC,eAAQ,EAAA,CAAA;AAGpC,EAAM,MAAA,UAAA,GAAaH,QAAI,OAAO,CAAA,CAAA;AAC9B,EAAA,MAAM,EAAE,YAAA,EAAc,yBAA0B,EAAA,GAAII,iCAAoB,CAAA;AAAA,IACvE,OAAS,EAAA,UAAA;AAAA,IACT,gBAAA;AAAA,IACA,QAAA;AAAA,IACA,WAAA;AAAA,GACA,CAAA,CAAA;AAGD,EAAA,MAAM,EAAE,WAAa,EAAA,UAAA,EAAY,OAAS,EAAA,UAAA,KAAeC,aAAO,CAAA;AAAA,IAC/D,QAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,oBAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,IAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,IACA,cAAA;AAAA,IACA,cAAA;AAAA,IACA,IAAA;AAAA,GACA,CAAA,CAAA;AAGD,EAAAC,SAAA;AAAA,IACC,MAAM,gBAAA;AAAA,IACN,CAAC,GAAa,KAAA;AACb,MAAA,IAAI,CAAC,GAAK,EAAA;AACT,QAAiB,gBAAA,CAAA,KAAA,GAAQ,YAAa,CAAA,OAAA,CAAQ,kBAAkB,CAAA,CAAA;AAAA,OACjE;AAAA,KACD;AAAA,IACA,EAAE,WAAW,IAAK,EAAA;AAAA,GACnB,CAAA;AAGA,EAAA,MAAM,YAAe,GAAA;AAAA,IACpB,aAAA,EAAe,CAAC,KAAA,EAAe,OAAwC,KAAA;AACtE,MAAA,IAAI,KAAQ,GAAA,CAAA,IAAK,KAAS,IAAA,QAAA,CAAS,KAAM,CAAA,MAAA;AAAQ,QAAA,OAAA;AACjD,MAAA,QAAA,CAAS,KAAM,CAAA,MAAA,CAAO,KAAO,EAAA,CAAA,EAAG,EAAE,GAAG,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA,EAAG,GAAG,OAAA,EAAS,CAAA,CAAA;AACxE,MAAAC,YAAA,CAAS,MAAM;AACd,QAAM,MAAA,OAAA,GAAU,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACpC,QAAA,IAAI,OAAS,EAAA;AACZ,UAAc,aAAA,CAAA,OAAA,CAAQ,OAAS,EAAA,MAAA,EAAQ,KAAK,CAAA,CAAA;AAC5C,UAAA,IAAI,QAAQ,YAAc,EAAA;AACzB,YAAc,aAAA,CAAA,OAAA,CAAQ,YAAc,EAAA,UAAA,EAAY,KAAK,CAAA,CAAA;AAAA,WACtD;AACA,UAAA,IAAI,QAAQ,gBAAkB,EAAA;AAC7B,YAAc,aAAA,CAAA,OAAA,CAAQ,gBAAkB,EAAA,WAAA,EAAa,KAAK,CAAA,CAAA;AAAA,WAC3D;AAAA,SACD;AAAA,OACA,CAAA,CAAA;AAAA,KACF;AAAA,IAEA,kBAAA,EAAoB,CAAC,KAAwB,KAAA;AAC5C,MAAA,IAAI,KAAQ,GAAA,CAAA,IAAK,KAAS,IAAA,QAAA,CAAS,KAAM,CAAA,MAAA;AAAQ,QAAA,OAAA;AACjD,MAAA,IAAI,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA,CAAE,SAAS,GAAK,EAAA;AACvC,QAAA,IAAI,WAAc,GAAA,CAAA,CAAA;AAClB,QAAA,KAAA,IAAS,IAAI,KAAQ,GAAA,CAAA,EAAG,IAAI,QAAS,CAAA,KAAA,CAAM,QAAQ,CAAK,EAAA,EAAA;AACvD,UAAA,IAAI,QAAS,CAAA,KAAA,CAAM,CAAC,CAAA,CAAE,SAAS,IAAM,EAAA;AACpC,YAAA,WAAA,EAAA,CAAA;AAAA,WACM,MAAA;AACN,YAAA,MAAA;AAAA,WACD;AAAA,SACD;AACA,QAAS,QAAA,CAAA,KAAA,CAAM,MAAO,CAAA,KAAA,EAAO,WAAW,CAAA,CAAA;AAAA,OAClC,MAAA;AACN,QAAS,QAAA,CAAA,KAAA,CAAM,MAAO,CAAA,KAAA,EAAO,CAAC,CAAA,CAAA;AAAA,OAC/B;AAAA,KACD;AAAA,IAEA,qBAAA,EAAuB,CAAC,IAAyC,KAAA;AA/InE,MAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,EAAA,CAAA;AA+IuE,MAAA,OAAA;AAAA,QACpE,QAAQ,IAAK,CAAA,MAAA,IAAU,QAAQ,IAAK,CAAA,MAAA,GAAS,QAAS,CAAA,EAAE,EAAE,KAAM,CAAA,CAAC,EAAE,MAAO,CAAA,EAAA,EAAI,GAAG,CAAE,CAAA,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,QAC9F,IAAA,EAAM,KAAK,IAAQ,IAAA,IAAA;AAAA,QACnB,IAAA,EAAM,KAAK,IAAQ,IAAA,MAAA;AAAA,QACnB,OAAA,EAAS,KAAK,OAAW,IAAA,EAAA;AAAA,QACzB,SAAA,EAAA,CAAW,EAAK,GAAA,IAAA,CAAA,SAAA,KAAL,IAAkB,GAAA,EAAA,GAAA,KAAA;AAAA,QAC7B,YAAA,EAAc,KAAK,YAAgB,IAAA,EAAA;AAAA,QACnC,gBAAA,EAAkB,KAAK,gBAAoB,IAAA,EAAA;AAAA,QAC3C,OAAA,EAAA,CAAS,EAAK,GAAA,IAAA,CAAA,OAAA,KAAL,IAAgB,GAAA,EAAA,GAAA,KAAA;AAAA,QACzB,UAAA,EAAA,CAAY,EAAK,GAAA,IAAA,CAAA,UAAA,KAAL,IAAmB,GAAA,EAAA,GAAA,KAAA;AAAA,QAC/B,SAAA,EAAA,CAAW,EAAK,GAAA,IAAA,CAAA,SAAA,KAAL,IAAkB,GAAA,EAAA,GAAA,KAAA;AAAA,QAC7B,WAAA,EAAA,CAAa,EAAK,GAAA,IAAA,CAAA,WAAA,KAAL,IAAoB,GAAA,EAAA,GAAA,EAAA;AAAA,QACjC,SAAS,EAAC;AAAA,OACX,CAAA;AAAA,KAAA;AAAA,GACD,CAAA;AAGA,EAAM,MAAA,MAAA,GAAS,CAAC,KAAA,EAAe,OAAoB,KAAA;AAClD,IAAS,QAAA,CAAA,KAAA,CAAM,KAAK,CAAA,GAAI,EAAE,GAAG,SAAS,KAAM,CAAA,KAAK,CAAG,EAAA,GAAG,OAAQ,EAAA,CAAA;AAAA,GAEhE,CAAA;AAGA,EAAM,MAAA,YAAA,GAAe,CAAC,IAAqB,KAAA;AAC1C,IAAA,UAAA,CAAW,KAAQ,GAAA,IAAA,CAAA;AAAA,GACpB,CAAA;AAGA,EAAM,MAAA,iBAAA,GAAoB,CAAC,IAAc,KAAA;AACxC,IAAa,YAAA,CAAA,OAAA,CAAQ,kBAAoB,EAAA,IAAA,CAAK,IAAI,CAAA,CAAA;AAClD,IAAA,MAAM,YAAY,IAAK,CAAA,KAAA,CAAA;AACvB,IAAA,YAAA,CAAa,cAAc,CAAG,EAAA;AAAA,MAC7B,OAAS,EAAA,EAAA;AAAA,MACT,SAAW,EAAA,KAAA;AAAA,KACX,CAAA,CAAA;AACD,IAAA,oBAAA,CAAqB,GAAG,SAAS,CAAA,CAAA;AAAA,GAClC,CAAA;AAGA,EAAM,MAAA,gBAAA,GAAmB,CAAC,MAAmB,KAAA;AAE5C,IAAA,IAAI,wBAAwB,KAAO,EAAA;AAClC,MAAwB,uBAAA,CAAA,KAAA,CAAM,sBAAsB,MAAM,CAAA,CAAA;AAAA,KAC3D;AAAA,GACD,CAAA;AAGA,EAAA,MAAM,OAAO,MAAY;AACxB,IAAI,IAAA;AACH,MAAI,IAAA,KAAA,CAAM,OAAQ,CAAA,KAAA,CAAM,KAAK,CAAA,IAAK,MAAM,KAAM,CAAA,MAAA,IAAU,CAAC,OAAA,CAAQ,MAAQ,EAAA;AACxE,QAAA,QAAA,CAAS,KAAQ,GAAA,KAAA,CAAM,KAAM,CAAA,GAAA,CAAI,CAAC,IAAe,MAAA;AAAA,UAChD,GAAG,IAAA;AAAA,UACH,SAAS,IAAK,CAAA,YAAA,GAAe,KAAK,OAAW,IAAA,EAAA,GAAK,KAAK,OAAW,IAAA,EAAA;AAAA,UAClE,YAAA,EAAc,KAAK,YAAgB,IAAA,EAAA;AAAA,SAClC,CAAA,CAAA,CAAA;AAEF,QAAAA,YAAA,CAAS,MAAM;AACd,UAAA,qBAAA,CAAsB,MAAM;AAC3B,YAAI,IAAA,gBAAA,CAAiB,KAAS,IAAA,QAAA,CAAS,KAAM,CAAA,MAAA,GAAS,CAAK,IAAA,QAAA,CAAS,KAAM,CAAA,CAAC,CAAE,CAAA,IAAA,KAAS,IAAM,EAAA;AAC3F,cAAM,MAAA,SAAA,GAAY,QAAS,CAAA,KAAA,CAAM,CAAC,CAAA,CAAA;AAClC,cAAA,YAAA,CAAa,cAAc,CAAG,EAAA;AAAA,gBAC7B,OAAS,EAAA,EAAA;AAAA,gBACT,SAAW,EAAA,IAAA;AAAA,eACX,CAAA,CAAA;AACD,cAAqB,oBAAA,CAAA,CAAA,EAAG,UAAU,OAAO,CAAA,CAAA;AAAA,aACnC,MAAA;AACN,cAAS,QAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,IAAc,KAAA;AACrC,gBAAA,IAAI,KAAK,YAAc,EAAA;AACtB,kBAAc,aAAA,CAAA,IAAA,CAAK,cAAc,UAAU,CAAA,CAAA;AAAA,iBAC5C;AACA,gBAAA,IAAI,KAAK,gBAAkB,EAAA;AAC1B,kBAAc,aAAA,CAAA,IAAA,CAAK,kBAAkB,WAAW,CAAA,CAAA;AAAA,iBACjD;AACA,gBAAA,IAAI,KAAK,OAAS,EAAA;AACjB,kBAAc,aAAA,CAAA,IAAA,CAAK,SAAS,MAAM,CAAA,CAAA;AAAA,iBACnC;AAAA,eACA,CAAA,CAAA;AACD,cAAAA,YAAA,CAAS,MAAM;AACd,gBAAe,cAAA,EAAA,CAAA;AAAA,eACf,CAAA,CAAA;AAAA,aACF;AAAA,WACA,CAAA,CAAA;AAAA,SACD,CAAA,CAAA;AAAA,OACF;AAAA,aACQ,KAAP,EAAA;AAAA,KAEF;AAAA,GACD,CAAA;AAGA,EAAA,MAAM,oBAAuB,GAAA,CAAC,OAAiB,EAAA,GAAA,EAA2B,QAA0B,KAAA;AACnG,IAAA,MAAM,OAAkB,GAAA,OAAO,GAAQ,KAAA,QAAA,GAAW,MAAM,GAAI,CAAA,OAAA,CAAA;AAC5D,IAAM,MAAA,aAAA,GAAgB,OAAO,GAAQ,KAAA,QAAA,GAAW,KAAK,GAAI,CAAA,sBAAA,GAAyB,IAAI,gBAAmB,GAAA,EAAA,CAAA;AACzG,IAAA,MAAM,wBAA2B,GAAA,OAAO,GAAQ,KAAA,QAAA,GAAW,QAAQ,GAAI,CAAA,sBAAA,CAAA;AAEvE,IAAA,MAAM,KAAK,MAAM;AAChB,MAAA,aAAA,CAAc,QAAQ,CAAA,CAAA;AACtB,MAAA,IAAA,CAAK,aAAe,EAAA,CAAC,GAAG,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AACvC,MAAA,IAAI,aAAe,EAAA;AAClB,QAAS,QAAA,CAAA,KAAA,CAAM,OAAO,CAAA,CAAE,aAAgB,GAAA,aAAA,CAAA;AAAA,OACzC;AACA,MAAA,YAAA,CAAa,cAAc,OAAS,EAAA;AAAA,QACnC,SAAW,EAAA,KAAA;AAAA,OACX,CAAA,CAAA;AACD,MAAAA,YAAA,CAAS,MAAM;AACd,QAAc,aAAA,CAAA,OAAA,EAAS,QAAQ,OAAO,CAAA,CAAA;AACtC,QAAAA,YAAA,CAAS,MAAM;AACd,UAAe,cAAA,EAAA,CAAA;AACf,UAAI,IAAA,CAAC,4BAA4B,QAAU,EAAA;AAC1C,YAAS,QAAA,EAAA,CAAA;AAAA,WACV;AAAA,SACA,CAAA,CAAA;AAAA,OACD,CAAA,CAAA;AAAA,KACF,CAAA;AAEA,IAAA,IAAI,KAAQ,GAAA,CAAA,CAAA;AACZ,IAAM,MAAA,QAAA,GAAW,YAAY,MAAM;AAClC,MAAI,IAAA,KAAA,GAAQ,QAAQ,MAAQ,EAAA;AAC3B,QAAA,MAAM,UAAa,GAAA,OAAA,CAAA;AACnB,QAAA,YAAA,CAAa,cAAc,OAAS,EAAA;AAAA,UACnC,OAAS,EAAA,UAAA;AAAA,SACT,CAAA,CAAA;AACD,QAAAA,YAAA,CAAS,MAAM;AACd,UAAc,aAAA,CAAA,UAAA,EAAY,QAAQ,OAAO,CAAA,CAAA;AACzC,UAAAA,YAAA,CAAS,MAAM;AACd,YAAe,cAAA,EAAA,CAAA;AAAA,WACf,CAAA,CAAA;AAAA,SACD,CAAA,CAAA;AACD,QAAA,KAAA,EAAA,CAAA;AAAA,OACM,MAAA;AACN,QAAG,EAAA,EAAA,CAAA;AAAA,OACJ;AAAA,OACE,EAAE,CAAA,CAAA;AAAA,GACN,CAAA;AAGA,EAAAD,SAAA;AAAA,IACC,MAAM,KAAM,CAAA,KAAA;AAAA,IACZ,CAAC,QAAa,MAAgB,KAAA;AAC7B,MAAI,IAAA,CAAC,KAAM,CAAA,OAAA,CAAQ,MAAM,CAAA;AAAG,QAAA,OAAA;AAC5B,MAAI,IAAA,MAAA,CAAO,UAAU,IAAK,CAAA,SAAA,CAAU,MAAM,CAAM,KAAA,IAAA,CAAK,SAAU,CAAA,MAAM,CAAG,EAAA;AACvE,QAAS,QAAA,CAAA,KAAA,GAAQ,MAAO,CAAA,GAAA,CAAI,CAAS,IAAA,MAAA;AAAA,UACpC,GAAG,IAAA;AAAA,UACH,SAAS,IAAK,CAAA,YAAA,GAAe,KAAK,OAAW,IAAA,EAAA,GAAK,KAAK,OAAW,IAAA,EAAA;AAAA,UAClE,YAAA,EAAc,KAAK,YAAgB,IAAA,EAAA;AAAA,SAClC,CAAA,CAAA,CAAA;AAEF,QAAAC,YAAA,CAAS,MAAM;AACd,UAAA,qBAAA,CAAsB,MAAM;AAC3B,YAAS,QAAA,CAAA,KAAA,CAAM,OAAQ,CAAA,CAAC,IAAc,KAAA;AACrC,cAAA,IAAI,KAAK,YAAc,EAAA;AACtB,gBAAc,aAAA,CAAA,IAAA,CAAK,cAAc,UAAU,CAAA,CAAA;AAAA,eAC5C;AACA,cAAA,IAAI,KAAK,gBAAkB,EAAA;AAC1B,gBAAc,aAAA,CAAA,IAAA,CAAK,kBAAkB,WAAW,CAAA,CAAA;AAAA,eACjD;AACA,cAAA,IAAI,KAAK,OAAS,EAAA;AACjB,gBAAc,aAAA,CAAA,IAAA,CAAK,SAAS,MAAM,CAAA,CAAA;AAAA,eACnC;AAAA,aACA,CAAA,CAAA;AACD,YAAAA,YAAA,CAAS,MAAM;AACd,cAAe,cAAA,EAAA,CAAA;AAAA,aACf,CAAA,CAAA;AAAA,WACD,CAAA,CAAA;AAAA,SACD,CAAA,CAAA;AAAA,OACF;AAAA,KACD;AAAA,IACA,EAAE,IAAA,EAAM,IAAM,EAAA,SAAA,EAAW,IAAK,EAAA;AAAA,GAC/B,CAAA;AAGA,EAAA,MAAM,WAAc,GAAA,CAAC,OAAkB,EAAA,QAAA,EAAkB,MAAgB,IAAwB,KAAA;AAChG,IAAA,UAAA,CAAW,QAAQ,OAAW,IAAA,EAAA,CAAA;AAC9B,IAAiB,gBAAA,CAAA,OAAA,EAAS,QAAU,EAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,GAC/C,CAAA;AAGA,EAAA,MAAM,gBAAmB,GAAA,CAAC,OAAkB,EAAA,QAAA,EAAkB,MAAgB,IAAwB,KAAA;AACrG,IAAS,QAAA,CAAA,KAAA,GAAQ,YAAY,EAAC,CAAA;AAC9B,IAAA,IAAI,UAAY,EAAA;AACf,MAAA,MAAM,KAAK,UAAW,EAAA,CAAA;AACtB,MAAA,IAAI,EAAM,IAAA,OAAO,EAAG,CAAA,IAAA,KAAS,UAAY,EAAA;AACvC,QAAC,OAAQ,CAAA,OAAA,CAAQ,EAAE,CAAA,CAClB,KAAK,CAAO,GAAA,KAAA;AACZ,UAAA,IAAI,IAAI,MAAQ,EAAA;AACf,YAAqB,oBAAA,CAAA,KAAA,GAAQ,IAAI,aAAiB,IAAA,EAAA,CAAA;AAClD,YAAW,UAAA,CAAA,OAAA,EAAS,QAAU,EAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,WACzC;AAAA,SACA,CACA,CAAA,KAAA,CAAM,CAAS,KAAA,KAAA;AACf,UAAA,OAAA,CAAQ,IAAI,KAAK,CAAA,CAAA;AAAA,SACjB,CAAA,CAAA;AAAA,OACI,MAAA;AACN,QAAA,IAAI,GAAG,MAAQ,EAAA;AACd,UAAqB,oBAAA,CAAA,KAAA,GAAQ,GAAG,aAAiB,IAAA,EAAA,CAAA;AACjD,UAAW,UAAA,CAAA,OAAA,EAAS,QAAU,EAAA,IAAA,EAAM,IAAI,CAAA,CAAA;AAAA,SACzC;AAAA,OACD;AAAA,KACD;AAAA,GACD,CAAA;AAGA,EAAA,MAAM,UAAa,GAAA,CAAC,OAAkB,EAAA,QAAA,EAAkB,MAAgB,IAAwB,KAAA;AAC/F,IAAA,IAAA,CAAK,mBAAmB,CAAA,CAAA;AACxB,IAAkB,iBAAA,CAAA,UAAA,CAAW,KAAO,EAAA,QAAA,CAAS,KAAK,CAAA,CAAA;AAClD,IAAA,QAAA,CAAS,QAAQ,IAAQ,IAAA,EAAA,CAAA;AACzB,IAAA,IAAI,WAAW,KAAM,CAAA,OAAA,CAAQ,OAAO,CAAK,IAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AAC5D,MAAA,MAAM,SAAY,GAAA,OAAA,GAAU,OAAQ,CAAA,OAAA,CAAQ,KAAO,EAAA,EAAE,CAAI,GAAA,UAAA,CAAW,KAAM,CAAA,OAAA,CAAQ,KAAO,EAAA,EAAE,EAAE,IAAK,EAAA,CAAA;AAClG,MAAA,IAAI,CAAC,SAAA,IAAa,EAAC,QAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAU,MAAU,CAAA,IAAA,IAAA;AAAM,QAAA,OAAA;AAG7C,MAAM,MAAA,UAAA,GAAa,CAAQ,KAAA,EAAA,IAAA,CAAK,GAAI,EAAA,CAAA,CAAA,CAAA;AACpC,MAAA,MAAM,WAAyC,GAAA;AAAA,QAC9C,MAAQ,EAAA,UAAA;AAAA,QACR,IAAM,EAAA,GAAA;AAAA,QACN,IAAM,EAAA,MAAA;AAAA,QACN,OAAS,EAAA,SAAA;AAAA,QACT,UAAY,EAAA,KAAA;AAAA,QACZ,UAAY,EAAA,IAAA;AAAA,QACZ,UAAY,EAAA,KAAA;AAAA,QACZ,MAAQ,EAAA,KAAA;AAAA,QACR,KAAA,EAAO,YAAY,EAAC;AAAA,QACpB,QAAU,EAAA,IAAA;AAAA,QACV,MAAM,IAAQ,IAAA,KAAA;AAAA,QACd,SAAS,EAAC;AAAA,QACV,SAAW,EAAA,KAAA;AAAA,OACZ,CAAA;AACA,MAAS,QAAA,CAAA,KAAA,CAAM,KAAK,WAAW,CAAA,CAAA;AAC/B,MAAA,IAAA,CAAK,aAAe,EAAA,CAAC,GAAG,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AAGvC,MAAAA,YAAA,CAAS,MAAM;AACd,QAAA,aAAA,CAAc,YAAY,OAAS,EAAA,MAAA,EAAQ,QAAS,CAAA,KAAA,CAAM,SAAS,CAAC,CAAA,CAAA;AACpE,QAAAA,YAAA,CAAS,MAAM;AACd,UAAe,cAAA,EAAA,CAAA;AAAA,SACf,CAAA,CAAA;AAAA,OACD,CAAA,CAAA;AAGD,MAAM,MAAA,MAAA,GAAS,0BAA0B,SAAS,CAAA,CAAA;AAElD,MAAA,IAAI,MAAU,IAAA,MAAA,CAAO,SAAU,CAAA,MAAA,GAAS,CAAG,EAAA;AAE1C,QAAA,MAAM,gBAA+B,EAAC,CAAA;AAEtC,QAAA,MAAA,CAAO,SAAU,CAAA,OAAA,CAAQ,CAAC,QAAA,EAAe,GAAgB,KAAA;AACxD,UAAM,MAAA,WAAA,GAAc,MAAM,OAAQ,CAAA,QAAA,CAAS,IAAI,CAAI,GAAA,QAAA,CAAS,MAAO,CAAA,EAAE,CAAI,GAAA,EAAA,CAAA;AACzE,UAAMC,MAAAA,QAAAA,GAAU,KAAM,CAAA,OAAA,CAAQ,QAAS,CAAA,IAAI,CAAI,GAAA,QAAA,CAAS,IAAK,CAAA,IAAA,CAAK,WAAW,CAAA,GAAI,QAAS,CAAA,IAAA,CAAA;AAE1F,UAAA,MAAM,QAAW,GAAA,CAAA,GAAA,EAAM,IAAK,CAAA,GAAA,EAAS,CAAA,CAAA,EAAA,GAAA,CAAA,CAAA,CAAA;AACrC,UAAA,MAAM,SAAyB,GAAA;AAAA,YAC9B,MAAQ,EAAA,QAAA;AAAA,YACR,IAAM,EAAA,IAAA;AAAA,YACN,IAAM,EAAA,MAAA;AAAA,YACN,SAASA,QAAW,IAAA,EAAA;AAAA,YACpB,aAAA,EAAe,SAAS,IAAQ,IAAA,EAAA;AAAA,YAChC,UAAY,EAAA,IAAA;AAAA,YACZ,UAAY,EAAA,IAAA;AAAA,YACZ,gBAAA,EAAkB,SAAS,IAAQ,IAAA,EAAA;AAAA,YACnC,sBAAA,EAAwB,SAAS,sBAA0B,IAAA,KAAA;AAAA,YAC3D,QAAU,EAAA,IAAA;AAAA,YACV,SAAS,EAAC;AAAA,YACV,UAAU,QAAS,CAAA,QAAA;AAAA,WACpB,CAAA;AACA,UAAA,aAAA,CAAc,KAAK,SAAS,CAAA,CAAA;AAAA,SAC5B,CAAA,CAAA;AAGD,QAAM,MAAA,YAAA,GAAe,CAAC,GAAG,aAAa,CAAA,CAAA;AACtC,QAAA,IAAI,YAAe,GAAA,KAAA,CAAA;AACnB,QAAA,IAAI,cAAqC,GAAA,IAAA,CAAA;AAGzC,QAAA,MAAM,qBAAqB,MAAM;AAChC,UAAA,IAAI,YAAa,CAAA,MAAA,GAAS,CAAK,IAAA,CAAC,YAAc,EAAA;AAC7C,YAAe,YAAA,GAAA,IAAA,CAAA;AACf,YAAM,MAAA,WAAA,GAAc,aAAa,KAAM,EAAA,CAAA;AACvC,YAAA,IAAI,WAAa,EAAA;AAChB,cAAiB,cAAA,GAAA,WAAA,CAAA;AACjB,cAAS,QAAA,CAAA,KAAA,CAAM,KAAK,cAAc,CAAA,CAAA;AAClC,cAAA,IAAA,CAAK,aAAe,EAAA,CAAC,GAAG,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AACvC,cAAM,MAAA,QAAA,GAAW,QAAS,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,CAAA;AACzC,cAAAD,YAAA,CAAS,MAAM;AACd,gBAAA,aAAA,CAAA,CAAc,cAAgB,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,cAAA,CAAA,OAAA,KAAW,EAAI,EAAA,MAAA,EAAQ,QAAQ,CAAA,CAAA;AAC7D,gBAAAA,YAAA,CAAS,MAAM;AACd,kBAAe,cAAA,EAAA,CAAA;AACf,kBAAA,IAAI,cAAgB,EAAA;AACnB,oBAAA,MAAM,gBAAmB,GAAA;AAAA,sBACxB,GAAG,cAAA;AAAA,sBACH,sBAAwB,EAAA,IAAA;AAAA,qBACzB,CAAA;AACA,oBAAA,oBAAA,CAAqB,UAAU,gBAAgB,CAAA,CAAA;AAAA,mBAChD;AAAA,iBACA,CAAA,CAAA;AAAA,eACD,CAAA,CAAA;AAAA,aACF;AAAA,WACD;AAAA,SACD,CAAA;AAGA,QAAM,MAAA,qBAAA,GAAwB,CAAC,MAAmB,KAAA;AACjD,UAAI,IAAA,cAAA,IAAkB,cAAe,CAAA,MAAA,KAAW,MAAQ,EAAA;AACvD,YAAiB,cAAA,GAAA,IAAA,CAAA;AACjB,YAAe,YAAA,GAAA,KAAA,CAAA;AACf,YAAmB,kBAAA,EAAA,CAAA;AAAA,WACpB;AAAA,SACD,CAAA;AAGA,QAAA,MAAM,YAAe,GAAA;AAAA,UACpB,YAAA;AAAA,UACA,YAAA;AAAA,UACA,cAAA;AAAA,UACA,kBAAA;AAAA,UACA,qBAAA;AAAA,SACD,CAAA;AACA,QAAA,uBAAA,CAAwB,KAAQ,GAAA,YAAA,CAAA;AAGhC,QAAmB,kBAAA,EAAA,CAAA;AAAA,OACb,MAAA;AAEN,QAAM,MAAA,eAAA,GAAkB,CAAM,GAAA,EAAA,IAAA,CAAK,GAAI,EAAA,CAAA,CAAA,CAAA;AACvC,QAAA,MAAM,gBAAgC,GAAA;AAAA,UACrC,MAAQ,EAAA,eAAA;AAAA,UACR,IAAM,EAAA,IAAA;AAAA,UACN,IAAM,EAAA,MAAA;AAAA,UACN,OAAS,EAAA,WAAA;AAAA,UACT,UAAY,EAAA,IAAA;AAAA,UACZ,UAAY,EAAA,IAAA;AAAA,UACZ,SAAS,EAAC;AAAA,SACX,CAAA;AACA,QAAS,QAAA,CAAA,KAAA,CAAM,KAAK,gBAAgB,CAAA,CAAA;AACpC,QAAA,IAAA,CAAK,aAAe,EAAA,CAAC,GAAG,QAAA,CAAS,KAAK,CAAC,CAAA,CAAA;AACvC,QAAAA,YAAA,CAAS,MAAM;AACd,UAAM,MAAA,QAAA,GAAW,SAAS,KAAM,CAAA,SAAA,CAAU,CAAC,IAAc,KAAA,IAAA,CAAK,WAAW,eAAe,CAAA,CAAA;AACxF,UAAA,IAAI,aAAa,CAAI,CAAA,EAAA;AACpB,YAAc,aAAA,CAAA,gBAAA,CAAiB,OAAS,EAAA,MAAA,EAAQ,QAAQ,CAAA,CAAA;AACxD,YAAAA,YAAA,CAAS,MAAM;AACd,cAAe,cAAA,EAAA,CAAA;AAAA,aACf,CAAA,CAAA;AAAA,WACF;AAAA,SACA,CAAA,CAAA;AAAA,OACF;AAEA,MAAA,UAAA,CAAW,KAAQ,GAAA,EAAA,CAAA;AAAA,KACb,MAAA;AACN,MAAQ,OAAA,CAAA,GAAA,CAAI,+BAA+B,OAAO,CAAA,CAAA;AAElD,MAAA,IAAI,OAAS,EAAA;AACZ,QAAA,UAAA,CAAW,KAAQ,GAAA,OAAA,CAAA;AAAA,OACpB;AACA,MAAK,IAAA,CAAA,SAAA,CAAU,KAAU,IAAA,CAAC,UAAW,CAAA,KAAA,CAAM,MAAU,IAAA,EAAC,QAAU,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,QAAA,CAAA,MAAA,CAAA,KAAY,CAAC,IAAA;AAAM,QAAA,OAAA;AAEnF,MAAA,MAAM,aAAa,OAAU,GAAA,IAAA,CAAK,MAAO,EAAA,CAAE,SAAS,EAAE,CAAA,CAAE,KAAM,CAAA,CAAC,EAAE,MAAO,CAAA,EAAA,EAAI,GAAG,CAAE,CAAA,KAAA,CAAM,GAAG,EAAE,CAAA,CAAA;AAC5F,MAAA,MAAM,WAAyC,GAAA;AAAA,QAC9C,MAAQ,EAAA,UAAA;AAAA,QACR,IAAM,EAAA,GAAA;AAAA,QACN,IAAM,EAAA,MAAA;AAAA,QACN,SAAS,UAAW,CAAA,KAAA;AAAA,QACpB,KAAA,EAAO,YAAY,EAAC;AAAA,QACpB,SAAS,EAAC;AAAA,QACV,MAAQ,EAAA,KAAA;AAAA,OACT,CAAA;AACA,MAAS,QAAA,CAAA,KAAA,CAAM,KAAK,WAAW,CAAA,CAAA;AAC/B,MAAM,MAAA,KAAA,GAAQ,QAAS,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,CAAA;AACtC,MAAAA,YAAA,CAAS,MAAM;AACd,QAAc,aAAA,CAAA,WAAA,CAAY,OAAS,EAAA,MAAA,EAAQ,KAAK,CAAA,CAAA;AAChD,QAAe,cAAA,EAAA,CAAA;AAAA,OACf,CAAA,CAAA;AACD,MAAA,OAAA,CAAQ,IAAI,6BAA6B,CAAA,CAAA;AACzC,MAAQ,OAAA,CAAA,UAAA,CAAW,KAAO,EAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AACnC,MAAA,UAAA,CAAW,KAAQ,GAAA,EAAA,CAAA;AAAA,KACpB;AAAA,GACD,CAAA;AAGA,EAAA,MAAM,aAAa,MAAY;AAxgBhC,IAAA,IAAA,EAAA,CAAA;AAygBE,IAAW,UAAA,EAAA,CAAA;AAEX,IAAA,MAAM,UAAU,QAAS,CAAA,KAAA,CAAM,UAAU,CAAC,IAAA,KAAc,KAAK,SAAS,CAAA,CAAA;AACtE,IAAA,IAAI,YAAY,CAAI,CAAA,EAAA;AACnB,MAAM,MAAA,gBAAA,GAAmB,QAAS,CAAA,KAAA,CAAM,OAAO,CAAA,CAAA;AAE/C,MAAI,IAAA,CAAA,EAAA,GAAA,gBAAA,CAAiB,OAAjB,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAA0B,IAAQ,EAAA,EAAA;AACrC,QAAAA,YAAA,CAAS,MAAM;AACd,UAAS,QAAA,CAAA,KAAA,CAAM,OAAO,CAAI,GAAA;AAAA,YACzB,GAAG,gBAAA;AAAA,YACH,OAAA,EAAS,iBAAiB,OAAU,GAAA,KAAA;AAAA,YACpC,SAAW,EAAA,KAAA;AAAA,WACZ,CAAA;AACA,UAAA,aAAA,CAAc,SAAS,KAAM,CAAA,OAAO,CAAE,CAAA,OAAA,EAAS,QAAQ,OAAO,CAAA,CAAA;AAC9D,UAAK,IAAA,CAAA,aAAA,EAAe,SAAS,KAAK,CAAA,CAAA;AAAA,SAClC,CAAA,CAAA;AAAA,OACK,MAAA;AACN,QAAA,IAAI,UAAU,CAAG,EAAA;AAChB,UAAA,MAAM,mBAAmB,OAAU,GAAA,CAAA,CAAA;AACnC,UAAA,IAAI,QAAS,CAAA,KAAA,CAAM,gBAAgB,CAAA,CAAE,SAAS,GAAK,EAAA;AAClD,YAAS,QAAA,CAAA,KAAA,CAAM,MAAO,CAAA,gBAAA,EAAkB,CAAC,CAAA,CAAA;AAAA,WACnC,MAAA;AACN,YAAS,QAAA,CAAA,KAAA,CAAM,MAAO,CAAA,OAAA,EAAS,CAAC,CAAA,CAAA;AAAA,WACjC;AAAA,SACM,MAAA;AACN,UAAS,QAAA,CAAA,KAAA,CAAM,MAAO,CAAA,OAAA,EAAS,CAAC,CAAA,CAAA;AAAA,SACjC;AAAA,OACD;AAAA,KACM,MAAA;AACN,MAAM,MAAA,SAAA,GAAY,QAAS,CAAA,KAAA,CAAM,MAAS,GAAA,CAAA,CAAA;AAC1C,MAAA,IAAI,aAAa,CAAK,IAAA,QAAA,CAAS,MAAM,SAAS,CAAA,CAAE,SAAS,GAAK,EAAA;AAC7D,QAAA,QAAA,CAAS,MAAM,GAAI,EAAA,CAAA;AAAA,OACpB;AAAA,KACD;AAEA,IAAA,SAAA,CAAU,KAAQ,GAAA,KAAA,CAAA;AAAA,GACnB,CAAA;AAGA,EAAM,MAAA,mBAAA,GAAsB,CAAC,MAAA,EAAuB,KAAwB,KAAA;AAC3E,IAAM,MAAA,OAAA,GAAU,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACpC,IAAA,IAAI,CAAC,OAAA;AAAS,MAAA,OAAA;AAEd,IAAA,QAAQ,MAAQ;AAAA,MACf,KAAKE,oBAAc,IAAM,EAAA;AAExB,QAAgB,eAAA,CAAA,OAAA,CAAQ,OAAS,EAAA,0BAAA,EAAQ,0BAAM,CAAA,CAAA;AAC/C,QAAA,MAAA;AAAA,OACD;AAAA,MACA,KAAKA,mBAAc,CAAA,IAAA;AAClB,QAAA,OAAA,CAAQ,SAAY,GAAA,IAAA,CAAA;AACpB,QAAA,OAAA,CAAQ,cAAc,OAAQ,CAAA,OAAA,CAAA;AAC9B,QAAA,MAAA;AAAA,MACD,KAAKA,mBAAc,CAAA,MAAA;AAClB,QAAA,YAAA,CAAa,mBAAmB,KAAK,CAAA,CAAA;AACrC,QAAK,IAAA,CAAA,aAAA,EAAe,SAAS,KAAK,CAAA,CAAA;AAClC,QAAA,MAAA;AAAA,MACD,KAAKA,oBAAc,KAAO,EAAA;AACzB,QAAM,MAAA,SAAA,GAAY,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACtC,QAAA,MAAM,mBAAmB,KAAQ,GAAA,CAAA,CAAA;AACjC,QAAM,MAAA,WAAA,GAAc,QAAS,CAAA,KAAA,CAAM,gBAAgB,CAAA,CAAA;AAEnD,QAAI,IAAA,WAAA,IAAe,WAAY,CAAA,IAAA,KAAS,GAAK,EAAA;AAC5C,UAAA,MAAM,gBAAmB,GAAA;AAAA,YACxB,GAAG,SAAA;AAAA,YACH,OAAS,EAAA,EAAA;AAAA,YACT,YAAc,EAAA,EAAA;AAAA,YACd,gBAAkB,EAAA,EAAA;AAAA,YAClB,OAAS,EAAA,KAAA;AAAA,YACT,UAAY,EAAA,KAAA;AAAA,YACZ,SAAW,EAAA,IAAA;AAAA,YACX,MAAQ,EAAA,KAAA;AAAA,YACR,QAAQ,SAAU,CAAA,MAAA;AAAA,YAClB,MAAM,SAAU,CAAA,IAAA;AAAA,YAChB,MAAM,SAAU,CAAA,IAAA;AAAA,YAChB,aAAaC,iBAAY,CAAA,SAAA;AAAA,YACzB,cAAgB,EAAA,CAAA;AAAA,YAChB,YAAc,EAAA,CAAA;AAAA,WACf,CAAA;AACA,UAAA,QAAA,CAAS,KAAM,CAAA,MAAA,CAAO,KAAO,EAAA,CAAA,EAAG,gBAAgB,CAAA,CAAA;AAEhD,UAAAH,YAAA,CAAS,MAAM;AACd,YAAI,IAAA,cAAA,CAAe,MAAM,KAAK,CAAA;AAAG,cAAe,cAAA,CAAA,KAAA,CAAM,KAAK,CAAA,CAAE,SAAY,GAAA,EAAA,CAAA;AACzE,YAAI,IAAA,kBAAA,CAAmB,MAAM,KAAK,CAAA;AAAG,cAAmB,kBAAA,CAAA,KAAA,CAAM,KAAK,CAAA,CAAE,SAAY,GAAA,EAAA,CAAA;AACjF,YAAI,IAAA,mBAAA,CAAoB,MAAM,KAAK,CAAA;AAAG,cAAoB,mBAAA,CAAA,KAAA,CAAM,KAAK,CAAA,CAAE,SAAY,GAAA,EAAA,CAAA;AACnF,YAAA,UAAA,CAAW,MAAM;AAChB,cAAQ,OAAA,CAAA,WAAA,CAAY,OAAW,IAAA,EAAA,EAAI,KAAK,CAAA,CAAA;AAAA,eACtC,EAAE,CAAA,CAAA;AAAA,WACL,CAAA,CAAA;AAAA,SACF;AACA,QAAA,MAAA;AAAA,OACD;AAAA,MACA,KAAKE,mBAAc,CAAA,IAAA;AAClB,QAAA,YAAA,CAAa,cAAc,KAAO,EAAA;AAAA,UACjC,OAAS,EAAA,IAAA;AAAA,UACT,UAAY,EAAA,KAAA;AAAA,SACZ,CAAA,CAAA;AACD,QAAA,MAAA;AAAA,MACD,KAAKA,mBAAc,CAAA,OAAA;AAClB,QAAA,YAAA,CAAa,cAAc,KAAO,EAAA;AAAA,UACjC,OAAS,EAAA,KAAA;AAAA,UACT,UAAY,EAAA,IAAA;AAAA,SACZ,CAAA,CAAA;AACD,QAAA,MAAA;AAAA,MACD,KAAKA,mBAAc,CAAA,QAAA;AAClB,QAAA,OAAA,CAAQ,IAAI,UAAU,CAAA,CAAA;AACtB,QAAA,YAAA,CAAa,cAAc,KAAO,EAAA;AAAA,UACjC,UAAY,EAAA,IAAA;AAAA,UACZ,IAAM,EAAA,UAAA;AAAA,SACN,CAAA,CAAA;AACD,QAAA,MAAA;AAAA,KACF;AAAA,GACD,CAAA;AAGA,EAAM,MAAA,QAAA,GAAW,CAAC,KAAA,EAAe,UAA6B,KAAA;AAC7D,IAAM,MAAA,OAAA,GAAU,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACpC,IAAI,IAAA,CAAC,OAAW,IAAA,CAAC,OAAQ,CAAA,WAAA;AAAa,MAAA,OAAA;AAEtC,IAAS,QAAA,CAAA,KAAA,CAAM,KAAK,CAAI,GAAA;AAAA,MACvB,GAAG,OAAA;AAAA,MACH,OAAS,EAAA,UAAA;AAAA,MACT,SAAW,EAAA,KAAA;AAAA,MACX,WAAa,EAAA,KAAA,CAAA;AAAA,KACd,CAAA;AACA,IAAAF,YAAA,CAAS,MAAM;AACd,MAAc,aAAA,CAAA,UAAA,EAAY,QAAQ,KAAK,CAAA,CAAA;AAAA,KACvC,CAAA,CAAA;AAGD,IAAM,MAAA,YAAA,GAAe,KAAQ,GAAA,CAAA,GAAI,QAAS,CAAA,KAAA,CAAM,MAAU,IAAA,QAAA,CAAS,KAAM,CAAA,KAAA,GAAQ,CAAC,CAAA,CAAE,IAAS,KAAA,IAAA,CAAA;AAC7F,IAAA,IAAI,YAAc,EAAA;AACjB,MAAA,QAAA,CAAS,KAAM,CAAA,MAAA,CAAO,KAAQ,GAAA,CAAA,EAAG,CAAC,CAAA,CAAA;AAAA,KACnC;AAIA,IAAA,MAAM,iBAAiB,KAAQ,GAAA,CAAA,CAAA;AAI/B,IAAAA,YAAA,CAAS,MAAM;AACd,MAAA,OAAA,CAAQ,YAAY,cAAc,CAAA,CAAA;AAAA,KAClC,CAAA,CAAA;AACD,IAAK,IAAA,CAAA,aAAA,EAAe,SAAS,KAAK,CAAA,CAAA;AAAA,GACnC,CAAA;AAGA,EAAM,MAAA,UAAA,GAAa,CAAC,KAAwB,KAAA;AAC3C,IAAM,MAAA,OAAA,GAAU,QAAS,CAAA,KAAA,CAAM,KAAK,CAAA,CAAA;AACpC,IAAA,IAAI,CAAC,OAAA;AAAS,MAAA,OAAA;AAEd,IAAA,OAAA,CAAQ,SAAY,GAAA,KAAA,CAAA;AACpB,IAAA,OAAA,CAAQ,WAAc,GAAA,EAAA,CAAA;AACtB,IAAAA,YAAA,CAAS,MAAM;AACd,MAAc,aAAA,CAAA,OAAA,CAAQ,OAAS,EAAA,MAAA,EAAQ,KAAK,CAAA,CAAA;AAAA,KAC5C,CAAA,CAAA;AAAA,GACF,CAAA;AAGA,EAAA,MAAM,kBAAkB,MAAM;AAC7B,IAAA,UAAA,CAAW,KAAQ,GAAA,IAAA,CAAA;AAEnB,IAAA,IAAI,6CAAc,KAAO,EAAA;AACxB,MAAA,YAAA,CAAa,MAAM,aAAc,EAAA,CAAA;AAAA,KAClC;AAAA,GACD,CAAA;AAEA,EAAM,MAAA,eAAA,GAAkB,CAAC,CAAiB,KAAA;AACzC,IAAM,MAAA,IAAA,GAAQ,CAAE,CAAA,MAAA,CAAuB,qBAAsB,EAAA,CAAA;AAC7D,IAAA,IAAI,CAAE,CAAA,OAAA,GAAU,IAAK,CAAA,IAAA,IAAQ,EAAE,OAAU,GAAA,IAAA,CAAK,KAAS,IAAA,CAAA,CAAE,UAAU,IAAK,CAAA,GAAA,IAAO,CAAE,CAAA,OAAA,GAAU,KAAK,MAAQ,EAAA;AACvG,MAAA,UAAA,CAAW,KAAQ,GAAA,KAAA,CAAA;AAAA,KACpB;AAAA,GACD,CAAA;AAEA,EAAM,MAAA,UAAA,GAAa,OAAO,CAAiB,KAAA;AAxrB5C,IAAA,IAAA,EAAA,CAAA;AAyrBE,IAAA,UAAA,CAAW,KAAQ,GAAA,KAAA,CAAA;AAGnB,IAAM,MAAA,KAAA,GAAA,CAAQ,EAAE,GAAA,CAAA,CAAA,YAAA,KAAF,IAAgB,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAA,CAAA;AAC9B,IAAI,IAAA,KAAA,IAAS,KAAM,CAAA,MAAA,GAAS,CAAG,EAAA;AAC9B,MAAM,MAAA,QAAA,GAAW,MAAM,OAAQ,CAAA,GAAA;AAAA,QAC9B,MAAM,IAAK,CAAA,KAAK,CAAE,CAAA,GAAA,CAAI,OAAM,IAAQ,KAAA;AACnC,UAAA,IAAI,MAAS,GAAA,EAAA,CAAA;AACb,UAAA,IAAI,IAAK,CAAA,IAAA,CAAK,UAAW,CAAA,QAAQ,CAAG,EAAA;AACnC,YAAS,MAAA,GAAA,MAAM,IAAI,OAAA,CAAQ,CAAW,OAAA,KAAA;AACrC,cAAM,MAAA,MAAA,GAAS,IAAI,UAAW,EAAA,CAAA;AAC9B,cAAO,MAAA,CAAA,MAAA,GAAS,CAAAI,EAAK,KAAA;AApsB5B,gBAAAC,IAAAA,GAAAA,CAAAA;AAqsBQ,gBAAA,OAAA,CAAA,CAAQA,GAAAD,GAAAA,EAAAA,CAAE,MAAF,KAAA,IAAA,GAAA,KAAA,CAAA,GAAAC,IAAU,MAAgB,CAAA,CAAA;AAAA,eACnC,CAAA;AACA,cAAA,MAAA,CAAO,cAAc,IAAI,CAAA,CAAA;AAAA,aACzB,CAAA,CAAA;AAAA,WACF;AACA,UAAO,OAAA;AAAA,YACN,IAAI,IAAK,CAAA,MAAA,EAAS,CAAA,QAAA,CAAS,EAAE,CAAE,CAAA,KAAA,CAAM,CAAC,CAAA,CAAE,OAAO,EAAI,EAAA,GAAG,CAAE,CAAA,KAAA,CAAM,GAAG,EAAE,CAAA;AAAA,YACnE,IAAA;AAAA,YACA,MAAM,IAAK,CAAA,IAAA;AAAA,YACX,UAAU,IAAK,CAAA,IAAA;AAAA,YACf,UAAU,IAAK,CAAA,IAAA;AAAA,YACf,cAAc,IAAK,CAAA,YAAA;AAAA,YACnB,OAAA,EAAS,GAAI,CAAA,eAAA,CAAgB,IAAI,CAAA;AAAA,YACjC,MAAA;AAAA,WACD,CAAA;AAAA,SACA,CAAA;AAAA,OACF,CAAA;AAEA,MAAA,IAAI,6CAAc,KAAO,EAAA;AACxB,QAAa,YAAA,CAAA,KAAA,CAAM,WAAY,CAAA,QAAA,EAAU,MAAM,CAAA,CAAA;AAAA,OAChD;AAAA,KACD;AAGA,IAAA,IAAI,6CAAc,KAAO,EAAA;AACxB,MAAA,YAAA,CAAa,MAAM,cAAe,EAAA,CAAA;AAAA,KACnC;AAAA,GACD,CAAA;AAGA,EAAA,MAAM,YAAY,MAAM;AACvB,IAAI,IAAA,CAAC,UAAU,KAAO,EAAA;AACrB,MAAK,IAAA,EAAA,CAAA;AAAA,KACN;AACA,IAAA,SAAA,CAAU,KAAQ,GAAA,IAAA,CAAA;AAAA,GACnB,CAAA;AAEA,EAAA,MAAM,kBAAkB,MAAM;AAC7B,IAAI,IAAA,CAAC,aAAa,KAAO,EAAA;AACxB,MAAA,YAAA,CAAa,KAAQ,GAAA,IAAA,CAAA;AACrB,MAAW,UAAA,EAAA,CAAA;AACX,MAAA,SAAA,CAAU,KAAQ,GAAA,KAAA,CAAA;AAAA,KACnB;AAAA,GACD,CAAA;AAEA,EAAO,OAAA;AAAA;AAAA,IAEN,QAAA;AAAA,IACA,SAAA;AAAA,IACA,UAAA;AAAA,IACA,kBAAA;AAAA,IACA,SAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,QAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,QAAA;AAAA,IACA,SAAA;AAAA,IACA,WAAA;AAAA,IACA,UAAA;AAAA,IACA,uBAAA;AAAA,IACA,YAAA;AAAA,IACA,cAAA;AAAA,IACA,kBAAA;AAAA,IACA,mBAAA;AAAA;AAAA,IAEA,IAAA;AAAA,IACA,WAAA;AAAA,IACA,gBAAA;AAAA,IACA,UAAA;AAAA,IACA,UAAA;AAAA,IACA,mBAAA;AAAA,IACA,QAAA;AAAA,IACA,UAAA;AAAA,IACA,gBAAA;AAAA,IACA,iBAAA;AAAA,IACA,MAAA;AAAA,IACA,YAAA;AAAA,IACA,YAAA;AAAA,IACA,oBAAA;AAAA,IACA,eAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,SAAA;AAAA,IACA,eAAA;AAAA,IACA,UAAA;AAAA,IACA,cAAA;AAAA,IACA,YAAA;AAAA,IACA,aAAA;AAAA,IACA,aAAA;AAAA,GACD,CAAA;AACD;;;;"}
@@ -5,7 +5,7 @@ var fetchStream = require('../../../utils/fetchStream.js');
5
5
  var tools = require('../../../utils/tools.js');
6
6
  var types = require('./types.js');
7
7
 
8
- function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enableDeepThinking, currentComponentName, typeFlag, moduleInfo, emit, afterSend, enqueueRender, renderContent, markdownToHtml, stop }) {
8
+ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enableDeepThinking, currentComponentName, typeFlag, moduleInfo, fileData, emit, afterSend, enqueueRender, renderContent, markdownToHtml, stop }) {
9
9
  const fetchStream$1 = vue.ref(null);
10
10
  const resultItem = vue.ref(null);
11
11
  const generateChatId = (prefix = "ai_") => {
@@ -16,6 +16,7 @@ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enabl
16
16
  try {
17
17
  if (isUnmounting.value)
18
18
  return;
19
+ console.log("openSSE fileData:", JSON.stringify(fileData.value.map((f) => ({ name: f.name, fileId: f.fileId, url: f.url }))));
19
20
  isChating.value = true;
20
21
  const currentAiMessage = chatList.value.find((item) => item.isChating);
21
22
  if (currentAiMessage) {
@@ -47,7 +48,8 @@ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enabl
47
48
  typeFlag: typeFlag.value,
48
49
  msgList: [],
49
50
  isRead: true,
50
- dataObj: {}
51
+ dataObj: {},
52
+ selecting: false
51
53
  };
52
54
  if (insertIndex !== void 0 && insertIndex <= chatList.value.length) {
53
55
  chatList.value.splice(insertIndex, 0, chatItem);
@@ -57,10 +59,12 @@ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enabl
57
59
  }
58
60
  currIndex.value = insertIndex != null ? insertIndex : chatList.value.length - 1;
59
61
  const BodyConfig = (_c = (_b = (_a = moduleInfo.value) == null ? void 0 : _a.config) == null ? void 0 : _b.body) == null ? void 0 : _c.call(_b);
60
- const requestBody = ((_d = BodyConfig == null ? void 0 : BodyConfig.messages) == null ? void 0 : _d.length) ? { ...BodyConfig, messages: [...BodyConfig.messages], model: enableDeepThinking.value ? "deepseek-reasoner" : "deepseek-v3" } : {
62
+ const fileIds = fileData.value.filter((f) => f.fileId).map((f) => f.fileId);
63
+ const requestBody = ((_d = BodyConfig == null ? void 0 : BodyConfig.messages) == null ? void 0 : _d.length) ? { ...BodyConfig, messages: [...BodyConfig.messages], model: enableDeepThinking.value ? "deepseek-reasoner" : "deepseek-v3", fileIds: fileIds.length ? fileIds : void 0 } : {
61
64
  model: enableDeepThinking.value ? "deepseek-reasoner" : "deepseek-v3",
62
65
  messages: [{ role: "user", content: userContent }],
63
- stream: true
66
+ stream: true,
67
+ fileIds: fileIds.length ? fileIds : void 0
64
68
  };
65
69
  if ((_e = BodyConfig == null ? void 0 : BodyConfig.messages) == null ? void 0 : _e.length) {
66
70
  BodyConfig.messages[0].content = userContent;
@@ -187,6 +191,12 @@ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enabl
187
191
  }
188
192
  }
189
193
  }
194
+ if (newAiMessage) {
195
+ newAiMessage.content = aiContent;
196
+ newAiMessage.msgList = [...aiContentList];
197
+ newAiMessage.reasoningContent = reasoningContent;
198
+ newAiMessage.dataObj = result;
199
+ }
190
200
  if (chatList.value.some((ele) => ele.chatId === chatId)) {
191
201
  enqueueRender({
192
202
  mainContent: aiContent,
@@ -1 +1 @@
1
- {"version":3,"file":"useSSE.js","sources":["../../../../../../../../packages/components/touchchat/src/AiChat/Chat/useSSE.ts"],"sourcesContent":["/**\n * SSE 流式请求逻辑 Composable\n */\n\nimport { ref, type Ref, nextTick } from 'vue'\nimport { FetchStream } from '../../../utils/fetchStream.ts'\nimport { showToast } from '../../../utils/tools.ts'\nimport { ThinkStatus, type ChatMessage, type ModuleItem, type ResultItem, type RenderData, type RespoKeyConfig, ChatMsgList } from './types'\n\nexport interface UseSSEOptions {\n\tchatList: Ref<ChatMessage[]>\n\tcurrIndex: Ref<number>\n\tisChating: Ref<boolean>\n\tisMounted: Ref<boolean>\n\tisUnmounting: Ref<boolean>\n\tinputValue: Ref<string>\n\tenableDeepThinking: Ref<boolean>\n\tcurrentComponentName: Ref<string>\n\ttypeFlag: Ref<string>\n\tmoduleInfo: Ref<ModuleItem>\n\temit: (event: string, ...args: any[]) => void\n\tafterSend: (result: object) => void\n\tenqueueRender: (data: RenderData) => void\n\trenderContent: (content: string, type: 'main' | 'thinking' | 'reasoning', index?: number) => void\n\tmarkdownToHtml: (content: string) => string\n\tscrollToBottom: () => void\n\tstop: (item: ChatMessage, index: number) => void\n}\n\nexport function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enableDeepThinking, currentComponentName, typeFlag, moduleInfo, emit, afterSend, enqueueRender, renderContent, markdownToHtml, stop }: UseSSEOptions) {\n\tconst fetchStream = ref<InstanceType<typeof FetchStream> | null>(null)\n\tconst resultItem = ref<ResultItem | null>(null)\n\t// 生成聊天ID\n\tconst generateChatId = (prefix: string = 'ai_'): string => {\n\t\treturn prefix + Math.random().toString(36).slice(2).padEnd(10, '0').slice(0, 10)\n\t}\n\n\t// SSE 连接\n\tconst openSSE = (userContent: string, insertIndex?: number): void => {\n\t\ttry {\n\t\t\tif (isUnmounting.value) return\n\t\t\tisChating.value = true\n\n\t\t\tconst currentAiMessage = chatList.value.find((item: any) => item.isChating)\n\t\t\tif (currentAiMessage) {\n\t\t\t\tcurrentAiMessage.isShowLike = true\n\t\t\t\tcurrentAiMessage.isShowCopy = true\n\t\t\t\tcurrentAiMessage.isError = false\n\t\t\t\tcurrentAiMessage.componentName = currentComponentName.value\n\t\t\t}\n\n\t\t\tconst chatId = currentAiMessage?.chatId || generateChatId()\n\t\t\tlet aiContent = currentAiMessage?.content || ''\n\t\t\tconst aiContentList: any[] = currentAiMessage?.msgList || []\n\t\t\tlet reasoningContent = currentAiMessage?.reasoningContent || ''\n\t\t\tlet allAiContent = ''\n\n\t\t\tif (!currentAiMessage) {\n\t\t\t\tconst chatItem: ChatMessage & ChatMsgList = {\n\t\t\t\t\tchatId: chatId,\n\t\t\t\t\tuser: 'ai',\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tisChating: true,\n\t\t\t\t\tcontent: '',\n\t\t\t\t\tthinkContent: '',\n\t\t\t\t\treasoningContent: '',\n\t\t\t\t\tthinkStatus: ThinkStatus.THINKING,\n\t\t\t\t\tthinkStartTime: Date.now(),\n\t\t\t\t\tisShowLike: true,\n\t\t\t\t\tisShowCopy: true,\n\t\t\t\t\tisError: false,\n\t\t\t\t\tcomponentName: currentComponentName.value,\n\t\t\t\t\ttypeFlag: typeFlag.value,\n\t\t\t\t\tmsgList: [],\n\t\t\t\t\tisRead: true,\n\t\t\t\t\tdataObj: {}\n\t\t\t\t}\n\t\t\t\tif (insertIndex !== undefined && insertIndex <= chatList.value.length) {\n\t\t\t\t\tchatList.value.splice(insertIndex, 0, chatItem)\n\t\t\t\t} else {\n\t\t\t\t\tchatList.value.push(chatItem)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrIndex.value = insertIndex ?? chatList.value.length - 1\n\n\t\t\t// 构建请求配置\n\t\t\tconst BodyConfig = moduleInfo.value?.config?.body?.()\n\t\t\tconst requestBody = BodyConfig?.messages?.length\n\t\t\t\t? { ...BodyConfig, messages: [...BodyConfig.messages], model: enableDeepThinking.value ? 'deepseek-reasoner' : 'deepseek-v3' }\n\t\t\t\t: {\n\t\t\t\t\t\tmodel: enableDeepThinking.value ? 'deepseek-reasoner' : 'deepseek-v3',\n\t\t\t\t\t\tmessages: [{ role: 'user', content: userContent }],\n\t\t\t\t\t\tstream: true\n\t\t\t\t\t}\n\n\t\t\t// 更新消息内容\n\t\t\tif (BodyConfig?.messages?.length) {\n\t\t\t\tBodyConfig.messages[0].content = userContent\n\t\t\t}\n\t\t\tconst apiUrl = typeof moduleInfo.value?.config?.action === 'function' ? moduleInfo.value.config.action() : moduleInfo.value?.config?.action || 'https://api.apiyi.com/v1/chat/completions'\n\n\t\t\tfetchStream.value = new FetchStream({\n\t\t\t\turl: apiUrl,\n\t\t\t\trequestInit: {\n\t\t\t\t\theaders: moduleInfo.value?.config?.headers\n\t\t\t\t\t\t? new Headers(moduleInfo.value.config.headers() as Record<string, string>)\n\t\t\t\t\t\t: new Headers({\n\t\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t\t\tAuthorization: 'Bearer sk-fe9MtODvds8wpzz05f3417Fe3e9641C1926e6fC588425dEd'\n\t\t\t\t\t\t\t} as Record<string, string>),\n\t\t\t\t\tbody: JSON.stringify(requestBody)\n\t\t\t\t},\n\t\t\t\tonmessage: (line: string) => {\n\t\t\t\t\tif (isUnmounting.value) return\n\t\t\t\t\tlet dataString = ''\n\t\t\t\t\tif (line.length) {\n\t\t\t\t\t\tif (line.includes('data:')) {\n\t\t\t\t\t\t\tconst match = line.match(/\\{[\\s\\S]*\\}/)\n\t\t\t\t\t\t\tdataString = match ? match[0] : ''\n\t\t\t\t\t\t} else if (line.startsWith('{') && line.endsWith('}')) {\n\t\t\t\t\t\t\tdataString = line\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tdataString = dataString.trim()\n\t\t\t\t\tconst respoKeyConfig = moduleInfo.value?.config?.respoKey ?? undefined\n\t\t\t\t\tconst respoKey: RespoKeyConfig | undefined = typeof respoKeyConfig === 'function' ? respoKeyConfig() : respoKeyConfig\n\t\t\t\t\tconst deepseekFlag = moduleInfo.value?.name === 'deepseek-v3'\n\t\t\t\t\tif (dataString && ((dataString.startsWith('{') && dataString.endsWith('}')) || !respoKey?.content)) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst result = !respoKey?.content && moduleInfo.value ? dataString : JSON.parse(dataString)\n\t\t\t\t\t\t\tconst newAiMessage = chatList.value[currIndex.value]\n\n\t\t\t\t\t\t\t// deepseek\n\t\t\t\t\t\t\tif (deepseekFlag || !moduleInfo.value) {\n\t\t\t\t\t\t\t\tif (result?.choices?.[0]?.delta?.content) {\n\t\t\t\t\t\t\t\t\taiContent += result.choices[0].delta.content\n\t\t\t\t\t\t\t\t\tif (newAiMessage?.thinkStatus === ThinkStatus.THINKING) {\n\t\t\t\t\t\t\t\t\t\tnewAiMessage.thinkStatus = ThinkStatus.COMPLETED\n\t\t\t\t\t\t\t\t\t\tnewAiMessage.thinkTime = Date.now() - (newAiMessage.thinkStartTime || Date.now())\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (result?.choices?.[0]?.delta?.reasoning_content) {\n\t\t\t\t\t\t\t\t\treasoningContent += result.choices[0].delta.reasoning_content\n\t\t\t\t\t\t\t\t\tif (!newAiMessage?.thinkStatus) {\n\t\t\t\t\t\t\t\t\t\tnewAiMessage.thinkStatus = ThinkStatus.THINKING\n\t\t\t\t\t\t\t\t\t\tnewAiMessage.thinkStartTime = Date.now()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tallAiContent = reasoningContent + aiContent\n\t\t\t\t\t\t\t} else if (respoKey) {\n\t\t\t\t\t\t\t\tif (result && result[respoKey.content] && (result[respoKey.category] === respoKey.contentCategory || !result[respoKey.category])) {\n\t\t\t\t\t\t\t\t\taiContent += result[respoKey.content]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// 匹配不规则的结束\n\t\t\t\t\t\t\t\tif (result && result[respoKey.category] === 'done') {\n\t\t\t\t\t\t\t\t\tresultItem.value = result\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// 匹配不规则的错误提示\n\t\t\t\t\t\t\t\tif (result && result[respoKey.category] === 'error') {\n\t\t\t\t\t\t\t\t\tconst errorMessage = respoKey.all && result[respoKey.all] ? result[respoKey.all] : '当前网络异常'\n\t\t\t\t\t\t\t\t\tconst currentAiMessage = chatList.value[currIndex.value]\n\t\t\t\t\t\t\t\t\tif (currentAiMessage.chatId) {\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.content = `<div style=\"color: red; display: flex; align-items: center;\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\n\t\t\t\t\t\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.5 15.5C11.6421 15.5 15 12.1421 15 8C15 3.85786 11.6421 0.5 7.5 0.5C3.35786 0.5 0 3.85786 0 8C0 12.1421 3.35786 15.5 7.5 15.5ZM9.7539 4.9506L10.5494 5.7461L8.2951 8.0001L10.5494 10.2539L9.7539 11.0494L7.5001 8.7951L5.2461 11.0494L4.4506 10.2539L6.7051 8.0001L4.4506 5.7461L5.2461 4.9506L7.5001 7.2051L9.7539 4.9506Z\" fill=\"#F93920\"/>\n\t\t\t\t\t\t\t\t\t\t</svg>${errorMessage}</div>`\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.isChating = false\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.componentName = ''\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.isShowLike = false\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.isShowCopy = false\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.isError = true\n\n\t\t\t\t\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\t\t\t\t\temit('sendMessage', [...chatList.value])\n\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\tafterSend(result)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\t\t\tif (result.type === 'markdown') {\n\t\t\t\t\t\t\t\t\t\tconst mapKey = `markdown_${result.order}`\n\t\t\t\t\t\t\t\t\t\tconst hasKey = aiContentList.findIndex(con => con.mapKey === mapKey)\n\t\t\t\t\t\t\t\t\t\tif (hasKey !== -1) {\n\t\t\t\t\t\t\t\t\t\t\taiContentList[hasKey].content += result.content\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\taiContentList.push({ mapKey, ...result })\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else if (result.type === 'a2ui') {\n\t\t\t\t\t\t\t\t\t\tconst mapKey = result.surfaceId\n\t\t\t\t\t\t\t\t\t\tconst hasKey = aiContentList.findIndex(con => con.surfaceId === mapKey)\n\t\t\t\t\t\t\t\t\t\tif (hasKey !== -1) {\n\t\t\t\t\t\t\t\t\t\t\tconst updatedMsgs = [...aiContentList[hasKey].msgs, ...result.msgs]\n\n\t\t\t\t\t\t\t\t\t\t\taiContentList[hasKey] = {\n\t\t\t\t\t\t\t\t\t\t\t\t...aiContentList[hasKey],\n\t\t\t\t\t\t\t\t\t\t\t\tmsgs: updatedMsgs\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\taiContentList.push({\n\t\t\t\t\t\t\t\t\t\t\t\t...result,\n\t\t\t\t\t\t\t\t\t\t\t\tmsgs: result.msgs ? [...result.msgs] : []\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else if (result.type) {\n\t\t\t\t\t\t\t\t\t\tconst mapKey = `${result.type}_${result.order}`\n\t\t\t\t\t\t\t\t\t\taiContentList.push({ mapKey, ...result })\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (result && result[respoKey.content]) {\n\t\t\t\t\t\t\t\t\taiContent += result[respoKey.content]\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// 后端无allAiContent完整信息 前端手动拼接\n\t\t\t\t\t\t\t\tif (aiContent || reasoningContent) {\n\t\t\t\t\t\t\t\t\tallAiContent = aiContent + reasoningContent\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (respoKey && respoKey.all && result && result[respoKey.all] && result[respoKey.category] === respoKey.allCategory) {\n\t\t\t\t\t\t\t\t\tallAiContent = result[respoKey.all]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// 后端返回匹配不规则的流式输出\n\t\t\t\t\t\t\t\tif (respoKey && result && typeof result === 'string' && result !== '[DONE]') {\n\t\t\t\t\t\t\t\t\taiContent += result\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// 后端返回匹配不规则的流式输出 结束\n\t\t\t\t\t\t\t\tif (respoKey && result && typeof result === 'string' && result === '[DONE]') {\n\t\t\t\t\t\t\t\t\tconst index = chatList.value.findIndex((ele: any) => ele.chatId === chatId)\n\t\t\t\t\t\t\t\t\tif (index !== -1 && chatList.value[index]) {\n\t\t\t\t\t\t\t\t\t\tisChating.value = false\n\t\t\t\t\t\t\t\t\t\tchatList.value[index].isChating = false\n\t\t\t\t\t\t\t\t\t\temit('sendMessage', JSON.parse(JSON.stringify(chatList.value)))\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (chatList.value.some((ele: any) => ele.chatId === chatId)) {\n\t\t\t\t\t\t\t\tenqueueRender({\n\t\t\t\t\t\t\t\t\tmainContent: aiContent,\n\t\t\t\t\t\t\t\t\tthinkContent: '',\n\t\t\t\t\t\t\t\t\treasoningContent: reasoningContent\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// type === 1 的情况已经在上面单独处理,这里不再重复渲染\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconsole.error('解析SSE消息失败:', error)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tondone: () => {\n\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\tisChating.value = false\n\t\t\t\t\t\tif (isUnmounting.value || !isMounted.value) return\n\t\t\t\t\t\tconst index = chatList.value.findIndex((ele: any) => ele.chatId === chatId)\n\t\t\t\t\t\tif (index !== -1 && chatList.value[index]) {\n\t\t\t\t\t\t\tchatList.value[index].isChating = false\n\t\t\t\t\t\t\tchatList.value[index].componentName = currentComponentName.value\n\t\t\t\t\t\t\tchatList.value[index].html = markdownToHtml(allAiContent)\n\t\t\t\t\t\t\tif (allAiContent) {\n\t\t\t\t\t\t\t\tif (resultItem.value) {\n\t\t\t\t\t\t\t\t\tresultItem.value.allAiContent = allAiContent\n\t\t\t\t\t\t\t\t\tafterSend(resultItem.value)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tafterSend({ allAiContent })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst waitForRenderComplete = () => {\n\t\t\t\t\t\t\t\t// 这里假设需要检查渲染队列,通过回调检查\n\t\t\t\t\t\t\t\tif (chatList.value.length > 0) {\n\t\t\t\t\t\t\t\t\temit('sendMessage', JSON.parse(JSON.stringify(chatList.value)))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twaitForRenderComplete()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tonabort: () => {\n\t\t\t\t\thandleAbort()\n\t\t\t\t},\n\t\t\t\tonerror: (response: Error | Response) => {\n\t\t\t\t\thandleError(response)\n\t\t\t\t}\n\t\t\t})\n\t\t} catch (error) {\n\t\t\tconsole.error('OpenSSE错误:', error)\n\t\t\tisChating.value = false\n\t\t\tchatList.value[currIndex.value].content = `<div style=\"color: red; display: flex; align-items: center;\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\n\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.5 15.5C11.6421 15.5 15 12.1421 15 8C15 3.85786 11.6421 0.5 7.5 0.5C3.35786 0.5 0 3.85786 0 8C0 12.1421 3.35786 15.5 7.5 15.5ZM9.7539 4.9506L10.5494 5.7461L8.2951 8.0001L10.5494 10.2539L9.7539 11.0494L7.5001 8.7951L5.2461 11.0494L4.4506 10.2539L6.7051 8.0001L4.4506 5.7461L5.2461 4.9506L7.5001 7.2051L9.7539 4.9506Z\" fill=\"#F93920\"/>\n\t\t</svg>${'请求失败'}</div>`\n\t\t\tchatList.value[currIndex.value].isChating = false\n\t\t\tchatList.value[currIndex.value].isShowCopy = false\n\t\t\tchatList.value[currIndex.value].isShowLike = false\n\t\t\tshowToast('请求失败,请重试', 'error', 3000)\n\t\t}\n\t}\n\n\t// 处理请求中止\n\tconst handleAbort = (): void => {\n\t\tisChating.value = false\n\t\tif (isUnmounting.value) return\n\n\t\tconst currentAiMessage = chatList.value[currIndex.value]\n\t\tstop(chatList.value[currIndex.value], currIndex.value)\n\t\tconst hasContent = currentAiMessage && (currentAiMessage.content || currentAiMessage.thinkContent || currentAiMessage.reasoningContent)\n\n\t\tif (currentAiMessage) {\n\t\t\tif (currentAiMessage.thinkStatus === ThinkStatus.THINKING) {\n\t\t\t\tcurrentAiMessage.thinkStatus = ThinkStatus.STOPPED\n\t\t\t\tcurrentAiMessage.thinkTime = Date.now() - (currentAiMessage.thinkStartTime || Date.now())\n\t\t\t}\n\t\t\tif (!hasContent) {\n\t\t\t\tconst userMessageIndex = currIndex.value - 1\n\t\t\t\tif (userMessageIndex >= 0 && chatList.value[userMessageIndex].user === 'u') {\n\t\t\t\t\tchatList.value.splice(currIndex.value, 1)\n\t\t\t\t\tchatList.value.splice(userMessageIndex, 1)\n\t\t\t\t} else {\n\t\t\t\t\tchatList.value.splice(currIndex.value, 1)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst updatedAiMessage = {\n\t\t\t\t\t...currentAiMessage,\n\t\t\t\t\tisChating: false,\n\t\t\t\t\tcontent: currentAiMessage.content ? currentAiMessage.content + '...' : '',\n\t\t\t\t\tthinkContent: currentAiMessage.thinkContent ? currentAiMessage.thinkContent + '...' : undefined,\n\t\t\t\t\treasoningContent: currentAiMessage.reasoningContent ? currentAiMessage.reasoningContent + '...' : undefined,\n\t\t\t\t\tthinkStatus: currentAiMessage.thinkStatus as ThinkStatus,\n\t\t\t\t\tstop: true\n\t\t\t\t}\n\n\t\t\t\tchatList.value.splice(currIndex.value, 1, updatedAiMessage)\n\n\t\t\t\tnextTick(() => {\n\t\t\t\t\trenderContent(updatedAiMessage.thinkContent || '', 'thinking')\n\t\t\t\t\trenderContent(updatedAiMessage.reasoningContent || '', 'reasoning')\n\t\t\t\t\trenderContent(updatedAiMessage.content || '', 'main')\n\t\t\t\t\temit('sendMessage', [...chatList.value])\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tif (chatList.value.length > 0) {\n\t\t\temit('sendMessage', [...chatList.value])\n\t\t}\n\t}\n\n\t// 处理请求错误\n\tconst handleError = (response: Error | Response): void => {\n\t\tif (isUnmounting.value) return\n\t\tisChating.value = false\n\n\t\tlet errorMessage = '未知错误'\n\t\tif (response instanceof Error) {\n\t\t\tconsole.error('API请求错误:', response)\n\t\t\terrorMessage = response.message\n\t\t} else if (response instanceof Response) {\n\t\t\tconsole.error('API请求错误, 响应状态:', response.status, response.statusText)\n\t\t\terrorMessage = `请求失败: ${response.status} ${response.statusText}`\n\t\t}\n\n\t\tconst currentAiMessage = chatList.value[currIndex.value]\n\t\tif (currentAiMessage) {\n\t\t\tcurrentAiMessage.content = `<div style=\"color: red; display: flex; align-items: center;\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.5 15.5C11.6421 15.5 15 12.1421 15 8C15 3.85786 11.6421 0.5 7.5 0.5C3.35786 0.5 0 3.85786 0 8C0 12.1421 3.35786 15.5 7.5 15.5ZM9.7539 4.9506L10.5494 5.7461L8.2951 8.0001L10.5494 10.2539L9.7539 11.0494L7.5001 8.7951L5.2461 11.0494L4.4506 10.2539L6.7051 8.0001L4.4506 5.7461L5.2461 4.9506L7.5001 7.2051L9.7539 4.9506Z\" fill=\"#F93920\"/>\n</svg>${errorMessage}</div>`\n\t\t\tcurrentAiMessage.isChating = false\n\t\t\tcurrentAiMessage.componentName = ''\n\t\t\tcurrentAiMessage.isShowLike = false\n\t\t\tcurrentAiMessage.isShowCopy = false\n\t\t\tcurrentAiMessage.isError = true\n\n\t\t\tnextTick(() => {\n\t\t\t\trenderContent(currentAiMessage.content || '', 'main')\n\t\t\t\temit('sendMessage', [...chatList.value])\n\t\t\t})\n\t\t} else {\n\t\t\tshowToast(errorMessage, 'error', 3000)\n\t\t\temit('sendMessage', [...chatList.value])\n\t\t}\n\t}\n\n\t// 清理 SSE 连接\n\tconst cleanupSSE = () => {\n\t\tif (fetchStream.value) {\n\t\t\tfetchStream.value.abort()\n\t\t\tfetchStream.value = null\n\t\t}\n\t}\n\n\treturn {\n\t\tfetchStream,\n\t\tresultItem,\n\t\topenSSE,\n\t\thandleAbort,\n\t\thandleError,\n\t\tcleanupSSE\n\t}\n}\n"],"names":["fetchStream","ref","ThinkStatus","FetchStream","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","currentAiMessage","nextTick","showToast"],"mappings":"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"}
1
+ {"version":3,"file":"useSSE.js","sources":["../../../../../../../../packages/components/touchchat/src/AiChat/Chat/useSSE.ts"],"sourcesContent":["/**\n * SSE 流式请求逻辑 Composable\n */\n\nimport { ref, type Ref, nextTick } from 'vue'\nimport { FetchStream } from '../../../utils/fetchStream.ts'\nimport { showToast } from '../../../utils/tools.ts'\nimport { ThinkStatus, type ChatMessage, type ModuleItem, type ResultItem, type RenderData, type RespoKeyConfig, ChatMsgList, type FileItem } from './types'\n\nexport interface UseSSEOptions {\n\tchatList: Ref<ChatMessage[]>\n\tcurrIndex: Ref<number>\n\tisChating: Ref<boolean>\n\tisMounted: Ref<boolean>\n\tisUnmounting: Ref<boolean>\n\tinputValue: Ref<string>\n\tenableDeepThinking: Ref<boolean>\n\tcurrentComponentName: Ref<string>\n\ttypeFlag: Ref<string>\n\tmoduleInfo: Ref<ModuleItem>\n\tfileData: Ref<FileItem[]>\n\temit: (event: string, ...args: any[]) => void\n\tafterSend: (result: object) => void\n\tenqueueRender: (data: RenderData) => void\n\trenderContent: (content: string, type: 'main' | 'thinking' | 'reasoning', index?: number) => void\n\tmarkdownToHtml: (content: string) => string\n\tscrollToBottom: () => void\n\tstop: (item: ChatMessage, index: number) => void\n}\n\nexport function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enableDeepThinking, currentComponentName, typeFlag, moduleInfo, fileData, emit, afterSend, enqueueRender, renderContent, markdownToHtml, stop }: UseSSEOptions) {\n\tconst fetchStream = ref<InstanceType<typeof FetchStream> | null>(null)\n\tconst resultItem = ref<ResultItem | null>(null)\n\t// 生成聊天ID\n\tconst generateChatId = (prefix: string = 'ai_'): string => {\n\t\treturn prefix + Math.random().toString(36).slice(2).padEnd(10, '0').slice(0, 10)\n\t}\n\n\t// SSE 连接\n\tconst openSSE = (userContent: string, insertIndex?: number): void => {\n\t\ttry {\n\t\t\tif (isUnmounting.value) return\n\t\t\tconsole.log('openSSE fileData:', JSON.stringify(fileData.value.map(f => ({ name: f.name, fileId: f.fileId, url: f.url }))))\n\t\t\tisChating.value = true\n\n\t\t\tconst currentAiMessage = chatList.value.find((item: any) => item.isChating)\n\t\t\tif (currentAiMessage) {\n\t\t\t\tcurrentAiMessage.isShowLike = true\n\t\t\t\tcurrentAiMessage.isShowCopy = true\n\t\t\t\tcurrentAiMessage.isError = false\n\t\t\t\tcurrentAiMessage.componentName = currentComponentName.value\n\t\t\t}\n\n\t\t\tconst chatId = currentAiMessage?.chatId || generateChatId()\n\t\t\tlet aiContent = currentAiMessage?.content || ''\n\t\t\tconst aiContentList: any[] = currentAiMessage?.msgList || []\n\t\t\tlet reasoningContent = currentAiMessage?.reasoningContent || ''\n\t\t\tlet allAiContent = ''\n\n\t\t\tif (!currentAiMessage) {\n\t\t\t\tconst chatItem: ChatMessage & ChatMsgList = {\n\t\t\t\t\tchatId: chatId,\n\t\t\t\t\tuser: 'ai',\n\t\t\t\t\ttype: 'text',\n\t\t\t\t\tisChating: true,\n\t\t\t\t\tcontent: '',\n\t\t\t\t\tthinkContent: '',\n\t\t\t\t\treasoningContent: '',\n\t\t\t\t\tthinkStatus: ThinkStatus.THINKING,\n\t\t\t\t\tthinkStartTime: Date.now(),\n\t\t\t\t\tisShowLike: true,\n\t\t\t\t\tisShowCopy: true,\n\t\t\t\t\tisError: false,\n\t\t\t\t\tcomponentName: currentComponentName.value,\n\t\t\t\t\ttypeFlag: typeFlag.value,\n\t\t\t\t\tmsgList: [],\n\t\t\t\t\tisRead: true,\n\t\t\t\t\tdataObj: {},\n\t\t\t\t\tselecting: false\n\t\t\t\t}\n\t\t\t\tif (insertIndex !== undefined && insertIndex <= chatList.value.length) {\n\t\t\t\t\tchatList.value.splice(insertIndex, 0, chatItem)\n\t\t\t\t} else {\n\t\t\t\t\tchatList.value.push(chatItem)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tcurrIndex.value = insertIndex ?? chatList.value.length - 1\n\n\t\t\t// 构建请求配置\n\t\t\tconst BodyConfig = moduleInfo.value?.config?.body?.()\n\t\t\t// 提取已上传文件的 ID 列表\n\t\t\tconst fileIds = fileData.value.filter(f => f.fileId).map(f => f.fileId)\n\t\t\tconst requestBody = BodyConfig?.messages?.length\n\t\t\t\t? { ...BodyConfig, messages: [...BodyConfig.messages], model: enableDeepThinking.value ? 'deepseek-reasoner' : 'deepseek-v3', fileIds: fileIds.length ? fileIds : undefined }\n\t\t\t\t: {\n\t\t\t\t\t\tmodel: enableDeepThinking.value ? 'deepseek-reasoner' : 'deepseek-v3',\n\t\t\t\t\t\tmessages: [{ role: 'user', content: userContent }],\n\t\t\t\t\t\tstream: true,\n\t\t\t\t\t\tfileIds: fileIds.length ? fileIds : undefined\n\t\t\t\t\t}\n\n\t\t\t// 更新消息内容\n\t\t\tif (BodyConfig?.messages?.length) {\n\t\t\t\tBodyConfig.messages[0].content = userContent\n\t\t\t}\n\t\t\tconst apiUrl = typeof moduleInfo.value?.config?.action === 'function' ? moduleInfo.value.config.action() : moduleInfo.value?.config?.action || 'https://api.apiyi.com/v1/chat/completions'\n\n\t\t\tfetchStream.value = new FetchStream({\n\t\t\t\turl: apiUrl,\n\t\t\t\trequestInit: {\n\t\t\t\t\theaders: moduleInfo.value?.config?.headers\n\t\t\t\t\t\t? new Headers(moduleInfo.value.config.headers() as Record<string, string>)\n\t\t\t\t\t\t: new Headers({\n\t\t\t\t\t\t\t\t'Content-Type': 'application/json',\n\t\t\t\t\t\t\t\tAuthorization: 'Bearer sk-fe9MtODvds8wpzz05f3417Fe3e9641C1926e6fC588425dEd'\n\t\t\t\t\t\t\t} as Record<string, string>),\n\t\t\t\t\tbody: JSON.stringify(requestBody)\n\t\t\t\t},\n\t\t\t\tonmessage: (line: string) => {\n\t\t\t\t\tif (isUnmounting.value) return\n\t\t\t\t\tlet dataString = ''\n\t\t\t\t\tif (line.length) {\n\t\t\t\t\t\tif (line.includes('data:')) {\n\t\t\t\t\t\t\tconst match = line.match(/\\{[\\s\\S]*\\}/)\n\t\t\t\t\t\t\tdataString = match ? match[0] : ''\n\t\t\t\t\t\t} else if (line.startsWith('{') && line.endsWith('}')) {\n\t\t\t\t\t\t\tdataString = line\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tdataString = dataString.trim()\n\t\t\t\t\tconst respoKeyConfig = moduleInfo.value?.config?.respoKey ?? undefined\n\t\t\t\t\tconst respoKey: RespoKeyConfig | undefined = typeof respoKeyConfig === 'function' ? respoKeyConfig() : respoKeyConfig\n\t\t\t\t\tconst deepseekFlag = moduleInfo.value?.name === 'deepseek-v3'\n\t\t\t\t\tif (dataString && ((dataString.startsWith('{') && dataString.endsWith('}')) || !respoKey?.content)) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tconst result = !respoKey?.content && moduleInfo.value ? dataString : JSON.parse(dataString)\n\t\t\t\t\t\t\tconst newAiMessage = chatList.value[currIndex.value]\n\n\t\t\t\t\t\t\t// deepseek\n\t\t\t\t\t\t\tif (deepseekFlag || !moduleInfo.value) {\n\t\t\t\t\t\t\t\tif (result?.choices?.[0]?.delta?.content) {\n\t\t\t\t\t\t\t\t\taiContent += result.choices[0].delta.content\n\t\t\t\t\t\t\t\t\tif (newAiMessage?.thinkStatus === ThinkStatus.THINKING) {\n\t\t\t\t\t\t\t\t\t\tnewAiMessage.thinkStatus = ThinkStatus.COMPLETED\n\t\t\t\t\t\t\t\t\t\tnewAiMessage.thinkTime = Date.now() - (newAiMessage.thinkStartTime || Date.now())\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (result?.choices?.[0]?.delta?.reasoning_content) {\n\t\t\t\t\t\t\t\t\treasoningContent += result.choices[0].delta.reasoning_content\n\t\t\t\t\t\t\t\t\tif (!newAiMessage?.thinkStatus) {\n\t\t\t\t\t\t\t\t\t\tnewAiMessage.thinkStatus = ThinkStatus.THINKING\n\t\t\t\t\t\t\t\t\t\tnewAiMessage.thinkStartTime = Date.now()\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tallAiContent = reasoningContent + aiContent\n\t\t\t\t\t\t\t} else if (respoKey) {\n\t\t\t\t\t\t\t\tif (result && result[respoKey.content] && (result[respoKey.category] === respoKey.contentCategory || !result[respoKey.category])) {\n\t\t\t\t\t\t\t\t\taiContent += result[respoKey.content]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// 匹配不规则的结束\n\t\t\t\t\t\t\t\tif (result && result[respoKey.category] === 'done') {\n\t\t\t\t\t\t\t\t\tresultItem.value = result\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// 匹配不规则的错误提示\n\t\t\t\t\t\t\t\tif (result && result[respoKey.category] === 'error') {\n\t\t\t\t\t\t\t\t\tconst errorMessage = respoKey.all && result[respoKey.all] ? result[respoKey.all] : '当前网络异常'\n\t\t\t\t\t\t\t\t\tconst currentAiMessage = chatList.value[currIndex.value]\n\t\t\t\t\t\t\t\t\tif (currentAiMessage.chatId) {\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.content = `<div style=\"color: red; display: flex; align-items: center;\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\n\t\t\t\t\t\t\t\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.5 15.5C11.6421 15.5 15 12.1421 15 8C15 3.85786 11.6421 0.5 7.5 0.5C3.35786 0.5 0 3.85786 0 8C0 12.1421 3.35786 15.5 7.5 15.5ZM9.7539 4.9506L10.5494 5.7461L8.2951 8.0001L10.5494 10.2539L9.7539 11.0494L7.5001 8.7951L5.2461 11.0494L4.4506 10.2539L6.7051 8.0001L4.4506 5.7461L5.2461 4.9506L7.5001 7.2051L9.7539 4.9506Z\" fill=\"#F93920\"/>\n\t\t\t\t\t\t\t\t\t\t</svg>${errorMessage}</div>`\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.isChating = false\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.componentName = ''\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.isShowLike = false\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.isShowCopy = false\n\t\t\t\t\t\t\t\t\t\tcurrentAiMessage.isError = true\n\n\t\t\t\t\t\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\t\t\t\t\t\temit('sendMessage', [...chatList.value])\n\t\t\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t\t\t\tafterSend(result)\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif (result) {\n\t\t\t\t\t\t\t\t\tif (result.type === 'markdown') {\n\t\t\t\t\t\t\t\t\t\tconst mapKey = `markdown_${result.order}`\n\t\t\t\t\t\t\t\t\t\tconst hasKey = aiContentList.findIndex(con => con.mapKey === mapKey)\n\t\t\t\t\t\t\t\t\t\tif (hasKey !== -1) {\n\t\t\t\t\t\t\t\t\t\t\taiContentList[hasKey].content += result.content\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\taiContentList.push({ mapKey, ...result })\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else if (result.type === 'a2ui') {\n\t\t\t\t\t\t\t\t\t\tconst mapKey = result.surfaceId\n\t\t\t\t\t\t\t\t\t\tconst hasKey = aiContentList.findIndex(con => con.surfaceId === mapKey)\n\t\t\t\t\t\t\t\t\t\tif (hasKey !== -1) {\n\t\t\t\t\t\t\t\t\t\t\tconst updatedMsgs = [...aiContentList[hasKey].msgs, ...result.msgs]\n\n\t\t\t\t\t\t\t\t\t\t\taiContentList[hasKey] = {\n\t\t\t\t\t\t\t\t\t\t\t\t...aiContentList[hasKey],\n\t\t\t\t\t\t\t\t\t\t\t\tmsgs: updatedMsgs\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\taiContentList.push({\n\t\t\t\t\t\t\t\t\t\t\t\t...result,\n\t\t\t\t\t\t\t\t\t\t\t\tmsgs: result.msgs ? [...result.msgs] : []\n\t\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} else if (result.type) {\n\t\t\t\t\t\t\t\t\t\tconst mapKey = `${result.type}_${result.order}`\n\t\t\t\t\t\t\t\t\t\taiContentList.push({ mapKey, ...result })\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (result && result[respoKey.content]) {\n\t\t\t\t\t\t\t\t\taiContent += result[respoKey.content]\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// 后端无allAiContent完整信息 前端手动拼接\n\t\t\t\t\t\t\t\tif (aiContent || reasoningContent) {\n\t\t\t\t\t\t\t\t\tallAiContent = aiContent + reasoningContent\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (respoKey && respoKey.all && result && result[respoKey.all] && result[respoKey.category] === respoKey.allCategory) {\n\t\t\t\t\t\t\t\t\tallAiContent = result[respoKey.all]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// 后端返回匹配不规则的流式输出\n\t\t\t\t\t\t\t\tif (respoKey && result && typeof result === 'string' && result !== '[DONE]') {\n\t\t\t\t\t\t\t\t\taiContent += result\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// 后端返回匹配不规则的流式输出 结束\n\t\t\t\t\t\t\t\tif (respoKey && result && typeof result === 'string' && result === '[DONE]') {\n\t\t\t\t\t\t\t\t\tconst index = chatList.value.findIndex((ele: any) => ele.chatId === chatId)\n\t\t\t\t\t\t\t\t\tif (index !== -1 && chatList.value[index]) {\n\t\t\t\t\t\t\t\t\t\tisChating.value = false\n\t\t\t\t\t\t\t\t\t\tchatList.value[index].isChating = false\n\t\t\t\t\t\t\t\t\t\temit('sendMessage', JSON.parse(JSON.stringify(chatList.value)))\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (newAiMessage) {\n\t\t\t\t\t\t\t\tnewAiMessage.content = aiContent\n\t\t\t\t\t\t\t\tnewAiMessage.msgList = [...aiContentList]\n\t\t\t\t\t\t\t\tnewAiMessage.reasoningContent = reasoningContent\n\t\t\t\t\t\t\t\tnewAiMessage.dataObj = result\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif (chatList.value.some((ele: any) => ele.chatId === chatId)) {\n\t\t\t\t\t\t\t\tenqueueRender({\n\t\t\t\t\t\t\t\t\tmainContent: aiContent,\n\t\t\t\t\t\t\t\t\tthinkContent: '',\n\t\t\t\t\t\t\t\t\treasoningContent: reasoningContent\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// type === 1 的情况已经在上面单独处理,这里不再重复渲染\n\t\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\t\tconsole.error('解析SSE消息失败:', error)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tondone: () => {\n\t\t\t\t\tnextTick(() => {\n\t\t\t\t\t\tisChating.value = false\n\t\t\t\t\t\tif (isUnmounting.value || !isMounted.value) return\n\t\t\t\t\t\tconst index = chatList.value.findIndex((ele: any) => ele.chatId === chatId)\n\t\t\t\t\t\tif (index !== -1 && chatList.value[index]) {\n\t\t\t\t\t\t\tchatList.value[index].isChating = false\n\t\t\t\t\t\t\tchatList.value[index].componentName = currentComponentName.value\n\t\t\t\t\t\t\tchatList.value[index].html = markdownToHtml(allAiContent)\n\t\t\t\t\t\t\tif (allAiContent) {\n\t\t\t\t\t\t\t\tif (resultItem.value) {\n\t\t\t\t\t\t\t\t\tresultItem.value.allAiContent = allAiContent\n\t\t\t\t\t\t\t\t\tafterSend(resultItem.value)\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tafterSend({ allAiContent })\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst waitForRenderComplete = () => {\n\t\t\t\t\t\t\t\t// 这里假设需要检查渲染队列,通过回调检查\n\t\t\t\t\t\t\t\tif (chatList.value.length > 0) {\n\t\t\t\t\t\t\t\t\temit('sendMessage', JSON.parse(JSON.stringify(chatList.value)))\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twaitForRenderComplete()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t},\n\t\t\t\tonabort: () => {\n\t\t\t\t\thandleAbort()\n\t\t\t\t},\n\t\t\t\tonerror: (response: Error | Response) => {\n\t\t\t\t\thandleError(response)\n\t\t\t\t}\n\t\t\t})\n\t\t} catch (error) {\n\t\t\tconsole.error('OpenSSE错误:', error)\n\t\t\tisChating.value = false\n\t\t\tchatList.value[currIndex.value].content = `<div style=\"color: red; display: flex; align-items: center;\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\n\t\t\t<path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.5 15.5C11.6421 15.5 15 12.1421 15 8C15 3.85786 11.6421 0.5 7.5 0.5C3.35786 0.5 0 3.85786 0 8C0 12.1421 3.35786 15.5 7.5 15.5ZM9.7539 4.9506L10.5494 5.7461L8.2951 8.0001L10.5494 10.2539L9.7539 11.0494L7.5001 8.7951L5.2461 11.0494L4.4506 10.2539L6.7051 8.0001L4.4506 5.7461L5.2461 4.9506L7.5001 7.2051L9.7539 4.9506Z\" fill=\"#F93920\"/>\n\t\t</svg>${'请求失败'}</div>`\n\t\t\tchatList.value[currIndex.value].isChating = false\n\t\t\tchatList.value[currIndex.value].isShowCopy = false\n\t\t\tchatList.value[currIndex.value].isShowLike = false\n\t\t\tshowToast('请求失败,请重试', 'error', 3000)\n\t\t}\n\t}\n\n\t// 处理请求中止\n\tconst handleAbort = (): void => {\n\t\tisChating.value = false\n\t\tif (isUnmounting.value) return\n\n\t\tconst currentAiMessage = chatList.value[currIndex.value]\n\t\tstop(chatList.value[currIndex.value], currIndex.value)\n\t\tconst hasContent = currentAiMessage && (currentAiMessage.content || currentAiMessage.thinkContent || currentAiMessage.reasoningContent)\n\n\t\tif (currentAiMessage) {\n\t\t\tif (currentAiMessage.thinkStatus === ThinkStatus.THINKING) {\n\t\t\t\tcurrentAiMessage.thinkStatus = ThinkStatus.STOPPED\n\t\t\t\tcurrentAiMessage.thinkTime = Date.now() - (currentAiMessage.thinkStartTime || Date.now())\n\t\t\t}\n\t\t\tif (!hasContent) {\n\t\t\t\tconst userMessageIndex = currIndex.value - 1\n\t\t\t\tif (userMessageIndex >= 0 && chatList.value[userMessageIndex].user === 'u') {\n\t\t\t\t\tchatList.value.splice(currIndex.value, 1)\n\t\t\t\t\tchatList.value.splice(userMessageIndex, 1)\n\t\t\t\t} else {\n\t\t\t\t\tchatList.value.splice(currIndex.value, 1)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst updatedAiMessage = {\n\t\t\t\t\t...currentAiMessage,\n\t\t\t\t\tisChating: false,\n\t\t\t\t\tcontent: currentAiMessage.content ? currentAiMessage.content + '...' : '',\n\t\t\t\t\tthinkContent: currentAiMessage.thinkContent ? currentAiMessage.thinkContent + '...' : undefined,\n\t\t\t\t\treasoningContent: currentAiMessage.reasoningContent ? currentAiMessage.reasoningContent + '...' : undefined,\n\t\t\t\t\tthinkStatus: currentAiMessage.thinkStatus as ThinkStatus,\n\t\t\t\t\tstop: true\n\t\t\t\t}\n\n\t\t\t\tchatList.value.splice(currIndex.value, 1, updatedAiMessage)\n\n\t\t\t\tnextTick(() => {\n\t\t\t\t\trenderContent(updatedAiMessage.thinkContent || '', 'thinking')\n\t\t\t\t\trenderContent(updatedAiMessage.reasoningContent || '', 'reasoning')\n\t\t\t\t\trenderContent(updatedAiMessage.content || '', 'main')\n\t\t\t\t\temit('sendMessage', [...chatList.value])\n\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\tif (chatList.value.length > 0) {\n\t\t\temit('sendMessage', [...chatList.value])\n\t\t}\n\t}\n\n\t// 处理请求错误\n\tconst handleError = (response: Error | Response): void => {\n\t\tif (isUnmounting.value) return\n\t\tisChating.value = false\n\n\t\tlet errorMessage = '未知错误'\n\t\tif (response instanceof Error) {\n\t\t\tconsole.error('API请求错误:', response)\n\t\t\terrorMessage = response.message\n\t\t} else if (response instanceof Response) {\n\t\t\tconsole.error('API请求错误, 响应状态:', response.status, response.statusText)\n\t\t\terrorMessage = `请求失败: ${response.status} ${response.statusText}`\n\t\t}\n\n\t\tconst currentAiMessage = chatList.value[currIndex.value]\n\t\tif (currentAiMessage) {\n\t\t\tcurrentAiMessage.content = `<div style=\"color: red; display: flex; align-items: center;\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"15\" height=\"16\" viewBox=\"0 0 15 16\" fill=\"none\">\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M7.5 15.5C11.6421 15.5 15 12.1421 15 8C15 3.85786 11.6421 0.5 7.5 0.5C3.35786 0.5 0 3.85786 0 8C0 12.1421 3.35786 15.5 7.5 15.5ZM9.7539 4.9506L10.5494 5.7461L8.2951 8.0001L10.5494 10.2539L9.7539 11.0494L7.5001 8.7951L5.2461 11.0494L4.4506 10.2539L6.7051 8.0001L4.4506 5.7461L5.2461 4.9506L7.5001 7.2051L9.7539 4.9506Z\" fill=\"#F93920\"/>\n</svg>${errorMessage}</div>`\n\t\t\tcurrentAiMessage.isChating = false\n\t\t\tcurrentAiMessage.componentName = ''\n\t\t\tcurrentAiMessage.isShowLike = false\n\t\t\tcurrentAiMessage.isShowCopy = false\n\t\t\tcurrentAiMessage.isError = true\n\n\t\t\tnextTick(() => {\n\t\t\t\trenderContent(currentAiMessage.content || '', 'main')\n\t\t\t\temit('sendMessage', [...chatList.value])\n\t\t\t})\n\t\t} else {\n\t\t\tshowToast(errorMessage, 'error', 3000)\n\t\t\temit('sendMessage', [...chatList.value])\n\t\t}\n\t}\n\n\t// 清理 SSE 连接\n\tconst cleanupSSE = () => {\n\t\tif (fetchStream.value) {\n\t\t\tfetchStream.value.abort()\n\t\t\tfetchStream.value = null\n\t\t}\n\t}\n\n\treturn {\n\t\tfetchStream,\n\t\tresultItem,\n\t\topenSSE,\n\t\thandleAbort,\n\t\thandleError,\n\t\tcleanupSSE\n\t}\n}\n"],"names":["fetchStream","ref","ThinkStatus","FetchStream","_a","_b","_c","_d","_e","_f","_g","_h","_i","_j","currentAiMessage","nextTick","showToast"],"mappings":"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"}
@@ -294,7 +294,16 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
294
294
  tools.showToast("\u6587\u4EF6\u6570\u91CF\u4E0D\u80FD\u8D85\u8FC710\u4E2A");
295
295
  return;
296
296
  }
297
- emits("send", props.inputValue, fileList.value);
297
+ const sanitizedFileList = fileList.value.map((file) => ({
298
+ id: file.id,
299
+ name: file.name,
300
+ url: file.url,
301
+ fileId: file.fileId,
302
+ fileType: file.fileType,
303
+ fileSize: file.fileSize,
304
+ lastModified: file.lastModified
305
+ }));
306
+ emits("send", props.inputValue, sanitizedFileList);
298
307
  vue.nextTick(() => {
299
308
  fileList.value = [];
300
309
  if (uploadViewRef.value) {