@ai-group/chat-sdk 3.3.5 → 3.3.7

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/hooks/useADKChat.ts"],
4
- "sourcesContent": ["import { useEffect, useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n fetchEventSource,\n EventStreamContentType,\n} from \"@microsoft/fetch-event-source\";\nimport { message } from \"antd\";\nimport { v4 } from \"uuid\";\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from \"@/constants\";\nimport {\n SuccessCode,\n ErrorCode,\n DebugOptions,\n FunctionCall,\n SendContent,\n SessionData,\n AgentRunRequest,\n Event,\n FunctionResponse,\n IMessage,\n Part,\n} from \"@/types\";\nimport {\n fetchAppConfig,\n fetchSessionList,\n fetchSessionDetail,\n closeSession,\n updateSessionTitle,\n addFeedback,\n type ChatConfig,\n} from \"@/services/api\";\nimport { safeJsonParse } from \"@/utils\";\n\nconst combineTextParts = (parts: Part[]) => {\n const result: Part[] = [];\n let combinedTextPart: Part | undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const part of parts) {\n if (part.text) {\n // 如果没有 combined 或 combined 思考类型跟当前 part 不同,则创建新的合并引用\n if (!combinedTextPart || combinedTextPart.thought !== part.thought) {\n combinedTextPart = { ...part };\n result.push(combinedTextPart);\n } else {\n combinedTextPart.text += part.text;\n }\n } else {\n combinedTextPart = undefined;\n result.push(part);\n }\n }\n return result;\n};\n\nfunction useADKChat({\n url = window.location.origin,\n token,\n config = {},\n type = \"agentDebug\",\n enabled = true, // ← 新增: 是否启用 Hook\n strategies,\n onError,\n onMessage,\n onSuccess,\n onStream,\n}: DebugOptions) {\n const [loading, setLoading] = useState(false);\n const ctrl = useRef<AbortController | null>(null);\n // 应用配置\n const { appNo, showFirstSession } = config || {};\n const [appInfo, setAppInfo] = useState<ChatConfig | null>(null);\n // 初始化完成\n const [initialized, setInitialized] = useState(false);\n // 会话记录\n const [sessionList, setSessionList] = useState<SessionData[]>([]);\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>(() => v4());\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({\n total: 0,\n pageNum: 1,\n pageSize: SESSION_PAGE_SIZE,\n });\n // 开场白\n const [prologue, setPrologue] = useState<string>(\"\");\n // 建议问题\n const [suggestedQuestions, setSuggestedQuestions] = useState<string[]>([]);\n const [messages, setMessages] = useState<IMessage[]>([]);\n // 用户自定义业务参数 (stateDelta),每次发送请求时携带\n const stateDeltaRef = useRef<Record<string, any> | undefined>(undefined);\n const mergedMessages = useMemo(() => {\n const fnResMap: Record<string, FunctionResponse> = {};\n messages.forEach((msg) => {\n if (msg.functionResponse) {\n fnResMap[msg?.functionResponse?.id || \"\"] = msg.functionResponse;\n }\n });\n return messages.map((msg) => {\n if (msg.functionCall) {\n return {\n ...msg,\n functionResponse: fnResMap[msg?.functionCall?.id || \"\"],\n };\n }\n return msg;\n });\n }, [messages]);\n const textMsgRef = useRef<IMessage>(null);\n const eventDataRef = useRef<Map<string, any>>(new Map());\n\n // 插入消息\n const insertMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage?.isLoading) {\n return [...prev.slice(0, -1), msg, lastMessage];\n }\n return [...prev, msg];\n });\n }, []);\n\n // 初始化开场白预设置问题\n const insertSuggestedQuestions = (suggested_questions: string[] = []) => {\n if (!suggested_questions?.length) return;\n // 无消息内容 且 有建议问题时\n if (messages.length === 0 && suggested_questions.length) {\n setSuggestedQuestions(suggested_questions);\n }\n };\n\n // 初始化开场白\n const insertPrologue = (prologue: string) => {\n if (prologue) {\n setPrologue(prologue);\n }\n };\n\n // 更新消息\n const updateMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n return prev.map((m) => {\n if (m.id === msg.id) {\n return msg;\n }\n return m;\n });\n });\n }, []);\n\n const withEventMeta = useCallback((msg: IMessage, event: Event): IMessage => {\n return {\n ...msg,\n modelCode: event.modelCode ?? msg.modelCode,\n usageMetadata: event.usageMetadata ?? msg.usageMetadata,\n finishReason: event.finishReason ?? msg.finishReason,\n raw: {\n ...(msg.raw || {}),\n ...event,\n },\n };\n }, []);\n\n const updateLastBotEventMeta = useCallback(\n (event: Event) => {\n if (!event.modelCode && !event.usageMetadata && !event.finishReason) return;\n\n setMessages((prev) => {\n const next = [...prev];\n const index = next.findLastIndex((msg) => msg.role === \"bot\");\n if (index < 0) return prev;\n\n next[index] = withEventMeta(next[index], event);\n return next;\n });\n },\n [withEventMeta],\n );\n\n // 存储事件\n const storeEvents = useCallback((part: Part | null, event: any) => {\n let title = \"\";\n\n if (part == null && event.actions?.artifactDelta) {\n title += \"eventAction: artifact\";\n } else if (part) {\n if (part.text) {\n title += `text:${part.text}`;\n } else if (part.functionCall) {\n title += `functionCall:${part.functionCall.name}`;\n } else if (part.functionResponse) {\n title += `functionResponse:${part.functionResponse.name}`;\n } else if (part.executableCode) {\n title += `executableCode:${part.executableCode.code?.slice(0, 10)}`;\n } else if (part.codeExecutionResult) {\n title += `codeExecutionResult:${part.codeExecutionResult.outcome}`;\n } else if (part.errorMessage) {\n title += `errorMessage:${part.errorMessage}`;\n }\n }\n\n const updatedEvent = { ...event, title };\n\n const newEventData = new Map(eventDataRef.current);\n newEventData.set(event.id, updatedEvent);\n eventDataRef.current = newEventData;\n }, []);\n\n // 存储消息\n const storeMessage = useCallback(\n (part: Part | null, event: Event, role: \"user\" | \"bot\") => {\n const msg: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n isLike: event.isLike || 0,\n role,\n modelCode: event.modelCode,\n usageMetadata: event.usageMetadata,\n finishReason: event.finishReason,\n raw: event,\n };\n\n if (part) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n };\n } else if (part.text) {\n msg.text = part.text;\n msg.thought = part.thought;\n\n if (event?.groundingMetadata?.searchEntryPoint?.renderedContent) {\n msg.renderedContent =\n event.groundingMetadata.searchEntryPoint.renderedContent;\n }\n } else if (part.fileData) {\n msg.fileData = [part.fileData];\n } else if (part.functionCall) {\n msg.functionCall = part.functionCall;\n } else if (part.functionResponse) {\n msg.functionResponse = part.functionResponse;\n } else if (part.executableCode) {\n msg.executableCode = part.executableCode;\n } else if (part.codeExecutionResult) {\n msg.codeExecutionResult = part.codeExecutionResult;\n }\n }\n\n if (part && Object.keys(part).length > 0) {\n insertMessage(msg);\n }\n },\n [insertMessage],\n );\n\n // 处理消息部分(关键更新)\n const processPart = useCallback(\n (event: Event, part: Part) => {\n const renderedContent =\n event.groundingMetadata?.searchEntryPoint?.renderedContent;\n if (part.text) {\n const newChunk = part.text;\n\n if (\n !textMsgRef.current ||\n textMsgRef.current.thought !== part.thought\n ) {\n const newMessage: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n role: \"bot\",\n text: newChunk,\n isLike: event.isLike || 0,\n thought: part.thought,\n modelCode: event.modelCode,\n usageMetadata: event.usageMetadata,\n finishReason: event.finishReason,\n raw: event,\n };\n\n if (renderedContent) {\n newMessage.renderedContent = renderedContent;\n }\n\n textMsgRef.current = newMessage;\n // 存储原数据\n storeEvents(part, event);\n // 插入消息\n insertMessage(newMessage);\n } else {\n if (event.partial === false) {\n storeEvents(part, event);\n textMsgRef.current = null;\n return;\n }\n if (renderedContent) {\n textMsgRef.current = {\n ...textMsgRef.current,\n renderedContent,\n };\n }\n textMsgRef.current = {\n ...withEventMeta(textMsgRef.current, event),\n text: (textMsgRef.current.text || \"\") + newChunk,\n };\n updateMessage(textMsgRef.current);\n }\n } else {\n textMsgRef.current = null;\n storeEvents(part, event);\n storeMessage(part, event, \"bot\");\n }\n },\n [storeEvents, storeMessage, insertMessage, updateMessage, withEventMeta],\n );\n\n // 处理建议类消息\n const processFollowupPart = useCallback(\n (event: Event) => {\n // 获取建议类消息的文本内容\n const part = event?.content?.parts?.[0] || null;\n const text = part?.text || \"\";\n storeEvents(part, event);\n if (text) {\n setSuggestedQuestions((prev) => [...prev, text]);\n }\n },\n [storeEvents, insertMessage],\n );\n\n // 处理错误消息\n const processErrorMessage = useCallback(\n (chunkJson: any) => {\n storeEvents(null, chunkJson);\n insertMessage({\n id: v4(),\n text: chunkJson.errorMessage,\n role: \"bot\",\n });\n },\n [storeEvents, insertMessage],\n );\n\n // 处理动作和制品\n const processActionArtifact = useCallback(\n (event: any) => {\n if (event.actions && event.actions.artifactDelta) {\n storeEvents(null, event);\n storeMessage(null, event, \"bot\");\n }\n },\n [storeEvents, storeMessage],\n );\n\n // 发送消息请求\n const sendMessageRequest = useCallback(\n (values: AgentRunRequest) => {\n return new Promise<void>((resolve) => {\n if (ctrl.current) {\n ctrl.current.abort();\n }\n setLoading(true);\n ctrl.current = new AbortController();\n const requestUrl = `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`;\n\n fetchEventSource(requestUrl, {\n method: \"POST\",\n signal: ctrl.current.signal,\n body: JSON.stringify(values),\n openWhenHidden: true,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Cache-Control\": \"no-cache\",\n stream: \"true\",\n Authorization: `Bearer ${token}`,\n },\n async onopen(response) {\n if (\n response.ok &&\n response.headers.get(\"content-type\") === EventStreamContentType\n ) {\n // everything's good\n } else if (response.status === 401 || response.status === 403) {\n setLoading(false);\n onError?.({\n code: ErrorCode.API_ERROR,\n message: response.status === 401 ? \"认证失败,token 无效或已过期\" : \"无权限访问该资源\",\n });\n resolve();\n } else if (\n response.status >= 400 &&\n response.status < 500 &&\n response.status !== 429\n ) {\n resolve();\n } else {\n resolve();\n }\n },\n onmessage: (event) => {\n const rawData = safeJsonParse(event.data, {});\n\n // 处理新的数据格式: { data: {...}, result: {...} }\n let chunkJson: Event = rawData;\n if (rawData.data && rawData.result) {\n // 转换为旧格式\n chunkJson = {\n ...rawData.data,\n content: rawData.data, // data 本身就是 content\n invocationId: rawData.result.invocationId,\n sessionId: rawData.result.sessionId,\n id: rawData.result.invocationId,\n };\n }\n\n if (chunkJson.error) {\n message.warning(chunkJson.error);\n return;\n }\n onStream?.(chunkJson);\n updateLastBotEventMeta(chunkJson);\n if (chunkJson.content) {\n // 建议类消息单独处理\n if (chunkJson.content.role === \"followup\") {\n processFollowupPart(chunkJson);\n return;\n }\n // eslint-disable-next-line no-restricted-syntax\n for (const part of combineTextParts(chunkJson.content.parts)) {\n processPart(chunkJson, part);\n }\n } else if (chunkJson.errorMessage) {\n processErrorMessage(chunkJson);\n } else if (chunkJson.actions) {\n processActionArtifact(chunkJson);\n }\n },\n onclose: () => {\n setLoading(false);\n if (textMsgRef.current) {\n onMessage?.(textMsgRef.current?.text || \"\", textMsgRef.current);\n }\n textMsgRef.current = null;\n resolve();\n },\n onerror: (error) => {\n setLoading(false);\n resolve();\n console.error(\"EventSource failed:\", error);\n throw error;\n },\n });\n });\n },\n [\n type,\n currentSessionId,\n processActionArtifact,\n processErrorMessage,\n processPart,\n updateLastBotEventMeta,\n ],\n );\n\n // 发送会话\n const startChat = async ({\n text = \"\",\n files = [],\n functionResponse,\n }: SendContent) => {\n if (loading) return;\n if (!text.trim() && !files?.length && !functionResponse) return;\n // 清空建议问题\n setSuggestedQuestions([]);\n // 发送消息\n setMessages((prev) => {\n let temp = [...prev];\n // 如果 text 存在\n if (text.trim()) {\n temp.push({\n id: v4(),\n role: \"user\",\n text,\n });\n }\n // 如果file 存在\n if (files.length > 0) {\n temp.push({\n id: v4(),\n role: \"user\",\n fileData: files.map((file) => ({\n displayName: file.fileName || file.name,\n mimeType: file.mimeType || file.response?.mimeType,\n fileUri: file.tempUrl || file.response?.fileUrl || file.response?.tempUrl,\n })),\n });\n }\n // 如果 functionResponse 存在\n if (functionResponse) {\n temp.push({\n id: v4(),\n role: \"user\",\n functionResponse,\n });\n }\n return temp;\n });\n await sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: functionResponse ? [{ functionResponse }] : [{ text }],\n },\n files: files.map((file) => ({\n fileName: file.fileName || file.response?.fileName,\n fileId: file.fileId || file.response?.fileId,\n tempUrl: file.tempUrl || file.response?.fileUrl || file.response?.tempUrl,\n type: file.type || file.response?.fileType,\n mimeType: file.mimeType || file.response?.mimeType,\n })),\n ...(stateDeltaRef.current !== undefined && { stateDelta: stateDeltaRef.current }),\n });\n // 获取聊天记录\n initAppConversations();\n };\n\n // 重新发送会话\n const reChat = () => {\n if (loading) return;\n if (messages.length === 0) return;\n setMessages((prev) => {\n const newMessages = [...prev];\n // 删除最后一条 AI 消息\n const lastAIIndex = newMessages.findLastIndex(\n (msg) => msg.role === \"bot\",\n );\n if (lastAIIndex !== -1) {\n newMessages.splice(lastAIIndex, 1);\n }\n // 清空建议问题\n setSuggestedQuestions([]);\n // 重新发送最后一条用户消息\n const lastUserMessage = newMessages.findLast(\n (msg) => msg.role === \"user\",\n );\n if (lastUserMessage) {\n const { text = \"\", fileData = [] } = lastUserMessage;\n sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: [\n {\n text,\n },\n ],\n },\n files: fileData?.map((file) => ({\n fileName: file.displayName,\n tempUrl: file.fileUri,\n mimeType: file.mimeType,\n })),\n ...(stateDeltaRef.current !== undefined && { stateDelta: stateDeltaRef.current }),\n });\n }\n\n return newMessages;\n });\n };\n\n // 确认函数调用\n const confirmFnCall = (fnCall: FunctionCall, confirmed: boolean) => {\n const functionResponse =\n strategies?.createFunctionResponse?.(fnCall, confirmed) ?? {\n id: fnCall.id,\n name: fnCall.name,\n response: { confirmed },\n };\n startChat({ functionResponse });\n };\n\n // 使用建议问题\n const suggestChat = (text: string) => {\n if (loading) return;\n if (!text.trim()) return;\n setSuggestedQuestions([]);\n startChat({ text });\n };\n\n // 停止会话\n const stopChat = useCallback(() => {\n ctrl.current?.abort();\n setLoading(false);\n textMsgRef.current = null;\n }, [ctrl]);\n\n // 清除/重置会话\n const clearChat = () => {\n const newSessionId = v4();\n setCurrentSessionId(newSessionId);\n // 重置聊天内容\n stopChat();\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n setMessages([]);\n setSuggestedQuestions(appInfo?.onboardingInfo?.suggested_questions || []);\n };\n\n // 格式化会话记录\n const formatMessages = (messages: any[], isReplace = false) => {\n const mapped: IMessage[] = [];\n messages.forEach((item) => {\n if (!item || !item.content || !Array.isArray(item.content.parts)) return;\n\n const role =\n (item.content.role || \"\").toLowerCase() === \"user\" ? \"user\" : \"bot\";\n const parts = Array.isArray(item.content.parts)\n ? item.content.parts.filter((p: any) => {\n if (!p) return false;\n return Boolean(\n p.text ||\n p.inlineData ||\n p.functionCall ||\n p.functionResponse ||\n p.fileData ||\n p.executableCode ||\n p.codeExecutionResult ||\n p.errorMessage,\n );\n })\n : [];\n\n if (parts.length === 0) return;\n\n // 将同一条历史消息的 text/fileData parts 合并到一条 IMessage,避免拆分显示\n const textParts = parts.filter((p: any) => p.text || p.errorMessage || p.inlineData);\n const fileDataParts = parts.filter((p: any) => p.fileData);\n const otherParts = parts.filter((p: any) => !p.text && !p.errorMessage && !p.inlineData && !p.fileData);\n\n // 如果有 text/fileData,合并为一条消息\n if (textParts.length > 0 || fileDataParts.length > 0) {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n isLike: item.isLike,\n role,\n modelCode: item.modelCode,\n usageMetadata: item.usageMetadata,\n finishReason: item.finishReason,\n raw: item,\n } as IMessage;\n\n for (const part of textParts) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n } as any;\n }\n if (part.text) {\n msg.text = (msg.text ? msg.text + \"\\n\" : \"\") + part.text;\n if (typeof part.thought !== \"undefined\") msg.thought = part.thought;\n }\n if (part.errorMessage) {\n msg.text = (msg.text ? msg.text + \"\\n\" : \"\") + part.errorMessage;\n }\n }\n\n if (fileDataParts.length > 0) {\n msg.fileData = fileDataParts.map((part: any) => ({\n displayName: part.fileData.displayName || \"\",\n fileUri: part.fileData.fileUri,\n mimeType: part.fileData.mimeType,\n }));\n }\n\n mapped.push(msg);\n }\n\n // 处理其他类型的 parts(functionCall、executableCode 等)\n otherParts.forEach((part: any) => {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n isLike: item.isLike,\n role,\n modelCode: item.modelCode,\n usageMetadata: item.usageMetadata,\n finishReason: item.finishReason,\n raw: item,\n } as IMessage;\n\n if (part.functionCall) msg.functionCall = part.functionCall;\n if (part.executableCode) msg.executableCode = part.executableCode;\n if (part.codeExecutionResult)\n msg.codeExecutionResult = part.codeExecutionResult;\n // 补全函数调用结果\n if (part.functionResponse) {\n // 通过 functionCall.id 寻找对应的函数调用消息,在那条消息上添加functionResponse\n const functionCallMsg = mapped.find(\n (msg) => msg.functionCall?.id === part.functionResponse?.id,\n );\n if (functionCallMsg) {\n functionCallMsg.functionResponse = part.functionResponse;\n }\n return;\n }\n mapped.push(msg);\n });\n });\n\n setMessages((prev) => (isReplace ? mapped : [...prev, ...mapped]));\n };\n\n // 设置当前会话详情\n const setCurrentSession = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n // 切换会话时,abort 当前流式请求,防止数据污染和 loading 状态泄漏\n stopChat();\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n // 新接口直接返回按 event/item 结构的数组,传入 formatMessages 处理\n if (Array.isArray(data) && data.length > 0) {\n formatMessages(data, true);\n } else {\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(v4());\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n setLoading(true);\n\n const {\n data = [],\n pagination,\n result,\n } = await fetchSessionList({\n url,\n appNo,\n token,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || \"新对话\",\n timestamp: new Date(item.startTime).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({\n pageNum: sessionPagination.pageNum,\n pageSize: sessionPagination.pageSize,\n total: pagination?.total || 0,\n });\n const { sessionId } = data?.[0];\n if (showFirstSession) {\n setCurrentSession(sessionId);\n } else {\n fetchDetail && setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n fetchDetail &&\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n // 成功回调\n if (!initialized) {\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: \"初始化聊天记录成功\",\n data: {\n sessionId,\n },\n });\n setInitialized(true);\n }\n } else {\n // 无会话记录时,初始化会话详情\n clearChat();\n }\n } else {\n setSessionList([]);\n setCurrentSessionId(v4());\n setPrologue(\"\");\n setSuggestedQuestions([]);\n }\n } catch {\n onError?.({\n code: ErrorCode.API_ERROR,\n message: \"获取会话列表失败\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations(true);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n clearChat();\n }\n } else {\n message.error(\"删除会话失败\");\n }\n };\n\n // 点赞/点踩\n const likeMessage = async (\n invocationId: string,\n isLike: 1 | -1,\n feedbackData?: { feedbackTags?: string; feedbackDescription?: string },\n ) => {\n if (!appNo || !invocationId) return false;\n const { result } = await addFeedback({\n url,\n appNo,\n token,\n requestId: invocationId,\n isLike,\n ...feedbackData,\n });\n if (result?.code === API_SUCCESS_CODE) {\n setMessages((prev) =>\n prev.map((m) =>\n m.invocationId === invocationId ? { ...m, isLike } : m,\n ),\n );\n return true;\n }\n return false;\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations();\n } else {\n message.error(\"更新会话失败\");\n }\n };\n\n // 初始化应用\n const initConfig = async () => {\n try {\n setLoading(true);\n const { data, result } = await fetchAppConfig({ url, appNo });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: \"初始化配置成功\",\n });\n } else {\n onError?.({\n code: (result.code as ErrorCode) || ErrorCode.APP_NOT_FOUND,\n message: result.message || \"获取应用配置失败\",\n });\n }\n } catch (error) {\n onError?.({\n code: ErrorCode.API_ERROR,\n message: \"获取应用配置失败\",\n });\n } finally {\n setLoading(false);\n }\n };\n\n // 初始化—获取配置 (仅在启用时)\n useEffect(() => {\n if (enabled && url && appNo) {\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enabled, url, appNo]);\n\n // 初始化-聊天记录\n useEffect(() => {\n if (appInfo) {\n initAppConversations(true);\n }\n }, [appInfo]);\n\n return {\n appInfo,\n startChat,\n reChat,\n stopChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n initialized,\n currentSessionId,\n sessionList,\n sessionPagination,\n prologue,\n suggestions: suggestedQuestions,\n loading,\n messages: mergedMessages,\n insertSuggestedQuestions,\n insertPrologue,\n deleteSession,\n updateSession,\n setSuggestedQuestions,\n setCurrentSession,\n setMessages,\n storeEvents,\n storeMessage,\n likeMessage,\n setStateDelta: (delta: Record<string, any> | undefined) => {\n stateDeltaRef.current = delta;\n },\n };\n}\n\nexport default useADKChat;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { useEffect, useCallback, useMemo, useRef, useState } from \"react\";\nimport {\n fetchEventSource,\n EventStreamContentType,\n} from \"@microsoft/fetch-event-source\";\nimport { message } from \"antd\";\nimport { v4 } from \"uuid\";\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from \"@/constants\";\nimport {\n SuccessCode,\n ErrorCode,\n DebugOptions,\n FunctionCall,\n SendContent,\n SessionData,\n AgentRunRequest,\n Event,\n FunctionResponse,\n IMessage,\n Part,\n} from \"@/types\";\nimport {\n fetchAppConfig,\n fetchSessionList,\n fetchSessionDetail,\n closeSession,\n updateSessionTitle,\n addFeedback,\n type ChatConfig,\n} from \"@/services/api\";\nimport { safeJsonParse } from \"@/utils\";\n\nconst combineTextParts = (parts: Part[]) => {\n const result: Part[] = [];\n let combinedTextPart: Part | undefined;\n\n // eslint-disable-next-line no-restricted-syntax\n for (const part of parts) {\n // 纯文本 part(没有 fileData 等其他字段)才合并\n const isPureText = part.text && !part.fileData;\n if (isPureText) {\n // 如果没有 combined 或 combined 思考类型跟当前 part 不同,则创建新的合并引用\n if (!combinedTextPart || combinedTextPart.thought !== part.thought) {\n combinedTextPart = { ...part };\n result.push(combinedTextPart);\n } else {\n combinedTextPart.text = (combinedTextPart.text || \"\") + (part.text || \"\");\n }\n } else {\n combinedTextPart = undefined;\n result.push(part);\n }\n }\n return result;\n};\n\nfunction useADKChat({\n url = window.location.origin,\n token,\n config = {},\n type = \"agentDebug\",\n enabled = true, // ← 新增: 是否启用 Hook\n strategies,\n onError,\n onMessage,\n onSuccess,\n onStream,\n}: DebugOptions) {\n const [loading, setLoading] = useState(false);\n const [sessionLoading, setSessionLoading] = useState(false);\n const sendingRef = useRef(false); // 同步锁,防止快速重复点击\n const ctrl = useRef<AbortController | null>(null);\n // 应用配置\n const { appNo, showFirstSession } = config || {};\n const [appInfo, setAppInfo] = useState<ChatConfig | null>(null);\n // 初始化完成\n const [initialized, setInitialized] = useState(false);\n // 会话记录\n const [sessionList, setSessionList] = useState<SessionData[]>([]);\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>(() => v4());\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({\n total: 0,\n pageNum: 1,\n pageSize: SESSION_PAGE_SIZE,\n });\n // 开场白\n const [prologue, setPrologue] = useState<string>(\"\");\n // 建议问题\n const [suggestedQuestions, setSuggestedQuestions] = useState<string[]>([]);\n const [messages, setMessages] = useState<IMessage[]>([]);\n // 用户自定义业务参数 (stateDelta),每次发送请求时携带\n const stateDeltaRef = useRef<Record<string, any> | undefined>(undefined);\n const mergedMessages = useMemo(() => {\n const fnResMap: Record<string, FunctionResponse> = {};\n messages.forEach((msg) => {\n if (msg.functionResponse) {\n fnResMap[msg?.functionResponse?.id || \"\"] = msg.functionResponse;\n }\n });\n return messages.map((msg) => {\n if (msg.functionCall) {\n return {\n ...msg,\n functionResponse: fnResMap[msg?.functionCall?.id || \"\"],\n };\n }\n return msg;\n });\n }, [messages]);\n const textMsgRef = useRef<IMessage>(null);\n const eventDataRef = useRef<Map<string, any>>(new Map());\n\n // 插入消息\n const insertMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n const lastMessage = prev[prev.length - 1];\n if (lastMessage?.isLoading) {\n return [...prev.slice(0, -1), msg, lastMessage];\n }\n return [...prev, msg];\n });\n }, []);\n\n // 初始化开场白预设置问题\n const insertSuggestedQuestions = (suggested_questions: string[] = []) => {\n if (!suggested_questions?.length) return;\n // 无消息内容 且 有建议问题时\n if (messages.length === 0 && suggested_questions.length) {\n setSuggestedQuestions(suggested_questions);\n }\n };\n\n // 初始化开场白\n const insertPrologue = (prologue: string) => {\n if (prologue) {\n setPrologue(prologue);\n }\n };\n\n // 更新消息\n const updateMessage = useCallback((msg: IMessage) => {\n setMessages((prev) => {\n return prev.map((m) => {\n if (m.id === msg.id) {\n return msg;\n }\n return m;\n });\n });\n }, []);\n\n const withEventMeta = useCallback((msg: IMessage, event: Event): IMessage => {\n return {\n ...msg,\n modelCode: event.modelCode ?? msg.modelCode,\n usageMetadata: event.usageMetadata ?? msg.usageMetadata,\n finishReason: event.finishReason ?? msg.finishReason,\n raw: {\n ...(msg.raw || {}),\n ...event,\n },\n };\n }, []);\n\n const updateLastBotEventMeta = useCallback(\n (event: Event) => {\n if (!event.modelCode && !event.usageMetadata && !event.finishReason) return;\n\n setMessages((prev) => {\n const next = [...prev];\n const index = next.findLastIndex((msg) => msg.role === \"bot\");\n if (index < 0) return prev;\n\n next[index] = withEventMeta(next[index], event);\n return next;\n });\n },\n [withEventMeta],\n );\n\n // 存储事件\n const storeEvents = useCallback((part: Part | null, event: any) => {\n let title = \"\";\n\n if (part == null && event.actions?.artifactDelta) {\n title += \"eventAction: artifact\";\n } else if (part) {\n if (part.text) {\n title += `text:${part.text}`;\n } else if (part.functionCall) {\n title += `functionCall:${part.functionCall.name}`;\n } else if (part.functionResponse) {\n title += `functionResponse:${part.functionResponse.name}`;\n } else if (part.executableCode) {\n title += `executableCode:${part.executableCode.code?.slice(0, 10)}`;\n } else if (part.codeExecutionResult) {\n title += `codeExecutionResult:${part.codeExecutionResult.outcome}`;\n } else if (part.errorMessage) {\n title += `errorMessage:${part.errorMessage}`;\n }\n }\n\n const updatedEvent = { ...event, title };\n\n const newEventData = new Map(eventDataRef.current);\n newEventData.set(event.id, updatedEvent);\n eventDataRef.current = newEventData;\n }, []);\n\n // 存储消息\n const storeMessage = useCallback(\n (part: Part | null, event: Event, role: \"user\" | \"bot\") => {\n const msg: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n isLike: event.isLike || 0,\n role,\n modelCode: event.modelCode,\n usageMetadata: event.usageMetadata,\n finishReason: event.finishReason,\n raw: event,\n };\n\n if (part) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n };\n } else if (part.text) {\n msg.text = part.text;\n msg.thought = part.thought;\n\n if (event?.groundingMetadata?.searchEntryPoint?.renderedContent) {\n msg.renderedContent =\n event.groundingMetadata.searchEntryPoint.renderedContent;\n }\n } else if (part.fileData) {\n msg.fileData = [part.fileData];\n } else if (part.functionCall) {\n msg.functionCall = part.functionCall;\n } else if (part.functionResponse) {\n msg.functionResponse = part.functionResponse;\n } else if (part.executableCode) {\n msg.executableCode = part.executableCode;\n } else if (part.codeExecutionResult) {\n msg.codeExecutionResult = part.codeExecutionResult;\n }\n }\n\n if (part && Object.keys(part).length > 0) {\n insertMessage(msg);\n }\n },\n [insertMessage],\n );\n\n // 处理消息部分(关键更新)\n const processPart = useCallback(\n (event: Event, part: Part) => {\n const renderedContent =\n event.groundingMetadata?.searchEntryPoint?.renderedContent;\n if (part.text) {\n const newChunk = part.text;\n\n if (\n !textMsgRef.current ||\n textMsgRef.current.thought !== part.thought\n ) {\n const newMessage: IMessage = {\n id: v4(),\n author: event.author,\n invocationId: event.invocationId,\n eventId: event.id,\n timestamp: event.timestamp,\n role: \"bot\",\n text: newChunk,\n isLike: event.isLike || 0,\n thought: part.thought,\n modelCode: event.modelCode,\n usageMetadata: event.usageMetadata,\n finishReason: event.finishReason,\n raw: event,\n };\n\n if (renderedContent) {\n newMessage.renderedContent = renderedContent;\n }\n\n textMsgRef.current = newMessage;\n // 存储原数据\n storeEvents(part, event);\n // 插入消息\n insertMessage(newMessage);\n } else {\n if (renderedContent) {\n textMsgRef.current = {\n ...textMsgRef.current,\n renderedContent,\n };\n }\n textMsgRef.current = {\n ...withEventMeta(textMsgRef.current, event),\n text: (textMsgRef.current.text || \"\") + newChunk,\n };\n updateMessage(textMsgRef.current);\n if (event.partial === false) {\n storeEvents(part, event);\n textMsgRef.current = null;\n }\n }\n } else {\n textMsgRef.current = null;\n storeEvents(part, event);\n storeMessage(part, event, \"bot\");\n }\n },\n [storeEvents, storeMessage, insertMessage, updateMessage, withEventMeta],\n );\n\n // 处理建议类消息\n const processFollowupPart = useCallback(\n (event: Event) => {\n // 获取建议类消息的文本内容\n const part = event?.content?.parts?.[0] || null;\n const text = part?.text || \"\";\n storeEvents(part, event);\n if (text) {\n setSuggestedQuestions((prev) => [...prev, text]);\n }\n },\n [storeEvents, insertMessage],\n );\n\n // 处理错误消息\n const processErrorMessage = useCallback(\n (chunkJson: any) => {\n storeEvents(null, chunkJson);\n insertMessage({\n id: v4(),\n text: chunkJson.errorMessage,\n role: \"bot\",\n });\n },\n [storeEvents, insertMessage],\n );\n\n // 处理动作和制品\n const processActionArtifact = useCallback(\n (event: any) => {\n if (event.actions && event.actions.artifactDelta) {\n storeEvents(null, event);\n storeMessage(null, event, \"bot\");\n }\n },\n [storeEvents, storeMessage],\n );\n\n // 发送消息请求\n const sendMessageRequest = useCallback(\n (values: AgentRunRequest) => {\n return new Promise<void>((resolve) => {\n if (ctrl.current) {\n ctrl.current.abort();\n }\n setLoading(true);\n ctrl.current = new AbortController();\n const requestUrl = `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`;\n\n fetchEventSource(requestUrl, {\n method: \"POST\",\n signal: ctrl.current.signal,\n body: JSON.stringify(values),\n openWhenHidden: true,\n headers: {\n \"Content-Type\": \"application/json\",\n \"Cache-Control\": \"no-cache\",\n stream: \"true\",\n Authorization: `Bearer ${token}`,\n },\n async onopen(response) {\n if (\n response.ok &&\n response.headers.get(\"content-type\") === EventStreamContentType\n ) {\n // everything's good\n } else if (response.status === 401 || response.status === 403) {\n setLoading(false);\n onError?.({\n code: ErrorCode.API_ERROR,\n message: response.status === 401 ? \"认证失败,token 无效或已过期\" : \"无权限访问该资源\",\n });\n resolve();\n } else if (\n response.status >= 400 &&\n response.status < 500 &&\n response.status !== 429\n ) {\n resolve();\n } else {\n resolve();\n }\n },\n onmessage: (event) => {\n const rawData = safeJsonParse(event.data, {});\n\n // 处理新的数据格式: { data: {...}, result: {...} }\n let chunkJson: Event = rawData;\n if (rawData.data && rawData.result) {\n // 转换为旧格式\n chunkJson = {\n ...rawData.data,\n content: rawData.data, // data 本身就是 content\n invocationId: rawData.result.invocationId,\n sessionId: rawData.result.sessionId,\n id: rawData.result.invocationId,\n };\n }\n\n if (chunkJson.error) {\n message.warning(chunkJson.error);\n return;\n }\n onStream?.(chunkJson);\n updateLastBotEventMeta(chunkJson);\n if (chunkJson.content) {\n // 建议类消息单独处理\n if (chunkJson.content.role === \"followup\") {\n processFollowupPart(chunkJson);\n return;\n }\n // eslint-disable-next-line no-restricted-syntax\n for (const part of combineTextParts(chunkJson.content.parts)) {\n processPart(chunkJson, part);\n }\n } else if (chunkJson.errorMessage) {\n processErrorMessage(chunkJson);\n } else if (chunkJson.actions) {\n processActionArtifact(chunkJson);\n }\n },\n onclose: () => {\n setLoading(false);\n if (textMsgRef.current) {\n onMessage?.(textMsgRef.current?.text || \"\", textMsgRef.current);\n }\n textMsgRef.current = null;\n resolve();\n },\n onerror: (error) => {\n setLoading(false);\n resolve();\n console.error(\"EventSource failed:\", error);\n throw error;\n },\n });\n });\n },\n [\n type,\n currentSessionId,\n processActionArtifact,\n processErrorMessage,\n processPart,\n updateLastBotEventMeta,\n ],\n );\n\n // 发送会话\n const startChat = async ({\n text = \"\",\n files = [],\n functionResponse,\n }: SendContent) => {\n if (loading || sendingRef.current) return;\n if (!text.trim() && !files?.length && !functionResponse) return;\n sendingRef.current = true;\n // 清空建议问题\n setSuggestedQuestions([]);\n // 发送消息\n setMessages((prev) => {\n let temp = [...prev];\n // 如果 text 存在\n if (text.trim()) {\n temp.push({\n id: v4(),\n role: \"user\",\n text,\n });\n }\n // 如果file 存在\n if (files.length > 0) {\n temp.push({\n id: v4(),\n role: \"user\",\n fileData: files.map((file) => ({\n displayName: file.fileName || file.name,\n mimeType: file.mimeType || file.response?.mimeType,\n fileUri: file.tempUrl || file.response?.fileUrl || file.response?.tempUrl,\n })),\n });\n }\n // 如果 functionResponse 存在\n if (functionResponse) {\n temp.push({\n id: v4(),\n role: \"user\",\n functionResponse,\n });\n }\n return temp;\n });\n try {\n await sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: functionResponse ? [{ functionResponse }] : [{ text }],\n },\n files: files.map((file) => ({\n fileName: file.fileName || file.response?.fileName,\n fileId: file.fileId || file.response?.fileId,\n tempUrl: file.tempUrl || file.response?.fileUrl || file.response?.tempUrl,\n type: file.type || file.response?.fileType,\n mimeType: file.mimeType || file.response?.mimeType,\n })),\n ...(stateDeltaRef.current !== undefined && { stateDelta: stateDeltaRef.current }),\n });\n } finally {\n sendingRef.current = false;\n }\n // 获取聊天记录\n initAppConversations();\n };\n\n // 重新发送会话\n const reChat = async () => {\n if (loading || sendingRef.current) return;\n if (messages.length === 0) return;\n sendingRef.current = true;\n // 清空建议问题\n setSuggestedQuestions([]);\n\n // 找到最后一条用户消息的索引,删除其后所有 bot 消息\n const lastUserIndex = messages.findLastIndex(\n (msg) => msg.role === \"user\" && !msg.functionResponse,\n );\n if (lastUserIndex === -1) {\n sendingRef.current = false;\n return;\n }\n\n const newMessages = messages.slice(0, lastUserIndex + 1);\n setMessages(newMessages);\n\n const lastUserMessage = newMessages[lastUserIndex];\n const { text = \"\", fileData = [] } = lastUserMessage;\n\n try {\n await sendMessageRequest({\n stream: true,\n sessionId: currentSessionId,\n content: {\n role: \"user\",\n parts: [{ text }],\n },\n files: fileData?.map((file) => ({\n fileName: file.displayName,\n tempUrl: file.fileUri,\n mimeType: file.mimeType,\n })),\n ...(stateDeltaRef.current !== undefined && { stateDelta: stateDeltaRef.current }),\n });\n } finally {\n sendingRef.current = false;\n }\n };\n\n // 确认函数调用\n const confirmFnCall = (fnCall: FunctionCall, confirmed: boolean) => {\n const functionResponse =\n strategies?.createFunctionResponse?.(fnCall, confirmed) ?? {\n id: fnCall.id,\n name: fnCall.name,\n response: { confirmed },\n };\n startChat({ functionResponse });\n };\n\n // 使用建议问题\n const suggestChat = (text: string) => {\n if (loading) return;\n if (!text.trim()) return;\n setSuggestedQuestions([]);\n startChat({ text });\n };\n\n // 停止会话\n const stopChat = useCallback(() => {\n ctrl.current?.abort();\n setLoading(false);\n textMsgRef.current = null;\n }, [ctrl]);\n\n // 清除/重置会话\n const clearChat = () => {\n const newSessionId = v4();\n setCurrentSessionId(newSessionId);\n // 重置聊天内容\n stopChat();\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n setMessages([]);\n setSuggestedQuestions(appInfo?.onboardingInfo?.suggested_questions || []);\n };\n\n // 格式化会话记录\n const formatMessages = (messages: any[], isReplace = false) => {\n const mapped: IMessage[] = [];\n messages.forEach((item) => {\n if (!item || !item.content || !Array.isArray(item.content.parts)) return;\n\n const role =\n (item.content.role || \"\").toLowerCase() === \"user\" ? \"user\" : \"bot\";\n const parts = Array.isArray(item.content.parts)\n ? item.content.parts.filter((p: any) => {\n if (!p) return false;\n return Boolean(\n p.text ||\n p.inlineData ||\n p.functionCall ||\n p.functionResponse ||\n p.fileData ||\n p.executableCode ||\n p.codeExecutionResult ||\n p.errorMessage,\n );\n })\n : [];\n\n if (parts.length === 0) return;\n\n // 将同一条历史消息的 text/fileData parts 合并到一条 IMessage,避免拆分显示\n const textParts = parts.filter((p: any) => p.text || p.errorMessage || p.inlineData);\n const fileDataParts = parts.filter((p: any) => p.fileData);\n const otherParts = parts.filter((p: any) => !p.text && !p.errorMessage && !p.inlineData && !p.fileData);\n\n // 如果有 text/fileData,合并为一条消息\n if (textParts.length > 0 || fileDataParts.length > 0) {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n isLike: item.isLike,\n role,\n modelCode: item.modelCode,\n usageMetadata: item.usageMetadata,\n finishReason: item.finishReason,\n raw: item,\n } as IMessage;\n\n for (const part of textParts) {\n if (part.inlineData) {\n msg.inlineData = {\n displayName: part.inlineData.displayName,\n data: part.inlineData.data,\n mimeType: part.inlineData.mimeType,\n } as any;\n }\n if (part.text) {\n msg.text = (msg.text ? msg.text + \"\\n\" : \"\") + part.text;\n if (typeof part.thought !== \"undefined\") msg.thought = part.thought;\n }\n if (part.errorMessage) {\n msg.text = (msg.text ? msg.text + \"\\n\" : \"\") + part.errorMessage;\n }\n }\n\n if (fileDataParts.length > 0) {\n msg.fileData = fileDataParts.map((part: any) => ({\n displayName: part.fileData.displayName || \"\",\n fileUri: part.fileData.fileUri,\n mimeType: part.fileData.mimeType,\n }));\n }\n\n mapped.push(msg);\n }\n\n // 处理其他类型的 parts(functionCall、executableCode 等)\n otherParts.forEach((part: any) => {\n const msg: IMessage = {\n id: v4(),\n author: item.author,\n invocationId: item.invocationId,\n eventId: item.id,\n timestamp: item.timestamp,\n isLike: item.isLike,\n role,\n modelCode: item.modelCode,\n usageMetadata: item.usageMetadata,\n finishReason: item.finishReason,\n raw: item,\n } as IMessage;\n\n if (part.functionCall) msg.functionCall = part.functionCall;\n if (part.executableCode) msg.executableCode = part.executableCode;\n if (part.codeExecutionResult)\n msg.codeExecutionResult = part.codeExecutionResult;\n // 补全函数调用结果\n if (part.functionResponse) {\n // 通过 functionCall.id 寻找对应的函数调用消息,在那条消息上添加functionResponse\n const functionCallMsg = mapped.find(\n (msg) => msg.functionCall?.id === part.functionResponse?.id,\n );\n if (functionCallMsg) {\n functionCallMsg.functionResponse = part.functionResponse;\n }\n return;\n }\n mapped.push(msg);\n });\n });\n\n setMessages((prev) => (isReplace ? mapped : [...prev, ...mapped]));\n };\n\n // 设置当前会话详情\n const setCurrentSession = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n // 切换会话时,abort 当前流式请求,防止数据污染和 loading 状态泄漏\n stopChat();\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n // 新接口直接返回按 event/item 结构的数组,传入 formatMessages 处理\n if (Array.isArray(data) && data.length > 0) {\n formatMessages(data, true);\n } else {\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(v4());\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n setSessionLoading(true);\n\n const {\n data = [],\n pagination,\n result,\n } = await fetchSessionList({\n url,\n appNo,\n token,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || \"新对话\",\n timestamp: new Date(item.startTime).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({\n pageNum: sessionPagination.pageNum,\n pageSize: sessionPagination.pageSize,\n total: pagination?.total || 0,\n });\n const { sessionId } = data?.[0];\n if (showFirstSession) {\n setCurrentSession(sessionId);\n } else {\n fetchDetail && setPrologue(appInfo?.onboardingInfo?.prologue || \"\");\n fetchDetail &&\n setSuggestedQuestions(\n appInfo?.onboardingInfo?.suggested_questions || [],\n );\n }\n // 成功回调\n if (!initialized) {\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: \"初始化聊天记录成功\",\n data: {\n sessionId,\n },\n });\n setInitialized(true);\n }\n } else {\n // 无会话记录时,初始化会话详情\n clearChat();\n }\n } else {\n setSessionList([]);\n setCurrentSessionId(v4());\n setPrologue(\"\");\n setSuggestedQuestions([]);\n }\n } catch {\n onError?.({\n code: ErrorCode.API_ERROR,\n message: \"获取会话列表失败\",\n });\n } finally {\n setSessionLoading(false);\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations(true);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n clearChat();\n }\n } else {\n message.error(\"删除会话失败\");\n }\n };\n\n // 点赞/点踩\n const likeMessage = async (\n invocationId: string,\n isLike: 1 | -1,\n feedbackData?: { feedbackTags?: string; feedbackDescription?: string },\n ) => {\n if (!appNo || !invocationId) return false;\n const { result } = await addFeedback({\n url,\n appNo,\n token,\n requestId: invocationId,\n isLike,\n ...feedbackData,\n });\n if (result?.code === API_SUCCESS_CODE) {\n setMessages((prev) =>\n prev.map((m) =>\n m.invocationId === invocationId ? { ...m, isLike } : m,\n ),\n );\n return true;\n }\n return false;\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId || !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations();\n } else {\n message.error(\"更新会话失败\");\n }\n };\n\n // 初始化应用\n const initConfig = async () => {\n try {\n setSessionLoading(true);\n const { data, result } = await fetchAppConfig({ url, appNo });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: \"初始化配置成功\",\n });\n } else {\n onError?.({\n code: (result.code as ErrorCode) || ErrorCode.APP_NOT_FOUND,\n message: result.message || \"获取应用配置失败\",\n });\n }\n } catch (error) {\n onError?.({\n code: ErrorCode.API_ERROR,\n message: \"获取应用配置失败\",\n });\n } finally {\n setSessionLoading(false);\n }\n };\n\n // 初始化—获取配置 (仅在启用时)\n useEffect(() => {\n if (enabled && url && appNo) {\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [enabled, url, appNo]);\n\n // 初始化-聊天记录\n useEffect(() => {\n if (appInfo) {\n initAppConversations(true);\n }\n }, [appInfo]);\n\n return {\n appInfo,\n startChat,\n reChat,\n stopChat,\n clearChat,\n suggestChat,\n confirmFnCall,\n initialized,\n currentSessionId,\n sessionList,\n sessionPagination,\n prologue,\n suggestions: suggestedQuestions,\n loading,\n sessionLoading,\n messages: mergedMessages,\n insertSuggestedQuestions,\n insertPrologue,\n deleteSession,\n updateSession,\n setSuggestedQuestions,\n setCurrentSession,\n setMessages,\n storeEvents,\n storeMessage,\n likeMessage,\n setStateDelta: (delta: Record<string, any> | undefined) => {\n stateDeltaRef.current = delta;\n },\n };\n}\n\nexport default useADKChat;\n"],
5
+ "mappings": "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",
6
6
  "names": ["prologue", "messages", "msg"]
