@ai-group/chat-sdk 3.6.1 → 3.6.3

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/useAgentGenerator.ts"],
4
- "sourcesContent": ["/* eslint-disable no-use-before-define */\n/* eslint-disable class-methods-use-this */\nimport { useState, useEffect, useMemo, useCallback, useRef } from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport { useEventStreamRequest } from '@/hooks/useEventStreamRequest';\nimport { MessageRole, MessageStatus, TextMessage, SuggestionMessage, Messages } from '@/types/XAiMessage';\nimport { type Error, ErrorCode, type SendContent, type Success, SuccessCode, type SessionData } from '@/types';\nimport { request } from '@/utils/request';\nimport { safeJsonParse } from '@/utils/index';\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from '@/constants';\nimport { fetchAppConfig, fetchSessionList, fetchSessionDetail, closeSession, updateSessionTitle } from '@/services/api';\nimport { getNodeTemplate } from '@/utils/workflowNode';\n// 图标导入\nimport documentIcon from '@/assets/document.png';\nimport completedIcon from '@/assets/completed.png';\nimport completedExpandIcon from '@/assets/completed-black.png';\nimport documentExpandIcon from '@/assets/document-black.png';\nimport qaIcon from '@/assets/qa.png';\nimport qaExpandIcon from '@/assets/qa-black.png';\nimport skillNoIcon from '@/assets/skillNo.png';\nimport skillNoExpandIcon from '@/assets/skillNo-black.png';\nimport toolIcon from '@/assets/tools.png';\nimport toolExpandIcon from '@/assets/tools-black.png';\n\n// ==================== 类型定义 ====================\nexport type ContentType = 'TEXT' | 'IMAGE' | 'FILE' | 'JSON';\n\nexport interface ImageUrl {\n url: string;\n name: string;\n}\n\nexport interface FileUrl {\n url: string;\n fileName: string;\n suffix: string;\n}\n\nexport interface Content {\n text?: string;\n imageUrl?: ImageUrl;\n fileUrl?: FileUrl;\n}\n\nexport interface ContentDef {\n description: string;\n contentType: ContentType;\n content: Content;\n}\n\nexport type Contents = ContentDef[];\n\nexport enum ActionType {\n recallKnowledgeStart = 'RECALL_KNOWLEDGE_START',\n recallKnowledgeEnd = 'RECALL_KNOWLEDGE_END',\n invokeToolStart = 'INVOKE_AGENT_TOOL_START',\n invokeToolEnd = 'INVOKE_AGENT_TOOL_END',\n reasoning = 'REASONING',\n reasoningStart = 'REASONING_START',\n reasoningEnd = 'REASONING_END',\n componentStart = 'COMPONENT_START',\n componentStream = 'COMPONENT_STREAM',\n componentEnd = 'COMPONENT_END',\n suggest = 'FOLLOW_UP',\n response = 'RESPONSE',\n finish = 'FINISHED',\n}\n\nexport enum ProcessStatus {\n start = 'START',\n end = 'END',\n}\n\nexport enum ActionAvailability {\n disabled = 'disabled',\n enabled = 'enabled',\n remote = 'remote',\n}\n\nexport type ThinkStep = any;\n\nexport interface Action {\n name: string;\n description: string;\n jsonSchema: string;\n available?: ActionAvailability;\n}\n\nexport interface BaseFields {\n textSpeed?: number;\n onChatDone?: () => void;\n}\n\nexport interface UseAgentGeneratorProps {\n url: string;\n token: string;\n config: any;\n textSpeed?: number;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onMessage?: (content: string, data: Messages) => void;\n}\n\n// ==================== 消息处理器 ====================\nclass MessageProcessor {\n private textSpeed: number;\n\n constructor(textSpeed = 60) {\n this.textSpeed = textSpeed;\n }\n\n // 获取知识图标\n private getKnowledgeIcons(knowledgeType: string) {\n return knowledgeType === 'DOCUMENT'\n ? { icon: documentIcon, expandIcon: documentExpandIcon }\n : { icon: qaIcon, expandIcon: qaExpandIcon };\n }\n\n // 获取工具图标\n private getToolIcons(toolType: string) {\n return toolType === 'SKILL'\n ? { icon: skillNoIcon, expandIcon: skillNoExpandIcon }\n : { icon: toolIcon, expandIcon: toolExpandIcon };\n }\n\n // 获取工作流图标(暂时不做区分)\n private getWorkflowIcon() {\n return { icon: skillNoIcon, expandIcon: skillNoExpandIcon };\n }\n\n // 更新工具执行事件\n private updateExecution(\n messages: Messages[],\n messageIndex: number,\n uniqueId: string,\n cost: number,\n name?: string,\n ) {\n const msg = messages[messageIndex] as TextMessage;\n if (msg?.execute) {\n const execution = msg.execute.find((item) => item.id === uniqueId);\n if (execution) {\n execution.extra.cost = cost ? (cost / 1000).toFixed(2) : 0;\n if (name) execution.name = name;\n }\n }\n }\n\n // 查找最后一个待处理的AI消息\n private findLastPendingAIMessage(messages: Messages[]): [number, TextMessage | null] {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === MessageRole.assistant\n && msg.type === 'TextMessage'\n && (msg.status === 'init' || msg.status === 'pending')) {\n return [i, msg as TextMessage];\n }\n }\n return [-1, null];\n }\n\n // 创建新的AI消息\n private createNewAIMessage(): TextMessage {\n return {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: { text: '' },\n execute: [],\n thinks: '',\n status: MessageStatus.init,\n };\n }\n\n // 确保存在待处理的AI消息\n private ensureAIMessageExists(messages: Messages[]): [Messages[], number, TextMessage] {\n const [index, existingMsg] = this.findLastPendingAIMessage(messages);\n\n if (index !== -1 && existingMsg) {\n return [[...messages], index, { ...existingMsg }];\n }\n\n const newMessage = this.createNewAIMessage();\n const newMessages = [...messages, newMessage];\n return [newMessages, newMessages.length - 1, newMessage];\n }\n\n // 处理建议\n handleSuggestion(messages: Messages[], data: any): Messages[] {\n const { content } = data;\n const newMessages = [...messages];\n const suggestIndex = newMessages.findIndex((item) => item.type === 'SuggestionMessage');\n\n if (suggestIndex === -1) {\n const newSuggestion: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [{ key: uuidV4(), description: content }],\n };\n newMessages.push(newSuggestion);\n } else {\n const suggestion = newMessages[suggestIndex] as SuggestionMessage;\n suggestion?.content?.push({\n key: uuidV4(),\n description: content,\n });\n }\n\n return newMessages;\n }\n\n // 处理思考过程\n handleReasoning(messages: Messages[], data: any): Messages[] {\n const { content } = data;\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n\n // 确保消息状态正确\n const updatedMsg: Messages = {\n ...aiMsg,\n thinks: (aiMsg.thinks || '') + content,\n status: aiMsg.status === MessageStatus.init ? MessageStatus.pending : aiMsg.status,\n };\n\n const updatedMessages = [...newMessages];\n updatedMessages[index] = updatedMsg;\n\n return updatedMessages;\n }\n\n // 处理思考过程结束\n handleReasoningEnd(messages: Messages[]): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n\n // 确保消息状态正确\n const updatedMsg: Messages = {\n ...aiMsg,\n thinks: `${aiMsg.thinks || ''}\\n`,\n status: aiMsg.status === MessageStatus.init ? MessageStatus.pending : aiMsg.status,\n };\n\n const updatedMessages = [...newMessages];\n updatedMessages[index] = updatedMsg;\n\n return updatedMessages;\n }\n\n // 处理知识库调用开始\n handleRecallKnowledgeStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { args } = data?.data || {};\n\n aiMsg.execute = aiMsg.execute || [];\n\n aiMsg.execute.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '开始搜索知识库',\n arguments: args,\n extra: {\n ...data,\n icon: documentIcon,\n expandIcon: documentExpandIcon,\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理知识库调用结束\n handleRecallKnowledgeEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n if (index === -1) return messages;\n const { uniqueId = uuidV4(), cost } = data || {};\n\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, uniqueId, cost, '已搜索知识库');\n return newMessages;\n }\n\n // 处理工具调用开始\n handleInvokeToolStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { args, toolType } = data?.data || {};\n\n aiMsg.execute = aiMsg.execute || [];\n const icons = this.getToolIcons(toolType);\n\n aiMsg.execute.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: toolType === 'SKILL' ? '已调用工作流' : '已调用工具',\n arguments: args,\n extra: {\n ...data,\n ...icons,\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工具调用结束\n handleInvokeToolEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { toolType } = data?.data || {};\n if (index === -1) return messages;\n\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, uniqueId, data.cost, toolType === 'SKILL' ? '已调用工作流组件' : '已调用工具');\n return newMessages;\n }\n\n // 处理工作流组件开始\n handleComponentStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { content } = data || {};\n const { nodeId, args, componentType } = content || {};\n const { name } = getNodeTemplate(componentType);\n aiMsg?.execute?.push({\n id: nodeId || uuidV4(),\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: name ? `开始调用${name}组件` : '开始调用工作流组件',\n arguments: args,\n extra: {\n ...data,\n ...this.getWorkflowIcon(),\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工作流组件流消息\n handleComponentStream(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { nodeId = uuidV4, content } = data || {};\n const { processData } = content || {};\n aiMsg.raw = data.raw;\n aiMsg.stepContent = aiMsg.stepContent || [];\n aiMsg.stepContent.push({\n id: nodeId,\n content: processData,\n });\n\n // 消息状态改为接收中\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工作流组件结束\n handleComponentEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { content } = data || {};\n const { nodeId, componentType } = content || {};\n const { name } = getNodeTemplate(componentType);\n if (index === -1) return messages;\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, nodeId, data.cost, name ? `已调用完成${name}组件` : '已调用工作流组件');\n return newMessages;\n }\n\n // 处理响应正文\n handleResponse(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { contentType, content, success, errorMsg } = data;\n if (success) {\n aiMsg.raw = data.raw;\n // 消息状态改为接收中\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n // 文本类型数据\n if (contentType === 'TEXT' && 'text' in aiMsg.content) {\n aiMsg.content.text += content;\n }\n\n // JSON 格式数据\n if (contentType === 'JSON') {\n aiMsg.content.text += JSON.stringify(content);\n }\n } else {\n aiMsg.status = MessageStatus.failed;\n aiMsg.content.text = `<span style=\"color: red;\">❌ ${errorMsg}</span>`;\n }\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理完成\n handleFinish(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { data: { uniqueId = uuidV4() } = {}, cost, needExecuteDetail } = data || {};\n if (index === -1) return messages;\n\n const newMessages = [...messages];\n const msg = newMessages[index] as TextMessage;\n if (needExecuteDetail) {\n msg.execute = msg.execute || [];\n msg.execute.push({\n id: uniqueId || uuidV4(),\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n extra: {\n ...data,\n cost: cost ? (cost / 1000).toFixed(2) : 0,\n icon: completedIcon,\n expandIcon: completedExpandIcon,\n },\n });\n }\n\n msg.status = MessageStatus.done;\n return newMessages;\n }\n\n // 处理响应数据\n processResponse(messages: Messages[], responseData: any): Messages[] {\n if (!responseData?.data?.outputs) return messages;\n let response = responseData.data.outputs;\n if (typeof response === 'string') {\n response = safeJsonParse(response, {\n action: ActionType.response,\n data: {\n contentType: 'TEXT',\n content: '解析响应数据时出错,请重试',\n success: false,\n errorMsg: '响应数据格式错误',\n },\n });\n }\n\n const { action, data = {} } = response;\n\n switch (action) {\n case ActionType.suggest:\n return this.handleSuggestion(messages, data);\n\n case ActionType.reasoning:\n return this.handleReasoning(messages, data);\n\n case ActionType.reasoningEnd:\n return this.handleReasoningEnd(messages);\n\n case ActionType.componentStart:\n return this.handleComponentStart(messages, data);\n\n case ActionType.componentStream:\n return this.handleComponentStream(messages, data);\n\n case ActionType.componentEnd:\n return this.handleComponentEnd(messages, data);\n\n case ActionType.recallKnowledgeStart:\n return this.handleRecallKnowledgeStart(messages, data);\n\n case ActionType.recallKnowledgeEnd:\n return this.handleRecallKnowledgeEnd(messages, data);\n\n case ActionType.invokeToolStart:\n return this.handleInvokeToolStart(messages, data);\n\n case ActionType.invokeToolEnd:\n return this.handleInvokeToolEnd(messages, data);\n\n case ActionType.response:\n return this.handleResponse(messages, data);\n\n case ActionType.finish:\n return this.handleFinish(messages, data);\n\n default:\n return messages;\n }\n }\n}\n\nconst useAgentGenerator = (params: UseAgentGeneratorProps) => {\n const {\n url,\n token,\n config,\n onError,\n onMessage,\n onSuccess,\n textSpeed = 55,\n ...rest\n } = params;\n\n // 聊天记录\n const [messages, setMessages] = useState<Messages[]>([]);\n // 聊天记录分页设置\n // const [messagePagination, setMessagePagination] = useState({ total: 0, pageNum: 1, pageSize: 999 });\n // 会话记录\n const [sessionList, setSessionList] = useState<SessionData[]>([]);\n // 会话请求是否加载中\n // const [sessionLoading, setSessionLoading] = useState<boolean>(false);\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({ total: 0, pageNum: 1, pageSize: SESSION_PAGE_SIZE });\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>('');\n // 应用 配置\n const [appInfo, setAppInfo] = useState<any>(null);\n // 请求 配置\n const requestInfo = useRef<{ requestId?: string; sensitiveWords?: string[] }>({});\n\n const { appNo } = config || {};\n\n // 消息处理器\n const messageProcessor = useMemo(() => new MessageProcessor(textSpeed), [textSpeed]);\n\n // 初始化时获取配置\n useEffect(() => {\n if (url && config) {\n const initConfig = async () => {\n try {\n const { data, result } = await fetchAppConfig({ url, ...config });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n\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 }\n };\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url, config]);\n\n const { start, loading, responseData, stop } = useEventStreamRequest({\n streaming: true,\n textSpeed,\n onClose: () => {\n // close的时机有可能在setMessages之前,所以需要延迟一下\n setTimeout(() => {\n if (requestInfo.current?.sensitiveWords && requestInfo.current?.requestId) {\n request.post(url);\n }\n }, 500);\n },\n onOpen(res) {\n console.log('res-----open:', res);\n },\n });\n\n // 数据流处理\n useEffect(() => {\n if (!responseData) return;\n\n setMessages((prev) => messageProcessor.processResponse(prev, responseData));\n }, [responseData, messageProcessor]);\n\n // 添加对话(非交互触发)\n const setMessage = useCallback(async (messageType: string, content: any) => {\n switch (messageType) {\n case 'prologue': {\n setMessages((prev) => {\n const prologueIndex = prev.findIndex((item) => item.extra?.prologue);\n\n if (prologueIndex === -1) {\n const newMessage: TextMessage = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.assistant,\n status: MessageStatus.done,\n content: { text: content },\n extra: { prologue: true, noFooter: true },\n };\n return [newMessage, ...prev];\n }\n\n return prev.map((item) => (item.extra?.prologue && item.content && 'text' in item.content\n ? { ...item, content: { text: content } } as any\n : item));\n });\n break;\n }\n\n case 'suggest': {\n setMessages((prev) => {\n const suggestIndex = prev.findIndex((item) => item.type === 'SuggestionMessage');\n const prologueIndex = prev.findIndex((item) => item.extra?.prologue);\n\n const newSuggestion: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content,\n };\n\n if (suggestIndex === -1) {\n const newMessages = [...prev];\n const insertIndex = prologueIndex === -1 ? 0 : prologueIndex + 1;\n newMessages.splice(insertIndex, 0, newSuggestion);\n return newMessages;\n }\n\n return prev.map((item) => (item.type === 'SuggestionMessage'\n ? { ...item, content }\n : item));\n });\n break;\n }\n\n default:\n console.warn(`Unknown message type: ${messageType}`);\n }\n }, []);\n\n // 简单对话\n const chat = useCallback(async (content: SendContent, extra?: any, insert = true) => {\n if (insert) {\n const newMessage: TextMessage = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.user,\n status: MessageStatus.done,\n extra,\n content,\n };\n\n setMessages((prev) => {\n const newMessages = prev.filter((item) => item.type !== 'SuggestionMessage');\n newMessages.push(newMessage);\n return newMessages;\n });\n }\n\n const requestBody: any = {\n appParams: {\n inputs_msg: content.text,\n },\n sessionId: currentSessionId,\n };\n\n start(\n `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`,\n requestBody,\n {\n Authorization: `Bearer ${token}`,\n },\n );\n }, [appNo, currentSessionId, start, token, url]);\n\n // 重新生成方法\n const reChat = useCallback(() => {\n setMessages((prev) => {\n const newMessages = [...prev];\n\n // 删除最新 AI 消息\n const lastAIIndex = newMessages?.findLastIndex(\n (m) => m.role === MessageRole.assistant && m.type === 'TextMessage'\n );\n if (lastAIIndex !== -1) {\n newMessages.splice(lastAIIndex, 1);\n }\n\n // 删除建议消息\n const suggestIndex = newMessages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestIndex !== -1) {\n newMessages.splice(suggestIndex, 1);\n }\n\n // 找到最后一条用户消息重新发送\n const lastUserMsg = newMessages.findLast(\n (m) => m.role === MessageRole.user && m.type === 'TextMessage',\n ) as TextMessage | undefined;\n\n if (lastUserMsg?.content?.text) {\n setTimeout(() => {\n chat(lastUserMsg.content, lastUserMsg.extra, false);\n }, 0);\n }\n\n return newMessages;\n });\n }, [chat]);\n\n // 停止对话\n const stopChat = () => {\n stop();\n setMessages((prev) => prev.map((m) => {\n // 所有进行中的消息变更为结束\n if (m.status === MessageStatus.pending || m.status === MessageStatus.init) {\n const newMsg = { ...m, status: MessageStatus.done };\n if (m.type === 'TextMessage' && m.status === MessageStatus.init) {\n (newMsg as TextMessage).content.text = '<span style=\"color: #cbcbcb;\">用户已取消</span>';\n }\n return newMsg;\n }\n return m;\n }));\n };\n\n // 初始化历史记录\n const formatMessages = (data: any, init = false) => {\n setMessages((prev) => {\n const initMessagesList: Messages[] = [];\n data.forEach((item: any) => {\n const { content, messageTime, role } = item || {};\n\n if (role === 'USER') {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: messageTime,\n role: MessageRole.user,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n };\n\n initMessagesList.push(newMessage);\n } else if (role === 'AI') {\n const newMessage: TextMessage = {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: messageTime,\n role: MessageRole.assistant,\n content: { text: content },\n execute: [],\n status: MessageStatus.done,\n isLike: item.isLike,\n raw: item.raw,\n };\n\n initMessagesList.push(newMessage);\n }\n });\n\n if (init) {\n return [...initMessagesList];\n }\n return [...prev, ...initMessagesList];\n });\n };\n\n // 初始化开场白\n const initPrologue = async () => {\n const { onboardingInfo = {} } = appInfo;\n // eslint-disable-next-line camelcase\n const { suggested_questions = [], prologue = '' } = onboardingInfo || {};\n\n // 初始化开场白\n if (prologue) {\n setMessage('prologue', prologue);\n } else {\n setMessages((prev) => prev.filter((item) => !item.extra?.prologue));\n }\n\n // 过滤空内容\n const formatSuggests = suggested_questions.filter((item: string) => item);\n\n if (formatSuggests.length > 0) {\n const suggestMessages = formatSuggests.map((item: string, index: number) => ({\n key: index + 1,\n description: item,\n }));\n // 页面为空时展示开场白预设问题\n const hasMessages = messages.some((item) => (!item.extra?.prologue && item.type !== 'SuggestionMessage'));\n if (!hasMessages) {\n setMessage('suggest', suggestMessages);\n }\n } else {\n setMessages((prev) => prev.filter((item) => !(item.type === 'SuggestionMessage')));\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n const { data = [], pagination, result } = await fetchSessionList({\n url,\n appNo,\n token,\n pageNum: sessionPagination.pageNum,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || '新对话',\n timestamp: new Date(item.startTime).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({ pageNum: sessionPagination.pageNum, pageSize: sessionPagination.pageSize, total: pagination?.total || 0 });\n const { sessionId } = data?.[0];\n fetchDetail && setCurrentSession(sessionId);\n } else {\n // 页面报错 初始化\n setSessionList([]);\n setCurrentSessionId(uuidV4());\n initPrologue();\n }\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: '初始化聊天记录成功',\n });\n } else {\n initPrologue();\n }\n } catch {\n //\n }\n };\n\n // 设置当前会话详情\n const setCurrentSession = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n const sessionsData = data?.reduce((acc: any[], cur) => {\n const sessionMessages = Array.isArray(cur.sessionMessages) ? cur.sessionMessages : [];\n const msgs = sessionMessages.map((msg: any) => ({\n ...msg,\n raw: cur,\n isLike: cur?.isLike,\n }));\n return [...acc, ...msgs];\n }, []);\n\n if (sessionsData.length > 0) {\n formatMessages(sessionsData, true);\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(uuidV4());\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations(false);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n createNewChat();\n }\n }\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations(false);\n }\n };\n\n // 生成新对话\n const createNewChat = () => {\n stopChat(); // 停止聊天\n setMessages([]); // 清空所有消息\n initPrologue(); // 初始化开场白和预置问题\n setCurrentSessionId(uuidV4()); // 设置会话 id\n };\n\n // 初始化应用\n useEffect(() => {\n if (appInfo) {\n // 初始化历史数据\n initAppConversations(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [appInfo]);\n\n return {\n appInfo,\n messages,\n loading,\n content: responseData.content,\n sessionList,\n currentSessionId,\n sessionPagination,\n initAppConversations,\n reChat,\n chat,\n createNewChat,\n setCurrentSessionId,\n setCurrentSession,\n updateSession,\n deleteSession,\n setMessage,\n setMessages,\n stopChat,\n initPrologue,\n };\n};\n\nexport default useAgentGenerator;\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/* eslint-disable no-use-before-define */\n/* eslint-disable class-methods-use-this */\nimport { useState, useEffect, useMemo, useCallback, useRef } from 'react';\nimport { v4 as uuidV4 } from 'uuid';\nimport { useEventStreamRequest } from '@/hooks/useEventStreamRequest';\nimport { MessageRole, MessageStatus, TextMessage, SuggestionMessage, Messages } from '@/types/XAiMessage';\nimport { type Error, ErrorCode, type SendContent, type Success, SuccessCode, type SessionData } from '@/types';\nimport { request } from '@/utils/request';\nimport { safeJsonParse } from '@/utils/index';\nimport { SESSION_PAGE_SIZE, API_SUCCESS_CODE } from '@/constants';\nimport { fetchAppConfig, fetchSessionList, fetchSessionDetail, closeSession, updateSessionTitle } from '@/services/api';\nimport { getNodeTemplate } from '@/utils/workflowNode';\n// 图标导入\nimport documentIcon from '@/assets/document.png';\nimport completedIcon from '@/assets/completed.png';\nimport completedExpandIcon from '@/assets/completed-black.png';\nimport documentExpandIcon from '@/assets/document-black.png';\nimport qaIcon from '@/assets/qa.png';\nimport qaExpandIcon from '@/assets/qa-black.png';\nimport skillNoIcon from '@/assets/skillNo.png';\nimport skillNoExpandIcon from '@/assets/skillNo-black.png';\nimport toolIcon from '@/assets/tools.png';\nimport toolExpandIcon from '@/assets/tools-black.png';\n\n// ==================== 类型定义 ====================\nexport type ContentType = 'TEXT' | 'IMAGE' | 'FILE' | 'JSON';\n\nexport interface ImageUrl {\n url: string;\n name: string;\n}\n\nexport interface FileUrl {\n url: string;\n fileName: string;\n suffix: string;\n}\n\nexport interface Content {\n text?: string;\n imageUrl?: ImageUrl;\n fileUrl?: FileUrl;\n}\n\nexport interface ContentDef {\n description: string;\n contentType: ContentType;\n content: Content;\n}\n\nexport type Contents = ContentDef[];\n\nexport enum ActionType {\n recallKnowledgeStart = 'RECALL_KNOWLEDGE_START',\n recallKnowledgeEnd = 'RECALL_KNOWLEDGE_END',\n invokeToolStart = 'INVOKE_AGENT_TOOL_START',\n invokeToolEnd = 'INVOKE_AGENT_TOOL_END',\n reasoning = 'REASONING',\n reasoningStart = 'REASONING_START',\n reasoningEnd = 'REASONING_END',\n componentStart = 'COMPONENT_START',\n componentStream = 'COMPONENT_STREAM',\n componentEnd = 'COMPONENT_END',\n suggest = 'FOLLOW_UP',\n response = 'RESPONSE',\n finish = 'FINISHED',\n}\n\nexport enum ProcessStatus {\n start = 'START',\n end = 'END',\n}\n\nexport enum ActionAvailability {\n disabled = 'disabled',\n enabled = 'enabled',\n remote = 'remote',\n}\n\nexport type ThinkStep = any;\n\nexport interface Action {\n name: string;\n description: string;\n jsonSchema: string;\n available?: ActionAvailability;\n}\n\nexport interface BaseFields {\n textSpeed?: number;\n onChatDone?: () => void;\n}\n\nexport interface UseAgentGeneratorProps {\n url: string;\n token: string;\n config: any;\n textSpeed?: number;\n onError?: (error: Error) => void;\n onSuccess?: (data: Success) => void;\n onMessage?: (content: string, data: Messages) => void;\n}\n\n// ==================== 消息处理器 ====================\nclass MessageProcessor {\n private textSpeed: number;\n\n constructor(textSpeed = 60) {\n this.textSpeed = textSpeed;\n }\n\n // 获取知识图标\n private getKnowledgeIcons(knowledgeType: string) {\n return knowledgeType === 'DOCUMENT'\n ? { icon: documentIcon, expandIcon: documentExpandIcon }\n : { icon: qaIcon, expandIcon: qaExpandIcon };\n }\n\n // 获取工具图标\n private getToolIcons(toolType: string) {\n return toolType === 'SKILL'\n ? { icon: skillNoIcon, expandIcon: skillNoExpandIcon }\n : { icon: toolIcon, expandIcon: toolExpandIcon };\n }\n\n // 获取工作流图标(暂时不做区分)\n private getWorkflowIcon() {\n return { icon: skillNoIcon, expandIcon: skillNoExpandIcon };\n }\n\n // 更新工具执行事件\n private updateExecution(\n messages: Messages[],\n messageIndex: number,\n uniqueId: string,\n cost: number,\n name?: string,\n ) {\n const msg = messages[messageIndex] as TextMessage;\n if (msg?.execute) {\n const execution = msg.execute.find((item) => item.id === uniqueId);\n if (execution) {\n execution.extra.cost = cost ? (cost / 1000).toFixed(2) : 0;\n if (name) execution.name = name;\n }\n }\n }\n\n // 查找最后一个待处理的AI消息\n private findLastPendingAIMessage(messages: Messages[]): [number, TextMessage | null] {\n for (let i = messages.length - 1; i >= 0; i--) {\n const msg = messages[i];\n if (msg.role === MessageRole.assistant\n && msg.type === 'TextMessage'\n && (msg.status === 'init' || msg.status === 'pending')) {\n return [i, msg as TextMessage];\n }\n }\n return [-1, null];\n }\n\n // 创建新的AI消息\n private createNewAIMessage(): TextMessage {\n return {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: new Date(),\n role: MessageRole.assistant,\n content: { text: '' },\n execute: [],\n thinks: '',\n status: MessageStatus.init,\n };\n }\n\n // 确保存在待处理的AI消息\n private ensureAIMessageExists(messages: Messages[]): [Messages[], number, TextMessage] {\n const [index, existingMsg] = this.findLastPendingAIMessage(messages);\n\n if (index !== -1 && existingMsg) {\n return [[...messages], index, { ...existingMsg }];\n }\n\n const newMessage = this.createNewAIMessage();\n const newMessages = [...messages, newMessage];\n return [newMessages, newMessages.length - 1, newMessage];\n }\n\n // 处理建议\n handleSuggestion(messages: Messages[], data: any): Messages[] {\n const { content } = data;\n const newMessages = [...messages];\n const suggestIndex = newMessages.findIndex((item) => item.type === 'SuggestionMessage');\n\n if (suggestIndex === -1) {\n const newSuggestion: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content: [{ key: uuidV4(), description: content }],\n };\n newMessages.push(newSuggestion);\n } else {\n const suggestion = newMessages[suggestIndex] as SuggestionMessage;\n suggestion?.content?.push({\n key: uuidV4(),\n description: content,\n });\n }\n\n return newMessages;\n }\n\n // 处理思考过程\n handleReasoning(messages: Messages[], data: any): Messages[] {\n const { content } = data;\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n\n // 确保消息状态正确\n const updatedMsg: Messages = {\n ...aiMsg,\n thinks: (aiMsg.thinks || '') + content,\n status: aiMsg.status === MessageStatus.init ? MessageStatus.pending : aiMsg.status,\n };\n\n const updatedMessages = [...newMessages];\n updatedMessages[index] = updatedMsg;\n\n return updatedMessages;\n }\n\n // 处理思考过程结束\n handleReasoningEnd(messages: Messages[]): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n\n // 确保消息状态正确\n const updatedMsg: Messages = {\n ...aiMsg,\n thinks: `${aiMsg.thinks || ''}\\n`,\n status: aiMsg.status === MessageStatus.init ? MessageStatus.pending : aiMsg.status,\n };\n\n const updatedMessages = [...newMessages];\n updatedMessages[index] = updatedMsg;\n\n return updatedMessages;\n }\n\n // 处理知识库调用开始\n handleRecallKnowledgeStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { args } = data?.data || {};\n\n aiMsg.execute = aiMsg.execute || [];\n\n aiMsg.execute.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '开始搜索知识库',\n arguments: args,\n extra: {\n ...data,\n icon: documentIcon,\n expandIcon: documentExpandIcon,\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理知识库调用结束\n handleRecallKnowledgeEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n if (index === -1) return messages;\n const { uniqueId = uuidV4(), cost } = data || {};\n\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, uniqueId, cost, '已搜索知识库');\n return newMessages;\n }\n\n // 处理工具调用开始\n handleInvokeToolStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { args, toolType } = data?.data || {};\n\n aiMsg.execute = aiMsg.execute || [];\n const icons = this.getToolIcons(toolType);\n\n aiMsg.execute.push({\n id: uniqueId,\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: toolType === 'SKILL' ? '已调用工作流' : '已调用工具',\n arguments: args,\n extra: {\n ...data,\n ...icons,\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工具调用结束\n handleInvokeToolEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { uniqueId = uuidV4() } = data || {};\n const { toolType } = data?.data || {};\n if (index === -1) return messages;\n\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, uniqueId, data.cost, toolType === 'SKILL' ? '已调用工作流组件' : '已调用工具');\n return newMessages;\n }\n\n // 处理工作流组件开始\n handleComponentStart(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { content } = data || {};\n const { nodeId, args, componentType } = content || {};\n const { name } = getNodeTemplate(componentType);\n aiMsg?.execute?.push({\n id: nodeId || uuidV4(),\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: name ? `开始调用${name}组件` : '开始调用工作流组件',\n arguments: args,\n extra: {\n ...data,\n ...this.getWorkflowIcon(),\n },\n });\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工作流组件流消息\n handleComponentStream(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { nodeId = uuidV4, content } = data || {};\n const { processData } = content || {};\n aiMsg.raw = data.raw;\n aiMsg.stepContent = aiMsg.stepContent || [];\n aiMsg.stepContent.push({\n id: nodeId,\n content: processData,\n });\n\n // 消息状态改为接收中\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理工作流组件结束\n handleComponentEnd(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { content } = data || {};\n const { nodeId, componentType } = content || {};\n const { name } = getNodeTemplate(componentType);\n if (index === -1) return messages;\n const newMessages = [...messages];\n this.updateExecution(newMessages, index, nodeId, data.cost, name ? `已调用完成${name}组件` : '已调用工作流组件');\n return newMessages;\n }\n\n // 处理响应正文\n handleResponse(messages: Messages[], data: any): Messages[] {\n const [newMessages, index, aiMsg] = this.ensureAIMessageExists(messages);\n const { contentType, content, success, errorMsg } = data;\n if (success) {\n aiMsg.raw = data.raw;\n // 消息状态改为接收中\n if (aiMsg.status === MessageStatus.init) {\n aiMsg.status = MessageStatus.pending;\n }\n // 文本类型数据\n if (contentType === 'TEXT' && 'text' in aiMsg.content) {\n aiMsg.content.text += content;\n }\n\n // JSON 格式数据\n if (contentType === 'JSON') {\n aiMsg.content.text += JSON.stringify(content);\n }\n } else {\n aiMsg.status = MessageStatus.failed;\n aiMsg.content.text = `<span style=\"color: red;\">❌ ${errorMsg}</span>`;\n }\n\n newMessages[index] = aiMsg;\n return newMessages;\n }\n\n // 处理完成\n handleFinish(messages: Messages[], data: any): Messages[] {\n const [index, _aiMsg] = this.findLastPendingAIMessage(messages);\n const { data: { uniqueId = uuidV4() } = {}, cost, needExecuteDetail } = data || {};\n if (index === -1) return messages;\n\n const newMessages = [...messages];\n const msg = newMessages[index] as TextMessage;\n if (needExecuteDetail) {\n msg.execute = msg.execute || [];\n msg.execute.push({\n id: uniqueId || uuidV4(),\n createdAt: new Date(),\n type: 'ActionExecutionMessage',\n name: '运行完毕',\n extra: {\n ...data,\n cost: cost ? (cost / 1000).toFixed(2) : 0,\n icon: completedIcon,\n expandIcon: completedExpandIcon,\n },\n });\n }\n\n msg.status = MessageStatus.done;\n return newMessages;\n }\n\n // 处理响应数据\n processResponse(messages: Messages[], responseData: any): Messages[] {\n if (!responseData?.data?.outputs) return messages;\n let response = responseData.data.outputs;\n if (typeof response === 'string') {\n response = safeJsonParse(response, {\n action: ActionType.response,\n data: {\n contentType: 'TEXT',\n content: '解析响应数据时出错,请重试',\n success: false,\n errorMsg: '响应数据格式错误',\n },\n });\n }\n\n const { action, data = {} } = response;\n\n switch (action) {\n case ActionType.suggest:\n return this.handleSuggestion(messages, data);\n\n case ActionType.reasoning:\n return this.handleReasoning(messages, data);\n\n case ActionType.reasoningEnd:\n return this.handleReasoningEnd(messages);\n\n case ActionType.componentStart:\n return this.handleComponentStart(messages, data);\n\n case ActionType.componentStream:\n return this.handleComponentStream(messages, data);\n\n case ActionType.componentEnd:\n return this.handleComponentEnd(messages, data);\n\n case ActionType.recallKnowledgeStart:\n return this.handleRecallKnowledgeStart(messages, data);\n\n case ActionType.recallKnowledgeEnd:\n return this.handleRecallKnowledgeEnd(messages, data);\n\n case ActionType.invokeToolStart:\n return this.handleInvokeToolStart(messages, data);\n\n case ActionType.invokeToolEnd:\n return this.handleInvokeToolEnd(messages, data);\n\n case ActionType.response:\n return this.handleResponse(messages, data);\n\n case ActionType.finish:\n return this.handleFinish(messages, data);\n\n default:\n return messages;\n }\n }\n}\n\nconst useAgentGenerator = (params: UseAgentGeneratorProps) => {\n const {\n url,\n token,\n config,\n onError,\n onMessage,\n onSuccess,\n textSpeed = 55,\n ...rest\n } = params;\n\n // 聊天记录\n const [messages, setMessages] = useState<Messages[]>([]);\n // 聊天记录分页设置\n // const [messagePagination, setMessagePagination] = useState({ total: 0, pageNum: 1, pageSize: 999 });\n // 会话记录\n const [sessionList, setSessionList] = useState<SessionData[]>([]);\n // 会话请求是否加载中\n // const [sessionLoading, setSessionLoading] = useState<boolean>(false);\n // 会话分页设置\n const [sessionPagination, setSessionPagination] = useState({ total: 0, pageNum: 1, pageSize: SESSION_PAGE_SIZE });\n // 当前会话\n const [currentSessionId, setCurrentSessionId] = useState<string>('');\n // 应用 配置\n const [appInfo, setAppInfo] = useState<any>(null);\n // 请求 配置\n const requestInfo = useRef<{ requestId?: string; sensitiveWords?: string[] }>({});\n\n const { appNo } = config || {};\n\n // 消息处理器\n const messageProcessor = useMemo(() => new MessageProcessor(textSpeed), [textSpeed]);\n\n // 初始化时获取配置\n useEffect(() => {\n if (url && config) {\n const initConfig = async () => {\n try {\n const { data, result } = await fetchAppConfig({ url, ...config });\n if (result.code === API_SUCCESS_CODE) {\n setAppInfo(data);\n\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_CONFIG_INIT_SUCCESS,\n message: '初始化配置成功',\n });\n } else {\n onError?.({\n code: result.code || 'UNKNOWN_ERROR',\n message: result.message || '获取应用配置失败',\n raw: result,\n });\n }\n } catch (error) {\n onError?.({\n code: ErrorCode.NETWORK_ERROR,\n message: '获取应用配置失败',\n });\n }\n };\n initConfig();\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [url, config]);\n\n const { start, loading, responseData, stop } = useEventStreamRequest({\n streaming: true,\n textSpeed,\n onClose: () => {\n // close的时机有可能在setMessages之前,所以需要延迟一下\n setTimeout(() => {\n if (requestInfo.current?.sensitiveWords && requestInfo.current?.requestId) {\n request.post(url);\n }\n }, 500);\n },\n onOpen(res) {\n console.log('res-----open:', res);\n },\n });\n\n // 数据流处理\n useEffect(() => {\n if (!responseData) return;\n\n setMessages((prev) => messageProcessor.processResponse(prev, responseData));\n }, [responseData, messageProcessor]);\n\n // 添加对话(非交互触发)\n const setMessage = useCallback(async (messageType: string, content: any) => {\n switch (messageType) {\n case 'prologue': {\n setMessages((prev) => {\n const prologueIndex = prev.findIndex((item) => item.extra?.prologue);\n\n if (prologueIndex === -1) {\n const newMessage: TextMessage = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.assistant,\n status: MessageStatus.done,\n content: { text: content },\n extra: { prologue: true, noFooter: true },\n };\n return [newMessage, ...prev];\n }\n\n return prev.map((item) => (item.extra?.prologue && item.content && 'text' in item.content\n ? { ...item, content: { text: content } } as any\n : item));\n });\n break;\n }\n\n case 'suggest': {\n setMessages((prev) => {\n const suggestIndex = prev.findIndex((item) => item.type === 'SuggestionMessage');\n const prologueIndex = prev.findIndex((item) => item.extra?.prologue);\n\n const newSuggestion: SuggestionMessage = {\n id: uuidV4(),\n type: 'SuggestionMessage',\n createdAt: new Date(),\n status: MessageStatus.done,\n role: MessageRole.suggestion,\n content,\n };\n\n if (suggestIndex === -1) {\n const newMessages = [...prev];\n const insertIndex = prologueIndex === -1 ? 0 : prologueIndex + 1;\n newMessages.splice(insertIndex, 0, newSuggestion);\n return newMessages;\n }\n\n return prev.map((item) => (item.type === 'SuggestionMessage'\n ? { ...item, content }\n : item));\n });\n break;\n }\n\n default:\n console.warn(`Unknown message type: ${messageType}`);\n }\n }, []);\n\n // 简单对话\n const chat = useCallback(async (content: SendContent, extra?: any, insert = true) => {\n if (insert) {\n const newMessage: TextMessage = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: new Date(),\n role: MessageRole.user,\n status: MessageStatus.done,\n extra,\n content,\n };\n\n setMessages((prev) => {\n const newMessages = prev.filter((item) => item.type !== 'SuggestionMessage');\n newMessages.push(newMessage);\n return newMessages;\n });\n }\n\n const requestBody: any = {\n appParams: {\n inputs_msg: content.text,\n },\n sessionId: currentSessionId,\n };\n\n start(\n `${url}/api/gateway-web/openApi/v1/aizt/app/${appNo}/sendMsgStreaming`,\n requestBody,\n {\n Authorization: `Bearer ${token}`,\n },\n );\n }, [appNo, currentSessionId, start, token, url]);\n\n // 重新生成方法\n const reChat = useCallback(() => {\n setMessages((prev) => {\n const newMessages = [...prev];\n\n // 删除最新 AI 消息\n const lastAIIndex = newMessages?.findLastIndex(\n (m) => m.role === MessageRole.assistant && m.type === 'TextMessage'\n );\n if (lastAIIndex !== -1) {\n newMessages.splice(lastAIIndex, 1);\n }\n\n // 删除建议消息\n const suggestIndex = newMessages.findIndex((item) => item.type === 'SuggestionMessage');\n if (suggestIndex !== -1) {\n newMessages.splice(suggestIndex, 1);\n }\n\n // 找到最后一条用户消息重新发送\n const lastUserMsg = newMessages.findLast(\n (m) => m.role === MessageRole.user && m.type === 'TextMessage',\n ) as TextMessage | undefined;\n\n if (lastUserMsg?.content?.text) {\n setTimeout(() => {\n chat(lastUserMsg.content, lastUserMsg.extra, false);\n }, 0);\n }\n\n return newMessages;\n });\n }, [chat]);\n\n // 停止对话\n const stopChat = () => {\n stop();\n setMessages((prev) => prev.map((m) => {\n // 所有进行中的消息变更为结束\n if (m.status === MessageStatus.pending || m.status === MessageStatus.init) {\n const newMsg = { ...m, status: MessageStatus.done };\n if (m.type === 'TextMessage' && m.status === MessageStatus.init) {\n (newMsg as TextMessage).content.text = '<span style=\"color: #cbcbcb;\">用户已取消</span>';\n }\n return newMsg;\n }\n return m;\n }));\n };\n\n // 初始化历史记录\n const formatMessages = (data: any, init = false) => {\n setMessages((prev) => {\n const initMessagesList: Messages[] = [];\n data.forEach((item: any) => {\n const { content, messageTime, role } = item || {};\n\n if (role === 'USER') {\n const newMessage: Messages = {\n type: 'TextMessage',\n id: uuidV4(),\n createdAt: messageTime,\n role: MessageRole.user,\n status: MessageStatus.done,\n content: {\n text: content,\n },\n };\n\n initMessagesList.push(newMessage);\n } else if (role === 'AI') {\n const newMessage: TextMessage = {\n id: uuidV4(),\n type: 'TextMessage',\n createdAt: messageTime,\n role: MessageRole.assistant,\n content: { text: content },\n execute: [],\n status: MessageStatus.done,\n isLike: item.isLike,\n raw: item.raw,\n };\n\n initMessagesList.push(newMessage);\n }\n });\n\n if (init) {\n return [...initMessagesList];\n }\n return [...prev, ...initMessagesList];\n });\n };\n\n // 初始化开场白\n const initPrologue = async () => {\n const { onboardingInfo = {} } = appInfo;\n // eslint-disable-next-line camelcase\n const { suggested_questions = [], prologue = '' } = onboardingInfo || {};\n\n // 初始化开场白\n if (prologue) {\n setMessage('prologue', prologue);\n } else {\n setMessages((prev) => prev.filter((item) => !item.extra?.prologue));\n }\n\n // 过滤空内容\n const formatSuggests = suggested_questions.filter((item: string) => item);\n\n if (formatSuggests.length > 0) {\n const suggestMessages = formatSuggests.map((item: string, index: number) => ({\n key: index + 1,\n description: item,\n }));\n // 页面为空时展示开场白预设问题\n const hasMessages = messages.some((item) => (!item.extra?.prologue && item.type !== 'SuggestionMessage'));\n if (!hasMessages) {\n setMessage('suggest', suggestMessages);\n }\n } else {\n setMessages((prev) => prev.filter((item) => !(item.type === 'SuggestionMessage')));\n }\n };\n\n // 获取聊天记录\n const initAppConversations = async (fetchDetail = false) => {\n try {\n const { data = [], pagination, result } = await fetchSessionList({\n url,\n appNo,\n token,\n pageNum: sessionPagination.pageNum,\n pageSize: sessionPagination.pageSize,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n if (data.length > 0) {\n const formatSessions = data.map((item) => {\n return {\n key: item.sessionId,\n label: item.title || '新对话',\n timestamp: new Date(item.startTime).getTime(),\n messages: [],\n meta: {\n ...item,\n },\n };\n });\n\n setSessionList(formatSessions);\n // 设置分页信息\n setSessionPagination({ pageNum: sessionPagination.pageNum, pageSize: sessionPagination.pageSize, total: pagination?.total || 0 });\n const { sessionId } = data?.[0];\n fetchDetail && setCurrentSession(sessionId);\n } else {\n // 页面报错 初始化\n setSessionList([]);\n setCurrentSessionId(uuidV4());\n initPrologue();\n }\n // 成功回调\n onSuccess?.({\n code: SuccessCode.APP_MESSAGES_INIT_SUCCESS,\n message: '初始化聊天记录成功',\n });\n } else {\n initPrologue();\n }\n } catch {\n //\n }\n };\n\n // 设置当前会话详情\n const setCurrentSession = async (sessionId: string) => {\n if (sessionId) {\n if (sessionId === currentSessionId) {\n return;\n }\n setCurrentSessionId(sessionId); // 设置当前会话 id;\n const { data, result } = await fetchSessionDetail({\n url,\n appNo,\n sessionId,\n token,\n });\n\n if (result?.code === API_SUCCESS_CODE) {\n const sessionsData = data?.reduce((acc: any[], cur) => {\n const sessionMessages = Array.isArray(cur.sessionMessages) ? cur.sessionMessages : [];\n const msgs = sessionMessages.map((msg: any) => ({\n ...msg,\n raw: cur,\n isLike: cur?.isLike,\n }));\n return [...acc, ...msgs];\n }, []);\n\n if (sessionsData.length > 0) {\n formatMessages(sessionsData, true);\n }\n }\n } else {\n // 兼容 无 session异常\n setCurrentSessionId(uuidV4());\n }\n };\n\n // 删除会话\n const deleteSession = async (sessionId: string) => {\n if (!sessionId) return;\n const { result } = await closeSession({\n url,\n appNo,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 删除成功后,重新获取会话列表\n initAppConversations(false);\n // 如果删除的是当前会话,则创建新的会话\n if (sessionId === currentSessionId) {\n createNewChat();\n }\n }\n };\n\n // 更新会话名称\n const updateSession = async (sessionId: string, title: string) => {\n if (!sessionId && !title) return;\n const { result } = await updateSessionTitle({\n url,\n appNo,\n title,\n sessionId,\n token,\n });\n if (result?.code === API_SUCCESS_CODE) {\n // 编辑成功后,重新获取会话列表\n initAppConversations(false);\n }\n };\n\n // 生成新对话\n const createNewChat = () => {\n stopChat(); // 停止聊天\n setMessages([]); // 清空所有消息\n initPrologue(); // 初始化开场白和预置问题\n setCurrentSessionId(uuidV4()); // 设置会话 id\n };\n\n // 初始化应用\n useEffect(() => {\n if (appInfo) {\n // 初始化历史数据\n initAppConversations(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [appInfo]);\n\n return {\n appInfo,\n messages,\n loading,\n content: responseData.content,\n sessionList,\n currentSessionId,\n sessionPagination,\n initAppConversations,\n reChat,\n chat,\n createNewChat,\n setCurrentSessionId,\n setCurrentSession,\n updateSession,\n deleteSession,\n setMessage,\n setMessages,\n stopChat,\n initPrologue,\n };\n};\n\nexport default useAgentGenerator;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAEA,mBAAkE;AAClE,kBAA6B;AAC7B,mCAAsC;AACtC,wBAAqF;AACrF,mBAAqG;AACrG,qBAAwB;AACxB,mBAA8B;AAC9B,uBAAoD;AACpD,iBAAuG;AACvG,0BAAgC;AAEhC,sBAAyB;AACzB,uBAA0B;AAC1B,6BAAgC;AAChC,4BAA+B;AAC/B,gBAAmB;AACnB,sBAAyB;AACzB,qBAAwB;AACxB,2BAA8B;AAC9B,mBAAqB;AACrB,yBAA2B;AA8BpB,IAAK,aAAL,kBAAKA,gBAAL;AACL,EAAAA,YAAA,0BAAuB;AACvB,EAAAA,YAAA,wBAAqB;AACrB,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,mBAAgB;AAChB,EAAAA,YAAA,eAAY;AACZ,EAAAA,YAAA,oBAAiB;AACjB,EAAAA,YAAA,kBAAe;AACf,EAAAA,YAAA,oBAAiB;AACjB,EAAAA,YAAA,qBAAkB;AAClB,EAAAA,YAAA,kBAAe;AACf,EAAAA,YAAA,aAAU;AACV,EAAAA,YAAA,cAAW;AACX,EAAAA,YAAA,YAAS;AAbC,SAAAA;AAAA,GAAA;AAgBL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,WAAQ;AACR,EAAAA,eAAA,SAAM;AAFI,SAAAA;AAAA,GAAA;AAKL,IAAK,qBAAL,kBAAKC,wBAAL;AACL,EAAAA,oBAAA,cAAW;AACX,EAAAA,oBAAA,aAAU;AACV,EAAAA,oBAAA,YAAS;AAHC,SAAAA;AAAA,GAAA;AA+BZ,IAAM,mBAAN,MAAuB;AAAA,EAGrB,YAAY,YAAY,IAAI;AAC1B,SAAK,YAAY;AAAA,EACnB;AAAA;AAAA,EAGQ,kBAAkB,eAAuB;AAC/C,WAAO,kBAAkB,aACrB,EAAE,MAAM,gBAAAC,SAAc,YAAY,sBAAAC,QAAmB,IACrD,EAAE,MAAM,UAAAC,SAAQ,YAAY,gBAAAC,QAAa;AAAA,EAC/C;AAAA;AAAA,EAGQ,aAAa,UAAkB;AACrC,WAAO,aAAa,UAChB,EAAE,MAAM,eAAAC,SAAa,YAAY,qBAAAC,QAAkB,IACnD,EAAE,MAAM,aAAAC,SAAU,YAAY,mBAAAC,QAAe;AAAA,EACnD;AAAA;AAAA,EAGQ,kBAAkB;AACxB,WAAO,EAAE,MAAM,eAAAH,SAAa,YAAY,qBAAAC,QAAkB;AAAA,EAC5D;AAAA;AAAA,EAGQ,gBACN,UACA,cACA,UACA,MACA,MACA;AACA,UAAM,MAAM,SAAS,YAAY;AACjC,QAAI,2BAAK,SAAS;AAChB,YAAM,YAAY,IAAI,QAAQ,KAAK,CAAC,SAAS,KAAK,OAAO,QAAQ;AACjE,UAAI,WAAW;AACb,kBAAU,MAAM,OAAO,QAAQ,OAAO,KAAM,QAAQ,CAAC,IAAI;AACzD,YAAI;AAAM,oBAAU,OAAO;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AAAA;AAAA,EAGQ,yBAAyB,UAAoD;AACnF,aAAS,IAAI,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;AAC7C,YAAM,MAAM,SAAS,CAAC;AACtB,UAAI,IAAI,SAAS,8BAAY,aACtB,IAAI,SAAS,kBACZ,IAAI,WAAW,UAAU,IAAI,WAAW,YAAY;AAC1D,eAAO,CAAC,GAAG,GAAkB;AAAA,MAC/B;AAAA,IACF;AACA,WAAO,CAAC,IAAI,IAAI;AAAA,EAClB;AAAA;AAAA,EAGQ,qBAAkC;AACxC,WAAO;AAAA,MACL,QAAI,YAAAG,IAAO;AAAA,MACX,MAAM;AAAA,MACN,WAAW,oBAAI,KAAK;AAAA,MACpB,MAAM,8BAAY;AAAA,MAClB,SAAS,EAAE,MAAM,GAAG;AAAA,MACpB,SAAS,CAAC;AAAA,MACV,QAAQ;AAAA,MACR,QAAQ,gCAAc;AAAA,IACxB;AAAA,EACF;AAAA;AAAA,EAGQ,sBAAsB,UAAyD;AACrF,UAAM,CAAC,OAAO,WAAW,IAAI,KAAK,yBAAyB,QAAQ;AAEnE,QAAI,UAAU,MAAM,aAAa;AAC/B,aAAO,CAAC,CAAC,GAAG,QAAQ,GAAG,OAAO,EAAE,GAAG,YAAY,CAAC;AAAA,IAClD;AAEA,UAAM,aAAa,KAAK,mBAAmB;AAC3C,UAAM,cAAc,CAAC,GAAG,UAAU,UAAU;AAC5C,WAAO,CAAC,aAAa,YAAY,SAAS,GAAG,UAAU;AAAA,EACzD;AAAA;AAAA,EAGA,iBAAiB,UAAsB,MAAuB;AA7LhE;AA8LI,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,cAAc,CAAC,GAAG,QAAQ;AAChC,UAAM,eAAe,YAAY,UAAU,CAAC,SAAS,KAAK,SAAS,mBAAmB;AAEtF,QAAI,iBAAiB,IAAI;AACvB,YAAM,gBAAmC;AAAA,QACvC,QAAI,YAAAA,IAAO;AAAA,QACX,MAAM;AAAA,QACN,WAAW,oBAAI,KAAK;AAAA,QACpB,QAAQ,gCAAc;AAAA,QACtB,MAAM,8BAAY;AAAA,QAClB,SAAS,CAAC,EAAE,SAAK,YAAAA,IAAO,GAAG,aAAa,QAAQ,CAAC;AAAA,MACnD;AACA,kBAAY,KAAK,aAAa;AAAA,IAChC,OAAO;AACL,YAAM,aAAa,YAAY,YAAY;AAC3C,qDAAY,YAAZ,mBAAqB,KAAK;AAAA,QACxB,SAAK,YAAAA,IAAO;AAAA,QACZ,aAAa;AAAA,MACf;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,gBAAgB,UAAsB,MAAuB;AAC3D,UAAM,EAAE,QAAQ,IAAI;AACpB,UAAM,CAAC,aAAa,OAAO,KAAK,IAAI,KAAK,sBAAsB,QAAQ;AAGvE,UAAM,aAAuB;AAAA,MAC3B,GAAG;AAAA,MACH,SAAS,MAAM,UAAU,MAAM;AAAA,MAC/B,QAAQ,MAAM,WAAW,gCAAc,OAAO,gCAAc,UAAU,MAAM;AAAA,IAC9E;AAEA,UAAM,kBAAkB,CAAC,GAAG,WAAW;AACvC,oBAAgB,KAAK,IAAI;AAEzB,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,mBAAmB,UAAkC;AACnD,UAAM,CAAC,aAAa,OAAO,KAAK,IAAI,KAAK,sBAAsB,QAAQ;AAGvE,UAAM,aAAuB;AAAA,MAC3B,GAAG;AAAA,MACH,QAAQ,GAAG,MAAM,UAAU;AAAA;AAAA,MAC3B,QAAQ,MAAM,WAAW,gCAAc,OAAO,gCAAc,UAAU,MAAM;AAAA,IAC9E;AAEA,UAAM,kBAAkB,CAAC,GAAG,WAAW;AACvC,oBAAgB,KAAK,IAAI;AAEzB,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,2BAA2B,UAAsB,MAAuB;AACtE,UAAM,CAAC,aAAa,OAAO,KAAK,IAAI,KAAK,sBAAsB,QAAQ;AACvE,UAAM,EAAE,eAAW,YAAAA,IAAO,EAAE,IAAI,QAAQ,CAAC;AACzC,UAAM,EAAE,KAAK,KAAI,6BAAM,SAAQ,CAAC;AAEhC,UAAM,UAAU,MAAM,WAAW,CAAC;AAElC,UAAM,QAAQ,KAAK;AAAA,MACjB,IAAI;AAAA,MACJ,WAAW,oBAAI,KAAK;AAAA,MACpB,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW;AAAA,MACX,OAAO;AAAA,QACL,GAAG;AAAA,QACH,MAAM,gBAAAR;AAAA,QACN,YAAY,sBAAAC;AAAA,MACd;AAAA,IACF,CAAC;AAED,gBAAY,KAAK,IAAI;AACrB,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,yBAAyB,UAAsB,MAAuB;AACpE,UAAM,CAAC,OAAO,MAAM,IAAI,KAAK,yBAAyB,QAAQ;AAC9D,QAAI,UAAU;AAAI,aAAO;AACzB,UAAM,EAAE,eAAW,YAAAO,IAAO,GAAG,KAAK,IAAI,QAAQ,CAAC;AAE/C,UAAM,cAAc,CAAC,GAAG,QAAQ;AAChC,SAAK,gBAAgB,aAAa,OAAO,UAAU,MAAM,QAAQ;AACjE,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,sBAAsB,UAAsB,MAAuB;AACjE,UAAM,CAAC,aAAa,OAAO,KAAK,IAAI,KAAK,sBAAsB,QAAQ;AACvE,UAAM,EAAE,eAAW,YAAAA,IAAO,EAAE,IAAI,QAAQ,CAAC;AACzC,UAAM,EAAE,MAAM,SAAS,KAAI,6BAAM,SAAQ,CAAC;AAE1C,UAAM,UAAU,MAAM,WAAW,CAAC;AAClC,UAAM,QAAQ,KAAK,aAAa,QAAQ;AAExC,UAAM,QAAQ,KAAK;AAAA,MACjB,IAAI;AAAA,MACJ,WAAW,oBAAI,KAAK;AAAA,MACpB,MAAM;AAAA,MACN,MAAM,aAAa,UAAU,WAAW;AAAA,MACxC,WAAW;AAAA,MACX,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG;AAAA,MACL;AAAA,IACF,CAAC;AAED,gBAAY,KAAK,IAAI;AACrB,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,oBAAoB,UAAsB,MAAuB;AAC/D,UAAM,CAAC,OAAO,MAAM,IAAI,KAAK,yBAAyB,QAAQ;AAC9D,UAAM,EAAE,eAAW,YAAAA,IAAO,EAAE,IAAI,QAAQ,CAAC;AACzC,UAAM,EAAE,SAAS,KAAI,6BAAM,SAAQ,CAAC;AACpC,QAAI,UAAU;AAAI,aAAO;AAEzB,UAAM,cAAc,CAAC,GAAG,QAAQ;AAChC,SAAK,gBAAgB,aAAa,OAAO,UAAU,KAAK,MAAM,aAAa,UAAU,aAAa,OAAO;AACzG,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,qBAAqB,UAAsB,MAAuB;AApUpE;AAqUI,UAAM,CAAC,aAAa,OAAO,KAAK,IAAI,KAAK,sBAAsB,QAAQ;AACvE,UAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC;AAC7B,UAAM,EAAE,QAAQ,MAAM,cAAc,IAAI,WAAW,CAAC;AACpD,UAAM,EAAE,KAAK,QAAI,qCAAgB,aAAa;AAC9C,yCAAO,YAAP,mBAAgB,KAAK;AAAA,MACnB,IAAI,cAAU,YAAAA,IAAO;AAAA,MACrB,WAAW,oBAAI,KAAK;AAAA,MACpB,MAAM;AAAA,MACN,MAAM,OAAO,OAAO,WAAW;AAAA,MAC/B,WAAW;AAAA,MACX,OAAO;AAAA,QACL,GAAG;AAAA,QACH,GAAG,KAAK,gBAAgB;AAAA,MAC1B;AAAA,IACF;AAEA,gBAAY,KAAK,IAAI;AACrB,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,sBAAsB,UAAsB,MAAuB;AACjE,UAAM,CAAC,aAAa,OAAO,KAAK,IAAI,KAAK,sBAAsB,QAAQ;AACvE,UAAM,EAAE,SAAS,YAAAA,IAAQ,QAAQ,IAAI,QAAQ,CAAC;AAC9C,UAAM,EAAE,YAAY,IAAI,WAAW,CAAC;AACpC,UAAM,MAAM,KAAK;AACjB,UAAM,cAAc,MAAM,eAAe,CAAC;AAC1C,UAAM,YAAY,KAAK;AAAA,MACrB,IAAI;AAAA,MACJ,SAAS;AAAA,IACX,CAAC;AAGD,QAAI,MAAM,WAAW,gCAAc,MAAM;AACvC,YAAM,SAAS,gCAAc;AAAA,IAC/B;AAEA,gBAAY,KAAK,IAAI;AACrB,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,mBAAmB,UAAsB,MAAuB;AAC9D,UAAM,CAAC,OAAO,MAAM,IAAI,KAAK,yBAAyB,QAAQ;AAC9D,UAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC;AAC7B,UAAM,EAAE,QAAQ,cAAc,IAAI,WAAW,CAAC;AAC9C,UAAM,EAAE,KAAK,QAAI,qCAAgB,aAAa;AAC9C,QAAI,UAAU;AAAI,aAAO;AACzB,UAAM,cAAc,CAAC,GAAG,QAAQ;AAChC,SAAK,gBAAgB,aAAa,OAAO,QAAQ,KAAK,MAAM,OAAO,QAAQ,WAAW,UAAU;AAChG,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,eAAe,UAAsB,MAAuB;AAC1D,UAAM,CAAC,aAAa,OAAO,KAAK,IAAI,KAAK,sBAAsB,QAAQ;AACvE,UAAM,EAAE,aAAa,SAAS,SAAS,SAAS,IAAI;AACpD,QAAI,SAAS;AACX,YAAM,MAAM,KAAK;AAEjB,UAAI,MAAM,WAAW,gCAAc,MAAM;AACvC,cAAM,SAAS,gCAAc;AAAA,MAC/B;AAEA,UAAI,gBAAgB,UAAU,UAAU,MAAM,SAAS;AACrD,cAAM,QAAQ,QAAQ;AAAA,MACxB;AAGA,UAAI,gBAAgB,QAAQ;AAC1B,cAAM,QAAQ,QAAQ,KAAK,UAAU,OAAO;AAAA,MAC9C;AAAA,IACF,OAAO;AACL,YAAM,SAAS,gCAAc;AAC7B,YAAM,QAAQ,OAAO,+BAA+B;AAAA,IACtD;AAEA,gBAAY,KAAK,IAAI;AACrB,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,aAAa,UAAsB,MAAuB;AACxD,UAAM,CAAC,OAAO,MAAM,IAAI,KAAK,yBAAyB,QAAQ;AAC9D,UAAM,EAAE,MAAM,EAAE,eAAW,YAAAA,IAAO,EAAE,IAAI,CAAC,GAAG,MAAM,kBAAkB,IAAI,QAAQ,CAAC;AACjF,QAAI,UAAU;AAAI,aAAO;AAEzB,UAAM,cAAc,CAAC,GAAG,QAAQ;AAChC,UAAM,MAAM,YAAY,KAAK;AAC7B,QAAI,mBAAmB;AACrB,UAAI,UAAU,IAAI,WAAW,CAAC;AAC9B,UAAI,QAAQ,KAAK;AAAA,QACf,IAAI,gBAAY,YAAAA,IAAO;AAAA,QACvB,WAAW,oBAAI,KAAK;AAAA,QACpB,MAAM;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,UACL,GAAG;AAAA,UACH,MAAM,QAAQ,OAAO,KAAM,QAAQ,CAAC,IAAI;AAAA,UACxC,MAAM,iBAAAC;AAAA,UACN,YAAY,uBAAAC;AAAA,QACd;AAAA,MACF,CAAC;AAAA,IACH;AAEA,QAAI,SAAS,gCAAc;AAC3B,WAAO;AAAA,EACT;AAAA;AAAA,EAGA,gBAAgB,UAAsB,cAA+B;AAnbvE;AAobI,QAAI,GAAC,kDAAc,SAAd,mBAAoB;AAAS,aAAO;AACzC,QAAI,WAAW,aAAa,KAAK;AACjC,QAAI,OAAO,aAAa,UAAU;AAChC,qBAAW,4BAAc,UAAU;AAAA,QACjC,QAAQ;AAAA,QACR,MAAM;AAAA,UACJ,aAAa;AAAA,UACb,SAAS;AAAA,UACT,SAAS;AAAA,UACT,UAAU;AAAA,QACZ;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAM,EAAE,QAAQ,OAAO,CAAC,EAAE,IAAI;AAE9B,YAAQ,QAAQ;AAAA,MACd,KAAK;AACH,eAAO,KAAK,iBAAiB,UAAU,IAAI;AAAA,MAE7C,KAAK;AACH,eAAO,KAAK,gBAAgB,UAAU,IAAI;AAAA,MAE5C,KAAK;AACH,eAAO,KAAK,mBAAmB,QAAQ;AAAA,MAEzC,KAAK;AACH,eAAO,KAAK,qBAAqB,UAAU,IAAI;AAAA,MAEjD,KAAK;AACH,eAAO,KAAK,sBAAsB,UAAU,IAAI;AAAA,MAElD,KAAK;AACH,eAAO,KAAK,mBAAmB,UAAU,IAAI;AAAA,MAE/C,KAAK;AACH,eAAO,KAAK,2BAA2B,UAAU,IAAI;AAAA,MAEvD,KAAK;AACH,eAAO,KAAK,yBAAyB,UAAU,IAAI;AAAA,MAErD,KAAK;AACH,eAAO,KAAK,sBAAsB,UAAU,IAAI;AAAA,MAElD,KAAK;AACH,eAAO,KAAK,oBAAoB,UAAU,IAAI;AAAA,MAEhD,KAAK;AACH,eAAO,KAAK,eAAe,UAAU,IAAI;AAAA,MAE3C,KAAK;AACH,eAAO,KAAK,aAAa,UAAU,IAAI;AAAA,MAEzC;AACE,eAAO;AAAA,IACX;AAAA,EACF;AACF;AAEA,IAAM,oBAAoB,CAAC,WAAmC;AAC5D,QAAM;AAAA,IACJ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,IACZ,GAAG;AAAA,EACL,IAAI;AAGJ,QAAM,CAAC,UAAU,WAAW,QAAI,uBAAqB,CAAC,CAAC;AAIvD,QAAM,CAAC,aAAa,cAAc,QAAI,uBAAwB,CAAC,CAAC;AAIhE,QAAM,CAAC,mBAAmB,oBAAoB,QAAI,uBAAS,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,mCAAkB,CAAC;AAEhH,QAAM,CAAC,kBAAkB,mBAAmB,QAAI,uBAAiB,EAAE;AAEnE,QAAM,CAAC,SAAS,UAAU,QAAI,uBAAc,IAAI;AAEhD,QAAM,kBAAc,qBAA0D,CAAC,CAAC;AAEhF,QAAM,EAAE,MAAM,IAAI,UAAU,CAAC;AAG7B,QAAM,uBAAmB,sBAAQ,MAAM,IAAI,iBAAiB,SAAS,GAAG,CAAC,SAAS,CAAC;AAGnF,8BAAU,MAAM;AACd,QAAI,OAAO,QAAQ;AACjB,YAAM,aAAa,YAAY;AAC7B,YAAI;AACF,gBAAM,EAAE,MAAM,OAAO,IAAI,UAAM,2BAAe,EAAE,KAAK,GAAG,OAAO,CAAC;AAChE,cAAI,OAAO,SAAS,mCAAkB;AACpC,uBAAW,IAAI;AAGf,mDAAY;AAAA,cACV,MAAM,yBAAY;AAAA,cAClB,SAAS;AAAA,YACX;AAAA,UACF,OAAO;AACL,+CAAU;AAAA,cACR,MAAM,OAAO,QAAQ;AAAA,cACrB,SAAS,OAAO,WAAW;AAAA,cAC3B,KAAK;AAAA,YACP;AAAA,UACF;AAAA,QACF,SAAS,OAAP;AACA,6CAAU;AAAA,YACR,MAAM,uBAAU;AAAA,YAChB,SAAS;AAAA,UACX;AAAA,QACF;AAAA,MACF;AACA,iBAAW;AAAA,IACb;AAAA,EAEF,GAAG,CAAC,KAAK,MAAM,CAAC;AAEhB,QAAM,EAAE,OAAO,SAAS,cAAc,KAAK,QAAI,oDAAsB;AAAA,IACnE,WAAW;AAAA,IACX;AAAA,IACA,SAAS,MAAM;AAEb,iBAAW,MAAM;AAvjBvB;AAwjBQ,cAAI,iBAAY,YAAZ,mBAAqB,qBAAkB,iBAAY,YAAZ,mBAAqB,YAAW;AACzE,iCAAQ,KAAK,GAAG;AAAA,QAClB;AAAA,MACF,GAAG,GAAG;AAAA,IACR;AAAA,IACA,OAAO,KAAK;AACV,cAAQ,IAAI,iBAAiB,GAAG;AAAA,IAClC;AAAA,EACF,CAAC;AAGD,8BAAU,MAAM;AACd,QAAI,CAAC;AAAc;AAEnB,gBAAY,CAAC,SAAS,iBAAiB,gBAAgB,MAAM,YAAY,CAAC;AAAA,EAC5E,GAAG,CAAC,cAAc,gBAAgB,CAAC;AAGnC,QAAM,iBAAa,0BAAY,OAAO,aAAqB,YAAiB;AAC1E,YAAQ,aAAa;AAAA,MACnB,KAAK,YAAY;AACf,oBAAY,CAAC,SAAS;AACpB,gBAAM,gBAAgB,KAAK,UAAU,CAAC,SAAM;AA9kBtD;AA8kByD,8BAAK,UAAL,mBAAY;AAAA,WAAQ;AAEnE,cAAI,kBAAkB,IAAI;AACxB,kBAAM,aAA0B;AAAA,cAC9B,MAAM;AAAA,cACN,QAAI,YAAAF,IAAO;AAAA,cACX,WAAW,oBAAI,KAAK;AAAA,cACpB,MAAM,8BAAY;AAAA,cAClB,QAAQ,gCAAc;AAAA,cACtB,SAAS,EAAE,MAAM,QAAQ;AAAA,cACzB,OAAO,EAAE,UAAU,MAAM,UAAU,KAAK;AAAA,YAC1C;AACA,mBAAO,CAAC,YAAY,GAAG,IAAI;AAAA,UAC7B;AAEA,iBAAO,KAAK,IAAI,CAAC,SAAM;AA7lBjC;AA6lBqC,+BAAK,UAAL,mBAAY,aAAY,KAAK,WAAW,UAAU,KAAK,UAC9E,EAAE,GAAG,MAAM,SAAS,EAAE,MAAM,QAAQ,EAAE,IACtC;AAAA,WAAK;AAAA,QACX,CAAC;AACD;AAAA,MACF;AAAA,MAEA,KAAK,WAAW;AACd,oBAAY,CAAC,SAAS;AACpB,gBAAM,eAAe,KAAK,UAAU,CAAC,SAAS,KAAK,SAAS,mBAAmB;AAC/E,gBAAM,gBAAgB,KAAK,UAAU,CAAC,SAAM;AAvmBtD;AAumByD,8BAAK,UAAL,mBAAY;AAAA,WAAQ;AAEnE,gBAAM,gBAAmC;AAAA,YACvC,QAAI,YAAAA,IAAO;AAAA,YACX,MAAM;AAAA,YACN,WAAW,oBAAI,KAAK;AAAA,YACpB,QAAQ,gCAAc;AAAA,YACtB,MAAM,8BAAY;AAAA,YAClB;AAAA,UACF;AAEA,cAAI,iBAAiB,IAAI;AACvB,kBAAM,cAAc,CAAC,GAAG,IAAI;AAC5B,kBAAM,cAAc,kBAAkB,KAAK,IAAI,gBAAgB;AAC/D,wBAAY,OAAO,aAAa,GAAG,aAAa;AAChD,mBAAO;AAAA,UACT;AAEA,iBAAO,KAAK,IAAI,CAAC,SAAU,KAAK,SAAS,sBACrC,EAAE,GAAG,MAAM,QAAQ,IACnB,IAAK;AAAA,QACX,CAAC;AACD;AAAA,MACF;AAAA,MAEA;AACE,gBAAQ,KAAK,yBAAyB,aAAa;AAAA,IACvD;AAAA,EACF,GAAG,CAAC,CAAC;AAGL,QAAM,WAAO,0BAAY,OAAO,SAAsB,OAAa,SAAS,SAAS;AACnF,QAAI,QAAQ;AACV,YAAM,aAA0B;AAAA,QAC9B,MAAM;AAAA,QACN,QAAI,YAAAA,IAAO;AAAA,QACX,WAAW,oBAAI,KAAK;AAAA,QACpB,MAAM,8BAAY;AAAA,QAClB,QAAQ,gCAAc;AAAA,QACtB;AAAA,QACA;AAAA,MACF;AAEA,kBAAY,CAAC,SAAS;AACpB,cAAM,cAAc,KAAK,OAAO,CAAC,SAAS,KAAK,SAAS,mBAAmB;AAC3E,oBAAY,KAAK,UAAU;AAC3B,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,UAAM,cAAmB;AAAA,MACvB,WAAW;AAAA,QACT,YAAY,QAAQ;AAAA,MACtB;AAAA,MACA,WAAW;AAAA,IACb;AAEA;AAAA,MACE,GAAG,2CAA2C;AAAA,MAC9C;AAAA,MACA;AAAA,QACE,eAAe,UAAU;AAAA,MAC3B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,OAAO,kBAAkB,OAAO,OAAO,GAAG,CAAC;AAG/C,QAAM,aAAS,0BAAY,MAAM;AAC/B,gBAAY,CAAC,SAAS;AA3qB1B;AA4qBM,YAAM,cAAc,CAAC,GAAG,IAAI;AAG5B,YAAM,cAAc,2CAAa;AAAA,QAC/B,CAAC,MAAM,EAAE,SAAS,8BAAY,aAAa,EAAE,SAAS;AAAA;AAExD,UAAI,gBAAgB,IAAI;AACtB,oBAAY,OAAO,aAAa,CAAC;AAAA,MACnC;AAGA,YAAM,eAAe,YAAY,UAAU,CAAC,SAAS,KAAK,SAAS,mBAAmB;AACtF,UAAI,iBAAiB,IAAI;AACvB,oBAAY,OAAO,cAAc,CAAC;AAAA,MACpC;AAGA,YAAM,cAAc,YAAY;AAAA,QAC9B,CAAC,MAAM,EAAE,SAAS,8BAAY,QAAQ,EAAE,SAAS;AAAA,MACnD;AAEA,WAAI,gDAAa,YAAb,mBAAsB,MAAM;AAC9B,mBAAW,MAAM;AACf,eAAK,YAAY,SAAS,YAAY,OAAO,KAAK;AAAA,QACpD,GAAG,CAAC;AAAA,MACN;AAEA,aAAO;AAAA,IACT,CAAC;AAAA,EACH,GAAG,CAAC,IAAI,CAAC;AAGT,QAAM,WAAW,MAAM;AACrB,SAAK;AACL,gBAAY,CAAC,SAAS,KAAK,IAAI,CAAC,MAAM;AAEpC,UAAI,EAAE,WAAW,gCAAc,WAAW,EAAE,WAAW,gCAAc,MAAM;AACzE,cAAM,SAAS,EAAE,GAAG,GAAG,QAAQ,gCAAc,KAAK;AAClD,YAAI,EAAE,SAAS,iBAAiB,EAAE,WAAW,gCAAc,MAAM;AAC/D,UAAC,OAAuB,QAAQ,OAAO;AAAA,QACzC;AACA,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT,CAAC,CAAC;AAAA,EACJ;AAGA,QAAM,iBAAiB,CAAC,MAAW,OAAO,UAAU;AAClD,gBAAY,CAAC,SAAS;AACpB,YAAM,mBAA+B,CAAC;AACtC,WAAK,QAAQ,CAAC,SAAc;AAC1B,cAAM,EAAE,SAAS,aAAa,KAAK,IAAI,QAAQ,CAAC;AAEhD,YAAI,SAAS,QAAQ;AACnB,gBAAM,aAAuB;AAAA,YAC3B,MAAM;AAAA,YACN,QAAI,YAAAA,IAAO;AAAA,YACX,WAAW;AAAA,YACX,MAAM,8BAAY;AAAA,YAClB,QAAQ,gCAAc;AAAA,YACtB,SAAS;AAAA,cACP,MAAM;AAAA,YACR;AAAA,UACF;AAEA,2BAAiB,KAAK,UAAU;AAAA,QAClC,WAAW,SAAS,MAAM;AACxB,gBAAM,aAA0B;AAAA,YAC9B,QAAI,YAAAA,IAAO;AAAA,YACX,MAAM;AAAA,YACN,WAAW;AAAA,YACX,MAAM,8BAAY;AAAA,YAClB,SAAS,EAAE,MAAM,QAAQ;AAAA,YACzB,SAAS,CAAC;AAAA,YACV,QAAQ,gCAAc;AAAA,YACtB,QAAQ,KAAK;AAAA,YACb,KAAK,KAAK;AAAA,UACZ;AAEA,2BAAiB,KAAK,UAAU;AAAA,QAClC;AAAA,MACF,CAAC;AAED,UAAI,MAAM;AACR,eAAO,CAAC,GAAG,gBAAgB;AAAA,MAC7B;AACA,aAAO,CAAC,GAAG,MAAM,GAAG,gBAAgB;AAAA,IACtC,CAAC;AAAA,EACH;AAGA,QAAM,eAAe,YAAY;AAC/B,UAAM,EAAE,iBAAiB,CAAC,EAAE,IAAI;AAEhC,UAAM,EAAE,sBAAsB,CAAC,GAAG,WAAW,GAAG,IAAI,kBAAkB,CAAC;AAGvE,QAAI,UAAU;AACZ,iBAAW,YAAY,QAAQ;AAAA,IACjC,OAAO;AACL,kBAAY,CAAC,SAAS,KAAK,OAAO,CAAC,SAAM;AAjxB/C;AAixBkD,kBAAC,UAAK,UAAL,mBAAY;AAAA,OAAQ,CAAC;AAAA,IACpE;AAGA,UAAM,iBAAiB,oBAAoB,OAAO,CAAC,SAAiB,IAAI;AAExE,QAAI,eAAe,SAAS,GAAG;AAC7B,YAAM,kBAAkB,eAAe,IAAI,CAAC,MAAc,WAAmB;AAAA,QAC3E,KAAK,QAAQ;AAAA,QACb,aAAa;AAAA,MACf,EAAE;AAEF,YAAM,cAAc,SAAS,KAAK,CAAC,SAAM;AA7xB/C;AA6xBmD,kBAAC,UAAK,UAAL,mBAAY,aAAY,KAAK,SAAS;AAAA,OAAoB;AACxG,UAAI,CAAC,aAAa;AAChB,mBAAW,WAAW,eAAe;AAAA,MACvC;AAAA,IACF,OAAO;AACL,kBAAY,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,EAAE,KAAK,SAAS,oBAAoB,CAAC;AAAA,IACnF;AAAA,EACF;AAGA,QAAM,uBAAuB,OAAO,cAAc,UAAU;AAC1D,QAAI;AACF,YAAM,EAAE,OAAO,CAAC,GAAG,YAAY,OAAO,IAAI,UAAM,6BAAiB;AAAA,QAC/D;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAAS,kBAAkB;AAAA,QAC3B,UAAU,kBAAkB;AAAA,MAC9B,CAAC;AAED,WAAI,iCAAQ,UAAS,mCAAkB;AACrC,YAAI,KAAK,SAAS,GAAG;AACnB,gBAAM,iBAAiB,KAAK,IAAI,CAAC,SAAS;AACxC,mBAAO;AAAA,cACL,KAAK,KAAK;AAAA,cACV,OAAO,KAAK,SAAS;AAAA,cACrB,WAAW,IAAI,KAAK,KAAK,SAAS,EAAE,QAAQ;AAAA,cAC5C,UAAU,CAAC;AAAA,cACX,MAAM;AAAA,gBACJ,GAAG;AAAA,cACL;AAAA,YACF;AAAA,UACF,CAAC;AAED,yBAAe,cAAc;AAE7B,+BAAqB,EAAE,SAAS,kBAAkB,SAAS,UAAU,kBAAkB,UAAU,QAAO,yCAAY,UAAS,EAAE,CAAC;AAChI,gBAAM,EAAE,UAAU,IAAI,6BAAO;AAC7B,yBAAe,kBAAkB,SAAS;AAAA,QAC5C,OAAO;AAEL,yBAAe,CAAC,CAAC;AACjB,kCAAoB,YAAAA,IAAO,CAAC;AAC5B,uBAAa;AAAA,QACf;AAEA,+CAAY;AAAA,UACV,MAAM,yBAAY;AAAA,UAClB,SAAS;AAAA,QACX;AAAA,MACF,OAAO;AACL,qBAAa;AAAA,MACf;AAAA,IACF,QAAE;AAAA,IAEF;AAAA,EACF;AAGA,QAAM,oBAAoB,OAAO,cAAsB;AACrD,QAAI,WAAW;AACb,UAAI,cAAc,kBAAkB;AAClC;AAAA,MACF;AACA,0BAAoB,SAAS;AAC7B,YAAM,EAAE,MAAM,OAAO,IAAI,UAAM,+BAAmB;AAAA,QAChD;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,CAAC;AAED,WAAI,iCAAQ,UAAS,mCAAkB;AACrC,cAAM,eAAe,6BAAM,OAAO,CAAC,KAAY,QAAQ;AACrD,gBAAM,kBAAkB,MAAM,QAAQ,IAAI,eAAe,IAAI,IAAI,kBAAkB,CAAC;AACpF,gBAAM,OAAO,gBAAgB,IAAI,CAAC,SAAc;AAAA,YAC9C,GAAG;AAAA,YACH,KAAK;AAAA,YACL,QAAQ,2BAAK;AAAA,UACf,EAAE;AACF,iBAAO,CAAC,GAAG,KAAK,GAAG,IAAI;AAAA,QACzB,GAAG,CAAC;AAEJ,YAAI,aAAa,SAAS,GAAG;AAC3B,yBAAe,cAAc,IAAI;AAAA,QACnC;AAAA,MACF;AAAA,IACF,OAAO;AAEL,8BAAoB,YAAAA,IAAO,CAAC;AAAA,IAC9B;AAAA,EACF;AAGA,QAAM,gBAAgB,OAAO,cAAsB;AACjD,QAAI,CAAC;AAAW;AAChB,UAAM,EAAE,OAAO,IAAI,UAAM,yBAAa;AAAA,MACpC;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,SAAI,iCAAQ,UAAS,mCAAkB;AAErC,2BAAqB,KAAK;AAE1B,UAAI,cAAc,kBAAkB;AAClC,sBAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AAGA,QAAM,gBAAgB,OAAO,WAAmB,UAAkB;AAChE,QAAI,CAAC,aAAa,CAAC;AAAO;AAC1B,UAAM,EAAE,OAAO,IAAI,UAAM,+BAAmB;AAAA,MAC1C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AACD,SAAI,iCAAQ,UAAS,mCAAkB;AAErC,2BAAqB,KAAK;AAAA,IAC5B;AAAA,EACF;AAGA,QAAM,gBAAgB,MAAM;AAC1B,aAAS;AACT,gBAAY,CAAC,CAAC;AACd,iBAAa;AACb,4BAAoB,YAAAA,IAAO,CAAC;AAAA,EAC9B;AAGA,8BAAU,MAAM;AACd,QAAI,SAAS;AAEX,2BAAqB,IAAI;AAAA,IAC3B;AAAA,EAEF,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,SAAS,aAAa;AAAA,IACtB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,IAAO,4BAAQ;",
6
6
  "names": ["ActionType", "ProcessStatus", "ActionAvailability", "documentIcon", "documentExpandIcon", "qaIcon", "qaExpandIcon", "skillNoIcon", "skillNoExpandIcon", "toolIcon", "toolExpandIcon", "uuidV4", "completedIcon", "completedExpandIcon"]
7
7
  }
