@touchvue/chat 1.0.0-beta.47 → 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 (74) hide show
  1. package/es/package.json.css +1 -1
  2. package/es/package.json.mjs +1 -1
  3. package/es/packages/components/touchchat/component/FileContent.vue2.mjs +6 -1
  4. package/es/packages/components/touchchat/component/FileContent.vue2.mjs.map +1 -1
  5. package/es/packages/components/touchchat/component/PDFFile.vue2.mjs +7 -1
  6. package/es/packages/components/touchchat/component/PDFFile.vue2.mjs.map +1 -1
  7. package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs +19 -8
  8. package/es/packages/components/touchchat/component/QuoteContent.vue2.mjs.map +1 -1
  9. package/es/packages/components/touchchat/component/UploadView.vue2.mjs +51 -14
  10. package/es/packages/components/touchchat/component/UploadView.vue2.mjs.map +1 -1
  11. package/es/packages/components/touchchat/component/VideoFile.vue.mjs +7 -0
  12. package/es/packages/components/touchchat/component/VideoFile.vue.mjs.map +1 -0
  13. package/es/packages/components/touchchat/component/VideoFile.vue2.mjs +33 -0
  14. package/es/packages/components/touchchat/component/VideoFile.vue2.mjs.map +1 -0
  15. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs +39 -1
  16. package/es/packages/components/touchchat/src/AiChat/AiMessage.vue2.mjs.map +1 -1
  17. package/es/packages/components/touchchat/src/AiChat/Chat/types.mjs.map +1 -1
  18. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs +10 -5
  19. package/es/packages/components/touchchat/src/AiChat/Chat/useChat.mjs.map +1 -1
  20. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs +50 -88
  21. package/es/packages/components/touchchat/src/AiChat/Chat/useSSE.mjs.map +1 -1
  22. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs +10 -1
  23. package/es/packages/components/touchchat/src/AiChat/ChatInput.vue2.mjs.map +1 -1
  24. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs +41 -0
  25. package/es/packages/components/touchchat/src/AiChat/TouchAgent.vue2.mjs.map +1 -1
  26. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs +47 -13
  27. package/es/packages/components/touchchat/src/AiChat/TouchChat.vue2.mjs.map +1 -1
  28. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs +6 -0
  29. package/es/packages/components/touchchat/src/AiChat/TouchHistory.vue2.mjs.map +1 -1
  30. package/es/packages/components/touchchat/src/index.vue2.mjs +17 -3
  31. package/es/packages/components/touchchat/src/index.vue2.mjs.map +1 -1
  32. package/es/packages/components/touchchat/src/types/a2a.mjs.map +1 -1
  33. package/es/packages/components/touchchat/utils/a2aService.mjs +18 -12
  34. package/es/packages/components/touchchat/utils/a2aService.mjs.map +1 -1
  35. package/lib/package.json.css +1 -1
  36. package/lib/package.json.js +1 -1
  37. package/lib/packages/components/touchchat/component/FileContent.vue2.js +6 -1
  38. package/lib/packages/components/touchchat/component/FileContent.vue2.js.map +1 -1
  39. package/lib/packages/components/touchchat/component/PDFFile.vue2.js +7 -1
  40. package/lib/packages/components/touchchat/component/PDFFile.vue2.js.map +1 -1
  41. package/lib/packages/components/touchchat/component/QuoteContent.vue2.js +18 -7
  42. package/lib/packages/components/touchchat/component/QuoteContent.vue2.js.map +1 -1
  43. package/lib/packages/components/touchchat/component/UploadView.vue2.js +50 -13
  44. package/lib/packages/components/touchchat/component/UploadView.vue2.js.map +1 -1
  45. package/lib/packages/components/touchchat/component/VideoFile.vue.js +11 -0
  46. package/lib/packages/components/touchchat/component/VideoFile.vue.js.map +1 -0
  47. package/lib/packages/components/touchchat/component/VideoFile.vue2.js +37 -0
  48. package/lib/packages/components/touchchat/component/VideoFile.vue2.js.map +1 -0
  49. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js +39 -1
  50. package/lib/packages/components/touchchat/src/AiChat/AiMessage.vue2.js.map +1 -1
  51. package/lib/packages/components/touchchat/src/AiChat/Chat/types.js.map +1 -1
  52. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js +10 -5
  53. package/lib/packages/components/touchchat/src/AiChat/Chat/useChat.js.map +1 -1
  54. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js +50 -88
  55. package/lib/packages/components/touchchat/src/AiChat/Chat/useSSE.js.map +1 -1
  56. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js +10 -1
  57. package/lib/packages/components/touchchat/src/AiChat/ChatInput.vue2.js.map +1 -1
  58. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js +41 -0
  59. package/lib/packages/components/touchchat/src/AiChat/TouchAgent.vue2.js.map +1 -1
  60. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js +46 -12
  61. package/lib/packages/components/touchchat/src/AiChat/TouchChat.vue2.js.map +1 -1
  62. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js +6 -0
  63. package/lib/packages/components/touchchat/src/AiChat/TouchHistory.vue2.js.map +1 -1
  64. package/lib/packages/components/touchchat/src/index.vue2.js +16 -2
  65. package/lib/packages/components/touchchat/src/index.vue2.js.map +1 -1
  66. package/lib/packages/components/touchchat/src/types/a2a.js.map +1 -1
  67. package/lib/packages/components/touchchat/utils/a2aService.js +18 -12
  68. package/lib/packages/components/touchchat/utils/a2aService.js.map +1 -1
  69. package/package.json +1 -1
  70. package/theme/components/index.css +67 -0
  71. package/theme/font/iconfont.woff +0 -0
  72. package/theme/font/iconfont.woff2 +0 -0
  73. package/theme/index.css +67 -0
  74. package/theme/skin/default.css +67 -0
