@zero-library/chat-copilot 1.0.0 → 1.0.1
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.
- package/dist/index.cjs.js +27 -5
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.mts +18 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.esm.js +27 -5
- package/dist/index.esm.js.map +1 -1
- package/package.json +1 -1
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/utils.ts","../src/stores/Context.ts","../src/components/styles.module.less","../src/components/Attachments.tsx","../src/components/ChatSender.tsx","../a2ui-runtime/x-card.ts","../a2ui-runtime/components/artifacts/ArtifactCard.tsx","../a2ui-runtime/components/artifacts/chart-utils.tsx","../a2ui-runtime/components/artifacts/export-utils.ts","../a2ui-runtime/components/artifacts/ChartViewer.tsx","../src/components/custom-components/agent-navigate.tsx","../src/components/custom-components/code-highlight.tsx","../src/core/session.ts","../src/components/custom-components/preview-link.tsx","../src/components/custom-components/tool-renders/index.module.less","../src/components/custom-components/tool-renders/default-render.tsx","../src/components/custom-components/tool-renders/todo-write-render.tsx","../src/components/custom-components/tool-renders/tool-call-item.tsx","../a2ui-runtime/components/artifacts/ReportViewer.tsx","../a2ui-runtime/components/artifacts/TableViewer.tsx","../a2ui-runtime/components/A2uiComponents.tsx","../a2ui-runtime/controller/meta.ts","../a2ui-runtime/controller/action.ts","../a2ui-runtime/controller/visibility.ts","../a2ui-runtime/controller/wizard.ts","../a2ui-runtime/controller/runtime.ts","../a2ui-runtime/controller/index.ts","../a2ui-runtime/renderer/context.ts","../a2ui-runtime/renderer/useA2uiRuntimeView.ts","../a2ui-runtime/renderer/A2uiMessageCards.tsx","../a2ui-runtime/renderer/protocol.ts","../a2ui-runtime/renderer/A2uiPlan.tsx","../a2ui-runtime/renderer/A2uiRuntimeProvider.tsx","../a2ui-runtime/renderer/A2uiRenderer.tsx","../src/components/MessageRender.tsx","../src/core/constants.ts","../src/stores/agent-flow.store.ts","../src/ui/common/styles.module.less","../src/ui/common/WelcomeItem.tsx","../src/ui/common/BubbleListItems.tsx","../src/services/index.ts","../src/stores/index.ts","../src/ui/common/ConversationList.tsx","../src/ui/common/ChatHeader.tsx","../src/ui/common/ConversationListHeader.tsx","../src/ui/common/ConversationListPanel.tsx","../src/components/icon-font/index.ts","../src/ui/common/FeaturesRenderer.tsx","../src/ui/common/ChatSender.tsx","../src/ui/common/ChatSenderHeader.tsx","../src/components/monaco-editor/index.tsx","../src/ui/common/UserInputPanel.tsx","../src/ui/layouts/components/styles.module.less","../src/ui/layouts/components/ChatMainPanel.tsx","../src/ui/layouts/components/ChatPreviewPanel.tsx","../src/ui/layouts/index.module.less","../src/ui/layouts/index.tsx"],"names":["React","chatAttachments","chatSender","message","isObject","forwardRef","useRef","jsx","jsxs","useEffect","useImperativeHandle","rawXCard","AntCard","AntTag","Fragment","rawMinY","rawMaxY","minY","maxY","spanY","plotW","plotH","scaleX","scaleY","y0","Space","AntButton","Button","useSnapshot","e","iconContainer","toolName","duration","statusIcon","sectionLabel","markdownContainer","sectionBlock","todoList","todoItem","statusIconWrapper","todoContent","todoText","completed","emptyText","Typography","theme","useMemo","Flex","XMarkdown","classNames","AntTable","AText","valuePath","AntSelect","AntSwitch","AntDivider","AntProgress","extractPathFromRef","extractSurfaceId","useState","isSubmitLikeActionName","isCancelLikeActionName","formatMixedContent","ReportViewer","ChartViewer","TableViewer","ArtifactCard","antdMessage","LoadingOutlined","styles_module_default","chatHeader","chatTitle","popover","conversationListPanel","createConversationButton","conversations","chatWelcomeWrap","chatWelcome","promptItem","bubbleList","messageFooter","resourceBtn","resourceBtnActive","userInputCollapse","logoArea","logoContainer","staticHalo","logoHoverWrapper","logoImage","greetingTitle","gradientText","greetingSubtitle","senderReferenceHeaderTitle","senderReferenceHeaderContent","Text","chatRecords","FileTextOutlined","RenderWrapper","proxy","isArray","config","feedback","isNullOrUnDef","Avatar","PlusOutlined","ChatSender_default","isFunction","Sender","shouldRender","useCallback","Input","CloudUploadOutlined","DeleteOutlined","Switch","Collapse","bodyWidth","inputContainer","disclaimerNotice","previewHeader","previewCloseBtn","closeIcon","rotateIcon","memo","CloseOutlined","index_module_default","chatLayout","spinWrapper","animatedSplitter","hideSplitterBar","sizes","Spin"],"mappings":"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","file":"index.esm.js","sourcesContent":["import {\n FileExcelOutlined,\n FileImageOutlined,\n FilePdfOutlined,\n FilePptOutlined,\n FileTextOutlined,\n FileUnknownOutlined,\n FileWordOutlined,\n FileZipOutlined\n} from '@ant-design/icons'\nimport { buildUrlParams, getWebSocketUrl, isArray, isDate, isDef, isFunction, isMap, isNull, isObject, isRegExp, isSet } from '@zero-library/common'\nimport dayjs from 'dayjs'\nimport React from 'react'\n\nexport function getFileExtension(fileName = '') {\n const ext = fileName.split('.').pop()\n return (ext || '').toLowerCase()\n}\n\nexport function formatFileSize(size?: number) {\n if (!size) return '0 B'\n if (size < 1024) return `${size} B`\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`\n if (size < 1024 * 1024 * 1024) return `${(size / 1024 / 1024).toFixed(1)} MB`\n return `${(size / 1024 / 1024 / 1024).toFixed(1)} GB`\n}\n\n// 根据扩展名返回图标\nexport const getFileIcon = (extension: string, fontSize = 24): React.ReactElement => {\n const baseStyle = { fontSize }\n const createIcon = (Icon: React.ComponentType<{ style?: React.CSSProperties }>, color: string) =>\n React.createElement(Icon, { style: { ...baseStyle, color } })\n if (['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp', 'svg'].includes(extension)) {\n return createIcon(FileImageOutlined, '#22c55e')\n }\n if (['pdf'].includes(extension)) {\n return createIcon(FilePdfOutlined, '#ef4444')\n }\n if (['doc', 'docx'].includes(extension)) {\n return createIcon(FileWordOutlined, '#2563eb')\n }\n if (['xls', 'xlsx', 'csv'].includes(extension)) {\n return createIcon(FileExcelOutlined, '#16a34a')\n }\n if (['ppt', 'pptx'].includes(extension)) {\n return createIcon(FilePptOutlined, '#f59e0b')\n }\n if (['zip', 'rar', '7z', 'tar', 'gz'].includes(extension)) {\n return createIcon(FileZipOutlined, '#8b5cf6')\n }\n if (['txt', 'md', 'log', 'json', 'yaml', 'yml', 'xml', 'ini', 'conf'].includes(extension)) {\n return createIcon(FileTextOutlined, '#64748b')\n }\n return createIcon(FileUnknownOutlined, '#94a3b8')\n}\n\n/**\n * 根据时间戳分类时间,返回相对时间描述\n * @param timestamp - 时间戳(毫秒),可选,默认为当前时间\n * @returns 时间分类字符串\n */\nexport const classifyTime = (timestamp?: number | string): string => {\n const now = dayjs()\n const target = dayjs(timestamp)\n\n if (target.isSame(now, 'day')) {\n return '今天'\n }\n\n const diffInDays = now.diff(target, 'day')\n if (diffInDays < 7) {\n return '最近 7 天'\n } else if (diffInDays < 30) {\n return '最近 30 天'\n } else if (diffInDays < 180) {\n return '最近半年'\n } else {\n return '更早'\n }\n}\n\n/**\n * 将变量数组转换为对象格式\n *\n * @param variables - 变量数组,包含 name, value, type\n * @returns 转换后的对象\n *\n * @remarks\n * - Boolean 类型:只要 value 不为 undefined 或 null 即保留\n * - String/Number 类型:value 不为 undefined, null, '' 时保留\n */\nexport const variablesToObject = (variables: Array<{ name: string; value?: any; type: string }>) => {\n if (!isArray(variables)) return {}\n\n const jsonTypes = ['OBJECT', 'ARRAY', 'ARRAY_STRING', 'ARRAY_NUMBER', 'ARRAY_DECIMAL', 'ARRAY_BOOLEAN', 'ARRAY_OBJECT']\n\n return variables.reduce(\n (acc, cur) => {\n if (cur.type === 'BOOLEAN') {\n if (isDef(cur.value) && !isNull(cur.value)) {\n acc[cur.name] = cur.value\n }\n } else if (jsonTypes.includes(cur.type)) {\n if (isDef(cur.value) && !isNull(cur.value)) {\n if (typeof cur.value === 'string') {\n if (cur.value === '') {\n acc[cur.name] = cur.type === 'OBJECT' ? {} : []\n } else {\n try {\n acc[cur.name] = JSON.parse(cur.value)\n } catch (e) {\n acc[cur.name] = cur.type === 'OBJECT' ? {} : []\n }\n }\n } else {\n acc[cur.name] = cur.value\n }\n }\n } else {\n if (isDef(cur.value) && !isNull(cur.value) && cur.value !== '') {\n acc[cur.name] = cur.value\n }\n }\n return acc\n },\n {} as Record<string, any>\n )\n}\n\n/**\n * 深度比较两个对象是否相等\n *\n * @param a - 第一个对象\n * @param b - 第二个对象\n * @returns 是否相等\n *\n * @example\n * deepEqual({ a: 1 }, { a: 1 }) // true\n * deepEqual([1, 2], [1, 2]) // true\n * deepEqual(new Date(1), new Date(1)) // true\n * deepEqual(new Set([1]), new Set([1])) // true\n *\n * @remarks\n * - 支持 Date、RegExp、Map、Set、Array、Function(仅作引用比较)、Object\n * - 支持循环引用检测\n * - 不处理不可枚举属性、getter/setter 和 Symbol\n */\nexport function deepEqual(a: any, b: any): boolean {\n // 使用 WeakMap 存储已比较过的对象对,处理循环引用\n const visited = new WeakMap()\n\n const isEqual = (x: any, y: any): boolean => {\n // 使用 Object.is 比较基础类型和相同引用\n if (Object.is(x, y)) return true\n\n // 只有当 x 和 y 都是对象时才检查循环引用\n if (typeof x === 'object' && !isNull(x) && typeof y === 'object' && !isNull(y)) {\n // 检查是否已经比较过这对对象(处理循环引用)\n if (visited.has(x)) {\n // 如果之前比较过 x 和 y,则直接返回结果,避免无限递归\n if (visited.get(x).has(y)) return true\n // 如果之前比较过 x 但不是和 y,则继续\n }\n\n // 记录正在比较的对象对\n if (!visited.has(x)) visited.set(x, new WeakSet())\n visited.get(x).add(y)\n\n // 同时也要记录 y->x 的比较,确保对称性\n if (!visited.has(y)) visited.set(y, new WeakSet())\n visited.get(y).add(x)\n }\n\n // === 特殊类型处理 ===\n if (isDate(x) && isDate(y)) return x.getTime() === y.getTime()\n\n if (isRegExp(x) && isRegExp(y)) return x.toString() === y.toString()\n\n if (isMap(x) && isMap(y)) {\n if (x.size !== y.size) return false\n for (const [key, val] of x.entries()) {\n if (!y.has(key)) return false\n if (!isEqual(val, y.get(key))) return false\n }\n return true\n }\n\n if (isSet(x) && isSet(y)) {\n if (x.size !== y.size) return false\n for (const val of x.values()) {\n // 使用 some 查找匹配项,支持深度比较 Set 中的复杂对象\n const hasEqual = Array.from(y.values()).some((bVal) => isEqual(val, bVal))\n if (!hasEqual) return false\n }\n return true\n }\n\n // 数组比较\n if (isArray(x) && isArray(y)) {\n if (x.length !== y.length) return false\n return x.every((item, i) => isEqual(item, y[i]))\n }\n\n // 函数(通过字符串比较)\n // if (isFunction(x) && isFunction(y)) return x.toString() === y.toString()\n\n // 函数比较(仅作引用比较,因为函数的深层比较意义不大且不可靠)\n if (isFunction(x) && isFunction(y)) return x === y\n\n // 普通对象递归比较\n if (isObject(x) && isObject(y)) {\n const keysA = Object.keys(x)\n const keysB = Object.keys(y)\n\n // 先比较键的数量\n if (keysA.length !== keysB.length) return false\n\n // 比较每个键值对\n for (const key of keysA) {\n // 检查 b 是否有这个键\n if (!keysB.includes(key)) return false\n\n // 递归比较值\n if (!isEqual(x[key], y[key])) return false\n }\n return true\n }\n\n return false\n }\n\n return isEqual(a, b)\n}\n\nimport Latex from '@ant-design/x-markdown/plugins/Latex'\n\nexport const singleTildeExtension = {\n name: 'singleTilde',\n level: 'inline' as const,\n start(src: string) {\n return src.match(/(?<!~)~(?!~)/)?.index\n },\n tokenizer(src: string) {\n const match = /^(?<!~)~(?!~)/.exec(src)\n if (match) {\n return {\n type: 'text',\n raw: match[0],\n text: match[0]\n }\n }\n return undefined\n }\n}\n\nexport const getMarkdownConfig = (options?: { breaks?: boolean }) => {\n const latexExtensions = Latex()\n const extensions = Array.isArray(latexExtensions) ? [...latexExtensions, singleTildeExtension] : [latexExtensions, singleTildeExtension]\n\n return {\n extensions: extensions as any,\n breaks: options?.breaks ?? false\n }\n}\n\n/**\n * 构建Chat WebSocket URL\n * 将 baseURL和参数组合成完整的WebSocket连接URL\n *\n * @param baseURL - WebSocket baseURL\n * @param params - 要附加到URL上的参数\n * @returns 完整的WebSocket URL\n */\nexport const getChatSocketUrl = (baseURL: string, params: Record<string, any>) => {\n return buildUrlParams(params, getWebSocketUrl(`${baseURL}/ws`), 'comma')\n}\n","import React, { createContext, useContext } from 'react'\nimport type { ChatStoreType } from '../types'\n\n/**\n * 基于泛型创建专用的聊天上下文\n * 使用 Valtio 进行状态管理,提供 Provider 和 Hook\n */\nconst ChatContext = createContext<ChatStoreType | null>(null)\n\nexport function ChatProvider({ store, children }: { store: ChatStoreType; children?: React.ReactNode }) {\n return React.createElement(ChatContext.Provider, { value: store }, children)\n}\n\nexport function useChatStore() {\n const store = useContext(ChatContext)\n if (!store) {\n throw new Error('useChatStore must be used within ChatProvider')\n }\n return store\n}\n","@keyframes loading-line {\n from {\n background-position: 200% 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.loadingMessage {\n position: relative;\n padding-bottom: 6px;\n}\n.loadingMessage::after {\n content: '';\n position: absolute;\n left: 0;\n bottom: 0;\n height: 2px;\n width: 100%;\n background: linear-gradient(90deg, #ff6b23, #af3cb8, #53b6ff);\n background-size: 200% 100%;\n animation: loading-line 1.2s linear infinite;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-content {\n padding: 0 !important;\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-card-status-uploading .ant-progress .ant-progress-text {\n display: none;\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-card-status-uploading .ant-progress .ant-progress-circle {\n animation: spin 2s linear infinite;\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-card-status-uploading .ant-attachment-list-card-content {\n gap: 4px;\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-card-status-uploading .ant-attachment-list-card-content .ant-attachment-list-card-desc {\n width: 15px;\n height: 15px;\n border: 2px solid transparent;\n border-color: #1890ff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n box-sizing: border-box;\n position: relative;\n clip-path: inset(0 0 30% 0);\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-card-status-uploading .ant-attachment-list-card-content .ant-attachment-list-card-desc .ant-attachment-list-card-ellipsis-prefix {\n display: none;\n}\n.chatSender:global.ant-sender:focus-within {\n box-shadow: none;\n}\n.chatQuoteMsg {\n margin-top: 4px;\n}\n.chatQuoteMsg:global.ant-bubble > .ant-bubble-content {\n min-height: auto;\n background-color: var(--ant-color-fill-tertiary) !important;\n color: var(--ant-color-text-tertiary);\n}\n.chatQuoteMsg .quoteTooltip {\n max-width: 100%;\n border: 1px solid #000;\n}\n.chatQuoteMsg .quoteTooltip .quoteTooltipContainer {\n max-height: 200px;\n overflow-y: auto;\n background-color: #fff;\n color: #000;\n}\n","import { CloudUploadOutlined } from '@ant-design/icons'\nimport { Attachments } from '@ant-design/x-v2'\nimport { Attachment } from '@ant-design/x-v2/es/attachments'\nimport { isNullOrUnDef, isNumber, isObject, useDebounce, useRefState } from '@zero-library/common'\nimport { App } from 'antd'\nimport { RcFile, UploadFile } from 'antd/lib/upload'\nimport { forwardRef, useEffect, useImperativeHandle, useMemo, useRef } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { getFileExtension } from '../core/utils'\nimport { useChatStore } from '../stores/Context'\nimport { FileUploadConfig, InputFile } from '../types'\nimport styles from './styles.module.less'\n/**\n * 附件组件属性接口\n */\nexport interface AttachmentsProps {\n /** 文件上传函数,接收 FormData 并返回上传结果 */\n fileUpload: (formData: FormData, signal?: AbortSignal) => Promise<R<InputFile[]>>\n /** 文件上传配置列表,定义允许的文件类型和大小限制 */\n fileUploadConfig?: FileUploadConfig\n /** 额外的上传参数,会附加到 FormData 中 */\n extraParams?: ObjectType<string | undefined>\n /** 当前文件列表 */\n fileList?: InputFile[]\n /** 文件列表变化回调函数 */\n onChange: (fileList: InputFile[]) => void\n}\n/**\n * 附件文件类型,继承自 Ant Design X 的 Attachment 类型\n */\ntype AttachedFile = Attachment & InputFile & { abortController?: AbortController }\n\n/**\n * 附件上传组件\n * 支持多文件上传、文件类型验证、文件大小限制等功能\n */\nexport default forwardRef(({ fileUpload, fileUploadConfig, fileList = [], onChange, extraParams }: AttachmentsProps, ref) => {\n const { message } = App.useApp()\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n const fileListRef = useRef<InputFile[]>([])\n const [attachedFiles, setAttachedFiles, getAttachedFiles] = useRefState<AttachedFile[]>([])\n // 初始化 fileList 映射为 Attachments 所需格式\n useEffect(() => {\n if (JSON.stringify(fileList) !== JSON.stringify(fileListRef.current)) {\n fileListRef.current = fileList\n const mapped: AttachedFile[] = fileList.map((file) => ({\n ...file,\n uid: file.id,\n url: file.url || file.id,\n status: 'done'\n }))\n setAttachedFiles(mapped)\n }\n }, [fileList])\n useEffect(() => {\n const files = attachedFiles\n .filter((file) => file.status === 'done')\n .map((file) => {\n const f = { ...file }\n delete f.status\n delete f.size\n return f as unknown as InputFile\n })\n fileListRef.current = files\n onChange(files)\n }, [attachedFiles])\n\n const onErrorTip = useDebounce((errorMsg: string) => {\n message.error(errorMsg)\n }, 300)\n\n /** 根据文件类型找到对应的 upload config */\n const findConfig = (file: RcFile): string => {\n return fileUploadConfig?.allowedTypes?.find((type) => type === getFileExtension(file.name)) || ''\n }\n\n const onBeforeUpload = (files: RcFile[]) => {\n // 多规则支持:逐个文件校验\n for (const file of files) {\n const cfg = findConfig(file)\n\n if (!cfg) {\n onErrorTip(`不支持的文件类型:${file.name} (${file.type})`)\n return Promise.reject(false)\n }\n\n // 校验数量\n if (isNumber(fileUploadConfig?.maxCount)) {\n const currentCount = attachedFiles.length\n\n if (currentCount + 1 > fileUploadConfig?.maxCount) {\n onErrorTip(`【${file.name}】所属类型最多只能上传 ${fileUploadConfig?.maxCount} 个文件`)\n return Promise.reject(false)\n }\n }\n }\n }\n const onCustomRequest = async ({ file }: any) => {\n const cfg = findConfig(file)\n\n if (!cfg) {\n onErrorTip(`不支持的文件类型:${file.name}`)\n return\n }\n\n // 校验大小\n if (fileUploadConfig?.maxSize && file.size > fileUploadConfig?.maxSize * 1024 * 1024) {\n onErrorTip(`文件大小不能超过 ${fileUploadConfig?.maxSize} MB`)\n return\n }\n\n const abortController = new AbortController()\n\n setAttachedFiles([\n ...getAttachedFiles(),\n {\n uid: file.uid,\n status: 'uploading',\n percent: 70,\n size: file.size,\n type: file.type,\n name: file.name,\n url: URL.createObjectURL(file),\n abortController\n } as AttachedFile\n ])\n try {\n const formData = new FormData()\n formData.append('file', file)\n if (isObject(extraParams)) {\n Object.keys(extraParams).forEach((key) => {\n if (isNullOrUnDef(extraParams[key])) return\n formData.append(key, extraParams[key])\n })\n }\n // 发送文件到后端\n const { data } = await fileUpload(formData, abortController.signal)\n const uploadedFile = data![0]\n\n // 使用后端返回的 conversationId 和 path 拼接预览 URL\n let previewUrl = uploadedFile.id\n\n if (uploadedFile.conversationId && uploadedFile.path) {\n previewUrl = chatStore.config.services.request.getPreviewUrl(agentState.agentInfo.id, uploadedFile.conversationId, uploadedFile.path)\n }\n\n setAttachedFiles(\n getAttachedFiles().map((f) => {\n if (f.uid === file.uid) {\n return { ...uploadedFile, uid: file.uid, url: previewUrl, status: 'done', size: f.size }\n } else {\n return f\n }\n })\n )\n } catch (error) {\n if (error?.name === 'CanceledError' || error?.message === 'canceled') {\n return\n }\n setAttachedFiles(\n getAttachedFiles().map((f) => {\n if (f.uid === file.uid) {\n return { ...f, status: 'error', description: '上传失败' }\n } else {\n return f\n }\n })\n )\n }\n }\n const onRemove = (file: UploadFile<any>) => {\n // 中断上传请求\n const currentFile = getAttachedFiles().find((f) => f.uid === file.uid)\n if (currentFile?.abortController) {\n currentFile.abortController.abort()\n }\n // 删除文件\n setAttachedFiles(attachedFiles.filter((f) => f.uid !== file.uid))\n\n const libraryId = chatStore.config.params.convMeta?.libraryId\n const filePath = (file as any).path\n if (libraryId && filePath) {\n try {\n } catch (error) {\n console.error('Delete folder failed:', error)\n }\n }\n }\n\n useImperativeHandle(\n ref,\n () => ({\n validateFile: () => {\n const files = getAttachedFiles()\n const uploadingFiles = files.filter((file) => file.status === 'uploading')\n if (uploadingFiles.length > 0) {\n onErrorTip('请等待所有文件上传完成')\n return false\n }\n const errorFiles = files.filter((file) => file.status === 'error')\n if (errorFiles.length > 0) {\n onErrorTip('请检查上传失败的文件')\n return false\n }\n return true\n }\n }),\n []\n )\n\n const acceptStr = useMemo(() => {\n const allTypes = fileUploadConfig?.allowedTypes.map((type) => `.${type}`) || []\n return allTypes.length ? allTypes.join(',') : undefined\n }, [fileUploadConfig])\n\n return (\n <Attachments\n className={styles.chatAttachments}\n accept={acceptStr}\n multiple={true}\n customRequest={onCustomRequest}\n beforeUpload={(file, files) => onBeforeUpload(files)}\n items={attachedFiles}\n onRemove={onRemove}\n overflow=\"wrap\"\n placeholder={(type) =>\n type === 'drop'\n ? { title: '将文件放到这里' }\n : {\n icon: <CloudUploadOutlined />,\n title: '提交文件',\n description: (\n <div>\n <div>单击或拖动文件到此区域进行上传; </div>\n {fileUploadConfig?.allowedTypes && <div>支持扩展名:{fileUploadConfig?.allowedTypes.join(',')}; </div>}\n </div>\n )\n }\n }\n />\n )\n})\n","import { PaperClipOutlined } from '@ant-design/icons'\nimport { Sender, Suggestion } from '@ant-design/x-v2'\nimport { useSyncInput } from '@zero-library/common'\nimport { Badge, Button, ButtonProps, Flex, GetRef } from 'antd'\nimport { forwardRef, useEffect, useImperativeHandle, useRef } from 'react'\nimport { FileUploadConfig, InputFile } from '../types'\nimport ChatSendAttachments, { AttachmentsProps } from './Attachments'\nimport styles from './styles.module.less'\n\n/**\n * ChatSender 组件暴露的方法接口\n */\nexport interface ChatSenderHandle {\n /** 聚焦输入框 */\n focus: (options?: { cursor?: 'start' | 'end' }) => void\n}\n/**\n * 文件上传配置接口\n */\ninterface FileUpload {\n /** 上传时的额外参数 */\n params?: ObjectType<any>\n /** 文件上传配置列表 */\n config: FileUploadConfig\n /** 文件上传请求函数 */\n request: AttachmentsProps['fileUpload']\n}\n\n/**\n * ChatSender 组件属性接口\n */\nexport interface SenderProps {\n /** 输入框占位符 */\n placeholder?: string\n /** 输入框内容 */\n content?: string\n /** 文件列表 */\n fileList?: InputFile[]\n /** 是否打开文件选择头部 */\n headerOpen?: boolean\n /** 是否正在发送消息 */\n loading?: boolean\n /** 内容变化回调 */\n onContentChange: (value: string) => void\n /** 文件列表变化回调 */\n onFileListChange: (files: InputFile[]) => void\n /** 头部打开状态变化回调 */\n onHeaderOpenChange: (open: boolean) => void\n /** 发送消息回调 */\n onSend: () => void\n /** 取消发送回调 */\n onCancel?: () => void\n /** 输入框聚焦回调 */\n onFocus?: () => void\n /** 头部额外内容 */\n extraHeader?: React.ReactNode\n /** 底部额外内容 */\n extraFooter?: React.ReactNode\n /** 底部下方额外内容 */\n extraFooterBelow?: React.ReactNode\n /** 发送按钮属性 */\n sendBtnProps?: ButtonProps\n /** 文件上传配置 */\n fileUpload?: FileUpload\n}\n\nexport default forwardRef<ChatSenderHandle, SenderProps>(\n (\n {\n placeholder,\n content,\n fileList = [],\n headerOpen = false,\n loading = false,\n onContentChange,\n onFileListChange,\n onHeaderOpenChange,\n onSend,\n onCancel,\n onFocus,\n extraHeader,\n extraFooter,\n extraFooterBelow,\n sendBtnProps,\n fileUpload\n },\n ref\n ) => {\n const senderRef = useRef<GetRef<typeof Sender>>(null)\n const { inputValue, setInputValue } = useSyncInput(content || '', onContentChange)\n\n const attachmentsNode = fileUpload?.config?.enabled && (\n <Badge dot={!!fileList?.length && !headerOpen}>\n <Button type=\"text\" icon={<PaperClipOutlined />} onClick={() => onHeaderOpenChange(!headerOpen)} />\n </Badge>\n )\n const attachmentsRef = useRef<any>()\n const senderHeader = (\n <>\n <Sender.Header title=\"选择文件\" open={headerOpen} onOpenChange={onHeaderOpenChange}>\n <ChatSendAttachments\n ref={attachmentsRef}\n fileList={fileList}\n fileUpload={fileUpload.request}\n onChange={onFileListChange}\n fileUploadConfig={fileUpload.config}\n extraParams={fileUpload.params}\n />\n </Sender.Header>\n {extraHeader}\n </>\n )\n const onSubmit = () => {\n if (!attachmentsRef.current?.validateFile || attachmentsRef.current.validateFile()) {\n onSend()\n }\n }\n\n const isFocusedRef = useRef(false)\n\n useEffect(() => {\n if (!content) return\n if (!isFocusedRef.current) {\n senderRef.current?.focus({ cursor: 'end' })\n }\n }, [content])\n\n // 暴露方法给外部组件\n useImperativeHandle(\n ref,\n () => ({\n focus: (options?: { cursor?: 'start' | 'end' }) => {\n senderRef.current?.focus(options)\n }\n }),\n []\n )\n\n return (\n <Suggestion items={[]} onSelect={(itemVal) => setInputValue(`[${itemVal}]:`)}>\n {({}) => (\n <Sender\n className={styles.chatSender}\n ref={senderRef}\n value={inputValue}\n header={senderHeader}\n onSubmit={onSubmit}\n onChange={setInputValue}\n onFocus={() => {\n isFocusedRef.current = true\n onFocus?.()\n }}\n onBlur={() => {\n isFocusedRef.current = false\n }}\n autoSize={{ minRows: 2, maxRows: 6 }}\n suffix={false}\n onCancel={onCancel}\n footer={(_, { components }) => {\n const { SendButton, LoadingButton } = components\n return (\n <Flex vertical>\n <Flex justify=\"space-between\" align=\"center\" gap={12}>\n <Flex className=\"flex-1\" gap={6} align=\"center\">\n {attachmentsNode}\n <>{extraFooter}</>\n </Flex>\n <Flex align=\"center\" style={{ marginLeft: 'auto' }} gap={6}>\n {loading ? <LoadingButton disabled={false} /> : <SendButton {...sendBtnProps} />}\n </Flex>\n </Flex>\n <>{extraFooterBelow}</>\n </Flex>\n )\n }}\n placeholder={placeholder || '有什么我能帮您的吗?'}\n />\n )}\n </Suggestion>\n )\n }\n)\n","import type React from 'react'\n// 关键步骤:项目当前缺少 x-card 完整类型声明,使用本地桥接文件集中兜底,避免业务代码出现类型噪音。\n// @ts-ignore\nimport { registerCatalog as rawRegisterCatalog, XCard as rawXCard } from '@ant-design/x-card'\n\nexport type Catalog = {\n catalogId: string\n components: Record<string, any>\n}\n\nexport const registerCatalog = (catalog: Catalog) => {\n rawRegisterCatalog?.(catalog as any)\n}\n\nexport const XCard = rawXCard as {\n Box: React.ComponentType<{\n commands: any[]\n components?: Record<string, React.ComponentType<any>>\n onAction?: (payload: any) => void\n children?: React.ReactNode\n }>\n Card: React.ComponentType<{ id: string }>\n}\n","import { Card as AntCard, Tag as AntTag, Space, Typography } from 'antd'\nimport React from 'react'\n\nconst { Text: AText } = Typography\n\n/** 根据制品类型生成一个可读的默认标题。 */\nfunction getArtifactFallbackTitle(type: string) {\n const normalizedType = String(type || '').toLowerCase()\n if (normalizedType === 'report') return '未命名报告'\n if (normalizedType === 'chart') return '未命名图表'\n if (normalizedType === 'table') return '未命名表格'\n return '未命名内容'\n}\n\n/** 通用制品兜底卡片,在无法渲染具体内容时至少展示类型和标题。 */\nexport const ArtifactCard: React.FC<{\n type: string\n artifactId: string\n title?: string\n payload?: any\n}> = ({ type, title }) => (\n <AntCard size=\"small\" style={{ borderRadius: 12 }}>\n <Space align=\"center\" wrap>\n <AntTag color=\"blue\">{type}</AntTag>\n <AText strong>{title || getArtifactFallbackTitle(type)}</AText>\n </Space>\n </AntCard>\n)\n","import React from 'react'\n\nfunction toVChartSpec(raw: any): any | null {\n const palette = [\n '#1677ff',\n '#52c41a',\n '#faad14',\n '#f5222d',\n '#722ed1',\n '#13c2c2',\n '#eb2f96',\n '#fa541c',\n '#a0d911',\n '#2f54eb',\n '#9254de',\n '#08979c',\n '#d46b08',\n '#7cb305',\n '#c41d7f',\n '#ad2102',\n '#1d39c4',\n '#389e0d',\n '#d4380d',\n '#531dab'\n ]\n\n const t = String(raw?.type ?? '').toLowerCase()\n const xs = Array.isArray(raw?.x) ? raw.x : null\n const ys = Array.isArray(raw?.y) ? raw.y : null\n if (!xs || !ys) return null\n\n const n = Math.min(xs.length, ys.length)\n if (n <= 0) return null\n\n const axisBottom = {\n orient: 'bottom',\n label: { autoHide: true, autoRotate: true, autoRotateAngle: [0, 45, 90] }\n }\n const axisLeft = { orient: 'left', label: { autoHide: true } }\n\n if (t === 'scatter') {\n const values = Array.from({ length: n }, (_, i) => ({\n _i: i,\n x: typeof xs[i] === 'number' ? xs[i] : Number(xs[i]),\n y: typeof ys[i] === 'number' ? ys[i] : Number(ys[i])\n })).filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y))\n if (values.length === 0) return null\n return {\n type: 'scatter',\n data: [{ id: 'data', values }],\n xField: 'x',\n yField: 'y',\n axes: [axisBottom, axisLeft],\n point: {\n style: {\n size: 4,\n fillOpacity: 0.9,\n fill: (d: any) => palette[(d?._i ?? 0) % palette.length]\n }\n }\n }\n }\n\n if (t === 'pie') {\n const values = Array.from({ length: n }, (_, i) => ({\n _i: i,\n category: String(xs[i]),\n value: typeof ys[i] === 'number' ? ys[i] : Number(ys[i])\n })).filter((p) => Number.isFinite(p.value))\n if (values.length === 0) return null\n return {\n type: 'pie',\n data: [{ id: 'data', values }],\n categoryField: 'category',\n valueField: 'value',\n legends: { visible: false },\n label: { visible: true },\n outerRadius: 0.8,\n pie: {\n style: {\n fill: (d: any) => palette[(d?._i ?? 0) % palette.length],\n stroke: '#fff',\n lineWidth: 1\n }\n }\n }\n }\n\n if (t === 'bar' || t === 'line') {\n const values = Array.from({ length: n }, (_, i) => ({\n _i: i,\n category: String(xs[i]),\n value: typeof ys[i] === 'number' ? ys[i] : Number(ys[i])\n })).filter((p) => Number.isFinite(p.value))\n if (values.length === 0) return null\n return {\n type: t,\n data: [{ id: 'data', values }],\n xField: 'category',\n yField: 'value',\n axes: [axisBottom, axisLeft],\n ...(t === 'line'\n ? {\n point: { visible: true, style: { size: 3, fill: '#1677ff', fillOpacity: 0.9 } },\n line: { style: { lineWidth: 2, stroke: '#1677ff' } }\n }\n : null),\n ...(t === 'bar'\n ? {\n legends: { visible: false },\n bar: {\n style: {\n cornerRadius: 4,\n fill: (d: any) => palette[(d?._i ?? 0) % palette.length]\n }\n }\n }\n : null)\n }\n }\n\n return null\n}\n\nfunction toLegendColor(i: number) {\n const palette = [\n '#1677ff',\n '#52c41a',\n '#faad14',\n '#f5222d',\n '#722ed1',\n '#13c2c2',\n '#eb2f96',\n '#fa541c',\n '#a0d911',\n '#2f54eb',\n '#9254de',\n '#08979c',\n '#d46b08',\n '#7cb305',\n '#c41d7f',\n '#ad2102',\n '#1d39c4',\n '#389e0d',\n '#d4380d',\n '#531dab'\n ]\n return palette[i] ?? palette[i % palette.length]\n}\n\nfunction formatCompactNumber(v: number) {\n const abs = Math.abs(v)\n if (abs >= 10000) return `${Math.round(v)}`\n if (abs >= 1000) return `${Math.round(v)}`\n if (abs >= 10) return `${Math.round(v)}`\n if (Number.isInteger(v)) return String(v)\n return v.toFixed(1)\n}\n\nfunction renderMiniChart(spec: any, opts?: { containerWidth?: number }): React.ReactNode | null {\n const t = String(spec?.type ?? '').toLowerCase()\n if (t !== 'line' && t !== 'bar' && t !== 'pie' && t !== 'scatter') return null\n\n const xs = Array.isArray(spec?.x) ? spec.x : null\n const ys = Array.isArray(spec?.y) ? spec.y : null\n if (!xs || !ys || xs.length === 0 || ys.length === 0) return null\n\n const n = Math.min(xs.length, ys.length)\n const pairs = Array.from({ length: n }, (_, i) => ({\n label: String(xs[i]),\n x: xs[i],\n y: typeof ys[i] === 'number' ? ys[i] : Number(ys[i])\n })).filter((p) => Number.isFinite(p.y))\n if (pairs.length === 0) return null\n if (t === 'line' && pairs.length < 2) return null\n\n const height = 180\n const left = 44\n const right = 18\n const top = 14\n const bottom = 30\n\n const baseWidth = Math.max(520, Math.floor(opts?.containerWidth ?? 0))\n const minBarPx = 22\n const minPointPx = 32\n const neededWidth = left + right + Math.max(pairs.length * (t === 'bar' ? minBarPx : minPointPx), 320)\n const width = Math.max(baseWidth, neededWidth)\n\n const colors = [\n '#1677ff',\n '#52c41a',\n '#faad14',\n '#f5222d',\n '#722ed1',\n '#13c2c2',\n '#eb2f96',\n '#fa541c',\n '#a0d911',\n '#2f54eb',\n '#9254de',\n '#08979c',\n '#d46b08',\n '#7cb305',\n '#c41d7f',\n '#ad2102'\n ]\n\n const formatNumber = (v: number) => {\n if (Number.isInteger(v)) return String(v)\n const abs = Math.abs(v)\n if (abs < 1) return v.toFixed(2)\n return v.toFixed(1)\n }\n\n const textColorForHex = (hex: string) => {\n const m = hex.replace('#', '').trim()\n if (m.length !== 6) return '#fff'\n const r = parseInt(m.slice(0, 2), 16)\n const g = parseInt(m.slice(2, 4), 16)\n const b = parseInt(m.slice(4, 6), 16)\n const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255\n return luminance > 0.6 ? '#111' : '#fff'\n }\n\n const colorAt = (i: number) => colors[i] ?? colors[i % colors.length]\n\n if (t === 'pie') {\n const total = pairs.reduce((sum, p) => sum + p.y, 0)\n if (total <= 0) return null\n\n let currentAngle = 0\n const centerX = width / 2 - 80\n const centerY = height / 2\n const radius = 60\n\n return (\n <div style={{ width: '100%', overflowX: 'auto' }}>\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {pairs.map((p, i) => {\n const sliceAngle = (p.y / total) * 2 * Math.PI\n const x1 = centerX + radius * Math.cos(currentAngle)\n const y1 = centerY + radius * Math.sin(currentAngle)\n const x2 = centerX + radius * Math.cos(currentAngle + sliceAngle)\n const y2 = centerY + radius * Math.sin(currentAngle + sliceAngle)\n\n const largeArcFlag = sliceAngle > Math.PI ? 1 : 0\n const pathData = `M ${centerX} ${centerY} L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2} Z`\n\n const midAngle = currentAngle + sliceAngle / 2\n const labelRadius = radius * 0.7\n const labelX = centerX + labelRadius * Math.cos(midAngle)\n const labelY = centerY + labelRadius * Math.sin(midAngle)\n const ratio = p.y / total\n const percentText = `${(ratio * 100).toFixed(1)}%`\n const valueText = formatNumber(p.y)\n const showInner = ratio >= 0.08 && sliceAngle >= 0.35\n const fill = colorAt(i)\n\n currentAngle += sliceAngle\n\n return (\n <g key={i}>\n <path d={pathData} fill={fill} stroke=\"#fff\" strokeWidth=\"1\" />\n {showInner ? (\n <>\n <text x={labelX} y={labelY - 2} textAnchor=\"middle\" style={{ fontSize: 11, fill: textColorForHex(fill) }}>\n {valueText}\n </text>\n <text x={labelX} y={labelY + 12} textAnchor=\"middle\" style={{ fontSize: 10, fill: textColorForHex(fill) }}>\n {percentText}\n </text>\n </>\n ) : null}\n <rect x={width - 140} y={20 + i * 20} width={12} height={12} fill={fill} rx={2} />\n <text x={width - 120} y={30 + i * 20} style={{ fontSize: 12, fill: '#666' }}>\n {p.label}: {valueText} ({percentText})\n </text>\n </g>\n )\n })}\n </svg>\n </div>\n )\n }\n\n if (t === 'scatter') {\n const numericPairs = pairs\n .map((p) => ({\n ...p,\n x: typeof p.x === 'number' ? p.x : Number(p.x)\n }))\n .filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y))\n if (numericPairs.length === 0) return null\n\n const rawMinX = Math.min(...numericPairs.map((p) => p.x))\n const rawMaxX = Math.max(...numericPairs.map((p) => p.x))\n const rawMinY = Math.min(...numericPairs.map((p) => p.y))\n const rawMaxY = Math.max(...numericPairs.map((p) => p.y))\n\n const spanX0 = rawMaxX - rawMinX\n const spanY0 = rawMaxY - rawMinY\n const padX = (spanX0 || Math.abs(rawMaxX) || 1) * 0.06\n const padY = (spanY0 || Math.abs(rawMaxY) || 1) * 0.08\n\n const minX = rawMinX >= 0 ? Math.max(0, rawMinX - padX) : rawMinX - padX\n const maxX = rawMaxX <= 0 ? Math.min(0, rawMaxX + padX) : rawMaxX + padX\n const minY = rawMinY >= 0 ? Math.max(0, rawMinY - padY) : rawMinY - padY\n const maxY = rawMaxY <= 0 ? Math.min(0, rawMaxY + padY) : rawMaxY + padY\n\n const spanX = maxX - minX || 1\n const spanY = maxY - minY || 1\n\n const plotW = width - left - right\n const plotH = height - top - bottom\n\n const scaleX = (x: number) => left + ((x - minX) * plotW) / spanX\n const scaleY = (y: number) => top + ((maxY - y) * plotH) / spanY\n\n const ticksX = Array.from({ length: 5 }, (_, i) => minX + (i * spanX) / 4)\n const ticksY = Array.from({ length: 5 }, (_, i) => minY + (i * spanY) / 4)\n\n const x0 = minY < 0 && maxY > 0 ? scaleY(0) : null\n const y0 = minX < 0 && maxX > 0 ? scaleX(0) : null\n\n const formatAxisNumber = (v: number) => {\n const abs = Math.abs(v)\n if (abs >= 1000) return String(Math.round(v))\n if (abs >= 10) return String(Math.round(v))\n return formatNumber(v)\n }\n\n return (\n <div style={{ width: '100%', overflowX: 'auto' }}>\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {ticksY.map((value, idx) => {\n const y = scaleY(value)\n return (\n <g key={`y_${idx}`}>\n <line x1={left} y1={y} x2={width - right} y2={y} stroke={idx === 0 ? '#eee' : '#f0f0f0'} />\n <text x={left - 6} y={y + 4} textAnchor=\"end\" style={{ fontSize: 10, fill: '#999' }}>\n {formatAxisNumber(value)}\n </text>\n </g>\n )\n })}\n {ticksX.map((value, idx) => {\n const x = scaleX(value)\n return (\n <g key={`x_${idx}`}>\n <line x1={x} y1={top} x2={x} y2={height - bottom} stroke={idx === 0 ? '#eee' : '#f0f0f0'} />\n <text x={x} y={height - 8} textAnchor=\"middle\" style={{ fontSize: 10, fill: '#999' }}>\n {formatAxisNumber(value)}\n </text>\n </g>\n )\n })}\n\n <line x1={left} y1={top} x2={left} y2={height - bottom} stroke=\"#eee\" />\n <line x1={left} y1={height - bottom} x2={width - right} y2={height - bottom} stroke=\"#eee\" />\n\n {typeof x0 === 'number' ? <line x1={left} y1={x0} x2={width - right} y2={x0} stroke=\"#e6f4ff\" /> : null}\n {typeof y0 === 'number' ? <line x1={y0} y1={top} x2={y0} y2={height - bottom} stroke=\"#e6f4ff\" /> : null}\n\n {numericPairs.map((p, i) => {\n const x = scaleX(p.x)\n const y = scaleY(p.y)\n return (\n <g key={i}>\n <circle cx={x} cy={y} r=\"3\" fill={colors[0]} opacity=\"0.85\" />\n </g>\n )\n })}\n </svg>\n </div>\n )\n }\n\n const rawMinY = Math.min(...pairs.map((p) => p.y))\n const rawMaxY = Math.max(...pairs.map((p) => p.y))\n const minY = Math.min(0, rawMinY)\n const maxY = Math.max(0, rawMaxY)\n const spanY = maxY - minY || 1\n\n const plotW = width - left - right\n const plotH = height - top - bottom\n\n const scaleX = (i: number) => left + (i * plotW) / Math.max(1, pairs.length - 1)\n const scaleY = (y: number) => top + ((maxY - y) * plotH) / spanY\n\n const ticks = Array.from({ length: 5 }, (_, i) => minY + (i * spanY) / 4)\n const maxLabels = Math.max(2, Math.floor(plotW / 70))\n const labelStep = Math.max(1, Math.ceil(pairs.length / maxLabels))\n\n if (t === 'line') {\n const points = pairs.map((p, i) => `${scaleX(i)},${scaleY(p.y)}`).join(' ')\n return (\n <div style={{ width: '100%', overflowX: 'auto' }}>\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {ticks.map((value, idx) => {\n const y = scaleY(value)\n return (\n <g key={idx}>\n <line x1={left} y1={y} x2={width - right} y2={y} stroke={idx === 0 ? '#eee' : '#f0f0f0'} />\n <text x={left - 6} y={y + 4} textAnchor=\"end\" style={{ fontSize: 10, fill: '#999' }}>\n {formatNumber(value)}\n </text>\n </g>\n )\n })}\n <line x1={left} y1={top} x2={left} y2={height - bottom} stroke=\"#eee\" />\n <polyline fill=\"none\" stroke=\"#1677ff\" strokeWidth=\"2.5\" points={points} />\n {pairs.map((p, i) => {\n const x = scaleX(i)\n const y = scaleY(p.y)\n const showLabel = i % labelStep === 0 || i === pairs.length - 1\n return (\n <g key={i}>\n <circle cx={x} cy={y} r=\"3\" fill=\"#1677ff\" />\n {showLabel ? (\n <text x={x} y={height - 8} textAnchor=\"middle\" style={{ fontSize: 10, fill: '#999' }}>\n {p.label}\n </text>\n ) : null}\n </g>\n )\n })}\n </svg>\n </div>\n )\n }\n\n const barW = plotW / pairs.length\n const y0 = scaleY(0)\n const showValueLabel = barW >= 18\n const xAxisY = height - bottom\n return (\n <div style={{ width: '100%', overflowX: 'auto' }}>\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {ticks.map((value, idx) => {\n const y = scaleY(value)\n return (\n <g key={idx}>\n <line x1={left} y1={y} x2={width - right} y2={y} stroke={idx === 0 ? '#eee' : '#f0f0f0'} />\n <text x={left - 6} y={y + 4} textAnchor=\"end\" style={{ fontSize: 10, fill: '#999' }}>\n {formatNumber(value)}\n </text>\n </g>\n )\n })}\n <line x1={left} y1={top} x2={left} y2={height - bottom} stroke=\"#eee\" />\n <line x1={left} y1={xAxisY} x2={width - right} y2={xAxisY} stroke=\"#eee\" />\n <line x1={left} y1={y0} x2={width - right} y2={y0} stroke=\"#e6f4ff\" />\n {pairs.map((p, i) => {\n const valueY = scaleY(p.y)\n const barH = Math.abs(valueY - y0)\n const x = left + i * barW + 2\n const cx = left + i * barW + barW / 2\n const y = Math.min(valueY, y0)\n const labelY = p.y >= 0 ? y - 4 : y + barH + 12\n const showLabel = i % labelStep === 0 || i === pairs.length - 1\n return (\n <g key={i}>\n <rect x={x} y={y} width={Math.max(2, barW - 4)} height={barH} fill={colorAt(i)} rx={4} />\n {showValueLabel ? (\n <text x={cx} y={labelY} textAnchor=\"middle\" style={{ fontSize: 10, fill: '#666' }}>\n {formatNumber(p.y)}\n </text>\n ) : null}\n <line x1={cx} y1={xAxisY} x2={cx} y2={xAxisY + 4} stroke=\"#e6e6e6\" />\n {showLabel ? (\n <text x={cx} y={height - 8} textAnchor=\"middle\" style={{ fontSize: 10, fill: '#999' }}>\n {p.label}\n </text>\n ) : null}\n </g>\n )\n })}\n </svg>\n </div>\n )\n}\n\nexport { formatCompactNumber, renderMiniChart, toLegendColor, toVChartSpec }\n","function sanitizeFileName(name: string) {\n return (\n name\n // eslint-disable-next-line no-control-regex\n .replace(/[\\\\/:*?\"<>|\\u0000-\\u001F]/g, '_')\n .replace(/\\s+/g, ' ')\n .trim()\n )\n}\n\nfunction downloadBlob(blob: Blob, fileName: string) {\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = sanitizeFileName(fileName) || 'download'\n document.body.appendChild(a)\n a.click()\n a.remove()\n URL.revokeObjectURL(url)\n}\n\nfunction escapeCsvCell(value: unknown) {\n const raw = value === null || value === undefined ? '' : String(value)\n const needsQuote = /[\",\\n\\r]/.test(raw)\n const escaped = raw.replace(/\"/g, '\"\"')\n return needsQuote ? `\"${escaped}\"` : escaped\n}\n\nasync function exportSvgElementAsPng(svgEl: SVGSVGElement, fileName: string) {\n const serializer = new XMLSerializer()\n const svgText = serializer.serializeToString(svgEl)\n const blob = new Blob([svgText], { type: 'image/svg+xml;charset=utf-8' })\n const url = URL.createObjectURL(blob)\n\n const wAttr = svgEl.getAttribute('width')\n const hAttr = svgEl.getAttribute('height')\n const width = wAttr ? Number(wAttr) : svgEl.viewBox.baseVal?.width || 520\n const height = hAttr ? Number(hAttr) : svgEl.viewBox.baseVal?.height || 180\n\n const img = new Image()\n img.crossOrigin = 'anonymous'\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve()\n img.onerror = () => reject(new Error('image load failed'))\n img.src = url\n })\n\n const ratio = Math.max(1, Math.min(3, window.devicePixelRatio || 1))\n const canvas = document.createElement('canvas')\n canvas.width = Math.round(width * ratio)\n canvas.height = Math.round(height * ratio)\n const ctx = canvas.getContext('2d')\n if (!ctx) {\n URL.revokeObjectURL(url)\n return\n }\n ctx.scale(ratio, ratio)\n ctx.drawImage(img, 0, 0, width, height)\n URL.revokeObjectURL(url)\n\n const pngBlob: Blob | null = await new Promise((resolve) => {\n canvas.toBlob((b) => resolve(b), 'image/png')\n })\n if (!pngBlob) return\n downloadBlob(pngBlob, fileName)\n}\n\nasync function exportCanvasElementAsPng(canvas: HTMLCanvasElement, fileName: string) {\n const pngBlob: Blob | null = await new Promise((resolve) => {\n canvas.toBlob((b) => resolve(b), 'image/png')\n })\n if (!pngBlob) return\n downloadBlob(pngBlob, fileName)\n}\n\nfunction exportTextFile(text: string, fileName: string, mime = 'text/plain;charset=utf-8') {\n downloadBlob(new Blob([text], { type: mime }), fileName)\n}\n\nfunction exportJsonFile(data: unknown, fileName: string) {\n const json = JSON.stringify(data ?? null, null, 2)\n exportTextFile(json, fileName, 'application/json;charset=utf-8')\n}\n\nexport { downloadBlob, escapeCsvCell, exportCanvasElementAsPng, exportJsonFile, exportSvgElementAsPng, exportTextFile, sanitizeFileName }\n","import { Button as AntButton, Card as AntCard, Space } from 'antd'\nimport React from 'react'\nimport { ArtifactCard } from './ArtifactCard'\nimport { renderMiniChart } from './chart-utils'\nimport { exportCanvasElementAsPng, exportSvgElementAsPng, sanitizeFileName } from './export-utils'\n\n/** 图表制品渲染器,优先使用 VChart,缺少 spec 时回退到通用制品卡片。 */\nexport const ChartViewer: React.FC<{ artifactId: string; title?: string; payload?: any }> = ({ artifactId, title, payload }) => {\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const [containerWidth, setContainerWidth] = React.useState<number>(0)\n const spec = payload?.spec\n const needsContainerWidth = true\n\n /** 迷你图模式下依赖容器宽度,因此在尺寸变化时重新计算。 */\n React.useLayoutEffect(() => {\n if (!needsContainerWidth) return\n const el = containerRef.current\n if (!el) return\n let frame = 0\n const update = () => {\n const nextWidth = el.clientWidth || 0\n setContainerWidth((prev) => (prev === nextWidth ? prev : nextWidth))\n }\n const scheduleUpdate = () => {\n if (frame) window.cancelAnimationFrame(frame)\n frame = window.requestAnimationFrame(update)\n }\n scheduleUpdate()\n const ro = new ResizeObserver(() => scheduleUpdate())\n ro.observe(el)\n return () => {\n ro.disconnect()\n if (frame) window.cancelAnimationFrame(frame)\n }\n }, [needsContainerWidth])\n\n /** 缺少 chart spec 时退回到占位卡片。 */\n if (!spec) {\n return <ArtifactCard type=\"chart\" artifactId={artifactId} title={title} payload={payload} />\n }\n\n const node = renderMiniChart(spec, { containerWidth })\n if (!node) {\n return <ArtifactCard type=\"chart\" artifactId={artifactId} title={title} payload={payload} />\n }\n const exportBase = sanitizeFileName(title || artifactId || 'chart')\n /** 优先导出 SVG 图,再退回 Canvas 导出 PNG。 */\n const exportPng = async () => {\n const svg = containerRef.current?.querySelector('svg')\n if (svg) {\n await exportSvgElementAsPng(svg, `${exportBase}.png`)\n return\n }\n const canvas = containerRef.current?.querySelector('canvas')\n if (canvas) {\n await exportCanvasElementAsPng(canvas, `${exportBase}.png`)\n }\n }\n\n return (\n <AntCard\n size=\"small\"\n style={{ borderRadius: 12 }}\n title={title || '图表'}\n extra={\n <Space size={4}>\n <AntButton size=\"small\" type=\"text\" onClick={exportPng}>\n 导出PNG\n </AntButton>\n </Space>\n }\n >\n <div ref={containerRef}>{node}</div>\n </AntCard>\n )\n}\n","// import { emit } from '@zero-library/common';\n// import { MICRO_DRAWER_NAME } from '@zero-library/common';\nimport { type ComponentProps } from '@ant-design/x-markdown'\nimport { Button } from 'antd'\n\ninterface AgentNavigate {\n emit: string\n name: string\n data: any\n}\n\nimport React, { useEffect, useState } from 'react'\n// 自定义业务组件 - 导航到智能体导航页\nconst AgentNavigateComponent = React.memo((props: ComponentProps) => {\n const [content, setContent] = useState<AgentNavigate | null>(null)\n const { children } = props\n useEffect(() => {\n if (!children) {\n return\n }\n console.log(typeof children, children)\n // 从模型返回的数据中解析spec信息\n if (typeof children === 'string') {\n try {\n setContent(JSON.parse(children))\n } catch (_error) {\n setContent(null)\n }\n } else {\n setContent(children as unknown as AgentNavigate)\n }\n }, [children])\n\n const handleClick = () => {\n if (!content?.emit) return\n // emit(content.emit, { ...content.data, name: MICRO_DRAWER_NAME }, 'nearest');\n }\n\n return (\n <Button onClick={handleClick} style={{ padding: 0 }} type=\"link\">\n {content?.name || '点击此处'}\n </Button>\n )\n})\n\nexport default AgentNavigateComponent\n","import { type ComponentProps } from '@ant-design/x-markdown'\nimport { CodeHighlighter, Mermaid } from '@ant-design/x-v2'\n\nconst CodeHighlight: React.FC<ComponentProps> = (props) => {\n const { className, children } = props\n\n const lang = className?.match(/language-(\\w+)/)?.[1] || ''\n\n if (typeof children !== 'string') return null\n\n if (!lang) {\n return <code>{children}</code>\n }\n\n if (lang === 'mermaid') {\n return <Mermaid>{children}</Mermaid>\n }\n\n return (\n <div\n style={{\n maxHeight: 400,\n overflowY: 'auto',\n overflowX: 'auto',\n borderRadius: 8\n }}\n >\n <div style={{ minWidth: 'max-content' }}>\n <CodeHighlighter lang={lang} style={{ margin: 0 }}>\n {children}\n </CodeHighlighter>\n </div>\n </div>\n )\n}\n\nexport default CodeHighlight\n","import { createTokenManager, emit } from '@zero-library/common'\n\nexport const TOKEN_KEY = 'NS-TOKEN'\n/**\n * 令牌管理器\n * 用于管理用户认证令牌,支持从URL参数或存储中获取、设置和清除令牌\n *\n * 特点:\n * 1. 默认使用localStorage存储\n * 2. 支持从URL参数自动同步令牌\n */\nexport const tokenManager = createTokenManager({\n key: TOKEN_KEY\n})\n\n/**\n * 跳转到登录页面\n * 该函数用于在用户未授权或会话过期时重定向到登录页面\n */\nexport const redirectUrl = () => {\n const path = localStorage.getItem('SIGNPATH')\n emit('jumpLink', { url: `/uc${path || '/sign-in'}` })\n}\n","import React from 'react'\nimport { useSnapshot } from 'valtio'\nimport { tokenManager } from '../../core/session'\nimport { useChatStore } from '../../stores/Context'\n\nexport const PreviewLinkComponent = (props: any) => {\n const chatStore = useChatStore()\n const configState = useSnapshot(chatStore.config)\n return (\n <a\n {...props}\n onClick={(e: React.MouseEvent<HTMLAnchorElement>) => {\n if (props.onClick) {\n props.onClick(e)\n }\n if (!e.defaultPrevented && e.currentTarget.href) {\n e.preventDefault()\n if (props.href && String(props.href).startsWith('/luya') && configState.layout.preview) {\n let fileName = 'link'\n let path = e.currentTarget.href\n const url = new URL(path, window.location.origin)\n const searchParams = new URLSearchParams(url.search)\n if (searchParams.has('path')) {\n path = searchParams.get('path') as string\n }\n\n if (path && path.includes('/')) {\n const segments = path.split('/')\n const lastSegment = segments[segments.length - 1]\n if (lastSegment) {\n try {\n fileName = decodeURIComponent(lastSegment)\n } catch (e) {\n fileName = lastSegment\n }\n }\n } else if (typeof props.children === 'string') {\n fileName = props.children\n } else if (Array.isArray(props.children) && typeof props.children[0] === 'string') {\n fileName = String(props.children[0])\n }\n chatStore.setPreview({ path, fileName })\n } else if (props.href && !String(props.href).startsWith('/luya')) {\n window.open(props.href || e.currentTarget.href, '_blank')\n } else if (props.href && String(props.href).startsWith('/luya') && !configState.layout.preview) {\n const urlObj = new URL(props.href, window.location.origin)\n urlObj.searchParams.set('NS-TOKEN', tokenManager.get() || '')\n window.open(urlObj.toString(), '_blank')\n }\n }\n }}\n />\n )\n}\n",".iconContainer {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--ant-border-radius-sm);\n overflow: hidden;\n flex-shrink: 0;\n gap: 20;\n}\n.toolName {\n font-size: 12px;\n color: var(--ant-color-text-secondary);\n flex: 1;\n line-height: 22px;\n}\n.duration {\n font-size: 12px;\n color: var(--ant-color-text-tertiary);\n flex-shrink: 0;\n}\n.statusIcon {\n font-size: 12px;\n display: flex;\n align-items: center;\n margin-left: 20px;\n}\n.sectionLabel {\n font-size: 12px;\n color: var(--ant-color-text-tertiary);\n margin-bottom: 4px;\n display: block;\n}\n.markdownContainer {\n max-width: 100%;\n overflow-x: auto;\n font-size: 12px;\n opacity: 0.85;\n}\n.sectionBlock {\n display: block;\n}\n.todoList {\n background-color: var(--ant-color-fill-alter);\n border-radius: var(--ant-border-radius);\n border: 1px solid var(--ant-color-border-secondary);\n margin-top: 4px;\n}\n.todoItem {\n padding: 8px 12px;\n border-bottom: 1px solid var(--ant-color-border-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n.todoItem:last-child {\n border-bottom: none;\n}\n.statusIconWrapper {\n margin-top: 2px;\n}\n.todoContent {\n flex: 1;\n min-width: 0;\n}\n.todoText {\n font-size: 13px;\n color: var(--ant-color-text);\n}\n.todoText.completed {\n color: var(--ant-color-text-tertiary);\n text-decoration: line-through;\n}\n.emptyText {\n font-size: 12px;\n}\n","import XMarkdown from '@ant-design/x-markdown'\nimport { Typography } from 'antd'\nimport React from 'react'\nimport { getMarkdownConfig } from '../../../core/utils'\nimport CodeHighlightComponent from '../code-highlight'\nimport styles from './index.module.less'\n\nexport interface ToolRenderProps {\n args?: any\n result?: any\n argsContent?: { text: string; isJson: boolean; parsed: any }\n resultContent?: { text: string; isJson: boolean; parsed: any } | null\n errorMessage?: string\n item: any\n}\n\nconst DefaultToolRender: React.FC<ToolRenderProps> = ({ argsContent, resultContent, errorMessage, item }) => {\n return (\n <>\n {(item.content || item.arguments) && argsContent && (\n <div className={styles.sectionBlock}>\n <Typography.Text className={styles.sectionLabel}>输入参数</Typography.Text>\n <div className={styles.markdownContainer}>\n <XMarkdown\n className=\"xMarkdownStyle\"\n components={{ code: CodeHighlightComponent }}\n config={getMarkdownConfig()}\n content={argsContent.isJson ? `\\`\\`\\`json\\n${argsContent.text}\\n\\`\\`\\`` : argsContent.text}\n />\n </div>\n </div>\n )}\n\n {item.result && resultContent && (\n <div className={styles.sectionBlock}>\n <Typography.Text className={styles.sectionLabel}>返回结果</Typography.Text>\n <div className={styles.markdownContainer}>\n <XMarkdown\n className=\"xMarkdownStyle\"\n components={{ code: CodeHighlightComponent }}\n config={getMarkdownConfig()}\n content={resultContent.isJson ? `\\`\\`\\`json\\n${resultContent.text}\\n\\`\\`\\`` : resultContent.text}\n />\n </div>\n </div>\n )}\n\n {errorMessage && (\n <div className={styles.sectionBlock}>\n <Typography.Text className={styles.sectionLabel}>错误信息</Typography.Text>\n <div className={styles.markdownContainer}>\n <XMarkdown\n className=\"xMarkdownStyle\"\n components={{ code: CodeHighlightComponent }}\n config={getMarkdownConfig()}\n content={`\\`\\`\\`\\n${errorMessage}\\n\\`\\`\\``}\n />\n </div>\n </div>\n )}\n </>\n )\n}\n\nexport default DefaultToolRender\n","import { CheckCircleOutlined, ClockCircleOutlined } from '@ant-design/icons'\nimport { List, Typography, theme } from 'antd'\nimport React from 'react'\nimport { ToolRenderProps } from './default-render'\nimport styles from './index.module.less'\n\nexport interface TodoItem {\n id: string\n title?: string\n content?: string\n status: 'pending' | 'in_progress' | 'completed'\n}\n\nconst TodoWriteRender: React.FC<ToolRenderProps> = ({ args, result }) => {\n const { token } = theme.useToken()\n\n const todos: TodoItem[] = Array.isArray(result) ? result : result?.todos || (Array.isArray(args) ? args : args?.todos) || []\n\n const getStatusIcon = (status: string) => {\n switch (status) {\n case 'completed':\n return <CheckCircleOutlined style={{ color: token.colorSuccess }} />\n case 'in_progress':\n return <ClockCircleOutlined style={{ color: token.colorPrimary }} />\n case 'pending':\n default:\n return <ClockCircleOutlined style={{ color: token.colorTextTertiary }} />\n }\n }\n\n if (!todos || todos.length === 0) {\n return (\n <Typography.Text type=\"secondary\" className={styles.emptyText}>\n 暂无任务\n </Typography.Text>\n )\n }\n\n return (\n <List\n size=\"small\"\n dataSource={todos}\n renderItem={(item) => (\n <List.Item className={styles.todoItem}>\n <div className={styles.statusIconWrapper}>{getStatusIcon(item.status)}</div>\n <div className={styles.todoContent}>\n <Typography.Text className={`${styles.todoText} ${item.status === 'completed' ? styles.completed : ''}`}>\n {item.title || item.content}\n </Typography.Text>\n </div>\n </List.Item>\n )}\n className={styles.todoList}\n />\n )\n}\n\nexport default TodoWriteRender\n","import { LoadingOutlined, ToolOutlined } from '@ant-design/icons'\nimport { Collapse, Flex, theme, Typography } from 'antd'\nimport React, { useMemo } from 'react'\nimport { ToolCallEvent } from '../../../stores/types'\nimport DefaultToolRender, { ToolRenderProps } from './default-render'\nimport styles from './index.module.less'\nimport TodoWriteRender from './todo-write-render'\n\ninterface ExtendedToolCallEvent extends ToolCallEvent {\n result?: any\n arguments?: any\n errorMessage?: string\n duration?: number\n summary?: string\n}\n\ninterface ToolCallItemProps {\n item: ExtendedToolCallEvent\n}\n\nconst toolRenders: Record<\n string,\n {\n component: React.FC<ToolRenderProps>\n defaultExpanded?: boolean | ((args: any, result: any) => boolean)\n alwaysShowContent?: boolean | ((args: any, result: any) => boolean)\n hideStatus?: boolean\n disableExpandOnError?: boolean\n }\n> = {\n todo_write: {\n component: TodoWriteRender,\n defaultExpanded: false,\n alwaysShowContent: (args, result) => {\n const todos = Array.isArray(result) ? result : result?.todos || (Array.isArray(args) ? args : args?.todos) || []\n return todos && todos.length > 0\n },\n hideStatus: true,\n disableExpandOnError: true\n }\n}\n\nconst getToolRenderConfig = (toolName?: string) => {\n if (toolName && toolRenders[toolName]) {\n return toolRenders[toolName]\n }\n return {\n component: DefaultToolRender,\n defaultExpanded: false,\n alwaysShowContent: false\n }\n}\n\nconst formatContent = (content?: any) => {\n try {\n if (!content) return { text: '', isJson: false, parsed: null }\n if (typeof content === 'object') {\n return { text: JSON.stringify(content, null, 2), isJson: true, parsed: content }\n }\n const parsed = JSON.parse(content)\n if (typeof parsed === 'object' && parsed !== null) {\n return { text: JSON.stringify(parsed, null, 2), isJson: true, parsed }\n }\n return { text: content, isJson: false, parsed: null }\n } catch {\n return { text: typeof content === 'string' ? content : '', isJson: false, parsed: null }\n }\n}\n\nconst ToolCallItem: React.FC<ToolCallItemProps> = ({ item }) => {\n const { token } = theme.useToken()\n const renderConfig = getToolRenderConfig(item.toolName)\n const CustomRender = renderConfig.component\n\n const status = useMemo(() => {\n if (item.status) return item.status\n if (item.errorMessage) return 'error'\n if (item.result) return 'success'\n return 'running'\n }, [item.status, item.errorMessage, item.result])\n\n const argsContent = useMemo(() => formatContent(item.arguments || item.content), [item.arguments, item.content])\n const resultContent = useMemo(() => (item.result ? formatContent(item.result) : null), [item.result])\n\n const hasContent = useMemo(() => {\n if (renderConfig.disableExpandOnError && status === 'error') return false\n\n let alwaysShow = false\n if (typeof renderConfig.alwaysShowContent === 'function') {\n alwaysShow = renderConfig.alwaysShowContent(argsContent.parsed, resultContent?.parsed)\n } else if (renderConfig.alwaysShowContent) {\n alwaysShow = renderConfig.alwaysShowContent\n }\n\n if (alwaysShow) return true\n\n return Boolean(item.errorMessage)\n }, [renderConfig.disableExpandOnError, renderConfig.alwaysShowContent, item.errorMessage, status, argsContent.parsed, resultContent?.parsed])\n\n const isDefaultExpanded = useMemo(() => {\n if (typeof renderConfig.defaultExpanded === 'function') {\n return renderConfig.defaultExpanded(argsContent.parsed, resultContent?.parsed)\n }\n return renderConfig.defaultExpanded\n }, [renderConfig.defaultExpanded, argsContent.parsed, resultContent?.parsed])\n\n const statusConfig = {\n running: {\n icon: <LoadingOutlined />,\n color: token.colorPrimary\n },\n success: {\n icon: null,\n color: token.colorSuccess\n },\n error: {\n icon: null,\n color: token.colorSuccess\n },\n pending: {\n icon: <LoadingOutlined />,\n color: token.colorTextSecondary\n }\n }[status] || {\n icon: <LoadingOutlined />,\n color: token.colorPrimary\n }\n\n const renderIcon = () => {\n if (!item.toolIcon) {\n return <ToolOutlined style={{ fontSize: 14, color: token.colorTextSecondary }} />\n }\n\n const isUrl = /^(http|\\/)/.test(item.toolIcon)\n\n if (isUrl) {\n return <img src={item.toolIcon} alt=\"tool-icon\" style={{ width: '100%', height: '100%', objectFit: 'contain' }} />\n }\n\n return <span style={{ fontSize: 14, lineHeight: 1 }}>{item.toolIcon}</span>\n }\n\n return (\n <Collapse\n style={{ width: '70%' }}\n collapsible={hasContent ? undefined : 'disabled'}\n defaultActiveKey={isDefaultExpanded && hasContent ? [item.toolCallId || 'fallback-key'] : undefined}\n expandIconPlacement=\"end\"\n styles={{\n header: {\n padding: '6px 10px'\n }\n }}\n items={[\n {\n key: item.toolCallId || 'fallback-key',\n showArrow: hasContent,\n label: (\n <Flex align=\"center\" gap={8} style={{ flex: 1, minWidth: 0 }}>\n <div className={styles.iconContainer}>{renderIcon()}</div>\n <span className={styles.toolName}>{item.title || item.toolName || 'Unknown Tool'}</span>\n {(status === 'running' || status === 'pending') && (\n <div className={styles.statusIcon} style={{ color: statusConfig.color }}>\n {statusConfig.icon}\n </div>\n )}\n {item.duration && <Typography.Text className={styles.duration}>{item.duration}ms</Typography.Text>}\n </Flex>\n ),\n children: (\n <CustomRender\n item={item}\n args={argsContent.parsed}\n result={resultContent?.parsed}\n argsContent={argsContent}\n resultContent={resultContent}\n errorMessage={item.errorMessage}\n />\n )\n }\n ]}\n />\n )\n}\n\nexport default ToolCallItem\n","import XMarkdown from '@ant-design/x-markdown'\nimport '@ant-design/x-markdown/themes/light.css'\nimport { Button as AntButton, Card as AntCard, Space } from 'antd'\nimport classNames from 'classnames'\nimport React from 'react'\nimport { AgentNavigateComponent, CodeHighlightComponent, PreviewLinkComponent } from '../../../src/components/custom-components'\nimport { getMarkdownConfig } from '../../../src/core/utils'\nimport { ArtifactCard } from './ArtifactCard'\nimport { exportTextFile, sanitizeFileName } from './export-utils'\n\n/** 把混合 Markdown 中的完整 HTML 片段包装成代码块,避免直接参与富文本渲染。 */\nfunction formatMixedContent(content: string) {\n return content.replace(/<!DOCTYPE html>[\\s\\S]*?<\\/html>/gi, (match) => `\\`\\`\\`html\\n${match}\\n\\`\\`\\``)\n}\n\n/** 报告制品渲染器,负责 Markdown 展示和导出。 */\nexport const ReportViewer: React.FC<{ artifactId: string; title?: string; payload?: any }> = ({ artifactId, title, payload }) => {\n const markdown = typeof payload?.markdown === 'string' ? payload.markdown : null\n /** 没有 markdown 正文时回退到通用制品卡片。 */\n if (!markdown) {\n return <ArtifactCard type=\"report\" artifactId={artifactId} title={title} payload={payload} />\n }\n\n const exportBase = sanitizeFileName(title || artifactId || 'report')\n /** 导出原始 Markdown,方便用户二次编辑。 */\n const exportMd = () => {\n exportTextFile(markdown, `${exportBase}.md`, 'text/markdown;charset=utf-8')\n }\n\n return (\n <AntCard\n size=\"small\"\n style={{ borderRadius: 12 }}\n title={title || '报告'}\n extra={\n <Space size={4}>\n <AntButton size=\"small\" type=\"text\" onClick={exportMd}>\n 导出MD\n </AntButton>\n </Space>\n }\n >\n <div style={{ lineHeight: 1.75 }}>\n <XMarkdown\n openLinksInNewTab\n className={classNames('x-markdown-light', 'xMarkdownStyle')}\n components={{\n code: CodeHighlightComponent,\n agentnavigate: AgentNavigateComponent,\n a: PreviewLinkComponent\n }}\n config={getMarkdownConfig()}\n content={formatMixedContent(markdown)}\n />\n </div>\n </AntCard>\n )\n}\n","import { Button as AntButton, Card as AntCard, Table as AntTable, Space } from 'antd'\nimport React from 'react'\nimport { ArtifactCard } from './ArtifactCard'\nimport { escapeCsvCell, exportJsonFile, exportTextFile, sanitizeFileName } from './export-utils'\n\n/** 表格制品渲染器,支持预览和导出 CSV/JSON。 */\nexport const TableViewer: React.FC<{ artifactId: string; title?: string; payload?: any }> = ({ artifactId, title, payload }) => {\n const columns = Array.isArray(payload?.columns) ? payload.columns : null\n const rows = Array.isArray(payload?.rows) ? payload.rows : null\n\n /** 当表格数据不完整时,回退到通用制品卡片。 */\n if (!columns || !rows) {\n return <ArtifactCard type=\"table\" artifactId={artifactId} title={title} payload={payload} />\n }\n\n /** 统一规范列定义,避免 title/dataIndex 缺失导致表格不可用。 */\n const safeColumns = columns\n .map((c: any) => ({\n title: String(c?.title ?? c?.dataIndex ?? ''),\n dataIndex: String(c?.dataIndex ?? '')\n }))\n .filter((c: any) => c.dataIndex)\n\n /** 为 Ant Table 构造稳定的 dataSource,并补齐 key。 */\n const dataSource = rows.map((r: any, i: number) => ({\n key: String(r?.id ?? i),\n ...(r && typeof r === 'object' ? r : {})\n }))\n\n const exportBase = sanitizeFileName(title || artifactId || 'table')\n /** 导出为 CSV,便于直接给 Excel 等工具打开。 */\n const exportCsv = () => {\n const header = safeColumns.map((c: any) => escapeCsvCell(c.title)).join(',')\n const body = rows.map((row: any) => safeColumns.map((c: any) => escapeCsvCell(row?.[c.dataIndex])).join(',')).join('\\n')\n exportTextFile(`\\ufeff${header}\\n${body}\\n`, `${exportBase}.csv`, 'text/csv;charset=utf-8')\n }\n /** 导出为 JSON,保留完整结构化数据。 */\n const exportJson = () => {\n exportJsonFile({ columns: safeColumns, rows }, `${exportBase}.json`)\n }\n\n return (\n <AntCard\n size=\"small\"\n style={{ borderRadius: 12 }}\n title={title || '表格'}\n extra={\n <Space size={4}>\n <AntButton size=\"small\" type=\"text\" onClick={exportCsv}>\n 导出CSV\n </AntButton>\n <AntButton size=\"small\" type=\"text\" onClick={exportJson}>\n 导出JSON\n </AntButton>\n </Space>\n }\n >\n <AntTable size=\"small\" pagination={false} columns={safeColumns} dataSource={dataSource} scroll={{ x: true }} />\n </AntCard>\n )\n}\n","import {\n Button as AntButton,\n Divider as AntDivider,\n Progress as AntProgress,\n Select as AntSelect,\n Switch as AntSwitch,\n Tag as AntTag,\n Input,\n Space,\n Typography\n} from 'antd'\nimport React from 'react'\nimport { ArtifactCard } from './artifacts/ArtifactCard'\nimport { ChartViewer } from './artifacts/ChartViewer'\nimport { ReportViewer } from './artifacts/ReportViewer'\nimport { TableViewer } from './artifacts/TableViewer'\n\nconst { Text: AText, Title } = Typography\n\ntype PathRef = { path: string }\ntype SelectValue = string | number | boolean\n\nconst FIELD_LABEL_STYLE: React.CSSProperties = { marginBottom: 6, fontSize: 13, fontWeight: 500, color: '#555' }\nconst INPUT_RADIUS_STYLE: React.CSSProperties = { borderRadius: 8 }\n\nconst formPathValueStore = new Map<string, unknown>()\n\n/** 规范 model path,保证缓存键格式统一。 */\nfunction normalizeModelPath(modelPath: string): string {\n const normalized = typeof modelPath === 'string' ? modelPath.trim() : ''\n if (!normalized.startsWith('/')) return ''\n return normalized.replace(/\\/{2,}/g, '/').replace(/\\/$/, '') || '/'\n}\n\n/** 计算某个 model path 的字段前缀,用于批量匹配子字段。 */\nfunction modelPathPrefix(modelPath: string): string {\n const normalized = normalizeModelPath(modelPath)\n if (!normalized || normalized === '/') return normalized\n return `${normalized}/`\n}\n\n/** 读取指定 model 下缓存的所有一级字段值。 */\nexport function readModelValues(modelPath: string): Record<string, unknown> {\n const normalized = normalizeModelPath(modelPath)\n if (!normalized || normalized === '/') return {}\n const prefix = modelPathPrefix(normalized)\n const values: Record<string, unknown> = {}\n for (const [path, value] of formPathValueStore.entries()) {\n if (typeof path !== 'string') continue\n if (!path.startsWith(prefix)) continue\n const rest = path.slice(prefix.length)\n if (!rest || rest.includes('/')) continue\n values[rest] = value\n }\n return values\n}\n\n/** 批量写入指定 model 的字段值到本地缓存。 */\nexport function writeModelValues(modelPath: string, values: Record<string, unknown>) {\n const normalized = normalizeModelPath(modelPath)\n if (!normalized || normalized === '/' || !values || typeof values !== 'object' || Array.isArray(values)) return\n Object.entries(values).forEach(([key, value]) => {\n if (typeof key !== 'string' || !key.trim() || key.includes('/')) return\n const fieldPath = `${normalized}/${key}`.replace(/\\/{2,}/g, '/')\n formPathValueStore.set(fieldPath, value === undefined ? null : value)\n })\n}\n\n/** 清空指定 model 及其子路径下的缓存值。 */\nexport function clearModelValues(modelPath: string) {\n const normalized = normalizeModelPath(modelPath)\n if (!normalized) return\n if (normalized === '/') {\n formPathValueStore.clear()\n return\n }\n const prefix = modelPathPrefix(normalized)\n for (const path of Array.from(formPathValueStore.keys())) {\n if (path === normalized || path.startsWith(prefix)) {\n formPathValueStore.delete(path)\n }\n }\n}\n\n/** 清空整个 A2UI 运行时维护的表单缓存。 */\nexport function clearAllModelValues() {\n formPathValueStore.clear()\n}\n\n/** 判断值是否是 `{ path }` 形式的绑定引用。 */\nfunction isPathRef(v: unknown): v is PathRef {\n return !!v && typeof v === 'object' && typeof (v as Record<string, unknown>).path === 'string'\n}\n\n/** 判断值是否是以 `/` 开头的路径字符串。 */\nfunction isPathString(v: unknown): v is string {\n return typeof v === 'string' && v.startsWith('/')\n}\n\n/** 统一从值里抽取绑定路径。 */\nfunction pathFromValue(v: unknown): string | null {\n if (isPathRef(v)) return v.path\n if (isPathString(v)) return v\n return null\n}\n\n/** 解析 `$bind:/path` 形式的 token。 */\nfunction decodeBindPathToken(token: unknown): string | null {\n if (typeof token !== 'string') return null\n if (!token.startsWith('$bind:')) return null\n const path = token.slice('$bind:'.length)\n return path.startsWith('/') ? path : null\n}\n\n/** 把某个绑定路径的新值写回缓存。 */\nfunction rememberPathValue(path: string | null, value: unknown) {\n if (!path) return\n formPathValueStore.set(path, value === undefined ? null : value)\n}\n\n/** 从缓存中读取某个绑定路径当前保存的值。 */\nfunction readPathValue(path: string | null): unknown {\n if (!path) return undefined\n return formPathValueStore.get(path)\n}\n\n/** 如果值本身是绑定路径,则优先读取缓存后的真实值。 */\nfunction resolveMaybePath(v: unknown): unknown {\n const path = pathFromValue(v)\n if (!path) return v\n const cached = readPathValue(path)\n return cached === undefined ? v : cached\n}\n\n/** 把 action context 中的绑定引用展开成可直接提交的真实 values。 */\nexport function normalizeActionContext(context: Record<string, unknown>): Record<string, unknown> {\n const next: Record<string, unknown> = { ...context }\n const refs = next.refs && typeof next.refs === 'object' && !Array.isArray(next.refs) ? (next.refs as Record<string, unknown>) : null\n const values = next.values && typeof next.values === 'object' && !Array.isArray(next.values) ? { ...(next.values as Record<string, unknown>) } : {}\n\n const candidateKeys = refs ? Object.keys(refs) : Object.keys(next).filter((k) => k !== 'form_name' && k !== 'refs' && k !== 'values')\n\n for (const key of candidateKeys) {\n const source = refs ? (refs[key] ?? next[key]) : next[key]\n const resolved = resolveMaybePath(source)\n if (!pathFromValue(resolved)) {\n values[key] = resolved\n next[key] = resolved\n }\n }\n\n if (next.form_name || refs || Object.keys(values).length > 0) {\n next.values = values\n }\n return next\n}\n\n/** 安全读取字符串值。 */\nfunction readStringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined\n}\n\n/** 安全读取布尔值。 */\nfunction readBooleanValue(value: unknown): boolean | undefined {\n return typeof value === 'boolean' ? value : undefined\n}\n\n/** 安全读取 Select 支持的原始值。 */\nfunction readSelectValue(value: unknown): SelectValue | undefined {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' ? value : undefined\n}\n\n/** 文本类字段在绑定模式下优先保留用户已输入的非空值。 */\nfunction preferCachedStringValue(externalValue: string, cachedValue: string | undefined, valuePath: string | null) {\n return !!valuePath && externalValue === '' && typeof cachedValue === 'string' && cachedValue !== ''\n}\n\ntype BoundFieldStateOptions<T> = {\n value: unknown\n bindPathToken?: string\n defaultValue: T\n readExternalValue: (value: unknown) => T | undefined\n readCachedValue: (value: unknown) => T | undefined\n preferCachedValueWhenBound?: boolean\n preferCachedOverExternal?: (externalValue: T, cachedValue: T | undefined, valuePath: string | null) => boolean\n}\n\n/** 管理字段的外部值、本地值和缓存值三者同步关系。 */\nfunction useBoundFieldState<T>({\n value,\n bindPathToken,\n defaultValue,\n readExternalValue,\n readCachedValue,\n preferCachedValueWhenBound,\n preferCachedOverExternal\n}: BoundFieldStateOptions<T>) {\n const valuePath = decodeBindPathToken(bindPathToken) ?? pathFromValue(value)\n const cachedValue = readCachedValue(readPathValue(valuePath))\n const externalValue = readExternalValue(value)\n const dirtyRef = React.useRef(false)\n\n const [localValue, setLocalValue] = React.useState<T>(() => {\n if (preferCachedValueWhenBound && valuePath && cachedValue !== undefined) {\n return cachedValue\n }\n if (externalValue !== undefined) {\n if (preferCachedOverExternal?.(externalValue, cachedValue, valuePath) && cachedValue !== undefined) {\n return cachedValue\n }\n return externalValue\n }\n if (cachedValue !== undefined) return cachedValue\n return defaultValue\n })\n\n React.useEffect(() => {\n dirtyRef.current = false\n }, [valuePath])\n\n React.useEffect(() => {\n if (preferCachedValueWhenBound && valuePath && cachedValue !== undefined) {\n setLocalValue(cachedValue)\n return\n }\n if (valuePath && cachedValue !== undefined && dirtyRef.current) {\n setLocalValue(cachedValue)\n return\n }\n if (externalValue !== undefined) {\n if (preferCachedOverExternal?.(externalValue, cachedValue, valuePath) && cachedValue !== undefined) {\n setLocalValue(cachedValue)\n return\n }\n if (!dirtyRef.current) {\n setLocalValue(externalValue)\n rememberPathValue(valuePath, externalValue)\n }\n return\n }\n if (cachedValue !== undefined) {\n setLocalValue(cachedValue)\n }\n }, [cachedValue, externalValue, preferCachedOverExternal, valuePath])\n\n React.useEffect(() => {\n rememberPathValue(valuePath, localValue)\n }, [valuePath, localValue])\n\n const updateLocalValue = React.useCallback(\n (nextValue: T) => {\n dirtyRef.current = true\n setLocalValue(nextValue)\n rememberPathValue(valuePath, nextValue)\n },\n [valuePath]\n )\n\n return { localValue, updateLocalValue, valuePath }\n}\n\ntype BoundFieldProps<T> = {\n id?: string\n label: string\n value?: unknown\n bind_path_token?: string\n onChange?: (value: T) => void\n onDataChange?: (path: string, value: unknown) => void\n}\n\n/** 统一渲染大多数表单项的标题和宽度。 */\nconst FieldBlock: React.FC<{ label: string; children: React.ReactNode }> = ({ label, children }) => (\n <div style={{ width: '100%' }}>\n <div style={FIELD_LABEL_STYLE}>{label}</div>\n {children}\n </div>\n)\n\n/** 把字段变更同时同步到本地缓存、绑定路径和外部监听。 */\nfunction emitFieldChange<T>(\n nextValue: T,\n valuePath: string | null,\n updateLocalValue: (value: T) => void,\n onDataChange?: (path: string, value: unknown) => void,\n onChange?: (value: T) => void\n) {\n updateLocalValue(nextValue)\n if (valuePath) onDataChange?.(valuePath, nextValue)\n onChange?.(nextValue)\n}\n\n/** 统一给输入类控件分配稳定 id。 */\nfunction useControlId(id?: string) {\n const autoId = React.useId()\n return id ?? autoId\n}\n\n/** 从按钮 action 中抽取标准事件。 */\nfunction readActionEvent(action: any) {\n const name = typeof action?.event?.name === 'string' ? action.event.name : ''\n const context = action?.event?.context ?? {}\n return { name, context }\n}\n\n/* ─── 布局 ─── */\n/** 纵向布局容器,适合表单和卡片内容区。 */\nexport const Column: React.FC<{ children?: React.ReactNode }> = ({ children }) => (\n <Space orientation=\"vertical\" style={{ width: '100%' }} size={14}>\n {children}\n </Space>\n)\n\n/** 横向布局容器,支持 gap 和自动换行。 */\nexport const Row: React.FC<{ children?: React.ReactNode; gap?: number }> = ({ children, gap = 8 }) => (\n <Space orientation=\"horizontal\" size={gap} wrap>\n {children}\n </Space>\n)\n\n/* ─── 文字 ─── */\n/** 文本渲染组件,统一处理标题、说明和普通文本。 */\nexport const Text: React.FC<{ text: string; variant?: string }> = ({ text, variant }) => {\n if (variant === 'h2')\n return (\n <Title level={4} style={{ margin: 0 }}>\n {text}\n </Title>\n )\n if (variant === 'h3')\n return (\n <Title level={5} style={{ margin: 0 }}>\n {text}\n </Title>\n )\n if (variant === 'caption')\n return (\n <AText type=\"secondary\" style={{ fontSize: 12, lineHeight: 1.6 }}>\n {text}\n </AText>\n )\n return <AText style={{ lineHeight: 1.7 }}>{text}</AText>\n}\n\n/* ─── 输入 ─── */\n/** 文本输入框,支持 bind token、本地缓存和回写。 */\nexport const TextField: React.FC<\n BoundFieldProps<string> & {\n placeholder?: string\n }\n> = ({ id, label, placeholder, value, bind_path_token, onChange, onDataChange }) => {\n const inputId = useControlId(id)\n const { localValue, updateLocalValue, valuePath } = useBoundFieldState<string>({\n value,\n bindPathToken: bind_path_token,\n defaultValue: '',\n readExternalValue: readStringValue,\n readCachedValue: readStringValue,\n preferCachedValueWhenBound: true,\n preferCachedOverExternal: preferCachedStringValue\n })\n\n return (\n <FieldBlock label={label}>\n <Input\n id={inputId}\n name={inputId}\n placeholder={placeholder}\n value={localValue}\n onChange={(e) => emitFieldChange(e.target.value, valuePath, updateLocalValue, onDataChange, onChange)}\n style={INPUT_RADIUS_STYLE}\n />\n </FieldBlock>\n )\n}\n\n/* ─── 下拉 ─── */\n/** 下拉选择框,统一处理候选项、缓存同步和路径回写。 */\nexport const Select: React.FC<\n BoundFieldProps<SelectValue> & {\n placeholder?: string\n options: { label: string; value: SelectValue }[]\n }\n> = ({ id, label, placeholder, options, value, bind_path_token, onChange, onDataChange }) => {\n const inputId = useControlId(id)\n const { localValue, updateLocalValue, valuePath } = useBoundFieldState<SelectValue | undefined>({\n value,\n bindPathToken: bind_path_token,\n defaultValue: undefined,\n readExternalValue: readSelectValue,\n readCachedValue: readSelectValue,\n preferCachedValueWhenBound: true,\n preferCachedOverExternal: (externalValue, cachedValue, valuePath) =>\n typeof externalValue === 'string' ? preferCachedStringValue(externalValue, readStringValue(cachedValue), valuePath) : false\n })\n\n return (\n <FieldBlock label={label}>\n <AntSelect\n id={inputId}\n style={{ width: '100%' }}\n options={options}\n value={localValue}\n onChange={(nextValue) => emitFieldChange(nextValue, valuePath, updateLocalValue, onDataChange, onChange)}\n placeholder={placeholder || '请选择...'}\n />\n </FieldBlock>\n )\n}\n\n/* ─── 开关 ─── */\n/** 布尔开关组件,用于简单 on/off 表达。 */\nexport const Switch: React.FC<BoundFieldProps<boolean>> = ({ id, label, value, bind_path_token, onChange, onDataChange }) => {\n const inputId = useControlId(id)\n const { localValue, updateLocalValue, valuePath } = useBoundFieldState<boolean>({\n value,\n bindPathToken: bind_path_token,\n defaultValue: false,\n readExternalValue: readBooleanValue,\n readCachedValue: readBooleanValue,\n preferCachedValueWhenBound: true\n })\n\n return (\n <Space align=\"center\">\n <AntSwitch\n id={inputId}\n checked={localValue}\n onChange={(nextValue) => emitFieldChange(nextValue, valuePath, updateLocalValue, onDataChange, onChange)}\n />\n <span style={{ fontSize: 13, color: '#555' }}>{label}</span>\n </Space>\n )\n}\n\n/* ─── 按钮 ─── */\n/** 动作按钮,优先走 onClick,未提供时回退到 action.event 派发。 */\nexport const Button: React.FC<{\n label: string\n variant?: 'primary' | 'default' | 'danger'\n onClick?: () => void\n action?: any\n onAction?: (name: string, context: Record<string, any>) => void\n}> = ({ label, variant = 'default', onClick, action, onAction }) => {\n const handleClick = () => {\n if (onClick) {\n onClick()\n return\n }\n const { name, context } = readActionEvent(action)\n if (name && onAction) {\n onAction(name, context)\n }\n }\n\n return (\n <AntButton type={variant === 'primary' ? 'primary' : 'default'} danger={variant === 'danger'} onClick={handleClick} style={{ borderRadius: 8 }}>\n {label}\n </AntButton>\n )\n}\n\n/* ─── 装饰 ─── */\n/** 分割线组件,用于分隔视觉区块。 */\nexport const Divider: React.FC = () => <AntDivider style={{ margin: '8px 0' }} />\n\n/** 标签组件,用于展示状态或类型。 */\nexport const Tag: React.FC<{ text: string; color?: string }> = ({ text, color }) => <AntTag color={color}>{text}</AntTag>\n\n/** 进度组件,支持百分比、状态和附加说明。 */\nexport const Progress: React.FC<{ percent: number; status?: 'normal' | 'active' | 'success' | 'exception'; text?: string }> = ({\n percent,\n status = 'normal',\n text\n}) => (\n <div style={{ width: '100%' }}>\n <AntProgress percent={Math.max(0, Math.min(100, Math.round(percent)))} status={status} />\n {text ? (\n <AText type=\"secondary\" style={{ fontSize: 12 }}>\n {text}\n </AText>\n ) : null}\n </div>\n)\n\n/* ─── 统一导出,传给 XCard.Box ─── */\nexport const A2uiComponents = {\n Column,\n Row,\n Text,\n TextField,\n Select,\n Switch,\n Button,\n Divider,\n Tag,\n Progress,\n ArtifactCard,\n TableViewer,\n ChartViewer,\n ReportViewer\n} as Record<string, React.ComponentType<any>>\n","function readProp(current: Record<string, any>, props: Record<string, unknown> | null, key: string): unknown {\n return current[key] ?? props?.[key]\n}\n\nfunction readStringProp(current: Record<string, any>, props: Record<string, unknown> | null, key: string): string {\n const value = readProp(current, props, key)\n return typeof value === 'string' ? value.trim() : ''\n}\n\nfunction extractOptionLabels(value: unknown): Record<string, string> | null {\n if (!Array.isArray(value)) return null\n const optionLabels: Record<string, string> = {}\n value.forEach((item) => {\n if (!item || typeof item !== 'object') return\n const option = item as Record<string, unknown>\n if (typeof option.value !== 'string' && typeof option.value !== 'number' && typeof option.value !== 'boolean') return\n if (typeof option.label !== 'string' || !option.label.trim()) return\n optionLabels[String(option.value)] = option.label.trim()\n })\n return Object.keys(optionLabels).length ? optionLabels : null\n}\n\nfunction extractPathFromRef(value: unknown): string | null {\n if (typeof value === 'string') {\n if (value.startsWith('$bind:/')) return value.slice('$bind:'.length)\n if (value.startsWith('/')) return value\n return null\n }\n if (value && typeof value === 'object' && typeof (value as Record<string, unknown>).path === 'string') {\n return (value as Record<string, string>).path\n }\n return null\n}\n\nfunction collectComponentsMeta(\n node: unknown,\n metaByPath: Record<string, { label?: string; optionLabels?: Record<string, string>; component?: string }>\n) {\n if (Array.isArray(node)) {\n node.forEach((item) => collectComponentsMeta(item, metaByPath))\n return\n }\n if (!node || typeof node !== 'object') return\n const current = node as Record<string, any>\n const props = current.props && typeof current.props === 'object' ? (current.props as Record<string, unknown>) : null\n const label = readStringProp(current, props, 'label')\n const path = extractPathFromRef(readProp(current, props, 'bind_path_token')) || extractPathFromRef(readProp(current, props, 'value'))\n if (path) {\n const nextMeta = metaByPath[path] || {}\n if (label) {\n nextMeta.label = label\n }\n const optionLabels = extractOptionLabels(readProp(current, props, 'options'))\n if (optionLabels) {\n nextMeta.optionLabels = optionLabels\n }\n if (typeof current.component === 'string') {\n nextMeta.component = current.component\n }\n metaByPath[path] = nextMeta\n }\n const children = Array.isArray(current.children) ? current.children : []\n children.forEach((child) => collectComponentsMeta(child, metaByPath))\n}\n\nfunction collectSurfaceMetaByPath(\n commands: any[],\n surfaceId: string\n): Record<string, { label?: string; optionLabels?: Record<string, string>; component?: string }> {\n const metaByPath: Record<string, { label?: string; optionLabels?: Record<string, string>; component?: string }> = {}\n commands.forEach((cmd) => {\n const update = cmd?.updateComponents\n if (!update || update.surfaceId !== surfaceId) return\n collectComponentsMeta(update.components, metaByPath)\n })\n return metaByPath\n}\n\nfunction resolveDisplayValue(value: unknown, meta: { label?: string; optionLabels?: Record<string, string>; component?: string }): string {\n if (value === null || value === undefined || value === '') return ''\n if (meta.optionLabels && Object.prototype.hasOwnProperty.call(meta.optionLabels, String(value))) {\n return meta.optionLabels[String(value)]\n }\n if (typeof value === 'boolean') {\n return value ? '是' : '否'\n }\n if (Array.isArray(value)) {\n return value.map((item) => String(item)).join('、')\n }\n if (typeof value === 'object') {\n return JSON.stringify(value)\n }\n return String(value)\n}\n\nexport function collectActionDisplayMeta(\n commands: any[],\n surfaceId: string,\n context: Record<string, unknown>\n): { labels: Record<string, string>; valueLabels: Record<string, string> } | null {\n const refs = context.refs && typeof context.refs === 'object' && !Array.isArray(context.refs) ? (context.refs as Record<string, unknown>) : null\n if (!surfaceId || !refs) return null\n\n const values =\n context.values && typeof context.values === 'object' && !Array.isArray(context.values) ? (context.values as Record<string, unknown>) : context\n const metaByPath = collectSurfaceMetaByPath(commands, surfaceId)\n if (!Object.keys(metaByPath).length) return null\n\n const labels: Record<string, string> = {}\n const valueLabels: Record<string, string> = {}\n Object.entries(refs).forEach(([key, ref]) => {\n const path = extractPathFromRef(ref)\n const meta = path ? metaByPath[path] : null\n if (!meta) return\n if (meta.label) {\n labels[key] = meta.label\n }\n const displayValue = resolveDisplayValue(values[key], meta)\n if (displayValue) {\n valueLabels[key] = displayValue\n }\n })\n return Object.keys(labels).length || Object.keys(valueLabels).length ? { labels, valueLabels } : null\n}\n","import { normalizeActionContext, readModelValues } from '../components/A2uiComponents'\nimport { collectActionDisplayMeta } from './meta'\n\nfunction extractPathFromRef(value: unknown): string | null {\n if (typeof value === 'string') {\n if (value.startsWith('$bind:/')) return value.slice('$bind:'.length)\n if (value.startsWith('/')) return value\n return null\n }\n if (value && typeof value === 'object' && typeof (value as Record<string, unknown>).path === 'string') {\n const path = String((value as Record<string, unknown>).path || '')\n return path.startsWith('/') ? path : null\n }\n return null\n}\n\nfunction commonParentPath(paths: string[]): string {\n const parents = paths\n .map((p) => {\n const idx = p.lastIndexOf('/')\n return idx > 0 ? p.slice(0, idx) : ''\n })\n .filter((p) => p.startsWith('/'))\n if (!parents.length) return ''\n const split = parents.map((p) => p.split('/').filter(Boolean))\n let prefix = split[0]\n for (let i = 1; i < split.length; i++) {\n const cur = split[i]\n let j = 0\n while (j < prefix.length && j < cur.length && prefix[j] === cur[j]) j++\n prefix = prefix.slice(0, j)\n if (!prefix.length) break\n }\n return prefix.length ? `/${prefix.join('/')}` : ''\n}\n\nfunction inferModelPathFromContext(context: Record<string, any>): string {\n const refs = context?.refs && typeof context.refs === 'object' && !Array.isArray(context.refs) ? (context.refs as Record<string, unknown>) : null\n if (!refs) return ''\n const paths = Object.values(refs)\n .map((v) => extractPathFromRef(v))\n .filter((p): p is string => typeof p === 'string' && p.startsWith('/'))\n return commonParentPath(paths)\n}\n\nfunction collectBindingPathsFromNode(node: unknown, paths: string[]) {\n if (Array.isArray(node)) {\n node.forEach((item) => collectBindingPathsFromNode(item, paths))\n return\n }\n if (!node || typeof node !== 'object') return\n const current = node as Record<string, unknown>\n const props =\n current.props && typeof current.props === 'object' && !Array.isArray(current.props) ? (current.props as Record<string, unknown>) : null\n const bindPath =\n extractPathFromRef(current.bind_path_token) ||\n extractPathFromRef(current.value) ||\n extractPathFromRef(props?.bind_path_token) ||\n extractPathFromRef(props?.value)\n if (bindPath) {\n paths.push(bindPath)\n }\n const children = Array.isArray(current.children) ? current.children : []\n children.forEach((child) => collectBindingPathsFromNode(child, paths))\n}\n\nfunction inferModelPathFromSurfaceCommands(surfaceId: string, commands: any[]): string {\n if (!surfaceId) return ''\n const paths: string[] = []\n commands.forEach((cmd) => {\n const update = cmd?.updateComponents\n if (!update || update.surfaceId !== surfaceId) return\n collectBindingPathsFromNode(update.components, paths)\n })\n return commonParentPath(paths)\n}\n\nexport function isSubmitLikeActionName(name: string): boolean {\n const trimmed = typeof name === 'string' ? name.trim() : ''\n return trimmed === 'submit' || trimmed === 'confirm' || trimmed.startsWith('submit_') || trimmed.endsWith('.confirm')\n}\n\nexport function isCancelLikeActionName(name: string): boolean {\n const trimmed = typeof name === 'string' ? name.trim() : ''\n return trimmed === 'cancel' || trimmed === 'qf.cancel' || trimmed.endsWith('.cancel')\n}\n\nexport function shouldOptimisticallyDismissSurface(actionName: string, context: Record<string, unknown>): boolean {\n if (isSubmitLikeActionName(actionName) || isCancelLikeActionName(actionName)) return true\n if (actionName === 'qf.submit' || actionName === 'qf.cancel') return true\n const submitFlag = (context as any)?.submit\n return submitFlag === true\n}\n\nexport function buildDispatchContext(surfaceId: string, rawContext: Record<string, unknown>, commands: any[]): Record<string, any> {\n let normalizedContext = normalizeActionContext(rawContext) as Record<string, any>\n let modelPath =\n normalizedContext?.model && typeof normalizedContext.model === 'object' && typeof normalizedContext.model.path === 'string'\n ? String(normalizedContext.model.path).trim()\n : ''\n if (!modelPath) {\n const inferredModelPath = inferModelPathFromContext(normalizedContext)\n if (inferredModelPath) {\n modelPath = inferredModelPath\n normalizedContext = {\n ...normalizedContext,\n model: {\n ...(normalizedContext.model && typeof normalizedContext.model === 'object' ? normalizedContext.model : {}),\n path: inferredModelPath\n }\n }\n }\n }\n if (!modelPath) {\n const inferredModelPath = inferModelPathFromSurfaceCommands(surfaceId, commands)\n if (inferredModelPath) {\n modelPath = inferredModelPath\n normalizedContext = {\n ...normalizedContext,\n model: {\n ...(normalizedContext.model && typeof normalizedContext.model === 'object' ? normalizedContext.model : {}),\n path: inferredModelPath\n }\n }\n }\n }\n if (modelPath) {\n const valuesFromStore = readModelValues(modelPath)\n const existingValues =\n normalizedContext.values && typeof normalizedContext.values === 'object' && !Array.isArray(normalizedContext.values)\n ? (normalizedContext.values as Record<string, unknown>)\n : {}\n const mergedValues = { ...valuesFromStore, ...existingValues }\n if (Object.keys(mergedValues).length > 0) {\n const existingRefs =\n normalizedContext.refs && typeof normalizedContext.refs === 'object' && !Array.isArray(normalizedContext.refs)\n ? (normalizedContext.refs as Record<string, unknown>)\n : {}\n const refs: Record<string, unknown> = { ...existingRefs }\n for (const key of Object.keys(mergedValues)) {\n if (refs[key] === undefined) {\n refs[key] = `$bind:${modelPath}/${key}`.replace(/\\/{2,}/g, '/')\n }\n }\n normalizedContext = {\n ...normalizedContext,\n refs,\n values: mergedValues\n }\n }\n }\n\n const displayMeta = collectActionDisplayMeta(commands, surfaceId, normalizedContext)\n if (!displayMeta) return normalizedContext\n return {\n ...normalizedContext,\n labels: {\n ...(normalizedContext.labels && typeof normalizedContext.labels === 'object' ? normalizedContext.labels : {}),\n ...displayMeta.labels\n },\n valueLabels: {\n ...(normalizedContext.valueLabels && typeof normalizedContext.valueLabels === 'object' ? normalizedContext.valueLabels : {}),\n ...displayMeta.valueLabels\n }\n }\n}\n","export function extractSurfaceId(cmd: any): string {\n if (!cmd || typeof cmd !== 'object') return ''\n return cmd.createSurface?.surfaceId ?? cmd.updateComponents?.surfaceId ?? cmd.updateDataModel?.surfaceId ?? cmd.deleteSurface?.surfaceId ?? ''\n}\n\nexport function resolveVisibleSurfaceIds(commands: any[], dismissedSurfaceIds: readonly string[] = []): string[] {\n const states = new Map<string, { deleted: boolean }>()\n commands.forEach((cmd) => {\n const sid = extractSurfaceId(cmd)\n if (!sid) return\n const prev = states.get(sid) || { deleted: false }\n if ((cmd as Record<string, unknown>)?.deleteSurface) {\n prev.deleted = true\n } else if ((cmd as Record<string, unknown>)?.createSurface) {\n prev.deleted = false\n }\n states.set(sid, prev)\n })\n return Array.from(states.entries())\n .filter(([sid, st]) => !st.deleted && !dismissedSurfaceIds.includes(sid))\n .map(([sid]) => sid)\n}\n","type WizardField = {\n key: string\n label?: string | null\n placeholder?: string | null\n required?: boolean | null\n type?: string | null\n options?: { label: string; value: string }[]\n default?: unknown\n}\n\ntype WizardStep = {\n stepId: string\n title?: string | null\n description?: string | null\n fields?: WizardField[]\n}\n\nexport type WizardSchema = {\n version?: string\n surfaceId: string\n title?: string | null\n description?: string | null\n modelPath: string\n steps: WizardStep[]\n nextEvent: string\n backEvent: string\n submitEvent: string\n labels?: { next?: string | null; back?: string | null; submit?: string | null } | null\n}\n\nexport type WizardModelSeed = {\n modelPath: string\n values: Record<string, unknown>\n}\n\nfunction readString(obj: Record<string, any>, ...keys: string[]): string {\n for (const k of keys) {\n const v = obj?.[k]\n if (typeof v === 'string' && v.trim()) return v.trim()\n }\n return ''\n}\n\nfunction readOptionalString(obj: Record<string, any>, ...keys: string[]): string | null {\n for (const k of keys) {\n const v = obj?.[k]\n if (typeof v === 'string') return v\n }\n return null\n}\n\nexport function normalizeWizardSchema(schema: unknown): WizardSchema | null {\n if (!schema || typeof schema !== 'object') return null\n const raw = schema as Record<string, any>\n const surfaceId = readString(raw, 'surfaceId', 'surface_id')\n const modelPath = readString(raw, 'modelPath', 'model_path')\n const submitEvent = readString(raw, 'submitEvent', 'submit_event')\n const stepsRaw = Array.isArray(raw.steps) ? raw.steps : []\n if (!surfaceId || !modelPath || !submitEvent || !stepsRaw.length) return null\n\n const steps: WizardStep[] = stepsRaw\n .map((s: any) => {\n if (!s || typeof s !== 'object') return null\n const stepObj = s as Record<string, any>\n const stepId = readString(stepObj, 'stepId', 'step_id')\n if (!stepId) return null\n const fieldsRaw = Array.isArray(stepObj.fields) ? stepObj.fields : []\n const fields: WizardField[] = fieldsRaw\n .map((f: any) => {\n if (!f || typeof f !== 'object') return null\n const fo = f as Record<string, any>\n const key = readString(fo, 'key')\n if (!key) return null\n const type = readOptionalString(fo, 'type')\n const label = readOptionalString(fo, 'label')\n const placeholder = readOptionalString(fo, 'placeholder')\n const required = typeof fo.required === 'boolean' ? fo.required : fo.required === null || fo.required === undefined ? null : !!fo.required\n const options = Array.isArray(fo.options) ? fo.options : undefined\n return {\n key,\n type,\n label,\n placeholder,\n required,\n options,\n default: fo.default\n }\n })\n .filter(Boolean) as WizardField[]\n return {\n stepId,\n title: readOptionalString(stepObj, 'title'),\n description: readOptionalString(stepObj, 'description'),\n fields\n }\n })\n .filter(Boolean) as WizardStep[]\n\n if (!steps.length) return null\n const nextEvent = readString(raw, 'nextEvent', 'next_event') || 'wizard.next'\n const backEvent = readString(raw, 'backEvent', 'back_event') || 'wizard.back'\n const labels =\n raw.labels && typeof raw.labels === 'object' && !Array.isArray(raw.labels)\n ? (raw.labels as { next?: string | null; back?: string | null; submit?: string | null })\n : null\n return {\n version: readOptionalString(raw, 'version') ?? undefined,\n surfaceId,\n modelPath,\n steps,\n submitEvent,\n nextEvent,\n backEvent,\n labels,\n title: readOptionalString(raw, 'title'),\n description: readOptionalString(raw, 'description')\n }\n}\n\nexport function findWizardSchemaBySurface(conversationMessages: readonly any[], surfaceId: string): WizardSchema | null {\n if (!surfaceId) return null\n for (let i = conversationMessages.length - 1; i >= 0; i--) {\n const msg = conversationMessages[i]\n const items = Array.isArray(msg?.content) ? msg.content : []\n for (let j = items.length - 1; j >= 0; j--) {\n const item = items[j]\n if (item?.type !== 'a2uiSchema') continue\n const schema = normalizeWizardSchema(item?.schema)\n if (schema && schema.surfaceId === surfaceId) return schema\n }\n }\n return null\n}\n\nexport function buildWizardModelSeed(schema: WizardSchema | null): WizardModelSeed | null {\n if (!schema?.modelPath) return null\n const values: Record<string, unknown> = {}\n schema.steps.forEach((step) => {\n const fields = Array.isArray(step?.fields) ? step.fields : []\n fields.forEach((field) => {\n const key = typeof field?.key === 'string' ? field.key.trim() : ''\n if (!key || key in values || field?.default === undefined) return\n values[key] = field.default\n })\n })\n return { modelPath: schema.modelPath, values }\n}\n\nexport function pickWizardCurrentStepIdFromCommands(surfaceId: string, commands: any[]): string {\n for (let i = commands.length - 1; i >= 0; i--) {\n const cmd = commands[i]\n const update = cmd?.updateComponents\n if (!update || update.surfaceId !== surfaceId) continue\n const components = Array.isArray(update.components) ? update.components : []\n for (const c of components) {\n if (c?.component !== 'Button') continue\n const stepId = c?.action?.event?.context?.step_id\n if (typeof stepId === 'string' && stepId.trim()) return stepId.trim()\n }\n }\n return ''\n}\n\nfunction buildWizardComponents(schema: WizardSchema, stepId: string) {\n const stepIndex = Math.max(\n 0,\n schema.steps.findIndex((s) => s?.stepId === stepId)\n )\n const step = schema.steps[stepIndex] || schema.steps[0]\n const resolvedStepId = typeof step?.stepId === 'string' && step.stepId ? step.stepId : schema.steps[0]?.stepId\n const fields = Array.isArray(step?.fields) ? step.fields : []\n const modelPath = schema.modelPath\n\n const rootChildren: string[] = ['title', 'desc', 'step-indicator', 'step-title']\n const nodes: any[] = [\n { component: 'Column', id: 'root', children: rootChildren },\n { component: 'Text', id: 'title', text: schema.title || '表单', variant: 'h2' },\n { component: 'Text', id: 'desc', text: schema.description || '', variant: 'caption' },\n { component: 'Text', id: 'step-indicator', text: `步骤 ${stepIndex + 1}/${schema.steps.length}`, variant: 'caption' },\n { component: 'Text', id: 'step-title', text: step?.title || '', variant: 'h3' }\n ]\n\n for (const f of fields) {\n if (!f || typeof f !== 'object') continue\n const key = typeof f.key === 'string' ? f.key.trim() : ''\n if (!key) continue\n const id = `f-${key}`\n const bindPath = `${modelPath}/${key}`.replace(/\\/{2,}/g, '/')\n rootChildren.push(id)\n const label = typeof f.label === 'string' && f.label.trim() ? f.label.trim() : key\n const placeholder = typeof f.placeholder === 'string' ? f.placeholder : undefined\n const type = typeof f.type === 'string' ? f.type.toLowerCase() : 'text'\n if (type === 'select') {\n nodes.push({\n component: 'Select',\n id,\n label,\n placeholder,\n options: Array.isArray((f as any).options) ? (f as any).options : [],\n value: { path: bindPath },\n bind_path_token: `$bind:${bindPath}`\n })\n continue\n }\n if (type === 'switch') {\n nodes.push({\n component: 'Switch',\n id,\n label,\n value: { path: bindPath },\n bind_path_token: `$bind:${bindPath}`\n })\n continue\n }\n nodes.push({\n component: 'TextField',\n id,\n label,\n placeholder,\n value: { path: bindPath },\n bind_path_token: `$bind:${bindPath}`\n })\n }\n\n rootChildren.push('divider', 'actions')\n nodes.push({ component: 'Divider', id: 'divider' })\n nodes.push({ component: 'Row', id: 'actions', gap: 8, children: [] as string[] })\n const actions = nodes.find((n) => n.id === 'actions')\n const actionChildren: string[] = []\n actions.children = actionChildren\n const backLabel = typeof schema.labels?.back === 'string' && schema.labels.back.trim() ? schema.labels.back.trim() : '上一步'\n const nextLabel = typeof schema.labels?.next === 'string' && schema.labels.next.trim() ? schema.labels.next.trim() : '下一步'\n const submitLabel = typeof schema.labels?.submit === 'string' && schema.labels.submit.trim() ? schema.labels.submit.trim() : '提交'\n\n if (stepIndex > 0) {\n actionChildren.push('btn-prev')\n nodes.push({\n component: 'Button',\n id: 'btn-prev',\n label: backLabel,\n variant: 'default',\n action: { event: { name: schema.backEvent, context: { model: { path: modelPath }, step_id: resolvedStepId } } }\n })\n }\n\n const isLast = stepIndex >= schema.steps.length - 1\n if (isLast) {\n actionChildren.push('btn-submit')\n nodes.push({\n component: 'Button',\n id: 'btn-submit',\n label: submitLabel,\n variant: 'primary',\n action: { event: { name: schema.submitEvent, context: { model: { path: modelPath }, step_id: resolvedStepId } } }\n })\n } else {\n actionChildren.push('btn-next')\n nodes.push({\n component: 'Button',\n id: 'btn-next',\n label: nextLabel,\n variant: 'primary',\n action: { event: { name: schema.nextEvent, context: { model: { path: modelPath }, step_id: resolvedStepId } } }\n })\n }\n\n return nodes\n}\n\nexport function buildWizardUpdateComponentsCommand(schema: WizardSchema, stepId: string) {\n return {\n updateComponents: {\n surfaceId: schema.surfaceId,\n components: buildWizardComponents(schema, stepId)\n },\n version: 'v0.9'\n }\n}\n","import { shouldOptimisticallyDismissSurface } from './action'\nimport { resolveVisibleSurfaceIds } from './visibility'\nimport {\n buildWizardModelSeed,\n buildWizardUpdateComponentsCommand,\n normalizeWizardSchema,\n pickWizardCurrentStepIdFromCommands,\n type WizardSchema\n} from './wizard'\n\nexport type MessageCursor = {\n messageId: string\n contentLength: number\n}\n\nexport type A2uiRuntimeEffect =\n | { type: 'reset-model-store' }\n | { type: 'clear-model'; modelPath: string }\n | { type: 'write-model'; modelPath: string; values: Record<string, unknown> }\n\nexport type A2uiRuntimeState = {\n processedMessageCursors: MessageCursor[]\n serverCommands: any[]\n localCommands: any[]\n anchorIndexBySurface: Record<string, number>\n wizardSchemaBySurface: Record<string, WizardSchema>\n latestCreateCommandIndexBySurface: Record<string, number>\n initializedWizardRevisionBySurface: Record<string, string>\n modelPathBySurface: Record<string, string>\n wizardStepBySurface: Record<string, string>\n optimisticallyDismissedSurfaceIds: string[]\n lastA2uiHost: { id: string; index: number }\n}\n\ntype PendingItem = {\n messageIndex: number\n messageId: string\n item: any\n}\n\ntype RuntimeActionInput = {\n surfaceId: string\n actionName: string\n rawContext: Record<string, unknown>\n}\n\n/** 创建全新的 A2UI runtime 状态。 */\nexport function createA2uiRuntimeState(): A2uiRuntimeState {\n return {\n processedMessageCursors: [],\n serverCommands: [],\n localCommands: [],\n anchorIndexBySurface: {},\n wizardSchemaBySurface: {},\n latestCreateCommandIndexBySurface: {},\n initializedWizardRevisionBySurface: {},\n modelPathBySurface: {},\n wizardStepBySurface: {},\n optimisticallyDismissedSurfaceIds: [],\n lastA2uiHost: { id: '', index: -1 }\n }\n}\n\n/** 从命令体中提取 surfaceId。 */\nfunction extractSurfaceId(command: any): string {\n if (!command || typeof command !== 'object') return ''\n return String(\n command.createSurface?.surfaceId ??\n command.updateComponents?.surfaceId ??\n command.updateDataModel?.surfaceId ??\n command.deleteSurface?.surfaceId ??\n ''\n ).trim()\n}\n\n/** 合并当前 runtime 中的服务端命令和本地命令。 */\nexport function getA2uiRuntimeCommands(state: A2uiRuntimeState): any[] {\n return [...state.serverCommands, ...state.localCommands]\n}\n\n/** 增量比对消息流,只有历史被改写时才退化成全量回放。 */\nfunction diffConversationMessages(messages: readonly any[], prevCursors: MessageCursor[]) {\n if (messages.length < prevCursors.length) {\n return { shouldReplayAll: true, nextCursors: [] as MessageCursor[], pendingItems: [] as PendingItem[] }\n }\n\n const nextCursors: MessageCursor[] = []\n const pendingItems: PendingItem[] = []\n for (let messageIndex = 0; messageIndex < messages.length; messageIndex += 1) {\n const message = messages[messageIndex]\n const messageId = String(message?.messageId ?? messageIndex)\n const items = Array.isArray(message?.content) ? message.content : []\n const prevCursor = prevCursors[messageIndex]\n const startIndex = prevCursor ? prevCursor.contentLength : 0\n\n if (prevCursor && (prevCursor.messageId !== messageId || items.length < prevCursor.contentLength)) {\n return { shouldReplayAll: true, nextCursors: [] as MessageCursor[], pendingItems: [] as PendingItem[] }\n }\n\n for (let itemIndex = startIndex; itemIndex < items.length; itemIndex += 1) {\n pendingItems.push({ messageIndex, messageId, item: items[itemIndex] })\n }\n nextCursors.push({ messageId, contentLength: items.length })\n }\n\n return { shouldReplayAll: false, nextCursors, pendingItems }\n}\n\n/** 当 schema 和 createSurface 都已到位时,初始化 wizard 的默认值和首步。 */\nfunction initializeWizardSurface(state: A2uiRuntimeState, surfaceId: string, effects: A2uiRuntimeEffect[], nextWizardSteps: Record<string, string>) {\n const wizard = state.wizardSchemaBySurface[surfaceId]\n const createCommandIndex = state.latestCreateCommandIndexBySurface[surfaceId]\n const modelSeed = buildWizardModelSeed(wizard)\n if (!wizard || modelSeed === null || createCommandIndex === undefined) return\n\n const revision = `${surfaceId}:${createCommandIndex}`\n state.modelPathBySurface[surfaceId] = modelSeed.modelPath\n if (state.initializedWizardRevisionBySurface[surfaceId] === revision) return\n\n effects.push({ type: 'clear-model', modelPath: modelSeed.modelPath })\n effects.push({ type: 'write-model', modelPath: modelSeed.modelPath, values: modelSeed.values })\n state.initializedWizardRevisionBySurface[surfaceId] = revision\n\n const firstStepId = wizard.steps[0]?.stepId\n if (typeof firstStepId === 'string' && firstStepId.trim()) {\n nextWizardSteps[surfaceId] = firstStepId.trim()\n }\n}\n\n/** 用消息流推进 runtime 状态,必要时生成模型同步 effect。 */\nexport function reduceA2uiRuntimeMessages(state: A2uiRuntimeState, messages: readonly any[]) {\n const { shouldReplayAll, pendingItems, nextCursors } = diffConversationMessages(messages || [], state.processedMessageCursors)\n const itemsToProcess = shouldReplayAll\n ? (messages as any[]).flatMap((message, messageIndex) => {\n const messageId = String(message?.messageId ?? messageIndex)\n const items = Array.isArray(message?.content) ? message.content : []\n return items.map((item: any) => ({ messageIndex, messageId, item }))\n })\n : pendingItems\n\n if (!shouldReplayAll && itemsToProcess.length === 0) {\n return { state, effects: [] as A2uiRuntimeEffect[] }\n }\n\n const nextState = shouldReplayAll ? createA2uiRuntimeState() : { ...state }\n nextState.processedMessageCursors = shouldReplayAll ? [] : [...state.processedMessageCursors]\n nextState.serverCommands = shouldReplayAll ? [] : [...state.serverCommands]\n nextState.localCommands = shouldReplayAll ? [] : [...state.localCommands]\n nextState.anchorIndexBySurface = shouldReplayAll ? {} : { ...state.anchorIndexBySurface }\n nextState.wizardSchemaBySurface = shouldReplayAll ? {} : { ...state.wizardSchemaBySurface }\n nextState.latestCreateCommandIndexBySurface = shouldReplayAll ? {} : { ...state.latestCreateCommandIndexBySurface }\n nextState.initializedWizardRevisionBySurface = shouldReplayAll ? {} : { ...state.initializedWizardRevisionBySurface }\n nextState.modelPathBySurface = shouldReplayAll ? {} : { ...state.modelPathBySurface }\n nextState.wizardStepBySurface = shouldReplayAll ? {} : { ...state.wizardStepBySurface }\n nextState.optimisticallyDismissedSurfaceIds = shouldReplayAll ? [] : [...state.optimisticallyDismissedSurfaceIds]\n nextState.lastA2uiHost = shouldReplayAll ? { id: '', index: -1 } : { ...state.lastA2uiHost }\n\n const effects: A2uiRuntimeEffect[] = shouldReplayAll ? [{ type: 'reset-model-store' }] : []\n const deletedSurfaceIds = new Set<string>()\n const nextWizardSteps: Record<string, string> = {}\n\n itemsToProcess.forEach(({ item, messageIndex, messageId }) => {\n if (item?.type === 'a2uiSchema') {\n const schema = normalizeWizardSchema(item.schema)\n if (schema) {\n nextState.wizardSchemaBySurface[schema.surfaceId] = schema\n initializeWizardSurface(nextState, schema.surfaceId, effects, nextWizardSteps)\n }\n return\n }\n\n if (item?.type !== 'a2uiCommand' || !item.command) return\n nextState.serverCommands.push(item.command)\n nextState.lastA2uiHost = { id: messageId, index: messageIndex }\n\n const surfaceId = extractSurfaceId(item.command)\n if (!surfaceId) return\n if (nextState.anchorIndexBySurface[surfaceId] === undefined && !item.command?.deleteSurface) {\n nextState.anchorIndexBySurface[surfaceId] = messageIndex\n }\n\n if (item.command?.createSurface) {\n nextState.latestCreateCommandIndexBySurface[surfaceId] = nextState.serverCommands.length - 1\n initializeWizardSurface(nextState, surfaceId, effects, nextWizardSteps)\n }\n\n if (item.command?.deleteSurface) {\n deletedSurfaceIds.add(surfaceId)\n const modelPath = nextState.modelPathBySurface[surfaceId]\n if (modelPath) effects.push({ type: 'clear-model', modelPath })\n delete nextState.initializedWizardRevisionBySurface[surfaceId]\n delete nextState.modelPathBySurface[surfaceId]\n }\n })\n\n nextState.processedMessageCursors = shouldReplayAll\n ? (messages as any[]).map((message, messageIndex) => ({\n messageId: String(message?.messageId ?? messageIndex),\n contentLength: Array.isArray(message?.content) ? message.content.length : 0\n }))\n : nextCursors\n nextState.wizardStepBySurface = { ...nextState.wizardStepBySurface, ...nextWizardSteps }\n\n if (deletedSurfaceIds.size) {\n nextState.optimisticallyDismissedSurfaceIds = nextState.optimisticallyDismissedSurfaceIds.filter((surfaceId) => !deletedSurfaceIds.has(surfaceId))\n nextState.wizardStepBySurface = Object.fromEntries(\n Object.entries(nextState.wizardStepBySurface).filter(([surfaceId]) => !deletedSurfaceIds.has(surfaceId))\n )\n nextState.localCommands = nextState.localCommands.filter(\n (cmd) => !deletedSurfaceIds.has(String(cmd?.updateComponents?.surfaceId || cmd?.updateDataModel?.surfaceId || ''))\n )\n }\n\n return { state: nextState, effects }\n}\n\n/** 处理不依赖副作用的本地 runtime 交互,如 wizard 切步和乐观关闭。 */\nexport function reduceA2uiRuntimeAction(state: A2uiRuntimeState, input: RuntimeActionInput) {\n const { surfaceId, actionName, rawContext } = input\n if (!surfaceId) {\n return { state, handled: actionName === 'wizard.next' || actionName === 'wizard.back' }\n }\n\n const wizard = state.wizardSchemaBySurface[surfaceId]\n if (wizard) {\n const isNext = actionName === wizard.nextEvent\n const isBack = actionName === wizard.backEvent\n if (isNext || isBack) {\n const commands = getA2uiRuntimeCommands(state)\n const fallbackStepId = pickWizardCurrentStepIdFromCommands(surfaceId, commands) || wizard.steps[0]?.stepId || ''\n const currentStepId = state.wizardStepBySurface[surfaceId] || fallbackStepId\n const currentIndex = wizard.steps.findIndex((step) => step?.stepId === currentStepId)\n const baseIndex = currentIndex >= 0 ? currentIndex : 0\n const nextIndex = isNext ? baseIndex + 1 : baseIndex - 1\n const nextStepId = wizard.steps[nextIndex]?.stepId\n if (!nextStepId) return { state, handled: true }\n\n return {\n state: {\n ...state,\n wizardStepBySurface: { ...state.wizardStepBySurface, [surfaceId]: nextStepId },\n localCommands: [...state.localCommands, buildWizardUpdateComponentsCommand(wizard, nextStepId)]\n },\n handled: true\n }\n }\n }\n\n if (actionName === 'wizard.next' || actionName === 'wizard.back') {\n return { state, handled: true }\n }\n\n if (!shouldOptimisticallyDismissSurface(actionName, rawContext)) {\n return { state, handled: false }\n }\n if (state.optimisticallyDismissedSurfaceIds.includes(surfaceId)) {\n return { state, handled: false }\n }\n\n return {\n state: {\n ...state,\n optimisticallyDismissedSurfaceIds: [...state.optimisticallyDismissedSurfaceIds, surfaceId]\n },\n handled: false\n }\n}\n\n/** 根据当前 runtime 状态导出给渲染层使用的视图模型。 */\nexport function selectA2uiRuntimeView(state: A2uiRuntimeState, dismissedSurfaceIds: readonly string[]) {\n const mergedDismissedSurfaceIds = Array.from(\n new Set([...(dismissedSurfaceIds || []), ...state.optimisticallyDismissedSurfaceIds].filter((surfaceId) => surfaceId?.trim?.()))\n )\n const commands = getA2uiRuntimeCommands(state)\n const visibleSurfaceIds = resolveVisibleSurfaceIds(commands, mergedDismissedSurfaceIds)\n const anchoredSurfaceIdsByMessageIndex: Record<number, string[]> = {}\n\n visibleSurfaceIds.forEach((surfaceId) => {\n const messageIndex = state.anchorIndexBySurface[surfaceId]\n if (typeof messageIndex !== 'number' || messageIndex < 0) return\n if (!anchoredSurfaceIdsByMessageIndex[messageIndex]) anchoredSurfaceIdsByMessageIndex[messageIndex] = []\n anchoredSurfaceIdsByMessageIndex[messageIndex].push(surfaceId)\n })\n\n return {\n commands,\n visibleSurfaceIds,\n lastA2uiHostMessageId: state.lastA2uiHost.id,\n lastA2uiHostMessageIndex: state.lastA2uiHost.index,\n anchoredSurfaceIdsByMessageIndex\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { clearAllModelValues, clearModelValues, writeModelValues } from '../components/A2uiComponents'\nimport {\n createA2uiRuntimeState,\n reduceA2uiRuntimeAction,\n reduceA2uiRuntimeMessages,\n selectA2uiRuntimeView,\n type A2uiRuntimeEffect,\n type A2uiRuntimeState\n} from './runtime'\nimport type { A2uiControllerParams, A2uiControllerResult } from './types'\n\n/** 执行 runtime 产出的模型同步 effect。 */\nfunction applyA2uiRuntimeEffects(effects: A2uiRuntimeEffect[]) {\n effects.forEach((effect) => {\n if (effect.type === 'reset-model-store') {\n clearAllModelValues()\n return\n }\n if (effect.type === 'clear-model') {\n clearModelValues(effect.modelPath)\n return\n }\n writeModelValues(effect.modelPath, effect.values)\n })\n}\n\nexport function useA2uiController(params: A2uiControllerParams): A2uiControllerResult {\n const { conversationId, conversationMessages, dismissedSurfaceIds } = params\n const runtimeRef = useRef<A2uiRuntimeState>(createA2uiRuntimeState())\n const [runtimeState, setRuntimeState] = useState<A2uiRuntimeState>(() => createA2uiRuntimeState())\n\n useEffect(() => {\n const nextState = createA2uiRuntimeState()\n runtimeRef.current = nextState\n setRuntimeState(nextState)\n clearAllModelValues()\n }, [conversationId])\n\n useEffect(() => {\n const result = reduceA2uiRuntimeMessages(runtimeRef.current, conversationMessages || [])\n if (result.state === runtimeRef.current && result.effects.length === 0) return\n runtimeRef.current = result.state\n applyA2uiRuntimeEffects(result.effects)\n setRuntimeState(result.state)\n }, [conversationMessages, conversationId])\n\n const view = useMemo(() => selectA2uiRuntimeView(runtimeState, dismissedSurfaceIds), [runtimeState, dismissedSurfaceIds])\n\n /** 仅推进本地 runtime;未处理的动作交给上层决定如何派发。 */\n const handleRuntimeAction = useCallback((payload: any) => {\n const surfaceId = String(payload?.surfaceId || payload?.cardId || '')\n const name = String(payload?.name || payload?.event?.name || '').trim()\n const rawContext = (payload?.context || payload?.event?.context || {}) as Record<string, unknown>\n const runtimeActionResult = reduceA2uiRuntimeAction(runtimeRef.current, { surfaceId, actionName: name, rawContext })\n if (runtimeActionResult.state !== runtimeRef.current) {\n runtimeRef.current = runtimeActionResult.state\n setRuntimeState(runtimeActionResult.state)\n }\n return { handled: runtimeActionResult.handled, name, surfaceId, rawContext }\n }, [])\n\n return {\n runtimeState,\n commands: view.commands,\n visibleSurfaceIds: view.visibleSurfaceIds,\n lastA2uiHostMessageId: view.lastA2uiHostMessageId,\n lastA2uiHostMessageIndex: view.lastA2uiHostMessageIndex,\n anchoredSurfaceIdsByMessageIndex: view.anchoredSurfaceIdsByMessageIndex,\n handleRuntimeAction\n }\n}\n\nexport type { A2uiControllerParams, A2uiControllerResult, A2uiRuntimeActionResult, DispatchPayload } from './types'\n","import React from 'react'\n\nexport type A2uiRuntimeProviderProps = {\n messages: readonly any[]\n children: React.ReactNode\n}\n\nexport type A2uiRuntimeView = {\n commands: any[]\n onAction: (payload: any) => void\n surfaceIdsByMessageIndex: Record<number, string[]>\n}\n\nexport const A2uiRuntimeContext = React.createContext<A2uiRuntimeView>({\n commands: [],\n onAction: () => undefined,\n surfaceIdsByMessageIndex: {}\n})\n","import React from 'react'\nimport { A2uiRuntimeContext } from './context'\n\n/** 读取当前 A2UI runtime 的渲染视图和动作入口。 */\nexport function useA2uiRuntimeView() {\n return React.useContext(A2uiRuntimeContext)\n}\n","import { XCard } from '../x-card'\nimport { useA2uiRuntimeView } from './useA2uiRuntimeView'\n\n/** 在消息锚点位置挂载当前可见的 A2UI Surface。 */\nexport function A2uiMessageCards({ messageIndex }: { messageIndex: number }) {\n const { surfaceIdsByMessageIndex } = useA2uiRuntimeView()\n const surfaceIds = surfaceIdsByMessageIndex[messageIndex] || []\n if (!surfaceIds.length) return null\n\n return (\n <div>\n {surfaceIds.map((surfaceId) => (\n <XCard.Card key={surfaceId} id={surfaceId} />\n ))}\n </div>\n )\n}\n","/** A2UI 交互事件的标准载荷。 */\nexport type A2uiActionPayload = {\n name: string\n surfaceId: string\n context: Record<string, any>\n}\n\n/** 判断事件名是否代表提交类动作。 */\nexport function isSubmitLikeActionName(name: string): boolean {\n const normalized = String(name || '').trim()\n return normalized === 'submit' || normalized === 'confirm' || normalized.startsWith('submit_') || normalized.endsWith('.confirm')\n}\n\n/** 判断事件名是否代表取消类动作。 */\nexport function isCancelLikeActionName(name: string): boolean {\n const normalized = String(name || '').trim()\n return normalized === 'cancel' || normalized === 'qf.cancel' || normalized.endsWith('.cancel')\n}\n\n/** 判断当前动作是否应该先把 Surface 从界面上隐藏。 */\nexport function shouldDismissA2uiSurface(name: string, context?: Record<string, unknown>): boolean {\n if (isSubmitLikeActionName(name) || isCancelLikeActionName(name)) return true\n if (name === 'qf.submit' || name === 'qf.cancel') return true\n return context?.submit === true\n}\n\n/** 把外部输入规整成稳定的 A2UI 载荷。 */\nexport function normalizeA2uiActionPayload(payload: Partial<A2uiActionPayload>): A2uiActionPayload {\n return {\n name: String(payload?.name || '').trim(),\n surfaceId: String(payload?.surfaceId || '').trim(),\n context: payload?.context && typeof payload.context === 'object' && !Array.isArray(payload.context) ? payload.context : {}\n }\n}\n\n/** 把 A2UI 动作编码成发送给后端的标准协议文本。 */\nexport function formatA2uiActionMessage(payload: Partial<A2uiActionPayload>): string {\n const normalized = normalizeA2uiActionPayload(payload)\n return JSON.stringify({\n type: 'a2ui_action.v1',\n name: normalized.name,\n surfaceId: normalized.surfaceId,\n context: normalized.context\n })\n}\n\n/** 从文本消息中解析 A2UI 动作协议。 */\nexport function parseA2uiActionMessage(content?: string): A2uiActionPayload | null {\n if (typeof content !== 'string') return null\n const trimmed = content.trim()\n if (!trimmed.startsWith('{') || !trimmed.includes('\"a2ui_action.v1\"')) return null\n\n try {\n const parsed = JSON.parse(trimmed)\n if (parsed?.type !== 'a2ui_action.v1') return null\n return normalizeA2uiActionPayload(parsed)\n } catch {\n return null\n }\n}\n\n/** 判断这条动作是否应该渲染成 Question 摘要。 */\nfunction isQuestionActionPayload(payload: A2uiActionPayload): boolean {\n const mode = payload.context?.form_mode\n if (payload.name === 'qf.submit' || payload.name === 'qf.cancel') return true\n if (payload.name.startsWith('qf.')) return true\n return typeof mode === 'string' && mode.toLowerCase() === 'ephemeral'\n ? isSubmitLikeActionName(payload.name) || isCancelLikeActionName(payload.name)\n : false\n}\n\n/** 把值格式化成用户可读的摘要文本。 */\nfunction formatActionValue(value: unknown, displayOverride?: unknown): string {\n if (typeof displayOverride === 'string' && displayOverride.trim()) return displayOverride.trim()\n if (typeof value === 'boolean') return value ? '是' : '否'\n if (Array.isArray(value)) return value.map((item) => String(item)).join('、')\n if (value && typeof value === 'object') return JSON.stringify(value)\n return String(value)\n}\n\n/** 生成 Question 类型动作的简洁摘要。 */\nfunction buildQuestionSummary(payload: A2uiActionPayload): string {\n if (isCancelLikeActionName(payload.name)) return 'Question: 已取消'\n\n const values =\n payload.context.values && typeof payload.context.values === 'object' && !Array.isArray(payload.context.values)\n ? (payload.context.values as Record<string, unknown>)\n : payload.context\n const labels =\n payload.context.labels && typeof payload.context.labels === 'object' && !Array.isArray(payload.context.labels)\n ? (payload.context.labels as Record<string, unknown>)\n : {}\n const valueLabels =\n payload.context.valueLabels && typeof payload.context.valueLabels === 'object' && !Array.isArray(payload.context.valueLabels)\n ? (payload.context.valueLabels as Record<string, unknown>)\n : {}\n\n const details = Object.entries(values)\n .filter(([, value]) => value !== null && value !== undefined && value !== '')\n .map(([key, value]) => {\n const label = typeof labels[key] === 'string' && String(labels[key]).trim() ? String(labels[key]).trim() : key\n return `${label}: ${formatActionValue(value, valueLabels[key])}`\n })\n\n return details.length ? `Question: ${details.join('; ')}` : 'Question: 已回答'\n}\n\n/** 生成普通 A2UI 动作的可读展示文本。 */\nexport function formatA2uiActionDisplayText(payload: A2uiActionPayload): string {\n if (isQuestionActionPayload(payload)) return buildQuestionSummary(payload)\n\n const values =\n payload.context.values && typeof payload.context.values === 'object' && !Array.isArray(payload.context.values)\n ? (payload.context.values as Record<string, unknown>)\n : payload.context\n const labels =\n payload.context.labels && typeof payload.context.labels === 'object' && !Array.isArray(payload.context.labels)\n ? (payload.context.labels as Record<string, unknown>)\n : {}\n const valueLabels =\n payload.context.valueLabels && typeof payload.context.valueLabels === 'object' && !Array.isArray(payload.context.valueLabels)\n ? (payload.context.valueLabels as Record<string, unknown>)\n : {}\n\n const actionLabels: Record<string, string> = {\n submit_basic: '已提交基础信息',\n submit_params: '已提交参数配置',\n back_to_basic: '已返回修改基础信息',\n back_to_params: '已返回修改参数',\n confirm: '已确认创建'\n }\n const actionLabel = actionLabels[payload.name] || `已提交动作 (${payload.name})`\n const details = Object.entries(values)\n .filter(([, value]) => value !== null && value !== undefined && value !== '')\n .map(([key, value]) => {\n const label = typeof labels[key] === 'string' && String(labels[key]).trim() ? String(labels[key]).trim() : key\n return `${label}: ${formatActionValue(value, valueLabels[key])}`\n })\n\n return details.length ? `${actionLabel}:${details.join('; ')}` : actionLabel\n}\n\n/** 把用户消息中的 A2UI 协议转换成可直接显示的文案。 */\nexport function toA2uiDisplayText(role: number, content?: string): string {\n if (role !== 1) return content || ''\n const payload = parseA2uiActionMessage(content)\n return payload ? formatA2uiActionDisplayText(payload) : content || ''\n}\n\n/** 判断 plan 是否只是 A2UI 的上游描述,不应该单独渲染。 */\nexport function shouldHideA2uiPlan(item: { plan?: unknown }): boolean {\n if (!item.plan || typeof item.plan !== 'object') return false\n\n const rawPlan = item.plan as Record<string, unknown>\n const candidates = [rawPlan, rawPlan.plan].filter((plan): plan is Record<string, unknown> => !!plan && typeof plan === 'object')\n\n return candidates.some((plan) => {\n const kind = typeof plan.kind === 'string' ? plan.kind.toLowerCase() : ''\n const surfaceId = typeof plan.surface_id === 'string' ? plan.surface_id : ''\n return (kind === 'form' || kind === 'wizard' || kind === 'dashboard') && !!surfaceId\n })\n}\n","import XMarkdown from '@ant-design/x-markdown'\nimport '@ant-design/x-markdown/themes/light.css'\nimport classNames from 'classnames'\nimport React from 'react'\nimport { AgentNavigateComponent, CodeHighlightComponent } from '../../src/components/custom-components'\nimport { getMarkdownConfig } from '../../src/core/utils'\nimport { A2uiComponents } from '../components/A2uiComponents'\nimport { shouldHideA2uiPlan } from './protocol'\n\n/** 把混合文本里的完整 HTML 包装成代码块,避免直接参与 Markdown 布局。 */\nfunction formatMixedContent(content: string): string {\n return content.replace(/<!DOCTYPE html>[\\s\\S]*?<\\/html>/gi, (match) => `\\`\\`\\`html\\n${match}\\n\\`\\`\\``)\n}\n\n/** 统一提取 plan 的真实载荷。 */\nfunction extractPlanPayload(plan: unknown): Record<string, any> | null {\n if (!plan || typeof plan !== 'object') return null\n const raw = plan as Record<string, any>\n return raw.plan && typeof raw.plan === 'object' ? raw.plan : raw\n}\n\n/** 统一规范表格列定义,避免调用方重复写兼容逻辑。 */\nfunction normalizeTableColumns(columns: unknown): { title: string; dataIndex: string }[] {\n if (!Array.isArray(columns)) return []\n return columns\n .map((column: any) => ({\n title: String(column?.title ?? ''),\n dataIndex: String(column?.dataIndex ?? column?.data_index ?? '')\n }))\n .filter((column) => column.dataIndex)\n}\n\n/** 按制品类型选择对应的 A2UI 组件。 */\nfunction renderArtifact(artifact: any, index: number): React.ReactNode {\n const ReportViewer = A2uiComponents.ReportViewer as React.ComponentType<any>\n const ChartViewer = A2uiComponents.ChartViewer as React.ComponentType<any>\n const TableViewer = A2uiComponents.TableViewer as React.ComponentType<any>\n const ArtifactCard = A2uiComponents.ArtifactCard as React.ComponentType<any>\n\n const type = String(artifact?.type ?? '').toLowerCase()\n const artifactId = String(artifact?.artifact_id ?? artifact?.artifactId ?? `artifact_${index}`)\n const title = typeof artifact?.title === 'string' ? artifact.title : undefined\n\n if (type === 'report') {\n return <ReportViewer key={artifactId} artifactId={artifactId} title={title} payload={{ markdown: artifact?.markdown }} />\n }\n if (type === 'chart') {\n return <ChartViewer key={artifactId} artifactId={artifactId} title={title} payload={artifact} />\n }\n if (type === 'table') {\n return (\n <TableViewer\n key={artifactId}\n artifactId={artifactId}\n title={title}\n payload={{ columns: normalizeTableColumns(artifact?.columns), rows: Array.isArray(artifact?.rows) ? artifact.rows : [] }}\n />\n )\n }\n return <ArtifactCard key={artifactId} type={type || 'artifact'} artifactId={artifactId} title={title} payload={artifact} />\n}\n\n/** 渲染 viewer 类型的 plan。 */\nfunction ViewerPlan({ payload }: { payload: Record<string, any> }) {\n const artifacts = Array.isArray(payload.artifacts) ? payload.artifacts : []\n if (!artifacts.length) return null\n\n const title = typeof payload.title === 'string' ? payload.title.trim() : ''\n const description = typeof payload.description === 'string' ? payload.description.trim() : ''\n const header = title || description ? `### ${title || '报告'}\\n\\n${description || ''}`.trim() : ''\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {header ? (\n <XMarkdown\n openLinksInNewTab\n className={classNames('x-markdown-light', 'xMarkdownStyle')}\n components={{ code: CodeHighlightComponent, agentnavigate: AgentNavigateComponent }}\n config={getMarkdownConfig()}\n content={formatMixedContent(header)}\n />\n ) : null}\n {artifacts.map((artifact, index) => renderArtifact(artifact, index))}\n </div>\n )\n}\n\n/** 统一渲染消息里的 plan 节点。 */\nexport function A2uiPlanNode({ item }: { item: any }) {\n if (!item || shouldHideA2uiPlan(item)) return null\n\n const payload = extractPlanPayload(item.plan)\n const isViewer = typeof payload?.kind === 'string' && payload.kind.toLowerCase() === 'viewer'\n if (payload && isViewer) {\n return <ViewerPlan payload={payload} />\n }\n\n const title = item.title ? `### ${item.title}\\n\\n` : ''\n const content = typeof item.content === 'string' ? item.content : item.plan ? `\\`\\`\\`json\\n${JSON.stringify(item.plan, null, 2)}\\n\\`\\`\\`` : ''\n if (!title && !content) return null\n\n return (\n <XMarkdown\n openLinksInNewTab\n className={classNames('x-markdown-light', 'xMarkdownStyle')}\n components={{ code: CodeHighlightComponent, agentnavigate: AgentNavigateComponent }}\n config={getMarkdownConfig()}\n content={formatMixedContent(`${title}${content}`)}\n />\n )\n}\n","import { message as antdMessage } from 'antd'\nimport React from 'react'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../src/stores/Context'\nimport { A2uiComponents, clearModelValues } from '../components/A2uiComponents'\nimport { useA2uiController } from '../controller'\nimport { buildDispatchContext, shouldOptimisticallyDismissSurface } from '../controller/action'\nimport { XCard } from '../x-card'\nimport { A2uiRuntimeContext, type A2uiRuntimeProviderProps } from './context'\nimport { formatA2uiActionMessage, normalizeA2uiActionPayload, shouldDismissA2uiSurface } from './protocol'\n\ntype MessageCursor = {\n messageId: string\n contentLength: number\n}\n\n/** 从任意命令里提取 surfaceId,用来维护 dismiss 的恢复边界。 */\nfunction extractSurfaceId(command: unknown): string {\n if (!command || typeof command !== 'object') return ''\n const current = command as Record<string, any>\n return String(\n current.createSurface?.surfaceId ??\n current.updateComponents?.surfaceId ??\n current.updateDataModel?.surfaceId ??\n current.deleteSurface?.surfaceId ??\n ''\n ).trim()\n}\n\n/** 从动作上下文中提取 model path,便于提交后清理本地缓存。 */\nfunction readContextModelPath(context: Record<string, unknown>): string {\n const path = context?.model && typeof context.model === 'object' ? (context.model as { path?: unknown }).path : ''\n return typeof path === 'string' ? path.trim() : ''\n}\n\n/** 只比对消息游标,正常流式场景下只处理新追加的内容。 */\nfunction diffMessages(messages: readonly any[], prevCursors: MessageCursor[]) {\n if (messages.length < prevCursors.length) {\n return { shouldReplayAll: true, nextCursors: [] as MessageCursor[], pendingItems: [] as any[] }\n }\n\n const nextCursors: MessageCursor[] = []\n const pendingItems: Array<{ item: any }> = []\n for (let messageIndex = 0; messageIndex < messages.length; messageIndex += 1) {\n const message = messages[messageIndex]\n const messageId = String(message?.messageId ?? messageIndex)\n const items = Array.isArray(message?.content) ? message.content : []\n const prevCursor = prevCursors[messageIndex]\n const startIndex = prevCursor ? prevCursor.contentLength : 0\n\n if (prevCursor && (prevCursor.messageId !== messageId || items.length < prevCursor.contentLength)) {\n return { shouldReplayAll: true, nextCursors: [] as MessageCursor[], pendingItems: [] as any[] }\n }\n\n for (let itemIndex = startIndex; itemIndex < items.length; itemIndex += 1) {\n pendingItems.push({ item: items[itemIndex] })\n }\n nextCursors.push({ messageId, contentLength: items.length })\n }\n\n return { shouldReplayAll: false, nextCursors, pendingItems }\n}\n\n/** 为整个子树提供 A2UI runtime,并负责把未消费动作发回聊天链路。 */\nexport function A2uiRuntimeProvider({ messages, children }: A2uiRuntimeProviderProps) {\n const chatStore = useChatStore()\n const conversationState = useSnapshot(chatStore.conversation)\n const conversationId = conversationState.active.id\n const processedMessageCursorsRef = React.useRef<MessageCursor[]>([])\n const latestCommandIndexBySurfaceRef = React.useRef<Record<string, number>>({})\n const commandIndexRef = React.useRef(-1)\n const [latestCommandIndexBySurface, setLatestCommandIndexBySurface] = React.useState<Record<string, number>>({})\n const [dismissedAtBySurface, setDismissedAtBySurface] = React.useState<Record<string, number>>({})\n\n React.useEffect(() => {\n processedMessageCursorsRef.current = []\n latestCommandIndexBySurfaceRef.current = {}\n commandIndexRef.current = -1\n setLatestCommandIndexBySurface({})\n setDismissedAtBySurface({})\n }, [conversationId])\n\n React.useEffect(() => {\n const { shouldReplayAll, nextCursors, pendingItems } = diffMessages(messages, processedMessageCursorsRef.current)\n const itemsToProcess = shouldReplayAll\n ? (messages as any[]).flatMap((message) => {\n const items = Array.isArray(message?.content) ? message.content : []\n return items.map((item: any) => ({ item }))\n })\n : pendingItems\n if (!shouldReplayAll && itemsToProcess.length === 0) return\n\n const nextLatestCommandIndexBySurface = shouldReplayAll ? {} : { ...latestCommandIndexBySurfaceRef.current }\n let nextCommandIndex = shouldReplayAll ? -1 : commandIndexRef.current\n\n itemsToProcess.forEach(({ item }) => {\n if (item?.type !== 'a2uiCommand' || !item.command) return\n nextCommandIndex += 1\n const surfaceId = extractSurfaceId(item.command)\n if (surfaceId) nextLatestCommandIndexBySurface[surfaceId] = nextCommandIndex\n })\n\n processedMessageCursorsRef.current = shouldReplayAll\n ? (messages as any[]).map((message, messageIndex) => ({\n messageId: String(message?.messageId ?? messageIndex),\n contentLength: Array.isArray(message?.content) ? message.content.length : 0\n }))\n : nextCursors\n latestCommandIndexBySurfaceRef.current = nextLatestCommandIndexBySurface\n commandIndexRef.current = nextCommandIndex\n setLatestCommandIndexBySurface(nextLatestCommandIndexBySurface)\n }, [messages])\n\n /** 只保留还没有被后续新命令覆盖的隐藏状态。 */\n const dismissedSurfaceIds = React.useMemo(() => {\n return Object.entries(dismissedAtBySurface)\n .filter(([surfaceId, dismissedAt]) => (latestCommandIndexBySurface[surfaceId] ?? -1) <= dismissedAt)\n .map(([surfaceId]) => surfaceId)\n }, [dismissedAtBySurface, latestCommandIndexBySurface])\n\n /** 把 A2UI 动作转成聊天消息协议,并在需要时先做本地隐藏。 */\n const dispatchA2uiAction = React.useCallback(\n async (payload: { name: string; surfaceId: string; context: Record<string, any> }) => {\n const actionPayload = normalizeA2uiActionPayload(payload)\n if (!actionPayload.name) return\n\n if (actionPayload.surfaceId && shouldDismissA2uiSurface(actionPayload.name, actionPayload.context)) {\n const latestIndex = latestCommandIndexBySurface[actionPayload.surfaceId] ?? Number.MAX_SAFE_INTEGER\n setDismissedAtBySurface((prev) => ({ ...prev, [actionPayload.surfaceId]: latestIndex }))\n }\n\n try {\n await chatStore.config.hooks?.onA2uiAction?.(actionPayload)\n } catch (error) {\n console.error('A2UI action hook failed:', error)\n }\n\n try {\n await chatStore.sendMessage(formatA2uiActionMessage(actionPayload))\n } catch (error) {\n console.error('A2UI action send failed:', error)\n antdMessage.error('提交失败,请稍后重试')\n }\n },\n [chatStore, latestCommandIndexBySurface]\n )\n\n const { runtimeState, commands, anchoredSurfaceIdsByMessageIndex, handleRuntimeAction } = useA2uiController({\n conversationId,\n conversationMessages: messages,\n dismissedSurfaceIds\n })\n\n /** 先尝试用 runtime 消费动作;剩余动作再作为外部协议派发。 */\n const onAction = React.useCallback(\n (payload: any) => {\n const result = handleRuntimeAction(payload)\n if (result.handled || !result.name) return\n\n const nextContext = buildDispatchContext(result.surfaceId, result.rawContext, commands)\n void dispatchA2uiAction({ name: result.name, surfaceId: result.surfaceId, context: nextContext })\n\n if (shouldOptimisticallyDismissSurface(result.name, result.rawContext)) {\n const modelPath =\n readContextModelPath(nextContext) || readContextModelPath(result.rawContext) || runtimeState.modelPathBySurface[result.surfaceId]\n if (modelPath) clearModelValues(modelPath)\n }\n },\n [commands, dispatchA2uiAction, handleRuntimeAction, runtimeState.modelPathBySurface]\n )\n\n const contextValue = React.useMemo(\n () => ({ commands, onAction, surfaceIdsByMessageIndex: anchoredSurfaceIdsByMessageIndex }),\n [anchoredSurfaceIdsByMessageIndex, commands, onAction]\n )\n\n return (\n <A2uiRuntimeContext.Provider value={contextValue}>\n <XCard.Box commands={commands as any} components={A2uiComponents} onAction={onAction}>\n {children}\n </XCard.Box>\n </A2uiRuntimeContext.Provider>\n )\n}\n","import { A2uiRuntimeProvider } from './A2uiRuntimeProvider'\nimport type { A2uiRuntimeProviderProps } from './context'\n\n/** 兼容旧用法,内部直接复用新的 Provider。 */\nexport function A2uiRenderer(props: A2uiRuntimeProviderProps) {\n return <A2uiRuntimeProvider {...props} />\n}\n","import { LoadingOutlined } from '@ant-design/icons'\nimport XMarkdown from '@ant-design/x-markdown'\nimport '@ant-design/x-markdown/themes/light.css'\nimport { FileCard, Think } from '@ant-design/x-v2'\nimport { Flex } from 'antd'\nimport classNames from 'classnames'\nimport React, { useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { A2uiMessageCards, A2uiPlanNode, toA2uiDisplayText } from '../../a2ui-runtime'\nimport { getMarkdownConfig } from '../core/utils'\nimport { useChatStore } from '../stores/Context'\nimport { ChatLayoutMessageList, ConversationMessage, FilesEvent, InputFile } from '../types'\nimport { AgentNavigateComponent, CodeHighlightComponent, PreviewLinkComponent } from './custom-components'\nimport ToolCallItem from './custom-components/tool-renders/tool-call-item'\nimport styles from './styles.module.less'\n\nfunction formatMixedContent(content: string) {\n return content.replace(/<!DOCTYPE html>[\\s\\S]*?<\\/html>/gi, (match) => `\\`\\`\\`html\\n${match}\\n\\`\\`\\``)\n}\n\nfunction QuestionSummary({ content }: { content: string }) {\n const answer = content.replace(/^Question:\\s*/, '').trim() || '已回答'\n return (\n <span style={{ display: 'inline-flex', flexDirection: 'column', gap: 4 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: '#1677ff', lineHeight: 1.4 }}>Question</span>\n <span style={{ fontSize: 13, color: '#262626', lineHeight: 1.6, whiteSpace: 'pre-wrap' }}>{answer}</span>\n </span>\n )\n}\n\nconst RunStartedNode = React.memo(({ loading }: { loading?: boolean }) => {\n if (!loading) return null\n return (\n <Flex gap={8} align=\"center\" className={styles.runStartedNode}>\n <LoadingOutlined style={{ color: '#1677ff' }} />\n </Flex>\n )\n})\n\nconst ToolCallNode = React.memo(({ item }: { item: any }) => {\n return <ToolCallItem item={item} />\n})\n\nconst TextNode = React.memo(({ item, role, customComponents }: { item: any; role: number; customComponents?: Record<string, any> }) => {\n const content = toA2uiDisplayText(role, item?.messageContent)\n if (typeof content === 'string' && content.startsWith('Question:')) {\n return <QuestionSummary content={content} />\n }\n return (\n <>\n {!!item.reasoningContent && <Think title=\"深度思考\">{item.reasoningContent}</Think>}\n {!!content && (\n <XMarkdown\n openLinksInNewTab\n className={classNames('x-markdown-light', 'xMarkdownStyle')}\n components={{\n code: CodeHighlightComponent,\n agentnavigate: AgentNavigateComponent,\n a: PreviewLinkComponent,\n ...customComponents\n }}\n config={getMarkdownConfig()}\n content={formatMixedContent(content)}\n />\n )}\n </>\n )\n})\n\nconst StepErrorNode = React.memo(({ item, customComponents }: { item: any; customComponents?: Record<string, any> }) => {\n if (!item.errorMessage) return null\n return (\n <XMarkdown\n openLinksInNewTab\n className={classNames('x-markdown-light', 'xMarkdownStyle')}\n components={{ code: CodeHighlightComponent, agentnavigate: AgentNavigateComponent, ...customComponents }}\n config={getMarkdownConfig()}\n content={item.errorMessage}\n />\n )\n})\n\nconst FilesNode = React.memo(({ item }: { item: FilesEvent }) => {\n const chatStore = useChatStore()\n const configState = useSnapshot(chatStore.config)\n const agentState = useSnapshot(chatStore.agent)\n const conversationState = useSnapshot(chatStore.conversation)\n const fileItems = useMemo(() => {\n return (item.files || []).map((file: any) => {\n const previewUrl = configState.services.request.getPreviewUrl(agentState.agentInfo.id, conversationState.active.id, file.path)\n\n let fileType = 'file'\n const ext = file.ext?.toLowerCase() || ''\n if (['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'webp'].includes(ext)) {\n fileType = 'image'\n } else if (['mp4', 'webm', 'ogg', 'mov'].includes(ext)) {\n fileType = 'video'\n } else if (['mp3', 'wav', 'ogg', 'm4a'].includes(ext)) {\n fileType = 'audio'\n }\n\n return {\n ...file,\n src: fileType === 'image' ? previewUrl : file.path,\n type: fileType,\n onClick: () => chatStore.setPreview({ path: file.path, fileName: file.name })\n }\n })\n }, [item.files])\n\n return <FileCard.List style={{ width: '70%' }} items={fileItems} />\n})\n\nexport interface MessageRenderProps {\n message: ConversationMessage\n messageIndex?: number\n loading?: boolean\n onFilePreview?: (file: InputFile) => void\n containerRef?: React.Ref<HTMLDivElement>\n /** message自定义标记渲染组件 */\n customComponents?: ChatLayoutMessageList['customComponents']\n}\n\nexport default React.memo(({ message, messageIndex = -1, loading, containerRef, customComponents }: MessageRenderProps) => {\n const content = message.content || []\n\n if (content.length === 0) return null\n\n return (\n <Flex ref={containerRef} vertical gap={8}>\n {content\n .filter((item) => item.type !== 'a2uiCommand')\n .map((item, index) => {\n if (item.type === 'runStarted') {\n return <RunStartedNode key={`flow-start-${index}`} loading={loading} />\n }\n if (item.type === 'toolCall' || item.type === 'toolResult') {\n return <ToolCallNode key={`tool-call-${(item as any).toolCallId || index}`} item={item} />\n }\n if (item.type === 'text') {\n return <TextNode key={`message-${index}`} item={item} role={message.role} customComponents={customComponents} />\n }\n if (item.type === 'stepError') {\n return <StepErrorNode key={`step-error-${index}`} item={item} customComponents={customComponents} />\n }\n if (item.type === 'files') {\n return <FilesNode key={`files-${index}`} item={item} />\n }\n if (item.type === 'plan') {\n return <A2uiPlanNode key={`plan-${index}`} item={item} />\n }\n return null\n })}\n {messageIndex >= 0 ? <A2uiMessageCards messageIndex={messageIndex} /> : null}\n </Flex>\n )\n})\n","export type ConversationMemberEnum = 'user' | 'agent'\n\nexport enum AgentTypeEnum {\n DEFAULT = 0,\n FLOW = 1\n}\n\nexport enum LibraryTypeEnum {\n DEFAULT = 0\n}\n\nexport const CONV_MODE = {\n PROD: 1,\n DEBUG: 2\n} as const\n","import { proxy } from 'valtio'\n\nexport const flowSpecState = proxy({\n nodes: [] as Array<{\n id: string\n type?: string\n data: {\n input: any[]\n }\n }>\n})\n\nexport function clearNodeAndEdgeStyle() {}\n\nexport function updateNodeAndEdgeStyle(_nodeId: string, _status: 'start' | 'finish' | 'error') {}\n\nexport function setLogPanelOpen(_open: boolean, _executionId?: string) {}\n",".chatHeader {\n padding: 8px 16px;\n border-bottom: 1px solid #eee;\n}\n.chatHeader .chatTitle {\n font-size: 16px;\n font-weight: bold;\n}\n.chatHeader .popover {\n max-height: 500px;\n width: 300px;\n display: flex;\n flex-direction: column;\n padding: 0;\n}\n.chatHeader .popover :global .ant-popover-inner-content {\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n.conversationListPanel {\n width: 300px;\n max-width: 100%;\n border-right: 1px dashed #eee;\n}\n.conversationListPanel .createConversationButton {\n height: 38px;\n background-color: var(--ant-color-primary-bg);\n border-radius: var(--ant-border-radius-lg);\n color: var(--ant-color-primary);\n font-weight: bold;\n}\n.conversationListPanel .conversations {\n padding: 0 16px;\n}\n.conversationListPanel .conversations :global .ant-conversations-group-title {\n padding: 0;\n}\n.conversationListPanel .conversations :global .ant-conversations-group-title .ant-typography {\n color: #878aab;\n}\n.conversationListPanel .conversations :global .ant-conversations-list .ant-conversations-item {\n padding-left: 16px;\n touch-action: manipulation !important;\n}\n.conversationListPanel .conversations :global .ant-conversations-list .ant-conversations-item .ant-conversations-label {\n color: rgba(0, 0, 0, 0.88);\n}\n.conversationListPanel .conversations :global .ant-conversations-list .ant-conversations-item.ant-conversations-item-active .ant-conversations-label {\n color: var(--ant-color-primary);\n}\n.chatWelcomeWrap {\n height: 100%;\n max-width: 1000px;\n min-width: 320px;\n width: calc(100% - 24px);\n margin: 0 auto;\n}\n.chatWelcomeWrap :global .ant-prompts .ant-prompts-list {\n overflow: auto;\n}\n.chatWelcomeWrap .chatWelcome :global .ant-welcome-icon > img {\n border-radius: 10px;\n max-width: initial;\n}\n.promptItem {\n width: 100%;\n max-width: 100%;\n}\n.promptItem :global .ant-prompts-item {\n max-width: 100%;\n white-space: normal;\n height: auto;\n}\n.runStartedNode {\n padding: 2px 12px;\n border-radius: 4px;\n background: linear-gradient(90deg, transparent 25%, #e6f4ff 50%, transparent 75%);\n background-size: 200% 100%;\n animation: shimmer-bg 2s infinite linear;\n display: flex;\n width: 100px;\n min-height: 28px;\n box-sizing: border-box;\n overflow: hidden;\n}\n.runStartedNode :global .anticon-loading {\n width: 14px;\n height: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.runStartedNode :global .anticon-loading svg {\n width: 14px;\n height: 14px;\n}\n@keyframes shimmer-bg {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n}\n.bubbleList {\n width: 100%;\n}\n.bubbleList:global.ant-bubble-list {\n width: 100%;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble-list-scroll-box .ant-bubble-list-scroll-content {\n max-width: 1000px;\n min-width: 320px;\n width: calc(100% - 12px);\n margin: 0 auto;\n padding-right: 0;\n padding-left: 10px;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble {\n padding-top: 8px;\n padding-bottom: 0;\n width: 100%;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble:hover .message-actions {\n opacity: 1;\n pointer-events: auto;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-start {\n padding-inline-end: 0%;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-start .ant-bubble-body {\n width: 100%;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-start .ant-bubble-content {\n background-color: transparent;\n padding: 0;\n padding-bottom: 0;\n min-height: 0;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-start .ant-bubble-footer {\n margin-top: 0;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-end .ant-bubble-content {\n background-color: var(--ant-color-primary-bg, #e6f4ff);\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-end .ant-bubble-content-borderless {\n background-color: transparent;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-end .ant-bubble-content-borderless .ant-file-card-list-content {\n padding: 0;\n}\n.messageFooter {\n min-height: 24px;\n width: 100%;\n}\n.messageActions {\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n}\n.resourceBtn {\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n font-size: 13px;\n font-weight: 500;\n color: #475569;\n /* text-slate-600 */\n background-color: #f1f5f9;\n /* bg-slate-100/60 */\n border: 1px solid #e2e8f0;\n /* border-slate-200/50 */\n border-radius: 12px;\n /* rounded-xl */\n transition: all 0.3s;\n cursor: pointer;\n}\n.resourceBtnActive {\n background-color: var(--ant-color-primary);\n color: #fff;\n}\n.userInputCollapse {\n width: calc(100% - 24px);\n max-width: 1000px;\n min-width: 320px;\n margin: 0 auto;\n}\n.logoArea {\n margin-bottom: 1.5rem;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n margin-top: 40px;\n}\n.logoArea .logoContainer {\n position: relative;\n margin-bottom: 1.5rem;\n cursor: pointer;\n}\n.logoArea .logoContainer .staticHalo {\n position: absolute;\n inset: 0;\n background-color: var(--ant-color-primary);\n filter: blur(24px);\n opacity: 0.2;\n transition: opacity 700ms;\n border-radius: 9999px;\n}\n.logoArea .logoContainer .logoHoverWrapper {\n position: relative;\n z-index: 10;\n padding: 0.5rem;\n transition: all 500ms ease-out;\n transform: scale(1) translateY(0);\n}\n.logoArea .logoContainer .logoHoverWrapper .logoImage {\n width: 6rem;\n height: 6rem;\n object-fit: contain;\n filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.1));\n transition: all 500ms;\n}\n.logoArea .logoContainer:hover .staticHalo {\n opacity: 0.5;\n}\n.logoArea .logoContainer:hover .logoHoverWrapper {\n transform: scale(1.1) translateY(-0.5rem);\n}\n.logoArea .logoContainer:hover .logoImage {\n filter: drop-shadow(0 10px 20px rgba(18, 124, 183, 0.4));\n}\n.logoArea .greetingTitle {\n margin-bottom: 0.75rem;\n font-size: 2.25rem;\n line-height: 2.5rem;\n font-weight: 700;\n letter-spacing: -0.025em;\n color: #1e293b;\n}\n@media (width >= 768px) {\n .logoArea .greetingTitle {\n font-size: 3rem;\n line-height: 1;\n }\n}\n.logoArea .greetingTitle .gradientText {\n color: transparent;\n background-clip: text;\n background-image: linear-gradient(to right, var(--ant-color-primary), #3b82f6);\n}\n.logoArea .greetingSubtitle {\n font-size: 1.125rem;\n line-height: 1.75rem;\n font-weight: 500;\n color: #64748b;\n}\n@media (width >= 768px) {\n .logoArea .greetingSubtitle {\n font-size: 1.25rem;\n line-height: 1.75rem;\n }\n}\n.senderReferenceHeaderTitle:global > .ant-sender-header-title {\n overflow: hidden;\n}\n.senderReferenceHeaderContent {\n padding: 0 !important;\n}\n","import { Prompts, Welcome } from '@ant-design/x-v2'\nimport { RenderWrapper } from '@zero-library/common'\nimport { Avatar, Flex } from 'antd'\nimport classNames from 'classnames'\nimport { useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport type { ChatLayoutWelcomeMessage } from '../../types'\nimport styles from './styles.module.less'\n\nexport default ({ icon = true, title = true, description = true, prompts = true }: ChatLayoutWelcomeMessage) => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n\n const recommendQuestions = useMemo(() => {\n return agentState.agentInfo?.config?.onboarding?.guiding?.map((item, index) => ({\n key: String(index),\n description: item\n }))\n }, [agentState.agentInfo?.config?.onboarding?.guiding])\n\n return (\n <Flex vertical justify=\"center\" className={styles.chatWelcomeWrap}>\n <Welcome\n className={classNames(styles.chatWelcome, 'p-t-32')}\n variant=\"borderless\"\n icon={<RenderWrapper control={icon} DefaultComponent={<Avatar shape=\"square\" size={58} src={agentState.agentInfo?.iconUrl || ''} />} />}\n title={<RenderWrapper control={title} DefaultComponent={`你好,我是${agentState.agentInfo?.name || ''}`} />}\n description={\n <RenderWrapper\n control={description}\n DefaultComponent={<div dangerouslySetInnerHTML={{ __html: agentState.agentInfo?.config?.onboarding?.greeting || '' }}></div>}\n />\n }\n />\n\n {(agentState.agentInfo?.config?.onboarding?.guiding?.length ?? 0) > 0 && (\n <RenderWrapper\n control={prompts}\n DefaultComponent={\n <Prompts\n className={classNames('m-t-16', styles.promptItem)}\n wrap\n onItemClick={(info) => chatStore.sendMessage(info.data.description as string)}\n items={recommendQuestions}\n />\n }\n />\n )}\n </Flex>\n )\n}\n","import { CopyOutlined, DislikeOutlined, FileTextOutlined, LikeOutlined } from '@ant-design/icons'\nimport { Bubble, BubbleProps } from '@ant-design/x-v2'\nimport type { BubbleItemType } from '@ant-design/x-v2/es/bubble'\nimport { copyText, htmlToMarkdown, isBoolean, RenderWrapper, UserAvatar } from '@zero-library/common'\nimport { Button, Flex, GetRef, Typography } from 'antd'\nimport classNames from 'classnames'\nimport { useEffect, useMemo, useRef } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { A2uiRenderer, shouldHideA2uiPlan } from '../../../a2ui-runtime'\nimport MessageRender from '../../components/MessageRender'\nimport { AgentTypeEnum, CONV_MODE, ConversationMemberEnum } from '../../core/constants'\nimport { setLogPanelOpen } from '../../stores/agent-flow.store'\nimport { useChatStore } from '../../stores/Context'\nimport { ChatLayoutMessageList, ConversationMessage, MessageBoxType } from '../../types'\nimport styles from './styles.module.less'\nimport WelcomeItem from './WelcomeItem'\n\nconst { Text } = Typography\n\ninterface RoleContent {\n role: number\n user: ConversationMemberEnum\n placement: BubbleProps['placement']\n avatar?: any\n}\n\nfunction isVisibleContentItem(contentItem: ConversationMessage['content'][number], isMessageLoading: boolean) {\n const isRunStarted = contentItem.type === 'runStarted'\n const isFile = contentItem.type === 'files'\n const isTextWithContent = contentItem.type === 'text' && (!!contentItem.reasoningContent || !!contentItem.messageContent)\n const isToolCall = contentItem.type === 'toolCall' || contentItem.type === 'toolResult'\n const isStepError = contentItem.type === 'stepError' && !!contentItem.errorMessage\n const isA2uiCommand = contentItem.type === 'a2uiCommand'\n const isPlan = contentItem.type === 'plan'\n\n if (!isRunStarted && !isFile && !isTextWithContent && !isToolCall && !isStepError && !isA2uiCommand && !isPlan) {\n return false\n }\n\n if (isPlan && shouldHideA2uiPlan(contentItem)) {\n return false\n }\n\n if (isRunStarted && !isMessageLoading) {\n return false\n }\n\n return true\n}\n\nfunction splitRenderableContents(contents: ConversationMessage['content'], isMessageLoading: boolean) {\n const validContents: ConversationMessage['content'] = []\n const nonFileContents: ConversationMessage['content'] = []\n const fileContents: ConversationMessage['content'] = []\n\n contents.forEach((contentItem) => {\n if (!isVisibleContentItem(contentItem, isMessageLoading)) return\n\n validContents.push(contentItem)\n if (contentItem.type === 'files') {\n fileContents.push(contentItem)\n } else {\n nonFileContents.push(contentItem)\n }\n })\n\n return {\n validContents,\n nonFileContents,\n fileContents,\n hasFiles: fileContents.length > 0,\n isAllFiles: validContents.length > 0 && fileContents.length === validContents.length\n }\n}\n\nfunction createRenderMessage(message: ConversationMessage, content: ReadonlyArray<ConversationMessage['content'][number]>): ConversationMessage {\n return {\n messageId: message.messageId,\n conversationId: message.conversationId,\n executionId: message.executionId,\n role: message.role,\n content: [...content],\n files: message.files ? Array.from(message.files) : undefined,\n feedback: message.feedback,\n params: message.params,\n quoteMsg: message.quoteMsg\n ? {\n ...message.quoteMsg,\n msgFiles: message.quoteMsg.msgFiles ? Array.from(message.quoteMsg.msgFiles) : undefined\n }\n : undefined,\n createdAt: message.createdAt,\n stopFlag: message.stopFlag,\n generating: message.generating\n }\n}\n\nfunction renderMessageContent(\n refKey: string,\n message: ConversationMessage,\n content: ReadonlyArray<ConversationMessage['content'][number]>,\n messageIndex: number,\n loading: boolean,\n messageRefs: React.MutableRefObject<ObjectType<HTMLDivElement>>,\n customComponents?: ChatLayoutMessageList['customComponents']\n) {\n return (\n <MessageRender\n message={createRenderMessage(message, content)}\n messageIndex={messageIndex}\n customComponents={customComponents}\n loading={loading}\n containerRef={(node) => {\n if (node) {\n messageRefs.current[refKey] = node\n } else {\n delete messageRefs.current[refKey]\n }\n }}\n />\n )\n}\n\n/* 🌟 消息列表 */\nexport default ({\n firstMessages = [],\n welcomeMessage = true,\n avatar = { user: false, agent: true },\n agentActions = false,\n customComponents = {}\n}: ChatLayoutMessageList) => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n const conversationState = useSnapshot(chatStore.conversation)\n const configState = useSnapshot(chatStore.config)\n const isDebug = configState.params.convMeta.mode === CONV_MODE.DEBUG\n const isWorkFlow = agentState.agentInfo.agentType === AgentTypeEnum.FLOW\n\n // 构建角色信息和消息显示位置\n const conversationRoles = useMemo(() => {\n const roles = {} as Record<ConversationMemberEnum, RoleContent>\n if (agentState.agentInfo?.id) {\n roles.agent = {\n user: 'agent',\n role: 2,\n placement: 'start'\n // avatar: (isBoolean(avatar) ? avatar : avatar?.agent) ? { src: agentState.agentInfo.iconUrl, icon: <OpenAIOutlined /> } : null\n }\n }\n roles.user = {\n user: 'user',\n role: 1,\n placement: 'end',\n avatar: (isBoolean(avatar) ? avatar : avatar?.user) ? <UserAvatar size={30} avatarSrc=\"\" userName=\"\" /> : null\n }\n\n return roles\n }, [agentState.agentInfo.id])\n\n // 当前会话参数\n const chatMessage = useMemo(\n () => conversationState.messages[conversationState.active.id] || ({} as MessageBoxType),\n [conversationState.messages[conversationState.active.id]]\n )\n const conversationMessages = chatMessage?.message || []\n\n // 获取角色配置\n const getRole = (role: number) => {\n const roleKey = Object.keys(conversationRoles).find((key) => conversationRoles[key].role === role)\n return conversationRoles[roleKey] || ({} as RoleContent)\n }\n const messageRefs = useRef<ObjectType<HTMLDivElement>>({})\n\n const chatRecords = useMemo(() => {\n const chatRecords: BubbleItemType[] = []\n\n conversationMessages.forEach((message, messageIndex) => {\n const role = getRole(message.role)\n const contents = (message.content || []) as ConversationMessage['content']\n const isLeftBubble = role.user === 'agent'\n const isMessageLoading = !!message.generating\n const showLogButton = isDebug && isLeftBubble && !isMessageLoading && isWorkFlow\n const baseKey = `${message.executionId}-${messageIndex}`\n const { validContents, nonFileContents, fileContents, hasFiles, isAllFiles } = splitRenderableContents(contents, isMessageLoading)\n\n if (validContents.length === 0) return\n\n const footerNode = (\n <Flex align=\"center\" gap={8} className={styles.messageFooter}>\n {message.stopFlag && (\n <Text type=\"secondary\" style={{ flex: 'none' }}>\n 已停止\n </Text>\n )}\n <Flex align=\"center\" gap={4}>\n {showLogButton && (\n <Button\n className=\"logBtn\"\n type=\"text\"\n size=\"small\"\n icon={<FileTextOutlined />}\n onClick={() => {\n setLogPanelOpen(true, message.executionId)\n }}\n />\n )}\n {role.user === 'agent' && (\n <>\n <Button\n onClick={async () => {\n const container = messageRefs.current[baseKey]\n if (!container) return\n const markdown = htmlToMarkdown(container.innerHTML) || container.innerText || ''\n copyText(markdown)\n }}\n color=\"default\"\n variant=\"text\"\n size=\"small\"\n icon={<CopyOutlined />}\n />\n <Button\n color={message.feedback === 1 ? 'primary' : 'default'}\n size=\"small\"\n variant=\"text\"\n icon={<LikeOutlined />}\n onClick={() => chatStore.feedback(message.executionId, 1, messageIndex)}\n />\n <Button\n color={message.feedback === 2 ? 'primary' : 'default'}\n size=\"small\"\n variant=\"text\"\n icon={<DislikeOutlined />}\n onClick={() => chatStore.feedback(message.executionId, 2, messageIndex)}\n />\n <RenderWrapper\n control={agentActions}\n ctx={{\n message,\n get dom() {\n return messageRefs.current[baseKey]\n }\n }}\n />\n </>\n )}\n </Flex>\n </Flex>\n )\n\n if (hasFiles && nonFileContents.length > 0) {\n chatRecords.push({\n key: `${baseKey}-text`,\n role: String(role.role),\n placement: role.placement,\n avatar: role.avatar,\n content: renderMessageContent(\n baseKey,\n message as unknown as ConversationMessage,\n nonFileContents,\n messageIndex,\n isMessageLoading,\n messageRefs,\n customComponents\n ),\n footer: footerNode\n })\n\n chatRecords.push({\n key: `${baseKey}-files`,\n role: String(role.role),\n placement: role.placement,\n avatar: role.avatar,\n content: (\n <MessageRender\n message={createRenderMessage(message as unknown as ConversationMessage, fileContents)}\n messageIndex={messageIndex}\n customComponents={customComponents}\n loading={isMessageLoading}\n />\n ),\n variant: 'borderless'\n })\n return\n }\n\n chatRecords.push({\n key: baseKey,\n role: String(role.role),\n placement: role.placement,\n avatar: role.avatar,\n content: renderMessageContent(\n baseKey,\n message as unknown as ConversationMessage,\n validContents,\n messageIndex,\n isMessageLoading,\n messageRefs,\n customComponents\n ),\n footer: footerNode,\n variant: isAllFiles ? 'borderless' : undefined\n })\n })\n\n return chatRecords\n }, [agentActions, chatStore, conversationMessages, conversationRoles, conversationState.active.id, isDebug, isWorkFlow])\n\n const firstMessagesRecord = useMemo(() => {\n return (firstMessages || []).map((firstMessage, index) => {\n const { role, ...args } = firstMessage\n const roleObj = getRole(role)\n\n return {\n key: `firstMessage-${index}`,\n role: roleObj.user,\n placement: roleObj.placement,\n avatar: roleObj.avatar,\n variant: 'borderless',\n ...args\n } as BubbleItemType\n })\n }, [firstMessages, conversationRoles])\n\n const welcomeMessageRecord = useMemo(() => {\n if (!welcomeMessage) return [] as BubbleItemType[]\n return [\n {\n key: 'welcome-message',\n content: <WelcomeItem />,\n variant: 'borderless'\n }\n ] as BubbleItemType[]\n }, [welcomeMessage])\n\n const bubbleListItems = useMemo(() => {\n const list: BubbleItemType[] = []\n list.push(...firstMessagesRecord)\n list.push(...chatRecords)\n if (list.length) {\n return list\n }\n return [...welcomeMessageRecord]\n }, [chatRecords, welcomeMessageRecord, firstMessagesRecord])\n\n const listRef = useRef<GetRef<typeof Bubble.List>>(null)\n // 真实控制是否自动滚动的 ref(不会触发渲染)\n const autoScrollRef = useRef(true)\n const handleScroll = (el: any) => {\n const target = el.target\n const distanceToBottom = target.scrollHeight - target.scrollTop - target.clientHeight\n // 小于 150px 表示接近底部,允许自动滚动\n autoScrollRef.current = distanceToBottom < 90\n }\n useEffect(() => {\n const latestMessage = conversationMessages[conversationMessages?.length - 1]\n if (!latestMessage) return\n\n if (latestMessage.generating) {\n autoScrollRef.current = true\n }\n }, [conversationMessages?.length])\n useEffect(() => {\n const el = listRef.current?.nativeElement\n if (!el || !bubbleListItems.length) return\n\n if (autoScrollRef.current) {\n setTimeout(() => {\n if (autoScrollRef.current) {\n listRef.current?.scrollTo({\n top: 'bottom',\n behavior: 'instant'\n })\n }\n }, 100)\n }\n }, [bubbleListItems])\n\n return (\n <A2uiRenderer messages={conversationMessages}>\n <Bubble.List\n autoScroll={false}\n key={conversationState.active.id}\n ref={listRef}\n items={bubbleListItems}\n className={classNames(styles.bubbleList, 'height-full', 'scroll-fade-in')}\n onScroll={handleScroll}\n />\n </A2uiRenderer>\n )\n}\n","import type { createRequest, RequestConfig } from '@zero-library/common'\nimport { TOKEN_KEY, tokenManager } from '../core/session'\nimport {\n AgentInfo,\n ConversationCreate,\n ConversationMessage,\n ConversationMessageSend,\n ConversationMessagesQuery,\n ConversationsQuery,\n ConversationType,\n FeedbackUpdate,\n InputFile,\n Variable\n} from '../types'\n\ninterface UserInputType {\n inputs: Variable[]\n outputs: Variable[]\n}\n\n/**\n * 创建聊天服务\n * @param request - 请求函数实例\n * @returns 聊天服务对象\n */\nexport const createChatService = (request: ReturnType<typeof createRequest>, config?: RequestConfig) => {\n\n // 获取智能体详情\n const fetchAgentInfo = (agentId: string): Promise<R<AgentInfo>> => {\n return request.get(`/agents/${agentId}`)\n }\n\n // 创建会话\n const createConversationId = (params: ConversationCreate): Promise<R<string>> => {\n return request.post(`/agents/${params.agentId}/conversations`, { convMeta: params.convMeta })\n }\n\n // 获取会话列表\n const fetchConversations = (params: ConversationsQuery): Promise<R<ConversationType[]>> => {\n return request.get(`/agents/${params.agentId}/conversations`, { ...params.convMeta })\n }\n\n // 删除会话\n const deleteConversation = (id: string): Promise<R<string>> => {\n return request.delete(`/agents/conversations/${id}`)\n }\n\n // 历史记录\n const fetchMessages = (params: ConversationMessagesQuery): Promise<R<ConversationMessage[]>> => {\n return request.get(`/agents/conversations/${params.conversationId}/messages`)\n }\n\n // 发送消息\n const sendMessageStream = (params: ConversationMessageSend, agentId: string): Promise<R<ConversationMessage[]>> => {\n return request.post(`/agents/${agentId}/chat`, params)\n }\n\n // cancelMessage 取消消息\n const cancelMessage = (executionId: string): Promise<R<string>> => {\n return request.post(`/agents/executions/${executionId}/cancel`)\n }\n\n // 推荐问题\n const getRecommendQuestions = (params: { conversationId: string; messageId: string }): Promise<R<string[]>> => {\n return request.post(`/agents/conversations/${params.conversationId}/messages/recommend`, params)\n }\n\n const getAgentUserInput = (agentId: string): Promise<R<UserInputType>> => {\n return request.get(`/agents/${agentId}/workflow/params`)\n }\n\n /**\n * 更新消息反馈(赞或踩)\n * @param params - 反馈参数,包含消息ID和反馈类型\n */\n const feedbackUpdate = (params: FeedbackUpdate): Promise<R<null>> => {\n return request.put(`/agents/messages/${params.executionId}/feedback`, params)\n }\n\n const chatUpload = (agentId: string, data: FormData, conversationId: string, signal?: AbortSignal): Promise<R<InputFile[]>> => {\n return request.post(`/agents/${agentId}/${conversationId}/files`, data, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n },\n timeout: 300000,\n signal\n })\n }\n\n const getPreviewUrl = (agentId: string, conversationId: string, path: string): string => {\n return `${config?.baseURL}/agents/${agentId}/${conversationId}/files/download?path=${encodeURIComponent(path)}&${TOKEN_KEY}=${tokenManager.get()}`\n }\n\n return {\n fetchAgentInfo,\n createConversationId,\n fetchConversations,\n deleteConversation,\n fetchMessages,\n sendMessageStream,\n cancelMessage,\n getRecommendQuestions,\n getAgentUserInput,\n feedbackUpdate,\n chatUpload,\n getPreviewUrl\n }\n}\n","import { classifyTime, getChatSocketUrl, variablesToObject } from '../core/utils'\n\nimport {\n createRequest,\n deepCopy,\n deepMerge,\n HttpStatus,\n isArray,\n isNullOrUnDef,\n isObject,\n isString,\n shouldRender,\n transform,\n transforms\n} from '@zero-library/common'\nimport { CONV_MODE } from '../core/constants'\nimport { clearNodeAndEdgeStyle, updateNodeAndEdgeStyle } from './agent-flow.store'\n\nimport { ConversationItemType } from '@ant-design/x-v2'\nimport { message as antdMessage, message } from 'antd'\nimport { proxy } from 'valtio'\nimport { AgentTypeEnum } from '../core/constants'\nimport { redirectUrl, TOKEN_KEY, tokenManager } from '../core/session'\nimport { createChatService } from '../services'\nimport {\n A2uiCommandEvent,\n AgentInfo,\n AgentSpec,\n ChatConfig,\n ChatHooks,\n ChatLayout,\n ChatParams,\n ChatServices,\n ConversationMessage,\n ConversationMessageSend,\n ConversationNewTitleEvent,\n ConversationsQuery,\n ConversationType,\n FeedbackUpdate,\n FileUrlType,\n MessageBoxType,\n ReferencesType,\n RequestInstance,\n RunStartedEvent,\n StepErrorEvent,\n StepFinishedEvent,\n StepStartedEvent,\n TextEvent,\n ToolCallEvent,\n ToolResultEvent\n} from '../types'\n\nconst defaultLayout = {\n globalHeader: true,\n conversationList: true,\n preview: true,\n chatHeader: true,\n messageList: true,\n senderHeader: false,\n sender: true,\n senderFooter: false,\n disclaimerNotice: true\n} as ChatLayout\n\n/**\n * 创建聊天状态管理器\n * 使用 Valtio 进行状态管理,包含会话、消息、用户信息等所有聊天相关状态\n * @returns 聊天状态管理器和操作方法\n */\nexport function createChatStore() {\n /** 全局配置对象,包含钩子函数、布局等配置 */\n const config = proxy({\n services: {\n /** WebSocket地址 */\n websocketUrls: ['', ''] as [string, string],\n /** HTTP请求实例 */\n request: {} as RequestInstance\n },\n hooks: {} as ChatHooks,\n layout: {} as ChatLayout,\n loading: false,\n /** 文件预览状态 */\n preview: {\n file: {} as FileUrlType,\n isEdit: false // 未使用\n },\n stream: true,\n params: {\n convMeta: {\n mode: CONV_MODE.DEBUG\n }\n } as ChatParams\n })\n\n /**\n * 设置服务配置\n * 配置聊天组件所需的HTTP和WebSocket服务\n *\n * @param services - 服务配置对象,包含HTTP和WebSocket配置\n */\n const setServices = ({ http, websocket } = {} as ChatServices) => {\n // 合并默认HTTP配置和用户提供的配置,包括默认的认证头\n const httpConfig = { baseURL: '/luya/api', headers: { [TOKEN_KEY]: tokenManager.get() }, ...http?.config }\n // 初始化http配置\n const request = createRequest(httpConfig)\n if (config.hooks?.onRequestInterceptor) {\n request.instance.interceptors.request.use(...(config.hooks.onRequestInterceptor as any))\n }\n request.instance.interceptors.response.use(undefined, (err) => {\n if (err?.response?.status === HttpStatus.UNAUTHORIZED) {\n if (config.hooks.onRedirectLogin) {\n config.hooks.onRedirectLogin()\n } else {\n redirectUrl()\n }\n }\n return Promise.reject(err)\n })\n if (config.hooks?.onResponseInterceptor) {\n request.instance.interceptors.response.use(...config.hooks.onResponseInterceptor)\n }\n config.services.request = { ...createChatService(request, httpConfig), ...http?.request }\n\n // 初始化WebSocket配置数组,最多支持两个地址\n config.services.websocketUrls = ['', '']\n if (isArray(websocket?.baseURLs)) {\n // 配置提供的WebSocket地址\n websocket.baseURLs.forEach((baseURL, index) => {\n if (isString(baseURL)) {\n config.services.websocketUrls[index] = getChatSocketUrl(baseURL, websocket?.params || httpConfig.headers)\n }\n })\n } else {\n // 如果未提供WebSocket URL数组,则继承HTTP配置\n const url = getChatSocketUrl(httpConfig.baseURL, websocket?.params || httpConfig.headers)\n config.services.websocketUrls = [url, '']\n }\n }\n /**\n * 设置文件预览\n * @param file - 要预览的文件\n * @param isEdit - 是否为编辑模式\n */\n const setPreview = async (file = {} as FileUrlType, isEdit = false) => {\n const newFile = { ...file, _t: Date.now() } as FileUrlType\n\n const preview = shouldRender(config.layout.preview)\n const canProceed = await config.hooks?.onBeforeFilePreview?.(file, preview)\n if (canProceed === false) {\n return\n }\n if (preview) {\n config.preview = {\n file: newFile,\n isEdit\n }\n } else {\n if ((file as FileUrlType)?.fileUrl) {\n window.open((file as FileUrlType).fileUrl, '_blank')\n }\n }\n config.hooks?.onAfterFilePreview?.(file, preview)\n }\n\n /**\n * 设置参数\n * @param params - 参数对象\n */\n const setParams = (params?: ObjectType<any>) => {\n if (isObject(params)) {\n Object.assign(config.params, params)\n }\n }\n\n /**\n * 设置布局配置\n * @param layout - 布局配置\n */\n const setLayout = (layout: Partial<ChatLayout>) => {\n config.layout = deepMerge(defaultLayout, layout)\n }\n\n /**\n * 设置生命周期钩子函数\n * @param hooks - 钩子函数配置\n */\n const setHooks = (hooks = {} as ChatHooks) => {\n config.hooks = hooks\n }\n\n /** 智能体信息 */\n const agent = proxy({\n /** 当前智能体 */\n agentInfo: {} as AgentInfo,\n model: {\n modelName: \"qwen3.5-plus\",\n providerName: \"高山云基\",\n reasoning: true\n } as AgentSpec['model'],\n /** 智能体加载状态 */\n loading: false\n })\n\n const setAgentModel = (model: AgentSpec['model']) => {\n agent.model = model\n }\n\n const getUserInput = async (agentId: string) => {\n agent.loading = true\n try {\n const res = await config.services.request.getAgentUserInput(agentId)\n if (res.data?.inputs && agent.agentInfo.userInput?.length === 0) {\n agent.agentInfo.userInput = res.data.inputs.filter((item) => item.enableEdit)\n }\n } finally {\n agent.loading = false\n }\n }\n\n const setAgent = (agentInfo: AgentInfo) => {\n agent.agentInfo = agentInfo\n }\n\n const setUserInput = (userInput: AgentInfo['userInput']) => {\n if (config.params?.convMeta?.mode === CONV_MODE.PROD && agent.agentInfo.agentType === AgentTypeEnum.FLOW) {\n getUserInput(agent.agentInfo.id)\n } else if (agent.agentInfo.userInput) {\n agent.agentInfo.userInput = userInput\n }\n }\n\n /** 获取智能体详情 */\n const getAgentInfo = async (id: string) => {\n config.loading = true\n if (agent.agentInfo.id === id) return\n try {\n const { data } = await config.services.request.fetchAgentInfo(id || '')\n agent.agentInfo = data as AgentInfo\n } finally {\n config.loading = false\n }\n }\n\n /** 历史会话管理 */\n const conversations = proxy({\n /** 会话列表数据 */\n list: {\n items: [] as ConversationItemType[]\n },\n /** 当前会话索引,创建会话时更新,促使页面更新会话列表 */\n updateIndex: 0,\n /** 获取会话列表的加载状态 */\n loading: false,\n /** 编辑会话的加载状态 */\n editLoading: false\n })\n\n /** 获取会话列表 */\n const getConversations = async (agentId: ConversationsQuery['agentId']) => {\n try {\n conversations.loading = true\n const { data } = await config.services.request.fetchConversations({\n agentId,\n convMeta: config.params.convMeta\n })\n // 防止会话接口请求前就已经切换了智能体\n if (agent.agentInfo.id !== agentId) return\n const resultItems = transforms<ConversationType, ConversationItemType>(data || [], {\n key: 'id',\n id: 'id',\n label: 'title',\n spec: 'spec',\n group: (c): string => {\n return classifyTime(c.updatedAt)\n }\n })\n conversations.list.items = resultItems\n } finally {\n conversations.loading = false\n }\n }\n\n /** 删除会话 */\n const delConversation = async (conversationId: ConversationType['id']) => {\n try {\n const canProceed = await config.hooks?.onBeforeDelConversation?.(conversationId)\n if (canProceed === false) return\n conversations.editLoading = true\n await config.services.request.deleteConversation(conversationId)\n antdMessage.success('删除成功')\n conversations.list.items = conversations.list.items.filter((item) => item.key !== conversationId)\n delete conversation.messages[conversationId]\n if (conversation.active.id === conversationId) {\n createConversation()\n }\n config.hooks?.onAfterDelConversation?.(conversationId, conversation.active.id === conversationId)\n } finally {\n conversations.editLoading = false\n }\n }\n\n const initConversation = async (config: ChatConfig) => {\n await getConversations(config.agent.id)\n if (config?.conversationId) {\n switchConversation(config.conversationId)\n } else {\n if (config.conversationStrategy === 1) {\n switchConversation(conversations.list.items[0].key)\n } else {\n createConversation()\n }\n }\n }\n\n const switchConversation = async (id: ConversationType['id']) => {\n const conversationId = String(id)\n const previewUrl = config.services.request.getPreviewUrl(agent.agentInfo.id, conversationId, '')\n\n if (conversation.active.id === conversationId) return\n const canProceed = await config.hooks?.onBeforeSwitchConversation?.(conversationId)\n if (canProceed === false) {\n throw new Error('操作被阻止')\n }\n // 初始化会话信息\n conversation.active.id = conversationId\n\n // 更新会话的 spec\n const targetConversation = conversations.list.items.find((item) => item.key === conversationId) as ConversationItemType\n if (targetConversation) {\n conversation.active.spec = targetConversation.spec\n } else {\n conversation.active.spec = {} as AgentSpec\n }\n await getMessages(conversationId)\n // 关闭文件预览\n await setPreview()\n config.hooks?.onAfterSwitchConversation?.(conversationId)\n }\n\n const setConversationSpec = (spec: AgentSpec) => {\n if (isObject(spec)) {\n conversation.active.spec = spec\n const currentConversation = conversations.list.items.find((item) => item.id === conversation.active.id)\n if (currentConversation) {\n currentConversation.spec = spec\n }\n }\n }\n\n /** 更新会话列表 */\n const updateConversations = (data: ConversationType) => {\n const item = transform<ConversationType, ConversationItemType>(data, {\n key: 'id',\n id: 'id',\n label: 'title',\n spec: 'spec',\n group: (c): string => {\n return classifyTime(c.updatedAt)\n }\n })\n conversations.list.items = [item, ...conversations.list.items.filter((i) => i.key !== item.key)]\n }\n\n /** 创建会话 */\n const createConversation = async () => {\n if (!agent.agentInfo.id) return\n const { data } = await config.services.request.createConversationId({ agentId: agent.agentInfo.id, convMeta: config.params.convMeta })\n\n const newSpec = {\n skills: { items: [] },\n knowledge: { items: [] }\n } as AgentSpec\n\n updateConversations({\n id: data || '',\n title: '',\n agentId: agent.agentInfo?.id || '',\n updatedAt: new Date().toISOString(),\n spec: newSpec\n })\n await switchConversation(data)\n\n // 触发新建会话钩子\n config.hooks?.onAfterSwitchConversation?.(data)\n }\n\n /** 当前会话管理 */\n const conversation = proxy({\n /** 当前激活的会话信息 */\n active: {\n id: '',\n spec: {} as AgentSpec\n },\n /** 每个会话的消息存储,以会话ID为键 */\n messages: {} as { [key: ConversationType['id']]: MessageBoxType },\n\n /** 消息反馈状态 */\n feedback: {\n /** 反馈操作加载状态 */\n loading: false\n }\n })\n\n const setReferences = async (references?: ReferencesType) => {\n const canProceed = await config.hooks?.onBeforeSetReferences?.(references)\n if (canProceed === false) {\n throw new Error('操作被阻止')\n }\n conversation.messages[conversation.active.id].references = references\n config.hooks?.onAfterSetReferences?.(references)\n }\n\n /** 更新会话内容 */\n const setContent = (content?: ConversationMessageSend['message']) => {\n conversation.messages[conversation.active.id].content = content\n }\n\n const setContentParams = (params?: MessageBoxType['params']) => {\n conversation.messages[conversation.active.id].params = params\n }\n\n /** 更新文件列表 */\n const setFileList = (files = [] as ConversationMessageSend['files']) => {\n conversation.messages[conversation.active.id].files = files\n }\n\n /** 更新头部展开状态 */\n const setHeaderOpen = (headerOpen: MessageBoxType['headerOpen']) => {\n conversation.messages[conversation.active.id].headerOpen = headerOpen\n }\n\n const feedback = async (\n executionId: FeedbackUpdate['executionId'],\n feedback: FeedbackUpdate['feedback'],\n index: number\n ) => {\n try {\n conversation.feedback.loading = true\n await config.services.request.feedbackUpdate({ executionId, feedback })\n message.success('感谢您的反馈')\n conversation.messages[conversation.active.id].message[index].feedback = feedback\n } finally {\n conversation.feedback.loading = false\n }\n }\n\n /**\n * 初始化会话消息状态\n * @param conversationId - 会话ID\n */\n const setInitMessage = async (conversationId: ConversationType['id']) => {\n conversation.messages[conversationId] = {\n /** 输入框内容 */\n content: '',\n /** 上传文件列表 */\n files: [] as ConversationMessageSend['files'],\n /** 头部展开状态 */\n headerOpen: false,\n /** 消息发送/接收加载状态 */\n loading: false,\n /** 消息列表 */\n message: []\n }\n }\n\n /** 获取会话消息列表 */\n const getMessages = async (conversationId: ConversationType['id']) => {\n const canProceed = await config.hooks?.onBeforeInitMessages?.(conversationId)\n if (canProceed === false) {\n throw new Error('操作被阻止')\n }\n // 初始化消息列表\n if (!conversation.messages[conversationId]) {\n setInitMessage(conversationId)\n }\n if (conversation.messages[conversationId].message.length === 0) {\n // 接口请求-获取会话消息列表\n const { data } = await config.services.request.fetchMessages({\n ...config.params.convMeta,\n conversationId\n })\n conversation.messages[conversationId].message = []\n if (data?.length) {\n data.forEach((msg) => {\n processMessageContent(msg)\n })\n finalizeHistoryMessages(conversationId)\n normalizeMessagesByExecutionAndRole(conversation.messages[conversationId].message)\n }\n }\n config.hooks?.onAfterInitMessages?.(conversation.messages[conversationId].message)\n config.hooks?.onAfterInit?.()\n }\n\n function findExecutionMsgIndex(msg: Pick<ConversationMessage, 'executionId' | 'role'>, messages?: ConversationMessage[]) {\n return (messages || []).findLastIndex((item) => item.executionId === msg.executionId && item.role === msg.role)\n }\n\n function normalizeMessagesByExecutionAndRole(messages?: ConversationMessage[]) {\n if (!messages?.length) return\n\n const mergedMessages: ConversationMessage[] = []\n const groupedMessageIndex = new Map<string, number>()\n\n messages.forEach((item) => {\n const key = `${item.executionId}-${item.role}`\n const existedIndex = groupedMessageIndex.get(key)\n\n if (isNullOrUnDef(existedIndex)) {\n mergedMessages.push({\n ...item,\n content: [...(item.content || [])],\n files: item.files ? [...item.files] : item.files\n })\n groupedMessageIndex.set(key, mergedMessages.length - 1)\n return\n }\n\n const target = mergedMessages[existedIndex]\n target.content = [...(target.content || []), ...(item.content || [])]\n if ((!target.files || target.files.length === 0) && item.files?.length) {\n target.files = [...item.files]\n }\n if (item.generating !== undefined) {\n target.generating = item.generating\n }\n if (item.stopFlag) {\n target.stopFlag = true\n }\n if (item.feedback !== undefined) {\n target.feedback = item.feedback\n }\n if (item.params !== undefined) {\n target.params = item.params\n }\n if (item.quoteMsg !== undefined) {\n target.quoteMsg = item.quoteMsg\n }\n if (!target.createdAt && item.createdAt) {\n target.createdAt = item.createdAt\n }\n if (!target.messageId && item.messageId) {\n target.messageId = item.messageId\n }\n })\n\n if (mergedMessages.length !== messages.length) {\n messages.splice(0, messages.length, ...mergedMessages)\n }\n }\n\n function finalizeHistoryMessages(conversationId: string) {\n const currentConversation = conversation.messages[conversationId]\n if (!currentConversation?.message) return\n\n currentConversation.loading = false\n currentConversation.message.forEach((item) => {\n item.generating = false\n })\n }\n\n /**\n * 消息回调\n * 处理思维链消息\n * @param msg - 步骤消息\n */\n function startCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n // 未初始化消息列表\n if (!messages) return\n const idx = findExecutionMsgIndex(msg, messages)\n\n const contentItem = msg.content[0] as RunStartedEvent\n if (contentItem.type !== 'runStarted') return\n\n if (idx === -1) {\n const finalMsg = {\n ...msg,\n content: [contentItem],\n generating: true\n }\n // 未初始化消息列表\n messages.push(finalMsg)\n\n // 更新会话的创建时间updatedAt,并重新归类分组\n const targetConversation = conversations.list.items.find((item) => item.id === msg.conversationId)\n if (targetConversation && msg.createdAt) {\n updateConversations({\n ...targetConversation,\n id: targetConversation.id as string,\n title: targetConversation.label as string,\n updatedAt: msg.createdAt\n })\n }\n } else {\n const prevContent = messages[idx]?.content || []\n messages[idx].content = [...prevContent, contentItem]\n }\n conversation.messages[msg.conversationId].loading = true\n }\n\n /**\n * 消息内容回调\n * 处理流式消息内容的追加\n * @param msg - 消息内容\n */\n function textCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n const idx = findExecutionMsgIndex(msg, messages)\n const contents = idx !== -1 && messages[idx] ? messages[idx].content || [] : []\n\n const nextContent = msg.content[0] as TextEvent\n if (nextContent.type !== 'text') return\n const normalizedNextContent: TextEvent = { ...nextContent }\n\n if (idx === -1) {\n const finalMsg = {\n ...msg,\n content: [normalizedNextContent],\n generating: true\n }\n messages.push(finalMsg)\n } else {\n const lastContent = contents[contents.length - 1]\n\n if (lastContent?.type === 'text') {\n const lastTextContent = lastContent as TextEvent\n const mergedMessageContent = (lastTextContent.messageContent || '') + (normalizedNextContent.messageContent || '')\n const mergedReasoningContent = nextContent.reasoningContent\n ? (lastTextContent.reasoningContent || '') + nextContent.reasoningContent\n : lastTextContent.reasoningContent\n const nextTextContent: TextEvent = {\n ...lastTextContent,\n messageContent: mergedMessageContent,\n reasoningContent: mergedReasoningContent\n }\n messages[idx].content = [...contents.slice(0, -1), nextTextContent]\n } else {\n messages[idx].content = [...contents, normalizedNextContent]\n }\n }\n conversation.messages[msg.conversationId].loading = true\n }\n\n /**\n * 节点开始消息回调\n * 处理节点开始状态更新\n * @param msg - 节点开始消息\n */\n function stepStartedCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n const idx = findExecutionMsgIndex(msg, messages)\n const contentItem = msg.content[0] as StepStartedEvent\n conversation.messages[msg.conversationId].loading = true\n\n if (idx !== -1 && messages[idx]) {\n const contentList = messages[idx].content || []\n const runStartedIndex = contentList.findIndex((item) => item.type === 'runStarted')\n const runStartedItem = runStartedIndex !== -1 ? (contentList[runStartedIndex] as RunStartedEvent | undefined) : undefined\n if (runStartedItem && contentItem.title) {\n const nextRunStartedItem: RunStartedEvent = { ...runStartedItem, title: contentItem.title }\n messages[idx].content = contentList.map((item, i) => (i === runStartedIndex ? nextRunStartedItem : item))\n }\n }\n\n const nodeId = contentItem.stepId\n if (nodeId && config.params.convMeta.mode === CONV_MODE.DEBUG && agent.agentInfo.agentType === AgentTypeEnum.FLOW) {\n updateNodeAndEdgeStyle(nodeId, 'start')\n }\n }\n\n /**\n * 节点结束消息回调\n * 处理节点结束状态更新\n * @param msg - 节点结束消息\n */\n function stepFinishedCallback(msg: ConversationMessage) {\n conversation.messages[msg.conversationId].loading = true\n const nodeId = (msg.content[0] as StepFinishedEvent).stepId\n if (nodeId && config.params.convMeta.mode === CONV_MODE.DEBUG && agent.agentInfo.agentType === AgentTypeEnum.FLOW) {\n updateNodeAndEdgeStyle(nodeId, 'finish')\n }\n }\n\n /**\n * 节点错误消息回调\n * 处理节点错误状态更新\n * @param msg - 节点错误消息\n */\n function stepErrCallback(msg: ConversationMessage) {\n conversation.messages[msg.conversationId].loading = false\n const messages = conversation.messages[msg.conversationId]?.message\n if (messages) {\n const idx = findExecutionMsgIndex(msg, messages)\n const contentItem = msg.content[0] as StepErrorEvent\n\n messages.forEach((item) => {\n if (item.executionId === msg.executionId) {\n item.generating = false\n }\n })\n\n if (idx !== -1) {\n messages[idx].generating = false\n }\n\n if (idx !== -1) {\n const prevContent = messages[idx]?.content || []\n messages[idx].content = [...prevContent, contentItem]\n } else {\n const finalMsg = { ...msg }\n finalMsg.generating = false\n messages.push(finalMsg)\n }\n }\n const nodeId = (msg.content[0] as StepErrorEvent).stepId\n if (nodeId && config.params.convMeta.mode === CONV_MODE.DEBUG && agent.agentInfo.agentType === AgentTypeEnum.FLOW) {\n updateNodeAndEdgeStyle(nodeId, 'error')\n }\n }\n\n function doneCallback(msg: ConversationMessage) {\n conversation.messages[msg.conversationId].loading = false\n const messages = conversation.messages[msg.conversationId]?.message\n if (messages) {\n messages.forEach((item) => {\n if (item.executionId === msg.executionId) {\n item.generating = false\n }\n })\n }\n }\n\n function titleCallback(msg: ConversationMessage) {\n // 更新conversations中list的items中对应conversationId的title\n const content = msg.content[0] as ConversationNewTitleEvent\n if (content.type !== 'conversationNewTitle') return\n\n const title = content.title || ''\n const conversationId = msg.conversationId || ''\n if (content && conversations.list.items.length) {\n const idx = conversations.list.items.findIndex((item) => item.id === conversationId)\n if (idx === -1) return\n conversations.list.items[idx].label = title\n }\n }\n\n /**\n * 工具调用消息回调\n * @param msg - 工具调用消息\n */\n function toolCallCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n // 未初始化消息列表\n if (!messages) return\n // 优先通过 toolCallId 查找已存在的 message\n let idx = -1\n const contentItem = msg.content[0] as ToolCallEvent\n if (contentItem.type !== 'toolCall') return\n\n if (contentItem.toolCallId) {\n idx = messages.findLastIndex((m) => m.content?.some((c) => c.type === 'toolCall' && (c as ToolCallEvent).toolCallId === contentItem.toolCallId))\n }\n\n if (idx === -1) {\n idx = findExecutionMsgIndex(msg, messages)\n }\n\n if (idx === -1) {\n // 新消息\n const finalMsg = { ...msg, generating: true }\n messages.push(finalMsg)\n } else {\n const contents = messages[idx].content\n // 查找是否已存在该 toolCallId 的 item\n const existingItemIndex = contents.findIndex(\n (item) => item.type === 'toolCall' && (item as ToolCallEvent).toolCallId === contentItem.toolCallId\n )\n\n // 追加 args\n if (existingItemIndex !== -1) {\n const existingItem = contents[existingItemIndex] as ToolCallEvent & { arguments?: any }\n const newContent = contentItem.content || (contentItem as any).arguments\n\n const nextItem: ToolCallEvent & { arguments?: any } = { ...existingItem }\n if (typeof newContent === 'string') {\n nextItem.content = (existingItem.content || '') + newContent\n } else if (newContent !== undefined) {\n nextItem.arguments = newContent\n }\n\n if (contentItem.toolName) {\n nextItem.toolName = contentItem.toolName\n }\n if (contentItem.title) {\n nextItem.title = contentItem.title\n }\n if (contentItem.status) {\n nextItem.status = contentItem.status\n }\n messages[idx].content = contents.map((item, i) => (i === existingItemIndex ? nextItem : item))\n } else {\n messages[idx].content = [...contents, contentItem]\n }\n }\n conversation.messages[msg.conversationId].loading = true\n }\n\n /**\n * 工具结果消息回调\n * @param msg - 工具结果消息\n */\n function toolResultCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n // 未初始化消息列表\n if (!messages) return\n\n const contentItem = msg.content[0] as ToolResultEvent\n if (contentItem.type !== 'toolResult') return\n\n // 优先通过 toolCallId 查找\n let idx = -1\n if (contentItem.toolCallId) {\n idx = messages.findLastIndex((m) => m.content?.some((c) => c.type === 'toolCall' && (c as ToolCallEvent).toolCallId === contentItem.toolCallId))\n }\n\n if (idx === -1) {\n idx = findExecutionMsgIndex(msg, messages)\n }\n\n if (idx === -1) return\n\n const contents = messages[idx].content\n\n // 查找对应的 toolCall item\n const toolCallIndex = contents.findIndex((item) => item.type === 'toolCall' && (item as ToolCallEvent).toolCallId === contentItem.toolCallId)\n\n if (toolCallIndex !== -1) {\n // 合并结果到 toolCall item\n const toolCallItem = contents[toolCallIndex] as ToolCallEvent & {\n result?: any\n errorMessage?: string\n duration?: number\n }\n const nextToolCallItem: ToolCallEvent & {\n result?: any\n errorMessage?: string\n duration?: number\n } = {\n ...toolCallItem,\n result: (contentItem as any).result ?? contentItem.content\n }\n if (contentItem.status) {\n nextToolCallItem.status = contentItem.status\n }\n if (contentItem.errorMessage) {\n nextToolCallItem.errorMessage = contentItem.errorMessage\n }\n if (contentItem.duration) {\n nextToolCallItem.duration = contentItem.duration\n }\n if (contentItem.title) {\n nextToolCallItem.title = contentItem.title\n }\n messages[idx].content = contents.map((item, i) => (i === toolCallIndex ? nextToolCallItem : item))\n } else {\n // 如果没找到对应的 toolCall(理论上不应该发生),作为单独的 item 添加\n messages[idx].content = [...contents, contentItem]\n }\n conversation.messages[msg.conversationId].loading = true\n }\n\n /**\n * A2UI 命令消息回调\n * @param msg - A2UI 命令消息\n */\n function a2uiCommandCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n if (!messages) return\n const idx = findExecutionMsgIndex(msg, messages)\n const contentItem = msg.content[0] as A2uiCommandEvent\n if (contentItem.type !== 'a2uiCommand') return\n\n if (idx === -1) {\n const finalMsg = { ...msg, generating: true }\n messages.push(finalMsg)\n } else {\n const prevContent = messages[idx]?.content || []\n messages[idx].content = [...prevContent, contentItem]\n }\n conversation.messages[msg.conversationId].loading = true\n }\n\n /**\n * 处理消息内容分发\n */\n function processSingleMessageContent(newMessage: ConversationMessage) {\n switch (newMessage.content[0].type) {\n case 'runStarted':\n startCallback(newMessage)\n break\n case 'text':\n textCallback(newMessage)\n break\n case 'stepStarted':\n stepStartedCallback(newMessage)\n break\n case 'stepFinished':\n stepFinishedCallback(newMessage)\n break\n case 'stepError':\n stepErrCallback(newMessage)\n break\n case 'runFinished':\n case 'runStopped':\n doneCallback(newMessage)\n break\n case 'conversationNewTitle':\n titleCallback(newMessage)\n break\n case 'toolCall':\n toolCallCallback(newMessage)\n break\n case 'toolResult':\n toolResultCallback(newMessage)\n break\n case 'a2uiCommand':\n a2uiCommandCallback(newMessage)\n break\n default: {\n const messages = conversation.messages[newMessage.conversationId]?.message\n if (!messages) return\n const idx = findExecutionMsgIndex(newMessage, messages)\n if (idx === -1) {\n const finalMsg = { ...newMessage, generating: true }\n messages.push(finalMsg)\n } else {\n const prevContent = messages[idx]?.content || []\n messages[idx].content = [...prevContent, newMessage.content[0]]\n }\n conversation.messages[newMessage.conversationId].loading = true\n break\n }\n }\n }\n\n function processMessageContent(newMessage: ConversationMessage) {\n const contentList = Array.isArray(newMessage.content) ? newMessage.content : []\n\n if (contentList.length === 0) {\n const messages = conversation.messages[newMessage.conversationId]?.message\n if (!messages) return\n\n const idx = findExecutionMsgIndex(newMessage, messages)\n if (idx === -1) {\n messages.push({ ...newMessage })\n } else {\n const prevContent = messages[idx]?.content || []\n messages[idx] = {\n ...messages[idx],\n ...newMessage,\n content: prevContent\n }\n }\n\n normalizeMessagesByExecutionAndRole(messages)\n return\n }\n\n contentList.forEach((contentItem) => {\n processSingleMessageContent({\n ...newMessage,\n content: [contentItem]\n })\n })\n\n normalizeMessagesByExecutionAndRole(conversation.messages[newMessage.conversationId]?.message)\n }\n\n function isStoppedIncomingMessage(newMessage: ConversationMessage) {\n const messages = conversation.messages[newMessage.conversationId]?.message\n if (!messages) return false\n\n return messages.some((item) => item.stopFlag && item.executionId === newMessage.executionId)\n }\n\n /**\n * 接收WebSocket消息的统一入口\n * 根据消息类型分发到不同的处理函数\n * @param newMessage - 新消息对象\n */\n const acceptMessage = async (newMessage: ConversationMessage) => {\n const conversationId = newMessage.conversationId\n if (!conversation.messages[conversationId]?.message) return\n const canProceed = await config.hooks?.onBeforeAcceptMessage?.(newMessage)\n if (canProceed === false) {\n throw new Error('操作被阻止')\n }\n if (isStoppedIncomingMessage(newMessage)) {\n conversation.messages[conversationId].loading = false\n return\n }\n processMessageContent(newMessage)\n }\n\n const sendMessage = async (\n message?: ConversationMessageSend['message'],\n files = [] as ConversationMessageSend['files'],\n params?: ObjectType<any>\n ) => {\n const conversationId = conversation.active.id\n if (conversation.messages[conversationId].loading) return\n let msgContent: ConversationMessageSend['message'] = ''\n const references = conversation.messages[conversationId].references\n if (message) {\n msgContent = message\n } else {\n if (references?.type === 1 && references?.content?.msgContent) {\n msgContent = references.content.msgContent + '\\n'\n }\n msgContent = msgContent + conversation.messages[conversationId].content!\n }\n if (!msgContent) return\n\n const canProceed = await config.hooks?.onBeforeSend?.(msgContent, files || [])\n if (canProceed === false) return\n\n // 校验 userInput\n if (agent.agentInfo.userInput?.length) {\n const invalid = agent.agentInfo.userInput.some((item) => {\n const isRequired = item.rules?.some((r) => r.type === 'required')\n if (isRequired) {\n if (item.type === 'BOOLEAN') {\n return isNullOrUnDef(item.value)\n }\n return isNullOrUnDef(item.value) || item.value === ''\n }\n return false\n })\n if (invalid) {\n antdMessage.error('请检查输入参数')\n return\n }\n }\n\n conversation.messages[conversationId].loading = true\n\n // 如果当前会话没有标题(新创建的隐式会话),则给一个默认标题,使其在发送消息后显示在列表中\n const idx = conversations.list.items.findIndex((item) => item.id === conversationId)\n if (idx !== -1 && !conversations.list.items[idx].label) {\n conversations.list.items[idx].label = '新会话'\n }\n\n const sendParams = {\n conversationId,\n message: msgContent,\n convMeta: config.params.convMeta,\n files: conversation.messages[conversationId].files,\n params,\n spec: {\n ...conversation.active.spec,\n model: agent.model\n },\n stream: true,\n responseMode: 2\n } as ConversationMessageSend\n\n // 参数合并\n const extraParams = deepCopy(config.params?.params || {})\n const userInputParams = variablesToObject(agent.agentInfo.userInput || [])\n Object.assign(extraParams, userInputParams)\n sendParams.params = extraParams\n\n if (!message) {\n setContent('')\n setContentParams()\n setFileList([])\n setReferences()\n setHeaderOpen(false)\n clearNodeAndEdgeStyle()\n }\n try {\n await config.services.request.sendMessageStream(sendParams, agent.agentInfo?.id || '')\n config.hooks?.onAfterSend?.()\n } finally {\n // loading关闭由websocket消息执行\n // conversation.messages[conversationId].loading = false\n }\n }\n\n // 取消接收消息\n const cancelReceive = async () => {\n const messages = conversation.messages[conversation.active.id].message\n if (messages.length > 0) {\n const lastMsg = messages[messages.length - 1]\n if (lastMsg.executionId) {\n await config.services.request.cancelMessage(lastMsg.executionId)\n\n messages.forEach((item) => {\n if (item.executionId === lastMsg.executionId) {\n item.generating = false\n item.stopFlag = true\n // 将未完成的 toolCall 状态标记为失败,避免一直 loading\n if (item.content && Array.isArray(item.content)) {\n item.content.forEach((contentItem: any) => {\n if (contentItem.type === 'toolCall' && contentItem.status !== 'success' && contentItem.status !== 'error') {\n contentItem.status = 'error'\n }\n })\n }\n }\n })\n } else {\n lastMsg.stopFlag = true\n lastMsg.generating = false\n }\n }\n conversation.messages[conversation.active.id].loading = false\n }\n\n return {\n /** 全局配置对象 */\n config,\n /** 设置服务配置 */\n setServices,\n /** 智能体状态 */\n agent,\n /** 设置智能体模型 */\n setAgentModel,\n /** 设置文件预览 */\n setPreview,\n /** 设置参数 */\n setParams,\n /** 设置布局配置 */\n setLayout,\n /** 设置生命周期钩子 */\n setHooks,\n /** 获取智能体详情 */\n getAgentInfo,\n /** 设置智能体 */\n setAgent,\n /** 设置智能体用户输入 */\n setUserInput,\n /** 设置会话配置 */\n setConversationSpec,\n /** 历史会话状态 */\n conversations,\n /** 获取会话列表 */\n getConversations,\n /** 删除会话 */\n delConversation,\n /** 设置内容参数,透传大模型后清空 */\n setContentParams,\n /** 当前会话状态 */\n conversation,\n /** 设置引用消息 */\n setReferences,\n /** 设置消息内容 */\n setContent,\n /** 设置文件列表 */\n setFileList,\n /** 设置头部展开状态 */\n setHeaderOpen,\n /** 创建新会话 */\n createConversation,\n /** 切换会话 */\n switchConversation,\n /** 初始化会话 */\n initConversation,\n /** 发送消息 */\n sendMessage,\n /** 取消接收 */\n cancelReceive,\n /** 接收消息 */\n acceptMessage,\n /** 获取智能体用户输入 */\n getUserInput,\n /** 消息反馈 */\n feedback\n }\n}\n","import { DeleteOutlined, RedoOutlined } from '@ant-design/icons'\nimport { Conversations, ConversationsProps } from '@ant-design/x-v2'\nimport type { ItemType } from '@ant-design/x-v2/es/conversations/interface'\nimport { Empty, Spin } from 'antd'\nimport { useMemo } from 'react'\nimport InfiniteScroll from 'react-infinite-scroll-component'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\n\nexport default () => {\n const chatStore = useChatStore()\n const conversationsState = useSnapshot(chatStore.conversations)\n const conversationState = useSnapshot(chatStore.conversation)\n\n const conversationList = useMemo(() => {\n return conversationsState.list.items.filter((item) => item.label)\n }, [conversationsState.list.items])\n\n const menuConfig: ConversationsProps['menu'] = (conversation) => ({\n items: [\n {\n label: '删除',\n key: 'deleteChat',\n icon: <DeleteOutlined />,\n danger: true\n }\n ],\n onClick: (itemInfo) => {\n itemInfo.domEvent.stopPropagation()\n if (itemInfo.key === 'deleteChat') {\n chatStore.delConversation(conversation.key)\n }\n }\n })\n\n return (\n <>\n <div className=\"height-full scroll-fade-in\" id=\"scrollableDiv\">\n {conversationList.length ? (\n <InfiniteScroll\n dataLength={conversationList.length}\n hasMore={false}\n next={() => {\n console.log('next')\n }}\n loader={\n <div className=\"text-center\">\n <Spin indicator={<RedoOutlined spin />} size=\"small\" />\n </div>\n }\n style={{ overflow: 'hidden' }}\n scrollableTarget=\"scrollableDiv\" // 👈 指定滚动容器\n >\n <Conversations\n className={styles.conversations}\n items={conversationList as ItemType[]}\n activeKey={conversationState.active.id}\n onActiveChange={async (id) => chatStore.switchConversation(id as string)}\n groupable\n menu={menuConfig}\n />\n </InfiniteScroll>\n ) : (\n <Empty description=\"暂无会话记录\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n )}\n </div>\n </>\n )\n}\n","import { CloseOutlined, CommentOutlined, PlusOutlined } from '@ant-design/icons'\nimport { RenderWrapper } from '@zero-library/common'\nimport { Avatar, Button, Flex, Popover, Space } from 'antd'\nimport classNames from 'classnames'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport { ChatLayoutHeader } from '../../types'\nimport ConversationList from './ConversationList'\nimport styles from './styles.module.less'\n\nexport default ({ title = true, avatar = true, closeBtn = false, newConversationBtn = true, conversationListBtn = true }: ChatLayoutHeader) => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n const configState = useSnapshot(chatStore.config)\n return (\n <>\n <Flex justify=\"space-between\" align=\"center\" className={classNames(styles.chatHeader, 'zero-chat-header')}>\n <Flex gap={4} align=\"center\">\n <RenderWrapper\n control={avatar}\n DefaultComponent={<Avatar size={22} src={agentState.agentInfo.iconUrl} alt={agentState.agentInfo.name} />}\n />\n <RenderWrapper control={title} DefaultComponent={<div className={styles.chatTitle}>{agentState.agentInfo.name}</div>} />\n </Flex>\n <Space size={2}>\n <RenderWrapper\n control={newConversationBtn}\n DefaultComponent={\n <Button title=\"新建会话\" type=\"text\" size=\"large\" icon={<PlusOutlined />} onClick={() => chatStore.createConversation()} />\n }\n />\n\n <RenderWrapper\n control={conversationListBtn}\n DefaultComponent={\n <Popover\n getPopupContainer={(e) => e}\n placement=\"bottom\"\n classNames={{ container: styles.popover }}\n content={<ConversationList />}\n trigger={['click']}\n >\n <Button title=\"历史会话\" type=\"text\" size=\"large\" icon={<CommentOutlined />} />\n </Popover>\n }\n />\n\n <RenderWrapper\n control={closeBtn}\n DefaultComponent={<Button title=\"关闭\" type=\"text\" size=\"large\" onClick={configState.hooks?.onHeaderClose} icon={<CloseOutlined />} />}\n />\n </Space>\n </Flex>\n </>\n )\n}\n","import { PlusOutlined } from '@ant-design/icons'\nimport { RenderWrapper } from '@zero-library/common'\nimport { Avatar, Button, Flex, Typography } from 'antd'\nimport classNames from 'classnames'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport { ChatLayoutConversationListHeader } from '../../types'\nimport styles from './styles.module.less'\n\nconst { Text } = Typography\n\nexport default ({ title = true, avatar = true, newConversationBtn = true }: ChatLayoutConversationListHeader) => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n\n return (\n <Flex className=\"p-24\" gap={16} vertical>\n <Flex align=\"center\" gap={16}>\n <RenderWrapper\n control={avatar}\n DefaultComponent={\n <Avatar size={50} src={agentState.agentInfo?.iconUrl} shape=\"square\" style={{ flexShrink: 0 }}>\n {(agentState.agentInfo?.name || 'AI').slice(0, 1)}\n </Avatar>\n }\n />\n\n <RenderWrapper\n control={title}\n DefaultComponent={\n <>\n <Flex vertical gap={4} flex={1} style={{ minWidth: 0 }}>\n <Text strong className={classNames('fz-16')}>\n {agentState.agentInfo.name}\n </Text>\n <Text type=\"secondary\" ellipsis className={classNames('fz-12')}>\n {agentState.agentInfo.description}\n </Text>\n </Flex>\n </>\n }\n />\n </Flex>\n <RenderWrapper\n control={newConversationBtn}\n DefaultComponent={\n <Button\n block\n type=\"primary\"\n onClick={() => chatStore.createConversation()}\n className={classNames(styles.createConversationButton)}\n icon={<PlusOutlined />}\n >\n 新建会话\n </Button>\n }\n />\n </Flex>\n )\n}\n","import { RenderWrapper } from '@zero-library/common'\nimport { Flex } from 'antd'\nimport classNames from 'classnames'\nimport { ChatLayoutConversationList } from '../../types'\nimport ConversationList from './ConversationList'\nimport ConversationListHeader from './ConversationListHeader'\nimport styles from './styles.module.less'\n\nconst ConversationListPanel = ({ header }: ChatLayoutConversationList) => {\n return (\n <Flex vertical className={classNames('height-full', 'zero-chat-conversations', styles.conversationListPanel)}>\n <RenderWrapper control={header} DefaultComponent={ConversationListHeader} />\n <div className=\"full-scroll\">\n <ConversationList />\n </div>\n </Flex>\n )\n}\n\nexport default ConversationListPanel\n","import { createFromIconfontCN } from '@ant-design/icons'\nimport '../../assets/iconfont.js'\n\nconst IconFont = createFromIconfontCN({})\n\nexport default IconFont\n","import { RenderWrapper } from '@zero-library/common'\nimport { Flex, Typography } from 'antd'\nimport classNames from 'classnames'\nimport { useSnapshot } from 'valtio'\nimport IconFont from '../../components/icon-font'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\nconst { Text } = Typography\n\nexport default ({ skillsBtn, knowledgeBtn }) => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n\n return (\n <>\n <Flex\n className={classNames(styles.resourceBtn, { [styles.resourceBtnActive]: agentState.model.reasoning })}\n onClick={() => chatStore.setAgentModel({ ...agentState.model, reasoning: !agentState.model.reasoning })}\n >\n <IconFont type=\"icon-remark\" />\n <Text style={{ color: agentState.model.reasoning ? '#fff' : '#000' }}>深度思考</Text>\n </Flex>\n\n <RenderWrapper\n control={skillsBtn}\n DefaultComponent={\n <Flex\n className={classNames(styles.resourceBtn, { [styles.resourceBtnActive]: agentState.model.reasoning })}\n onClick={() => chatStore.setAgentModel({ ...agentState.model, reasoning: !agentState.model.reasoning })}\n >\n <IconFont type=\"icon-remark\" />\n <Text style={{ color: agentState.model.reasoning ? '#fff' : '#000' }}>技能</Text>\n </Flex>\n }\n />\n\n <RenderWrapper\n control={knowledgeBtn}\n DefaultComponent={\n <Flex\n className={classNames(styles.resourceBtn, { [styles.resourceBtnActive]: agentState.model.reasoning })}\n onClick={() => chatStore.setAgentModel({ ...agentState.model, reasoning: !agentState.model.reasoning })}\n >\n <IconFont type=\"icon-remark\" />\n <Text style={{ color: agentState.model.reasoning ? '#fff' : '#000' }}>知识库</Text>\n </Flex>\n }\n />\n </>\n )\n}\n","import { EnterOutlined } from '@ant-design/icons'\nimport { Sender } from '@ant-design/x-v2'\nimport { isFunction, markdownToText, RenderWrapper, shouldRender } from '@zero-library/common'\nimport { Button, Flex, Typography } from 'antd'\nimport { forwardRef, useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { InputFile } from '../..'\nimport { AttachmentsProps } from '../../components/Attachments'\nimport ChatSender, { ChatSenderHandle } from '../../components/ChatSender'\nimport { useChatStore } from '../../stores/Context'\nimport { ChatLayoutSender, FileUploadConfig, MessageBoxType } from '../../types'\nimport FeaturesRenderer from './FeaturesRenderer'\nimport styles from './styles.module.less'\n\nexport default forwardRef<ChatSenderHandle, ChatLayoutSender>(\n ({ placeholder, extraBtn = false, referencesBtn = false, sendBtnProps, footerBelow = false, skillsBtn = false, knowledgeBtn = false }, ref) => {\n const chatStore = useChatStore()\n const configState = useSnapshot(chatStore.config)\n const agentState = useSnapshot(chatStore.agent)\n const conversationState = useSnapshot(chatStore.conversation)\n\n const fileUploadRequest: AttachmentsProps['fileUpload'] = (formData, signal) =>\n configState.services.request.chatUpload(agentState.agentInfo.id, formData, conversationState.active.id, signal)\n // 当前会话参数\n const chatMessage = useMemo(\n () => conversationState.messages[conversationState.active.id] || ({} as MessageBoxType),\n [conversationState.messages[conversationState.active.id]]\n )\n const referenceContent = useMemo(() => {\n const content = chatMessage.references?.content?.name\n if (content) {\n return markdownToText(content)\n }\n }, [chatMessage.references])\n\n const referenceHandle = (con: string) => {\n if (chatMessage?.loading) return\n chatStore.setContent(con)\n chatStore.sendMessage()\n }\n\n return (\n <Flex vertical gap={8} className=\"zero-chat-sender\">\n {/* 🌟 提示词 */}\n {/* <RenderWrapper control={prompts} DefaultComponent={SenderPromptsItems} /> */}\n <ChatSender\n ref={ref}\n placeholder={placeholder}\n content={chatMessage.content}\n fileList={chatMessage.files as InputFile[]}\n headerOpen={chatMessage.headerOpen}\n loading={chatMessage.loading}\n onContentChange={chatStore.setContent}\n onFileListChange={chatStore.setFileList}\n onHeaderOpenChange={chatStore.setHeaderOpen}\n onSend={() => chatStore.sendMessage()}\n onCancel={chatStore.cancelReceive}\n onFocus={chatStore.config.hooks?.onSenderFocus}\n fileUpload={{\n request: fileUploadRequest,\n config: agentState.agentInfo.config?.options?.fileUpload as FileUploadConfig\n }}\n sendBtnProps={isFunction(sendBtnProps) ? sendBtnProps() : {}}\n extraFooterBelow={<RenderWrapper control={footerBelow} />}\n extraFooter={\n <>\n <FeaturesRenderer skillsBtn={skillsBtn} knowledgeBtn={knowledgeBtn} />\n <RenderWrapper control={extraBtn} />\n </>\n }\n extraHeader={\n <Sender.Header\n title={\n <Flex gap={4}>\n <EnterOutlined />\n <Typography.Text type=\"secondary\" ellipsis>\n {referenceContent}\n </Typography.Text>\n </Flex>\n }\n open={!!referenceContent}\n onOpenChange={() => chatStore.setReferences()}\n classNames={{\n header: styles.senderReferenceHeaderTitle,\n content: shouldRender(referencesBtn) ? '' : styles.senderReferenceHeaderContent\n }}\n >\n <RenderWrapper\n control={referencesBtn}\n DefaultComponent={\n <Flex gap={8}>\n {['深度解读', '概要解读'].map((con) => (\n <Button key={con} color=\"primary\" variant=\"filled\" onClick={() => referenceHandle(con)}>\n {con} →\n </Button>\n ))}\n </Flex>\n }\n />\n </Sender.Header>\n }\n />\n </Flex>\n )\n }\n)\n","import logo from '../../assets/images/logo.png'\n\nimport styles from './styles.module.less'\n\nconst ChatSenderHeader = () => {\n return (\n <div className={styles.logoArea}>\n <div className={styles.logoContainer}>\n {/* 静态的柔和光晕 */}\n <div className={styles.staticHalo}></div>\n\n {/* 悬浮呼吸感 */}\n <div className={styles.logoHoverWrapper}>\n <img src={logo} alt=\"LoLR.AI Logo\" className={styles.logoImage} />\n </div>\n </div>\n <h1 className={styles.greetingTitle}>\n 你好,我是 <span className={styles.gradientText}>LoLR.AI</span>\n </h1>\n <p className={styles.greetingSubtitle}>今天想探索点什么?</p>\n </div>\n )\n}\n\nexport default ChatSenderHeader\n","import { Input } from 'antd'\nimport React, { useCallback } from 'react'\n\ninterface MonacoEditorProps {\n language?: string\n value?: string\n onChange?: (value: string) => void\n placeholder?: string\n height?: number | string\n readOnly?: boolean\n style?: React.CSSProperties\n onMount?: (editor: any, monaco: any) => void\n}\n\nconst MonacoEditor: React.FC<MonacoEditorProps> = ({ value = '', onChange, placeholder, height = 200, readOnly = false, style }) => {\n const handleKeyDownCapture = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\n // 阻止空格键事件向外层组件传播,避免被拦截\n if (e.key === ' ' || e.code === 'Space') {\n e.stopPropagation()\n }\n }, [])\n\n const handleKeyUpCapture = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === ' ' || e.code === 'Space') {\n e.stopPropagation()\n }\n }, [])\n\n const handleScriptChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(event.target.value || '')\n },\n [onChange]\n )\n\n return (\n <div style={style} onKeyDownCapture={handleKeyDownCapture} onKeyUpCapture={handleKeyUpCapture}>\n <Input.TextArea\n value={value}\n onChange={handleScriptChange}\n readOnly={readOnly}\n placeholder={placeholder}\n autoSize={false}\n style={{\n height,\n resize: 'vertical',\n fontFamily: 'Monaco, Menlo, Consolas, \"Courier New\", monospace',\n ...style\n }}\n />\n </div>\n )\n}\n\nexport default MonacoEditor\n","import { CloudUploadOutlined, DeleteOutlined } from '@ant-design/icons'\nimport { Button, Collapse, Flex, Form, Input, InputNumber, Switch, Typography, Upload, message, theme } from 'antd'\nimport { RcFile } from 'antd/es/upload'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { useSnapshot } from 'valtio'\nimport MonacoEditor from '../../components/monaco-editor'\nimport { formatFileSize, getFileExtension, getFileIcon } from '../../core/utils'\nimport { flowSpecState } from '../../stores/agent-flow.store'\nimport { useChatStore } from '../../stores/Context'\nimport { AgentInfo } from '../../types'\nimport { Variable } from '../../types/agentflow.types'\nimport styles from './styles.module.less'\n\nconst { Text } = Typography\nconst START_NODE_TYPE = 'start'\n\nconst FormFileUpload = ({ value, onChange, multiple = false }: { value?: any; onChange?: (value: any) => void; multiple?: boolean }) => {\n const { token } = theme.useToken()\n const fileList = Array.isArray(value) ? value : value ? [value] : []\n const chatStore = useChatStore()\n const configState = useSnapshot(chatStore.config)\n const conversationState = useSnapshot(chatStore.conversation)\n\n const customRequest = async (options: any) => {\n const { file, onSuccess, onError } = options\n try {\n const formData = new FormData()\n formData.append('file', file as RcFile)\n const res = await configState.services.request.chatUpload(chatStore.agent.agentInfo.id, formData, conversationState.active.id)\n\n if (res.code === 200 && res.data?.length) {\n const uploadedFile = res.data[0]\n onSuccess(uploadedFile)\n\n if (multiple) {\n onChange?.([...fileList, uploadedFile])\n } else {\n onChange?.([uploadedFile])\n }\n } else {\n message.error(res.message || '上传失败')\n onError(new Error(res.message))\n }\n } catch (error) {\n onError(error)\n }\n }\n\n const handleRemove = (fileToRemove: any) => {\n const newList = fileList.filter((f: any) => f.id !== fileToRemove.id)\n onChange?.(newList.length > 0 ? newList : undefined)\n }\n\n return (\n <Flex vertical gap={12} style={{ width: '100%' }}>\n {!multiple && fileList.length >= 1 ? null : (\n <Upload multiple={multiple} customRequest={customRequest} showUploadList={false}>\n <Button icon={<CloudUploadOutlined />}>从本地上传</Button>\n </Upload>\n )}\n\n {fileList.length > 0 && (\n <Flex vertical gap={8}>\n {fileList.map((file: any) => (\n <Flex\n key={file.id || file.uid}\n align=\"center\"\n justify=\"space-between\"\n style={{\n padding: '8px 12px',\n backgroundColor: token.colorFillAlter,\n borderRadius: token.borderRadiusLG || 8,\n border: `1px solid ${token.colorBorderSecondary}`\n }}\n >\n <Flex align=\"center\" gap={12} style={{ overflow: 'hidden', flex: 1 }}>\n <div\n style={{\n width: 40,\n height: 40,\n backgroundColor: '#000',\n borderRadius: token.borderRadiusSM || 4,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0\n }}\n >\n {getFileIcon(file.extension || getFileExtension(file.name), 20)}\n </div>\n <div style={{ overflow: 'hidden', display: 'flex', flexDirection: 'column', flex: 1 }}>\n <Text ellipsis style={{ width: '100%', fontSize: 14, fontWeight: 500 }}>\n {file.name}\n </Text>\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n {(file.extension || getFileExtension(file.name)).toUpperCase()} • {formatFileSize(file.size)}\n </Text>\n </div>\n </Flex>\n <Button type=\"text\" icon={<DeleteOutlined />} onClick={() => handleRemove(file)} style={{ color: token.colorTextSecondary }} />\n </Flex>\n ))}\n </Flex>\n )}\n </Flex>\n )\n}\n\nconst FormMonacoEditor = ({ value, onChange }: { value?: string; onChange?: (value: string) => void }) => {\n const { token } = theme.useToken()\n return (\n <div style={{ backgroundColor: token.colorFillAlter, padding: 8, borderRadius: token.borderRadius }}>\n <MonacoEditor language=\"json\" placeholder=\"请输入值...\" height={80} value={value} onChange={onChange} />\n </div>\n )\n}\n\nconst UserInputPanel = () => {\n const chatStore = useChatStore()\n const agentSnap = useSnapshot(chatStore.agent)\n const flowSpecSnap = useSnapshot(flowSpecState)\n const [form] = Form.useForm()\n const [activeKey, setActiveKey] = useState<string[]>(['1'])\n const { layout } = useSnapshot(chatStore.config)\n\n const startNode = useMemo(() => {\n return flowSpecSnap.nodes.find((n) => String(n.type || '').toLowerCase() === START_NODE_TYPE)\n }, [flowSpecSnap.nodes])\n\n const inputs = useMemo(() => {\n if (agentSnap.agentInfo.userInput?.length > 0) {\n return agentSnap.agentInfo.userInput.filter((i: any) => i.enableEdit)\n }\n return (startNode?.data.input || []).filter((i: any) => i.enableEdit)\n }, [startNode, agentSnap.agentInfo.userInput])\n\n useEffect(() => {\n if (inputs.length > 0) {\n const initialValues = inputs.reduce((acc: any, cur: Variable) => {\n const value: any = cur.value\n\n acc[cur.name] = value\n return acc\n }, {})\n form.setFieldsValue(initialValues)\n }\n }, [inputs, form])\n\n const handleValuesChange = (changedValues: any) => {\n if (agentSnap.agentInfo.userInput?.length > 0) {\n const newInput = agentSnap.agentInfo.userInput.map((v: any) => {\n if (v.name in changedValues) {\n const newValue = changedValues[v.name]\n return { ...v, value: newValue }\n }\n return v\n })\n chatStore.setAgent({ ...agentSnap.agentInfo, userInput: newInput } as AgentInfo)\n return\n }\n const nodeIndex = flowSpecState.nodes.findIndex((n) => n.id === startNode?.id)\n if (nodeIndex > -1) {\n const currentInput = flowSpecState.nodes[nodeIndex].data.input\n const newInput = currentInput.map((v: Variable) => {\n if (v.name in changedValues) {\n const newValue = changedValues[v.name]\n return { ...v, value: newValue }\n }\n return v\n })\n flowSpecState.nodes[nodeIndex].data.input = newInput\n }\n }\n\n const handleStartChat = () => {\n form\n .validateFields()\n .then(() => {\n setActiveKey([])\n })\n .catch(() => {\n message.error('请检查输入参数')\n })\n }\n\n const renderFormItem = (item: Variable) => {\n const itemStyle = { marginBottom: 0 }\n const commonProps = {\n label: item.name,\n name: item.name,\n style: itemStyle,\n rules: item.rules?.map((r) => {\n const valStr = String(r.value || '')\n if (r.type === 'required') return { required: true, message: r.message }\n if (r.type === 'email') return { type: 'email', message: r.message }\n if (r.type === 'pattern') return { pattern: new RegExp(valStr), message: r.message }\n if (r.type === 'max' || r.type === 'min') {\n return {\n validator: (_: any, val: any) => {\n if (val === undefined || val === null || val === '') return Promise.resolve()\n const numVal = Number(val)\n if (isNaN(numVal)) return Promise.resolve()\n if (r.type === 'max' && numVal > Number(valStr)) return Promise.reject(new Error(r.message))\n if (r.type === 'min' && numVal < Number(valStr)) return Promise.reject(new Error(r.message))\n return Promise.resolve()\n }\n }\n }\n if (r.type === 'length') {\n const [min, max] = valStr.split(',').map((v: string) => (v ? Number(v) : undefined))\n return {\n validator: (_: any, val: any) => {\n if (val === undefined || val === null || val === '') return Promise.resolve()\n const strVal = String(val)\n if (min !== undefined && strVal.length < min) return Promise.reject(new Error(r.message))\n if (max !== undefined && strVal.length > max) return Promise.reject(new Error(r.message))\n return Promise.resolve()\n }\n }\n }\n if (r.type === 'size') {\n const [min, max] = valStr.split(',').map((v: string) => (v ? Number(v) : undefined))\n return {\n validator: (_: any, val: any) => {\n if (val === undefined || val === null || val === '') return Promise.resolve()\n let len = 0\n if (Array.isArray(val)) {\n len = val.length\n } else if (typeof val === 'string') {\n try {\n const parsed = JSON.parse(val)\n if (Array.isArray(parsed)) len = parsed.length\n else return Promise.resolve()\n } catch (e) {\n return Promise.resolve()\n }\n } else {\n return Promise.resolve()\n }\n if (min !== undefined && len < min) return Promise.reject(new Error(r.message))\n if (max !== undefined && len > max) return Promise.reject(new Error(r.message))\n return Promise.resolve()\n }\n }\n }\n if (r.type === 'enum') {\n const options = valStr.split(',').map((s: string) => s.trim())\n return {\n validator: (_: any, val: any) => {\n if (val === undefined || val === null || val === '') return Promise.resolve()\n if (options.includes(String(val))) return Promise.resolve()\n return Promise.reject(new Error(r.message))\n }\n }\n }\n return {}\n }) as any\n }\n\n if (['STRING', 'LONG'].includes(item.type)) {\n return (\n <Form.Item {...commonProps}>\n <Input placeholder=\"请输入值\" />\n </Form.Item>\n )\n }\n\n if (['NUMBER'].includes(item.type)) {\n return (\n <Form.Item {...commonProps}>\n <InputNumber style={{ width: '100%' }} placeholder=\"请输入数值\" />\n </Form.Item>\n )\n }\n\n if (item.type === 'BOOLEAN') {\n return (\n <Form.Item style={itemStyle} name={item.name} valuePropName=\"checked\">\n <Flex justify=\"space-between\" align=\"center\">\n <span>{item.name}</span>\n <Switch size=\"small\" />\n </Flex>\n </Form.Item>\n )\n }\n\n if (item.type === 'FILE') {\n return (\n <Form.Item {...commonProps}>\n <FormFileUpload multiple={false} />\n </Form.Item>\n )\n }\n\n if (item.type === 'ARRAY_FILE') {\n return (\n <Form.Item {...commonProps}>\n <FormFileUpload multiple={true} />\n </Form.Item>\n )\n }\n\n if (['OBJECT', 'ARRAY', 'ARRAY_STRING', 'ARRAY_NUMBER', 'ARRAY_DECIMAL', 'ARRAY_BOOLEAN', 'ARRAY_OBJECT'].includes(item.type)) {\n return (\n <Form.Item {...commonProps}>\n <FormMonacoEditor />\n </Form.Item>\n )\n }\n\n return (\n <Form.Item {...commonProps}>\n <Input placeholder=\"请输入值\" />\n </Form.Item>\n )\n }\n\n const genExtra = () => {\n if (activeKey.includes('1')) return null\n return (\n <Button\n type=\"text\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation()\n setActiveKey(['1'])\n }}\n >\n 编辑\n </Button>\n )\n }\n\n const items = [\n {\n key: '1',\n label: '参数设置',\n extra: genExtra(),\n children: (\n <>\n <Form form={form} layout=\"vertical\" onValuesChange={handleValuesChange} style={{ maxHeight: 500, overflow: 'auto', paddingRight: 16 }}>\n {inputs.length > 0 ? (\n <Flex vertical gap={12}>\n {inputs.map((item: Variable) => (\n <React.Fragment key={item.name}>{renderFormItem(item)}</React.Fragment>\n ))}\n </Flex>\n ) : (\n <div style={{ padding: '10px', color: '#999', textAlign: 'center' }}>暂无用户输入字段</div>\n )}\n </Form>\n <Flex align=\"center\" justify=\"center\" className=\"m-t-16\">\n <Button type=\"primary\" onClick={handleStartChat}>\n 开始会话\n </Button>\n </Flex>\n </>\n )\n }\n ]\n\n return (\n <div className={styles.userInputCollapse}>\n <Collapse\n activeKey={activeKey}\n onChange={(keys) => {\n const newKeys = typeof keys === 'string' ? [keys] : (keys as string[])\n setActiveKey(newKeys)\n }}\n items={items}\n className=\"m-16\"\n styles={{\n body: {\n paddingRight: 0,\n paddingBottom: 10\n }\n }}\n />\n </div>\n )\n}\n\nexport default UserInputPanel\n",".bodyWidth {\n width: 100%;\n height: 100%;\n}\n.inputContainer {\n max-width: 1000px;\n min-width: 320px;\n width: calc(100% - 24px);\n}\n.disclaimerNotice {\n font-size: 12px;\n text-align: center;\n color: #bfbfbf;\n}\n.previewHeader {\n padding-bottom: 4px;\n border-bottom: 1px solid #e2e8f0;\n}\n.previewCloseBtn {\n cursor: pointer;\n display: flex;\n align-items: center;\n color: var(--ant-color-text-tertiary);\n transition: color 0.3s;\n font-size: 16px;\n}\n.previewCloseBtn:hover {\n color: var(--ant-color-text);\n}\n.previewCloseBtn .closeIcon {\n transition: transform 0.3s ease;\n}\n.previewCloseBtn.rotateIcon:hover .closeIcon {\n transform: rotate(90deg);\n}\n","import { RenderWrapper, shouldRender } from '@zero-library/common'\nimport { Flex } from 'antd'\nimport classNames from 'classnames'\nimport { forwardRef, memo, useImperativeHandle, useRef } from 'react'\nimport { useSnapshot } from 'valtio'\nimport type { ChatSenderHandle } from '../../../components/ChatSender'\nimport { useChatStore } from '../../../stores/Context'\nimport { ChatLayout } from '../../../types/'\nimport BubbleListItems from '../../common/BubbleListItems'\nimport ChatHeader from '../../common/ChatHeader'\nimport ChatSender from '../../common/ChatSender'\nimport ChatSenderHeader from '../../common/ChatSenderHeader'\nimport UserInputPanel from '../../common/UserInputPanel'\nimport styles from './styles.module.less'\n\nconst ChatMainPanel = memo(\n forwardRef<ChatSenderHandle>((_props, ref) => {\n const chatStore = useChatStore()\n const senderRef = useRef<ChatSenderHandle | null>(null)\n\n useImperativeHandle(\n ref,\n () => ({\n focus: (options) => {\n senderRef.current?.focus(options)\n }\n }),\n []\n )\n\n /** 配置状态的快照 */\n const configState = useSnapshot(chatStore.config)\n /** 智能体状态的快照 */\n const agentState = useSnapshot(chatStore.agent)\n\n return (\n <Flex vertical className={classNames('height-full')}>\n {/** 聊天区域头部 */}\n <RenderWrapper control={configState.layout.chatHeader} DefaultComponent={ChatHeader} />\n\n <Flex justify=\"center\" align=\"center\" vertical gap={24} className={classNames('height-full', styles.bodyWidth)}>\n {/** 消息列表上方区域 */}\n {shouldRender(agentState.agentInfo.userInput && agentState.agentInfo.userInput.length > 0) && (\n <RenderWrapper DefaultComponent={UserInputPanel} />\n )}\n\n {/** 消息列表区域 */}\n {shouldRender(configState.layout.messageList) && (\n <div className=\"full-scroll\" style={{ width: '100%' }}>\n <RenderWrapper control={configState.layout.messageList} DefaultComponent={BubbleListItems} />\n </div>\n )}\n\n {/** 输入框上方头部 */}\n <RenderWrapper control={configState.layout.senderHeader as ChatLayout['senderHeader']} DefaultComponent={<ChatSenderHeader />} />\n\n <Flex className={styles.inputContainer} vertical gap={8}>\n {/** 输入框组件 */}\n <RenderWrapper ref={senderRef} DefaultComponent={ChatSender} />\n {/** 免责声明 */}\n <RenderWrapper\n control={configState.layout.disclaimerNotice}\n DefaultComponent={<div className={styles.disclaimerNotice}>内容由AI生成,仅供参考,请仔细甄别</div>}\n />\n\n {/** 输入框底部区域 */}\n <RenderWrapper control={configState.layout.senderFooter} />\n </Flex>\n </Flex>\n </Flex>\n )\n })\n)\n\nexport default ChatMainPanel\n","import { CloseOutlined, DownloadOutlined } from '@ant-design/icons'\nimport { FilePreview } from '@zero-library/common'\nimport { Button, Flex } from 'antd'\nimport classNames from 'classnames'\nimport { memo, useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { tokenManager } from '../../../core/session'\nimport { useChatStore } from '../../../stores/Context'\nimport type { FileUrlType } from '../../../types'\nimport styles from './styles.module.less'\n\nexport interface ChatPreviewPanelProps {\n agentId?: string\n conversationId?: string\n file: FileUrlType\n}\n\nconst ChatPreviewPanel = memo(({ agentId, conversationId, file }: ChatPreviewPanelProps) => {\n const chatStore = useChatStore()\n const configState = useSnapshot(chatStore.config)\n\n const fileUrl = useMemo(() => {\n if (file?.fileUrl) return file.fileUrl\n if (!file?.path || !agentId || !conversationId) return ''\n const previewUrl = configState.services.request.getPreviewUrl(agentId, conversationId, file.path)\n return previewUrl\n }, [agentId, conversationId, file])\n\n const suffix = useMemo(() => {\n const name = file?.fileName || file?.path || ''\n return name.split('.').pop() || file?.ext || ''\n }, [file])\n\n const handleDownload = () => {\n let downloadUrl = file?.path\n if (downloadUrl && !downloadUrl.startsWith('http')) {\n if (!agentId || !conversationId) return\n downloadUrl = configState.services.request.getPreviewUrl(agentId, conversationId, downloadUrl)\n }\n if (downloadUrl) {\n const urlObj = new URL(downloadUrl, window.location.origin)\n urlObj.searchParams.set('NS-TOKEN', tokenManager.get() || '')\n window.open(urlObj.toString(), '_blank')\n }\n }\n\n return (\n <Flex vertical style={{ height: '100%', overflow: 'hidden' }}>\n <Flex justify=\"flex-end\" className={styles.previewHeader}>\n {file?.path && (\n <div className={styles.previewCloseBtn} onClick={handleDownload}>\n <Button type=\"text\" icon={<DownloadOutlined />} className={styles.closeIcon} />\n </div>\n )}\n <div className={classNames(styles.previewCloseBtn, styles.rotateIcon)} onClick={() => chatStore.setPreview({ path: '', fileName: '' })}>\n <Button type=\"text\" icon={<CloseOutlined />} className={styles.closeIcon} />\n </div>\n </Flex>\n <div className=\"flex-1\">\n <FilePreview fileUrl={fileUrl} suffix={suffix} />\n </div>\n </Flex>\n )\n})\n\nexport default ChatPreviewPanel\n",".chatLayout {\n background-color: transparent;\n height: 100%;\n width: 100%;\n}\n.spinWrapper {\n height: 100%;\n}\n.spinWrapper :global .ant-spin-container {\n height: 100%;\n}\n.fullScroll {\n overflow: auto;\n flex: 1;\n height: 100%;\n}\n.animatedSplitter :global(.ant-splitter-panel) {\n transition: all 0.3s cubic-bezier(0.2, 0, 0, 1) !important;\n}\n.animatedSplitter :global(.ant-splitter-bar) {\n transition: all 0.3s cubic-bezier(0.2, 0, 0, 1) !important;\n}\n.hideSplitterBar :global(.ant-splitter-bar) {\n display: none !important;\n}\n","import { XProvider } from '@ant-design/x-v2'\nimport { isObject, RenderWrapper, shouldRender, useDeepEffect, useWebSocket } from '@zero-library/common'\nimport { Flex, Spin, Splitter } from 'antd'\nimport classNames from 'classnames'\nimport { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { ChatSenderHandle } from '../../components/ChatSender'\nimport { createChatStore } from '../../stores'\nimport { ChatProvider } from '../../stores/Context'\nimport { AgentInfo, ChatHandle, ChatLayout, ChatProps, FileUrlType } from '../../types'\nimport ChatHeader from '../common/ChatHeader'\nimport ConversationListPanel from '../common/ConversationListPanel'\nimport { ChatMainPanel, ChatPreviewPanel } from './components'\nimport styles from './index.module.less'\n\nexport default forwardRef<ChatHandle, ChatProps>(({ theme, params, hooks, layout, config, services }, _ref) => {\n /** 创建聊天状态管理器实例 */\n const chatStore = useMemo(() => createChatStore(), [])\n /** 输入框组件的引用 */\n const senderRef = useRef<ChatSenderHandle | null>(null)\n useImperativeHandle(\n _ref,\n () => ({\n sendMessage: chatStore.sendMessage,\n switchConversation: chatStore.switchConversation,\n createConversation: chatStore.createConversation,\n setReferences: chatStore.setReferences,\n setMessage: chatStore.setContent,\n setMessageParams: chatStore.setContentParams,\n setFiles: chatStore.setFileList,\n setServices: chatStore.setServices,\n setParams: chatStore.setParams,\n senderFocus: (options) => {\n senderRef.current?.focus(options)\n }\n }),\n []\n )\n\n /** 配置状态的快照 */\n const configState = useSnapshot(chatStore.config)\n /** 智能体状态的快照 */\n const agentState = useSnapshot(chatStore.agent)\n /** 会话状态的快照 */\n const conversationState = useSnapshot(chatStore.conversation)\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n chatStore.setHooks(hooks)\n }, [hooks])\n\n useEffect(() => {\n chatStore.setLayout(layout)\n }, [layout])\n\n useEffect(() => {\n chatStore.setParams(params)\n }, [params])\n\n useDeepEffect(() => {\n chatStore.setServices(services)\n }, [services])\n\n useDeepEffect(() => {\n if (agentState.agentInfo.id && isObject(config.agent?.spec)) {\n chatStore.setAgent({ ...agentState.agentInfo, spec: config.agent.spec || {} } as AgentInfo)\n }\n }, [agentState.agentInfo.id, config.agent?.spec])\n\n useDeepEffect(() => {\n if (agentState.agentInfo.id && isObject(config.agent?.config)) {\n chatStore.setAgent({ ...agentState.agentInfo, config: config.agent.config || {} } as AgentInfo)\n }\n }, [agentState.agentInfo.id, config.agent?.config])\n\n useDeepEffect(() => {\n if (agentState.agentInfo.id) {\n chatStore.setUserInput(config.agent.userInput)\n }\n }, [agentState.agentInfo.id, config.agent?.userInput])\n\n useDeepEffect(() => {\n if (config?.agent?.id) {\n chatStore.getAgentInfo(config.agent.id)\n }\n }, [config.agent?.id])\n\n useDeepEffect(() => {\n if (config?.agent?.id) {\n chatStore.initConversation(config)\n }\n }, [config.agent?.id, config.conversationId])\n\n const hasPreView = useMemo(() => {\n return shouldRender(configState.layout.preview as ChatLayout['preview']) && !!(configState.preview.file as FileUrlType).path\n }, [configState.layout.preview, configState.preview.file])\n\n /** 分割面板尺寸状态 */\n const [sizes, setSizes] = useState([0, '100%'])\n /** 设置分割面板尺寸 */\n const setSplitterSizes = (sizes: (number | string)[]) => {\n setSizes(sizes)\n }\n useEffect(() => {\n if (hasPreView) {\n setSplitterSizes(['50%', '50%'])\n } else {\n setSplitterSizes([0, '100%'])\n }\n }, [hasPreView])\n\n /** 主 WebSocket 连接,用于接收实时消息 */\n useWebSocket({\n url: configState.services.websocketUrls?.[0],\n onMessage: (message) => chatStore.acceptMessage(message.payload),\n clientHeartbeat: false,\n reconnectInterval: 10000\n })\n /** 备用 WebSocket 连接,提供一体机saas可用性 */\n useWebSocket({\n url: configState.services.websocketUrls?.[1],\n onMessage: (message) => chatStore.acceptMessage(message.payload),\n clientHeartbeat: false,\n reconnectInterval: 10000\n })\n useEffect(() => {\n hooks?.onBeforeInit?.()\n }, [])\n\n return (\n <XProvider theme={{ cssVar: {}, ...theme }}>\n <ChatProvider store={chatStore}>\n <Spin spinning={configState.loading} classNames={{ root: styles.spinWrapper }}>\n <Flex vertical className={classNames(styles.chatLayout, 'zero-chat-layout', 'height-full')}>\n {/** 全局头部区域 */}\n <RenderWrapper control={configState.layout.globalHeader} DefaultComponent={ChatHeader} />\n\n <Flex ref={containerRef} className=\"full-scroll\">\n {/** 左侧面板区域 */}\n <RenderWrapper control={configState.layout.leftPanel} />\n\n {/** 会话列表面板 */}\n {<RenderWrapper control={configState.layout.conversationList} DefaultComponent={ConversationListPanel} />}\n\n <Splitter className={classNames('flex-1', styles.animatedSplitter, { [styles.hideSplitterBar]: !hasPreView })}>\n <Splitter.Panel collapsible={false} max={800} min={400} size={sizes[1]}>\n <ChatMainPanel ref={senderRef} />\n </Splitter.Panel>\n <Splitter.Panel collapsible={false} min={600} size={sizes[0]}>\n <ChatPreviewPanel\n agentId={agentState?.agentInfo?.id}\n conversationId={conversationState.active.id}\n file={configState.preview.file as FileUrlType}\n />\n </Splitter.Panel>\n </Splitter>\n </Flex>\n </Flex>\n </Spin>\n </ChatProvider>\n </XProvider>\n )\n})\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/utils.ts","../src/stores/Context.ts","../src/components/styles.module.less","../src/components/Attachments.tsx","../src/components/ChatSender.tsx","../a2ui-runtime/x-card.ts","../a2ui-runtime/components/artifacts/ArtifactCard.tsx","../a2ui-runtime/components/artifacts/chart-utils.tsx","../a2ui-runtime/components/artifacts/export-utils.ts","../a2ui-runtime/components/artifacts/ChartViewer.tsx","../src/components/custom-components/agent-navigate.tsx","../src/components/custom-components/code-highlight.tsx","../src/core/session.ts","../src/components/custom-components/preview-link.tsx","../src/components/custom-components/tool-renders/index.module.less","../src/components/custom-components/tool-renders/default-render.tsx","../src/components/custom-components/tool-renders/todo-write-render.tsx","../src/components/custom-components/tool-renders/tool-call-item.tsx","../a2ui-runtime/components/artifacts/ReportViewer.tsx","../a2ui-runtime/components/artifacts/TableViewer.tsx","../a2ui-runtime/components/A2uiComponents.tsx","../a2ui-runtime/controller/meta.ts","../a2ui-runtime/controller/action.ts","../a2ui-runtime/controller/visibility.ts","../a2ui-runtime/controller/wizard.ts","../a2ui-runtime/controller/runtime.ts","../a2ui-runtime/controller/index.ts","../a2ui-runtime/renderer/context.ts","../a2ui-runtime/renderer/useA2uiRuntimeView.ts","../a2ui-runtime/renderer/A2uiMessageCards.tsx","../a2ui-runtime/renderer/protocol.ts","../a2ui-runtime/renderer/A2uiPlan.tsx","../a2ui-runtime/renderer/A2uiRuntimeProvider.tsx","../a2ui-runtime/renderer/A2uiRenderer.tsx","../src/components/MessageRender.tsx","../src/core/constants.ts","../src/stores/agent-flow.store.ts","../src/ui/common/styles.module.less","../src/ui/common/WelcomeItem.tsx","../src/ui/common/BubbleListItems.tsx","../src/services/index.ts","../src/stores/index.ts","../src/ui/common/ConversationList.tsx","../src/ui/common/ChatHeader.tsx","../src/ui/common/ConversationListHeader.tsx","../src/ui/common/ConversationListPanel.tsx","../src/components/icon-font/index.ts","../src/ui/common/FeaturesRenderer.tsx","../src/ui/common/ChatSender.tsx","../src/ui/common/ChatSenderHeader.tsx","../src/components/monaco-editor/index.tsx","../src/ui/common/UserInputPanel.tsx","../src/ui/layouts/components/styles.module.less","../src/ui/layouts/components/ChatMainPanel.tsx","../src/ui/layouts/components/ChatPreviewPanel.tsx","../src/ui/layouts/index.module.less","../src/ui/layouts/index.tsx"],"names":["React","chatAttachments","chatSender","message","isObject","forwardRef","useRef","jsx","jsxs","useEffect","useImperativeHandle","rawXCard","AntCard","AntTag","Fragment","rawMinY","rawMaxY","minY","maxY","spanY","plotW","plotH","scaleX","scaleY","y0","Space","AntButton","Button","useSnapshot","e","iconContainer","toolName","duration","statusIcon","sectionLabel","markdownContainer","sectionBlock","todoList","todoItem","statusIconWrapper","todoContent","todoText","completed","emptyText","Typography","theme","useMemo","Flex","XMarkdown","classNames","AntTable","AText","valuePath","AntSelect","AntSwitch","AntDivider","AntProgress","extractPathFromRef","extractSurfaceId","useState","isSubmitLikeActionName","isCancelLikeActionName","formatMixedContent","ReportViewer","ChartViewer","TableViewer","ArtifactCard","antdMessage","LoadingOutlined","styles_module_default","chatHeader","chatTitle","popover","conversationListPanel","createConversationButton","conversations","chatWelcomeWrap","chatWelcome","promptItem","bubbleList","messageFooter","resourceBtn","resourceBtnActive","userInputCollapse","logoArea","logoContainer","staticHalo","logoHoverWrapper","logoImage","greetingTitle","gradientText","greetingSubtitle","senderReferenceHeaderTitle","senderReferenceHeaderContent","Text","chatRecords","FileTextOutlined","RenderWrapper","proxy","isArray","config","feedback","isNullOrUnDef","Avatar","PlusOutlined","ChatSender_default","isFunction","Sender","shouldRender","useCallback","Input","CloudUploadOutlined","DeleteOutlined","Switch","Collapse","bodyWidth","inputContainer","disclaimerNotice","previewHeader","previewCloseBtn","closeIcon","rotateIcon","memo","CloseOutlined","index_module_default","chatLayout","spinWrapper","animatedSplitter","hideSplitterBar","sizes","Spin"],"mappings":"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","file":"index.esm.js","sourcesContent":["import {\n FileExcelOutlined,\n FileImageOutlined,\n FilePdfOutlined,\n FilePptOutlined,\n FileTextOutlined,\n FileUnknownOutlined,\n FileWordOutlined,\n FileZipOutlined\n} from '@ant-design/icons'\nimport { buildUrlParams, getWebSocketUrl, isArray, isDate, isDef, isFunction, isMap, isNull, isObject, isRegExp, isSet } from '@zero-library/common'\nimport dayjs from 'dayjs'\nimport React from 'react'\n\nexport function getFileExtension(fileName = '') {\n const ext = fileName.split('.').pop()\n return (ext || '').toLowerCase()\n}\n\nexport function formatFileSize(size?: number) {\n if (!size) return '0 B'\n if (size < 1024) return `${size} B`\n if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`\n if (size < 1024 * 1024 * 1024) return `${(size / 1024 / 1024).toFixed(1)} MB`\n return `${(size / 1024 / 1024 / 1024).toFixed(1)} GB`\n}\n\n// 根据扩展名返回图标\nexport const getFileIcon = (extension: string, fontSize = 24): React.ReactElement => {\n const baseStyle = { fontSize }\n const createIcon = (Icon: React.ComponentType<{ style?: React.CSSProperties }>, color: string) =>\n React.createElement(Icon, { style: { ...baseStyle, color } })\n if (['png', 'jpg', 'jpeg', 'gif', 'bmp', 'webp', 'svg'].includes(extension)) {\n return createIcon(FileImageOutlined, '#22c55e')\n }\n if (['pdf'].includes(extension)) {\n return createIcon(FilePdfOutlined, '#ef4444')\n }\n if (['doc', 'docx'].includes(extension)) {\n return createIcon(FileWordOutlined, '#2563eb')\n }\n if (['xls', 'xlsx', 'csv'].includes(extension)) {\n return createIcon(FileExcelOutlined, '#16a34a')\n }\n if (['ppt', 'pptx'].includes(extension)) {\n return createIcon(FilePptOutlined, '#f59e0b')\n }\n if (['zip', 'rar', '7z', 'tar', 'gz'].includes(extension)) {\n return createIcon(FileZipOutlined, '#8b5cf6')\n }\n if (['txt', 'md', 'log', 'json', 'yaml', 'yml', 'xml', 'ini', 'conf'].includes(extension)) {\n return createIcon(FileTextOutlined, '#64748b')\n }\n return createIcon(FileUnknownOutlined, '#94a3b8')\n}\n\n/**\n * 根据时间戳分类时间,返回相对时间描述\n * @param timestamp - 时间戳(毫秒),可选,默认为当前时间\n * @returns 时间分类字符串\n */\nexport const classifyTime = (timestamp?: number | string): string => {\n const now = dayjs()\n const target = dayjs(timestamp)\n\n if (target.isSame(now, 'day')) {\n return '今天'\n }\n\n const diffInDays = now.diff(target, 'day')\n if (diffInDays < 7) {\n return '最近 7 天'\n } else if (diffInDays < 30) {\n return '最近 30 天'\n } else if (diffInDays < 180) {\n return '最近半年'\n } else {\n return '更早'\n }\n}\n\n/**\n * 将变量数组转换为对象格式\n *\n * @param variables - 变量数组,包含 name, value, type\n * @returns 转换后的对象\n *\n * @remarks\n * - Boolean 类型:只要 value 不为 undefined 或 null 即保留\n * - String/Number 类型:value 不为 undefined, null, '' 时保留\n */\nexport const variablesToObject = (variables: Array<{ name: string; value?: any; type: string }>) => {\n if (!isArray(variables)) return {}\n\n const jsonTypes = ['OBJECT', 'ARRAY', 'ARRAY_STRING', 'ARRAY_NUMBER', 'ARRAY_DECIMAL', 'ARRAY_BOOLEAN', 'ARRAY_OBJECT']\n\n return variables.reduce(\n (acc, cur) => {\n if (cur.type === 'BOOLEAN') {\n if (isDef(cur.value) && !isNull(cur.value)) {\n acc[cur.name] = cur.value\n }\n } else if (jsonTypes.includes(cur.type)) {\n if (isDef(cur.value) && !isNull(cur.value)) {\n if (typeof cur.value === 'string') {\n if (cur.value === '') {\n acc[cur.name] = cur.type === 'OBJECT' ? {} : []\n } else {\n try {\n acc[cur.name] = JSON.parse(cur.value)\n } catch (e) {\n acc[cur.name] = cur.type === 'OBJECT' ? {} : []\n }\n }\n } else {\n acc[cur.name] = cur.value\n }\n }\n } else {\n if (isDef(cur.value) && !isNull(cur.value) && cur.value !== '') {\n acc[cur.name] = cur.value\n }\n }\n return acc\n },\n {} as Record<string, any>\n )\n}\n\n/**\n * 深度比较两个对象是否相等\n *\n * @param a - 第一个对象\n * @param b - 第二个对象\n * @returns 是否相等\n *\n * @example\n * deepEqual({ a: 1 }, { a: 1 }) // true\n * deepEqual([1, 2], [1, 2]) // true\n * deepEqual(new Date(1), new Date(1)) // true\n * deepEqual(new Set([1]), new Set([1])) // true\n *\n * @remarks\n * - 支持 Date、RegExp、Map、Set、Array、Function(仅作引用比较)、Object\n * - 支持循环引用检测\n * - 不处理不可枚举属性、getter/setter 和 Symbol\n */\nexport function deepEqual(a: any, b: any): boolean {\n // 使用 WeakMap 存储已比较过的对象对,处理循环引用\n const visited = new WeakMap()\n\n const isEqual = (x: any, y: any): boolean => {\n // 使用 Object.is 比较基础类型和相同引用\n if (Object.is(x, y)) return true\n\n // 只有当 x 和 y 都是对象时才检查循环引用\n if (typeof x === 'object' && !isNull(x) && typeof y === 'object' && !isNull(y)) {\n // 检查是否已经比较过这对对象(处理循环引用)\n if (visited.has(x)) {\n // 如果之前比较过 x 和 y,则直接返回结果,避免无限递归\n if (visited.get(x).has(y)) return true\n // 如果之前比较过 x 但不是和 y,则继续\n }\n\n // 记录正在比较的对象对\n if (!visited.has(x)) visited.set(x, new WeakSet())\n visited.get(x).add(y)\n\n // 同时也要记录 y->x 的比较,确保对称性\n if (!visited.has(y)) visited.set(y, new WeakSet())\n visited.get(y).add(x)\n }\n\n // === 特殊类型处理 ===\n if (isDate(x) && isDate(y)) return x.getTime() === y.getTime()\n\n if (isRegExp(x) && isRegExp(y)) return x.toString() === y.toString()\n\n if (isMap(x) && isMap(y)) {\n if (x.size !== y.size) return false\n for (const [key, val] of x.entries()) {\n if (!y.has(key)) return false\n if (!isEqual(val, y.get(key))) return false\n }\n return true\n }\n\n if (isSet(x) && isSet(y)) {\n if (x.size !== y.size) return false\n for (const val of x.values()) {\n // 使用 some 查找匹配项,支持深度比较 Set 中的复杂对象\n const hasEqual = Array.from(y.values()).some((bVal) => isEqual(val, bVal))\n if (!hasEqual) return false\n }\n return true\n }\n\n // 数组比较\n if (isArray(x) && isArray(y)) {\n if (x.length !== y.length) return false\n return x.every((item, i) => isEqual(item, y[i]))\n }\n\n // 函数(通过字符串比较)\n // if (isFunction(x) && isFunction(y)) return x.toString() === y.toString()\n\n // 函数比较(仅作引用比较,因为函数的深层比较意义不大且不可靠)\n if (isFunction(x) && isFunction(y)) return x === y\n\n // 普通对象递归比较\n if (isObject(x) && isObject(y)) {\n const keysA = Object.keys(x)\n const keysB = Object.keys(y)\n\n // 先比较键的数量\n if (keysA.length !== keysB.length) return false\n\n // 比较每个键值对\n for (const key of keysA) {\n // 检查 b 是否有这个键\n if (!keysB.includes(key)) return false\n\n // 递归比较值\n if (!isEqual(x[key], y[key])) return false\n }\n return true\n }\n\n return false\n }\n\n return isEqual(a, b)\n}\n\nimport Latex from '@ant-design/x-markdown/plugins/Latex'\n\nexport const singleTildeExtension = {\n name: 'singleTilde',\n level: 'inline' as const,\n start(src: string) {\n return src.match(/(?<!~)~(?!~)/)?.index\n },\n tokenizer(src: string) {\n const match = /^(?<!~)~(?!~)/.exec(src)\n if (match) {\n return {\n type: 'text',\n raw: match[0],\n text: match[0]\n }\n }\n return undefined\n }\n}\n\nexport const getMarkdownConfig = (options?: { breaks?: boolean }) => {\n const latexExtensions = Latex()\n const extensions = Array.isArray(latexExtensions) ? [...latexExtensions, singleTildeExtension] : [latexExtensions, singleTildeExtension]\n\n return {\n extensions: extensions as any,\n breaks: options?.breaks ?? false\n }\n}\n\n/**\n * 构建Chat WebSocket URL\n * 将 baseURL和参数组合成完整的WebSocket连接URL\n *\n * @param baseURL - WebSocket baseURL\n * @param params - 要附加到URL上的参数\n * @returns 完整的WebSocket URL\n */\nexport const getChatSocketUrl = (baseURL: string, params: Record<string, any>) => {\n return buildUrlParams(params, getWebSocketUrl(`${baseURL}/ws`), 'comma')\n}\n","import React, { createContext, useContext } from 'react'\nimport type { ChatStoreType } from '../types'\n\n/**\n * 基于泛型创建专用的聊天上下文\n * 使用 Valtio 进行状态管理,提供 Provider 和 Hook\n */\nconst ChatContext = createContext<ChatStoreType | null>(null)\n\nexport function ChatProvider({ store, children }: { store: ChatStoreType; children?: React.ReactNode }) {\n return React.createElement(ChatContext.Provider, { value: store }, children)\n}\n\nexport function useChatStore() {\n const store = useContext(ChatContext)\n if (!store) {\n throw new Error('useChatStore must be used within ChatProvider')\n }\n return store\n}\n","@keyframes loading-line {\n from {\n background-position: 200% 0;\n }\n to {\n background-position: 0 0;\n }\n}\n.loadingMessage {\n position: relative;\n padding-bottom: 6px;\n}\n.loadingMessage::after {\n content: '';\n position: absolute;\n left: 0;\n bottom: 0;\n height: 2px;\n width: 100%;\n background: linear-gradient(90deg, #ff6b23, #af3cb8, #53b6ff);\n background-size: 200% 100%;\n animation: loading-line 1.2s linear infinite;\n}\n@keyframes spin {\n to {\n transform: rotate(360deg);\n }\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-content {\n padding: 0 !important;\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-card-status-uploading .ant-progress .ant-progress-text {\n display: none;\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-card-status-uploading .ant-progress .ant-progress-circle {\n animation: spin 2s linear infinite;\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-card-status-uploading .ant-attachment-list-card-content {\n gap: 4px;\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-card-status-uploading .ant-attachment-list-card-content .ant-attachment-list-card-desc {\n width: 15px;\n height: 15px;\n border: 2px solid transparent;\n border-color: #1890ff;\n border-radius: 50%;\n animation: spin 1s linear infinite;\n box-sizing: border-box;\n position: relative;\n clip-path: inset(0 0 30% 0);\n}\n.chatAttachments:global > .ant-attachment-list .ant-attachment-list-card-status-uploading .ant-attachment-list-card-content .ant-attachment-list-card-desc .ant-attachment-list-card-ellipsis-prefix {\n display: none;\n}\n.chatSender:global.ant-sender:focus-within {\n box-shadow: none;\n}\n.chatQuoteMsg {\n margin-top: 4px;\n}\n.chatQuoteMsg:global.ant-bubble > .ant-bubble-content {\n min-height: auto;\n background-color: var(--ant-color-fill-tertiary) !important;\n color: var(--ant-color-text-tertiary);\n}\n.chatQuoteMsg .quoteTooltip {\n max-width: 100%;\n border: 1px solid #000;\n}\n.chatQuoteMsg .quoteTooltip .quoteTooltipContainer {\n max-height: 200px;\n overflow-y: auto;\n background-color: #fff;\n color: #000;\n}\n","import { CloudUploadOutlined } from '@ant-design/icons'\nimport { Attachments } from '@ant-design/x-v2'\nimport { Attachment } from '@ant-design/x-v2/es/attachments'\nimport { isNullOrUnDef, isNumber, isObject, useDebounce, useRefState } from '@zero-library/common'\nimport { App } from 'antd'\nimport { RcFile, UploadFile } from 'antd/lib/upload'\nimport { forwardRef, useEffect, useImperativeHandle, useMemo, useRef } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { getFileExtension } from '../core/utils'\nimport { useChatStore } from '../stores/Context'\nimport { FileUploadConfig, InputFile } from '../types'\nimport styles from './styles.module.less'\n/**\n * 附件组件属性接口\n */\nexport interface AttachmentsProps {\n /** 文件上传函数,接收 FormData 并返回上传结果 */\n fileUpload: (formData: FormData, signal?: AbortSignal) => Promise<R<InputFile[]>>\n /** 文件上传配置列表,定义允许的文件类型和大小限制 */\n fileUploadConfig?: FileUploadConfig\n /** 额外的上传参数,会附加到 FormData 中 */\n extraParams?: ObjectType<string | undefined>\n /** 当前文件列表 */\n fileList?: InputFile[]\n /** 文件列表变化回调函数 */\n onChange: (fileList: InputFile[]) => void\n}\n/**\n * 附件文件类型,继承自 Ant Design X 的 Attachment 类型\n */\ntype AttachedFile = Attachment & InputFile & { abortController?: AbortController }\n\n/**\n * 附件上传组件\n * 支持多文件上传、文件类型验证、文件大小限制等功能\n */\nexport default forwardRef(({ fileUpload, fileUploadConfig, fileList = [], onChange, extraParams }: AttachmentsProps, ref) => {\n const { message } = App.useApp()\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n const fileListRef = useRef<InputFile[]>([])\n const [attachedFiles, setAttachedFiles, getAttachedFiles] = useRefState<AttachedFile[]>([])\n // 初始化 fileList 映射为 Attachments 所需格式\n useEffect(() => {\n if (JSON.stringify(fileList) !== JSON.stringify(fileListRef.current)) {\n fileListRef.current = fileList\n const mapped: AttachedFile[] = fileList.map((file) => ({\n ...file,\n uid: file.id,\n url: file.url || file.id,\n status: 'done'\n }))\n setAttachedFiles(mapped)\n }\n }, [fileList])\n useEffect(() => {\n const files = attachedFiles\n .filter((file) => file.status === 'done')\n .map((file) => {\n const f = { ...file }\n delete f.status\n delete f.size\n return f as unknown as InputFile\n })\n fileListRef.current = files\n onChange(files)\n }, [attachedFiles])\n\n const onErrorTip = useDebounce((errorMsg: string) => {\n message.error(errorMsg)\n }, 300)\n\n /** 根据文件类型找到对应的 upload config */\n const findConfig = (file: RcFile): string => {\n return fileUploadConfig?.allowedTypes?.find((type) => type === getFileExtension(file.name)) || ''\n }\n\n const onBeforeUpload = (files: RcFile[]) => {\n // 多规则支持:逐个文件校验\n for (const file of files) {\n const cfg = findConfig(file)\n\n if (!cfg) {\n onErrorTip(`不支持的文件类型:${file.name} (${file.type})`)\n return Promise.reject(false)\n }\n\n // 校验数量\n if (isNumber(fileUploadConfig?.maxCount)) {\n const currentCount = attachedFiles.length\n\n if (currentCount + 1 > fileUploadConfig?.maxCount) {\n onErrorTip(`【${file.name}】所属类型最多只能上传 ${fileUploadConfig?.maxCount} 个文件`)\n return Promise.reject(false)\n }\n }\n }\n }\n const onCustomRequest = async ({ file }: any) => {\n const cfg = findConfig(file)\n\n if (!cfg) {\n onErrorTip(`不支持的文件类型:${file.name}`)\n return\n }\n\n // 校验大小\n if (fileUploadConfig?.maxSize && file.size > fileUploadConfig?.maxSize * 1024 * 1024) {\n onErrorTip(`文件大小不能超过 ${fileUploadConfig?.maxSize} MB`)\n return\n }\n\n const abortController = new AbortController()\n\n setAttachedFiles([\n ...getAttachedFiles(),\n {\n uid: file.uid,\n status: 'uploading',\n percent: 70,\n size: file.size,\n type: file.type,\n name: file.name,\n url: URL.createObjectURL(file),\n abortController\n } as AttachedFile\n ])\n try {\n const formData = new FormData()\n formData.append('file', file)\n if (isObject(extraParams)) {\n Object.keys(extraParams).forEach((key) => {\n if (isNullOrUnDef(extraParams[key])) return\n formData.append(key, extraParams[key])\n })\n }\n // 发送文件到后端\n const { data } = await fileUpload(formData, abortController.signal)\n const uploadedFile = data![0]\n\n // 使用后端返回的 conversationId 和 path 拼接预览 URL\n let previewUrl = uploadedFile.id\n\n if (uploadedFile.conversationId && uploadedFile.path) {\n previewUrl = chatStore.config.services.request.getPreviewUrl(agentState.agentInfo.id, uploadedFile.conversationId, uploadedFile.path)\n }\n\n setAttachedFiles(\n getAttachedFiles().map((f) => {\n if (f.uid === file.uid) {\n return { ...uploadedFile, uid: file.uid, url: previewUrl, status: 'done', size: f.size }\n } else {\n return f\n }\n })\n )\n } catch (error) {\n if (error?.name === 'CanceledError' || error?.message === 'canceled') {\n return\n }\n setAttachedFiles(\n getAttachedFiles().map((f) => {\n if (f.uid === file.uid) {\n return { ...f, status: 'error', description: '上传失败' }\n } else {\n return f\n }\n })\n )\n }\n }\n const onRemove = (file: UploadFile<any>) => {\n // 中断上传请求\n const currentFile = getAttachedFiles().find((f) => f.uid === file.uid)\n if (currentFile?.abortController) {\n currentFile.abortController.abort()\n }\n // 删除文件\n setAttachedFiles(attachedFiles.filter((f) => f.uid !== file.uid))\n\n const libraryId = chatStore.config.params.convMeta?.libraryId\n const filePath = (file as any).path\n if (libraryId && filePath) {\n try {\n } catch (error) {\n console.error('Delete folder failed:', error)\n }\n }\n }\n\n useImperativeHandle(\n ref,\n () => ({\n validateFile: () => {\n const files = getAttachedFiles()\n const uploadingFiles = files.filter((file) => file.status === 'uploading')\n if (uploadingFiles.length > 0) {\n onErrorTip('请等待所有文件上传完成')\n return false\n }\n const errorFiles = files.filter((file) => file.status === 'error')\n if (errorFiles.length > 0) {\n onErrorTip('请检查上传失败的文件')\n return false\n }\n return true\n }\n }),\n []\n )\n\n const acceptStr = useMemo(() => {\n const allTypes = fileUploadConfig?.allowedTypes.map((type) => `.${type}`) || []\n return allTypes.length ? allTypes.join(',') : undefined\n }, [fileUploadConfig])\n\n return (\n <Attachments\n className={styles.chatAttachments}\n accept={acceptStr}\n multiple={true}\n customRequest={onCustomRequest}\n beforeUpload={(file, files) => onBeforeUpload(files)}\n items={attachedFiles}\n onRemove={onRemove}\n overflow=\"wrap\"\n placeholder={(type) =>\n type === 'drop'\n ? { title: '将文件放到这里' }\n : {\n icon: <CloudUploadOutlined />,\n title: '提交文件',\n description: (\n <div>\n <div>单击或拖动文件到此区域进行上传; </div>\n {fileUploadConfig?.allowedTypes && <div>支持扩展名:{fileUploadConfig?.allowedTypes.join(',')}; </div>}\n </div>\n )\n }\n }\n />\n )\n})\n","import { PaperClipOutlined } from '@ant-design/icons'\nimport { Sender, Suggestion } from '@ant-design/x-v2'\nimport { useSyncInput } from '@zero-library/common'\nimport { Badge, Button, ButtonProps, Flex, GetRef } from 'antd'\nimport { forwardRef, useEffect, useImperativeHandle, useRef } from 'react'\nimport { FileUploadConfig, InputFile } from '../types'\nimport ChatSendAttachments, { AttachmentsProps } from './Attachments'\nimport styles from './styles.module.less'\n\n/**\n * ChatSender 组件暴露的方法接口\n */\nexport interface ChatSenderHandle {\n /** 聚焦输入框 */\n focus: (options?: { cursor?: 'start' | 'end' }) => void\n}\n/**\n * 文件上传配置接口\n */\ninterface FileUpload {\n /** 上传时的额外参数 */\n params?: ObjectType<any>\n /** 文件上传配置列表 */\n config: FileUploadConfig\n /** 文件上传请求函数 */\n request: AttachmentsProps['fileUpload']\n}\n\n/**\n * ChatSender 组件属性接口\n */\nexport interface SenderProps {\n /** 输入框占位符 */\n placeholder?: string\n /** 输入框内容 */\n content?: string\n /** 文件列表 */\n fileList?: InputFile[]\n /** 是否打开文件选择头部 */\n headerOpen?: boolean\n /** 是否正在发送消息 */\n loading?: boolean\n /** 内容变化回调 */\n onContentChange: (value: string) => void\n /** 文件列表变化回调 */\n onFileListChange: (files: InputFile[]) => void\n /** 头部打开状态变化回调 */\n onHeaderOpenChange: (open: boolean) => void\n /** 发送消息回调 */\n onSend: () => void\n /** 取消发送回调 */\n onCancel?: () => void\n /** 输入框聚焦回调 */\n onFocus?: () => void\n /** 头部额外内容 */\n extraHeader?: React.ReactNode\n /** 底部额外内容 */\n extraFooter?: React.ReactNode\n /** 底部下方额外内容 */\n extraFooterBelow?: React.ReactNode\n /** 发送按钮属性 */\n sendBtnProps?: ButtonProps\n /** 文件上传配置 */\n fileUpload?: FileUpload\n}\n\nexport default forwardRef<ChatSenderHandle, SenderProps>(\n (\n {\n placeholder,\n content,\n fileList = [],\n headerOpen = false,\n loading = false,\n onContentChange,\n onFileListChange,\n onHeaderOpenChange,\n onSend,\n onCancel,\n onFocus,\n extraHeader,\n extraFooter,\n extraFooterBelow,\n sendBtnProps,\n fileUpload\n },\n ref\n ) => {\n const senderRef = useRef<GetRef<typeof Sender>>(null)\n const { inputValue, setInputValue } = useSyncInput(content || '', onContentChange)\n\n const attachmentsNode = fileUpload?.config?.enabled && (\n <Badge dot={!!fileList?.length && !headerOpen}>\n <Button type=\"text\" icon={<PaperClipOutlined />} onClick={() => onHeaderOpenChange(!headerOpen)} />\n </Badge>\n )\n const attachmentsRef = useRef<any>()\n const senderHeader = (\n <>\n <Sender.Header title=\"选择文件\" open={headerOpen} onOpenChange={onHeaderOpenChange}>\n <ChatSendAttachments\n ref={attachmentsRef}\n fileList={fileList}\n fileUpload={fileUpload.request}\n onChange={onFileListChange}\n fileUploadConfig={fileUpload.config}\n extraParams={fileUpload.params}\n />\n </Sender.Header>\n {extraHeader}\n </>\n )\n const onSubmit = () => {\n if (!attachmentsRef.current?.validateFile || attachmentsRef.current.validateFile()) {\n onSend()\n }\n }\n\n const isFocusedRef = useRef(false)\n\n useEffect(() => {\n if (!content) return\n if (!isFocusedRef.current) {\n senderRef.current?.focus({ cursor: 'end' })\n }\n }, [content])\n\n // 暴露方法给外部组件\n useImperativeHandle(\n ref,\n () => ({\n focus: (options?: { cursor?: 'start' | 'end' }) => {\n senderRef.current?.focus(options)\n }\n }),\n []\n )\n\n return (\n <Suggestion items={[]} onSelect={(itemVal) => setInputValue(`[${itemVal}]:`)}>\n {({}) => (\n <Sender\n className={styles.chatSender}\n ref={senderRef}\n value={inputValue}\n header={senderHeader}\n onSubmit={onSubmit}\n onChange={setInputValue}\n onFocus={() => {\n isFocusedRef.current = true\n onFocus?.()\n }}\n onBlur={() => {\n isFocusedRef.current = false\n }}\n autoSize={{ minRows: 2, maxRows: 6 }}\n suffix={false}\n onCancel={onCancel}\n footer={(_, { components }) => {\n const { SendButton, LoadingButton } = components\n return (\n <Flex vertical>\n <Flex justify=\"space-between\" align=\"center\" gap={12}>\n <Flex className=\"flex-1\" gap={6} align=\"center\">\n {attachmentsNode}\n <>{extraFooter}</>\n </Flex>\n <Flex align=\"center\" style={{ marginLeft: 'auto' }} gap={6}>\n {loading ? <LoadingButton disabled={false} /> : <SendButton {...sendBtnProps} />}\n </Flex>\n </Flex>\n <>{extraFooterBelow}</>\n </Flex>\n )\n }}\n placeholder={placeholder || '有什么我能帮您的吗?'}\n />\n )}\n </Suggestion>\n )\n }\n)\n","import type React from 'react'\n// 关键步骤:项目当前缺少 x-card 完整类型声明,使用本地桥接文件集中兜底,避免业务代码出现类型噪音。\n// @ts-ignore\nimport { registerCatalog as rawRegisterCatalog, XCard as rawXCard } from '@ant-design/x-card'\n\nexport type Catalog = {\n catalogId: string\n components: Record<string, any>\n}\n\nexport const registerCatalog = (catalog: Catalog) => {\n rawRegisterCatalog?.(catalog as any)\n}\n\nexport const XCard = rawXCard as {\n Box: React.ComponentType<{\n commands: any[]\n components?: Record<string, React.ComponentType<any>>\n onAction?: (payload: any) => void\n children?: React.ReactNode\n }>\n Card: React.ComponentType<{ id: string }>\n}\n","import { Card as AntCard, Tag as AntTag, Space, Typography } from 'antd'\nimport React from 'react'\n\nconst { Text: AText } = Typography\n\n/** 根据制品类型生成一个可读的默认标题。 */\nfunction getArtifactFallbackTitle(type: string) {\n const normalizedType = String(type || '').toLowerCase()\n if (normalizedType === 'report') return '未命名报告'\n if (normalizedType === 'chart') return '未命名图表'\n if (normalizedType === 'table') return '未命名表格'\n return '未命名内容'\n}\n\n/** 通用制品兜底卡片,在无法渲染具体内容时至少展示类型和标题。 */\nexport const ArtifactCard: React.FC<{\n type: string\n artifactId: string\n title?: string\n payload?: any\n}> = ({ type, title }) => (\n <AntCard size=\"small\" style={{ borderRadius: 12 }}>\n <Space align=\"center\" wrap>\n <AntTag color=\"blue\">{type}</AntTag>\n <AText strong>{title || getArtifactFallbackTitle(type)}</AText>\n </Space>\n </AntCard>\n)\n","import React from 'react'\n\nfunction toVChartSpec(raw: any): any | null {\n const palette = [\n '#1677ff',\n '#52c41a',\n '#faad14',\n '#f5222d',\n '#722ed1',\n '#13c2c2',\n '#eb2f96',\n '#fa541c',\n '#a0d911',\n '#2f54eb',\n '#9254de',\n '#08979c',\n '#d46b08',\n '#7cb305',\n '#c41d7f',\n '#ad2102',\n '#1d39c4',\n '#389e0d',\n '#d4380d',\n '#531dab'\n ]\n\n const t = String(raw?.type ?? '').toLowerCase()\n const xs = Array.isArray(raw?.x) ? raw.x : null\n const ys = Array.isArray(raw?.y) ? raw.y : null\n if (!xs || !ys) return null\n\n const n = Math.min(xs.length, ys.length)\n if (n <= 0) return null\n\n const axisBottom = {\n orient: 'bottom',\n label: { autoHide: true, autoRotate: true, autoRotateAngle: [0, 45, 90] }\n }\n const axisLeft = { orient: 'left', label: { autoHide: true } }\n\n if (t === 'scatter') {\n const values = Array.from({ length: n }, (_, i) => ({\n _i: i,\n x: typeof xs[i] === 'number' ? xs[i] : Number(xs[i]),\n y: typeof ys[i] === 'number' ? ys[i] : Number(ys[i])\n })).filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y))\n if (values.length === 0) return null\n return {\n type: 'scatter',\n data: [{ id: 'data', values }],\n xField: 'x',\n yField: 'y',\n axes: [axisBottom, axisLeft],\n point: {\n style: {\n size: 4,\n fillOpacity: 0.9,\n fill: (d: any) => palette[(d?._i ?? 0) % palette.length]\n }\n }\n }\n }\n\n if (t === 'pie') {\n const values = Array.from({ length: n }, (_, i) => ({\n _i: i,\n category: String(xs[i]),\n value: typeof ys[i] === 'number' ? ys[i] : Number(ys[i])\n })).filter((p) => Number.isFinite(p.value))\n if (values.length === 0) return null\n return {\n type: 'pie',\n data: [{ id: 'data', values }],\n categoryField: 'category',\n valueField: 'value',\n legends: { visible: false },\n label: { visible: true },\n outerRadius: 0.8,\n pie: {\n style: {\n fill: (d: any) => palette[(d?._i ?? 0) % palette.length],\n stroke: '#fff',\n lineWidth: 1\n }\n }\n }\n }\n\n if (t === 'bar' || t === 'line') {\n const values = Array.from({ length: n }, (_, i) => ({\n _i: i,\n category: String(xs[i]),\n value: typeof ys[i] === 'number' ? ys[i] : Number(ys[i])\n })).filter((p) => Number.isFinite(p.value))\n if (values.length === 0) return null\n return {\n type: t,\n data: [{ id: 'data', values }],\n xField: 'category',\n yField: 'value',\n axes: [axisBottom, axisLeft],\n ...(t === 'line'\n ? {\n point: { visible: true, style: { size: 3, fill: '#1677ff', fillOpacity: 0.9 } },\n line: { style: { lineWidth: 2, stroke: '#1677ff' } }\n }\n : null),\n ...(t === 'bar'\n ? {\n legends: { visible: false },\n bar: {\n style: {\n cornerRadius: 4,\n fill: (d: any) => palette[(d?._i ?? 0) % palette.length]\n }\n }\n }\n : null)\n }\n }\n\n return null\n}\n\nfunction toLegendColor(i: number) {\n const palette = [\n '#1677ff',\n '#52c41a',\n '#faad14',\n '#f5222d',\n '#722ed1',\n '#13c2c2',\n '#eb2f96',\n '#fa541c',\n '#a0d911',\n '#2f54eb',\n '#9254de',\n '#08979c',\n '#d46b08',\n '#7cb305',\n '#c41d7f',\n '#ad2102',\n '#1d39c4',\n '#389e0d',\n '#d4380d',\n '#531dab'\n ]\n return palette[i] ?? palette[i % palette.length]\n}\n\nfunction formatCompactNumber(v: number) {\n const abs = Math.abs(v)\n if (abs >= 10000) return `${Math.round(v)}`\n if (abs >= 1000) return `${Math.round(v)}`\n if (abs >= 10) return `${Math.round(v)}`\n if (Number.isInteger(v)) return String(v)\n return v.toFixed(1)\n}\n\nfunction renderMiniChart(spec: any, opts?: { containerWidth?: number }): React.ReactNode | null {\n const t = String(spec?.type ?? '').toLowerCase()\n if (t !== 'line' && t !== 'bar' && t !== 'pie' && t !== 'scatter') return null\n\n const xs = Array.isArray(spec?.x) ? spec.x : null\n const ys = Array.isArray(spec?.y) ? spec.y : null\n if (!xs || !ys || xs.length === 0 || ys.length === 0) return null\n\n const n = Math.min(xs.length, ys.length)\n const pairs = Array.from({ length: n }, (_, i) => ({\n label: String(xs[i]),\n x: xs[i],\n y: typeof ys[i] === 'number' ? ys[i] : Number(ys[i])\n })).filter((p) => Number.isFinite(p.y))\n if (pairs.length === 0) return null\n if (t === 'line' && pairs.length < 2) return null\n\n const height = 180\n const left = 44\n const right = 18\n const top = 14\n const bottom = 30\n\n const baseWidth = Math.max(520, Math.floor(opts?.containerWidth ?? 0))\n const minBarPx = 22\n const minPointPx = 32\n const neededWidth = left + right + Math.max(pairs.length * (t === 'bar' ? minBarPx : minPointPx), 320)\n const width = Math.max(baseWidth, neededWidth)\n\n const colors = [\n '#1677ff',\n '#52c41a',\n '#faad14',\n '#f5222d',\n '#722ed1',\n '#13c2c2',\n '#eb2f96',\n '#fa541c',\n '#a0d911',\n '#2f54eb',\n '#9254de',\n '#08979c',\n '#d46b08',\n '#7cb305',\n '#c41d7f',\n '#ad2102'\n ]\n\n const formatNumber = (v: number) => {\n if (Number.isInteger(v)) return String(v)\n const abs = Math.abs(v)\n if (abs < 1) return v.toFixed(2)\n return v.toFixed(1)\n }\n\n const textColorForHex = (hex: string) => {\n const m = hex.replace('#', '').trim()\n if (m.length !== 6) return '#fff'\n const r = parseInt(m.slice(0, 2), 16)\n const g = parseInt(m.slice(2, 4), 16)\n const b = parseInt(m.slice(4, 6), 16)\n const luminance = (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255\n return luminance > 0.6 ? '#111' : '#fff'\n }\n\n const colorAt = (i: number) => colors[i] ?? colors[i % colors.length]\n\n if (t === 'pie') {\n const total = pairs.reduce((sum, p) => sum + p.y, 0)\n if (total <= 0) return null\n\n let currentAngle = 0\n const centerX = width / 2 - 80\n const centerY = height / 2\n const radius = 60\n\n return (\n <div style={{ width: '100%', overflowX: 'auto' }}>\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {pairs.map((p, i) => {\n const sliceAngle = (p.y / total) * 2 * Math.PI\n const x1 = centerX + radius * Math.cos(currentAngle)\n const y1 = centerY + radius * Math.sin(currentAngle)\n const x2 = centerX + radius * Math.cos(currentAngle + sliceAngle)\n const y2 = centerY + radius * Math.sin(currentAngle + sliceAngle)\n\n const largeArcFlag = sliceAngle > Math.PI ? 1 : 0\n const pathData = `M ${centerX} ${centerY} L ${x1} ${y1} A ${radius} ${radius} 0 ${largeArcFlag} 1 ${x2} ${y2} Z`\n\n const midAngle = currentAngle + sliceAngle / 2\n const labelRadius = radius * 0.7\n const labelX = centerX + labelRadius * Math.cos(midAngle)\n const labelY = centerY + labelRadius * Math.sin(midAngle)\n const ratio = p.y / total\n const percentText = `${(ratio * 100).toFixed(1)}%`\n const valueText = formatNumber(p.y)\n const showInner = ratio >= 0.08 && sliceAngle >= 0.35\n const fill = colorAt(i)\n\n currentAngle += sliceAngle\n\n return (\n <g key={i}>\n <path d={pathData} fill={fill} stroke=\"#fff\" strokeWidth=\"1\" />\n {showInner ? (\n <>\n <text x={labelX} y={labelY - 2} textAnchor=\"middle\" style={{ fontSize: 11, fill: textColorForHex(fill) }}>\n {valueText}\n </text>\n <text x={labelX} y={labelY + 12} textAnchor=\"middle\" style={{ fontSize: 10, fill: textColorForHex(fill) }}>\n {percentText}\n </text>\n </>\n ) : null}\n <rect x={width - 140} y={20 + i * 20} width={12} height={12} fill={fill} rx={2} />\n <text x={width - 120} y={30 + i * 20} style={{ fontSize: 12, fill: '#666' }}>\n {p.label}: {valueText} ({percentText})\n </text>\n </g>\n )\n })}\n </svg>\n </div>\n )\n }\n\n if (t === 'scatter') {\n const numericPairs = pairs\n .map((p) => ({\n ...p,\n x: typeof p.x === 'number' ? p.x : Number(p.x)\n }))\n .filter((p) => Number.isFinite(p.x) && Number.isFinite(p.y))\n if (numericPairs.length === 0) return null\n\n const rawMinX = Math.min(...numericPairs.map((p) => p.x))\n const rawMaxX = Math.max(...numericPairs.map((p) => p.x))\n const rawMinY = Math.min(...numericPairs.map((p) => p.y))\n const rawMaxY = Math.max(...numericPairs.map((p) => p.y))\n\n const spanX0 = rawMaxX - rawMinX\n const spanY0 = rawMaxY - rawMinY\n const padX = (spanX0 || Math.abs(rawMaxX) || 1) * 0.06\n const padY = (spanY0 || Math.abs(rawMaxY) || 1) * 0.08\n\n const minX = rawMinX >= 0 ? Math.max(0, rawMinX - padX) : rawMinX - padX\n const maxX = rawMaxX <= 0 ? Math.min(0, rawMaxX + padX) : rawMaxX + padX\n const minY = rawMinY >= 0 ? Math.max(0, rawMinY - padY) : rawMinY - padY\n const maxY = rawMaxY <= 0 ? Math.min(0, rawMaxY + padY) : rawMaxY + padY\n\n const spanX = maxX - minX || 1\n const spanY = maxY - minY || 1\n\n const plotW = width - left - right\n const plotH = height - top - bottom\n\n const scaleX = (x: number) => left + ((x - minX) * plotW) / spanX\n const scaleY = (y: number) => top + ((maxY - y) * plotH) / spanY\n\n const ticksX = Array.from({ length: 5 }, (_, i) => minX + (i * spanX) / 4)\n const ticksY = Array.from({ length: 5 }, (_, i) => minY + (i * spanY) / 4)\n\n const x0 = minY < 0 && maxY > 0 ? scaleY(0) : null\n const y0 = minX < 0 && maxX > 0 ? scaleX(0) : null\n\n const formatAxisNumber = (v: number) => {\n const abs = Math.abs(v)\n if (abs >= 1000) return String(Math.round(v))\n if (abs >= 10) return String(Math.round(v))\n return formatNumber(v)\n }\n\n return (\n <div style={{ width: '100%', overflowX: 'auto' }}>\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {ticksY.map((value, idx) => {\n const y = scaleY(value)\n return (\n <g key={`y_${idx}`}>\n <line x1={left} y1={y} x2={width - right} y2={y} stroke={idx === 0 ? '#eee' : '#f0f0f0'} />\n <text x={left - 6} y={y + 4} textAnchor=\"end\" style={{ fontSize: 10, fill: '#999' }}>\n {formatAxisNumber(value)}\n </text>\n </g>\n )\n })}\n {ticksX.map((value, idx) => {\n const x = scaleX(value)\n return (\n <g key={`x_${idx}`}>\n <line x1={x} y1={top} x2={x} y2={height - bottom} stroke={idx === 0 ? '#eee' : '#f0f0f0'} />\n <text x={x} y={height - 8} textAnchor=\"middle\" style={{ fontSize: 10, fill: '#999' }}>\n {formatAxisNumber(value)}\n </text>\n </g>\n )\n })}\n\n <line x1={left} y1={top} x2={left} y2={height - bottom} stroke=\"#eee\" />\n <line x1={left} y1={height - bottom} x2={width - right} y2={height - bottom} stroke=\"#eee\" />\n\n {typeof x0 === 'number' ? <line x1={left} y1={x0} x2={width - right} y2={x0} stroke=\"#e6f4ff\" /> : null}\n {typeof y0 === 'number' ? <line x1={y0} y1={top} x2={y0} y2={height - bottom} stroke=\"#e6f4ff\" /> : null}\n\n {numericPairs.map((p, i) => {\n const x = scaleX(p.x)\n const y = scaleY(p.y)\n return (\n <g key={i}>\n <circle cx={x} cy={y} r=\"3\" fill={colors[0]} opacity=\"0.85\" />\n </g>\n )\n })}\n </svg>\n </div>\n )\n }\n\n const rawMinY = Math.min(...pairs.map((p) => p.y))\n const rawMaxY = Math.max(...pairs.map((p) => p.y))\n const minY = Math.min(0, rawMinY)\n const maxY = Math.max(0, rawMaxY)\n const spanY = maxY - minY || 1\n\n const plotW = width - left - right\n const plotH = height - top - bottom\n\n const scaleX = (i: number) => left + (i * plotW) / Math.max(1, pairs.length - 1)\n const scaleY = (y: number) => top + ((maxY - y) * plotH) / spanY\n\n const ticks = Array.from({ length: 5 }, (_, i) => minY + (i * spanY) / 4)\n const maxLabels = Math.max(2, Math.floor(plotW / 70))\n const labelStep = Math.max(1, Math.ceil(pairs.length / maxLabels))\n\n if (t === 'line') {\n const points = pairs.map((p, i) => `${scaleX(i)},${scaleY(p.y)}`).join(' ')\n return (\n <div style={{ width: '100%', overflowX: 'auto' }}>\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {ticks.map((value, idx) => {\n const y = scaleY(value)\n return (\n <g key={idx}>\n <line x1={left} y1={y} x2={width - right} y2={y} stroke={idx === 0 ? '#eee' : '#f0f0f0'} />\n <text x={left - 6} y={y + 4} textAnchor=\"end\" style={{ fontSize: 10, fill: '#999' }}>\n {formatNumber(value)}\n </text>\n </g>\n )\n })}\n <line x1={left} y1={top} x2={left} y2={height - bottom} stroke=\"#eee\" />\n <polyline fill=\"none\" stroke=\"#1677ff\" strokeWidth=\"2.5\" points={points} />\n {pairs.map((p, i) => {\n const x = scaleX(i)\n const y = scaleY(p.y)\n const showLabel = i % labelStep === 0 || i === pairs.length - 1\n return (\n <g key={i}>\n <circle cx={x} cy={y} r=\"3\" fill=\"#1677ff\" />\n {showLabel ? (\n <text x={x} y={height - 8} textAnchor=\"middle\" style={{ fontSize: 10, fill: '#999' }}>\n {p.label}\n </text>\n ) : null}\n </g>\n )\n })}\n </svg>\n </div>\n )\n }\n\n const barW = plotW / pairs.length\n const y0 = scaleY(0)\n const showValueLabel = barW >= 18\n const xAxisY = height - bottom\n return (\n <div style={{ width: '100%', overflowX: 'auto' }}>\n <svg width={width} height={height} viewBox={`0 0 ${width} ${height}`}>\n {ticks.map((value, idx) => {\n const y = scaleY(value)\n return (\n <g key={idx}>\n <line x1={left} y1={y} x2={width - right} y2={y} stroke={idx === 0 ? '#eee' : '#f0f0f0'} />\n <text x={left - 6} y={y + 4} textAnchor=\"end\" style={{ fontSize: 10, fill: '#999' }}>\n {formatNumber(value)}\n </text>\n </g>\n )\n })}\n <line x1={left} y1={top} x2={left} y2={height - bottom} stroke=\"#eee\" />\n <line x1={left} y1={xAxisY} x2={width - right} y2={xAxisY} stroke=\"#eee\" />\n <line x1={left} y1={y0} x2={width - right} y2={y0} stroke=\"#e6f4ff\" />\n {pairs.map((p, i) => {\n const valueY = scaleY(p.y)\n const barH = Math.abs(valueY - y0)\n const x = left + i * barW + 2\n const cx = left + i * barW + barW / 2\n const y = Math.min(valueY, y0)\n const labelY = p.y >= 0 ? y - 4 : y + barH + 12\n const showLabel = i % labelStep === 0 || i === pairs.length - 1\n return (\n <g key={i}>\n <rect x={x} y={y} width={Math.max(2, barW - 4)} height={barH} fill={colorAt(i)} rx={4} />\n {showValueLabel ? (\n <text x={cx} y={labelY} textAnchor=\"middle\" style={{ fontSize: 10, fill: '#666' }}>\n {formatNumber(p.y)}\n </text>\n ) : null}\n <line x1={cx} y1={xAxisY} x2={cx} y2={xAxisY + 4} stroke=\"#e6e6e6\" />\n {showLabel ? (\n <text x={cx} y={height - 8} textAnchor=\"middle\" style={{ fontSize: 10, fill: '#999' }}>\n {p.label}\n </text>\n ) : null}\n </g>\n )\n })}\n </svg>\n </div>\n )\n}\n\nexport { formatCompactNumber, renderMiniChart, toLegendColor, toVChartSpec }\n","function sanitizeFileName(name: string) {\n return (\n name\n // eslint-disable-next-line no-control-regex\n .replace(/[\\\\/:*?\"<>|\\u0000-\\u001F]/g, '_')\n .replace(/\\s+/g, ' ')\n .trim()\n )\n}\n\nfunction downloadBlob(blob: Blob, fileName: string) {\n const url = URL.createObjectURL(blob)\n const a = document.createElement('a')\n a.href = url\n a.download = sanitizeFileName(fileName) || 'download'\n document.body.appendChild(a)\n a.click()\n a.remove()\n URL.revokeObjectURL(url)\n}\n\nfunction escapeCsvCell(value: unknown) {\n const raw = value === null || value === undefined ? '' : String(value)\n const needsQuote = /[\",\\n\\r]/.test(raw)\n const escaped = raw.replace(/\"/g, '\"\"')\n return needsQuote ? `\"${escaped}\"` : escaped\n}\n\nasync function exportSvgElementAsPng(svgEl: SVGSVGElement, fileName: string) {\n const serializer = new XMLSerializer()\n const svgText = serializer.serializeToString(svgEl)\n const blob = new Blob([svgText], { type: 'image/svg+xml;charset=utf-8' })\n const url = URL.createObjectURL(blob)\n\n const wAttr = svgEl.getAttribute('width')\n const hAttr = svgEl.getAttribute('height')\n const width = wAttr ? Number(wAttr) : svgEl.viewBox.baseVal?.width || 520\n const height = hAttr ? Number(hAttr) : svgEl.viewBox.baseVal?.height || 180\n\n const img = new Image()\n img.crossOrigin = 'anonymous'\n await new Promise<void>((resolve, reject) => {\n img.onload = () => resolve()\n img.onerror = () => reject(new Error('image load failed'))\n img.src = url\n })\n\n const ratio = Math.max(1, Math.min(3, window.devicePixelRatio || 1))\n const canvas = document.createElement('canvas')\n canvas.width = Math.round(width * ratio)\n canvas.height = Math.round(height * ratio)\n const ctx = canvas.getContext('2d')\n if (!ctx) {\n URL.revokeObjectURL(url)\n return\n }\n ctx.scale(ratio, ratio)\n ctx.drawImage(img, 0, 0, width, height)\n URL.revokeObjectURL(url)\n\n const pngBlob: Blob | null = await new Promise((resolve) => {\n canvas.toBlob((b) => resolve(b), 'image/png')\n })\n if (!pngBlob) return\n downloadBlob(pngBlob, fileName)\n}\n\nasync function exportCanvasElementAsPng(canvas: HTMLCanvasElement, fileName: string) {\n const pngBlob: Blob | null = await new Promise((resolve) => {\n canvas.toBlob((b) => resolve(b), 'image/png')\n })\n if (!pngBlob) return\n downloadBlob(pngBlob, fileName)\n}\n\nfunction exportTextFile(text: string, fileName: string, mime = 'text/plain;charset=utf-8') {\n downloadBlob(new Blob([text], { type: mime }), fileName)\n}\n\nfunction exportJsonFile(data: unknown, fileName: string) {\n const json = JSON.stringify(data ?? null, null, 2)\n exportTextFile(json, fileName, 'application/json;charset=utf-8')\n}\n\nexport { downloadBlob, escapeCsvCell, exportCanvasElementAsPng, exportJsonFile, exportSvgElementAsPng, exportTextFile, sanitizeFileName }\n","import { Button as AntButton, Card as AntCard, Space } from 'antd'\nimport React from 'react'\nimport { ArtifactCard } from './ArtifactCard'\nimport { renderMiniChart } from './chart-utils'\nimport { exportCanvasElementAsPng, exportSvgElementAsPng, sanitizeFileName } from './export-utils'\n\n/** 图表制品渲染器,优先使用 VChart,缺少 spec 时回退到通用制品卡片。 */\nexport const ChartViewer: React.FC<{ artifactId: string; title?: string; payload?: any }> = ({ artifactId, title, payload }) => {\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const [containerWidth, setContainerWidth] = React.useState<number>(0)\n const spec = payload?.spec\n const needsContainerWidth = true\n\n /** 迷你图模式下依赖容器宽度,因此在尺寸变化时重新计算。 */\n React.useLayoutEffect(() => {\n if (!needsContainerWidth) return\n const el = containerRef.current\n if (!el) return\n let frame = 0\n const update = () => {\n const nextWidth = el.clientWidth || 0\n setContainerWidth((prev) => (prev === nextWidth ? prev : nextWidth))\n }\n const scheduleUpdate = () => {\n if (frame) window.cancelAnimationFrame(frame)\n frame = window.requestAnimationFrame(update)\n }\n scheduleUpdate()\n const ro = new ResizeObserver(() => scheduleUpdate())\n ro.observe(el)\n return () => {\n ro.disconnect()\n if (frame) window.cancelAnimationFrame(frame)\n }\n }, [needsContainerWidth])\n\n /** 缺少 chart spec 时退回到占位卡片。 */\n if (!spec) {\n return <ArtifactCard type=\"chart\" artifactId={artifactId} title={title} payload={payload} />\n }\n\n const node = renderMiniChart(spec, { containerWidth })\n if (!node) {\n return <ArtifactCard type=\"chart\" artifactId={artifactId} title={title} payload={payload} />\n }\n const exportBase = sanitizeFileName(title || artifactId || 'chart')\n /** 优先导出 SVG 图,再退回 Canvas 导出 PNG。 */\n const exportPng = async () => {\n const svg = containerRef.current?.querySelector('svg')\n if (svg) {\n await exportSvgElementAsPng(svg, `${exportBase}.png`)\n return\n }\n const canvas = containerRef.current?.querySelector('canvas')\n if (canvas) {\n await exportCanvasElementAsPng(canvas, `${exportBase}.png`)\n }\n }\n\n return (\n <AntCard\n size=\"small\"\n style={{ borderRadius: 12 }}\n title={title || '图表'}\n extra={\n <Space size={4}>\n <AntButton size=\"small\" type=\"text\" onClick={exportPng}>\n 导出PNG\n </AntButton>\n </Space>\n }\n >\n <div ref={containerRef}>{node}</div>\n </AntCard>\n )\n}\n","// import { emit } from '@zero-library/common';\n// import { MICRO_DRAWER_NAME } from '@zero-library/common';\nimport { type ComponentProps } from '@ant-design/x-markdown'\nimport { Button } from 'antd'\n\ninterface AgentNavigate {\n emit: string\n name: string\n data: any\n}\n\nimport React, { useEffect, useState } from 'react'\n// 自定义业务组件 - 导航到智能体导航页\nconst AgentNavigateComponent = React.memo((props: ComponentProps) => {\n const [content, setContent] = useState<AgentNavigate | null>(null)\n const { children } = props\n useEffect(() => {\n if (!children) {\n return\n }\n console.log(typeof children, children)\n // 从模型返回的数据中解析spec信息\n if (typeof children === 'string') {\n try {\n setContent(JSON.parse(children))\n } catch (_error) {\n setContent(null)\n }\n } else {\n setContent(children as unknown as AgentNavigate)\n }\n }, [children])\n\n const handleClick = () => {\n if (!content?.emit) return\n // emit(content.emit, { ...content.data, name: MICRO_DRAWER_NAME }, 'nearest');\n }\n\n return (\n <Button onClick={handleClick} style={{ padding: 0 }} type=\"link\">\n {content?.name || '点击此处'}\n </Button>\n )\n})\n\nexport default AgentNavigateComponent\n","import { type ComponentProps } from '@ant-design/x-markdown'\nimport { CodeHighlighter, Mermaid } from '@ant-design/x-v2'\n\nconst CodeHighlight: React.FC<ComponentProps> = (props) => {\n const { className, children } = props\n\n const lang = className?.match(/language-(\\w+)/)?.[1] || ''\n\n if (typeof children !== 'string') return null\n\n if (!lang) {\n return <code>{children}</code>\n }\n\n if (lang === 'mermaid') {\n return <Mermaid>{children}</Mermaid>\n }\n\n return (\n <div\n style={{\n maxHeight: 400,\n overflowY: 'auto',\n overflowX: 'auto',\n borderRadius: 8\n }}\n >\n <div style={{ minWidth: 'max-content' }}>\n <CodeHighlighter lang={lang} style={{ margin: 0 }}>\n {children}\n </CodeHighlighter>\n </div>\n </div>\n )\n}\n\nexport default CodeHighlight\n","import { createTokenManager, emit } from '@zero-library/common'\n\nexport const TOKEN_KEY = 'NS-TOKEN'\n/**\n * 令牌管理器\n * 用于管理用户认证令牌,支持从URL参数或存储中获取、设置和清除令牌\n *\n * 特点:\n * 1. 默认使用localStorage存储\n * 2. 支持从URL参数自动同步令牌\n */\nexport const tokenManager = createTokenManager({\n key: TOKEN_KEY\n})\n\n/**\n * 跳转到登录页面\n * 该函数用于在用户未授权或会话过期时重定向到登录页面\n */\nexport const redirectUrl = () => {\n const path = localStorage.getItem('SIGNPATH')\n emit('jumpLink', { url: `/uc${path || '/sign-in'}` })\n}\n","import React from 'react'\nimport { useSnapshot } from 'valtio'\nimport { tokenManager } from '../../core/session'\nimport { useChatStore } from '../../stores/Context'\n\nexport const PreviewLinkComponent = (props: any) => {\n const chatStore = useChatStore()\n const configState = useSnapshot(chatStore.config)\n return (\n <a\n {...props}\n onClick={(e: React.MouseEvent<HTMLAnchorElement>) => {\n if (props.onClick) {\n props.onClick(e)\n }\n if (!e.defaultPrevented && e.currentTarget.href) {\n e.preventDefault()\n if (props.href && String(props.href).startsWith('/luya') && configState.layout.preview) {\n let fileName = 'link'\n let path = e.currentTarget.href\n const url = new URL(path, window.location.origin)\n const searchParams = new URLSearchParams(url.search)\n if (searchParams.has('path')) {\n path = searchParams.get('path') as string\n }\n\n if (path && path.includes('/')) {\n const segments = path.split('/')\n const lastSegment = segments[segments.length - 1]\n if (lastSegment) {\n try {\n fileName = decodeURIComponent(lastSegment)\n } catch (e) {\n fileName = lastSegment\n }\n }\n } else if (typeof props.children === 'string') {\n fileName = props.children\n } else if (Array.isArray(props.children) && typeof props.children[0] === 'string') {\n fileName = String(props.children[0])\n }\n chatStore.setPreview({ path, fileName })\n } else if (props.href && !String(props.href).startsWith('/luya')) {\n window.open(props.href || e.currentTarget.href, '_blank')\n } else if (props.href && String(props.href).startsWith('/luya') && !configState.layout.preview) {\n const urlObj = new URL(props.href, window.location.origin)\n urlObj.searchParams.set('NS-TOKEN', tokenManager.get() || '')\n window.open(urlObj.toString(), '_blank')\n }\n }\n }}\n />\n )\n}\n",".iconContainer {\n width: 20px;\n height: 20px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--ant-border-radius-sm);\n overflow: hidden;\n flex-shrink: 0;\n gap: 20;\n}\n.toolName {\n font-size: 12px;\n color: var(--ant-color-text-secondary);\n flex: 1;\n line-height: 22px;\n}\n.duration {\n font-size: 12px;\n color: var(--ant-color-text-tertiary);\n flex-shrink: 0;\n}\n.statusIcon {\n font-size: 12px;\n display: flex;\n align-items: center;\n margin-left: 20px;\n}\n.sectionLabel {\n font-size: 12px;\n color: var(--ant-color-text-tertiary);\n margin-bottom: 4px;\n display: block;\n}\n.markdownContainer {\n max-width: 100%;\n overflow-x: auto;\n font-size: 12px;\n opacity: 0.85;\n}\n.sectionBlock {\n display: block;\n}\n.todoList {\n background-color: var(--ant-color-fill-alter);\n border-radius: var(--ant-border-radius);\n border: 1px solid var(--ant-color-border-secondary);\n margin-top: 4px;\n}\n.todoItem {\n padding: 8px 12px;\n border-bottom: 1px solid var(--ant-color-border-secondary);\n display: flex;\n align-items: flex-start;\n gap: 8px;\n}\n.todoItem:last-child {\n border-bottom: none;\n}\n.statusIconWrapper {\n margin-top: 2px;\n}\n.todoContent {\n flex: 1;\n min-width: 0;\n}\n.todoText {\n font-size: 13px;\n color: var(--ant-color-text);\n}\n.todoText.completed {\n color: var(--ant-color-text-tertiary);\n text-decoration: line-through;\n}\n.emptyText {\n font-size: 12px;\n}\n","import XMarkdown from '@ant-design/x-markdown'\nimport { Typography } from 'antd'\nimport React from 'react'\nimport { getMarkdownConfig } from '../../../core/utils'\nimport CodeHighlightComponent from '../code-highlight'\nimport styles from './index.module.less'\n\nexport interface ToolRenderProps {\n args?: any\n result?: any\n argsContent?: { text: string; isJson: boolean; parsed: any }\n resultContent?: { text: string; isJson: boolean; parsed: any } | null\n errorMessage?: string\n item: any\n}\n\nconst DefaultToolRender: React.FC<ToolRenderProps> = ({ argsContent, resultContent, errorMessage, item }) => {\n return (\n <>\n {(item.content || item.arguments) && argsContent && (\n <div className={styles.sectionBlock}>\n <Typography.Text className={styles.sectionLabel}>输入参数</Typography.Text>\n <div className={styles.markdownContainer}>\n <XMarkdown\n className=\"xMarkdownStyle\"\n components={{ code: CodeHighlightComponent }}\n config={getMarkdownConfig()}\n content={argsContent.isJson ? `\\`\\`\\`json\\n${argsContent.text}\\n\\`\\`\\`` : argsContent.text}\n />\n </div>\n </div>\n )}\n\n {item.result && resultContent && (\n <div className={styles.sectionBlock}>\n <Typography.Text className={styles.sectionLabel}>返回结果</Typography.Text>\n <div className={styles.markdownContainer}>\n <XMarkdown\n className=\"xMarkdownStyle\"\n components={{ code: CodeHighlightComponent }}\n config={getMarkdownConfig()}\n content={resultContent.isJson ? `\\`\\`\\`json\\n${resultContent.text}\\n\\`\\`\\`` : resultContent.text}\n />\n </div>\n </div>\n )}\n\n {errorMessage && (\n <div className={styles.sectionBlock}>\n <Typography.Text className={styles.sectionLabel}>错误信息</Typography.Text>\n <div className={styles.markdownContainer}>\n <XMarkdown\n className=\"xMarkdownStyle\"\n components={{ code: CodeHighlightComponent }}\n config={getMarkdownConfig()}\n content={`\\`\\`\\`\\n${errorMessage}\\n\\`\\`\\``}\n />\n </div>\n </div>\n )}\n </>\n )\n}\n\nexport default DefaultToolRender\n","import { CheckCircleOutlined, ClockCircleOutlined } from '@ant-design/icons'\nimport { List, Typography, theme } from 'antd'\nimport React from 'react'\nimport { ToolRenderProps } from './default-render'\nimport styles from './index.module.less'\n\nexport interface TodoItem {\n id: string\n title?: string\n content?: string\n status: 'pending' | 'in_progress' | 'completed'\n}\n\nconst TodoWriteRender: React.FC<ToolRenderProps> = ({ args, result }) => {\n const { token } = theme.useToken()\n\n const todos: TodoItem[] = Array.isArray(result) ? result : result?.todos || (Array.isArray(args) ? args : args?.todos) || []\n\n const getStatusIcon = (status: string) => {\n switch (status) {\n case 'completed':\n return <CheckCircleOutlined style={{ color: token.colorSuccess }} />\n case 'in_progress':\n return <ClockCircleOutlined style={{ color: token.colorPrimary }} />\n case 'pending':\n default:\n return <ClockCircleOutlined style={{ color: token.colorTextTertiary }} />\n }\n }\n\n if (!todos || todos.length === 0) {\n return (\n <Typography.Text type=\"secondary\" className={styles.emptyText}>\n 暂无任务\n </Typography.Text>\n )\n }\n\n return (\n <List\n size=\"small\"\n dataSource={todos}\n renderItem={(item) => (\n <List.Item className={styles.todoItem}>\n <div className={styles.statusIconWrapper}>{getStatusIcon(item.status)}</div>\n <div className={styles.todoContent}>\n <Typography.Text className={`${styles.todoText} ${item.status === 'completed' ? styles.completed : ''}`}>\n {item.title || item.content}\n </Typography.Text>\n </div>\n </List.Item>\n )}\n className={styles.todoList}\n />\n )\n}\n\nexport default TodoWriteRender\n","import { LoadingOutlined, ToolOutlined } from '@ant-design/icons'\nimport { Collapse, Flex, theme, Typography } from 'antd'\nimport React, { useMemo } from 'react'\nimport { ToolCallEvent } from '../../../stores/types'\nimport DefaultToolRender, { ToolRenderProps } from './default-render'\nimport styles from './index.module.less'\nimport TodoWriteRender from './todo-write-render'\n\ninterface ExtendedToolCallEvent extends ToolCallEvent {\n result?: any\n arguments?: any\n errorMessage?: string\n duration?: number\n summary?: string\n}\n\ninterface ToolCallItemProps {\n item: ExtendedToolCallEvent\n}\n\nconst toolRenders: Record<\n string,\n {\n component: React.FC<ToolRenderProps>\n defaultExpanded?: boolean | ((args: any, result: any) => boolean)\n alwaysShowContent?: boolean | ((args: any, result: any) => boolean)\n hideStatus?: boolean\n disableExpandOnError?: boolean\n }\n> = {\n todo_write: {\n component: TodoWriteRender,\n defaultExpanded: false,\n alwaysShowContent: (args, result) => {\n const todos = Array.isArray(result) ? result : result?.todos || (Array.isArray(args) ? args : args?.todos) || []\n return todos && todos.length > 0\n },\n hideStatus: true,\n disableExpandOnError: true\n }\n}\n\nconst getToolRenderConfig = (toolName?: string) => {\n if (toolName && toolRenders[toolName]) {\n return toolRenders[toolName]\n }\n return {\n component: DefaultToolRender,\n defaultExpanded: false,\n alwaysShowContent: false\n }\n}\n\nconst formatContent = (content?: any) => {\n try {\n if (!content) return { text: '', isJson: false, parsed: null }\n if (typeof content === 'object') {\n return { text: JSON.stringify(content, null, 2), isJson: true, parsed: content }\n }\n const parsed = JSON.parse(content)\n if (typeof parsed === 'object' && parsed !== null) {\n return { text: JSON.stringify(parsed, null, 2), isJson: true, parsed }\n }\n return { text: content, isJson: false, parsed: null }\n } catch {\n return { text: typeof content === 'string' ? content : '', isJson: false, parsed: null }\n }\n}\n\nconst ToolCallItem: React.FC<ToolCallItemProps> = ({ item }) => {\n const { token } = theme.useToken()\n const renderConfig = getToolRenderConfig(item.toolName)\n const CustomRender = renderConfig.component\n\n const status = useMemo(() => {\n if (item.status) return item.status\n if (item.errorMessage) return 'error'\n if (item.result) return 'success'\n return 'running'\n }, [item.status, item.errorMessage, item.result])\n\n const argsContent = useMemo(() => formatContent(item.arguments || item.content), [item.arguments, item.content])\n const resultContent = useMemo(() => (item.result ? formatContent(item.result) : null), [item.result])\n\n const hasContent = useMemo(() => {\n if (renderConfig.disableExpandOnError && status === 'error') return false\n\n let alwaysShow = false\n if (typeof renderConfig.alwaysShowContent === 'function') {\n alwaysShow = renderConfig.alwaysShowContent(argsContent.parsed, resultContent?.parsed)\n } else if (renderConfig.alwaysShowContent) {\n alwaysShow = renderConfig.alwaysShowContent\n }\n\n if (alwaysShow) return true\n\n return Boolean(item.errorMessage)\n }, [renderConfig.disableExpandOnError, renderConfig.alwaysShowContent, item.errorMessage, status, argsContent.parsed, resultContent?.parsed])\n\n const isDefaultExpanded = useMemo(() => {\n if (typeof renderConfig.defaultExpanded === 'function') {\n return renderConfig.defaultExpanded(argsContent.parsed, resultContent?.parsed)\n }\n return renderConfig.defaultExpanded\n }, [renderConfig.defaultExpanded, argsContent.parsed, resultContent?.parsed])\n\n const statusConfig = {\n running: {\n icon: <LoadingOutlined />,\n color: token.colorPrimary\n },\n success: {\n icon: null,\n color: token.colorSuccess\n },\n error: {\n icon: null,\n color: token.colorSuccess\n },\n pending: {\n icon: <LoadingOutlined />,\n color: token.colorTextSecondary\n }\n }[status] || {\n icon: <LoadingOutlined />,\n color: token.colorPrimary\n }\n\n const renderIcon = () => {\n if (!item.toolIcon) {\n return <ToolOutlined style={{ fontSize: 14, color: token.colorTextSecondary }} />\n }\n\n const isUrl = /^(http|\\/)/.test(item.toolIcon)\n\n if (isUrl) {\n return <img src={item.toolIcon} alt=\"tool-icon\" style={{ width: '100%', height: '100%', objectFit: 'contain' }} />\n }\n\n return <span style={{ fontSize: 14, lineHeight: 1 }}>{item.toolIcon}</span>\n }\n\n return (\n <Collapse\n style={{ width: '70%' }}\n collapsible={hasContent ? undefined : 'disabled'}\n defaultActiveKey={isDefaultExpanded && hasContent ? [item.toolCallId || 'fallback-key'] : undefined}\n expandIconPlacement=\"end\"\n styles={{\n header: {\n padding: '6px 10px'\n }\n }}\n items={[\n {\n key: item.toolCallId || 'fallback-key',\n showArrow: hasContent,\n label: (\n <Flex align=\"center\" gap={8} style={{ flex: 1, minWidth: 0 }}>\n <div className={styles.iconContainer}>{renderIcon()}</div>\n <span className={styles.toolName}>{item.title || item.toolName || 'Unknown Tool'}</span>\n {(status === 'running' || status === 'pending') && (\n <div className={styles.statusIcon} style={{ color: statusConfig.color }}>\n {statusConfig.icon}\n </div>\n )}\n {item.duration && <Typography.Text className={styles.duration}>{item.duration}ms</Typography.Text>}\n </Flex>\n ),\n children: (\n <CustomRender\n item={item}\n args={argsContent.parsed}\n result={resultContent?.parsed}\n argsContent={argsContent}\n resultContent={resultContent}\n errorMessage={item.errorMessage}\n />\n )\n }\n ]}\n />\n )\n}\n\nexport default ToolCallItem\n","import XMarkdown from '@ant-design/x-markdown'\nimport '@ant-design/x-markdown/themes/light.css'\nimport { Button as AntButton, Card as AntCard, Space } from 'antd'\nimport classNames from 'classnames'\nimport React from 'react'\nimport { AgentNavigateComponent, CodeHighlightComponent, PreviewLinkComponent } from '../../../src/components/custom-components'\nimport { getMarkdownConfig } from '../../../src/core/utils'\nimport { ArtifactCard } from './ArtifactCard'\nimport { exportTextFile, sanitizeFileName } from './export-utils'\n\n/** 把混合 Markdown 中的完整 HTML 片段包装成代码块,避免直接参与富文本渲染。 */\nfunction formatMixedContent(content: string) {\n return content.replace(/<!DOCTYPE html>[\\s\\S]*?<\\/html>/gi, (match) => `\\`\\`\\`html\\n${match}\\n\\`\\`\\``)\n}\n\n/** 报告制品渲染器,负责 Markdown 展示和导出。 */\nexport const ReportViewer: React.FC<{ artifactId: string; title?: string; payload?: any }> = ({ artifactId, title, payload }) => {\n const markdown = typeof payload?.markdown === 'string' ? payload.markdown : null\n /** 没有 markdown 正文时回退到通用制品卡片。 */\n if (!markdown) {\n return <ArtifactCard type=\"report\" artifactId={artifactId} title={title} payload={payload} />\n }\n\n const exportBase = sanitizeFileName(title || artifactId || 'report')\n /** 导出原始 Markdown,方便用户二次编辑。 */\n const exportMd = () => {\n exportTextFile(markdown, `${exportBase}.md`, 'text/markdown;charset=utf-8')\n }\n\n return (\n <AntCard\n size=\"small\"\n style={{ borderRadius: 12 }}\n title={title || '报告'}\n extra={\n <Space size={4}>\n <AntButton size=\"small\" type=\"text\" onClick={exportMd}>\n 导出MD\n </AntButton>\n </Space>\n }\n >\n <div style={{ lineHeight: 1.75 }}>\n <XMarkdown\n openLinksInNewTab\n className={classNames('x-markdown-light', 'xMarkdownStyle')}\n components={{\n code: CodeHighlightComponent,\n agentnavigate: AgentNavigateComponent,\n a: PreviewLinkComponent\n }}\n config={getMarkdownConfig()}\n content={formatMixedContent(markdown)}\n />\n </div>\n </AntCard>\n )\n}\n","import { Button as AntButton, Card as AntCard, Table as AntTable, Space } from 'antd'\nimport React from 'react'\nimport { ArtifactCard } from './ArtifactCard'\nimport { escapeCsvCell, exportJsonFile, exportTextFile, sanitizeFileName } from './export-utils'\n\n/** 表格制品渲染器,支持预览和导出 CSV/JSON。 */\nexport const TableViewer: React.FC<{ artifactId: string; title?: string; payload?: any }> = ({ artifactId, title, payload }) => {\n const columns = Array.isArray(payload?.columns) ? payload.columns : null\n const rows = Array.isArray(payload?.rows) ? payload.rows : null\n\n /** 当表格数据不完整时,回退到通用制品卡片。 */\n if (!columns || !rows) {\n return <ArtifactCard type=\"table\" artifactId={artifactId} title={title} payload={payload} />\n }\n\n /** 统一规范列定义,避免 title/dataIndex 缺失导致表格不可用。 */\n const safeColumns = columns\n .map((c: any) => ({\n title: String(c?.title ?? c?.dataIndex ?? ''),\n dataIndex: String(c?.dataIndex ?? '')\n }))\n .filter((c: any) => c.dataIndex)\n\n /** 为 Ant Table 构造稳定的 dataSource,并补齐 key。 */\n const dataSource = rows.map((r: any, i: number) => ({\n key: String(r?.id ?? i),\n ...(r && typeof r === 'object' ? r : {})\n }))\n\n const exportBase = sanitizeFileName(title || artifactId || 'table')\n /** 导出为 CSV,便于直接给 Excel 等工具打开。 */\n const exportCsv = () => {\n const header = safeColumns.map((c: any) => escapeCsvCell(c.title)).join(',')\n const body = rows.map((row: any) => safeColumns.map((c: any) => escapeCsvCell(row?.[c.dataIndex])).join(',')).join('\\n')\n exportTextFile(`\\ufeff${header}\\n${body}\\n`, `${exportBase}.csv`, 'text/csv;charset=utf-8')\n }\n /** 导出为 JSON,保留完整结构化数据。 */\n const exportJson = () => {\n exportJsonFile({ columns: safeColumns, rows }, `${exportBase}.json`)\n }\n\n return (\n <AntCard\n size=\"small\"\n style={{ borderRadius: 12 }}\n title={title || '表格'}\n extra={\n <Space size={4}>\n <AntButton size=\"small\" type=\"text\" onClick={exportCsv}>\n 导出CSV\n </AntButton>\n <AntButton size=\"small\" type=\"text\" onClick={exportJson}>\n 导出JSON\n </AntButton>\n </Space>\n }\n >\n <AntTable size=\"small\" pagination={false} columns={safeColumns} dataSource={dataSource} scroll={{ x: true }} />\n </AntCard>\n )\n}\n","import {\n Button as AntButton,\n Divider as AntDivider,\n Progress as AntProgress,\n Select as AntSelect,\n Switch as AntSwitch,\n Tag as AntTag,\n Input,\n Space,\n Typography\n} from 'antd'\nimport React from 'react'\nimport { ArtifactCard } from './artifacts/ArtifactCard'\nimport { ChartViewer } from './artifacts/ChartViewer'\nimport { ReportViewer } from './artifacts/ReportViewer'\nimport { TableViewer } from './artifacts/TableViewer'\n\nconst { Text: AText, Title } = Typography\n\ntype PathRef = { path: string }\ntype SelectValue = string | number | boolean\n\nconst FIELD_LABEL_STYLE: React.CSSProperties = { marginBottom: 6, fontSize: 13, fontWeight: 500, color: '#555' }\nconst INPUT_RADIUS_STYLE: React.CSSProperties = { borderRadius: 8 }\n\nconst formPathValueStore = new Map<string, unknown>()\n\n/** 规范 model path,保证缓存键格式统一。 */\nfunction normalizeModelPath(modelPath: string): string {\n const normalized = typeof modelPath === 'string' ? modelPath.trim() : ''\n if (!normalized.startsWith('/')) return ''\n return normalized.replace(/\\/{2,}/g, '/').replace(/\\/$/, '') || '/'\n}\n\n/** 计算某个 model path 的字段前缀,用于批量匹配子字段。 */\nfunction modelPathPrefix(modelPath: string): string {\n const normalized = normalizeModelPath(modelPath)\n if (!normalized || normalized === '/') return normalized\n return `${normalized}/`\n}\n\n/** 读取指定 model 下缓存的所有一级字段值。 */\nexport function readModelValues(modelPath: string): Record<string, unknown> {\n const normalized = normalizeModelPath(modelPath)\n if (!normalized || normalized === '/') return {}\n const prefix = modelPathPrefix(normalized)\n const values: Record<string, unknown> = {}\n for (const [path, value] of formPathValueStore.entries()) {\n if (typeof path !== 'string') continue\n if (!path.startsWith(prefix)) continue\n const rest = path.slice(prefix.length)\n if (!rest || rest.includes('/')) continue\n values[rest] = value\n }\n return values\n}\n\n/** 批量写入指定 model 的字段值到本地缓存。 */\nexport function writeModelValues(modelPath: string, values: Record<string, unknown>) {\n const normalized = normalizeModelPath(modelPath)\n if (!normalized || normalized === '/' || !values || typeof values !== 'object' || Array.isArray(values)) return\n Object.entries(values).forEach(([key, value]) => {\n if (typeof key !== 'string' || !key.trim() || key.includes('/')) return\n const fieldPath = `${normalized}/${key}`.replace(/\\/{2,}/g, '/')\n formPathValueStore.set(fieldPath, value === undefined ? null : value)\n })\n}\n\n/** 清空指定 model 及其子路径下的缓存值。 */\nexport function clearModelValues(modelPath: string) {\n const normalized = normalizeModelPath(modelPath)\n if (!normalized) return\n if (normalized === '/') {\n formPathValueStore.clear()\n return\n }\n const prefix = modelPathPrefix(normalized)\n for (const path of Array.from(formPathValueStore.keys())) {\n if (path === normalized || path.startsWith(prefix)) {\n formPathValueStore.delete(path)\n }\n }\n}\n\n/** 清空整个 A2UI 运行时维护的表单缓存。 */\nexport function clearAllModelValues() {\n formPathValueStore.clear()\n}\n\n/** 判断值是否是 `{ path }` 形式的绑定引用。 */\nfunction isPathRef(v: unknown): v is PathRef {\n return !!v && typeof v === 'object' && typeof (v as Record<string, unknown>).path === 'string'\n}\n\n/** 判断值是否是以 `/` 开头的路径字符串。 */\nfunction isPathString(v: unknown): v is string {\n return typeof v === 'string' && v.startsWith('/')\n}\n\n/** 统一从值里抽取绑定路径。 */\nfunction pathFromValue(v: unknown): string | null {\n if (isPathRef(v)) return v.path\n if (isPathString(v)) return v\n return null\n}\n\n/** 解析 `$bind:/path` 形式的 token。 */\nfunction decodeBindPathToken(token: unknown): string | null {\n if (typeof token !== 'string') return null\n if (!token.startsWith('$bind:')) return null\n const path = token.slice('$bind:'.length)\n return path.startsWith('/') ? path : null\n}\n\n/** 把某个绑定路径的新值写回缓存。 */\nfunction rememberPathValue(path: string | null, value: unknown) {\n if (!path) return\n formPathValueStore.set(path, value === undefined ? null : value)\n}\n\n/** 从缓存中读取某个绑定路径当前保存的值。 */\nfunction readPathValue(path: string | null): unknown {\n if (!path) return undefined\n return formPathValueStore.get(path)\n}\n\n/** 如果值本身是绑定路径,则优先读取缓存后的真实值。 */\nfunction resolveMaybePath(v: unknown): unknown {\n const path = pathFromValue(v)\n if (!path) return v\n const cached = readPathValue(path)\n return cached === undefined ? v : cached\n}\n\n/** 把 action context 中的绑定引用展开成可直接提交的真实 values。 */\nexport function normalizeActionContext(context: Record<string, unknown>): Record<string, unknown> {\n const next: Record<string, unknown> = { ...context }\n const refs = next.refs && typeof next.refs === 'object' && !Array.isArray(next.refs) ? (next.refs as Record<string, unknown>) : null\n const values = next.values && typeof next.values === 'object' && !Array.isArray(next.values) ? { ...(next.values as Record<string, unknown>) } : {}\n\n const candidateKeys = refs ? Object.keys(refs) : Object.keys(next).filter((k) => k !== 'form_name' && k !== 'refs' && k !== 'values')\n\n for (const key of candidateKeys) {\n const source = refs ? (refs[key] ?? next[key]) : next[key]\n const resolved = resolveMaybePath(source)\n if (!pathFromValue(resolved)) {\n values[key] = resolved\n next[key] = resolved\n }\n }\n\n if (next.form_name || refs || Object.keys(values).length > 0) {\n next.values = values\n }\n return next\n}\n\n/** 安全读取字符串值。 */\nfunction readStringValue(value: unknown): string | undefined {\n return typeof value === 'string' ? value : undefined\n}\n\n/** 安全读取布尔值。 */\nfunction readBooleanValue(value: unknown): boolean | undefined {\n return typeof value === 'boolean' ? value : undefined\n}\n\n/** 安全读取 Select 支持的原始值。 */\nfunction readSelectValue(value: unknown): SelectValue | undefined {\n return typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean' ? value : undefined\n}\n\n/** 文本类字段在绑定模式下优先保留用户已输入的非空值。 */\nfunction preferCachedStringValue(externalValue: string, cachedValue: string | undefined, valuePath: string | null) {\n return !!valuePath && externalValue === '' && typeof cachedValue === 'string' && cachedValue !== ''\n}\n\ntype BoundFieldStateOptions<T> = {\n value: unknown\n bindPathToken?: string\n defaultValue: T\n readExternalValue: (value: unknown) => T | undefined\n readCachedValue: (value: unknown) => T | undefined\n preferCachedValueWhenBound?: boolean\n preferCachedOverExternal?: (externalValue: T, cachedValue: T | undefined, valuePath: string | null) => boolean\n}\n\n/** 管理字段的外部值、本地值和缓存值三者同步关系。 */\nfunction useBoundFieldState<T>({\n value,\n bindPathToken,\n defaultValue,\n readExternalValue,\n readCachedValue,\n preferCachedValueWhenBound,\n preferCachedOverExternal\n}: BoundFieldStateOptions<T>) {\n const valuePath = decodeBindPathToken(bindPathToken) ?? pathFromValue(value)\n const cachedValue = readCachedValue(readPathValue(valuePath))\n const externalValue = readExternalValue(value)\n const dirtyRef = React.useRef(false)\n\n const [localValue, setLocalValue] = React.useState<T>(() => {\n if (preferCachedValueWhenBound && valuePath && cachedValue !== undefined) {\n return cachedValue\n }\n if (externalValue !== undefined) {\n if (preferCachedOverExternal?.(externalValue, cachedValue, valuePath) && cachedValue !== undefined) {\n return cachedValue\n }\n return externalValue\n }\n if (cachedValue !== undefined) return cachedValue\n return defaultValue\n })\n\n React.useEffect(() => {\n dirtyRef.current = false\n }, [valuePath])\n\n React.useEffect(() => {\n if (preferCachedValueWhenBound && valuePath && cachedValue !== undefined) {\n setLocalValue(cachedValue)\n return\n }\n if (valuePath && cachedValue !== undefined && dirtyRef.current) {\n setLocalValue(cachedValue)\n return\n }\n if (externalValue !== undefined) {\n if (preferCachedOverExternal?.(externalValue, cachedValue, valuePath) && cachedValue !== undefined) {\n setLocalValue(cachedValue)\n return\n }\n if (!dirtyRef.current) {\n setLocalValue(externalValue)\n rememberPathValue(valuePath, externalValue)\n }\n return\n }\n if (cachedValue !== undefined) {\n setLocalValue(cachedValue)\n }\n }, [cachedValue, externalValue, preferCachedOverExternal, valuePath])\n\n React.useEffect(() => {\n rememberPathValue(valuePath, localValue)\n }, [valuePath, localValue])\n\n const updateLocalValue = React.useCallback(\n (nextValue: T) => {\n dirtyRef.current = true\n setLocalValue(nextValue)\n rememberPathValue(valuePath, nextValue)\n },\n [valuePath]\n )\n\n return { localValue, updateLocalValue, valuePath }\n}\n\ntype BoundFieldProps<T> = {\n id?: string\n label: string\n value?: unknown\n bind_path_token?: string\n onChange?: (value: T) => void\n onDataChange?: (path: string, value: unknown) => void\n}\n\n/** 统一渲染大多数表单项的标题和宽度。 */\nconst FieldBlock: React.FC<{ label: string; children: React.ReactNode }> = ({ label, children }) => (\n <div style={{ width: '100%' }}>\n <div style={FIELD_LABEL_STYLE}>{label}</div>\n {children}\n </div>\n)\n\n/** 把字段变更同时同步到本地缓存、绑定路径和外部监听。 */\nfunction emitFieldChange<T>(\n nextValue: T,\n valuePath: string | null,\n updateLocalValue: (value: T) => void,\n onDataChange?: (path: string, value: unknown) => void,\n onChange?: (value: T) => void\n) {\n updateLocalValue(nextValue)\n if (valuePath) onDataChange?.(valuePath, nextValue)\n onChange?.(nextValue)\n}\n\n/** 统一给输入类控件分配稳定 id。 */\nfunction useControlId(id?: string) {\n const autoId = React.useId()\n return id ?? autoId\n}\n\n/** 从按钮 action 中抽取标准事件。 */\nfunction readActionEvent(action: any) {\n const name = typeof action?.event?.name === 'string' ? action.event.name : ''\n const context = action?.event?.context ?? {}\n return { name, context }\n}\n\n/* ─── 布局 ─── */\n/** 纵向布局容器,适合表单和卡片内容区。 */\nexport const Column: React.FC<{ children?: React.ReactNode }> = ({ children }) => (\n <Space orientation=\"vertical\" style={{ width: '100%' }} size={14}>\n {children}\n </Space>\n)\n\n/** 横向布局容器,支持 gap 和自动换行。 */\nexport const Row: React.FC<{ children?: React.ReactNode; gap?: number }> = ({ children, gap = 8 }) => (\n <Space orientation=\"horizontal\" size={gap} wrap>\n {children}\n </Space>\n)\n\n/* ─── 文字 ─── */\n/** 文本渲染组件,统一处理标题、说明和普通文本。 */\nexport const Text: React.FC<{ text: string; variant?: string }> = ({ text, variant }) => {\n if (variant === 'h2')\n return (\n <Title level={4} style={{ margin: 0 }}>\n {text}\n </Title>\n )\n if (variant === 'h3')\n return (\n <Title level={5} style={{ margin: 0 }}>\n {text}\n </Title>\n )\n if (variant === 'caption')\n return (\n <AText type=\"secondary\" style={{ fontSize: 12, lineHeight: 1.6 }}>\n {text}\n </AText>\n )\n return <AText style={{ lineHeight: 1.7 }}>{text}</AText>\n}\n\n/* ─── 输入 ─── */\n/** 文本输入框,支持 bind token、本地缓存和回写。 */\nexport const TextField: React.FC<\n BoundFieldProps<string> & {\n placeholder?: string\n }\n> = ({ id, label, placeholder, value, bind_path_token, onChange, onDataChange }) => {\n const inputId = useControlId(id)\n const { localValue, updateLocalValue, valuePath } = useBoundFieldState<string>({\n value,\n bindPathToken: bind_path_token,\n defaultValue: '',\n readExternalValue: readStringValue,\n readCachedValue: readStringValue,\n preferCachedValueWhenBound: true,\n preferCachedOverExternal: preferCachedStringValue\n })\n\n return (\n <FieldBlock label={label}>\n <Input\n id={inputId}\n name={inputId}\n placeholder={placeholder}\n value={localValue}\n onChange={(e) => emitFieldChange(e.target.value, valuePath, updateLocalValue, onDataChange, onChange)}\n style={INPUT_RADIUS_STYLE}\n />\n </FieldBlock>\n )\n}\n\n/* ─── 下拉 ─── */\n/** 下拉选择框,统一处理候选项、缓存同步和路径回写。 */\nexport const Select: React.FC<\n BoundFieldProps<SelectValue> & {\n placeholder?: string\n options: { label: string; value: SelectValue }[]\n }\n> = ({ id, label, placeholder, options, value, bind_path_token, onChange, onDataChange }) => {\n const inputId = useControlId(id)\n const { localValue, updateLocalValue, valuePath } = useBoundFieldState<SelectValue | undefined>({\n value,\n bindPathToken: bind_path_token,\n defaultValue: undefined,\n readExternalValue: readSelectValue,\n readCachedValue: readSelectValue,\n preferCachedValueWhenBound: true,\n preferCachedOverExternal: (externalValue, cachedValue, valuePath) =>\n typeof externalValue === 'string' ? preferCachedStringValue(externalValue, readStringValue(cachedValue), valuePath) : false\n })\n\n return (\n <FieldBlock label={label}>\n <AntSelect\n id={inputId}\n style={{ width: '100%' }}\n options={options}\n value={localValue}\n onChange={(nextValue) => emitFieldChange(nextValue, valuePath, updateLocalValue, onDataChange, onChange)}\n placeholder={placeholder || '请选择...'}\n />\n </FieldBlock>\n )\n}\n\n/* ─── 开关 ─── */\n/** 布尔开关组件,用于简单 on/off 表达。 */\nexport const Switch: React.FC<BoundFieldProps<boolean>> = ({ id, label, value, bind_path_token, onChange, onDataChange }) => {\n const inputId = useControlId(id)\n const { localValue, updateLocalValue, valuePath } = useBoundFieldState<boolean>({\n value,\n bindPathToken: bind_path_token,\n defaultValue: false,\n readExternalValue: readBooleanValue,\n readCachedValue: readBooleanValue,\n preferCachedValueWhenBound: true\n })\n\n return (\n <Space align=\"center\">\n <AntSwitch\n id={inputId}\n checked={localValue}\n onChange={(nextValue) => emitFieldChange(nextValue, valuePath, updateLocalValue, onDataChange, onChange)}\n />\n <span style={{ fontSize: 13, color: '#555' }}>{label}</span>\n </Space>\n )\n}\n\n/* ─── 按钮 ─── */\n/** 动作按钮,优先走 onClick,未提供时回退到 action.event 派发。 */\nexport const Button: React.FC<{\n label: string\n variant?: 'primary' | 'default' | 'danger'\n onClick?: () => void\n action?: any\n onAction?: (name: string, context: Record<string, any>) => void\n}> = ({ label, variant = 'default', onClick, action, onAction }) => {\n const handleClick = () => {\n if (onClick) {\n onClick()\n return\n }\n const { name, context } = readActionEvent(action)\n if (name && onAction) {\n onAction(name, context)\n }\n }\n\n return (\n <AntButton type={variant === 'primary' ? 'primary' : 'default'} danger={variant === 'danger'} onClick={handleClick} style={{ borderRadius: 8 }}>\n {label}\n </AntButton>\n )\n}\n\n/* ─── 装饰 ─── */\n/** 分割线组件,用于分隔视觉区块。 */\nexport const Divider: React.FC = () => <AntDivider style={{ margin: '8px 0' }} />\n\n/** 标签组件,用于展示状态或类型。 */\nexport const Tag: React.FC<{ text: string; color?: string }> = ({ text, color }) => <AntTag color={color}>{text}</AntTag>\n\n/** 进度组件,支持百分比、状态和附加说明。 */\nexport const Progress: React.FC<{ percent: number; status?: 'normal' | 'active' | 'success' | 'exception'; text?: string }> = ({\n percent,\n status = 'normal',\n text\n}) => (\n <div style={{ width: '100%' }}>\n <AntProgress percent={Math.max(0, Math.min(100, Math.round(percent)))} status={status} />\n {text ? (\n <AText type=\"secondary\" style={{ fontSize: 12 }}>\n {text}\n </AText>\n ) : null}\n </div>\n)\n\n/* ─── 统一导出,传给 XCard.Box ─── */\nexport const A2uiComponents = {\n Column,\n Row,\n Text,\n TextField,\n Select,\n Switch,\n Button,\n Divider,\n Tag,\n Progress,\n ArtifactCard,\n TableViewer,\n ChartViewer,\n ReportViewer\n} as Record<string, React.ComponentType<any>>\n","function readProp(current: Record<string, any>, props: Record<string, unknown> | null, key: string): unknown {\n return current[key] ?? props?.[key]\n}\n\nfunction readStringProp(current: Record<string, any>, props: Record<string, unknown> | null, key: string): string {\n const value = readProp(current, props, key)\n return typeof value === 'string' ? value.trim() : ''\n}\n\nfunction extractOptionLabels(value: unknown): Record<string, string> | null {\n if (!Array.isArray(value)) return null\n const optionLabels: Record<string, string> = {}\n value.forEach((item) => {\n if (!item || typeof item !== 'object') return\n const option = item as Record<string, unknown>\n if (typeof option.value !== 'string' && typeof option.value !== 'number' && typeof option.value !== 'boolean') return\n if (typeof option.label !== 'string' || !option.label.trim()) return\n optionLabels[String(option.value)] = option.label.trim()\n })\n return Object.keys(optionLabels).length ? optionLabels : null\n}\n\nfunction extractPathFromRef(value: unknown): string | null {\n if (typeof value === 'string') {\n if (value.startsWith('$bind:/')) return value.slice('$bind:'.length)\n if (value.startsWith('/')) return value\n return null\n }\n if (value && typeof value === 'object' && typeof (value as Record<string, unknown>).path === 'string') {\n return (value as Record<string, string>).path\n }\n return null\n}\n\nfunction collectComponentsMeta(\n node: unknown,\n metaByPath: Record<string, { label?: string; optionLabels?: Record<string, string>; component?: string }>\n) {\n if (Array.isArray(node)) {\n node.forEach((item) => collectComponentsMeta(item, metaByPath))\n return\n }\n if (!node || typeof node !== 'object') return\n const current = node as Record<string, any>\n const props = current.props && typeof current.props === 'object' ? (current.props as Record<string, unknown>) : null\n const label = readStringProp(current, props, 'label')\n const path = extractPathFromRef(readProp(current, props, 'bind_path_token')) || extractPathFromRef(readProp(current, props, 'value'))\n if (path) {\n const nextMeta = metaByPath[path] || {}\n if (label) {\n nextMeta.label = label\n }\n const optionLabels = extractOptionLabels(readProp(current, props, 'options'))\n if (optionLabels) {\n nextMeta.optionLabels = optionLabels\n }\n if (typeof current.component === 'string') {\n nextMeta.component = current.component\n }\n metaByPath[path] = nextMeta\n }\n const children = Array.isArray(current.children) ? current.children : []\n children.forEach((child) => collectComponentsMeta(child, metaByPath))\n}\n\nfunction collectSurfaceMetaByPath(\n commands: any[],\n surfaceId: string\n): Record<string, { label?: string; optionLabels?: Record<string, string>; component?: string }> {\n const metaByPath: Record<string, { label?: string; optionLabels?: Record<string, string>; component?: string }> = {}\n commands.forEach((cmd) => {\n const update = cmd?.updateComponents\n if (!update || update.surfaceId !== surfaceId) return\n collectComponentsMeta(update.components, metaByPath)\n })\n return metaByPath\n}\n\nfunction resolveDisplayValue(value: unknown, meta: { label?: string; optionLabels?: Record<string, string>; component?: string }): string {\n if (value === null || value === undefined || value === '') return ''\n if (meta.optionLabels && Object.prototype.hasOwnProperty.call(meta.optionLabels, String(value))) {\n return meta.optionLabels[String(value)]\n }\n if (typeof value === 'boolean') {\n return value ? '是' : '否'\n }\n if (Array.isArray(value)) {\n return value.map((item) => String(item)).join('、')\n }\n if (typeof value === 'object') {\n return JSON.stringify(value)\n }\n return String(value)\n}\n\nexport function collectActionDisplayMeta(\n commands: any[],\n surfaceId: string,\n context: Record<string, unknown>\n): { labels: Record<string, string>; valueLabels: Record<string, string> } | null {\n const refs = context.refs && typeof context.refs === 'object' && !Array.isArray(context.refs) ? (context.refs as Record<string, unknown>) : null\n if (!surfaceId || !refs) return null\n\n const values =\n context.values && typeof context.values === 'object' && !Array.isArray(context.values) ? (context.values as Record<string, unknown>) : context\n const metaByPath = collectSurfaceMetaByPath(commands, surfaceId)\n if (!Object.keys(metaByPath).length) return null\n\n const labels: Record<string, string> = {}\n const valueLabels: Record<string, string> = {}\n Object.entries(refs).forEach(([key, ref]) => {\n const path = extractPathFromRef(ref)\n const meta = path ? metaByPath[path] : null\n if (!meta) return\n if (meta.label) {\n labels[key] = meta.label\n }\n const displayValue = resolveDisplayValue(values[key], meta)\n if (displayValue) {\n valueLabels[key] = displayValue\n }\n })\n return Object.keys(labels).length || Object.keys(valueLabels).length ? { labels, valueLabels } : null\n}\n","import { normalizeActionContext, readModelValues } from '../components/A2uiComponents'\nimport { collectActionDisplayMeta } from './meta'\n\nfunction extractPathFromRef(value: unknown): string | null {\n if (typeof value === 'string') {\n if (value.startsWith('$bind:/')) return value.slice('$bind:'.length)\n if (value.startsWith('/')) return value\n return null\n }\n if (value && typeof value === 'object' && typeof (value as Record<string, unknown>).path === 'string') {\n const path = String((value as Record<string, unknown>).path || '')\n return path.startsWith('/') ? path : null\n }\n return null\n}\n\nfunction commonParentPath(paths: string[]): string {\n const parents = paths\n .map((p) => {\n const idx = p.lastIndexOf('/')\n return idx > 0 ? p.slice(0, idx) : ''\n })\n .filter((p) => p.startsWith('/'))\n if (!parents.length) return ''\n const split = parents.map((p) => p.split('/').filter(Boolean))\n let prefix = split[0]\n for (let i = 1; i < split.length; i++) {\n const cur = split[i]\n let j = 0\n while (j < prefix.length && j < cur.length && prefix[j] === cur[j]) j++\n prefix = prefix.slice(0, j)\n if (!prefix.length) break\n }\n return prefix.length ? `/${prefix.join('/')}` : ''\n}\n\nfunction inferModelPathFromContext(context: Record<string, any>): string {\n const refs = context?.refs && typeof context.refs === 'object' && !Array.isArray(context.refs) ? (context.refs as Record<string, unknown>) : null\n if (!refs) return ''\n const paths = Object.values(refs)\n .map((v) => extractPathFromRef(v))\n .filter((p): p is string => typeof p === 'string' && p.startsWith('/'))\n return commonParentPath(paths)\n}\n\nfunction collectBindingPathsFromNode(node: unknown, paths: string[]) {\n if (Array.isArray(node)) {\n node.forEach((item) => collectBindingPathsFromNode(item, paths))\n return\n }\n if (!node || typeof node !== 'object') return\n const current = node as Record<string, unknown>\n const props =\n current.props && typeof current.props === 'object' && !Array.isArray(current.props) ? (current.props as Record<string, unknown>) : null\n const bindPath =\n extractPathFromRef(current.bind_path_token) ||\n extractPathFromRef(current.value) ||\n extractPathFromRef(props?.bind_path_token) ||\n extractPathFromRef(props?.value)\n if (bindPath) {\n paths.push(bindPath)\n }\n const children = Array.isArray(current.children) ? current.children : []\n children.forEach((child) => collectBindingPathsFromNode(child, paths))\n}\n\nfunction inferModelPathFromSurfaceCommands(surfaceId: string, commands: any[]): string {\n if (!surfaceId) return ''\n const paths: string[] = []\n commands.forEach((cmd) => {\n const update = cmd?.updateComponents\n if (!update || update.surfaceId !== surfaceId) return\n collectBindingPathsFromNode(update.components, paths)\n })\n return commonParentPath(paths)\n}\n\nexport function isSubmitLikeActionName(name: string): boolean {\n const trimmed = typeof name === 'string' ? name.trim() : ''\n return trimmed === 'submit' || trimmed === 'confirm' || trimmed.startsWith('submit_') || trimmed.endsWith('.confirm')\n}\n\nexport function isCancelLikeActionName(name: string): boolean {\n const trimmed = typeof name === 'string' ? name.trim() : ''\n return trimmed === 'cancel' || trimmed === 'qf.cancel' || trimmed.endsWith('.cancel')\n}\n\nexport function shouldOptimisticallyDismissSurface(actionName: string, context: Record<string, unknown>): boolean {\n if (isSubmitLikeActionName(actionName) || isCancelLikeActionName(actionName)) return true\n if (actionName === 'qf.submit' || actionName === 'qf.cancel') return true\n const submitFlag = (context as any)?.submit\n return submitFlag === true\n}\n\nexport function buildDispatchContext(surfaceId: string, rawContext: Record<string, unknown>, commands: any[]): Record<string, any> {\n let normalizedContext = normalizeActionContext(rawContext) as Record<string, any>\n let modelPath =\n normalizedContext?.model && typeof normalizedContext.model === 'object' && typeof normalizedContext.model.path === 'string'\n ? String(normalizedContext.model.path).trim()\n : ''\n if (!modelPath) {\n const inferredModelPath = inferModelPathFromContext(normalizedContext)\n if (inferredModelPath) {\n modelPath = inferredModelPath\n normalizedContext = {\n ...normalizedContext,\n model: {\n ...(normalizedContext.model && typeof normalizedContext.model === 'object' ? normalizedContext.model : {}),\n path: inferredModelPath\n }\n }\n }\n }\n if (!modelPath) {\n const inferredModelPath = inferModelPathFromSurfaceCommands(surfaceId, commands)\n if (inferredModelPath) {\n modelPath = inferredModelPath\n normalizedContext = {\n ...normalizedContext,\n model: {\n ...(normalizedContext.model && typeof normalizedContext.model === 'object' ? normalizedContext.model : {}),\n path: inferredModelPath\n }\n }\n }\n }\n if (modelPath) {\n const valuesFromStore = readModelValues(modelPath)\n const existingValues =\n normalizedContext.values && typeof normalizedContext.values === 'object' && !Array.isArray(normalizedContext.values)\n ? (normalizedContext.values as Record<string, unknown>)\n : {}\n const mergedValues = { ...valuesFromStore, ...existingValues }\n if (Object.keys(mergedValues).length > 0) {\n const existingRefs =\n normalizedContext.refs && typeof normalizedContext.refs === 'object' && !Array.isArray(normalizedContext.refs)\n ? (normalizedContext.refs as Record<string, unknown>)\n : {}\n const refs: Record<string, unknown> = { ...existingRefs }\n for (const key of Object.keys(mergedValues)) {\n if (refs[key] === undefined) {\n refs[key] = `$bind:${modelPath}/${key}`.replace(/\\/{2,}/g, '/')\n }\n }\n normalizedContext = {\n ...normalizedContext,\n refs,\n values: mergedValues\n }\n }\n }\n\n const displayMeta = collectActionDisplayMeta(commands, surfaceId, normalizedContext)\n if (!displayMeta) return normalizedContext\n return {\n ...normalizedContext,\n labels: {\n ...(normalizedContext.labels && typeof normalizedContext.labels === 'object' ? normalizedContext.labels : {}),\n ...displayMeta.labels\n },\n valueLabels: {\n ...(normalizedContext.valueLabels && typeof normalizedContext.valueLabels === 'object' ? normalizedContext.valueLabels : {}),\n ...displayMeta.valueLabels\n }\n }\n}\n","export function extractSurfaceId(cmd: any): string {\n if (!cmd || typeof cmd !== 'object') return ''\n return cmd.createSurface?.surfaceId ?? cmd.updateComponents?.surfaceId ?? cmd.updateDataModel?.surfaceId ?? cmd.deleteSurface?.surfaceId ?? ''\n}\n\nexport function resolveVisibleSurfaceIds(commands: any[], dismissedSurfaceIds: readonly string[] = []): string[] {\n const states = new Map<string, { deleted: boolean }>()\n commands.forEach((cmd) => {\n const sid = extractSurfaceId(cmd)\n if (!sid) return\n const prev = states.get(sid) || { deleted: false }\n if ((cmd as Record<string, unknown>)?.deleteSurface) {\n prev.deleted = true\n } else if ((cmd as Record<string, unknown>)?.createSurface) {\n prev.deleted = false\n }\n states.set(sid, prev)\n })\n return Array.from(states.entries())\n .filter(([sid, st]) => !st.deleted && !dismissedSurfaceIds.includes(sid))\n .map(([sid]) => sid)\n}\n","type WizardField = {\n key: string\n label?: string | null\n placeholder?: string | null\n required?: boolean | null\n type?: string | null\n options?: { label: string; value: string }[]\n default?: unknown\n}\n\ntype WizardStep = {\n stepId: string\n title?: string | null\n description?: string | null\n fields?: WizardField[]\n}\n\nexport type WizardSchema = {\n version?: string\n surfaceId: string\n title?: string | null\n description?: string | null\n modelPath: string\n steps: WizardStep[]\n nextEvent: string\n backEvent: string\n submitEvent: string\n labels?: { next?: string | null; back?: string | null; submit?: string | null } | null\n}\n\nexport type WizardModelSeed = {\n modelPath: string\n values: Record<string, unknown>\n}\n\nfunction readString(obj: Record<string, any>, ...keys: string[]): string {\n for (const k of keys) {\n const v = obj?.[k]\n if (typeof v === 'string' && v.trim()) return v.trim()\n }\n return ''\n}\n\nfunction readOptionalString(obj: Record<string, any>, ...keys: string[]): string | null {\n for (const k of keys) {\n const v = obj?.[k]\n if (typeof v === 'string') return v\n }\n return null\n}\n\nexport function normalizeWizardSchema(schema: unknown): WizardSchema | null {\n if (!schema || typeof schema !== 'object') return null\n const raw = schema as Record<string, any>\n const surfaceId = readString(raw, 'surfaceId', 'surface_id')\n const modelPath = readString(raw, 'modelPath', 'model_path')\n const submitEvent = readString(raw, 'submitEvent', 'submit_event')\n const stepsRaw = Array.isArray(raw.steps) ? raw.steps : []\n if (!surfaceId || !modelPath || !submitEvent || !stepsRaw.length) return null\n\n const steps: WizardStep[] = stepsRaw\n .map((s: any) => {\n if (!s || typeof s !== 'object') return null\n const stepObj = s as Record<string, any>\n const stepId = readString(stepObj, 'stepId', 'step_id')\n if (!stepId) return null\n const fieldsRaw = Array.isArray(stepObj.fields) ? stepObj.fields : []\n const fields: WizardField[] = fieldsRaw\n .map((f: any) => {\n if (!f || typeof f !== 'object') return null\n const fo = f as Record<string, any>\n const key = readString(fo, 'key')\n if (!key) return null\n const type = readOptionalString(fo, 'type')\n const label = readOptionalString(fo, 'label')\n const placeholder = readOptionalString(fo, 'placeholder')\n const required = typeof fo.required === 'boolean' ? fo.required : fo.required === null || fo.required === undefined ? null : !!fo.required\n const options = Array.isArray(fo.options) ? fo.options : undefined\n return {\n key,\n type,\n label,\n placeholder,\n required,\n options,\n default: fo.default\n }\n })\n .filter(Boolean) as WizardField[]\n return {\n stepId,\n title: readOptionalString(stepObj, 'title'),\n description: readOptionalString(stepObj, 'description'),\n fields\n }\n })\n .filter(Boolean) as WizardStep[]\n\n if (!steps.length) return null\n const nextEvent = readString(raw, 'nextEvent', 'next_event') || 'wizard.next'\n const backEvent = readString(raw, 'backEvent', 'back_event') || 'wizard.back'\n const labels =\n raw.labels && typeof raw.labels === 'object' && !Array.isArray(raw.labels)\n ? (raw.labels as { next?: string | null; back?: string | null; submit?: string | null })\n : null\n return {\n version: readOptionalString(raw, 'version') ?? undefined,\n surfaceId,\n modelPath,\n steps,\n submitEvent,\n nextEvent,\n backEvent,\n labels,\n title: readOptionalString(raw, 'title'),\n description: readOptionalString(raw, 'description')\n }\n}\n\nexport function findWizardSchemaBySurface(conversationMessages: readonly any[], surfaceId: string): WizardSchema | null {\n if (!surfaceId) return null\n for (let i = conversationMessages.length - 1; i >= 0; i--) {\n const msg = conversationMessages[i]\n const items = Array.isArray(msg?.content) ? msg.content : []\n for (let j = items.length - 1; j >= 0; j--) {\n const item = items[j]\n if (item?.type !== 'a2uiSchema') continue\n const schema = normalizeWizardSchema(item?.schema)\n if (schema && schema.surfaceId === surfaceId) return schema\n }\n }\n return null\n}\n\nexport function buildWizardModelSeed(schema: WizardSchema | null): WizardModelSeed | null {\n if (!schema?.modelPath) return null\n const values: Record<string, unknown> = {}\n schema.steps.forEach((step) => {\n const fields = Array.isArray(step?.fields) ? step.fields : []\n fields.forEach((field) => {\n const key = typeof field?.key === 'string' ? field.key.trim() : ''\n if (!key || key in values || field?.default === undefined) return\n values[key] = field.default\n })\n })\n return { modelPath: schema.modelPath, values }\n}\n\nexport function pickWizardCurrentStepIdFromCommands(surfaceId: string, commands: any[]): string {\n for (let i = commands.length - 1; i >= 0; i--) {\n const cmd = commands[i]\n const update = cmd?.updateComponents\n if (!update || update.surfaceId !== surfaceId) continue\n const components = Array.isArray(update.components) ? update.components : []\n for (const c of components) {\n if (c?.component !== 'Button') continue\n const stepId = c?.action?.event?.context?.step_id\n if (typeof stepId === 'string' && stepId.trim()) return stepId.trim()\n }\n }\n return ''\n}\n\nfunction buildWizardComponents(schema: WizardSchema, stepId: string) {\n const stepIndex = Math.max(\n 0,\n schema.steps.findIndex((s) => s?.stepId === stepId)\n )\n const step = schema.steps[stepIndex] || schema.steps[0]\n const resolvedStepId = typeof step?.stepId === 'string' && step.stepId ? step.stepId : schema.steps[0]?.stepId\n const fields = Array.isArray(step?.fields) ? step.fields : []\n const modelPath = schema.modelPath\n\n const rootChildren: string[] = ['title', 'desc', 'step-indicator', 'step-title']\n const nodes: any[] = [\n { component: 'Column', id: 'root', children: rootChildren },\n { component: 'Text', id: 'title', text: schema.title || '表单', variant: 'h2' },\n { component: 'Text', id: 'desc', text: schema.description || '', variant: 'caption' },\n { component: 'Text', id: 'step-indicator', text: `步骤 ${stepIndex + 1}/${schema.steps.length}`, variant: 'caption' },\n { component: 'Text', id: 'step-title', text: step?.title || '', variant: 'h3' }\n ]\n\n for (const f of fields) {\n if (!f || typeof f !== 'object') continue\n const key = typeof f.key === 'string' ? f.key.trim() : ''\n if (!key) continue\n const id = `f-${key}`\n const bindPath = `${modelPath}/${key}`.replace(/\\/{2,}/g, '/')\n rootChildren.push(id)\n const label = typeof f.label === 'string' && f.label.trim() ? f.label.trim() : key\n const placeholder = typeof f.placeholder === 'string' ? f.placeholder : undefined\n const type = typeof f.type === 'string' ? f.type.toLowerCase() : 'text'\n if (type === 'select') {\n nodes.push({\n component: 'Select',\n id,\n label,\n placeholder,\n options: Array.isArray((f as any).options) ? (f as any).options : [],\n value: { path: bindPath },\n bind_path_token: `$bind:${bindPath}`\n })\n continue\n }\n if (type === 'switch') {\n nodes.push({\n component: 'Switch',\n id,\n label,\n value: { path: bindPath },\n bind_path_token: `$bind:${bindPath}`\n })\n continue\n }\n nodes.push({\n component: 'TextField',\n id,\n label,\n placeholder,\n value: { path: bindPath },\n bind_path_token: `$bind:${bindPath}`\n })\n }\n\n rootChildren.push('divider', 'actions')\n nodes.push({ component: 'Divider', id: 'divider' })\n nodes.push({ component: 'Row', id: 'actions', gap: 8, children: [] as string[] })\n const actions = nodes.find((n) => n.id === 'actions')\n const actionChildren: string[] = []\n actions.children = actionChildren\n const backLabel = typeof schema.labels?.back === 'string' && schema.labels.back.trim() ? schema.labels.back.trim() : '上一步'\n const nextLabel = typeof schema.labels?.next === 'string' && schema.labels.next.trim() ? schema.labels.next.trim() : '下一步'\n const submitLabel = typeof schema.labels?.submit === 'string' && schema.labels.submit.trim() ? schema.labels.submit.trim() : '提交'\n\n if (stepIndex > 0) {\n actionChildren.push('btn-prev')\n nodes.push({\n component: 'Button',\n id: 'btn-prev',\n label: backLabel,\n variant: 'default',\n action: { event: { name: schema.backEvent, context: { model: { path: modelPath }, step_id: resolvedStepId } } }\n })\n }\n\n const isLast = stepIndex >= schema.steps.length - 1\n if (isLast) {\n actionChildren.push('btn-submit')\n nodes.push({\n component: 'Button',\n id: 'btn-submit',\n label: submitLabel,\n variant: 'primary',\n action: { event: { name: schema.submitEvent, context: { model: { path: modelPath }, step_id: resolvedStepId } } }\n })\n } else {\n actionChildren.push('btn-next')\n nodes.push({\n component: 'Button',\n id: 'btn-next',\n label: nextLabel,\n variant: 'primary',\n action: { event: { name: schema.nextEvent, context: { model: { path: modelPath }, step_id: resolvedStepId } } }\n })\n }\n\n return nodes\n}\n\nexport function buildWizardUpdateComponentsCommand(schema: WizardSchema, stepId: string) {\n return {\n updateComponents: {\n surfaceId: schema.surfaceId,\n components: buildWizardComponents(schema, stepId)\n },\n version: 'v0.9'\n }\n}\n","import { shouldOptimisticallyDismissSurface } from './action'\nimport { resolveVisibleSurfaceIds } from './visibility'\nimport {\n buildWizardModelSeed,\n buildWizardUpdateComponentsCommand,\n normalizeWizardSchema,\n pickWizardCurrentStepIdFromCommands,\n type WizardSchema\n} from './wizard'\n\nexport type MessageCursor = {\n messageId: string\n contentLength: number\n}\n\nexport type A2uiRuntimeEffect =\n | { type: 'reset-model-store' }\n | { type: 'clear-model'; modelPath: string }\n | { type: 'write-model'; modelPath: string; values: Record<string, unknown> }\n\nexport type A2uiRuntimeState = {\n processedMessageCursors: MessageCursor[]\n serverCommands: any[]\n localCommands: any[]\n anchorIndexBySurface: Record<string, number>\n wizardSchemaBySurface: Record<string, WizardSchema>\n latestCreateCommandIndexBySurface: Record<string, number>\n initializedWizardRevisionBySurface: Record<string, string>\n modelPathBySurface: Record<string, string>\n wizardStepBySurface: Record<string, string>\n optimisticallyDismissedSurfaceIds: string[]\n lastA2uiHost: { id: string; index: number }\n}\n\ntype PendingItem = {\n messageIndex: number\n messageId: string\n item: any\n}\n\ntype RuntimeActionInput = {\n surfaceId: string\n actionName: string\n rawContext: Record<string, unknown>\n}\n\n/** 创建全新的 A2UI runtime 状态。 */\nexport function createA2uiRuntimeState(): A2uiRuntimeState {\n return {\n processedMessageCursors: [],\n serverCommands: [],\n localCommands: [],\n anchorIndexBySurface: {},\n wizardSchemaBySurface: {},\n latestCreateCommandIndexBySurface: {},\n initializedWizardRevisionBySurface: {},\n modelPathBySurface: {},\n wizardStepBySurface: {},\n optimisticallyDismissedSurfaceIds: [],\n lastA2uiHost: { id: '', index: -1 }\n }\n}\n\n/** 从命令体中提取 surfaceId。 */\nfunction extractSurfaceId(command: any): string {\n if (!command || typeof command !== 'object') return ''\n return String(\n command.createSurface?.surfaceId ??\n command.updateComponents?.surfaceId ??\n command.updateDataModel?.surfaceId ??\n command.deleteSurface?.surfaceId ??\n ''\n ).trim()\n}\n\n/** 合并当前 runtime 中的服务端命令和本地命令。 */\nexport function getA2uiRuntimeCommands(state: A2uiRuntimeState): any[] {\n return [...state.serverCommands, ...state.localCommands]\n}\n\n/** 增量比对消息流,只有历史被改写时才退化成全量回放。 */\nfunction diffConversationMessages(messages: readonly any[], prevCursors: MessageCursor[]) {\n if (messages.length < prevCursors.length) {\n return { shouldReplayAll: true, nextCursors: [] as MessageCursor[], pendingItems: [] as PendingItem[] }\n }\n\n const nextCursors: MessageCursor[] = []\n const pendingItems: PendingItem[] = []\n for (let messageIndex = 0; messageIndex < messages.length; messageIndex += 1) {\n const message = messages[messageIndex]\n const messageId = String(message?.messageId ?? messageIndex)\n const items = Array.isArray(message?.content) ? message.content : []\n const prevCursor = prevCursors[messageIndex]\n const startIndex = prevCursor ? prevCursor.contentLength : 0\n\n if (prevCursor && (prevCursor.messageId !== messageId || items.length < prevCursor.contentLength)) {\n return { shouldReplayAll: true, nextCursors: [] as MessageCursor[], pendingItems: [] as PendingItem[] }\n }\n\n for (let itemIndex = startIndex; itemIndex < items.length; itemIndex += 1) {\n pendingItems.push({ messageIndex, messageId, item: items[itemIndex] })\n }\n nextCursors.push({ messageId, contentLength: items.length })\n }\n\n return { shouldReplayAll: false, nextCursors, pendingItems }\n}\n\n/** 当 schema 和 createSurface 都已到位时,初始化 wizard 的默认值和首步。 */\nfunction initializeWizardSurface(state: A2uiRuntimeState, surfaceId: string, effects: A2uiRuntimeEffect[], nextWizardSteps: Record<string, string>) {\n const wizard = state.wizardSchemaBySurface[surfaceId]\n const createCommandIndex = state.latestCreateCommandIndexBySurface[surfaceId]\n const modelSeed = buildWizardModelSeed(wizard)\n if (!wizard || modelSeed === null || createCommandIndex === undefined) return\n\n const revision = `${surfaceId}:${createCommandIndex}`\n state.modelPathBySurface[surfaceId] = modelSeed.modelPath\n if (state.initializedWizardRevisionBySurface[surfaceId] === revision) return\n\n effects.push({ type: 'clear-model', modelPath: modelSeed.modelPath })\n effects.push({ type: 'write-model', modelPath: modelSeed.modelPath, values: modelSeed.values })\n state.initializedWizardRevisionBySurface[surfaceId] = revision\n\n const firstStepId = wizard.steps[0]?.stepId\n if (typeof firstStepId === 'string' && firstStepId.trim()) {\n nextWizardSteps[surfaceId] = firstStepId.trim()\n }\n}\n\n/** 用消息流推进 runtime 状态,必要时生成模型同步 effect。 */\nexport function reduceA2uiRuntimeMessages(state: A2uiRuntimeState, messages: readonly any[]) {\n const { shouldReplayAll, pendingItems, nextCursors } = diffConversationMessages(messages || [], state.processedMessageCursors)\n const itemsToProcess = shouldReplayAll\n ? (messages as any[]).flatMap((message, messageIndex) => {\n const messageId = String(message?.messageId ?? messageIndex)\n const items = Array.isArray(message?.content) ? message.content : []\n return items.map((item: any) => ({ messageIndex, messageId, item }))\n })\n : pendingItems\n\n if (!shouldReplayAll && itemsToProcess.length === 0) {\n return { state, effects: [] as A2uiRuntimeEffect[] }\n }\n\n const nextState = shouldReplayAll ? createA2uiRuntimeState() : { ...state }\n nextState.processedMessageCursors = shouldReplayAll ? [] : [...state.processedMessageCursors]\n nextState.serverCommands = shouldReplayAll ? [] : [...state.serverCommands]\n nextState.localCommands = shouldReplayAll ? [] : [...state.localCommands]\n nextState.anchorIndexBySurface = shouldReplayAll ? {} : { ...state.anchorIndexBySurface }\n nextState.wizardSchemaBySurface = shouldReplayAll ? {} : { ...state.wizardSchemaBySurface }\n nextState.latestCreateCommandIndexBySurface = shouldReplayAll ? {} : { ...state.latestCreateCommandIndexBySurface }\n nextState.initializedWizardRevisionBySurface = shouldReplayAll ? {} : { ...state.initializedWizardRevisionBySurface }\n nextState.modelPathBySurface = shouldReplayAll ? {} : { ...state.modelPathBySurface }\n nextState.wizardStepBySurface = shouldReplayAll ? {} : { ...state.wizardStepBySurface }\n nextState.optimisticallyDismissedSurfaceIds = shouldReplayAll ? [] : [...state.optimisticallyDismissedSurfaceIds]\n nextState.lastA2uiHost = shouldReplayAll ? { id: '', index: -1 } : { ...state.lastA2uiHost }\n\n const effects: A2uiRuntimeEffect[] = shouldReplayAll ? [{ type: 'reset-model-store' }] : []\n const deletedSurfaceIds = new Set<string>()\n const nextWizardSteps: Record<string, string> = {}\n\n itemsToProcess.forEach(({ item, messageIndex, messageId }) => {\n if (item?.type === 'a2uiSchema') {\n const schema = normalizeWizardSchema(item.schema)\n if (schema) {\n nextState.wizardSchemaBySurface[schema.surfaceId] = schema\n initializeWizardSurface(nextState, schema.surfaceId, effects, nextWizardSteps)\n }\n return\n }\n\n if (item?.type !== 'a2uiCommand' || !item.command) return\n nextState.serverCommands.push(item.command)\n nextState.lastA2uiHost = { id: messageId, index: messageIndex }\n\n const surfaceId = extractSurfaceId(item.command)\n if (!surfaceId) return\n if (nextState.anchorIndexBySurface[surfaceId] === undefined && !item.command?.deleteSurface) {\n nextState.anchorIndexBySurface[surfaceId] = messageIndex\n }\n\n if (item.command?.createSurface) {\n nextState.latestCreateCommandIndexBySurface[surfaceId] = nextState.serverCommands.length - 1\n initializeWizardSurface(nextState, surfaceId, effects, nextWizardSteps)\n }\n\n if (item.command?.deleteSurface) {\n deletedSurfaceIds.add(surfaceId)\n const modelPath = nextState.modelPathBySurface[surfaceId]\n if (modelPath) effects.push({ type: 'clear-model', modelPath })\n delete nextState.initializedWizardRevisionBySurface[surfaceId]\n delete nextState.modelPathBySurface[surfaceId]\n }\n })\n\n nextState.processedMessageCursors = shouldReplayAll\n ? (messages as any[]).map((message, messageIndex) => ({\n messageId: String(message?.messageId ?? messageIndex),\n contentLength: Array.isArray(message?.content) ? message.content.length : 0\n }))\n : nextCursors\n nextState.wizardStepBySurface = { ...nextState.wizardStepBySurface, ...nextWizardSteps }\n\n if (deletedSurfaceIds.size) {\n nextState.optimisticallyDismissedSurfaceIds = nextState.optimisticallyDismissedSurfaceIds.filter((surfaceId) => !deletedSurfaceIds.has(surfaceId))\n nextState.wizardStepBySurface = Object.fromEntries(\n Object.entries(nextState.wizardStepBySurface).filter(([surfaceId]) => !deletedSurfaceIds.has(surfaceId))\n )\n nextState.localCommands = nextState.localCommands.filter(\n (cmd) => !deletedSurfaceIds.has(String(cmd?.updateComponents?.surfaceId || cmd?.updateDataModel?.surfaceId || ''))\n )\n }\n\n return { state: nextState, effects }\n}\n\n/** 处理不依赖副作用的本地 runtime 交互,如 wizard 切步和乐观关闭。 */\nexport function reduceA2uiRuntimeAction(state: A2uiRuntimeState, input: RuntimeActionInput) {\n const { surfaceId, actionName, rawContext } = input\n if (!surfaceId) {\n return { state, handled: actionName === 'wizard.next' || actionName === 'wizard.back' }\n }\n\n const wizard = state.wizardSchemaBySurface[surfaceId]\n if (wizard) {\n const isNext = actionName === wizard.nextEvent\n const isBack = actionName === wizard.backEvent\n if (isNext || isBack) {\n const commands = getA2uiRuntimeCommands(state)\n const fallbackStepId = pickWizardCurrentStepIdFromCommands(surfaceId, commands) || wizard.steps[0]?.stepId || ''\n const currentStepId = state.wizardStepBySurface[surfaceId] || fallbackStepId\n const currentIndex = wizard.steps.findIndex((step) => step?.stepId === currentStepId)\n const baseIndex = currentIndex >= 0 ? currentIndex : 0\n const nextIndex = isNext ? baseIndex + 1 : baseIndex - 1\n const nextStepId = wizard.steps[nextIndex]?.stepId\n if (!nextStepId) return { state, handled: true }\n\n return {\n state: {\n ...state,\n wizardStepBySurface: { ...state.wizardStepBySurface, [surfaceId]: nextStepId },\n localCommands: [...state.localCommands, buildWizardUpdateComponentsCommand(wizard, nextStepId)]\n },\n handled: true\n }\n }\n }\n\n if (actionName === 'wizard.next' || actionName === 'wizard.back') {\n return { state, handled: true }\n }\n\n if (!shouldOptimisticallyDismissSurface(actionName, rawContext)) {\n return { state, handled: false }\n }\n if (state.optimisticallyDismissedSurfaceIds.includes(surfaceId)) {\n return { state, handled: false }\n }\n\n return {\n state: {\n ...state,\n optimisticallyDismissedSurfaceIds: [...state.optimisticallyDismissedSurfaceIds, surfaceId]\n },\n handled: false\n }\n}\n\n/** 根据当前 runtime 状态导出给渲染层使用的视图模型。 */\nexport function selectA2uiRuntimeView(state: A2uiRuntimeState, dismissedSurfaceIds: readonly string[]) {\n const mergedDismissedSurfaceIds = Array.from(\n new Set([...(dismissedSurfaceIds || []), ...state.optimisticallyDismissedSurfaceIds].filter((surfaceId) => surfaceId?.trim?.()))\n )\n const commands = getA2uiRuntimeCommands(state)\n const visibleSurfaceIds = resolveVisibleSurfaceIds(commands, mergedDismissedSurfaceIds)\n const anchoredSurfaceIdsByMessageIndex: Record<number, string[]> = {}\n\n visibleSurfaceIds.forEach((surfaceId) => {\n const messageIndex = state.anchorIndexBySurface[surfaceId]\n if (typeof messageIndex !== 'number' || messageIndex < 0) return\n if (!anchoredSurfaceIdsByMessageIndex[messageIndex]) anchoredSurfaceIdsByMessageIndex[messageIndex] = []\n anchoredSurfaceIdsByMessageIndex[messageIndex].push(surfaceId)\n })\n\n return {\n commands,\n visibleSurfaceIds,\n lastA2uiHostMessageId: state.lastA2uiHost.id,\n lastA2uiHostMessageIndex: state.lastA2uiHost.index,\n anchoredSurfaceIdsByMessageIndex\n }\n}\n","import { useCallback, useEffect, useMemo, useRef, useState } from 'react'\nimport { clearAllModelValues, clearModelValues, writeModelValues } from '../components/A2uiComponents'\nimport {\n createA2uiRuntimeState,\n reduceA2uiRuntimeAction,\n reduceA2uiRuntimeMessages,\n selectA2uiRuntimeView,\n type A2uiRuntimeEffect,\n type A2uiRuntimeState\n} from './runtime'\nimport type { A2uiControllerParams, A2uiControllerResult } from './types'\n\n/** 执行 runtime 产出的模型同步 effect。 */\nfunction applyA2uiRuntimeEffects(effects: A2uiRuntimeEffect[]) {\n effects.forEach((effect) => {\n if (effect.type === 'reset-model-store') {\n clearAllModelValues()\n return\n }\n if (effect.type === 'clear-model') {\n clearModelValues(effect.modelPath)\n return\n }\n writeModelValues(effect.modelPath, effect.values)\n })\n}\n\nexport function useA2uiController(params: A2uiControllerParams): A2uiControllerResult {\n const { conversationId, conversationMessages, dismissedSurfaceIds } = params\n const runtimeRef = useRef<A2uiRuntimeState>(createA2uiRuntimeState())\n const [runtimeState, setRuntimeState] = useState<A2uiRuntimeState>(() => createA2uiRuntimeState())\n\n useEffect(() => {\n const nextState = createA2uiRuntimeState()\n runtimeRef.current = nextState\n setRuntimeState(nextState)\n clearAllModelValues()\n }, [conversationId])\n\n useEffect(() => {\n const result = reduceA2uiRuntimeMessages(runtimeRef.current, conversationMessages || [])\n if (result.state === runtimeRef.current && result.effects.length === 0) return\n runtimeRef.current = result.state\n applyA2uiRuntimeEffects(result.effects)\n setRuntimeState(result.state)\n }, [conversationMessages, conversationId])\n\n const view = useMemo(() => selectA2uiRuntimeView(runtimeState, dismissedSurfaceIds), [runtimeState, dismissedSurfaceIds])\n\n /** 仅推进本地 runtime;未处理的动作交给上层决定如何派发。 */\n const handleRuntimeAction = useCallback((payload: any) => {\n const surfaceId = String(payload?.surfaceId || payload?.cardId || '')\n const name = String(payload?.name || payload?.event?.name || '').trim()\n const rawContext = (payload?.context || payload?.event?.context || {}) as Record<string, unknown>\n const runtimeActionResult = reduceA2uiRuntimeAction(runtimeRef.current, { surfaceId, actionName: name, rawContext })\n if (runtimeActionResult.state !== runtimeRef.current) {\n runtimeRef.current = runtimeActionResult.state\n setRuntimeState(runtimeActionResult.state)\n }\n return { handled: runtimeActionResult.handled, name, surfaceId, rawContext }\n }, [])\n\n return {\n runtimeState,\n commands: view.commands,\n visibleSurfaceIds: view.visibleSurfaceIds,\n lastA2uiHostMessageId: view.lastA2uiHostMessageId,\n lastA2uiHostMessageIndex: view.lastA2uiHostMessageIndex,\n anchoredSurfaceIdsByMessageIndex: view.anchoredSurfaceIdsByMessageIndex,\n handleRuntimeAction\n }\n}\n\nexport type { A2uiControllerParams, A2uiControllerResult, A2uiRuntimeActionResult, DispatchPayload } from './types'\n","import React from 'react'\n\nexport type A2uiRuntimeProviderProps = {\n messages: readonly any[]\n children: React.ReactNode\n}\n\nexport type A2uiRuntimeView = {\n commands: any[]\n onAction: (payload: any) => void\n surfaceIdsByMessageIndex: Record<number, string[]>\n}\n\nexport const A2uiRuntimeContext = React.createContext<A2uiRuntimeView>({\n commands: [],\n onAction: () => undefined,\n surfaceIdsByMessageIndex: {}\n})\n","import React from 'react'\nimport { A2uiRuntimeContext } from './context'\n\n/** 读取当前 A2UI runtime 的渲染视图和动作入口。 */\nexport function useA2uiRuntimeView() {\n return React.useContext(A2uiRuntimeContext)\n}\n","import { XCard } from '../x-card'\nimport { useA2uiRuntimeView } from './useA2uiRuntimeView'\n\n/** 在消息锚点位置挂载当前可见的 A2UI Surface。 */\nexport function A2uiMessageCards({ messageIndex }: { messageIndex: number }) {\n const { surfaceIdsByMessageIndex } = useA2uiRuntimeView()\n const surfaceIds = surfaceIdsByMessageIndex[messageIndex] || []\n if (!surfaceIds.length) return null\n\n return (\n <div>\n {surfaceIds.map((surfaceId) => (\n <XCard.Card key={surfaceId} id={surfaceId} />\n ))}\n </div>\n )\n}\n","/** A2UI 交互事件的标准载荷。 */\nexport type A2uiActionPayload = {\n name: string\n surfaceId: string\n context: Record<string, any>\n}\n\n/** 判断事件名是否代表提交类动作。 */\nexport function isSubmitLikeActionName(name: string): boolean {\n const normalized = String(name || '').trim()\n return normalized === 'submit' || normalized === 'confirm' || normalized.startsWith('submit_') || normalized.endsWith('.confirm')\n}\n\n/** 判断事件名是否代表取消类动作。 */\nexport function isCancelLikeActionName(name: string): boolean {\n const normalized = String(name || '').trim()\n return normalized === 'cancel' || normalized === 'qf.cancel' || normalized.endsWith('.cancel')\n}\n\n/** 判断当前动作是否应该先把 Surface 从界面上隐藏。 */\nexport function shouldDismissA2uiSurface(name: string, context?: Record<string, unknown>): boolean {\n if (isSubmitLikeActionName(name) || isCancelLikeActionName(name)) return true\n if (name === 'qf.submit' || name === 'qf.cancel') return true\n return context?.submit === true\n}\n\n/** 把外部输入规整成稳定的 A2UI 载荷。 */\nexport function normalizeA2uiActionPayload(payload: Partial<A2uiActionPayload>): A2uiActionPayload {\n return {\n name: String(payload?.name || '').trim(),\n surfaceId: String(payload?.surfaceId || '').trim(),\n context: payload?.context && typeof payload.context === 'object' && !Array.isArray(payload.context) ? payload.context : {}\n }\n}\n\n/** 把 A2UI 动作编码成发送给后端的标准协议文本。 */\nexport function formatA2uiActionMessage(payload: Partial<A2uiActionPayload>): string {\n const normalized = normalizeA2uiActionPayload(payload)\n return JSON.stringify({\n type: 'a2ui_action.v1',\n name: normalized.name,\n surfaceId: normalized.surfaceId,\n context: normalized.context\n })\n}\n\n/** 从文本消息中解析 A2UI 动作协议。 */\nexport function parseA2uiActionMessage(content?: string): A2uiActionPayload | null {\n if (typeof content !== 'string') return null\n const trimmed = content.trim()\n if (!trimmed.startsWith('{') || !trimmed.includes('\"a2ui_action.v1\"')) return null\n\n try {\n const parsed = JSON.parse(trimmed)\n if (parsed?.type !== 'a2ui_action.v1') return null\n return normalizeA2uiActionPayload(parsed)\n } catch {\n return null\n }\n}\n\n/** 判断这条动作是否应该渲染成 Question 摘要。 */\nfunction isQuestionActionPayload(payload: A2uiActionPayload): boolean {\n const mode = payload.context?.form_mode\n if (payload.name === 'qf.submit' || payload.name === 'qf.cancel') return true\n if (payload.name.startsWith('qf.')) return true\n return typeof mode === 'string' && mode.toLowerCase() === 'ephemeral'\n ? isSubmitLikeActionName(payload.name) || isCancelLikeActionName(payload.name)\n : false\n}\n\n/** 把值格式化成用户可读的摘要文本。 */\nfunction formatActionValue(value: unknown, displayOverride?: unknown): string {\n if (typeof displayOverride === 'string' && displayOverride.trim()) return displayOverride.trim()\n if (typeof value === 'boolean') return value ? '是' : '否'\n if (Array.isArray(value)) return value.map((item) => String(item)).join('、')\n if (value && typeof value === 'object') return JSON.stringify(value)\n return String(value)\n}\n\n/** 生成 Question 类型动作的简洁摘要。 */\nfunction buildQuestionSummary(payload: A2uiActionPayload): string {\n if (isCancelLikeActionName(payload.name)) return 'Question: 已取消'\n\n const values =\n payload.context.values && typeof payload.context.values === 'object' && !Array.isArray(payload.context.values)\n ? (payload.context.values as Record<string, unknown>)\n : payload.context\n const labels =\n payload.context.labels && typeof payload.context.labels === 'object' && !Array.isArray(payload.context.labels)\n ? (payload.context.labels as Record<string, unknown>)\n : {}\n const valueLabels =\n payload.context.valueLabels && typeof payload.context.valueLabels === 'object' && !Array.isArray(payload.context.valueLabels)\n ? (payload.context.valueLabels as Record<string, unknown>)\n : {}\n\n const details = Object.entries(values)\n .filter(([, value]) => value !== null && value !== undefined && value !== '')\n .map(([key, value]) => {\n const label = typeof labels[key] === 'string' && String(labels[key]).trim() ? String(labels[key]).trim() : key\n return `${label}: ${formatActionValue(value, valueLabels[key])}`\n })\n\n return details.length ? `Question: ${details.join('; ')}` : 'Question: 已回答'\n}\n\n/** 生成普通 A2UI 动作的可读展示文本。 */\nexport function formatA2uiActionDisplayText(payload: A2uiActionPayload): string {\n if (isQuestionActionPayload(payload)) return buildQuestionSummary(payload)\n\n const values =\n payload.context.values && typeof payload.context.values === 'object' && !Array.isArray(payload.context.values)\n ? (payload.context.values as Record<string, unknown>)\n : payload.context\n const labels =\n payload.context.labels && typeof payload.context.labels === 'object' && !Array.isArray(payload.context.labels)\n ? (payload.context.labels as Record<string, unknown>)\n : {}\n const valueLabels =\n payload.context.valueLabels && typeof payload.context.valueLabels === 'object' && !Array.isArray(payload.context.valueLabels)\n ? (payload.context.valueLabels as Record<string, unknown>)\n : {}\n\n const actionLabels: Record<string, string> = {\n submit_basic: '已提交基础信息',\n submit_params: '已提交参数配置',\n back_to_basic: '已返回修改基础信息',\n back_to_params: '已返回修改参数',\n confirm: '已确认创建'\n }\n const actionLabel = actionLabels[payload.name] || `已提交动作 (${payload.name})`\n const details = Object.entries(values)\n .filter(([, value]) => value !== null && value !== undefined && value !== '')\n .map(([key, value]) => {\n const label = typeof labels[key] === 'string' && String(labels[key]).trim() ? String(labels[key]).trim() : key\n return `${label}: ${formatActionValue(value, valueLabels[key])}`\n })\n\n return details.length ? `${actionLabel}:${details.join('; ')}` : actionLabel\n}\n\n/** 把用户消息中的 A2UI 协议转换成可直接显示的文案。 */\nexport function toA2uiDisplayText(role: number, content?: string): string {\n if (role !== 1) return content || ''\n const payload = parseA2uiActionMessage(content)\n return payload ? formatA2uiActionDisplayText(payload) : content || ''\n}\n\n/** 判断 plan 是否只是 A2UI 的上游描述,不应该单独渲染。 */\nexport function shouldHideA2uiPlan(item: { plan?: unknown }): boolean {\n if (!item.plan || typeof item.plan !== 'object') return false\n\n const rawPlan = item.plan as Record<string, unknown>\n const candidates = [rawPlan, rawPlan.plan].filter((plan): plan is Record<string, unknown> => !!plan && typeof plan === 'object')\n\n return candidates.some((plan) => {\n const kind = typeof plan.kind === 'string' ? plan.kind.toLowerCase() : ''\n const surfaceId = typeof plan.surface_id === 'string' ? plan.surface_id : ''\n return (kind === 'form' || kind === 'wizard' || kind === 'dashboard') && !!surfaceId\n })\n}\n","import XMarkdown from '@ant-design/x-markdown'\nimport '@ant-design/x-markdown/themes/light.css'\nimport classNames from 'classnames'\nimport React from 'react'\nimport { AgentNavigateComponent, CodeHighlightComponent } from '../../src/components/custom-components'\nimport { getMarkdownConfig } from '../../src/core/utils'\nimport { A2uiComponents } from '../components/A2uiComponents'\nimport { shouldHideA2uiPlan } from './protocol'\n\n/** 把混合文本里的完整 HTML 包装成代码块,避免直接参与 Markdown 布局。 */\nfunction formatMixedContent(content: string): string {\n return content.replace(/<!DOCTYPE html>[\\s\\S]*?<\\/html>/gi, (match) => `\\`\\`\\`html\\n${match}\\n\\`\\`\\``)\n}\n\n/** 统一提取 plan 的真实载荷。 */\nfunction extractPlanPayload(plan: unknown): Record<string, any> | null {\n if (!plan || typeof plan !== 'object') return null\n const raw = plan as Record<string, any>\n return raw.plan && typeof raw.plan === 'object' ? raw.plan : raw\n}\n\n/** 统一规范表格列定义,避免调用方重复写兼容逻辑。 */\nfunction normalizeTableColumns(columns: unknown): { title: string; dataIndex: string }[] {\n if (!Array.isArray(columns)) return []\n return columns\n .map((column: any) => ({\n title: String(column?.title ?? ''),\n dataIndex: String(column?.dataIndex ?? column?.data_index ?? '')\n }))\n .filter((column) => column.dataIndex)\n}\n\n/** 按制品类型选择对应的 A2UI 组件。 */\nfunction renderArtifact(artifact: any, index: number): React.ReactNode {\n const ReportViewer = A2uiComponents.ReportViewer as React.ComponentType<any>\n const ChartViewer = A2uiComponents.ChartViewer as React.ComponentType<any>\n const TableViewer = A2uiComponents.TableViewer as React.ComponentType<any>\n const ArtifactCard = A2uiComponents.ArtifactCard as React.ComponentType<any>\n\n const type = String(artifact?.type ?? '').toLowerCase()\n const artifactId = String(artifact?.artifact_id ?? artifact?.artifactId ?? `artifact_${index}`)\n const title = typeof artifact?.title === 'string' ? artifact.title : undefined\n\n if (type === 'report') {\n return <ReportViewer key={artifactId} artifactId={artifactId} title={title} payload={{ markdown: artifact?.markdown }} />\n }\n if (type === 'chart') {\n return <ChartViewer key={artifactId} artifactId={artifactId} title={title} payload={artifact} />\n }\n if (type === 'table') {\n return (\n <TableViewer\n key={artifactId}\n artifactId={artifactId}\n title={title}\n payload={{ columns: normalizeTableColumns(artifact?.columns), rows: Array.isArray(artifact?.rows) ? artifact.rows : [] }}\n />\n )\n }\n return <ArtifactCard key={artifactId} type={type || 'artifact'} artifactId={artifactId} title={title} payload={artifact} />\n}\n\n/** 渲染 viewer 类型的 plan。 */\nfunction ViewerPlan({ payload }: { payload: Record<string, any> }) {\n const artifacts = Array.isArray(payload.artifacts) ? payload.artifacts : []\n if (!artifacts.length) return null\n\n const title = typeof payload.title === 'string' ? payload.title.trim() : ''\n const description = typeof payload.description === 'string' ? payload.description.trim() : ''\n const header = title || description ? `### ${title || '报告'}\\n\\n${description || ''}`.trim() : ''\n\n return (\n <div style={{ display: 'flex', flexDirection: 'column', gap: 8 }}>\n {header ? (\n <XMarkdown\n openLinksInNewTab\n className={classNames('x-markdown-light', 'xMarkdownStyle')}\n components={{ code: CodeHighlightComponent, agentnavigate: AgentNavigateComponent }}\n config={getMarkdownConfig()}\n content={formatMixedContent(header)}\n />\n ) : null}\n {artifacts.map((artifact, index) => renderArtifact(artifact, index))}\n </div>\n )\n}\n\n/** 统一渲染消息里的 plan 节点。 */\nexport function A2uiPlanNode({ item }: { item: any }) {\n if (!item || shouldHideA2uiPlan(item)) return null\n\n const payload = extractPlanPayload(item.plan)\n const isViewer = typeof payload?.kind === 'string' && payload.kind.toLowerCase() === 'viewer'\n if (payload && isViewer) {\n return <ViewerPlan payload={payload} />\n }\n\n const title = item.title ? `### ${item.title}\\n\\n` : ''\n const content = typeof item.content === 'string' ? item.content : item.plan ? `\\`\\`\\`json\\n${JSON.stringify(item.plan, null, 2)}\\n\\`\\`\\`` : ''\n if (!title && !content) return null\n\n return (\n <XMarkdown\n openLinksInNewTab\n className={classNames('x-markdown-light', 'xMarkdownStyle')}\n components={{ code: CodeHighlightComponent, agentnavigate: AgentNavigateComponent }}\n config={getMarkdownConfig()}\n content={formatMixedContent(`${title}${content}`)}\n />\n )\n}\n","import { message as antdMessage } from 'antd'\nimport React from 'react'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../src/stores/Context'\nimport { A2uiComponents, clearModelValues } from '../components/A2uiComponents'\nimport { useA2uiController } from '../controller'\nimport { buildDispatchContext, shouldOptimisticallyDismissSurface } from '../controller/action'\nimport { XCard } from '../x-card'\nimport { A2uiRuntimeContext, type A2uiRuntimeProviderProps } from './context'\nimport { formatA2uiActionMessage, normalizeA2uiActionPayload, shouldDismissA2uiSurface } from './protocol'\n\ntype MessageCursor = {\n messageId: string\n contentLength: number\n}\n\n/** 从任意命令里提取 surfaceId,用来维护 dismiss 的恢复边界。 */\nfunction extractSurfaceId(command: unknown): string {\n if (!command || typeof command !== 'object') return ''\n const current = command as Record<string, any>\n return String(\n current.createSurface?.surfaceId ??\n current.updateComponents?.surfaceId ??\n current.updateDataModel?.surfaceId ??\n current.deleteSurface?.surfaceId ??\n ''\n ).trim()\n}\n\n/** 从动作上下文中提取 model path,便于提交后清理本地缓存。 */\nfunction readContextModelPath(context: Record<string, unknown>): string {\n const path = context?.model && typeof context.model === 'object' ? (context.model as { path?: unknown }).path : ''\n return typeof path === 'string' ? path.trim() : ''\n}\n\n/** 只比对消息游标,正常流式场景下只处理新追加的内容。 */\nfunction diffMessages(messages: readonly any[], prevCursors: MessageCursor[]) {\n if (messages.length < prevCursors.length) {\n return { shouldReplayAll: true, nextCursors: [] as MessageCursor[], pendingItems: [] as any[] }\n }\n\n const nextCursors: MessageCursor[] = []\n const pendingItems: Array<{ item: any }> = []\n for (let messageIndex = 0; messageIndex < messages.length; messageIndex += 1) {\n const message = messages[messageIndex]\n const messageId = String(message?.messageId ?? messageIndex)\n const items = Array.isArray(message?.content) ? message.content : []\n const prevCursor = prevCursors[messageIndex]\n const startIndex = prevCursor ? prevCursor.contentLength : 0\n\n if (prevCursor && (prevCursor.messageId !== messageId || items.length < prevCursor.contentLength)) {\n return { shouldReplayAll: true, nextCursors: [] as MessageCursor[], pendingItems: [] as any[] }\n }\n\n for (let itemIndex = startIndex; itemIndex < items.length; itemIndex += 1) {\n pendingItems.push({ item: items[itemIndex] })\n }\n nextCursors.push({ messageId, contentLength: items.length })\n }\n\n return { shouldReplayAll: false, nextCursors, pendingItems }\n}\n\n/** 为整个子树提供 A2UI runtime,并负责把未消费动作发回聊天链路。 */\nexport function A2uiRuntimeProvider({ messages, children }: A2uiRuntimeProviderProps) {\n const chatStore = useChatStore()\n const conversationState = useSnapshot(chatStore.conversation)\n const conversationId = conversationState.active.id\n const processedMessageCursorsRef = React.useRef<MessageCursor[]>([])\n const latestCommandIndexBySurfaceRef = React.useRef<Record<string, number>>({})\n const commandIndexRef = React.useRef(-1)\n const [latestCommandIndexBySurface, setLatestCommandIndexBySurface] = React.useState<Record<string, number>>({})\n const [dismissedAtBySurface, setDismissedAtBySurface] = React.useState<Record<string, number>>({})\n\n React.useEffect(() => {\n processedMessageCursorsRef.current = []\n latestCommandIndexBySurfaceRef.current = {}\n commandIndexRef.current = -1\n setLatestCommandIndexBySurface({})\n setDismissedAtBySurface({})\n }, [conversationId])\n\n React.useEffect(() => {\n const { shouldReplayAll, nextCursors, pendingItems } = diffMessages(messages, processedMessageCursorsRef.current)\n const itemsToProcess = shouldReplayAll\n ? (messages as any[]).flatMap((message) => {\n const items = Array.isArray(message?.content) ? message.content : []\n return items.map((item: any) => ({ item }))\n })\n : pendingItems\n if (!shouldReplayAll && itemsToProcess.length === 0) return\n\n const nextLatestCommandIndexBySurface = shouldReplayAll ? {} : { ...latestCommandIndexBySurfaceRef.current }\n let nextCommandIndex = shouldReplayAll ? -1 : commandIndexRef.current\n\n itemsToProcess.forEach(({ item }) => {\n if (item?.type !== 'a2uiCommand' || !item.command) return\n nextCommandIndex += 1\n const surfaceId = extractSurfaceId(item.command)\n if (surfaceId) nextLatestCommandIndexBySurface[surfaceId] = nextCommandIndex\n })\n\n processedMessageCursorsRef.current = shouldReplayAll\n ? (messages as any[]).map((message, messageIndex) => ({\n messageId: String(message?.messageId ?? messageIndex),\n contentLength: Array.isArray(message?.content) ? message.content.length : 0\n }))\n : nextCursors\n latestCommandIndexBySurfaceRef.current = nextLatestCommandIndexBySurface\n commandIndexRef.current = nextCommandIndex\n setLatestCommandIndexBySurface(nextLatestCommandIndexBySurface)\n }, [messages])\n\n /** 只保留还没有被后续新命令覆盖的隐藏状态。 */\n const dismissedSurfaceIds = React.useMemo(() => {\n return Object.entries(dismissedAtBySurface)\n .filter(([surfaceId, dismissedAt]) => (latestCommandIndexBySurface[surfaceId] ?? -1) <= dismissedAt)\n .map(([surfaceId]) => surfaceId)\n }, [dismissedAtBySurface, latestCommandIndexBySurface])\n\n /** 把 A2UI 动作转成聊天消息协议,并在需要时先做本地隐藏。 */\n const dispatchA2uiAction = React.useCallback(\n async (payload: { name: string; surfaceId: string; context: Record<string, any> }) => {\n const actionPayload = normalizeA2uiActionPayload(payload)\n if (!actionPayload.name) return\n\n if (actionPayload.surfaceId && shouldDismissA2uiSurface(actionPayload.name, actionPayload.context)) {\n const latestIndex = latestCommandIndexBySurface[actionPayload.surfaceId] ?? Number.MAX_SAFE_INTEGER\n setDismissedAtBySurface((prev) => ({ ...prev, [actionPayload.surfaceId]: latestIndex }))\n }\n\n try {\n await chatStore.config.hooks?.onA2uiAction?.(actionPayload)\n } catch (error) {\n console.error('A2UI action hook failed:', error)\n }\n\n try {\n await chatStore.sendMessage(formatA2uiActionMessage(actionPayload))\n } catch (error) {\n console.error('A2UI action send failed:', error)\n antdMessage.error('提交失败,请稍后重试')\n }\n },\n [chatStore, latestCommandIndexBySurface]\n )\n\n const { runtimeState, commands, anchoredSurfaceIdsByMessageIndex, handleRuntimeAction } = useA2uiController({\n conversationId,\n conversationMessages: messages,\n dismissedSurfaceIds\n })\n\n /** 先尝试用 runtime 消费动作;剩余动作再作为外部协议派发。 */\n const onAction = React.useCallback(\n (payload: any) => {\n const result = handleRuntimeAction(payload)\n if (result.handled || !result.name) return\n\n const nextContext = buildDispatchContext(result.surfaceId, result.rawContext, commands)\n void dispatchA2uiAction({ name: result.name, surfaceId: result.surfaceId, context: nextContext })\n\n if (shouldOptimisticallyDismissSurface(result.name, result.rawContext)) {\n const modelPath =\n readContextModelPath(nextContext) || readContextModelPath(result.rawContext) || runtimeState.modelPathBySurface[result.surfaceId]\n if (modelPath) clearModelValues(modelPath)\n }\n },\n [commands, dispatchA2uiAction, handleRuntimeAction, runtimeState.modelPathBySurface]\n )\n\n const contextValue = React.useMemo(\n () => ({ commands, onAction, surfaceIdsByMessageIndex: anchoredSurfaceIdsByMessageIndex }),\n [anchoredSurfaceIdsByMessageIndex, commands, onAction]\n )\n\n return (\n <A2uiRuntimeContext.Provider value={contextValue}>\n <XCard.Box commands={commands as any} components={A2uiComponents} onAction={onAction}>\n {children}\n </XCard.Box>\n </A2uiRuntimeContext.Provider>\n )\n}\n","import { A2uiRuntimeProvider } from './A2uiRuntimeProvider'\nimport type { A2uiRuntimeProviderProps } from './context'\n\n/** 兼容旧用法,内部直接复用新的 Provider。 */\nexport function A2uiRenderer(props: A2uiRuntimeProviderProps) {\n return <A2uiRuntimeProvider {...props} />\n}\n","import { LoadingOutlined } from '@ant-design/icons'\nimport XMarkdown from '@ant-design/x-markdown'\nimport '@ant-design/x-markdown/themes/light.css'\nimport { FileCard, Think } from '@ant-design/x-v2'\nimport { Flex } from 'antd'\nimport classNames from 'classnames'\nimport React, { useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { A2uiMessageCards, A2uiPlanNode, toA2uiDisplayText } from '../../a2ui-runtime'\nimport { getMarkdownConfig } from '../core/utils'\nimport { useChatStore } from '../stores/Context'\nimport { ChatLayoutMessageList, ConversationMessage, FilesEvent, InputFile } from '../types'\nimport { AgentNavigateComponent, CodeHighlightComponent, PreviewLinkComponent } from './custom-components'\nimport ToolCallItem from './custom-components/tool-renders/tool-call-item'\nimport styles from './styles.module.less'\n\nfunction formatMixedContent(content: string) {\n return content.replace(/<!DOCTYPE html>[\\s\\S]*?<\\/html>/gi, (match) => `\\`\\`\\`html\\n${match}\\n\\`\\`\\``)\n}\n\nfunction QuestionSummary({ content }: { content: string }) {\n const answer = content.replace(/^Question:\\s*/, '').trim() || '已回答'\n return (\n <span style={{ display: 'inline-flex', flexDirection: 'column', gap: 4 }}>\n <span style={{ fontSize: 13, fontWeight: 600, color: '#1677ff', lineHeight: 1.4 }}>Question</span>\n <span style={{ fontSize: 13, color: '#262626', lineHeight: 1.6, whiteSpace: 'pre-wrap' }}>{answer}</span>\n </span>\n )\n}\n\nconst RunStartedNode = React.memo(({ loading }: { loading?: boolean }) => {\n if (!loading) return null\n return (\n <Flex gap={8} align=\"center\" className={styles.runStartedNode}>\n <LoadingOutlined style={{ color: '#1677ff' }} />\n </Flex>\n )\n})\n\nconst ToolCallNode = React.memo(({ item }: { item: any }) => {\n return <ToolCallItem item={item} />\n})\n\nconst TextNode = React.memo(({ item, role, customComponents }: { item: any; role: number; customComponents?: Record<string, any> }) => {\n const content = toA2uiDisplayText(role, item?.messageContent)\n if (typeof content === 'string' && content.startsWith('Question:')) {\n return <QuestionSummary content={content} />\n }\n return (\n <>\n {!!item.reasoningContent && <Think title=\"深度思考\">{item.reasoningContent}</Think>}\n {!!content && (\n <XMarkdown\n openLinksInNewTab\n className={classNames('x-markdown-light', 'xMarkdownStyle')}\n components={{\n code: CodeHighlightComponent,\n agentnavigate: AgentNavigateComponent,\n a: PreviewLinkComponent,\n ...customComponents\n }}\n config={getMarkdownConfig()}\n content={formatMixedContent(content)}\n />\n )}\n </>\n )\n})\n\nconst StepErrorNode = React.memo(({ item, customComponents }: { item: any; customComponents?: Record<string, any> }) => {\n if (!item.errorMessage) return null\n return (\n <XMarkdown\n openLinksInNewTab\n className={classNames('x-markdown-light', 'xMarkdownStyle')}\n components={{ code: CodeHighlightComponent, agentnavigate: AgentNavigateComponent, ...customComponents }}\n config={getMarkdownConfig()}\n content={item.errorMessage}\n />\n )\n})\n\nconst FilesNode = React.memo(({ item }: { item: FilesEvent }) => {\n const chatStore = useChatStore()\n const configState = useSnapshot(chatStore.config)\n const agentState = useSnapshot(chatStore.agent)\n const conversationState = useSnapshot(chatStore.conversation)\n const fileItems = useMemo(() => {\n return (item.files || []).map((file: any) => {\n const previewUrl = configState.services.request.getPreviewUrl(agentState.agentInfo.id, conversationState.active.id, file.path)\n\n let fileType = 'file'\n const ext = file.ext?.toLowerCase() || ''\n if (['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg', 'webp'].includes(ext)) {\n fileType = 'image'\n } else if (['mp4', 'webm', 'ogg', 'mov'].includes(ext)) {\n fileType = 'video'\n } else if (['mp3', 'wav', 'ogg', 'm4a'].includes(ext)) {\n fileType = 'audio'\n }\n\n return {\n ...file,\n src: fileType === 'image' ? previewUrl : file.path,\n type: fileType,\n onClick: () => chatStore.setPreview({ path: file.path, fileName: file.name })\n }\n })\n }, [item.files])\n\n return <FileCard.List style={{ width: '70%' }} items={fileItems} />\n})\n\nexport interface MessageRenderProps {\n message: ConversationMessage\n messageIndex?: number\n loading?: boolean\n onFilePreview?: (file: InputFile) => void\n containerRef?: React.Ref<HTMLDivElement>\n /** message自定义标记渲染组件 */\n customComponents?: ChatLayoutMessageList['customComponents']\n}\n\nexport default React.memo(({ message, messageIndex = -1, loading, containerRef, customComponents }: MessageRenderProps) => {\n const content = message.content || []\n\n if (content.length === 0) return null\n\n return (\n <Flex ref={containerRef} vertical gap={8}>\n {content\n .filter((item) => item.type !== 'a2uiCommand')\n .map((item, index) => {\n if (item.type === 'runStarted') {\n return <RunStartedNode key={`flow-start-${index}`} loading={loading} />\n }\n if (item.type === 'toolCall' || item.type === 'toolResult') {\n return <ToolCallNode key={`tool-call-${(item as any).toolCallId || index}`} item={item} />\n }\n if (item.type === 'text') {\n return <TextNode key={`message-${index}`} item={item} role={message.role} customComponents={customComponents} />\n }\n if (item.type === 'stepError') {\n return <StepErrorNode key={`step-error-${index}`} item={item} customComponents={customComponents} />\n }\n if (item.type === 'files') {\n return <FilesNode key={`files-${index}`} item={item} />\n }\n if (item.type === 'plan') {\n return <A2uiPlanNode key={`plan-${index}`} item={item} />\n }\n return null\n })}\n {messageIndex >= 0 ? <A2uiMessageCards messageIndex={messageIndex} /> : null}\n </Flex>\n )\n})\n","export type ConversationMemberEnum = 'user' | 'agent'\n\nexport enum AgentTypeEnum {\n DEFAULT = 0,\n FLOW = 1\n}\n\nexport enum LibraryTypeEnum {\n DEFAULT = 0\n}\n\nexport const CONV_MODE = {\n PROD: 1,\n DEBUG: 2\n} as const\n","import { proxy } from 'valtio'\n\nexport const flowSpecState = proxy({\n nodes: [] as Array<{\n id: string\n type?: string\n data: {\n input: any[]\n }\n }>\n})\n\nexport function clearNodeAndEdgeStyle() {}\n\nexport function updateNodeAndEdgeStyle(_nodeId: string, _status: 'start' | 'finish' | 'error') {}\n\nexport function setLogPanelOpen(_open: boolean, _executionId?: string) {}\n",".chatHeader {\n padding: 8px 16px;\n border-bottom: 1px solid #eee;\n}\n.chatHeader .chatTitle {\n font-size: 16px;\n font-weight: bold;\n}\n.chatHeader .popover {\n max-height: 500px;\n width: 300px;\n display: flex;\n flex-direction: column;\n padding: 0;\n}\n.chatHeader .popover :global .ant-popover-inner-content {\n min-height: 0;\n display: flex;\n flex-direction: column;\n}\n.conversationListPanel {\n width: 300px;\n max-width: 100%;\n border-right: 1px dashed #eee;\n}\n.conversationListPanel .createConversationButton {\n height: 38px;\n background-color: var(--ant-color-primary-bg);\n border-radius: var(--ant-border-radius-lg);\n color: var(--ant-color-primary);\n font-weight: bold;\n}\n.conversationListPanel .conversations {\n padding: 0 16px;\n}\n.conversationListPanel .conversations :global .ant-conversations-group-title {\n padding: 0;\n}\n.conversationListPanel .conversations :global .ant-conversations-group-title .ant-typography {\n color: #878aab;\n}\n.conversationListPanel .conversations :global .ant-conversations-list .ant-conversations-item {\n padding-left: 16px;\n touch-action: manipulation !important;\n}\n.conversationListPanel .conversations :global .ant-conversations-list .ant-conversations-item .ant-conversations-label {\n color: rgba(0, 0, 0, 0.88);\n}\n.conversationListPanel .conversations :global .ant-conversations-list .ant-conversations-item.ant-conversations-item-active .ant-conversations-label {\n color: var(--ant-color-primary);\n}\n.chatWelcomeWrap {\n height: 100%;\n max-width: 1000px;\n min-width: 320px;\n width: calc(100% - 24px);\n margin: 0 auto;\n}\n.chatWelcomeWrap :global .ant-prompts .ant-prompts-list {\n overflow: auto;\n}\n.chatWelcomeWrap .chatWelcome :global .ant-welcome-icon > img {\n border-radius: 10px;\n max-width: initial;\n}\n.promptItem {\n width: 100%;\n max-width: 100%;\n}\n.promptItem :global .ant-prompts-item {\n max-width: 100%;\n white-space: normal;\n height: auto;\n}\n.runStartedNode {\n padding: 2px 12px;\n border-radius: 4px;\n background: linear-gradient(90deg, transparent 25%, #e6f4ff 50%, transparent 75%);\n background-size: 200% 100%;\n animation: shimmer-bg 2s infinite linear;\n display: flex;\n width: 100px;\n min-height: 28px;\n box-sizing: border-box;\n overflow: hidden;\n}\n.runStartedNode :global .anticon-loading {\n width: 14px;\n height: 14px;\n display: flex;\n align-items: center;\n justify-content: center;\n}\n.runStartedNode :global .anticon-loading svg {\n width: 14px;\n height: 14px;\n}\n@keyframes shimmer-bg {\n 0% {\n background-position: 200% 0;\n }\n 100% {\n background-position: -200% 0;\n }\n}\n.bubbleList {\n width: 100%;\n}\n.bubbleList:global.ant-bubble-list {\n width: 100%;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble-list-scroll-box .ant-bubble-list-scroll-content {\n max-width: 1000px;\n min-width: 320px;\n width: calc(100% - 12px);\n margin: 0 auto;\n padding-right: 0;\n padding-left: 10px;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble {\n padding-top: 8px;\n padding-bottom: 0;\n width: 100%;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble:hover .message-actions {\n opacity: 1;\n pointer-events: auto;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-start {\n padding-inline-end: 0%;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-start .ant-bubble-body {\n width: 100%;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-start .ant-bubble-content {\n background-color: transparent;\n padding: 0;\n padding-bottom: 0;\n min-height: 0;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-start .ant-bubble-footer {\n margin-top: 0;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-end .ant-bubble-content {\n background-color: var(--ant-color-primary-bg, #e6f4ff);\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-end .ant-bubble-content-borderless {\n background-color: transparent;\n}\n.bubbleList:global.ant-bubble-list .ant-bubble.ant-bubble-end .ant-bubble-content-borderless .ant-file-card-list-content {\n padding: 0;\n}\n.messageFooter {\n min-height: 24px;\n width: 100%;\n}\n.messageActions {\n opacity: 0;\n pointer-events: none;\n transition: opacity 0.2s ease;\n}\n.resourceBtn {\n align-items: center;\n gap: 6px;\n padding: 4px 8px;\n font-size: 13px;\n font-weight: 500;\n color: #475569;\n /* text-slate-600 */\n background-color: #f1f5f9;\n /* bg-slate-100/60 */\n border: 1px solid #e2e8f0;\n /* border-slate-200/50 */\n border-radius: 12px;\n /* rounded-xl */\n transition: all 0.3s;\n cursor: pointer;\n}\n.resourceBtnActive {\n background-color: var(--ant-color-primary);\n color: #fff;\n}\n.userInputCollapse {\n width: calc(100% - 24px);\n max-width: 1000px;\n min-width: 320px;\n margin: 0 auto;\n}\n.logoArea {\n margin-bottom: 1.5rem;\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n text-align: center;\n margin-top: 40px;\n}\n.logoArea .logoContainer {\n position: relative;\n margin-bottom: 1.5rem;\n cursor: pointer;\n}\n.logoArea .logoContainer .staticHalo {\n position: absolute;\n inset: 0;\n background-color: var(--ant-color-primary);\n filter: blur(24px);\n opacity: 0.2;\n transition: opacity 700ms;\n border-radius: 9999px;\n}\n.logoArea .logoContainer .logoHoverWrapper {\n position: relative;\n z-index: 10;\n padding: 0.5rem;\n transition: all 500ms ease-out;\n transform: scale(1) translateY(0);\n}\n.logoArea .logoContainer .logoHoverWrapper .logoImage {\n width: 6rem;\n height: 6rem;\n object-fit: contain;\n filter: drop-shadow(0 4px 6px rgba(0, 0, 0, 0.1));\n transition: all 500ms;\n}\n.logoArea .logoContainer:hover .staticHalo {\n opacity: 0.5;\n}\n.logoArea .logoContainer:hover .logoHoverWrapper {\n transform: scale(1.1) translateY(-0.5rem);\n}\n.logoArea .logoContainer:hover .logoImage {\n filter: drop-shadow(0 10px 20px rgba(18, 124, 183, 0.4));\n}\n.logoArea .greetingTitle {\n margin-bottom: 0.75rem;\n font-size: 2.25rem;\n line-height: 2.5rem;\n font-weight: 700;\n letter-spacing: -0.025em;\n color: #1e293b;\n}\n@media (width >= 768px) {\n .logoArea .greetingTitle {\n font-size: 3rem;\n line-height: 1;\n }\n}\n.logoArea .greetingTitle .gradientText {\n color: transparent;\n background-clip: text;\n background-image: linear-gradient(to right, var(--ant-color-primary), #3b82f6);\n}\n.logoArea .greetingSubtitle {\n font-size: 1.125rem;\n line-height: 1.75rem;\n font-weight: 500;\n color: #64748b;\n}\n@media (width >= 768px) {\n .logoArea .greetingSubtitle {\n font-size: 1.25rem;\n line-height: 1.75rem;\n }\n}\n.senderReferenceHeaderTitle:global > .ant-sender-header-title {\n overflow: hidden;\n}\n.senderReferenceHeaderContent {\n padding: 0 !important;\n}\n","import { Prompts, Welcome } from '@ant-design/x-v2'\nimport { RenderWrapper } from '@zero-library/common'\nimport { Avatar, Flex } from 'antd'\nimport classNames from 'classnames'\nimport { useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport type { ChatLayoutWelcomeMessage } from '../../types'\nimport styles from './styles.module.less'\n\nexport default ({ icon = true, title = true, description = true, prompts = true }: ChatLayoutWelcomeMessage) => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n\n const recommendQuestions = useMemo(() => {\n return agentState.agentInfo?.config?.onboarding?.guiding?.map((item, index) => ({\n key: String(index),\n description: item\n }))\n }, [agentState.agentInfo?.config?.onboarding?.guiding])\n\n return (\n <Flex vertical justify=\"center\" className={styles.chatWelcomeWrap}>\n <Welcome\n className={classNames(styles.chatWelcome, 'p-t-32')}\n variant=\"borderless\"\n icon={<RenderWrapper control={icon} DefaultComponent={<Avatar shape=\"square\" size={58} src={agentState.agentInfo?.iconUrl || ''} />} />}\n title={<RenderWrapper control={title} DefaultComponent={`你好,我是${agentState.agentInfo?.name || ''}`} />}\n description={\n <RenderWrapper\n control={description}\n DefaultComponent={<div dangerouslySetInnerHTML={{ __html: agentState.agentInfo?.config?.onboarding?.greeting || '' }}></div>}\n />\n }\n />\n\n {(agentState.agentInfo?.config?.onboarding?.guiding?.length ?? 0) > 0 && (\n <RenderWrapper\n control={prompts}\n DefaultComponent={\n <Prompts\n className={classNames('m-t-16', styles.promptItem)}\n wrap\n onItemClick={(info) => chatStore.sendMessage(info.data.description as string)}\n items={recommendQuestions}\n />\n }\n />\n )}\n </Flex>\n )\n}\n","import { CopyOutlined, DislikeOutlined, FileTextOutlined, LikeOutlined } from '@ant-design/icons'\nimport { Bubble, BubbleProps } from '@ant-design/x-v2'\nimport type { BubbleItemType } from '@ant-design/x-v2/es/bubble'\nimport { copyText, htmlToMarkdown, isBoolean, RenderWrapper, UserAvatar } from '@zero-library/common'\nimport { Button, Flex, GetRef, Typography } from 'antd'\nimport classNames from 'classnames'\nimport { useEffect, useMemo, useRef } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { A2uiRenderer, shouldHideA2uiPlan } from '../../../a2ui-runtime'\nimport MessageRender from '../../components/MessageRender'\nimport { AgentTypeEnum, CONV_MODE, ConversationMemberEnum } from '../../core/constants'\nimport { setLogPanelOpen } from '../../stores/agent-flow.store'\nimport { useChatStore } from '../../stores/Context'\nimport { ChatLayoutMessageList, ConversationMessage, MessageBoxType } from '../../types'\nimport styles from './styles.module.less'\nimport WelcomeItem from './WelcomeItem'\n\nconst { Text } = Typography\n\ninterface RoleContent {\n role: number\n user: ConversationMemberEnum\n placement: BubbleProps['placement']\n avatar?: any\n}\n\nfunction isVisibleContentItem(contentItem: ConversationMessage['content'][number], isMessageLoading: boolean) {\n const isRunStarted = contentItem.type === 'runStarted'\n const isFile = contentItem.type === 'files'\n const isTextWithContent = contentItem.type === 'text' && (!!contentItem.reasoningContent || !!contentItem.messageContent)\n const isToolCall = contentItem.type === 'toolCall' || contentItem.type === 'toolResult'\n const isStepError = contentItem.type === 'stepError' && !!contentItem.errorMessage\n const isA2uiCommand = contentItem.type === 'a2uiCommand'\n const isPlan = contentItem.type === 'plan'\n\n if (!isRunStarted && !isFile && !isTextWithContent && !isToolCall && !isStepError && !isA2uiCommand && !isPlan) {\n return false\n }\n\n if (isPlan && shouldHideA2uiPlan(contentItem)) {\n return false\n }\n\n if (isRunStarted && !isMessageLoading) {\n return false\n }\n\n return true\n}\n\nfunction splitRenderableContents(contents: ConversationMessage['content'], isMessageLoading: boolean) {\n const validContents: ConversationMessage['content'] = []\n const nonFileContents: ConversationMessage['content'] = []\n const fileContents: ConversationMessage['content'] = []\n\n contents.forEach((contentItem) => {\n if (!isVisibleContentItem(contentItem, isMessageLoading)) return\n\n validContents.push(contentItem)\n if (contentItem.type === 'files') {\n fileContents.push(contentItem)\n } else {\n nonFileContents.push(contentItem)\n }\n })\n\n return {\n validContents,\n nonFileContents,\n fileContents,\n hasFiles: fileContents.length > 0,\n isAllFiles: validContents.length > 0 && fileContents.length === validContents.length\n }\n}\n\nfunction createRenderMessage(message: ConversationMessage, content: ReadonlyArray<ConversationMessage['content'][number]>): ConversationMessage {\n return {\n messageId: message.messageId,\n conversationId: message.conversationId,\n executionId: message.executionId,\n role: message.role,\n content: [...content],\n files: message.files ? Array.from(message.files) : undefined,\n feedback: message.feedback,\n params: message.params,\n quoteMsg: message.quoteMsg\n ? {\n ...message.quoteMsg,\n msgFiles: message.quoteMsg.msgFiles ? Array.from(message.quoteMsg.msgFiles) : undefined\n }\n : undefined,\n createdAt: message.createdAt,\n stopFlag: message.stopFlag,\n generating: message.generating\n }\n}\n\nfunction renderMessageContent(\n refKey: string,\n message: ConversationMessage,\n content: ReadonlyArray<ConversationMessage['content'][number]>,\n messageIndex: number,\n loading: boolean,\n messageRefs: React.MutableRefObject<ObjectType<HTMLDivElement>>,\n customComponents?: ChatLayoutMessageList['customComponents']\n) {\n return (\n <MessageRender\n message={createRenderMessage(message, content)}\n messageIndex={messageIndex}\n customComponents={customComponents}\n loading={loading}\n containerRef={(node) => {\n if (node) {\n messageRefs.current[refKey] = node\n } else {\n delete messageRefs.current[refKey]\n }\n }}\n />\n )\n}\n\n/* 🌟 消息列表 */\nexport default ({\n firstMessages = [],\n welcomeMessage = true,\n avatar = { user: false, agent: true },\n agentActions = false,\n customComponents = {}\n}: ChatLayoutMessageList) => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n const conversationState = useSnapshot(chatStore.conversation)\n const configState = useSnapshot(chatStore.config)\n const isDebug = configState.params.convMeta.mode === CONV_MODE.DEBUG\n const isWorkFlow = agentState.agentInfo.agentType === AgentTypeEnum.FLOW\n\n // 构建角色信息和消息显示位置\n const conversationRoles = useMemo(() => {\n const roles = {} as Record<ConversationMemberEnum, RoleContent>\n if (agentState.agentInfo?.id) {\n roles.agent = {\n user: 'agent',\n role: 2,\n placement: 'start'\n // avatar: (isBoolean(avatar) ? avatar : avatar?.agent) ? { src: agentState.agentInfo.iconUrl, icon: <OpenAIOutlined /> } : null\n }\n }\n roles.user = {\n user: 'user',\n role: 1,\n placement: 'end',\n avatar: (isBoolean(avatar) ? avatar : avatar?.user) ? <UserAvatar size={30} avatarSrc=\"\" userName=\"\" /> : null\n }\n\n return roles\n }, [agentState.agentInfo.id])\n\n // 当前会话参数\n const chatMessage = useMemo(\n () => conversationState.messages[conversationState.active.id] || ({} as MessageBoxType),\n [conversationState.messages[conversationState.active.id]]\n )\n const conversationMessages = chatMessage?.message || []\n\n // 获取角色配置\n const getRole = (role: number) => {\n const roleKey = Object.keys(conversationRoles).find((key) => conversationRoles[key].role === role)\n return conversationRoles[roleKey] || ({} as RoleContent)\n }\n const messageRefs = useRef<ObjectType<HTMLDivElement>>({})\n\n const chatRecords = useMemo(() => {\n const chatRecords: BubbleItemType[] = []\n\n conversationMessages.forEach((message, messageIndex) => {\n const role = getRole(message.role)\n const contents = (message.content || []) as ConversationMessage['content']\n const isLeftBubble = role.user === 'agent'\n const isMessageLoading = !!message.generating\n const showLogButton = isDebug && isLeftBubble && !isMessageLoading && isWorkFlow\n const baseKey = `${message.executionId}-${messageIndex}`\n const { validContents, nonFileContents, fileContents, hasFiles, isAllFiles } = splitRenderableContents(contents, isMessageLoading)\n\n if (validContents.length === 0) return\n\n const footerNode = (\n <Flex align=\"center\" gap={8} className={styles.messageFooter}>\n {message.stopFlag && (\n <Text type=\"secondary\" style={{ flex: 'none' }}>\n 已停止\n </Text>\n )}\n <Flex align=\"center\" gap={4}>\n {showLogButton && (\n <Button\n className=\"logBtn\"\n type=\"text\"\n size=\"small\"\n icon={<FileTextOutlined />}\n onClick={() => {\n setLogPanelOpen(true, message.executionId)\n }}\n />\n )}\n {role.user === 'agent' && (\n <>\n <Button\n onClick={async () => {\n const container = messageRefs.current[baseKey]\n if (!container) return\n const markdown = htmlToMarkdown(container.innerHTML) || container.innerText || ''\n copyText(markdown)\n }}\n color=\"default\"\n variant=\"text\"\n size=\"small\"\n icon={<CopyOutlined />}\n />\n <Button\n color={message.feedback === 1 ? 'primary' : 'default'}\n size=\"small\"\n variant=\"text\"\n icon={<LikeOutlined />}\n onClick={() => chatStore.feedback(message.executionId, 1, messageIndex)}\n />\n <Button\n color={message.feedback === 2 ? 'primary' : 'default'}\n size=\"small\"\n variant=\"text\"\n icon={<DislikeOutlined />}\n onClick={() => chatStore.feedback(message.executionId, 2, messageIndex)}\n />\n <RenderWrapper\n control={agentActions}\n ctx={{\n message,\n get dom() {\n return messageRefs.current[baseKey]\n }\n }}\n />\n </>\n )}\n </Flex>\n </Flex>\n )\n\n if (hasFiles && nonFileContents.length > 0) {\n chatRecords.push({\n key: `${baseKey}-text`,\n role: String(role.role),\n placement: role.placement,\n avatar: role.avatar,\n content: renderMessageContent(\n baseKey,\n message as unknown as ConversationMessage,\n nonFileContents,\n messageIndex,\n isMessageLoading,\n messageRefs,\n customComponents\n ),\n footer: footerNode\n })\n\n chatRecords.push({\n key: `${baseKey}-files`,\n role: String(role.role),\n placement: role.placement,\n avatar: role.avatar,\n content: (\n <MessageRender\n message={createRenderMessage(message as unknown as ConversationMessage, fileContents)}\n messageIndex={messageIndex}\n customComponents={customComponents}\n loading={isMessageLoading}\n />\n ),\n variant: 'borderless'\n })\n return\n }\n\n chatRecords.push({\n key: baseKey,\n role: String(role.role),\n placement: role.placement,\n avatar: role.avatar,\n content: renderMessageContent(\n baseKey,\n message as unknown as ConversationMessage,\n validContents,\n messageIndex,\n isMessageLoading,\n messageRefs,\n customComponents\n ),\n footer: footerNode,\n variant: isAllFiles ? 'borderless' : undefined\n })\n })\n\n return chatRecords\n }, [agentActions, chatStore, conversationMessages, conversationRoles, conversationState.active.id, isDebug, isWorkFlow])\n\n const firstMessagesRecord = useMemo(() => {\n return (firstMessages || []).map((firstMessage, index) => {\n const { role, ...args } = firstMessage\n const roleObj = getRole(role)\n\n return {\n key: `firstMessage-${index}`,\n role: roleObj.user,\n placement: roleObj.placement,\n avatar: roleObj.avatar,\n variant: 'borderless',\n ...args\n } as BubbleItemType\n })\n }, [firstMessages, conversationRoles])\n\n const welcomeMessageRecord = useMemo(() => {\n if (!welcomeMessage) return [] as BubbleItemType[]\n return [\n {\n key: 'welcome-message',\n content: <WelcomeItem />,\n variant: 'borderless'\n }\n ] as BubbleItemType[]\n }, [welcomeMessage])\n\n const bubbleListItems = useMemo(() => {\n const list: BubbleItemType[] = []\n list.push(...firstMessagesRecord)\n list.push(...chatRecords)\n if (list.length) {\n return list\n }\n return [...welcomeMessageRecord]\n }, [chatRecords, welcomeMessageRecord, firstMessagesRecord])\n\n const listRef = useRef<GetRef<typeof Bubble.List>>(null)\n // 真实控制是否自动滚动的 ref(不会触发渲染)\n const autoScrollRef = useRef(true)\n const handleScroll = (el: any) => {\n const target = el.target\n const distanceToBottom = target.scrollHeight - target.scrollTop - target.clientHeight\n // 小于 150px 表示接近底部,允许自动滚动\n autoScrollRef.current = distanceToBottom < 90\n }\n useEffect(() => {\n const latestMessage = conversationMessages[conversationMessages?.length - 1]\n if (!latestMessage) return\n\n if (latestMessage.generating) {\n autoScrollRef.current = true\n }\n }, [conversationMessages?.length])\n useEffect(() => {\n const el = listRef.current?.nativeElement\n if (!el || !bubbleListItems.length) return\n\n if (autoScrollRef.current) {\n setTimeout(() => {\n if (autoScrollRef.current) {\n listRef.current?.scrollTo({\n top: 'bottom',\n behavior: 'instant'\n })\n }\n }, 100)\n }\n }, [bubbleListItems])\n\n return (\n <A2uiRenderer messages={conversationMessages}>\n <Bubble.List\n autoScroll={false}\n key={conversationState.active.id}\n ref={listRef}\n items={bubbleListItems}\n className={classNames(styles.bubbleList, 'height-full', 'scroll-fade-in')}\n onScroll={handleScroll}\n />\n </A2uiRenderer>\n )\n}\n","import type { createRequest, RequestConfig } from '@zero-library/common'\nimport { TOKEN_KEY, tokenManager } from '../core/session'\nimport {\n AgentInfo,\n ConversationCreate,\n ConversationMessage,\n ConversationMessageSend,\n ConversationMessagesQuery,\n ConversationsQuery,\n ConversationType,\n FeedbackUpdate,\n InputFile,\n ProviderModel,\n Variable\n} from '../types'\n\ninterface UserInputType {\n inputs: Variable[]\n outputs: Variable[]\n}\n\n/**\n * 创建聊天服务\n * @param request - 请求函数实例\n * @returns 聊天服务对象\n */\nexport const createChatService = (request: ReturnType<typeof createRequest>, config?: RequestConfig) => {\n\n // 获取模型列表\n const fetchModelList = (): Promise<R<ProviderModel[]>> => {\n return request.get(`/providers/models/type/llm`);\n }\n\n // 获取智能体详情\n const fetchAgentInfo = (agentId: string): Promise<R<AgentInfo>> => {\n return request.get(`/agents/${agentId}`)\n }\n\n // 创建会话\n const createConversationId = (params: ConversationCreate): Promise<R<string>> => {\n return request.post(`/agents/${params.agentId}/conversations`, { convMeta: params.convMeta })\n }\n\n // 获取会话列表\n const fetchConversations = (params: ConversationsQuery): Promise<R<ConversationType[]>> => {\n return request.get(`/agents/${params.agentId}/conversations`, { ...params.convMeta })\n }\n\n // 删除会话\n const deleteConversation = (id: string): Promise<R<string>> => {\n return request.delete(`/agents/conversations/${id}`)\n }\n\n // 历史记录\n const fetchMessages = (params: ConversationMessagesQuery): Promise<R<ConversationMessage[]>> => {\n return request.get(`/agents/conversations/${params.conversationId}/messages`)\n }\n\n // 发送消息\n const sendMessageStream = (params: ConversationMessageSend, agentId: string): Promise<R<ConversationMessage[]>> => {\n return request.post(`/agents/${agentId}/chat`, params)\n }\n\n // cancelMessage 取消消息\n const cancelMessage = (executionId: string): Promise<R<string>> => {\n return request.post(`/agents/executions/${executionId}/cancel`)\n }\n\n // 推荐问题\n const getRecommendQuestions = (params: { conversationId: string; messageId: string }): Promise<R<string[]>> => {\n return request.post(`/agents/conversations/${params.conversationId}/messages/recommend`, params)\n }\n\n const getAgentUserInput = (agentId: string): Promise<R<UserInputType>> => {\n return request.get(`/agents/${agentId}/workflow/params`)\n }\n\n /**\n * 更新消息反馈(赞或踩)\n * @param params - 反馈参数,包含消息ID和反馈类型\n */\n const feedbackUpdate = (params: FeedbackUpdate): Promise<R<null>> => {\n return request.put(`/agents/messages/${params.executionId}/feedback`, params)\n }\n\n const chatUpload = (agentId: string, data: FormData, conversationId: string, signal?: AbortSignal): Promise<R<InputFile[]>> => {\n return request.post(`/agents/${agentId}/${conversationId}/files`, data, {\n headers: {\n 'Content-Type': 'multipart/form-data'\n },\n timeout: 300000,\n signal\n })\n }\n\n const getPreviewUrl = (agentId: string, conversationId: string, path: string): string => {\n return `${config?.baseURL}/agents/${agentId}/${conversationId}/files/download?path=${encodeURIComponent(path)}&${TOKEN_KEY}=${tokenManager.get()}`\n }\n\n return {\n fetchModelList,\n fetchAgentInfo,\n createConversationId,\n fetchConversations,\n deleteConversation,\n fetchMessages,\n sendMessageStream,\n cancelMessage,\n getRecommendQuestions,\n getAgentUserInput,\n feedbackUpdate,\n chatUpload,\n getPreviewUrl\n }\n}\n","import { classifyTime, getChatSocketUrl, variablesToObject } from '../core/utils'\n\nimport {\n createRequest,\n deepCopy,\n deepMerge,\n HttpStatus,\n isArray,\n isNullOrUnDef,\n isObject,\n isString,\n shouldRender,\n transform,\n transforms\n} from '@zero-library/common'\nimport { CONV_MODE } from '../core/constants'\nimport { clearNodeAndEdgeStyle, updateNodeAndEdgeStyle } from './agent-flow.store'\n\nimport { ConversationItemType } from '@ant-design/x-v2'\nimport { message as antdMessage, message } from 'antd'\nimport { proxy } from 'valtio'\nimport { AgentTypeEnum } from '../core/constants'\nimport { redirectUrl, TOKEN_KEY, tokenManager } from '../core/session'\nimport { createChatService } from '../services'\nimport {\n A2uiCommandEvent,\n AgentInfo,\n AgentSpec,\n ChatConfig,\n ChatHooks,\n ChatLayout,\n ChatParams,\n ChatServices,\n ConversationMessage,\n ConversationMessageSend,\n ConversationNewTitleEvent,\n ConversationsQuery,\n ConversationType,\n FeedbackUpdate,\n FileUrlType,\n MessageBoxType,\n ProviderModel,\n ReferencesType,\n RequestInstance,\n RunStartedEvent,\n StepErrorEvent,\n StepFinishedEvent,\n StepStartedEvent,\n TextEvent,\n ToolCallEvent,\n ToolResultEvent\n} from '../types'\n\nconst defaultLayout = {\n globalHeader: false,\n conversationList: false,\n preview: true,\n chatHeader: true,\n messageList: true,\n senderHeader: false,\n sender: true,\n senderFooter: false,\n disclaimerNotice: true\n} as ChatLayout\n\n/**\n * 创建聊天状态管理器\n * 使用 Valtio 进行状态管理,包含会话、消息、用户信息等所有聊天相关状态\n * @returns 聊天状态管理器和操作方法\n */\nexport function createChatStore() {\n /** 全局配置对象,包含钩子函数、布局等配置 */\n const config = proxy({\n services: {\n /** WebSocket地址 */\n websocketUrls: ['', ''] as [string, string],\n /** HTTP请求实例 */\n request: {} as RequestInstance\n },\n models: [] as ProviderModel[],\n /** 钩子函数 */\n hooks: {} as ChatHooks,\n layout: {} as ChatLayout,\n loading: false,\n /** 文件预览状态 */\n preview: {\n file: {} as FileUrlType,\n isEdit: false // 未使用\n },\n stream: true,\n params: {\n convMeta: {\n mode: CONV_MODE.DEBUG\n }\n } as ChatParams\n })\n\n /**\n * 获取模型列表\n * 从后端获取可用的模型列表\n */\n const getModels = async () => {\n const { data } = await config.services.request.fetchModelList()\n config.models = data\n if (data?.length) {\n setAgentModel({\n providerName: data[0].providerName,\n modelName: data[0].models[0].modelName,\n reasoning: true\n })\n }\n }\n\n /**\n * 设置服务配置\n * 配置聊天组件所需的HTTP和WebSocket服务\n *\n * @param services - 服务配置对象,包含HTTP和WebSocket配置\n */\n const setServices = ({ http, websocket } = {} as ChatServices) => {\n // 合并默认HTTP配置和用户提供的配置,包括默认的认证头\n const httpConfig = { baseURL: '/luya/v1', headers: { [TOKEN_KEY]: tokenManager.get() }, ...http?.config }\n // 初始化http配置\n const request = createRequest(httpConfig)\n if (config.hooks?.onRequestInterceptor) {\n request.instance.interceptors.request.use(...(config.hooks.onRequestInterceptor as any))\n }\n request.instance.interceptors.response.use(undefined, (err) => {\n if (err?.response?.status === HttpStatus.UNAUTHORIZED) {\n if (config.hooks.onRedirectLogin) {\n config.hooks.onRedirectLogin()\n } else {\n redirectUrl()\n }\n }\n return Promise.reject(err)\n })\n if (config.hooks?.onResponseInterceptor) {\n request.instance.interceptors.response.use(...config.hooks.onResponseInterceptor)\n }\n config.services.request = { ...createChatService(request, httpConfig), ...http?.request }\n\n // 初始化WebSocket配置数组,最多支持两个地址\n config.services.websocketUrls = ['', '']\n if (isArray(websocket?.baseURLs)) {\n // 配置提供的WebSocket地址\n websocket.baseURLs.forEach((baseURL, index) => {\n if (isString(baseURL)) {\n config.services.websocketUrls[index] = getChatSocketUrl(baseURL, websocket?.params || httpConfig.headers)\n }\n })\n } else {\n // 如果未提供WebSocket URL数组,则继承HTTP配置\n const url = getChatSocketUrl(httpConfig.baseURL, websocket?.params || httpConfig.headers)\n config.services.websocketUrls = [url, '']\n }\n }\n /**\n * 设置文件预览\n * @param file - 要预览的文件\n * @param isEdit - 是否为编辑模式\n */\n const setPreview = async (file = {} as FileUrlType, isEdit = false) => {\n const newFile = { ...file, _t: Date.now() } as FileUrlType\n\n const preview = shouldRender(config.layout.preview)\n const canProceed = await config.hooks?.onBeforeFilePreview?.(file, preview)\n if (canProceed === false) {\n return\n }\n if (preview) {\n config.preview = {\n file: newFile,\n isEdit\n }\n } else {\n if ((file as FileUrlType)?.fileUrl) {\n window.open((file as FileUrlType).fileUrl, '_blank')\n }\n }\n config.hooks?.onAfterFilePreview?.(file, preview)\n }\n\n /**\n * 设置参数\n * @param params - 参数对象\n */\n const setParams = (params?: ObjectType<any>) => {\n if (isObject(params)) {\n Object.assign(config.params, params)\n }\n }\n\n /**\n * 设置布局配置\n * @param layout - 布局配置\n */\n const setLayout = (layout: Partial<ChatLayout>) => {\n config.layout = deepMerge(defaultLayout, layout)\n }\n\n /**\n * 设置生命周期钩子函数\n * @param hooks - 钩子函数配置\n */\n const setHooks = (hooks = {} as ChatHooks) => {\n config.hooks = hooks\n }\n\n /** 智能体信息 */\n const agent = proxy({\n /** 当前智能体 */\n agentInfo: {} as AgentInfo,\n model: {\n modelName: \"\",\n providerName: \"\",\n reasoning: true\n } as AgentSpec['model'],\n /** 智能体加载状态 */\n loading: false\n })\n\n const setAgentModel = (model: AgentSpec['model']) => {\n agent.model = model\n }\n\n const getUserInput = async (agentId: string) => {\n agent.loading = true\n try {\n const res = await config.services.request.getAgentUserInput(agentId)\n if (res.data?.inputs && agent.agentInfo.userInput?.length === 0) {\n agent.agentInfo.userInput = res.data.inputs.filter((item) => item.enableEdit)\n }\n } finally {\n agent.loading = false\n }\n }\n\n const setAgent = (agentInfo: AgentInfo) => {\n agent.agentInfo = agentInfo\n }\n\n const setUserInput = (userInput: AgentInfo['userInput']) => {\n if (config.params?.convMeta?.mode === CONV_MODE.PROD && agent.agentInfo.agentType === AgentTypeEnum.FLOW) {\n getUserInput(agent.agentInfo.id)\n } else if (agent.agentInfo.userInput) {\n agent.agentInfo.userInput = userInput\n }\n }\n\n /** 获取智能体详情 */\n const getAgentInfo = async (id: string) => {\n config.loading = true\n if (agent.agentInfo.id === id) return\n try {\n const { data } = await config.services.request.fetchAgentInfo(id || '')\n agent.agentInfo = data as AgentInfo\n } finally {\n config.loading = false\n }\n }\n\n /** 历史会话管理 */\n const conversations = proxy({\n /** 会话列表数据 */\n list: {\n items: [] as ConversationItemType[]\n },\n /** 当前会话索引,创建会话时更新,促使页面更新会话列表 */\n updateIndex: 0,\n /** 获取会话列表的加载状态 */\n loading: false,\n /** 编辑会话的加载状态 */\n editLoading: false\n })\n\n /** 获取会话列表 */\n const getConversations = async (agentId: ConversationsQuery['agentId']) => {\n try {\n conversations.loading = true\n const { data } = await config.services.request.fetchConversations({\n agentId,\n convMeta: config.params.convMeta\n })\n // 防止会话接口请求前就已经切换了智能体\n if (agent.agentInfo.id !== agentId) return\n const resultItems = transforms<ConversationType, ConversationItemType>(data || [], {\n key: 'id',\n id: 'id',\n label: 'title',\n spec: 'spec',\n group: (c): string => {\n return classifyTime(c.updatedAt)\n }\n })\n conversations.list.items = resultItems\n } finally {\n conversations.loading = false\n }\n }\n\n /** 删除会话 */\n const delConversation = async (conversationId: ConversationType['id']) => {\n try {\n const canProceed = await config.hooks?.onBeforeDelConversation?.(conversationId)\n if (canProceed === false) return\n conversations.editLoading = true\n await config.services.request.deleteConversation(conversationId)\n antdMessage.success('删除成功')\n conversations.list.items = conversations.list.items.filter((item) => item.key !== conversationId)\n delete conversation.messages[conversationId]\n if (conversation.active.id === conversationId) {\n createConversation()\n }\n config.hooks?.onAfterDelConversation?.(conversationId, conversation.active.id === conversationId)\n } finally {\n conversations.editLoading = false\n }\n }\n\n const initConversation = async (config: ChatConfig) => {\n await getConversations(config.agent.id)\n if (config?.conversationId) {\n switchConversation(config.conversationId)\n } else {\n if (config.conversationStrategy === 1) {\n switchConversation(conversations.list.items[0].key)\n } else {\n createConversation()\n }\n }\n }\n\n const switchConversation = async (id: ConversationType['id']) => {\n const conversationId = String(id)\n const previewUrl = config.services.request.getPreviewUrl(agent.agentInfo.id, conversationId, '')\n\n if (conversation.active.id === conversationId) return\n const canProceed = await config.hooks?.onBeforeSwitchConversation?.(conversationId)\n if (canProceed === false) {\n throw new Error('操作被阻止')\n }\n // 初始化会话信息\n conversation.active.id = conversationId\n\n // 更新会话的 spec\n const targetConversation = conversations.list.items.find((item) => item.key === conversationId) as ConversationItemType\n if (targetConversation) {\n conversation.active.spec = targetConversation.spec\n } else {\n conversation.active.spec = {} as AgentSpec\n }\n await getMessages(conversationId)\n // 关闭文件预览\n await setPreview()\n config.hooks?.onAfterSwitchConversation?.(conversationId)\n }\n\n const setConversationSpec = (spec: AgentSpec) => {\n if (isObject(spec)) {\n conversation.active.spec = spec\n const currentConversation = conversations.list.items.find((item) => item.id === conversation.active.id)\n if (currentConversation) {\n currentConversation.spec = spec\n }\n }\n }\n\n /** 更新会话列表 */\n const updateConversations = (data: ConversationType) => {\n const item = transform<ConversationType, ConversationItemType>(data, {\n key: 'id',\n id: 'id',\n label: 'title',\n spec: 'spec',\n group: (c): string => {\n return classifyTime(c.updatedAt)\n }\n })\n conversations.list.items = [item, ...conversations.list.items.filter((i) => i.key !== item.key)]\n }\n\n /** 创建会话 */\n const createConversation = async () => {\n if (!agent.agentInfo.id) return\n const { data } = await config.services.request.createConversationId({ agentId: agent.agentInfo.id, convMeta: config.params.convMeta })\n\n const newSpec = {\n skills: { items: [] },\n knowledge: { items: [] }\n } as AgentSpec\n\n updateConversations({\n id: data || '',\n title: '',\n agentId: agent.agentInfo?.id || '',\n updatedAt: new Date().toISOString(),\n spec: newSpec\n })\n await switchConversation(data)\n\n // 触发新建会话钩子\n config.hooks?.onAfterSwitchConversation?.(data)\n }\n\n /** 当前会话管理 */\n const conversation = proxy({\n /** 当前激活的会话信息 */\n active: {\n id: '',\n spec: {} as AgentSpec\n },\n /** 每个会话的消息存储,以会话ID为键 */\n messages: {} as { [key: ConversationType['id']]: MessageBoxType },\n\n /** 消息反馈状态 */\n feedback: {\n /** 反馈操作加载状态 */\n loading: false\n }\n })\n\n const setReferences = async (references?: ReferencesType) => {\n const canProceed = await config.hooks?.onBeforeSetReferences?.(references)\n if (canProceed === false) {\n throw new Error('操作被阻止')\n }\n conversation.messages[conversation.active.id].references = references\n config.hooks?.onAfterSetReferences?.(references)\n }\n\n /** 更新会话内容 */\n const setContent = (content?: ConversationMessageSend['message']) => {\n conversation.messages[conversation.active.id].content = content\n }\n\n const setContentParams = (params?: MessageBoxType['params']) => {\n conversation.messages[conversation.active.id].params = params\n }\n\n /** 更新文件列表 */\n const setFileList = (files = [] as ConversationMessageSend['files']) => {\n conversation.messages[conversation.active.id].files = files\n }\n\n /** 更新头部展开状态 */\n const setHeaderOpen = (headerOpen: MessageBoxType['headerOpen']) => {\n conversation.messages[conversation.active.id].headerOpen = headerOpen\n }\n\n const feedback = async (\n executionId: FeedbackUpdate['executionId'],\n feedback: FeedbackUpdate['feedback'],\n index: number\n ) => {\n try {\n conversation.feedback.loading = true\n await config.services.request.feedbackUpdate({ executionId, feedback })\n message.success('感谢您的反馈')\n conversation.messages[conversation.active.id].message[index].feedback = feedback\n } finally {\n conversation.feedback.loading = false\n }\n }\n\n /**\n * 初始化会话消息状态\n * @param conversationId - 会话ID\n */\n const setInitMessage = async (conversationId: ConversationType['id']) => {\n conversation.messages[conversationId] = {\n /** 输入框内容 */\n content: '',\n /** 上传文件列表 */\n files: [] as ConversationMessageSend['files'],\n /** 头部展开状态 */\n headerOpen: false,\n /** 消息发送/接收加载状态 */\n loading: false,\n /** 消息列表 */\n message: []\n }\n }\n\n /** 获取会话消息列表 */\n const getMessages = async (conversationId: ConversationType['id']) => {\n const canProceed = await config.hooks?.onBeforeInitMessages?.(conversationId)\n if (canProceed === false) {\n throw new Error('操作被阻止')\n }\n // 初始化消息列表\n if (!conversation.messages[conversationId]) {\n setInitMessage(conversationId)\n }\n if (conversation.messages[conversationId].message.length === 0) {\n // 接口请求-获取会话消息列表\n const { data } = await config.services.request.fetchMessages({\n ...config.params.convMeta,\n conversationId\n })\n conversation.messages[conversationId].message = []\n if (data?.length) {\n data.forEach((msg) => {\n processMessageContent(msg)\n })\n finalizeHistoryMessages(conversationId)\n normalizeMessagesByExecutionAndRole(conversation.messages[conversationId].message)\n }\n }\n config.hooks?.onAfterInitMessages?.(conversation.messages[conversationId].message)\n config.hooks?.onAfterInit?.()\n }\n\n function findExecutionMsgIndex(msg: Pick<ConversationMessage, 'executionId' | 'role'>, messages?: ConversationMessage[]) {\n return (messages || []).findLastIndex((item) => item.executionId === msg.executionId && item.role === msg.role)\n }\n\n function normalizeMessagesByExecutionAndRole(messages?: ConversationMessage[]) {\n if (!messages?.length) return\n\n const mergedMessages: ConversationMessage[] = []\n const groupedMessageIndex = new Map<string, number>()\n\n messages.forEach((item) => {\n const key = `${item.executionId}-${item.role}`\n const existedIndex = groupedMessageIndex.get(key)\n\n if (isNullOrUnDef(existedIndex)) {\n mergedMessages.push({\n ...item,\n content: [...(item.content || [])],\n files: item.files ? [...item.files] : item.files\n })\n groupedMessageIndex.set(key, mergedMessages.length - 1)\n return\n }\n\n const target = mergedMessages[existedIndex]\n target.content = [...(target.content || []), ...(item.content || [])]\n if ((!target.files || target.files.length === 0) && item.files?.length) {\n target.files = [...item.files]\n }\n if (item.generating !== undefined) {\n target.generating = item.generating\n }\n if (item.stopFlag) {\n target.stopFlag = true\n }\n if (item.feedback !== undefined) {\n target.feedback = item.feedback\n }\n if (item.params !== undefined) {\n target.params = item.params\n }\n if (item.quoteMsg !== undefined) {\n target.quoteMsg = item.quoteMsg\n }\n if (!target.createdAt && item.createdAt) {\n target.createdAt = item.createdAt\n }\n if (!target.messageId && item.messageId) {\n target.messageId = item.messageId\n }\n })\n\n if (mergedMessages.length !== messages.length) {\n messages.splice(0, messages.length, ...mergedMessages)\n }\n }\n\n function finalizeHistoryMessages(conversationId: string) {\n const currentConversation = conversation.messages[conversationId]\n if (!currentConversation?.message) return\n\n currentConversation.loading = false\n currentConversation.message.forEach((item) => {\n item.generating = false\n })\n }\n\n /**\n * 消息回调\n * 处理思维链消息\n * @param msg - 步骤消息\n */\n function startCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n // 未初始化消息列表\n if (!messages) return\n const idx = findExecutionMsgIndex(msg, messages)\n\n const contentItem = msg.content[0] as RunStartedEvent\n if (contentItem.type !== 'runStarted') return\n\n if (idx === -1) {\n const finalMsg = {\n ...msg,\n content: [contentItem],\n generating: true\n }\n // 未初始化消息列表\n messages.push(finalMsg)\n\n // 更新会话的创建时间updatedAt,并重新归类分组\n const targetConversation = conversations.list.items.find((item) => item.id === msg.conversationId)\n if (targetConversation && msg.createdAt) {\n updateConversations({\n ...targetConversation,\n id: targetConversation.id as string,\n title: targetConversation.label as string,\n updatedAt: msg.createdAt\n })\n }\n } else {\n const prevContent = messages[idx]?.content || []\n messages[idx].content = [...prevContent, contentItem]\n }\n conversation.messages[msg.conversationId].loading = true\n }\n\n /**\n * 消息内容回调\n * 处理流式消息内容的追加\n * @param msg - 消息内容\n */\n function textCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n const idx = findExecutionMsgIndex(msg, messages)\n const contents = idx !== -1 && messages[idx] ? messages[idx].content || [] : []\n\n const nextContent = msg.content[0] as TextEvent\n if (nextContent.type !== 'text') return\n const normalizedNextContent: TextEvent = { ...nextContent }\n\n if (idx === -1) {\n const finalMsg = {\n ...msg,\n content: [normalizedNextContent],\n generating: true\n }\n messages.push(finalMsg)\n } else {\n const lastContent = contents[contents.length - 1]\n\n if (lastContent?.type === 'text') {\n const lastTextContent = lastContent as TextEvent\n const mergedMessageContent = (lastTextContent.messageContent || '') + (normalizedNextContent.messageContent || '')\n const mergedReasoningContent = nextContent.reasoningContent\n ? (lastTextContent.reasoningContent || '') + nextContent.reasoningContent\n : lastTextContent.reasoningContent\n const nextTextContent: TextEvent = {\n ...lastTextContent,\n messageContent: mergedMessageContent,\n reasoningContent: mergedReasoningContent\n }\n messages[idx].content = [...contents.slice(0, -1), nextTextContent]\n } else {\n messages[idx].content = [...contents, normalizedNextContent]\n }\n }\n conversation.messages[msg.conversationId].loading = true\n }\n\n /**\n * 节点开始消息回调\n * 处理节点开始状态更新\n * @param msg - 节点开始消息\n */\n function stepStartedCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n const idx = findExecutionMsgIndex(msg, messages)\n const contentItem = msg.content[0] as StepStartedEvent\n conversation.messages[msg.conversationId].loading = true\n\n if (idx !== -1 && messages[idx]) {\n const contentList = messages[idx].content || []\n const runStartedIndex = contentList.findIndex((item) => item.type === 'runStarted')\n const runStartedItem = runStartedIndex !== -1 ? (contentList[runStartedIndex] as RunStartedEvent | undefined) : undefined\n if (runStartedItem && contentItem.title) {\n const nextRunStartedItem: RunStartedEvent = { ...runStartedItem, title: contentItem.title }\n messages[idx].content = contentList.map((item, i) => (i === runStartedIndex ? nextRunStartedItem : item))\n }\n }\n\n const nodeId = contentItem.stepId\n if (nodeId && config.params.convMeta.mode === CONV_MODE.DEBUG && agent.agentInfo.agentType === AgentTypeEnum.FLOW) {\n updateNodeAndEdgeStyle(nodeId, 'start')\n }\n }\n\n /**\n * 节点结束消息回调\n * 处理节点结束状态更新\n * @param msg - 节点结束消息\n */\n function stepFinishedCallback(msg: ConversationMessage) {\n conversation.messages[msg.conversationId].loading = true\n const nodeId = (msg.content[0] as StepFinishedEvent).stepId\n if (nodeId && config.params.convMeta.mode === CONV_MODE.DEBUG && agent.agentInfo.agentType === AgentTypeEnum.FLOW) {\n updateNodeAndEdgeStyle(nodeId, 'finish')\n }\n }\n\n /**\n * 节点错误消息回调\n * 处理节点错误状态更新\n * @param msg - 节点错误消息\n */\n function stepErrCallback(msg: ConversationMessage) {\n conversation.messages[msg.conversationId].loading = false\n const messages = conversation.messages[msg.conversationId]?.message\n if (messages) {\n const idx = findExecutionMsgIndex(msg, messages)\n const contentItem = msg.content[0] as StepErrorEvent\n\n messages.forEach((item) => {\n if (item.executionId === msg.executionId) {\n item.generating = false\n }\n })\n\n if (idx !== -1) {\n messages[idx].generating = false\n }\n\n if (idx !== -1) {\n const prevContent = messages[idx]?.content || []\n messages[idx].content = [...prevContent, contentItem]\n } else {\n const finalMsg = { ...msg }\n finalMsg.generating = false\n messages.push(finalMsg)\n }\n }\n const nodeId = (msg.content[0] as StepErrorEvent).stepId\n if (nodeId && config.params.convMeta.mode === CONV_MODE.DEBUG && agent.agentInfo.agentType === AgentTypeEnum.FLOW) {\n updateNodeAndEdgeStyle(nodeId, 'error')\n }\n }\n\n function doneCallback(msg: ConversationMessage) {\n conversation.messages[msg.conversationId].loading = false\n const messages = conversation.messages[msg.conversationId]?.message\n if (messages) {\n messages.forEach((item) => {\n if (item.executionId === msg.executionId) {\n item.generating = false\n }\n })\n }\n }\n\n function titleCallback(msg: ConversationMessage) {\n // 更新conversations中list的items中对应conversationId的title\n const content = msg.content[0] as ConversationNewTitleEvent\n if (content.type !== 'conversationNewTitle') return\n\n const title = content.title || ''\n const conversationId = msg.conversationId || ''\n if (content && conversations.list.items.length) {\n const idx = conversations.list.items.findIndex((item) => item.id === conversationId)\n if (idx === -1) return\n conversations.list.items[idx].label = title\n }\n }\n\n /**\n * 工具调用消息回调\n * @param msg - 工具调用消息\n */\n function toolCallCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n // 未初始化消息列表\n if (!messages) return\n // 优先通过 toolCallId 查找已存在的 message\n let idx = -1\n const contentItem = msg.content[0] as ToolCallEvent\n if (contentItem.type !== 'toolCall') return\n\n if (contentItem.toolCallId) {\n idx = messages.findLastIndex((m) => m.content?.some((c) => c.type === 'toolCall' && (c as ToolCallEvent).toolCallId === contentItem.toolCallId))\n }\n\n if (idx === -1) {\n idx = findExecutionMsgIndex(msg, messages)\n }\n\n if (idx === -1) {\n // 新消息\n const finalMsg = { ...msg, generating: true }\n messages.push(finalMsg)\n } else {\n const contents = messages[idx].content\n // 查找是否已存在该 toolCallId 的 item\n const existingItemIndex = contents.findIndex(\n (item) => item.type === 'toolCall' && (item as ToolCallEvent).toolCallId === contentItem.toolCallId\n )\n\n // 追加 args\n if (existingItemIndex !== -1) {\n const existingItem = contents[existingItemIndex] as ToolCallEvent & { arguments?: any }\n const newContent = contentItem.content || (contentItem as any).arguments\n\n const nextItem: ToolCallEvent & { arguments?: any } = { ...existingItem }\n if (typeof newContent === 'string') {\n nextItem.content = (existingItem.content || '') + newContent\n } else if (newContent !== undefined) {\n nextItem.arguments = newContent\n }\n\n if (contentItem.toolName) {\n nextItem.toolName = contentItem.toolName\n }\n if (contentItem.title) {\n nextItem.title = contentItem.title\n }\n if (contentItem.status) {\n nextItem.status = contentItem.status\n }\n messages[idx].content = contents.map((item, i) => (i === existingItemIndex ? nextItem : item))\n } else {\n messages[idx].content = [...contents, contentItem]\n }\n }\n conversation.messages[msg.conversationId].loading = true\n }\n\n /**\n * 工具结果消息回调\n * @param msg - 工具结果消息\n */\n function toolResultCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n // 未初始化消息列表\n if (!messages) return\n\n const contentItem = msg.content[0] as ToolResultEvent\n if (contentItem.type !== 'toolResult') return\n\n // 优先通过 toolCallId 查找\n let idx = -1\n if (contentItem.toolCallId) {\n idx = messages.findLastIndex((m) => m.content?.some((c) => c.type === 'toolCall' && (c as ToolCallEvent).toolCallId === contentItem.toolCallId))\n }\n\n if (idx === -1) {\n idx = findExecutionMsgIndex(msg, messages)\n }\n\n if (idx === -1) return\n\n const contents = messages[idx].content\n\n // 查找对应的 toolCall item\n const toolCallIndex = contents.findIndex((item) => item.type === 'toolCall' && (item as ToolCallEvent).toolCallId === contentItem.toolCallId)\n\n if (toolCallIndex !== -1) {\n // 合并结果到 toolCall item\n const toolCallItem = contents[toolCallIndex] as ToolCallEvent & {\n result?: any\n errorMessage?: string\n duration?: number\n }\n const nextToolCallItem: ToolCallEvent & {\n result?: any\n errorMessage?: string\n duration?: number\n } = {\n ...toolCallItem,\n result: (contentItem as any).result ?? contentItem.content\n }\n if (contentItem.status) {\n nextToolCallItem.status = contentItem.status\n }\n if (contentItem.errorMessage) {\n nextToolCallItem.errorMessage = contentItem.errorMessage\n }\n if (contentItem.duration) {\n nextToolCallItem.duration = contentItem.duration\n }\n if (contentItem.title) {\n nextToolCallItem.title = contentItem.title\n }\n messages[idx].content = contents.map((item, i) => (i === toolCallIndex ? nextToolCallItem : item))\n } else {\n // 如果没找到对应的 toolCall(理论上不应该发生),作为单独的 item 添加\n messages[idx].content = [...contents, contentItem]\n }\n conversation.messages[msg.conversationId].loading = true\n }\n\n /**\n * A2UI 命令消息回调\n * @param msg - A2UI 命令消息\n */\n function a2uiCommandCallback(msg: ConversationMessage) {\n const messages = conversation.messages[msg.conversationId]?.message\n if (!messages) return\n const idx = findExecutionMsgIndex(msg, messages)\n const contentItem = msg.content[0] as A2uiCommandEvent\n if (contentItem.type !== 'a2uiCommand') return\n\n if (idx === -1) {\n const finalMsg = { ...msg, generating: true }\n messages.push(finalMsg)\n } else {\n const prevContent = messages[idx]?.content || []\n messages[idx].content = [...prevContent, contentItem]\n }\n conversation.messages[msg.conversationId].loading = true\n }\n\n /**\n * 处理消息内容分发\n */\n function processSingleMessageContent(newMessage: ConversationMessage) {\n switch (newMessage.content[0].type) {\n case 'runStarted':\n startCallback(newMessage)\n break\n case 'text':\n textCallback(newMessage)\n break\n case 'stepStarted':\n stepStartedCallback(newMessage)\n break\n case 'stepFinished':\n stepFinishedCallback(newMessage)\n break\n case 'stepError':\n stepErrCallback(newMessage)\n break\n case 'runFinished':\n case 'runStopped':\n doneCallback(newMessage)\n break\n case 'conversationNewTitle':\n titleCallback(newMessage)\n break\n case 'toolCall':\n toolCallCallback(newMessage)\n break\n case 'toolResult':\n toolResultCallback(newMessage)\n break\n case 'a2uiCommand':\n a2uiCommandCallback(newMessage)\n break\n default: {\n const messages = conversation.messages[newMessage.conversationId]?.message\n if (!messages) return\n const idx = findExecutionMsgIndex(newMessage, messages)\n if (idx === -1) {\n const finalMsg = { ...newMessage, generating: true }\n messages.push(finalMsg)\n } else {\n const prevContent = messages[idx]?.content || []\n messages[idx].content = [...prevContent, newMessage.content[0]]\n }\n conversation.messages[newMessage.conversationId].loading = true\n break\n }\n }\n }\n\n function processMessageContent(newMessage: ConversationMessage) {\n const contentList = Array.isArray(newMessage.content) ? newMessage.content : []\n\n if (contentList.length === 0) {\n const messages = conversation.messages[newMessage.conversationId]?.message\n if (!messages) return\n\n const idx = findExecutionMsgIndex(newMessage, messages)\n if (idx === -1) {\n messages.push({ ...newMessage })\n } else {\n const prevContent = messages[idx]?.content || []\n messages[idx] = {\n ...messages[idx],\n ...newMessage,\n content: prevContent\n }\n }\n\n normalizeMessagesByExecutionAndRole(messages)\n return\n }\n\n contentList.forEach((contentItem) => {\n processSingleMessageContent({\n ...newMessage,\n content: [contentItem]\n })\n })\n\n normalizeMessagesByExecutionAndRole(conversation.messages[newMessage.conversationId]?.message)\n }\n\n function isStoppedIncomingMessage(newMessage: ConversationMessage) {\n const messages = conversation.messages[newMessage.conversationId]?.message\n if (!messages) return false\n\n return messages.some((item) => item.stopFlag && item.executionId === newMessage.executionId)\n }\n\n /**\n * 接收WebSocket消息的统一入口\n * 根据消息类型分发到不同的处理函数\n * @param newMessage - 新消息对象\n */\n const acceptMessage = async (newMessage: ConversationMessage) => {\n const conversationId = newMessage.conversationId\n if (!conversation.messages[conversationId]?.message) return\n const canProceed = await config.hooks?.onBeforeAcceptMessage?.(newMessage)\n if (canProceed === false) {\n throw new Error('操作被阻止')\n }\n if (isStoppedIncomingMessage(newMessage)) {\n conversation.messages[conversationId].loading = false\n return\n }\n processMessageContent(newMessage)\n }\n\n const sendMessage = async (\n message?: ConversationMessageSend['message'],\n files = [] as ConversationMessageSend['files'],\n params?: ObjectType<any>\n ) => {\n const conversationId = conversation.active.id\n if (conversation.messages[conversationId].loading) return\n let msgContent: ConversationMessageSend['message'] = ''\n const references = conversation.messages[conversationId].references\n if (message) {\n msgContent = message\n } else {\n if (references?.type === 1 && references?.content?.msgContent) {\n msgContent = references.content.msgContent + '\\n'\n }\n msgContent = msgContent + conversation.messages[conversationId].content!\n }\n if (!msgContent) return\n\n const canProceed = await config.hooks?.onBeforeSend?.(msgContent, files || [])\n if (canProceed === false) return\n\n // 校验 userInput\n if (agent.agentInfo.userInput?.length) {\n const invalid = agent.agentInfo.userInput.some((item) => {\n const isRequired = item.rules?.some((r) => r.type === 'required')\n if (isRequired) {\n if (item.type === 'BOOLEAN') {\n return isNullOrUnDef(item.value)\n }\n return isNullOrUnDef(item.value) || item.value === ''\n }\n return false\n })\n if (invalid) {\n antdMessage.error('请检查输入参数')\n return\n }\n }\n\n conversation.messages[conversationId].loading = true\n\n // 如果当前会话没有标题(新创建的隐式会话),则给一个默认标题,使其在发送消息后显示在列表中\n const idx = conversations.list.items.findIndex((item) => item.id === conversationId)\n if (idx !== -1 && !conversations.list.items[idx].label) {\n conversations.list.items[idx].label = '新会话'\n }\n\n const sendParams = {\n conversationId,\n message: msgContent,\n convMeta: config.params.convMeta,\n files: conversation.messages[conversationId].files,\n params,\n spec: {\n ...conversation.active.spec,\n model: agent.model\n },\n stream: true,\n responseMode: 2\n } as ConversationMessageSend\n\n // 参数合并\n const extraParams = deepCopy(config.params?.params || {})\n const userInputParams = variablesToObject(agent.agentInfo.userInput || [])\n Object.assign(extraParams, userInputParams)\n sendParams.params = extraParams\n\n if (!message) {\n setContent('')\n setContentParams()\n setFileList([])\n setReferences()\n setHeaderOpen(false)\n clearNodeAndEdgeStyle()\n }\n try {\n await config.services.request.sendMessageStream(sendParams, agent.agentInfo?.id || '')\n config.hooks?.onAfterSend?.()\n } finally {\n // loading关闭由websocket消息执行\n // conversation.messages[conversationId].loading = false\n }\n }\n\n // 取消接收消息\n const cancelReceive = async () => {\n const messages = conversation.messages[conversation.active.id].message\n if (messages.length > 0) {\n const lastMsg = messages[messages.length - 1]\n if (lastMsg.executionId) {\n await config.services.request.cancelMessage(lastMsg.executionId)\n\n messages.forEach((item) => {\n if (item.executionId === lastMsg.executionId) {\n item.generating = false\n item.stopFlag = true\n // 将未完成的 toolCall 状态标记为失败,避免一直 loading\n if (item.content && Array.isArray(item.content)) {\n item.content.forEach((contentItem: any) => {\n if (contentItem.type === 'toolCall' && contentItem.status !== 'success' && contentItem.status !== 'error') {\n contentItem.status = 'error'\n }\n })\n }\n }\n })\n } else {\n lastMsg.stopFlag = true\n lastMsg.generating = false\n }\n }\n conversation.messages[conversation.active.id].loading = false\n }\n\n return {\n /** 获取模型列表 */\n getModels,\n /** 全局配置对象 */\n config,\n /** 设置服务配置 */\n setServices,\n /** 智能体状态 */\n agent,\n /** 设置智能体模型 */\n setAgentModel,\n /** 设置文件预览 */\n setPreview,\n /** 设置参数 */\n setParams,\n /** 设置布局配置 */\n setLayout,\n /** 设置生命周期钩子 */\n setHooks,\n /** 获取智能体详情 */\n getAgentInfo,\n /** 设置智能体 */\n setAgent,\n /** 设置智能体用户输入 */\n setUserInput,\n /** 设置会话配置 */\n setConversationSpec,\n /** 历史会话状态 */\n conversations,\n /** 获取会话列表 */\n getConversations,\n /** 删除会话 */\n delConversation,\n /** 设置内容参数,透传大模型后清空 */\n setContentParams,\n /** 当前会话状态 */\n conversation,\n /** 设置引用消息 */\n setReferences,\n /** 设置消息内容 */\n setContent,\n /** 设置文件列表 */\n setFileList,\n /** 设置头部展开状态 */\n setHeaderOpen,\n /** 创建新会话 */\n createConversation,\n /** 切换会话 */\n switchConversation,\n /** 初始化会话 */\n initConversation,\n /** 发送消息 */\n sendMessage,\n /** 取消接收 */\n cancelReceive,\n /** 接收消息 */\n acceptMessage,\n /** 获取智能体用户输入 */\n getUserInput,\n /** 消息反馈 */\n feedback\n }\n}\n","import { DeleteOutlined, RedoOutlined } from '@ant-design/icons'\nimport { Conversations, ConversationsProps } from '@ant-design/x-v2'\nimport type { ItemType } from '@ant-design/x-v2/es/conversations/interface'\nimport { Empty, Spin } from 'antd'\nimport { useMemo } from 'react'\nimport InfiniteScroll from 'react-infinite-scroll-component'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\n\nexport default () => {\n const chatStore = useChatStore()\n const conversationsState = useSnapshot(chatStore.conversations)\n const conversationState = useSnapshot(chatStore.conversation)\n\n const conversationList = useMemo(() => {\n return conversationsState.list.items.filter((item) => item.label)\n }, [conversationsState.list.items])\n\n const menuConfig: ConversationsProps['menu'] = (conversation) => ({\n items: [\n {\n label: '删除',\n key: 'deleteChat',\n icon: <DeleteOutlined />,\n danger: true\n }\n ],\n onClick: (itemInfo) => {\n itemInfo.domEvent.stopPropagation()\n if (itemInfo.key === 'deleteChat') {\n chatStore.delConversation(conversation.key)\n }\n }\n })\n\n return (\n <>\n <div className=\"height-full scroll-fade-in\" id=\"scrollableDiv\">\n {conversationList.length ? (\n <InfiniteScroll\n dataLength={conversationList.length}\n hasMore={false}\n next={() => {\n console.log('next')\n }}\n loader={\n <div className=\"text-center\">\n <Spin indicator={<RedoOutlined spin />} size=\"small\" />\n </div>\n }\n style={{ overflow: 'hidden' }}\n scrollableTarget=\"scrollableDiv\" // 👈 指定滚动容器\n >\n <Conversations\n className={styles.conversations}\n items={conversationList as ItemType[]}\n activeKey={conversationState.active.id}\n onActiveChange={async (id) => chatStore.switchConversation(id as string)}\n groupable\n menu={menuConfig}\n />\n </InfiniteScroll>\n ) : (\n <Empty description=\"暂无会话记录\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n )}\n </div>\n </>\n )\n}\n","import { CloseOutlined, CommentOutlined, PlusOutlined } from '@ant-design/icons'\nimport { RenderWrapper } from '@zero-library/common'\nimport { Avatar, Button, Flex, Popover, Space } from 'antd'\nimport classNames from 'classnames'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport { ChatLayoutHeader } from '../../types'\nimport ConversationList from './ConversationList'\nimport styles from './styles.module.less'\n\nexport default ({ title = true, avatar = true, closeBtn = false, newConversationBtn = true, conversationListBtn = true }: ChatLayoutHeader) => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n const configState = useSnapshot(chatStore.config)\n return (\n <>\n <Flex justify=\"space-between\" align=\"center\" className={classNames(styles.chatHeader, 'zero-chat-header')}>\n <Flex gap={4} align=\"center\">\n <RenderWrapper\n control={avatar}\n DefaultComponent={<Avatar size={22} src={agentState.agentInfo.iconUrl} alt={agentState.agentInfo.name} />}\n />\n <RenderWrapper control={title} DefaultComponent={<div className={styles.chatTitle}>{agentState.agentInfo.name}</div>} />\n </Flex>\n <Space size={2}>\n <RenderWrapper\n control={newConversationBtn}\n DefaultComponent={\n <Button title=\"新建会话\" type=\"text\" size=\"large\" icon={<PlusOutlined />} onClick={() => chatStore.createConversation()} />\n }\n />\n\n <RenderWrapper\n control={conversationListBtn}\n DefaultComponent={\n <Popover\n getPopupContainer={(e) => e}\n placement=\"bottom\"\n classNames={{ container: styles.popover }}\n content={<ConversationList />}\n trigger={['click']}\n >\n <Button title=\"历史会话\" type=\"text\" size=\"large\" icon={<CommentOutlined />} />\n </Popover>\n }\n />\n\n <RenderWrapper\n control={closeBtn}\n DefaultComponent={<Button title=\"关闭\" type=\"text\" size=\"large\" onClick={configState.hooks?.onHeaderClose} icon={<CloseOutlined />} />}\n />\n </Space>\n </Flex>\n </>\n )\n}\n","import { PlusOutlined } from '@ant-design/icons'\nimport { RenderWrapper } from '@zero-library/common'\nimport { Avatar, Button, Flex, Typography } from 'antd'\nimport classNames from 'classnames'\nimport { useSnapshot } from 'valtio'\nimport { useChatStore } from '../../stores/Context'\nimport { ChatLayoutConversationListHeader } from '../../types'\nimport styles from './styles.module.less'\n\nconst { Text } = Typography\n\nexport default ({ title = true, avatar = true, newConversationBtn = true }: ChatLayoutConversationListHeader) => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n\n return (\n <Flex className=\"p-24\" gap={16} vertical>\n <Flex align=\"center\" gap={16}>\n <RenderWrapper\n control={avatar}\n DefaultComponent={\n <Avatar size={50} src={agentState.agentInfo?.iconUrl} shape=\"square\" style={{ flexShrink: 0 }}>\n {(agentState.agentInfo?.name || 'AI').slice(0, 1)}\n </Avatar>\n }\n />\n\n <RenderWrapper\n control={title}\n DefaultComponent={\n <>\n <Flex vertical gap={4} flex={1} style={{ minWidth: 0 }}>\n <Text strong className={classNames('fz-16')}>\n {agentState.agentInfo.name}\n </Text>\n <Text type=\"secondary\" ellipsis className={classNames('fz-12')}>\n {agentState.agentInfo.description}\n </Text>\n </Flex>\n </>\n }\n />\n </Flex>\n <RenderWrapper\n control={newConversationBtn}\n DefaultComponent={\n <Button\n block\n type=\"primary\"\n onClick={() => chatStore.createConversation()}\n className={classNames(styles.createConversationButton)}\n icon={<PlusOutlined />}\n >\n 新建会话\n </Button>\n }\n />\n </Flex>\n )\n}\n","import { RenderWrapper } from '@zero-library/common'\nimport { Flex } from 'antd'\nimport classNames from 'classnames'\nimport { ChatLayoutConversationList } from '../../types'\nimport ConversationList from './ConversationList'\nimport ConversationListHeader from './ConversationListHeader'\nimport styles from './styles.module.less'\n\nconst ConversationListPanel = ({ header }: ChatLayoutConversationList) => {\n return (\n <Flex vertical className={classNames('height-full', 'zero-chat-conversations', styles.conversationListPanel)}>\n <RenderWrapper control={header} DefaultComponent={ConversationListHeader} />\n <div className=\"full-scroll\">\n <ConversationList />\n </div>\n </Flex>\n )\n}\n\nexport default ConversationListPanel\n","import { createFromIconfontCN } from '@ant-design/icons'\nimport '../../assets/iconfont.js'\n\nconst IconFont = createFromIconfontCN({})\n\nexport default IconFont\n","import { RenderWrapper } from '@zero-library/common'\nimport { Flex, Typography } from 'antd'\nimport classNames from 'classnames'\nimport { useSnapshot } from 'valtio'\nimport IconFont from '../../components/icon-font'\nimport { useChatStore } from '../../stores/Context'\nimport styles from './styles.module.less'\nconst { Text } = Typography\n\nexport default ({ skillsBtn, knowledgeBtn }) => {\n const chatStore = useChatStore()\n const agentState = useSnapshot(chatStore.agent)\n\n return (\n <>\n <Flex\n className={classNames(styles.resourceBtn, { [styles.resourceBtnActive]: agentState.model.reasoning })}\n onClick={() => chatStore.setAgentModel({ ...agentState.model, reasoning: !agentState.model.reasoning })}\n >\n <IconFont type=\"icon-remark\" />\n <Text style={{ color: agentState.model.reasoning ? '#fff' : '#000' }}>深度思考</Text>\n </Flex>\n\n <RenderWrapper\n control={skillsBtn}\n DefaultComponent={\n <Flex\n className={classNames(styles.resourceBtn, { [styles.resourceBtnActive]: agentState.model.reasoning })}\n onClick={() => chatStore.setAgentModel({ ...agentState.model, reasoning: !agentState.model.reasoning })}\n >\n <IconFont type=\"icon-remark\" />\n <Text style={{ color: agentState.model.reasoning ? '#fff' : '#000' }}>技能</Text>\n </Flex>\n }\n />\n\n <RenderWrapper\n control={knowledgeBtn}\n DefaultComponent={\n <Flex\n className={classNames(styles.resourceBtn, { [styles.resourceBtnActive]: agentState.model.reasoning })}\n onClick={() => chatStore.setAgentModel({ ...agentState.model, reasoning: !agentState.model.reasoning })}\n >\n <IconFont type=\"icon-remark\" />\n <Text style={{ color: agentState.model.reasoning ? '#fff' : '#000' }}>知识库</Text>\n </Flex>\n }\n />\n </>\n )\n}\n","import { EnterOutlined } from '@ant-design/icons'\nimport { Sender } from '@ant-design/x-v2'\nimport { isFunction, markdownToText, RenderWrapper, shouldRender } from '@zero-library/common'\nimport { Button, Flex, Typography } from 'antd'\nimport { forwardRef, useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { InputFile } from '../..'\nimport { AttachmentsProps } from '../../components/Attachments'\nimport ChatSender, { ChatSenderHandle } from '../../components/ChatSender'\nimport { useChatStore } from '../../stores/Context'\nimport { ChatLayoutSender, FileUploadConfig, MessageBoxType } from '../../types'\nimport FeaturesRenderer from './FeaturesRenderer'\nimport styles from './styles.module.less'\n\nexport default forwardRef<ChatSenderHandle, ChatLayoutSender>(\n ({ placeholder, extraBtn = false, referencesBtn = false, sendBtnProps, footerBelow = false, skillsBtn = false, knowledgeBtn = false }, ref) => {\n const chatStore = useChatStore()\n const configState = useSnapshot(chatStore.config)\n const agentState = useSnapshot(chatStore.agent)\n const conversationState = useSnapshot(chatStore.conversation)\n\n const fileUploadRequest: AttachmentsProps['fileUpload'] = (formData, signal) =>\n configState.services.request.chatUpload(agentState.agentInfo.id, formData, conversationState.active.id, signal)\n // 当前会话参数\n const chatMessage = useMemo(\n () => conversationState.messages[conversationState.active.id] || ({} as MessageBoxType),\n [conversationState.messages[conversationState.active.id]]\n )\n const referenceContent = useMemo(() => {\n const content = chatMessage.references?.content?.name\n if (content) {\n return markdownToText(content)\n }\n }, [chatMessage.references])\n\n const referenceHandle = (con: string) => {\n if (chatMessage?.loading) return\n chatStore.setContent(con)\n chatStore.sendMessage()\n }\n\n return (\n <Flex vertical gap={8} className=\"zero-chat-sender\">\n {/* 🌟 提示词 */}\n {/* <RenderWrapper control={prompts} DefaultComponent={SenderPromptsItems} /> */}\n <ChatSender\n ref={ref}\n placeholder={placeholder}\n content={chatMessage.content}\n fileList={chatMessage.files as InputFile[]}\n headerOpen={chatMessage.headerOpen}\n loading={chatMessage.loading}\n onContentChange={chatStore.setContent}\n onFileListChange={chatStore.setFileList}\n onHeaderOpenChange={chatStore.setHeaderOpen}\n onSend={() => chatStore.sendMessage()}\n onCancel={chatStore.cancelReceive}\n onFocus={chatStore.config.hooks?.onSenderFocus}\n fileUpload={{\n request: fileUploadRequest,\n config: agentState.agentInfo.config?.options?.fileUpload as FileUploadConfig\n }}\n sendBtnProps={isFunction(sendBtnProps) ? sendBtnProps() : {}}\n extraFooterBelow={<RenderWrapper control={footerBelow} />}\n extraFooter={\n <>\n <FeaturesRenderer skillsBtn={skillsBtn} knowledgeBtn={knowledgeBtn} />\n <RenderWrapper control={extraBtn} />\n </>\n }\n extraHeader={\n <Sender.Header\n title={\n <Flex gap={4}>\n <EnterOutlined />\n <Typography.Text type=\"secondary\" ellipsis>\n {referenceContent}\n </Typography.Text>\n </Flex>\n }\n open={!!referenceContent}\n onOpenChange={() => chatStore.setReferences()}\n classNames={{\n header: styles.senderReferenceHeaderTitle,\n content: shouldRender(referencesBtn) ? '' : styles.senderReferenceHeaderContent\n }}\n >\n <RenderWrapper\n control={referencesBtn}\n DefaultComponent={\n <Flex gap={8}>\n {['深度解读', '概要解读'].map((con) => (\n <Button key={con} color=\"primary\" variant=\"filled\" onClick={() => referenceHandle(con)}>\n {con} →\n </Button>\n ))}\n </Flex>\n }\n />\n </Sender.Header>\n }\n />\n </Flex>\n )\n }\n)\n","import logo from '../../assets/images/logo.png'\n\nimport styles from './styles.module.less'\n\nconst ChatSenderHeader = () => {\n return (\n <div className={styles.logoArea}>\n <div className={styles.logoContainer}>\n {/* 静态的柔和光晕 */}\n <div className={styles.staticHalo}></div>\n\n {/* 悬浮呼吸感 */}\n <div className={styles.logoHoverWrapper}>\n <img src={logo} alt=\"LoLR.AI Logo\" className={styles.logoImage} />\n </div>\n </div>\n <h1 className={styles.greetingTitle}>\n 你好,我是 <span className={styles.gradientText}>LoLR.AI</span>\n </h1>\n <p className={styles.greetingSubtitle}>今天想探索点什么?</p>\n </div>\n )\n}\n\nexport default ChatSenderHeader\n","import { Input } from 'antd'\nimport React, { useCallback } from 'react'\n\ninterface MonacoEditorProps {\n language?: string\n value?: string\n onChange?: (value: string) => void\n placeholder?: string\n height?: number | string\n readOnly?: boolean\n style?: React.CSSProperties\n onMount?: (editor: any, monaco: any) => void\n}\n\nconst MonacoEditor: React.FC<MonacoEditorProps> = ({ value = '', onChange, placeholder, height = 200, readOnly = false, style }) => {\n const handleKeyDownCapture = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\n // 阻止空格键事件向外层组件传播,避免被拦截\n if (e.key === ' ' || e.code === 'Space') {\n e.stopPropagation()\n }\n }, [])\n\n const handleKeyUpCapture = useCallback((e: React.KeyboardEvent<HTMLDivElement>) => {\n if (e.key === ' ' || e.code === 'Space') {\n e.stopPropagation()\n }\n }, [])\n\n const handleScriptChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n onChange?.(event.target.value || '')\n },\n [onChange]\n )\n\n return (\n <div style={style} onKeyDownCapture={handleKeyDownCapture} onKeyUpCapture={handleKeyUpCapture}>\n <Input.TextArea\n value={value}\n onChange={handleScriptChange}\n readOnly={readOnly}\n placeholder={placeholder}\n autoSize={false}\n style={{\n height,\n resize: 'vertical',\n fontFamily: 'Monaco, Menlo, Consolas, \"Courier New\", monospace',\n ...style\n }}\n />\n </div>\n )\n}\n\nexport default MonacoEditor\n","import { CloudUploadOutlined, DeleteOutlined } from '@ant-design/icons'\nimport { Button, Collapse, Flex, Form, Input, InputNumber, Switch, Typography, Upload, message, theme } from 'antd'\nimport { RcFile } from 'antd/es/upload'\nimport React, { useEffect, useMemo, useState } from 'react'\nimport { useSnapshot } from 'valtio'\nimport MonacoEditor from '../../components/monaco-editor'\nimport { formatFileSize, getFileExtension, getFileIcon } from '../../core/utils'\nimport { flowSpecState } from '../../stores/agent-flow.store'\nimport { useChatStore } from '../../stores/Context'\nimport { AgentInfo } from '../../types'\nimport { Variable } from '../../types/agentflow.types'\nimport styles from './styles.module.less'\n\nconst { Text } = Typography\nconst START_NODE_TYPE = 'start'\n\nconst FormFileUpload = ({ value, onChange, multiple = false }: { value?: any; onChange?: (value: any) => void; multiple?: boolean }) => {\n const { token } = theme.useToken()\n const fileList = Array.isArray(value) ? value : value ? [value] : []\n const chatStore = useChatStore()\n const configState = useSnapshot(chatStore.config)\n const conversationState = useSnapshot(chatStore.conversation)\n\n const customRequest = async (options: any) => {\n const { file, onSuccess, onError } = options\n try {\n const formData = new FormData()\n formData.append('file', file as RcFile)\n const res = await configState.services.request.chatUpload(chatStore.agent.agentInfo.id, formData, conversationState.active.id)\n\n if (res.code === 200 && res.data?.length) {\n const uploadedFile = res.data[0]\n onSuccess(uploadedFile)\n\n if (multiple) {\n onChange?.([...fileList, uploadedFile])\n } else {\n onChange?.([uploadedFile])\n }\n } else {\n message.error(res.message || '上传失败')\n onError(new Error(res.message))\n }\n } catch (error) {\n onError(error)\n }\n }\n\n const handleRemove = (fileToRemove: any) => {\n const newList = fileList.filter((f: any) => f.id !== fileToRemove.id)\n onChange?.(newList.length > 0 ? newList : undefined)\n }\n\n return (\n <Flex vertical gap={12} style={{ width: '100%' }}>\n {!multiple && fileList.length >= 1 ? null : (\n <Upload multiple={multiple} customRequest={customRequest} showUploadList={false}>\n <Button icon={<CloudUploadOutlined />}>从本地上传</Button>\n </Upload>\n )}\n\n {fileList.length > 0 && (\n <Flex vertical gap={8}>\n {fileList.map((file: any) => (\n <Flex\n key={file.id || file.uid}\n align=\"center\"\n justify=\"space-between\"\n style={{\n padding: '8px 12px',\n backgroundColor: token.colorFillAlter,\n borderRadius: token.borderRadiusLG || 8,\n border: `1px solid ${token.colorBorderSecondary}`\n }}\n >\n <Flex align=\"center\" gap={12} style={{ overflow: 'hidden', flex: 1 }}>\n <div\n style={{\n width: 40,\n height: 40,\n backgroundColor: '#000',\n borderRadius: token.borderRadiusSM || 4,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0\n }}\n >\n {getFileIcon(file.extension || getFileExtension(file.name), 20)}\n </div>\n <div style={{ overflow: 'hidden', display: 'flex', flexDirection: 'column', flex: 1 }}>\n <Text ellipsis style={{ width: '100%', fontSize: 14, fontWeight: 500 }}>\n {file.name}\n </Text>\n <Text type=\"secondary\" style={{ fontSize: 12 }}>\n {(file.extension || getFileExtension(file.name)).toUpperCase()} • {formatFileSize(file.size)}\n </Text>\n </div>\n </Flex>\n <Button type=\"text\" icon={<DeleteOutlined />} onClick={() => handleRemove(file)} style={{ color: token.colorTextSecondary }} />\n </Flex>\n ))}\n </Flex>\n )}\n </Flex>\n )\n}\n\nconst FormMonacoEditor = ({ value, onChange }: { value?: string; onChange?: (value: string) => void }) => {\n const { token } = theme.useToken()\n return (\n <div style={{ backgroundColor: token.colorFillAlter, padding: 8, borderRadius: token.borderRadius }}>\n <MonacoEditor language=\"json\" placeholder=\"请输入值...\" height={80} value={value} onChange={onChange} />\n </div>\n )\n}\n\nconst UserInputPanel = () => {\n const chatStore = useChatStore()\n const agentSnap = useSnapshot(chatStore.agent)\n const flowSpecSnap = useSnapshot(flowSpecState)\n const [form] = Form.useForm()\n const [activeKey, setActiveKey] = useState<string[]>(['1'])\n const { layout } = useSnapshot(chatStore.config)\n\n const startNode = useMemo(() => {\n return flowSpecSnap.nodes.find((n) => String(n.type || '').toLowerCase() === START_NODE_TYPE)\n }, [flowSpecSnap.nodes])\n\n const inputs = useMemo(() => {\n if (agentSnap.agentInfo.userInput?.length > 0) {\n return agentSnap.agentInfo.userInput.filter((i: any) => i.enableEdit)\n }\n return (startNode?.data.input || []).filter((i: any) => i.enableEdit)\n }, [startNode, agentSnap.agentInfo.userInput])\n\n useEffect(() => {\n if (inputs.length > 0) {\n const initialValues = inputs.reduce((acc: any, cur: Variable) => {\n const value: any = cur.value\n\n acc[cur.name] = value\n return acc\n }, {})\n form.setFieldsValue(initialValues)\n }\n }, [inputs, form])\n\n const handleValuesChange = (changedValues: any) => {\n if (agentSnap.agentInfo.userInput?.length > 0) {\n const newInput = agentSnap.agentInfo.userInput.map((v: any) => {\n if (v.name in changedValues) {\n const newValue = changedValues[v.name]\n return { ...v, value: newValue }\n }\n return v\n })\n chatStore.setAgent({ ...agentSnap.agentInfo, userInput: newInput } as AgentInfo)\n return\n }\n const nodeIndex = flowSpecState.nodes.findIndex((n) => n.id === startNode?.id)\n if (nodeIndex > -1) {\n const currentInput = flowSpecState.nodes[nodeIndex].data.input\n const newInput = currentInput.map((v: Variable) => {\n if (v.name in changedValues) {\n const newValue = changedValues[v.name]\n return { ...v, value: newValue }\n }\n return v\n })\n flowSpecState.nodes[nodeIndex].data.input = newInput\n }\n }\n\n const handleStartChat = () => {\n form\n .validateFields()\n .then(() => {\n setActiveKey([])\n })\n .catch(() => {\n message.error('请检查输入参数')\n })\n }\n\n const renderFormItem = (item: Variable) => {\n const itemStyle = { marginBottom: 0 }\n const commonProps = {\n label: item.name,\n name: item.name,\n style: itemStyle,\n rules: item.rules?.map((r) => {\n const valStr = String(r.value || '')\n if (r.type === 'required') return { required: true, message: r.message }\n if (r.type === 'email') return { type: 'email', message: r.message }\n if (r.type === 'pattern') return { pattern: new RegExp(valStr), message: r.message }\n if (r.type === 'max' || r.type === 'min') {\n return {\n validator: (_: any, val: any) => {\n if (val === undefined || val === null || val === '') return Promise.resolve()\n const numVal = Number(val)\n if (isNaN(numVal)) return Promise.resolve()\n if (r.type === 'max' && numVal > Number(valStr)) return Promise.reject(new Error(r.message))\n if (r.type === 'min' && numVal < Number(valStr)) return Promise.reject(new Error(r.message))\n return Promise.resolve()\n }\n }\n }\n if (r.type === 'length') {\n const [min, max] = valStr.split(',').map((v: string) => (v ? Number(v) : undefined))\n return {\n validator: (_: any, val: any) => {\n if (val === undefined || val === null || val === '') return Promise.resolve()\n const strVal = String(val)\n if (min !== undefined && strVal.length < min) return Promise.reject(new Error(r.message))\n if (max !== undefined && strVal.length > max) return Promise.reject(new Error(r.message))\n return Promise.resolve()\n }\n }\n }\n if (r.type === 'size') {\n const [min, max] = valStr.split(',').map((v: string) => (v ? Number(v) : undefined))\n return {\n validator: (_: any, val: any) => {\n if (val === undefined || val === null || val === '') return Promise.resolve()\n let len = 0\n if (Array.isArray(val)) {\n len = val.length\n } else if (typeof val === 'string') {\n try {\n const parsed = JSON.parse(val)\n if (Array.isArray(parsed)) len = parsed.length\n else return Promise.resolve()\n } catch (e) {\n return Promise.resolve()\n }\n } else {\n return Promise.resolve()\n }\n if (min !== undefined && len < min) return Promise.reject(new Error(r.message))\n if (max !== undefined && len > max) return Promise.reject(new Error(r.message))\n return Promise.resolve()\n }\n }\n }\n if (r.type === 'enum') {\n const options = valStr.split(',').map((s: string) => s.trim())\n return {\n validator: (_: any, val: any) => {\n if (val === undefined || val === null || val === '') return Promise.resolve()\n if (options.includes(String(val))) return Promise.resolve()\n return Promise.reject(new Error(r.message))\n }\n }\n }\n return {}\n }) as any\n }\n\n if (['STRING', 'LONG'].includes(item.type)) {\n return (\n <Form.Item {...commonProps}>\n <Input placeholder=\"请输入值\" />\n </Form.Item>\n )\n }\n\n if (['NUMBER'].includes(item.type)) {\n return (\n <Form.Item {...commonProps}>\n <InputNumber style={{ width: '100%' }} placeholder=\"请输入数值\" />\n </Form.Item>\n )\n }\n\n if (item.type === 'BOOLEAN') {\n return (\n <Form.Item style={itemStyle} name={item.name} valuePropName=\"checked\">\n <Flex justify=\"space-between\" align=\"center\">\n <span>{item.name}</span>\n <Switch size=\"small\" />\n </Flex>\n </Form.Item>\n )\n }\n\n if (item.type === 'FILE') {\n return (\n <Form.Item {...commonProps}>\n <FormFileUpload multiple={false} />\n </Form.Item>\n )\n }\n\n if (item.type === 'ARRAY_FILE') {\n return (\n <Form.Item {...commonProps}>\n <FormFileUpload multiple={true} />\n </Form.Item>\n )\n }\n\n if (['OBJECT', 'ARRAY', 'ARRAY_STRING', 'ARRAY_NUMBER', 'ARRAY_DECIMAL', 'ARRAY_BOOLEAN', 'ARRAY_OBJECT'].includes(item.type)) {\n return (\n <Form.Item {...commonProps}>\n <FormMonacoEditor />\n </Form.Item>\n )\n }\n\n return (\n <Form.Item {...commonProps}>\n <Input placeholder=\"请输入值\" />\n </Form.Item>\n )\n }\n\n const genExtra = () => {\n if (activeKey.includes('1')) return null\n return (\n <Button\n type=\"text\"\n size=\"small\"\n onClick={(e) => {\n e.stopPropagation()\n setActiveKey(['1'])\n }}\n >\n 编辑\n </Button>\n )\n }\n\n const items = [\n {\n key: '1',\n label: '参数设置',\n extra: genExtra(),\n children: (\n <>\n <Form form={form} layout=\"vertical\" onValuesChange={handleValuesChange} style={{ maxHeight: 500, overflow: 'auto', paddingRight: 16 }}>\n {inputs.length > 0 ? (\n <Flex vertical gap={12}>\n {inputs.map((item: Variable) => (\n <React.Fragment key={item.name}>{renderFormItem(item)}</React.Fragment>\n ))}\n </Flex>\n ) : (\n <div style={{ padding: '10px', color: '#999', textAlign: 'center' }}>暂无用户输入字段</div>\n )}\n </Form>\n <Flex align=\"center\" justify=\"center\" className=\"m-t-16\">\n <Button type=\"primary\" onClick={handleStartChat}>\n 开始会话\n </Button>\n </Flex>\n </>\n )\n }\n ]\n\n return (\n <div className={styles.userInputCollapse}>\n <Collapse\n activeKey={activeKey}\n onChange={(keys) => {\n const newKeys = typeof keys === 'string' ? [keys] : (keys as string[])\n setActiveKey(newKeys)\n }}\n items={items}\n className=\"m-16\"\n styles={{\n body: {\n paddingRight: 0,\n paddingBottom: 10\n }\n }}\n />\n </div>\n )\n}\n\nexport default UserInputPanel\n",".bodyWidth {\n width: 100%;\n height: 100%;\n}\n.inputContainer {\n max-width: 1000px;\n min-width: 320px;\n width: calc(100% - 24px);\n}\n.disclaimerNotice {\n font-size: 12px;\n text-align: center;\n color: #bfbfbf;\n}\n.previewHeader {\n padding-bottom: 4px;\n border-bottom: 1px solid #e2e8f0;\n}\n.previewCloseBtn {\n cursor: pointer;\n display: flex;\n align-items: center;\n color: var(--ant-color-text-tertiary);\n transition: color 0.3s;\n font-size: 16px;\n}\n.previewCloseBtn:hover {\n color: var(--ant-color-text);\n}\n.previewCloseBtn .closeIcon {\n transition: transform 0.3s ease;\n}\n.previewCloseBtn.rotateIcon:hover .closeIcon {\n transform: rotate(90deg);\n}\n","import { RenderWrapper, shouldRender } from '@zero-library/common'\nimport { Flex } from 'antd'\nimport classNames from 'classnames'\nimport { forwardRef, memo, useImperativeHandle, useRef } from 'react'\nimport { useSnapshot } from 'valtio'\nimport type { ChatSenderHandle } from '../../../components/ChatSender'\nimport { useChatStore } from '../../../stores/Context'\nimport { ChatLayout } from '../../../types/'\nimport BubbleListItems from '../../common/BubbleListItems'\nimport ChatHeader from '../../common/ChatHeader'\nimport ChatSender from '../../common/ChatSender'\nimport ChatSenderHeader from '../../common/ChatSenderHeader'\nimport UserInputPanel from '../../common/UserInputPanel'\nimport styles from './styles.module.less'\n\nconst ChatMainPanel = memo(\n forwardRef<ChatSenderHandle>((_props, ref) => {\n const chatStore = useChatStore()\n const senderRef = useRef<ChatSenderHandle | null>(null)\n\n useImperativeHandle(\n ref,\n () => ({\n focus: (options) => {\n senderRef.current?.focus(options)\n }\n }),\n []\n )\n\n /** 配置状态的快照 */\n const configState = useSnapshot(chatStore.config)\n /** 智能体状态的快照 */\n const agentState = useSnapshot(chatStore.agent)\n\n return (\n <Flex vertical className={classNames('height-full')}>\n {/** 聊天区域头部 */}\n <RenderWrapper control={configState.layout.chatHeader} DefaultComponent={ChatHeader} />\n\n <Flex justify=\"center\" align=\"center\" vertical gap={24} className={classNames('height-full', styles.bodyWidth)}>\n {/** 消息列表上方区域 */}\n {shouldRender(agentState.agentInfo.userInput && agentState.agentInfo.userInput.length > 0) && (\n <RenderWrapper DefaultComponent={UserInputPanel} />\n )}\n\n {/** 消息列表区域 */}\n {shouldRender(configState.layout.messageList) && (\n <div className=\"full-scroll\" style={{ width: '100%' }}>\n <RenderWrapper control={configState.layout.messageList} DefaultComponent={BubbleListItems} />\n </div>\n )}\n\n {/** 输入框上方头部 */}\n <RenderWrapper control={configState.layout.senderHeader as ChatLayout['senderHeader']} DefaultComponent={<ChatSenderHeader />} />\n\n <Flex className={styles.inputContainer} vertical gap={8}>\n {/** 输入框组件 */}\n <RenderWrapper ref={senderRef} DefaultComponent={ChatSender} />\n {/** 免责声明 */}\n <RenderWrapper\n control={configState.layout.disclaimerNotice}\n DefaultComponent={<div className={styles.disclaimerNotice}>内容由AI生成,仅供参考,请仔细甄别</div>}\n />\n\n {/** 输入框底部区域 */}\n <RenderWrapper control={configState.layout.senderFooter} />\n </Flex>\n </Flex>\n </Flex>\n )\n })\n)\n\nexport default ChatMainPanel\n","import { CloseOutlined, DownloadOutlined } from '@ant-design/icons'\nimport { FilePreview } from '@zero-library/common'\nimport { Button, Flex } from 'antd'\nimport classNames from 'classnames'\nimport { memo, useMemo } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { tokenManager } from '../../../core/session'\nimport { useChatStore } from '../../../stores/Context'\nimport type { FileUrlType } from '../../../types'\nimport styles from './styles.module.less'\n\nexport interface ChatPreviewPanelProps {\n agentId?: string\n conversationId?: string\n file: FileUrlType\n}\n\nconst ChatPreviewPanel = memo(({ agentId, conversationId, file }: ChatPreviewPanelProps) => {\n const chatStore = useChatStore()\n const configState = useSnapshot(chatStore.config)\n\n const fileUrl = useMemo(() => {\n if (file?.fileUrl) return file.fileUrl\n if (!file?.path || !agentId || !conversationId) return ''\n const previewUrl = configState.services.request.getPreviewUrl(agentId, conversationId, file.path)\n return previewUrl\n }, [agentId, conversationId, file])\n\n const suffix = useMemo(() => {\n const name = file?.fileName || file?.path || ''\n return name.split('.').pop() || file?.ext || ''\n }, [file])\n\n const handleDownload = () => {\n let downloadUrl = file?.path\n if (downloadUrl && !downloadUrl.startsWith('http')) {\n if (!agentId || !conversationId) return\n downloadUrl = configState.services.request.getPreviewUrl(agentId, conversationId, downloadUrl)\n }\n if (downloadUrl) {\n const urlObj = new URL(downloadUrl, window.location.origin)\n urlObj.searchParams.set('NS-TOKEN', tokenManager.get() || '')\n window.open(urlObj.toString(), '_blank')\n }\n }\n\n return (\n <Flex vertical style={{ height: '100%', overflow: 'hidden' }}>\n <Flex justify=\"flex-end\" className={styles.previewHeader}>\n {file?.path && (\n <div className={styles.previewCloseBtn} onClick={handleDownload}>\n <Button type=\"text\" icon={<DownloadOutlined />} className={styles.closeIcon} />\n </div>\n )}\n <div className={classNames(styles.previewCloseBtn, styles.rotateIcon)} onClick={() => chatStore.setPreview({ path: '', fileName: '' })}>\n <Button type=\"text\" icon={<CloseOutlined />} className={styles.closeIcon} />\n </div>\n </Flex>\n <div className=\"flex-1\">\n <FilePreview fileUrl={fileUrl} suffix={suffix} />\n </div>\n </Flex>\n )\n})\n\nexport default ChatPreviewPanel\n",".chatLayout {\n background-color: transparent;\n height: 100%;\n width: 100%;\n}\n.spinWrapper {\n height: 100%;\n}\n.spinWrapper :global .ant-spin-container {\n height: 100%;\n}\n.fullScroll {\n overflow: auto;\n flex: 1;\n height: 100%;\n}\n.animatedSplitter :global(.ant-splitter-panel) {\n transition: all 0.3s cubic-bezier(0.2, 0, 0, 1) !important;\n}\n.animatedSplitter :global(.ant-splitter-bar) {\n transition: all 0.3s cubic-bezier(0.2, 0, 0, 1) !important;\n}\n.hideSplitterBar :global(.ant-splitter-bar) {\n display: none !important;\n}\n","import { XProvider } from '@ant-design/x-v2'\nimport { isObject, RenderWrapper, shouldRender, useDeepEffect, useWebSocket } from '@zero-library/common'\nimport { Flex, Spin, Splitter } from 'antd'\nimport classNames from 'classnames'\nimport { forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react'\nimport { useSnapshot } from 'valtio'\nimport { ChatSenderHandle } from '../../components/ChatSender'\nimport { createChatStore } from '../../stores'\nimport { ChatProvider } from '../../stores/Context'\nimport { AgentInfo, ChatHandle, ChatLayout, ChatProps, FileUrlType } from '../../types'\nimport ChatHeader from '../common/ChatHeader'\nimport ConversationListPanel from '../common/ConversationListPanel'\nimport { ChatMainPanel, ChatPreviewPanel } from './components'\nimport styles from './index.module.less'\n\nexport default forwardRef<ChatHandle, ChatProps>(({ theme, params, hooks, layout, config, services }, _ref) => {\n /** 创建聊天状态管理器实例 */\n const chatStore = useMemo(() => createChatStore(), [])\n /** 输入框组件的引用 */\n const senderRef = useRef<ChatSenderHandle | null>(null)\n useImperativeHandle(\n _ref,\n () => ({\n sendMessage: chatStore.sendMessage,\n switchConversation: chatStore.switchConversation,\n createConversation: chatStore.createConversation,\n setReferences: chatStore.setReferences,\n setMessage: chatStore.setContent,\n setMessageParams: chatStore.setContentParams,\n setFiles: chatStore.setFileList,\n setServices: chatStore.setServices,\n setParams: chatStore.setParams,\n senderFocus: (options) => {\n senderRef.current?.focus(options)\n }\n }),\n []\n )\n\n /** 配置状态的快照 */\n const configState = useSnapshot(chatStore.config)\n /** 智能体状态的快照 */\n const agentState = useSnapshot(chatStore.agent)\n /** 会话状态的快照 */\n const conversationState = useSnapshot(chatStore.conversation)\n const containerRef = useRef<HTMLDivElement>(null)\n\n useEffect(() => {\n chatStore.setHooks(hooks)\n }, [hooks])\n\n useEffect(() => {\n chatStore.setLayout(layout)\n }, [layout])\n\n useEffect(() => {\n chatStore.setParams(params)\n }, [params])\n\n useDeepEffect(() => {\n chatStore.setServices(services)\n }, [services])\n\n useEffect(() => {\n chatStore.getModels()\n }, [])\n\n useDeepEffect(() => {\n if (agentState.agentInfo.id && isObject(config.agent?.spec)) {\n chatStore.setAgent({ ...agentState.agentInfo, spec: config.agent.spec || {} } as AgentInfo)\n }\n }, [agentState.agentInfo.id, config.agent?.spec])\n\n useDeepEffect(() => {\n if (agentState.agentInfo.id && isObject(config.agent?.config)) {\n chatStore.setAgent({ ...agentState.agentInfo, config: config.agent.config || {} } as AgentInfo)\n }\n }, [agentState.agentInfo.id, config.agent?.config])\n\n useDeepEffect(() => {\n if (agentState.agentInfo.id) {\n chatStore.setUserInput(config.agent.userInput)\n }\n }, [agentState.agentInfo.id, config.agent?.userInput])\n\n useDeepEffect(() => {\n if (config?.agent?.id) {\n chatStore.getAgentInfo(config.agent.id)\n }\n }, [config.agent?.id])\n\n useDeepEffect(() => {\n if (config?.agent?.id) {\n chatStore.initConversation(config)\n }\n }, [config.agent?.id, config.conversationId])\n\n const hasPreView = useMemo(() => {\n return shouldRender(configState.layout.preview as ChatLayout['preview']) && !!(configState.preview.file as FileUrlType).path\n }, [configState.layout.preview, configState.preview.file])\n\n /** 分割面板尺寸状态 */\n const [sizes, setSizes] = useState([0, '100%'])\n /** 设置分割面板尺寸 */\n const setSplitterSizes = (sizes: (number | string)[]) => {\n setSizes(sizes)\n }\n useEffect(() => {\n if (hasPreView) {\n setSplitterSizes(['50%', '50%'])\n } else {\n setSplitterSizes([0, '100%'])\n }\n }, [hasPreView])\n\n /** 主 WebSocket 连接,用于接收实时消息 */\n useWebSocket({\n url: configState.services.websocketUrls?.[0],\n onMessage: (message) => chatStore.acceptMessage(message.payload),\n clientHeartbeat: false,\n reconnectInterval: 10000\n })\n /** 备用 WebSocket 连接,提供一体机saas可用性 */\n useWebSocket({\n url: configState.services.websocketUrls?.[1],\n onMessage: (message) => chatStore.acceptMessage(message.payload),\n clientHeartbeat: false,\n reconnectInterval: 10000\n })\n useEffect(() => {\n hooks?.onBeforeInit?.()\n }, [])\n\n return (\n <XProvider theme={{ cssVar: {}, ...theme }}>\n <ChatProvider store={chatStore}>\n <Spin spinning={configState.loading} classNames={{ root: styles.spinWrapper }}>\n <Flex vertical className={classNames(styles.chatLayout, 'zero-chat-layout', 'height-full')}>\n {/** 全局头部区域 */}\n <RenderWrapper control={configState.layout.globalHeader} DefaultComponent={ChatHeader} />\n\n <Flex ref={containerRef} className=\"full-scroll\">\n {/** 左侧面板区域 */}\n <RenderWrapper control={configState.layout.leftPanel} />\n\n {/** 会话列表面板 */}\n {<RenderWrapper control={configState.layout.conversationList} DefaultComponent={ConversationListPanel} />}\n\n <Splitter className={classNames('flex-1', styles.animatedSplitter, { [styles.hideSplitterBar]: !hasPreView })}>\n <Splitter.Panel collapsible={false} max={800} min={400} size={sizes[1]}>\n <ChatMainPanel ref={senderRef} />\n </Splitter.Panel>\n <Splitter.Panel collapsible={false} min={600} size={sizes[0]}>\n <ChatPreviewPanel\n agentId={agentState?.agentInfo?.id}\n conversationId={conversationState.active.id}\n file={configState.preview.file as FileUrlType}\n />\n </Splitter.Panel>\n </Splitter>\n </Flex>\n </Flex>\n </Spin>\n </ChatProvider>\n </XProvider>\n )\n})\n"]}
|