@@ -3,54 +3,19 @@ import { AiClient } from '../client/base';
3
3
  import type { ChatbotMessageFields } from './XAiChatbot';
4
4
  import type { Messages, SendContent, SessionData, ChatConfig, ThemeType } from "./";
5
5
  /**
6
- * 错误码枚举(数字格式)
6
+ * SDK 内部错误码(仅用于 SDK 自身可确定的错误场景)
7
+ * 服务端返回的业务错误码会原样透传,接入方在 onError 中自行判断
7
8
  * @enum {string}
8
- * @version 1.0.0
9
- */
10
- export declare enum ErrorCodeNum {
11
- /** 应用下架 */
12
- APP_NOT_ENABLE = "client_50017",
13
- /** 应用删除 */
14
- APP_DELETED = "client_50017",
15
- /** 无该应用 */
16
- APP_NOT_FOUND = "client_59999",
17
- /** 接口报错 */
18
- API_ERROR = "client_50054"
19
- }
20
- /**
21
- * 错误码枚举
22
- * @enum {string}
23
- * @version 1.0.0
24
9
  */
25
10
  export declare enum ErrorCode {
26
- /** 应用未启用 */
27
- APP_NOT_ENABLE = "APP_NOT_ENABLE",
28
- /** 应用已删除 */
29
- APP_DELETED = "APP_DELETED",
30
- /** 应用未找到 */
31
- APP_NOT_FOUND = "APP_NOT_FOUND",
32
- /** API 错误 */
33
- API_ERROR = "API_ERROR"
11
+ /** 网络异常 / HTTP 错误 / 超时等 */
12
+ NETWORK_ERROR = "NETWORK_ERROR",
13
+ /** HTTP 401/403 认证失败 */
14
+ AUTH_ERROR = "AUTH_ERROR"
34
15
  }