@@ -55,6 +55,7 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
55
55
  typeFlag,
56
56
  moduleInfo,
57
57
  emit,
58
+ fileData,
58
59
  afterSend,
59
60
  enqueueRender,
60
61
  renderContent,
@@ -304,7 +305,8 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
304
305
  files: fileList || [],
305
306
  typeFlag: type,
306
307
  auto: auto || false,
307
- msgList: []
308
+ msgList: [],
309
+ selecting: false
308
310
  };
309
311
  chatList.value.push(userMessage);
310
312
  emit("sendMessage", [...chatList.value]);
@@ -332,7 +334,8 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
332
334
  needSequenceType: response.type || "",
333
335
  needSequenceProcessing: response.needSequenceProcessing || false,
334
336
  typeFlag: type,
335
- msgList: []
337
+ msgList: [],
338
+ likeList: response.likeList
336
339
  };
337
340
  newAiMessages.push(aiMessage);
338
341
  });
@@ -405,6 +408,7 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
405
408
  }
406
409
  inputValue.value = "";
407
410
  } else {
411
+ console.log("content === useChat === 488", content);
408
412
  if (content) {
409
413
  inputValue.value = content;
410
414
  }
@@ -426,7 +430,8 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
426
430
  renderContent(userMessage.content, "main", index);
427
431
  scrollToBottom();
428
432
  });
429
- openSSE(inputValue.value, index + 1, 1);
433
+ console.log("openSSE === useChat === 511");
434
+ openSSE(inputValue.value, index + 1);
430
435
  inputValue.value = "";
431
436
  }
432
437
  };
@@ -513,7 +518,7 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
513
518
  if (reasoningContentRef.value[index])
514
519
  reasoningContentRef.value[index].innerHTML = "";
515
520
  setTimeout(() => {
516
- openSSE(userMessage.content || "", index, 1);
521
+ openSSE(userMessage.content || "", index);
517
522
  }, 50);
518
523
  });
519
524
  }
@@ -559,7 +564,7 @@ function useChat({ props, emit, scripts, unmatchText, modules, afterSend, sendMe
559
564
  }
560
565
  const insertPosition = index + 1;
561
566
  vue.nextTick(() => {
562
- openSSE(newContent, insertPosition, 1);
567
+ openSSE(newContent, insertPosition);
563
568
  });
564
569
  emit("sendMessage", chatList.value);
565
570
  };
@@ -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}\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\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\topenSSE(inputValue.value, index + 1, 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, 1)\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, 1)\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":"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"}
@@ -5,22 +5,24 @@ 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, scrollToBottom, 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_") => {
12
12
  return prefix + Math.random().toString(36).slice(2).padEnd(10, "0").slice(0, 10);
13
13
  };
14
- const openSSE = (userContent, insertIndex, type) => {
14
+ const openSSE = (userContent, insertIndex) => {
15
15
  var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k;
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) {
22
23
  currentAiMessage.isShowLike = true;
23
24
  currentAiMessage.isShowCopy = true;
25
+ currentAiMessage.isError = false;
24
26
  currentAiMessage.componentName = currentComponentName.value;
25
27
  }
26
28
  const chatId = (currentAiMessage == null ? void 0 : currentAiMessage.chatId) || generateChatId();
@@ -41,10 +43,13 @@ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enabl
41
43
  thinkStartTime: Date.now(),
42
44
  isShowLike: true,
43
45
  isShowCopy: true,
46
+ isError: false,
44
47
  componentName: currentComponentName.value,
45
48
  typeFlag: typeFlag.value,
46
49
  msgList: [],
47
- isRead: true
50
+ isRead: true,
51
+ dataObj: {},
52
+ selecting: false
48
53
  };
49
54
  if (insertIndex !== void 0 && insertIndex <= chatList.value.length) {
50
55
  chatList.value.splice(insertIndex, 0, chatItem);
@@ -54,10 +59,12 @@ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enabl
54
59
  }
55
60
  currIndex.value = insertIndex != null ? insertIndex : chatList.value.length - 1;
56
61
  const BodyConfig = (_c = (_b = (_a = moduleInfo.value) == null ? void 0 : _a.config) == null ? void 0 : _b.body) == null ? void 0 : _c.call(_b);
57
- 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 } : {
58
64
  model: enableDeepThinking.value ? "deepseek-reasoner" : "deepseek-v3",
59
65
  messages: [{ role: "user", content: userContent }],
60
- stream: true
66
+ stream: true,
67
+ fileIds: fileIds.length ? fileIds : void 0
61
68
  };
62
69
  if ((_e = BodyConfig == null ? void 0 : BodyConfig.messages) == null ? void 0 : _e.length) {
63
70
  BodyConfig.messages[0].content = userContent;
@@ -73,7 +80,7 @@ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enabl
73
80
  body: JSON.stringify(requestBody)
74
81
  },
75
82
  onmessage: (line) => {
76
- var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2, _k2, _l, _m, _n, _o;
83
+ var _a2, _b2, _c2, _d2, _e2, _f2, _g2, _h2, _i2, _j2;
77
84
  if (isUnmounting.value)
78
85
  return;
79
86
  let dataString = "";
@@ -86,30 +93,54 @@ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enabl
86
93
  }
87
94
  }
88
95
  dataString = dataString.trim();
89
- const respoKeyConfig = (_b2 = (_a2 = moduleInfo.value) == null ? void 0 : _a2.config) == null ? void 0 : _b2.respoKey;
96
+ const respoKeyConfig = (_c2 = (_b2 = (_a2 = moduleInfo.value) == null ? void 0 : _a2.config) == null ? void 0 : _b2.respoKey) != null ? _c2 : void 0;
90
97
  const respoKey = typeof respoKeyConfig === "function" ? respoKeyConfig() : respoKeyConfig;
91
- const deepseekFlag = ((_c2 = moduleInfo.value) == null ? void 0 : _c2.name) === "deepseek-v3";
92
- if (type === 1 && dataString) {
98
+ const deepseekFlag = ((_d2 = moduleInfo.value) == null ? void 0 : _d2.name) === "deepseek-v3";
99
+ if (dataString && (dataString.startsWith("{") && dataString.endsWith("}") || !(respoKey == null ? void 0 : respoKey.content))) {
93
100
  try {
94
- const result = JSON.parse(dataString);
101
+ const result = !(respoKey == null ? void 0 : respoKey.content) && moduleInfo.value ? dataString : JSON.parse(dataString);
95
102
  const newAiMessage = chatList.value[currIndex.value];
96
103
  if (deepseekFlag || !moduleInfo.value) {
97
- if ((_f2 = (_e2 = (_d2 = result == null ? void 0 : result.choices) == null ? void 0 : _d2[0]) == null ? void 0 : _e2.delta) == null ? void 0 : _f2.content) {
104
+ if ((_g2 = (_f2 = (_e2 = result == null ? void 0 : result.choices) == null ? void 0 : _e2[0]) == null ? void 0 : _f2.delta) == null ? void 0 : _g2.content) {
98
105
  aiContent += result.choices[0].delta.content;
99
106
  if ((newAiMessage == null ? void 0 : newAiMessage.thinkStatus) === types.ThinkStatus.THINKING) {
100
107
  newAiMessage.thinkStatus = types.ThinkStatus.COMPLETED;
101
108
  newAiMessage.thinkTime = Date.now() - (newAiMessage.thinkStartTime || Date.now());
102
109
  }
103
110
  }
104
- if ((_i2 = (_h2 = (_g2 = result == null ? void 0 : result.choices) == null ? void 0 : _g2[0]) == null ? void 0 : _h2.delta) == null ? void 0 : _i2.reasoning_content) {
111
+ if ((_j2 = (_i2 = (_h2 = result == null ? void 0 : result.choices) == null ? void 0 : _h2[0]) == null ? void 0 : _i2.delta) == null ? void 0 : _j2.reasoning_content) {
105
112
  reasoningContent += result.choices[0].delta.reasoning_content;
106
113
  if (!(newAiMessage == null ? void 0 : newAiMessage.thinkStatus)) {
107
114
  newAiMessage.thinkStatus = types.ThinkStatus.THINKING;
108
115
  newAiMessage.thinkStartTime = Date.now();
109
116
  }
110
117
  }
118
+ allAiContent = reasoningContent + aiContent;
111
119
  } else if (respoKey) {
112
- console.log("\u6765\u4E86\u6CA1\u6709", result[respoKey.content]);
120
+ if (result && result[respoKey.content] && (result[respoKey.category] === respoKey.contentCategory || !result[respoKey.category])) {
121
+ aiContent += result[respoKey.content];
122
+ }
123
+ if (result && result[respoKey.category] === "done") {
124
+ resultItem.value = result;
125
+ }
126
+ if (result && result[respoKey.category] === "error") {
127
+ const errorMessage = respoKey.all && result[respoKey.all] ? result[respoKey.all] : "\u5F53\u524D\u7F51\u7EDC\u5F02\u5E38";
128
+ const currentAiMessage2 = chatList.value[currIndex.value];
129
+ if (currentAiMessage2.chatId) {
130
+ currentAiMessage2.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">
131
+ <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"/>
132
+ </svg>${errorMessage}</div>`;
133
+ currentAiMessage2.isChating = false;
134
+ currentAiMessage2.componentName = "";
135
+ currentAiMessage2.isShowLike = false;
136
+ currentAiMessage2.isShowCopy = false;
137
+ currentAiMessage2.isError = true;
138
+ vue.nextTick(() => {
139
+ emit("sendMessage", [...chatList.value]);
140
+ });
141
+ afterSend(result);
142
+ }
143
+ }
113
144
  if (result) {
114
145
  if (result.type === "markdown") {
115
146
  const mapKey = `markdown_${result.order}`;
@@ -142,81 +173,6 @@ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enabl
142
173
  if (result && result[respoKey.content]) {
143
174
  aiContent += result[respoKey.content];
144
175
  }
145
- }
146
- if (newAiMessage) {
147
- newAiMessage.content = aiContent;
148
- newAiMessage.msgList = [...aiContentList];
149
- newAiMessage.reasoningContent = reasoningContent;
150
- }
151
- if (chatList.value.some((ele) => ele.chatId === chatId)) {
152
- vue.nextTick(() => {
153
- const renderWithRetry = (retryCount = 0) => {
154
- if (retryCount > 10) {
155
- console.error("renderContent\u5931\u8D25\uFF1A\u65E0\u6CD5\u627E\u5230DOM\u5143\u7D20\uFF0CcurrIndex:", currIndex.value);
156
- return;
157
- }
158
- renderContent(aiContent, "main", currIndex.value);
159
- renderContent(reasoningContent, "reasoning", currIndex.value);
160
- const currentMsg = chatList.value[currIndex.value];
161
- if (currentMsg && (currentMsg.content !== aiContent || currentMsg.reasoningContent !== reasoningContent)) {
162
- setTimeout(() => renderWithRetry(retryCount + 1), 50);
163
- } else {
164
- vue.nextTick(() => {
165
- scrollToBottom();
166
- });
167
- }
168
- };
169
- renderWithRetry();
170
- });
171
- }
172
- } catch (e) {
173
- console.error("\u89E3\u6790SSE\u6D88\u606F\u5931\u8D25:", e);
174
- }
175
- } else if (dataString && (dataString.startsWith("{") && dataString.endsWith("}") || !(respoKey == null ? void 0 : respoKey.content))) {
176
- try {
177
- const result = !(respoKey == null ? void 0 : respoKey.content) && moduleInfo.value ? dataString : JSON.parse(dataString);
178
- const newAiMessage = chatList.value[currIndex.value];
179
- if (deepseekFlag || !moduleInfo.value) {
180
- if ((_l = (_k2 = (_j2 = result == null ? void 0 : result.choices) == null ? void 0 : _j2[0]) == null ? void 0 : _k2.delta) == null ? void 0 : _l.content) {
181
- aiContent += result.choices[0].delta.content;
182
- if ((newAiMessage == null ? void 0 : newAiMessage.thinkStatus) === types.ThinkStatus.THINKING) {
183
- newAiMessage.thinkStatus = types.ThinkStatus.COMPLETED;
184
- newAiMessage.thinkTime = Date.now() - (newAiMessage.thinkStartTime || Date.now());
185
- }
186
- }
187
- if ((_o = (_n = (_m = result == null ? void 0 : result.choices) == null ? void 0 : _m[0]) == null ? void 0 : _n.delta) == null ? void 0 : _o.reasoning_content) {
188
- reasoningContent += result.choices[0].delta.reasoning_content;
189
- if (!(newAiMessage == null ? void 0 : newAiMessage.thinkStatus)) {
190
- newAiMessage.thinkStatus = types.ThinkStatus.THINKING;
191
- newAiMessage.thinkStartTime = Date.now();
192
- }
193
- }
194
- allAiContent = reasoningContent + aiContent;
195
- } else if (respoKey) {
196
- if (result && result[respoKey.content] && (result[respoKey.category] === respoKey.contentCategory || !result[respoKey.category])) {
197
- aiContent += result[respoKey.content];
198
- }
199
- if (result && result[respoKey.category] === "done") {
200
- resultItem.value = result;
201
- }
202
- if (result && result[respoKey.category] === "error") {
203
- const errorMessage = respoKey.all && result[respoKey.all] ? result[respoKey.all] : "\u5F53\u524D\u7F51\u7EDC\u5F02\u5E38";
204
- const currentAiMessage2 = chatList.value[currIndex.value];
205
- if (currentAiMessage2.chatId) {
206
- currentAiMessage2.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">
207
- <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"/>
208
- </svg>${errorMessage}</div>`;
209
- currentAiMessage2.isChating = false;
210
- currentAiMessage2.componentName = "";
211
- currentAiMessage2.isShowLike = false;
212
- currentAiMessage2.isShowCopy = false;
213
- currentAiMessage2.isError = true;
214
- vue.nextTick(() => {
215
- emit("sendMessage", [...chatList.value]);
216
- });
217
- afterSend(result);
218
- }
219
- }
220
176
  if (aiContent || reasoningContent) {
221
177
  allAiContent = aiContent + reasoningContent;
222
178
  }
@@ -235,6 +191,12 @@ function useSSE({ chatList, currIndex, isChating, isMounted, isUnmounting, enabl
235
191
  }
236
192
  }
237
193
  }
194
+ if (newAiMessage) {
195
+ newAiMessage.content = aiContent;
196
+ newAiMessage.msgList = [...aiContentList];
197
+ newAiMessage.reasoningContent = reasoningContent;
198
+ newAiMessage.dataObj = result;
199
+ }
238
200
  if (chatList.value.some((ele) => ele.chatId === chatId)) {
239
201
  enqueueRender({
240
202
  mainContent: aiContent,