7
7
  }
@@ -487,7 +487,7 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
487
487
  });
488
488
  var isDisabled = disabled || uploading || loading;
489
489
 
490
- // 定义按钮组件
490
+ // 定义按钮组件(供外部 slot 函数通过 actionsComponents 使用)
491
491
  var SendButton = function SendButton(props) {
492
492
  return /*#__PURE__*/_jsx(Tooltip, {
493
493
  title: loading ? "停止生成" : "发送消息",
@@ -497,7 +497,9 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
497
497
  disabled: uploading || disabled,
498
498
  "aria-label": loading ? "停止生成" : "发送消息"
499
499
  }, props), {}, {
500
- children: loading ? /*#__PURE__*/_jsx(LoadingOutlined, {}) : /*#__PURE__*/_jsx(ArrowUpOutlined, {})
500
+ children: loading ? /*#__PURE__*/_jsx(LoadingOutlined, {
501
+ spin: true
502
+ }) : /*#__PURE__*/_jsx(ArrowUpOutlined, {})
501
503
  }))
502
504
  });
503
505
  };
@@ -550,10 +552,30 @@ var XAdkSender = /*#__PURE__*/forwardRef(function (_ref, ref) {
550
552
  return slot;
551
553
  };
552
554
 
553
- // 默认的后缀内容(操作按钮组)
555
+ // 默认的后缀内容(操作按钮组) - 直接内联渲染避免组件引用变化导致 unmount/remount
554
556
  var defaultSuffix = /*#__PURE__*/_jsxs("div", {
555
557
  className: styles.buttonGroup,
556
- children: [allowUpload && /*#__PURE__*/_jsx(UploadButton, {}), /*#__PURE__*/_jsx(SendButton, {})]
558
+ children: [allowUpload && /*#__PURE__*/_jsx(Tooltip, {
559
+ title: "\u4E0A\u4F20\u6587\u4EF6",
560
+ children: /*#__PURE__*/_jsx("button", {
561
+ className: "".concat(styles.iconButton, " ").concat(styles.uploadButton),
562
+ onClick: triggerFileSelect,
563
+ disabled: isDisabled,
564
+ "aria-label": "\u4E0A\u4F20\u6587\u4EF6",
565
+ children: /*#__PURE__*/_jsx(PaperClipOutlined, {})
566
+ })
567
+ }), /*#__PURE__*/_jsx(Tooltip, {
568
+ title: loading ? "停止生成" : "发送消息",
569
+ children: /*#__PURE__*/_jsx("button", {
570
+ className: "".concat(styles.iconButton, " ").concat(styles.sendButton, " ").concat(loading ? "stop" : ""),
571
+ onClick: loading ? onStop : handleSubmit,
572
+ disabled: uploading || disabled,
573
+ "aria-label": loading ? "停止生成" : "发送消息",
574
+ children: loading ? /*#__PURE__*/_jsx(LoadingOutlined, {
575
+ spin: true
576
+ }) : /*#__PURE__*/_jsx(ArrowUpOutlined, {})
577
+ })
578
+ })]
557
579
  });
558
580
  return /*#__PURE__*/_jsxs("div", {
559
581
  ref: containerRef,
@@ -1 +1 @@
1
- {"version":3,"names":["React","useState","useRef","useCallback","forwardRef","useImperativeHandle","Popconfirm","message","Tooltip","Input","Modal","ClearOutlined","LoadingOutlined","ArrowUpOutlined","PaperClipOutlined","useStyles","FileGallery","getExt","jsx","_jsx","jsxs","_jsxs","XAdkSender","_ref","ref","_ref$clearBtnShow","clearBtnShow","_ref$allowUpload","allowUpload","_ref$draggable","draggable","_ref$loading","loading","_ref$disabled","disabled","_ref$uploadRequest","uploadRequest","onClear","onChange","onSubmit","onStop","onFilesChange","onUploadSuccess","onUploadError","_ref$maxFileSize","maxFileSize","_ref$validators","validators","customValidators","_ref$allowedFileTypes","allowedFileTypes","_ref$maxFiles","maxFiles","Infinity","suffix","header","prefix","footer","styles","_useState","_useState2","_slicedToArray","value","setValue","_useState3","_useState4","files","setFiles","_useState5","_useState6","isDragOver","setIsDragOver","containerRef","fileInputRef","generateId","Date","now","toString","Math","random","substr","normalizeUploadResponse","response","_response$data","_ref2","data","Array","isArray","checkFileType","file","length","ext","some","type","includes","endsWith","startsWith","split","slice","checkFileSize","maxSize","size","isDuplicateFile","f","name","builtInValidators","_file","_ref3","concat","_ref4","allValidators","_toConsumableArray","validateFile","_iterator","_createForOfIteratorHelper","_step","s","n","done","validator","error","valid","err","e","handleFileSelect","selectedFiles","fileArray","from","validFiles","forEach","validation","push","id","uid","progress","status","prev","next","uploadFiles","addFiles","rawFiles","_ref5","_asyncToGenerator","_regeneratorRuntime","mark","_callee","fileList","_iterator2","_step2","_loop","wrap","_callee$","_context2","localFile","_loop$","_context","map","_objectSpread","onProgress","percent","onSuccess","responseData","fileId","tempUrl","fileUrl","url","onError","errorMessage","t0","console","Error","stop","delegateYield","t1","finish","_x","apply","arguments","handleRemoveFile","filter","triggerFileSelect","current","click","handleDragOver","preventDefault","stopPropagation","handleDragLeave","handleDrop","dataTransfer","handleSubmit","trim","warning","successFiles","uploadingFiles","confirm","title","content","okText","cancelText","onOk","formattedFiles","formatFilesForServer","text","onCancel","info","fileName","fileType","fileSize","mimeType","raw","handleInputChange","newValue","target","handleKeyDown","key","shiftKey","renderFileList","style","display","flexWrap","gap","padding","children","removable","onRemove","containerClass","container","uploading","isDisabled","SendButton","props","className","iconButton","sendButton","onClick","UploadButton","uploadButton","ClearButton","onConfirm","placement","clearButton","actionsComponents","renderSlot","slot","oriNode","undefined","result","components","defaultSuffix","buttonGroup","onDragOver","onDragLeave","onDrop","multiple","accept","join","mainArea","senderWrap","inputAndButtons","textAreaWrapper","TextArea","textArea","onKeyDown","placeholder","autoSize","minRows","maxRows","border","boxShadow","outline","tip","displayName"],"sources":["../../../../src/components/XAdkSender/index.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, forwardRef, useImperativeHandle } from \"react\";\nimport { Popconfirm, message, Tooltip, Input, Modal } from \"antd\";\nimport {\n ClearOutlined,\n LoadingOutlined,\n ArrowUpOutlined,\n PaperClipOutlined,\n} from \"@ant-design/icons\";\nimport {\n XAdkSenderProps,\n XAdkSenderHandle,\n ServerFile,\n LocalFile,\n ActionsComponents,\n FileValidator,\n UploadFileResult,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\nimport FileGallery from \"../FileGallery\";\nimport { getExt } from \"@/utils/file\";\n\nconst XAdkSender = forwardRef<XAdkSenderHandle, XAdkSenderProps>(({\n clearBtnShow = true,\n allowUpload = false,\n draggable = true,\n loading = false,\n disabled = false,\n uploadRequest = () => {},\n onClear,\n onChange,\n onSubmit,\n onStop,\n onFilesChange,\n onUploadSuccess,\n onUploadError,\n maxFileSize = 10,\n validators: customValidators = [],\n // allowedFileTypes = [\n // \"image/*\",\n // \"audio/*\",\n // \"video/*\",\n // \"application/pdf\",\n // \"text/plain\",\n // \".doc\",\n // \".docx\",\n // \".xls\",\n // \".xlsx\",\n // \".ppt\",\n // \".pptx\",\n // \"\",\n // ],\n allowedFileTypes = [],\n maxFiles = Infinity,\n suffix,\n header,\n prefix,\n footer,\n}, ref) => {\n const styles = useStyles();\n const [value, setValue] = useState<string>(\"\");\n const [files, setFiles] = useState<LocalFile[]>([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // 生成唯一ID\n const generateId = () => {\n return Date.now().toString(36) + Math.random().toString(36).substr(2);\n };\n\n const normalizeUploadResponse = (response: any): UploadFileResult => {\n const data = response?.data ?? response;\n return (Array.isArray(data) ? data[0] : data) ?? {};\n };\n\n // 检查文件类型\n const checkFileType = (file: File): boolean => {\n if (allowedFileTypes?.length > 0) {\n const ext = getExt(file);\n\n return allowedFileTypes.some((type) => {\n // 1️⃣ MIME 校验\n if (type.includes(\"/\")) {\n if (type.endsWith(\"/*\")) {\n return file.type.startsWith(type.split(\"/\")[0]);\n }\n return file.type === type;\n }\n\n if (type.startsWith(\".\")) {\n return ext === type.slice(1);\n }\n\n return false;\n });\n }\n return true;\n };\n\n // 检查文件大小\n const checkFileSize = (file: File): boolean => {\n const maxSize = maxFileSize * 1024 * 1024;\n return file.size <= maxSize;\n };\n\n // 重复文件检测\n const isDuplicateFile = (file: File, files: LocalFile[]) => {\n return files.some((f) => f.name === file.name && f.size === file.size);\n };\n\n // 内置校验器集合\n const builtInValidators: FileValidator[] = [\n // 数量校验(修复批量 bug)\n (_file, { files }) => {\n if (files.length >= maxFiles) {\n return `最多只能上传 ${maxFiles} 个文件`;\n }\n return null;\n },\n\n // 大小校验\n (file) => {\n const maxSize = maxFileSize * 1024 * 1024;\n if (file.size > maxSize) {\n return `文件大小不能超过 ${maxFileSize}MB`;\n }\n return null;\n },\n\n // 类型校验\n (file) => {\n if (!checkFileType(file)) {\n return \"不支持的文件类型\";\n }\n return null;\n },\n\n // ⭐ 新增:去重校验\n (file, { files }) => {\n if (isDuplicateFile(file, files)) {\n return \"文件已存在\";\n }\n return null;\n },\n ];\n\n const allValidators = [...builtInValidators, ...customValidators];\n\n // 验证文件\n const validateFile = (file: File): { valid: boolean; message?: string } => {\n for (const validator of allValidators) {\n const error = validator(file, { files });\n if (error) {\n return { valid: false, message: error };\n }\n }\n return { valid: true };\n };\n\n // 处理文件选择\n const handleFileSelect = useCallback(\n (selectedFiles: File[]) => {\n const fileArray = Array.from(selectedFiles);\n\n if (files.length + fileArray.length > maxFiles) {\n message.error(`最多只能上传 ${maxFiles} 个文件`);\n return;\n }\n\n const validFiles: LocalFile[] = [];\n\n fileArray.forEach((file) => {\n const validation = validateFile(file);\n\n if (validation.valid) {\n validFiles.push({\n id: generateId(),\n uid: generateId(),\n name: file.name,\n size: file.size,\n type: file.type,\n file,\n progress: 0,\n status: \"pending\",\n response: null,\n });\n } else {\n message.error(validation.message);\n }\n });\n\n if (validFiles.length > 0) {\n setFiles((prev) => {\n const next = [...prev, ...validFiles];\n onFilesChange?.(next);\n return next;\n });\n uploadFiles(validFiles);\n }\n },\n [files, maxFiles, maxFileSize, allowedFileTypes],\n );\n\n // 暴露 addFiles 方法供外层(如 DefaultLayout 拖拽上传)调用\n useImperativeHandle(ref, () => ({\n addFiles: (rawFiles: File[]) => {\n handleFileSelect(rawFiles);\n },\n }), [handleFileSelect]);\n\n // 上传文件\n const uploadFiles = async (fileList: LocalFile[]) => {\n for (const localFile of fileList) {\n // 开始上传\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id ? { ...f, status: \"uploading\" } : f,\n ),\n );\n\n try {\n await uploadRequest({\n file: localFile.file,\n onProgress: (e) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id ? { ...f, progress: e.percent } : f,\n ),\n );\n },\n onSuccess: (response) => {\n const responseData = normalizeUploadResponse(response);\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"success\",\n progress: 100,\n response,\n fileId: responseData.fileId || responseData.id,\n tempUrl:\n responseData.tempUrl ||\n responseData.fileUrl ||\n responseData.url,\n }\n : f,\n ),\n );\n\n onUploadSuccess?.({\n ...localFile,\n status: \"success\",\n response,\n fileId: responseData.fileId || responseData.id,\n tempUrl:\n responseData.tempUrl || responseData.fileUrl || responseData.url,\n });\n },\n onError: (error) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"error\",\n errorMessage: error.message,\n }\n : f,\n ),\n );\n onUploadError?.(localFile, error);\n },\n });\n } catch (error) {\n console.error(\"上传处理错误:\", error);\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"error\",\n errorMessage:\n error instanceof Error ? error.message : \"上传处理失败\",\n }\n : f,\n ),\n );\n message.error(`${localFile.name} 上传失败`);\n }\n }\n };\n\n // 删除文件\n const handleRemoveFile = (id: string) => {\n setFiles((prev) => {\n const next = prev.filter((file) => file.id !== id);\n\n onFilesChange?.(next);\n\n return next;\n });\n };\n\n // 触发文件选择\n const triggerFileSelect = () => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n\n // 处理拖拽事件\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (allowUpload) {\n setIsDragOver(true);\n }\n },\n [allowUpload],\n );\n\n const handleDragLeave = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (allowUpload) {\n setIsDragOver(false);\n }\n },\n [allowUpload],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n\n if (\n allowUpload &&\n e.dataTransfer.files &&\n e.dataTransfer.files.length > 0\n ) {\n handleFileSelect(Array.from(e.dataTransfer.files));\n }\n },\n [allowUpload, handleFileSelect],\n );\n\n // 处理提交\n const handleSubmit = () => {\n if (!value.trim() && files.length === 0) {\n message.warning(\"请输入消息或选择文件\");\n return;\n }\n\n const successFiles = files.filter((file) => file.status === \"success\");\n const uploadingFiles = files.filter((file) => file.status === \"uploading\");\n\n if (uploadingFiles.length > 0) {\n Modal.confirm({\n title: \"文件上传中\",\n content: `还有 ${uploadingFiles.length} 个文件正在上传,是否继续发送?`,\n okText: \"发送已完成的\",\n cancelText: \"等待全部完成\",\n onOk: () => {\n const formattedFiles = formatFilesForServer(successFiles);\n if (onSubmit) {\n onSubmit({\n text: value,\n files: formattedFiles,\n });\n }\n\n setValue(\"\");\n setFiles((prev) => prev.filter((f) => f.status !== \"success\"));\n },\n onCancel: () => {\n message.info(\"请等待文件上传完成后再发送\");\n },\n });\n } else {\n const formattedFiles = formatFilesForServer(successFiles);\n\n if (onSubmit) {\n onSubmit({\n text: value,\n files: formattedFiles,\n });\n }\n\n setValue(\"\");\n setFiles((prev) => prev.filter((f) => f.status !== \"success\"));\n }\n };\n\n // 格式化文件列表为服务端格式\n const formatFilesForServer = (fileList: LocalFile[]): ServerFile[] => {\n return fileList\n .filter((file) => file.status === \"success\" && file.response)\n .map((file) => {\n const responseData = normalizeUploadResponse(file.response);\n\n return {\n fileName: responseData.fileName || file.name,\n fileId: responseData.fileId || responseData.id || \"\",\n tempUrl:\n responseData.tempUrl || responseData.fileUrl || responseData.url || \"\",\n type: responseData.fileType || responseData.type || getExt(file),\n size: responseData.fileSize || responseData.size || file.size,\n mimeType: responseData.mimeType || file.type,\n raw: {\n ...responseData,\n },\n };\n });\n };\n\n // 处理输入框变化\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setValue(newValue);\n onChange?.(newValue);\n };\n\n // 处理回车键\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n // 渲染文件列表 - 使用新的 FileGallery 组件\n const renderFileList = () => {\n if (files.length === 0) return null;\n\n return (\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: \"8px\",\n padding: \"12px 0\",\n }}\n >\n {files.map((file) => (\n <FileGallery\n key={file.id}\n file={file}\n removable\n onRemove={handleRemoveFile}\n />\n ))}\n </div>\n );\n };\n\n const containerClass = `${styles.container} ${isDragOver ? \"drag-over\" : \"\"}`;\n const uploading = files.some((f) => f.status === \"uploading\");\n const isDisabled = disabled || uploading || loading;\n\n // 定义按钮组件\n const SendButton = (props: any) => (\n <Tooltip title={loading ? \"停止生成\" : \"发送消息\"}>\n <button\n className={`${styles.iconButton} ${styles.sendButton} ${loading ? \"stop\" : \"\"}`}\n onClick={loading ? onStop : handleSubmit}\n disabled={uploading || disabled}\n aria-label={loading ? \"停止生成\" : \"发送消息\"}\n {...props}\n >\n {loading ? <LoadingOutlined /> : <ArrowUpOutlined />}\n </button>\n </Tooltip>\n );\n\n const UploadButton = (props: any) => (\n <Tooltip title=\"上传文件\">\n <button\n className={`${styles.iconButton} ${styles.uploadButton}`}\n onClick={triggerFileSelect}\n disabled={isDisabled}\n aria-label=\"上传文件\"\n {...props}\n >\n <PaperClipOutlined />\n </button>\n </Tooltip>\n );\n\n const ClearButton = (props: any) => (\n <Popconfirm\n title=\"确定要清空聊天记录吗?\"\n onConfirm={onClear}\n placement=\"top\"\n okText=\"确定\"\n cancelText=\"取消\"\n disabled={isDisabled}\n >\n <button\n className={`${styles.iconButton} ${styles.clearButton}`}\n disabled={isDisabled}\n aria-label=\"清空聊天记录\"\n {...props}\n >\n <ClearOutlined />\n </button>\n </Popconfirm>\n );\n\n const actionsComponents: ActionsComponents = {\n SendButton,\n UploadButton,\n ClearButton,\n };\n\n // 渲染插槽内容\n const renderSlot = (\n slot:\n | React.ReactNode\n | false\n | ((\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n ) => React.ReactNode | false)\n | undefined,\n oriNode: React.ReactNode,\n ): React.ReactNode | null => {\n if (slot === false) return null;\n if (slot === undefined) return oriNode;\n if (typeof slot === \"function\") {\n const result = slot(oriNode, { components: actionsComponents });\n return result === false ? null : result;\n }\n return slot;\n };\n\n // 默认的后缀内容(操作按钮组)\n const defaultSuffix = (\n <div className={styles.buttonGroup}>\n {allowUpload && <UploadButton />}\n <SendButton />\n </div>\n );\n\n return (\n <div\n ref={containerRef}\n className={containerClass}\n onDragOver={allowUpload && draggable ? handleDragOver : undefined}\n onDragLeave={allowUpload && draggable ? handleDragLeave : undefined}\n onDrop={allowUpload && draggable ? handleDrop : undefined}\n >\n {/* 头部插槽 */}\n {renderSlot(header, false)}\n\n {allowUpload && files.length > 0 && renderFileList()}\n\n {/* 隐藏的原生 file input */}\n {allowUpload && (\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={allowedFileTypes.join(\",\")}\n style={{ display: \"none\" }}\n onChange={(e) => {\n if (e.target.files) {\n handleFileSelect(Array.from(e.target.files));\n e.target.value = \"\";\n }\n }}\n />\n )}\n\n <div className={styles.mainArea}>\n <div className={styles.senderWrap}>\n {/* 清除按钮 */}\n {clearBtnShow && <ClearButton />}\n\n <div className={styles.inputAndButtons}>\n {/* 前缀插槽 */}\n {renderSlot(prefix, false)}\n\n <div className={styles.textAreaWrapper}>\n <Input.TextArea\n className={styles.textArea}\n value={value}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder=\"请输入消息...\"\n disabled={isDisabled}\n autoSize={{ minRows: 1, maxRows: 4 }}\n style={{\n border: \"none\",\n boxShadow: \"none\",\n outline: \"none\",\n padding: 0,\n }}\n />\n </div>\n\n {/* 后缀插槽(默认显示操作按钮) */}\n {renderSlot(suffix, defaultSuffix)}\n </div>\n </div>\n\n {/* 底部插槽(默认显示提示文字) */}\n {renderSlot(\n footer,\n <div className={styles.tip}>\n 内容由AI生成,无法确保真实准确,仅供参考\n </div>,\n )}\n </div>\n </div>\n );\n});\n\nXAdkSender.displayName = 'XAdkSender';\n\nexport default XAdkSender;\n"],"mappings":"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"}
1
+ {"version":3,"names":["React","useState","useRef","useCallback","forwardRef","useImperativeHandle","Popconfirm","message","Tooltip","Input","Modal","ClearOutlined","LoadingOutlined","ArrowUpOutlined","PaperClipOutlined","useStyles","FileGallery","getExt","jsx","_jsx","jsxs","_jsxs","XAdkSender","_ref","ref","_ref$clearBtnShow","clearBtnShow","_ref$allowUpload","allowUpload","_ref$draggable","draggable","_ref$loading","loading","_ref$disabled","disabled","_ref$uploadRequest","uploadRequest","onClear","onChange","onSubmit","onStop","onFilesChange","onUploadSuccess","onUploadError","_ref$maxFileSize","maxFileSize","_ref$validators","validators","customValidators","_ref$allowedFileTypes","allowedFileTypes","_ref$maxFiles","maxFiles","Infinity","suffix","header","prefix","footer","styles","_useState","_useState2","_slicedToArray","value","setValue","_useState3","_useState4","files","setFiles","_useState5","_useState6","isDragOver","setIsDragOver","containerRef","fileInputRef","generateId","Date","now","toString","Math","random","substr","normalizeUploadResponse","response","_response$data","_ref2","data","Array","isArray","checkFileType","file","length","ext","some","type","includes","endsWith","startsWith","split","slice","checkFileSize","maxSize","size","isDuplicateFile","f","name","builtInValidators","_file","_ref3","concat","_ref4","allValidators","_toConsumableArray","validateFile","_iterator","_createForOfIteratorHelper","_step","s","n","done","validator","error","valid","err","e","handleFileSelect","selectedFiles","fileArray","from","validFiles","forEach","validation","push","id","uid","progress","status","prev","next","uploadFiles","addFiles","rawFiles","_ref5","_asyncToGenerator","_regeneratorRuntime","mark","_callee","fileList","_iterator2","_step2","_loop","wrap","_callee$","_context2","localFile","_loop$","_context","map","_objectSpread","onProgress","percent","onSuccess","responseData","fileId","tempUrl","fileUrl","url","onError","errorMessage","t0","console","Error","stop","delegateYield","t1","finish","_x","apply","arguments","handleRemoveFile","filter","triggerFileSelect","current","click","handleDragOver","preventDefault","stopPropagation","handleDragLeave","handleDrop","dataTransfer","handleSubmit","trim","warning","successFiles","uploadingFiles","confirm","title","content","okText","cancelText","onOk","formattedFiles","formatFilesForServer","text","onCancel","info","fileName","fileType","fileSize","mimeType","raw","handleInputChange","newValue","target","handleKeyDown","key","shiftKey","renderFileList","style","display","flexWrap","gap","padding","children","removable","onRemove","containerClass","container","uploading","isDisabled","SendButton","props","className","iconButton","sendButton","onClick","spin","UploadButton","uploadButton","ClearButton","onConfirm","placement","clearButton","actionsComponents","renderSlot","slot","oriNode","undefined","result","components","defaultSuffix","buttonGroup","onDragOver","onDragLeave","onDrop","multiple","accept","join","mainArea","senderWrap","inputAndButtons","textAreaWrapper","TextArea","textArea","onKeyDown","placeholder","autoSize","minRows","maxRows","border","boxShadow","outline","tip","displayName"],"sources":["../../../../src/components/XAdkSender/index.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback, forwardRef, useImperativeHandle } from \"react\";\nimport { Popconfirm, message, Tooltip, Input, Modal } from \"antd\";\nimport {\n ClearOutlined,\n LoadingOutlined,\n ArrowUpOutlined,\n PaperClipOutlined,\n} from \"@ant-design/icons\";\nimport {\n XAdkSenderProps,\n XAdkSenderHandle,\n ServerFile,\n LocalFile,\n ActionsComponents,\n FileValidator,\n UploadFileResult,\n} from \"@/types\";\nimport { useStyles } from \"./styles\";\nimport FileGallery from \"../FileGallery\";\nimport { getExt } from \"@/utils/file\";\n\nconst XAdkSender = forwardRef<XAdkSenderHandle, XAdkSenderProps>(({\n clearBtnShow = true,\n allowUpload = false,\n draggable = true,\n loading = false,\n disabled = false,\n uploadRequest = () => {},\n onClear,\n onChange,\n onSubmit,\n onStop,\n onFilesChange,\n onUploadSuccess,\n onUploadError,\n maxFileSize = 10,\n validators: customValidators = [],\n // allowedFileTypes = [\n // \"image/*\",\n // \"audio/*\",\n // \"video/*\",\n // \"application/pdf\",\n // \"text/plain\",\n // \".doc\",\n // \".docx\",\n // \".xls\",\n // \".xlsx\",\n // \".ppt\",\n // \".pptx\",\n // \"\",\n // ],\n allowedFileTypes = [],\n maxFiles = Infinity,\n suffix,\n header,\n prefix,\n footer,\n}, ref) => {\n const styles = useStyles();\n const [value, setValue] = useState<string>(\"\");\n const [files, setFiles] = useState<LocalFile[]>([]);\n const [isDragOver, setIsDragOver] = useState(false);\n const containerRef = useRef<HTMLDivElement>(null);\n const fileInputRef = useRef<HTMLInputElement>(null);\n\n // 生成唯一ID\n const generateId = () => {\n return Date.now().toString(36) + Math.random().toString(36).substr(2);\n };\n\n const normalizeUploadResponse = (response: any): UploadFileResult => {\n const data = response?.data ?? response;\n return (Array.isArray(data) ? data[0] : data) ?? {};\n };\n\n // 检查文件类型\n const checkFileType = (file: File): boolean => {\n if (allowedFileTypes?.length > 0) {\n const ext = getExt(file);\n\n return allowedFileTypes.some((type) => {\n // 1️⃣ MIME 校验\n if (type.includes(\"/\")) {\n if (type.endsWith(\"/*\")) {\n return file.type.startsWith(type.split(\"/\")[0]);\n }\n return file.type === type;\n }\n\n if (type.startsWith(\".\")) {\n return ext === type.slice(1);\n }\n\n return false;\n });\n }\n return true;\n };\n\n // 检查文件大小\n const checkFileSize = (file: File): boolean => {\n const maxSize = maxFileSize * 1024 * 1024;\n return file.size <= maxSize;\n };\n\n // 重复文件检测\n const isDuplicateFile = (file: File, files: LocalFile[]) => {\n return files.some((f) => f.name === file.name && f.size === file.size);\n };\n\n // 内置校验器集合\n const builtInValidators: FileValidator[] = [\n // 数量校验(修复批量 bug)\n (_file, { files }) => {\n if (files.length >= maxFiles) {\n return `最多只能上传 ${maxFiles} 个文件`;\n }\n return null;\n },\n\n // 大小校验\n (file) => {\n const maxSize = maxFileSize * 1024 * 1024;\n if (file.size > maxSize) {\n return `文件大小不能超过 ${maxFileSize}MB`;\n }\n return null;\n },\n\n // 类型校验\n (file) => {\n if (!checkFileType(file)) {\n return \"不支持的文件类型\";\n }\n return null;\n },\n\n // ⭐ 新增:去重校验\n (file, { files }) => {\n if (isDuplicateFile(file, files)) {\n return \"文件已存在\";\n }\n return null;\n },\n ];\n\n const allValidators = [...builtInValidators, ...customValidators];\n\n // 验证文件\n const validateFile = (file: File): { valid: boolean; message?: string } => {\n for (const validator of allValidators) {\n const error = validator(file, { files });\n if (error) {\n return { valid: false, message: error };\n }\n }\n return { valid: true };\n };\n\n // 处理文件选择\n const handleFileSelect = useCallback(\n (selectedFiles: File[]) => {\n const fileArray = Array.from(selectedFiles);\n\n if (files.length + fileArray.length > maxFiles) {\n message.error(`最多只能上传 ${maxFiles} 个文件`);\n return;\n }\n\n const validFiles: LocalFile[] = [];\n\n fileArray.forEach((file) => {\n const validation = validateFile(file);\n\n if (validation.valid) {\n validFiles.push({\n id: generateId(),\n uid: generateId(),\n name: file.name,\n size: file.size,\n type: file.type,\n file,\n progress: 0,\n status: \"pending\",\n response: null,\n });\n } else {\n message.error(validation.message);\n }\n });\n\n if (validFiles.length > 0) {\n setFiles((prev) => {\n const next = [...prev, ...validFiles];\n onFilesChange?.(next);\n return next;\n });\n uploadFiles(validFiles);\n }\n },\n [files, maxFiles, maxFileSize, allowedFileTypes],\n );\n\n // 暴露 addFiles 方法供外层(如 DefaultLayout 拖拽上传)调用\n useImperativeHandle(ref, () => ({\n addFiles: (rawFiles: File[]) => {\n handleFileSelect(rawFiles);\n },\n }), [handleFileSelect]);\n\n // 上传文件\n const uploadFiles = async (fileList: LocalFile[]) => {\n for (const localFile of fileList) {\n // 开始上传\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id ? { ...f, status: \"uploading\" } : f,\n ),\n );\n\n try {\n await uploadRequest({\n file: localFile.file,\n onProgress: (e) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id ? { ...f, progress: e.percent } : f,\n ),\n );\n },\n onSuccess: (response) => {\n const responseData = normalizeUploadResponse(response);\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"success\",\n progress: 100,\n response,\n fileId: responseData.fileId || responseData.id,\n tempUrl:\n responseData.tempUrl ||\n responseData.fileUrl ||\n responseData.url,\n }\n : f,\n ),\n );\n\n onUploadSuccess?.({\n ...localFile,\n status: \"success\",\n response,\n fileId: responseData.fileId || responseData.id,\n tempUrl:\n responseData.tempUrl || responseData.fileUrl || responseData.url,\n });\n },\n onError: (error) => {\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"error\",\n errorMessage: error.message,\n }\n : f,\n ),\n );\n onUploadError?.(localFile, error);\n },\n });\n } catch (error) {\n console.error(\"上传处理错误:\", error);\n setFiles((prev) =>\n prev.map((f) =>\n f.id === localFile.id\n ? {\n ...f,\n status: \"error\",\n errorMessage:\n error instanceof Error ? error.message : \"上传处理失败\",\n }\n : f,\n ),\n );\n message.error(`${localFile.name} 上传失败`);\n }\n }\n };\n\n // 删除文件\n const handleRemoveFile = (id: string) => {\n setFiles((prev) => {\n const next = prev.filter((file) => file.id !== id);\n\n onFilesChange?.(next);\n\n return next;\n });\n };\n\n // 触发文件选择\n const triggerFileSelect = () => {\n if (fileInputRef.current) {\n fileInputRef.current.click();\n }\n };\n\n // 处理拖拽事件\n const handleDragOver = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (allowUpload) {\n setIsDragOver(true);\n }\n },\n [allowUpload],\n );\n\n const handleDragLeave = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n if (allowUpload) {\n setIsDragOver(false);\n }\n },\n [allowUpload],\n );\n\n const handleDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault();\n e.stopPropagation();\n setIsDragOver(false);\n\n if (\n allowUpload &&\n e.dataTransfer.files &&\n e.dataTransfer.files.length > 0\n ) {\n handleFileSelect(Array.from(e.dataTransfer.files));\n }\n },\n [allowUpload, handleFileSelect],\n );\n\n // 处理提交\n const handleSubmit = () => {\n if (!value.trim() && files.length === 0) {\n message.warning(\"请输入消息或选择文件\");\n return;\n }\n\n const successFiles = files.filter((file) => file.status === \"success\");\n const uploadingFiles = files.filter((file) => file.status === \"uploading\");\n\n if (uploadingFiles.length > 0) {\n Modal.confirm({\n title: \"文件上传中\",\n content: `还有 ${uploadingFiles.length} 个文件正在上传,是否继续发送?`,\n okText: \"发送已完成的\",\n cancelText: \"等待全部完成\",\n onOk: () => {\n const formattedFiles = formatFilesForServer(successFiles);\n if (onSubmit) {\n onSubmit({\n text: value,\n files: formattedFiles,\n });\n }\n\n setValue(\"\");\n setFiles((prev) => prev.filter((f) => f.status !== \"success\"));\n },\n onCancel: () => {\n message.info(\"请等待文件上传完成后再发送\");\n },\n });\n } else {\n const formattedFiles = formatFilesForServer(successFiles);\n\n if (onSubmit) {\n onSubmit({\n text: value,\n files: formattedFiles,\n });\n }\n\n setValue(\"\");\n setFiles((prev) => prev.filter((f) => f.status !== \"success\"));\n }\n };\n\n // 格式化文件列表为服务端格式\n const formatFilesForServer = (fileList: LocalFile[]): ServerFile[] => {\n return fileList\n .filter((file) => file.status === \"success\" && file.response)\n .map((file) => {\n const responseData = normalizeUploadResponse(file.response);\n\n return {\n fileName: responseData.fileName || file.name,\n fileId: responseData.fileId || responseData.id || \"\",\n tempUrl:\n responseData.tempUrl || responseData.fileUrl || responseData.url || \"\",\n type: responseData.fileType || responseData.type || getExt(file),\n size: responseData.fileSize || responseData.size || file.size,\n mimeType: responseData.mimeType || file.type,\n raw: {\n ...responseData,\n },\n };\n });\n };\n\n // 处理输入框变化\n const handleInputChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => {\n const newValue = e.target.value;\n setValue(newValue);\n onChange?.(newValue);\n };\n\n // 处理回车键\n const handleKeyDown = (e: React.KeyboardEvent<HTMLTextAreaElement>) => {\n if (e.key === \"Enter\" && !e.shiftKey) {\n e.preventDefault();\n handleSubmit();\n }\n };\n\n // 渲染文件列表 - 使用新的 FileGallery 组件\n const renderFileList = () => {\n if (files.length === 0) return null;\n\n return (\n <div\n style={{\n display: \"flex\",\n flexWrap: \"wrap\",\n gap: \"8px\",\n padding: \"12px 0\",\n }}\n >\n {files.map((file) => (\n <FileGallery\n key={file.id}\n file={file}\n removable\n onRemove={handleRemoveFile}\n />\n ))}\n </div>\n );\n };\n\n const containerClass = `${styles.container} ${isDragOver ? \"drag-over\" : \"\"}`;\n const uploading = files.some((f) => f.status === \"uploading\");\n const isDisabled = disabled || uploading || loading;\n\n // 定义按钮组件(供外部 slot 函数通过 actionsComponents 使用)\n const SendButton = (props: any) => (\n <Tooltip title={loading ? \"停止生成\" : \"发送消息\"}>\n <button\n className={`${styles.iconButton} ${styles.sendButton} ${loading ? \"stop\" : \"\"}`}\n onClick={loading ? onStop : handleSubmit}\n disabled={uploading || disabled}\n aria-label={loading ? \"停止生成\" : \"发送消息\"}\n {...props}\n >\n {loading ? <LoadingOutlined spin /> : <ArrowUpOutlined />}\n </button>\n </Tooltip>\n );\n\n const UploadButton = (props: any) => (\n <Tooltip title=\"上传文件\">\n <button\n className={`${styles.iconButton} ${styles.uploadButton}`}\n onClick={triggerFileSelect}\n disabled={isDisabled}\n aria-label=\"上传文件\"\n {...props}\n >\n <PaperClipOutlined />\n </button>\n </Tooltip>\n );\n\n const ClearButton = (props: any) => (\n <Popconfirm\n title=\"确定要清空聊天记录吗?\"\n onConfirm={onClear}\n placement=\"top\"\n okText=\"确定\"\n cancelText=\"取消\"\n disabled={isDisabled}\n >\n <button\n className={`${styles.iconButton} ${styles.clearButton}`}\n disabled={isDisabled}\n aria-label=\"清空聊天记录\"\n {...props}\n >\n <ClearOutlined />\n </button>\n </Popconfirm>\n );\n\n const actionsComponents: ActionsComponents = {\n SendButton,\n UploadButton,\n ClearButton,\n };\n\n // 渲染插槽内容\n const renderSlot = (\n slot:\n | React.ReactNode\n | false\n | ((\n oriNode: React.ReactNode,\n info: { components: ActionsComponents },\n ) => React.ReactNode | false)\n | undefined,\n oriNode: React.ReactNode,\n ): React.ReactNode | null => {\n if (slot === false) return null;\n if (slot === undefined) return oriNode;\n if (typeof slot === \"function\") {\n const result = slot(oriNode, { components: actionsComponents });\n return result === false ? null : result;\n }\n return slot;\n };\n\n // 默认的后缀内容(操作按钮组) - 直接内联渲染避免组件引用变化导致 unmount/remount\n const defaultSuffix = (\n <div className={styles.buttonGroup}>\n {allowUpload && (\n <Tooltip title=\"上传文件\">\n <button\n className={`${styles.iconButton} ${styles.uploadButton}`}\n onClick={triggerFileSelect}\n disabled={isDisabled}\n aria-label=\"上传文件\"\n >\n <PaperClipOutlined />\n </button>\n </Tooltip>\n )}\n <Tooltip title={loading ? \"停止生成\" : \"发送消息\"}>\n <button\n className={`${styles.iconButton} ${styles.sendButton} ${loading ? \"stop\" : \"\"}`}\n onClick={loading ? onStop : handleSubmit}\n disabled={uploading || disabled}\n aria-label={loading ? \"停止生成\" : \"发送消息\"}\n >\n {loading ? <LoadingOutlined spin /> : <ArrowUpOutlined />}\n </button>\n </Tooltip>\n </div>\n );\n\n return (\n <div\n ref={containerRef}\n className={containerClass}\n onDragOver={allowUpload && draggable ? handleDragOver : undefined}\n onDragLeave={allowUpload && draggable ? handleDragLeave : undefined}\n onDrop={allowUpload && draggable ? handleDrop : undefined}\n >\n {/* 头部插槽 */}\n {renderSlot(header, false)}\n\n {allowUpload && files.length > 0 && renderFileList()}\n\n {/* 隐藏的原生 file input */}\n {allowUpload && (\n <input\n ref={fileInputRef}\n type=\"file\"\n multiple\n accept={allowedFileTypes.join(\",\")}\n style={{ display: \"none\" }}\n onChange={(e) => {\n if (e.target.files) {\n handleFileSelect(Array.from(e.target.files));\n e.target.value = \"\";\n }\n }}\n />\n )}\n\n <div className={styles.mainArea}>\n <div className={styles.senderWrap}>\n {/* 清除按钮 */}\n {clearBtnShow && <ClearButton />}\n\n <div className={styles.inputAndButtons}>\n {/* 前缀插槽 */}\n {renderSlot(prefix, false)}\n\n <div className={styles.textAreaWrapper}>\n <Input.TextArea\n className={styles.textArea}\n value={value}\n onChange={handleInputChange}\n onKeyDown={handleKeyDown}\n placeholder=\"请输入消息...\"\n disabled={isDisabled}\n autoSize={{ minRows: 1, maxRows: 4 }}\n style={{\n border: \"none\",\n boxShadow: \"none\",\n outline: \"none\",\n padding: 0,\n }}\n />\n </div>\n\n {/* 后缀插槽(默认显示操作按钮) */}\n {renderSlot(suffix, defaultSuffix)}\n </div>\n </div>\n\n {/* 底部插槽(默认显示提示文字) */}\n {renderSlot(\n footer,\n <div className={styles.tip}>\n 内容由AI生成,无法确保真实准确,仅供参考\n </div>,\n )}\n </div>\n </div>\n );\n});\n\nXAdkSender.displayName = 'XAdkSender';\n\nexport default XAdkSender;\n"],"mappings":"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"}
@@ -5,7 +5,7 @@ declare function useADKChat({ url, token, config, type, enabled, // ← 新增:
5
5
  strategies, onError, onMessage, onSuccess, onStream, }: DebugOptions): {
6
6
  appInfo: ChatConfig | null;
7
7
  startChat: ({ text, files, functionResponse, }: SendContent) => Promise<void>;
8
- reChat: () => void;
8
+ reChat: () => Promise<void>;
9
9
  stopChat: () => void;
10
10
  clearChat: () => void;
11
11
  suggestChat: (text: string) => void;
@@ -21,6 +21,7 @@ strategies, onError, onMessage, onSuccess, onStream, }: DebugOptions): {
21
21
  prologue: string;
22
22
  suggestions: string[];
23
23
  loading: boolean;
24
+ sessionLoading: boolean;
24
25
  messages: IMessage[];
25
26
  insertSuggestedQuestions: (suggested_questions?: string[]) => void;
26
27
  insertPrologue: (prologue: string) => void;