35
16
  /**
36
- * 错误码映射表
37
- * @type {Record<string, {code: ErrorCode, message: string}>}
38
- * @version 1.0.0
39
- */
40
- export declare const ErrorCodeMap: {
41
- client_50017: {
42
- code: ErrorCode;
43
- message: string;
44
- };
45
- client_50054: {
46
- code: ErrorCode;
47
- message: string;
48
- };
49
- };
50
- /**
51
- * 成功状态码枚举
17
+ * 成功状态码枚举(SDK 内部生命周期事件)
52
18
  * @enum {string}
53
- * @version 1.0.0
54
19
  */
55
20
  export declare enum SuccessCode {
56
21
  /** 应用配置初始化成功 */
@@ -60,14 +25,16 @@ export declare enum SuccessCode {
60
25
  }
61
26
  /**
62
27
  * 错误信息接口
63
- * @interface Error
64
- * @version 1.0.0
28
+ * - SDK 自身错误:code 为 ErrorCode 枚举值
29
+ * - 服务端业务错误:code 为服务端原始 code(如 "XS010016"),由接入方自行解读
65
30
  */
66
31
  export interface Error {
67
- /** 错误码 */
68
- code: ErrorCode;
32
+ /** 错误码:SDK 内部 ErrorCode 或服务端原始 code */
33
+ code: string;
69
34
  /** 错误信息 */
70
35
  message: string;
36
+ /** 服务端原始响应(仅服务端业务错误时携带) */
37
+ raw?: Record<string, any>;
71
38
  }
72
39
  /**
73
40
  * 成功信息接口
@@ -30,37 +30,16 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
30
30
  var XAiProvider_exports = {};
31
31
  __export(XAiProvider_exports, {
32
32
  ErrorCode: () => ErrorCode,
33
- ErrorCodeMap: () => ErrorCodeMap,
34
- ErrorCodeNum: () => ErrorCodeNum,
35
33
  SuccessCode: () => SuccessCode,
36
34
  XAiContext: () => XAiContext
37
35
  });
38
36
  module.exports = __toCommonJS(XAiProvider_exports);
39
37
  var import_react = __toESM(require("react"));
40
- var ErrorCodeNum = /* @__PURE__ */ ((ErrorCodeNum2) => {
41
- ErrorCodeNum2["APP_NOT_ENABLE"] = "client_50017";
42
- ErrorCodeNum2["APP_DELETED"] = "client_50017";
43
- ErrorCodeNum2["APP_NOT_FOUND"] = "client_59999";
44
- ErrorCodeNum2["API_ERROR"] = "client_50054";
45
- return ErrorCodeNum2;
46
- })(ErrorCodeNum || {});
47
38
  var ErrorCode = /* @__PURE__ */ ((ErrorCode2) => {
48
- ErrorCode2["APP_NOT_ENABLE"] = "APP_NOT_ENABLE";
49
- ErrorCode2["APP_DELETED"] = "APP_DELETED";
50
- ErrorCode2["APP_NOT_FOUND"] = "APP_NOT_FOUND";
51
- ErrorCode2["API_ERROR"] = "API_ERROR";
39
+ ErrorCode2["NETWORK_ERROR"] = "NETWORK_ERROR";
40
+ ErrorCode2["AUTH_ERROR"] = "AUTH_ERROR";
52
41
  return ErrorCode2;
53
42
  })(ErrorCode || {});
54
- var ErrorCodeMap = {
55
- client_50017: {
56
- code: "APP_NOT_ENABLE" /* APP_NOT_ENABLE */,
57
- message: "该应用已删除或已下架"
58
- },
59
- client_50054: {
60
- code: "API_ERROR" /* API_ERROR */,
61
- message: "应用服务端出错"
62
- }
63
- };
64
43
  var SuccessCode = /* @__PURE__ */ ((SuccessCode2) => {
65
44
  SuccessCode2["APP_CONFIG_INIT_SUCCESS"] = "APP_CONFIG_INIT_SUCCESS";
66
45
  SuccessCode2["APP_MESSAGES_INIT_SUCCESS"] = "APP_MESSAGES_INIT_SUCCESS";
@@ -70,8 +49,6 @@ var XAiContext = import_react.default.createContext(null);
70
49
  // Annotate the CommonJS export names for ESM import in node:
71
50
  0 && (module.exports = {
72
51
  ErrorCode,
73
- ErrorCodeMap,
74
- ErrorCodeNum,
75
52
  SuccessCode,
76
53
  XAiContext
77
54
  });
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/types/XAiProvider.ts"],
4
- "sourcesContent": ["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from '../client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\nimport type { Messages, SendContent, SessionData, ChatConfig, ThemeType } from '@/types';\n\n/**\n * 错误码枚举(数字格式)\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCodeNum {\n /** 应用下架 */\n APP_NOT_ENABLE = 'client_50017',\n /** 应用删除 */\n APP_DELETED = 'client_50017',\n /** 无该应用 */\n APP_NOT_FOUND = 'client_59999',\n /** 接口报错 */\n API_ERROR = 'client_50054',\n}\n\n/**\n * 错误码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum ErrorCode {\n /** 应用未启用 */\n APP_NOT_ENABLE = 'APP_NOT_ENABLE',\n /** 应用已删除 */\n APP_DELETED = 'APP_DELETED',\n /** 应用未找到 */\n APP_NOT_FOUND = 'APP_NOT_FOUND',\n /** API 错误 */\n API_ERROR = 'API_ERROR',\n}\n\n/**\n * 错误码映射表\n * @type {Record<string, {code: ErrorCode, message: string}>}\n * @version 1.0.0\n */\nexport const ErrorCodeMap = {\n client_50017: {\n code: ErrorCode.APP_NOT_ENABLE,\n message: '该应用已删除或已下架',\n },\n client_50054: {\n code: ErrorCode.API_ERROR,\n message: '应用服务端出错',\n },\n};\n\n/**\n * 成功状态码枚举\n * @enum {string}\n * @version 1.0.0\n */\nexport enum SuccessCode {\n /** 应用配置初始化成功 */\n APP_CONFIG_INIT_SUCCESS = 'APP_CONFIG_INIT_SUCCESS',\n /** 应用消息初始化成功 */\n APP_MESSAGES_INIT_SUCCESS = 'APP_MESSAGES_INIT_SUCCESS',\n}\n\n/**\n * 错误信息接口\n * @interface Error\n * @version 1.0.0\n */\nexport interface Error {\n /** 错误码 */\n code: ErrorCode;\n /** 错误信息 */\n message: string;\n}\n\n/**\n * 成功信息接口\n * @interface Success\n * @version 1.0.0\n */\nexport interface Success {\n /** 成功状态码 */\n code: SuccessCode;\n /** 成功信息 */\n message: string;\n /** 成功数据 */\n data?: any;\n}\n\n/**\n * XAiProvider 操作句柄接口\n * @interface XAiProviderHandle\n * @version 1.0.0\n */\nexport interface XAiProviderHandle {\n /**\n * 发送聊天消息\n * @param content - 消息内容\n * @type {(content: string) => void}\n * @version 1.0.0\n */\n chat: (content: SendContent) => void;\n\n /**\n * 停止聊天\n * @type {() => void}\n * @version 1.0.0\n */\n stopChat: () => void;\n\n /**\n * 重新发送聊天\n * @type {() => void}\n * @version 1.0.0\n */\n reChat: () => void;\n\n /**\n * 获取应用信息\n * @returns {any} 应用信息对象\n * @type {() => any}\n * @version 1.0.0\n */\n getAppInfo: () => any;\n\n /**\n * 获取消息列表\n * @returns {Messages[]} 消息数组\n * @type {() => Messages[]}\n * @version 1.0.0\n */\n getMessages: () => Messages[];\n\n /**\n * 获取会话列表\n * @returns {}\n */\n getSessions: () => SessionData[];\n\n /**\n * 重新设置当前会话\n * @param id - 会话ID\n * @type {(id: string) => void}\n * @version 1.0.0\n */\n setCurrentSession: (id: string) => void;\n}\n\nexport interface sessionConfig {\n /**\n * 是否展示会话列表\n * @type {boolean}\n * @default false\n */\n showSessionList?: boolean;\n}\n\n\n/**\n * XAiProvider 配置接口\n * @interface XAiProviderConfig\n * @version 1.0.0\n */\nexport interface XAiProviderConfig {\n /**\n * 应用唯一编号\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n appNo?: string;\n\n /**\n * 会话配置\n * @type {sessionConfig}\n */\n session?: sessionConfig;\n\n /**\n * 对话框配置\n * @type {ChatConfig}\n */\n chatProps?: ChatConfig;\n\n /**\n * 是否启用调试模式\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n debug?: boolean;\n}\n\n/**\n * XAiProvider 组件属性接口\n * @interface XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiProviderProps {\n /**\n * AI 服务地址\n * @type {string}\n * @version 1.0.0\n */\n url: string;\n\n /**\n * 认证 token\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n\n /**\n * 配置信息\n * @type {XAiProviderConfig}\n * @default undefined\n * @version 1.0.0\n */\n config?: XAiProviderConfig;\n\n /**\n * Provider 唯一标识,用于区分多个 Provider 实例\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n providerId?: string;\n\n /**\n * Token 刷新回调\n * @type {() => Promise<string>}\n * @default undefined\n * @version 1.0.0\n */\n onRefreshToken?: () => Promise<string>;\n\n /**\n * 应用无法正常渲染回调\n * @type {(error: Error) => void}\n * @default undefined\n * @version 1.0.0\n */\n onError?: (error: Error) => void;\n\n /**\n * 应用正常渲染回调\n * @type {(success: Success) => void}\n * @default undefined\n * @version 1.0.0\n */\n onSuccess?: (success: Success) => void;\n\n /**\n * 消息返回回调\n * @type {(data: Messages) => void}\n * @default undefined\n * @version 1.0.0\n */\n onMessage?: (content: string, data: Messages) => void;\n\n /**\n * 子组件\n * @type {ReactNode}\n * @version 1.0.0\n */\n children: ReactNode;\n}\n\n/**\n * XAiSDK 组件属性接口\n * @interface XAiSDKProps\n * @extends XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiSDKProps extends XAiProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n\n/**\n * XAi 上下文类型接口\n * @interface XAiContextType\n * @extends Required<ChatbotMessageFields>\n * @version 1.0.0\n */\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n /**\n * AI 客户端实例\n * @type {AiClient | null}\n * @default null\n * @version 1.0.0\n */\n client: AiClient | null;\n\n /**\n * 认证令牌\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n\n /**\n * 加载状态\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n loading: boolean;\n\n /**\n * 错误信息\n * @type {string | null}\n * @default null\n * @version 1.0.0\n */\n error: string | null;\n}\n\n/**\n * XAi 上下文对象\n * @type {React.Context<XAiContextType | null>}\n * @version 1.0.0\n */\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiC;AAU1B,IAAK,eAAL,kBAAKA,kBAAL;AAEL,EAAAA,cAAA,oBAAiB;AAEjB,EAAAA,cAAA,iBAAc;AAEd,EAAAA,cAAA,mBAAgB;AAEhB,EAAAA,cAAA,eAAY;AARF,SAAAA;AAAA,GAAA;AAgBL,IAAK,YAAL,kBAAKC,eAAL;AAEL,EAAAA,WAAA,oBAAiB;AAEjB,EAAAA,WAAA,iBAAc;AAEd,EAAAA,WAAA,mBAAgB;AAEhB,EAAAA,WAAA,eAAY;AARF,SAAAA;AAAA,GAAA;AAgBL,IAAM,eAAe;AAAA,EAC1B,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AAAA,EACA,cAAc;AAAA,IACZ,MAAM;AAAA,IACN,SAAS;AAAA,EACX;AACF;AAOO,IAAK,cAAL,kBAAKC,iBAAL;AAEL,EAAAA,aAAA,6BAA0B;AAE1B,EAAAA,aAAA,+BAA4B;AAJlB,SAAAA;AAAA,GAAA;AAmSL,IAAM,aAAa,aAAAC,QAAM,cAAqC,IAAI;",
6
- "names": ["ErrorCodeNum", "ErrorCode", "SuccessCode", "React"]
4
+ "sourcesContent": ["// context/ProviderContext.ts\nimport React, { ReactNode } from 'react';\nimport { AiClient } from '../client/base';\nimport type { ChatbotMessageFields } from './XAiChatbot';\nimport type { Messages, SendContent, SessionData, ChatConfig, ThemeType } from '@/types';\n\n/**\n * SDK 内部错误码(仅用于 SDK 自身可确定的错误场景)\n * 服务端返回的业务错误码会原样透传,接入方在 onError 中自行判断\n * @enum {string}\n */\nexport enum ErrorCode {\n /** 网络异常 / HTTP 错误 / 超时等 */\n NETWORK_ERROR = 'NETWORK_ERROR',\n /** HTTP 401/403 认证失败 */\n AUTH_ERROR = 'AUTH_ERROR',\n}\n\n/**\n * 成功状态码枚举(SDK 内部生命周期事件)\n * @enum {string}\n */\nexport enum SuccessCode {\n /** 应用配置初始化成功 */\n APP_CONFIG_INIT_SUCCESS = 'APP_CONFIG_INIT_SUCCESS',\n /** 应用消息初始化成功 */\n APP_MESSAGES_INIT_SUCCESS = 'APP_MESSAGES_INIT_SUCCESS',\n}\n\n/**\n * 错误信息接口\n * - SDK 自身错误:code 为 ErrorCode 枚举值\n * - 服务端业务错误:code 为服务端原始 code(如 \"XS010016\"),由接入方自行解读\n */\nexport interface Error {\n /** 错误码:SDK 内部 ErrorCode 或服务端原始 code */\n code: string;\n /** 错误信息 */\n message: string;\n /** 服务端原始响应(仅服务端业务错误时携带) */\n raw?: Record<string, any>;\n}\n\n/**\n * 成功信息接口\n * @interface Success\n * @version 1.0.0\n */\nexport interface Success {\n /** 成功状态码 */\n code: SuccessCode;\n /** 成功信息 */\n message: string;\n /** 成功数据 */\n data?: any;\n}\n\n/**\n * XAiProvider 操作句柄接口\n * @interface XAiProviderHandle\n * @version 1.0.0\n */\nexport interface XAiProviderHandle {\n /**\n * 发送聊天消息\n * @param content - 消息内容\n * @type {(content: string) => void}\n * @version 1.0.0\n */\n chat: (content: SendContent) => void;\n\n /**\n * 停止聊天\n * @type {() => void}\n * @version 1.0.0\n */\n stopChat: () => void;\n\n /**\n * 重新发送聊天\n * @type {() => void}\n * @version 1.0.0\n */\n reChat: () => void;\n\n /**\n * 获取应用信息\n * @returns {any} 应用信息对象\n * @type {() => any}\n * @version 1.0.0\n */\n getAppInfo: () => any;\n\n /**\n * 获取消息列表\n * @returns {Messages[]} 消息数组\n * @type {() => Messages[]}\n * @version 1.0.0\n */\n getMessages: () => Messages[];\n\n /**\n * 获取会话列表\n * @returns {}\n */\n getSessions: () => SessionData[];\n\n /**\n * 重新设置当前会话\n * @param id - 会话ID\n * @type {(id: string) => void}\n * @version 1.0.0\n */\n setCurrentSession: (id: string) => void;\n}\n\nexport interface sessionConfig {\n /**\n * 是否展示会话列表\n * @type {boolean}\n * @default false\n */\n showSessionList?: boolean;\n}\n\n\n/**\n * XAiProvider 配置接口\n * @interface XAiProviderConfig\n * @version 1.0.0\n */\nexport interface XAiProviderConfig {\n /**\n * 应用唯一编号\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n appNo?: string;\n\n /**\n * 会话配置\n * @type {sessionConfig}\n */\n session?: sessionConfig;\n\n /**\n * 对话框配置\n * @type {ChatConfig}\n */\n chatProps?: ChatConfig;\n\n /**\n * 是否启用调试模式\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n debug?: boolean;\n}\n\n/**\n * XAiProvider 组件属性接口\n * @interface XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiProviderProps {\n /**\n * AI 服务地址\n * @type {string}\n * @version 1.0.0\n */\n url: string;\n\n /**\n * 认证 token\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n\n /**\n * 配置信息\n * @type {XAiProviderConfig}\n * @default undefined\n * @version 1.0.0\n */\n config?: XAiProviderConfig;\n\n /**\n * Provider 唯一标识,用于区分多个 Provider 实例\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n providerId?: string;\n\n /**\n * Token 刷新回调\n * @type {() => Promise<string>}\n * @default undefined\n * @version 1.0.0\n */\n onRefreshToken?: () => Promise<string>;\n\n /**\n * 应用无法正常渲染回调\n * @type {(error: Error) => void}\n * @default undefined\n * @version 1.0.0\n */\n onError?: (error: Error) => void;\n\n /**\n * 应用正常渲染回调\n * @type {(success: Success) => void}\n * @default undefined\n * @version 1.0.0\n */\n onSuccess?: (success: Success) => void;\n\n /**\n * 消息返回回调\n * @type {(data: Messages) => void}\n * @default undefined\n * @version 1.0.0\n */\n onMessage?: (content: string, data: Messages) => void;\n\n /**\n * 子组件\n * @type {ReactNode}\n * @version 1.0.0\n */\n children: ReactNode;\n}\n\n/**\n * XAiSDK 组件属性接口\n * @interface XAiSDKProps\n * @extends XAiProviderProps\n * @version 1.0.0\n */\nexport interface XAiSDKProps extends XAiProviderProps {\n /**\n * 主题类型\n * @type {ThemeType}\n * @default 'default'\n * @version 1.0.0\n */\n theme?: ThemeType;\n\n /**\n * 组件属性配置\n * @type {object}\n * @default undefined\n * @version 1.0.0\n */\n componentProps?: {\n /**\n * 组件ID\n * @type {string}\n * @default undefined\n * @version 1.0.0\n */\n id?: string;\n /** 支持任意 CSS 属性 */\n [key: string]: any;\n };\n}\n\n/**\n * XAi 上下文类型接口\n * @interface XAiContextType\n * @extends Required<ChatbotMessageFields>\n * @version 1.0.0\n */\nexport interface XAiContextType extends Required<ChatbotMessageFields> {\n /**\n * AI 客户端实例\n * @type {AiClient | null}\n * @default null\n * @version 1.0.0\n */\n client: AiClient | null;\n\n /**\n * 认证令牌\n * @type {string}\n * @version 1.0.0\n */\n token: string;\n\n /**\n * 加载状态\n * @type {boolean}\n * @default false\n * @version 1.0.0\n */\n loading: boolean;\n\n /**\n * 错误信息\n * @type {string | null}\n * @default null\n * @version 1.0.0\n */\n error: string | null;\n}\n\n/**\n * XAi 上下文对象\n * @type {React.Context<XAiContextType | null>}\n * @version 1.0.0\n */\nexport const XAiContext = React.createContext<XAiContextType | null>(null);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,mBAAiC;AAU1B,IAAK,YAAL,kBAAKA,eAAL;AAEL,EAAAA,WAAA,mBAAgB;AAEhB,EAAAA,WAAA,gBAAa;AAJH,SAAAA;AAAA,GAAA;AAWL,IAAK,cAAL,kBAAKC,iBAAL;AAEL,EAAAA,aAAA,6BAA0B;AAE1B,EAAAA,aAAA,+BAA4B;AAJlB,SAAAA;AAAA,GAAA;AAqSL,IAAM,aAAa,aAAAC,QAAM,cAAqC,IAAI;",
6
+ "names": ["ErrorCode", "SuccessCode", "React"]
7
7
  }
@@ -1,3 +1,3 @@
1
- import React from 'react';
1
+ import React from "react";
2
2
  declare const AddChatIcon: (props: React.SVGProps<SVGSVGElement>) => import("react/jsx-runtime").JSX.Element;
3
3
  export default AddChatIcon;
@@ -1,5 +1,5 @@
1
1
  import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
2
- import React from 'react';
2
+ import React from "react";
3
3
  import { jsx as _jsx } from "react/jsx-runtime";
4
4
  import { jsxs as _jsxs } from "react/jsx-runtime";
5
5
  var AddChatIcon = function AddChatIcon(props) {
@@ -12,9 +12,9 @@ var AddChatIcon = function AddChatIcon(props) {
12
12
  }), /*#__PURE__*/_jsx("g", {
13
13
  id: "\u5E94\u7528\u5E7F\u573A25.8",
14
14
  stroke: "none",
15
- "stroke-width": "1",
15
+ strokeWidth: "1",
16
16
  fill: "none",
17
- "fill-rule": "evenodd",
17
+ fillRule: "evenodd",
18
18
  children: /*#__PURE__*/_jsx("g", {
19
19
  id: "\u5E94\u7528h5_\u9ED8\u8BA4",
20
20
  transform: "translate(-112, -22)",
@@ -25,7 +25,7 @@ var AddChatIcon = function AddChatIcon(props) {
25
25
  children: /*#__PURE__*/_jsx("g", {
26
26
  id: "icon/menu/messageFlash",
27
27
  transform: "translate(48, 10)",
28
- "fill-rule": "nonzero",
28
+ fillRule: "nonzero",
29
29
  children: /*#__PURE__*/_jsx("path", {
30
30
  d: "M10.0096252,1.5 C14.7512907,1.5 18.5951701,5.34387936 18.5951701,10.0855449 C18.5951701,14.7998039 14.7798864,18.5 10.0096252,18.5 C9.95495387,18.5 9.90199098,18.5 9.85057112,18.5 L6.30207336,18.499027 C6.22439746,18.4989896 6.14412829,18.4989507 6.0611004,18.4989104 L4.58809638,18.498186 L4.55827318,18.5002746 C3.70779948,18.5600748 3.38742633,18.5409853 2.93655892,18.2653932 C2.1832446,17.8049309 1.94589784,16.8209176 2.40662081,16.0677691 C2.60629158,15.7413384 2.73716321,15.4799158 2.79899336,15.2947802 C2.82452738,15.2183247 2.82446769,15.2193881 2.87074412,15.311941 C2.26840799,14.1072687 1.42408038,11.4716782 1.42408038,10.0855449 C1.42408038,5.34387936 5.26795974,1.5 10.0096252,1.5 Z M10.0096252,3 C6.09638687,3 2.92408038,6.17230649 2.92408038,10.0855449 C2.92408038,11.1885612 3.70511474,13.6265803 4.21238491,14.6411206 C4.50007839,15.2165075 4.27686952,15.8848531 3.68620584,16.8504965 C3.65791475,16.8967442 3.67249916,16.9572095 3.71886202,16.9855487 C3.79328018,17.0310367 3.94204241,17.0399008 4.45306197,17.003969 C4.4683628,17.0028941 4.4683628,17.0028941 4.53596471,17 L10.0096252,17 C13.9615665,17 17.0951701,13.9609212 17.0951701,10.0855449 C17.0951701,6.17230649 13.9228636,3 10.0096252,3 Z M6.75962524,9.26403485 L13.2596252,9.26403485 C13.6738388,9.26403485 14.0096252,9.59982129 14.0096252,10.0140348 C14.0096252,10.4282484 13.6738388,10.7640348 13.2596252,10.7640348 L6.75962524,10.7640348 C6.34541167,10.7640348 6.00962524,10.4282484 6.00962524,10.0140348 C6.00962524,9.59982129 6.34541167,9.26403485 6.75962524,9.26403485 Z M9.25962524,13.2640348 L9.25962524,6.76403485 C9.25962524,6.34982129 9.59541167,6.01403485 10.0096252,6.01403485 C10.4238388,6.01403485 10.7596252,6.34982129 10.7596252,6.76403485 L10.7596252,13.2640348 C10.7596252,13.6782484 10.4238388,14.0140348 10.0096252,14.0140348 C9.59541167,14.0140348 9.25962524,13.6782484 9.25962524,13.2640348 Z",
31
31
  id: "\u5F62\u72B6\u7ED3\u5408"
@@ -1 +1 @@
1
- {"version":3,"names":["React","jsx","_jsx","jsxs","_jsxs","AddChatIcon","props","_objectSpread","viewBox","fill","children","id","stroke","transform","d"],"sources":["../../../../src/assets/svg/AddChatIcon.tsx"],"sourcesContent":["import React from 'react';\n\nconst AddChatIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg viewBox=\"0 0 21 21\" fill=\"currentColor\" {...props}>\n <title>icon/menu/messageFlash</title>\n <g id=\"应用广场25.8\" stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\n <g id=\"应用h5_默认\" transform=\"translate(-112, -22)\" fill=\"currentColor\">\n <g id=\"编组\" transform=\"translate(64, 12)\">\n <g id=\"icon/menu/messageFlash\" transform=\"translate(48, 10)\" fill-rule=\"nonzero\">\n <path d=\"M10.0096252,1.5 C14.7512907,1.5 18.5951701,5.34387936 18.5951701,10.0855449 C18.5951701,14.7998039 14.7798864,18.5 10.0096252,18.5 C9.95495387,18.5 9.90199098,18.5 9.85057112,18.5 L6.30207336,18.499027 C6.22439746,18.4989896 6.14412829,18.4989507 6.0611004,18.4989104 L4.58809638,18.498186 L4.55827318,18.5002746 C3.70779948,18.5600748 3.38742633,18.5409853 2.93655892,18.2653932 C2.1832446,17.8049309 1.94589784,16.8209176 2.40662081,16.0677691 C2.60629158,15.7413384 2.73716321,15.4799158 2.79899336,15.2947802 C2.82452738,15.2183247 2.82446769,15.2193881 2.87074412,15.311941 C2.26840799,14.1072687 1.42408038,11.4716782 1.42408038,10.0855449 C1.42408038,5.34387936 5.26795974,1.5 10.0096252,1.5 Z M10.0096252,3 C6.09638687,3 2.92408038,6.17230649 2.92408038,10.0855449 C2.92408038,11.1885612 3.70511474,13.6265803 4.21238491,14.6411206 C4.50007839,15.2165075 4.27686952,15.8848531 3.68620584,16.8504965 C3.65791475,16.8967442 3.67249916,16.9572095 3.71886202,16.9855487 C3.79328018,17.0310367 3.94204241,17.0399008 4.45306197,17.003969 C4.4683628,17.0028941 4.4683628,17.0028941 4.53596471,17 L10.0096252,17 C13.9615665,17 17.0951701,13.9609212 17.0951701,10.0855449 C17.0951701,6.17230649 13.9228636,3 10.0096252,3 Z M6.75962524,9.26403485 L13.2596252,9.26403485 C13.6738388,9.26403485 14.0096252,9.59982129 14.0096252,10.0140348 C14.0096252,10.4282484 13.6738388,10.7640348 13.2596252,10.7640348 L6.75962524,10.7640348 C6.34541167,10.7640348 6.00962524,10.4282484 6.00962524,10.0140348 C6.00962524,9.59982129 6.34541167,9.26403485 6.75962524,9.26403485 Z M9.25962524,13.2640348 L9.25962524,6.76403485 C9.25962524,6.34982129 9.59541167,6.01403485 10.0096252,6.01403485 C10.4238388,6.01403485 10.7596252,6.34982129 10.7596252,6.76403485 L10.7596252,13.2640348 C10.7596252,13.6782484 10.4238388,14.0140348 10.0096252,14.0140348 C9.59541167,14.0140348 9.25962524,13.6782484 9.25962524,13.2640348 Z\" id=\"形状结合\"></path>\n </g>\n </g>\n </g>\n </g>\n </svg>\n);\n\nexport default AddChatIcon;"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAE1B,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAAoC;EAAA,oBACvDF,KAAA,QAAAG,aAAA,CAAAA,aAAA;IAAKC,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC;EAAc,GAAKH,KAAK;IAAAI,QAAA,gBACpDR,IAAA;MAAAQ,QAAA,EAAO;IAAsB,CAAO,CAAC,eACrCR,IAAA;MAAGS,EAAE,EAAC,8BAAU;MAACC,MAAM,EAAC,MAAM;MAAC,gBAAa,GAAG;MAACH,IAAI,EAAC,MAAM;MAAC,aAAU,SAAS;MAAAC,QAAA,eAC3ER,IAAA;QAAGS,EAAE,EAAC,6BAAS;QAACE,SAAS,EAAC,sBAAsB;QAACJ,IAAI,EAAC,cAAc;QAAAC,QAAA,eAChER,IAAA;UAAGS,EAAE,EAAC,cAAI;UAACE,SAAS,EAAC,mBAAmB;UAAAH,QAAA,eACpCR,IAAA;YAAGS,EAAE,EAAC,wBAAwB;YAACE,SAAS,EAAC,mBAAmB;YAAC,aAAU,SAAS;YAAAH,QAAA,eAC5ER,IAAA;cAAMY,CAAC,EAAC,62DAA62D;cAACH,EAAE,EAAC;YAAM,CAAO;UAAC,CACx4D;QAAC,CACL;MAAC,CACL;IAAC,CACL,CAAC;EAAA,EACD,CAAC;AAAA,CACP;AAED,eAAeN,WAAW"}
1
+ {"version":3,"names":["React","jsx","_jsx","jsxs","_jsxs","AddChatIcon","props","_objectSpread","viewBox","fill","children","id","stroke","strokeWidth","fillRule","transform","d"],"sources":["../../../../src/assets/svg/AddChatIcon.tsx"],"sourcesContent":["import React from \"react\";\n\nconst AddChatIcon = (props: React.SVGProps<SVGSVGElement>) => (\n <svg viewBox=\"0 0 21 21\" fill=\"currentColor\" {...props}>\n <title>icon/menu/messageFlash</title>\n <g\n id=\"应用广场25.8\"\n stroke=\"none\"\n strokeWidth=\"1\"\n fill=\"none\"\n fillRule=\"evenodd\"\n >\n <g id=\"应用h5_默认\" transform=\"translate(-112, -22)\" fill=\"currentColor\">\n <g id=\"编组\" transform=\"translate(64, 12)\">\n <g\n id=\"icon/menu/messageFlash\"\n transform=\"translate(48, 10)\"\n fillRule=\"nonzero\"\n >\n <path\n d=\"M10.0096252,1.5 C14.7512907,1.5 18.5951701,5.34387936 18.5951701,10.0855449 C18.5951701,14.7998039 14.7798864,18.5 10.0096252,18.5 C9.95495387,18.5 9.90199098,18.5 9.85057112,18.5 L6.30207336,18.499027 C6.22439746,18.4989896 6.14412829,18.4989507 6.0611004,18.4989104 L4.58809638,18.498186 L4.55827318,18.5002746 C3.70779948,18.5600748 3.38742633,18.5409853 2.93655892,18.2653932 C2.1832446,17.8049309 1.94589784,16.8209176 2.40662081,16.0677691 C2.60629158,15.7413384 2.73716321,15.4799158 2.79899336,15.2947802 C2.82452738,15.2183247 2.82446769,15.2193881 2.87074412,15.311941 C2.26840799,14.1072687 1.42408038,11.4716782 1.42408038,10.0855449 C1.42408038,5.34387936 5.26795974,1.5 10.0096252,1.5 Z M10.0096252,3 C6.09638687,3 2.92408038,6.17230649 2.92408038,10.0855449 C2.92408038,11.1885612 3.70511474,13.6265803 4.21238491,14.6411206 C4.50007839,15.2165075 4.27686952,15.8848531 3.68620584,16.8504965 C3.65791475,16.8967442 3.67249916,16.9572095 3.71886202,16.9855487 C3.79328018,17.0310367 3.94204241,17.0399008 4.45306197,17.003969 C4.4683628,17.0028941 4.4683628,17.0028941 4.53596471,17 L10.0096252,17 C13.9615665,17 17.0951701,13.9609212 17.0951701,10.0855449 C17.0951701,6.17230649 13.9228636,3 10.0096252,3 Z M6.75962524,9.26403485 L13.2596252,9.26403485 C13.6738388,9.26403485 14.0096252,9.59982129 14.0096252,10.0140348 C14.0096252,10.4282484 13.6738388,10.7640348 13.2596252,10.7640348 L6.75962524,10.7640348 C6.34541167,10.7640348 6.00962524,10.4282484 6.00962524,10.0140348 C6.00962524,9.59982129 6.34541167,9.26403485 6.75962524,9.26403485 Z M9.25962524,13.2640348 L9.25962524,6.76403485 C9.25962524,6.34982129 9.59541167,6.01403485 10.0096252,6.01403485 C10.4238388,6.01403485 10.7596252,6.34982129 10.7596252,6.76403485 L10.7596252,13.2640348 C10.7596252,13.6782484 10.4238388,14.0140348 10.0096252,14.0140348 C9.59541167,14.0140348 9.25962524,13.6782484 9.25962524,13.2640348 Z\"\n id=\"形状结合\"\n ></path>\n </g>\n </g>\n </g>\n </g>\n </svg>\n);\n\nexport default AddChatIcon;\n"],"mappings":";AAAA,OAAOA,KAAK,MAAM,OAAO;AAAC,SAAAC,GAAA,IAAAC,IAAA;AAAA,SAAAC,IAAA,IAAAC,KAAA;AAE1B,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,KAAoC;EAAA,oBACvDF,KAAA,QAAAG,aAAA,CAAAA,aAAA;IAAKC,OAAO,EAAC,WAAW;IAACC,IAAI,EAAC;EAAc,GAAKH,KAAK;IAAAI,QAAA,gBACpDR,IAAA;MAAAQ,QAAA,EAAO;IAAsB,CAAO,CAAC,eACrCR,IAAA;MACES,EAAE,EAAC,8BAAU;MACbC,MAAM,EAAC,MAAM;MACbC,WAAW,EAAC,GAAG;MACfJ,IAAI,EAAC,MAAM;MACXK,QAAQ,EAAC,SAAS;MAAAJ,QAAA,eAElBR,IAAA;QAAGS,EAAE,EAAC,6BAAS;QAACI,SAAS,EAAC,sBAAsB;QAACN,IAAI,EAAC,cAAc;QAAAC,QAAA,eAClER,IAAA;UAAGS,EAAE,EAAC,cAAI;UAACI,SAAS,EAAC,mBAAmB;UAAAL,QAAA,eACtCR,IAAA;YACES,EAAE,EAAC,wBAAwB;YAC3BI,SAAS,EAAC,mBAAmB;YAC7BD,QAAQ,EAAC,SAAS;YAAAJ,QAAA,eAElBR,IAAA;cACEc,CAAC,EAAC,62DAA62D;cAC/2DL,EAAE,EAAC;YAAM,CACJ;UAAC,CACP;QAAC,CACH;MAAC,CACH;IAAC,CACH,CAAC;EAAA,EACD,CAAC;AAAA,CACP;AAED,eAAeN,WAAW"}
@@ -389,6 +389,14 @@ function useADKChat(_ref) {
389
389
  setLoading(true);
390
390
  ctrl.current = newCtrl;
391
391
  }
392
+
393
+ // 当 signal 被外部 abort(stopChat)时,确保外层 Promise 被 resolve
394
+ // 否则 startChat 中的 await 会永远挂起,sendingRef 无法重置为 false
395
+ newCtrl.signal.addEventListener("abort", function () {
396
+ resolve();
397
+ }, {
398
+ once: true
399
+ });
392
400
  var requestUrl = "".concat(url, "/api/gateway-web/openApi/v1/aizt/app/").concat(appNo, "/sendMsgStreaming");
393
401
 
394
402
  // 后台流式文本拼接
@@ -414,7 +422,7 @@ function useADKChat(_ref) {
414
422
  } else if (response.status === 401 || response.status === 403) {
415
423
  setLoading(false);
416
424
  onError === null || onError === void 0 || onError({
417
- code: ErrorCode.API_ERROR,
425
+ code: ErrorCode.AUTH_ERROR,
418
426
  message: response.status === 401 ? "认证失败,token 无效或已过期" : "无权限访问该资源"
419
427
  });
420
428
  resolve();
@@ -1094,6 +1102,12 @@ function useADKChat(_ref) {
1094
1102
  clearChat();
1095
1103
  }
1096
1104
  } else {
1105
+ // 服务端业务错误,透传原始 code + message 给接入方自行处理
1106
+ onError === null || onError === void 0 || onError({
1107
+ code: (result === null || result === void 0 ? void 0 : result.code) || 'UNKNOWN_ERROR',
1108
+ message: (result === null || result === void 0 ? void 0 : result.message) || "获取会话列表失败",
1109
+ raw: result
1110
+ });
1097
1111
  setSessionList([]);
1098
1112
  setCurrentSessionId(v4());
1099
1113
  setPrologue("");
@@ -1105,7 +1119,7 @@ function useADKChat(_ref) {
1105
1119
  _context5.prev = 13;
1106
1120
  _context5.t0 = _context5["catch"](1);
1107
1121
  onError === null || onError === void 0 || onError({
1108
- code: ErrorCode.API_ERROR,
1122
+ code: ErrorCode.NETWORK_ERROR,
1109
1123
  message: "获取会话列表失败"
1110
1124
  });
1111
1125
  case 16:
@@ -1283,9 +1297,11 @@ function useADKChat(_ref) {
1283
1297
  message: "初始化配置成功"
1284
1298
  });
1285
1299
  } else {
1300
+ // 服务端业务错误,透传原始 code + message
1286
1301
  onError === null || onError === void 0 || onError({
1287
- code: result.code || ErrorCode.APP_NOT_FOUND,
1288
- message: result.message || "获取应用配置失败"
1302
+ code: result.code || 'UNKNOWN_ERROR',
1303
+ message: result.message || "获取应用配置失败",
1304
+ raw: result
1289
1305
  });
1290
1306
  }
1291
1307
  _context9.next = 13;
@@ -1294,7 +1310,7 @@ function useADKChat(_ref) {
1294
1310
  _context9.prev = 10;
1295
1311
  _context9.t0 = _context9["catch"](0);
1296
1312
  onError === null || onError === void 0 || onError({
1297
- code: ErrorCode.API_ERROR,
1313
+ code: ErrorCode.NETWORK_ERROR,
1298
1314
  message: "获取应用配置失败"
1299
1315
  });
1300
1316
  case 13: