@blueking/chat-x 0.0.51-beta.1 → 0.0.51-beta.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -156,5 +156,8 @@ export declare const lang: {
156
156
  readonly 搜索文件关键字: "Search file keyword";
157
157
  readonly 预览加载失败: "Failed to load preview";
158
158
  readonly 暂无可预览的文件: "No file to preview";
159
+ readonly '\u6587\u4EF6\u4E0A\u4F20\u4E2D\uFF0C\u8BF7\u7A0D\u5019': "Uploading files, please wait";
160
+ readonly '\u5B58\u5728\u4E0A\u4F20\u5931\u8D25\u7684\u6587\u4EF6\uFF0C\u8BF7\u5220\u9664\u540E\u91CD\u8BD5': "Remove failed uploads before sending";
161
+ readonly 上传失败: "Upload failed";
159
162
  };
160
- export declare const t: (key: keyof typeof lang) => "Send" | "Stop" | "Ask AI" | "Copy" | "Share" | "Like" | "Unsatisfied" | "Delete" | "Quote" | "Regenerate" | "Regenerating will clear the content below" | "Submit" | "Cancel" | "Preview Content" | "Jump to Detail" | "Call Tool" | "Read Skill" | "Calling" | "Reading" | "Tell us your thoughts" | "What makes you satisfied?" | "What makes you dissatisfied?" | "Return Content" | "Edit" | "Deep Thinking" | "Quick Thinking" | "Image to Text" | "Loading image..." | "Failed to load image" | "Thinking..." | "Thinking Completed" | "Thinking Failed" | "Copy Success" | "Copy Failed" | "Return to bottom" | "Stop generating" | "Stopping" | "Duration" | "Yesterday" | "Parameters" | "Description" | "Execution Status" | "Running" | "Success" | "Failed" | "Pending" | "To Be Executed" | "Details" | "Retry" | "Retrying" | "Skipping" | "The task is retrying and cannot be skipped" | "The task is skipping and cannot be retried" | "Node" | "Node Config" | "Node Output" | "Basic Info" | "Flow Template" | "Node Name" | "Step Name" | "Execution Plan" | "Optional" | "Failure Handler" | "Timeout Control" | "Yes" | "No" | "Input Params" | "Output Params" | "Param Name" | "Param Value" | "Name" | "Structured Output" | "Manual Skip" | "No Data" | "Call MCP" | "More" | "Algorithm Plan Review Ticket" | "Reviewing" | "Approving" | "Abandoned" | "Approved" | "Cancelled" | "Expired" | "Rejected" | "Revoked" | "Ticket No." | "Submitted At" | "Current Handler" | "None" | "View Ticket Detail" | "Copy Ticket" | "Copy Ticket Link" | "Cancel Approval" | "Approval Cancelled" | "Refresh Ticket Status" | "This ticket has been rejected and cannot be cancelled" | "This ticket has been approved and cannot be cancelled" | "This ticket has been cancelled, no need to click again" | "Approval cannot be cancelled in the current status" | "There are {count} pending approval tickets in the current conversation. To continue, cancel approval first." | "Unsupported interrupt message" | "Searching" | "Search Completed" | "Upload File" | "Select model" | "Search models" | "Requesting..." | "Cancel satisfied" | "Cancel dissatisfied" | "Confirm delete this answer?" | "This operation cannot be undone. Please proceed with caution!" | "Preview" | "Zoom Out" | "Zoom In" | "Rotate" | "Download" | "Sorry, image loading failed. Please try reloading." | "Reset" | "Reload" | "W" | "H" | "Upload Image" | "Search keyword" | "Select date" | "Locate in Chat" | "Select All" | "Confirm" | "Upload file, up to {count} files, max {size}MB each" | "Hello, I am BlueKing AI Bot" | "Clear Search" | "Search Result is Empty" | "Valid Evidence" | "Full Screen" | "Exit Full Screen" | "Please choose to continue" | "Continue" | "Received: " | "Done" | "Skip" | "Single" | "Multiple" | "Others" | "Completed" | "question(s)" | "Answers" | "Replied" | "Please enter..." | "File Artifacts" | "File List" | "Search file keyword" | "Failed to load preview" | "No file to preview" | "发送" | "停止" | "问问小鲸" | "复制" | "分享" | "点赞" | "不满意" | "删除" | "引用" | "重新生成" | "重新生成将清空下文内容" | "提交" | "取消" | "预览内容" | "跳转详情" | "调用工具" | "读取 Skill" | "正在调用" | "正在读取" | "说出您的想法" | "什么原因让你满意?" | "什么原因让你不满意?" | "返回内容" | "编辑" | "深度思考" | "快速思考" | "图生文" | "图片加载中..." | "图片加载失败" | "思考中" | "已思考完成" | "思考失败" | "复制成功" | "复制失败" | "返回底部" | "停止生成" | "正在停止" | "耗时" | "昨天" | "参数" | "描述" | "执行情况" | "执行中" | "成功" | "失败" | "挂起" | "待执行" | "详情" | "重试" | "重试中" | "跳过中" | "任务正在重试中,不可跳过" | "任务正在跳过中,不可重试" | "节点" | "节点配置" | "节点输出" | "基础信息" | "流程模板" | "节点名称" | "步骤名称" | "执行方案" | "是否可选" | "失败处理" | "超时控制" | "是" | "否" | "输入参数" | "输出参数" | "参数名" | "参数值" | "名称" | "变量说明" | "结构化输出" | "手动跳过" | "暂无数据" | "调用 MCP" | "更多" | "算法方案评审单" | "评审中" | "审批中" | "已废弃" | "已批准" | "已通过" | "已取消" | "已过期" | "已拒绝" | "已撤销" | "单据编号" | "提交时间" | "当前处理人" | "无" | "查看单据详情" | "复制单据" | "复制单据链接" | "取消审批" | "已取消审批" | "刷新单据状态" | "单据已取消审批" | "该单据已被拒绝,无法取消" | "该单据已通过,无法取消" | "单据已取消,无需重复点击" | "当前状态无法取消审批" | "当前会话有 {count} 个待审批单,如需继续,请先取消审批" | "暂不支持的中断消息" | "检索中" | "检索完成" | "上传文件" | "选择模型" | "搜索模型关键字" | "请求中..." | "取消满意" | "取消不满意" | "确认删除该回答?" | "删除操作无法撤回,请谨慎操作!" | "预览" | "缩小" | "放大" | "旋转" | "下载" | "抱歉,图片加载失败,可尝试重新加载" | "重置" | "重新加载" | "宽" | "高" | "上传图片" | "搜索 关键字" | "选择日期" | "在对话中定位" | "全选" | "确定" | "上传文件,最多支持 {count} 个,单个最大 {size}MB" | "你好,我是小鲸" | "清空搜索" | "搜索结果为空" | "有效证据" | "全屏" | "退出全屏" | "请选择以继续" | "继续" | "收到信息:" | "待审批" | "已审批" | "完成" | "跳过" | "单选" | "多选" | "其他" | "已完成" | "题" | "回答内容" | "已回复" | "请输入..." | "文件产物" | "文件列表" | "搜索文件关键字" | "预览加载失败" | "暂无可预览的文件";
163
+ export declare const t: (key: keyof typeof lang) => "Send" | "Stop" | "Ask AI" | "Copy" | "Share" | "Like" | "Unsatisfied" | "Delete" | "Quote" | "Regenerate" | "Regenerating will clear the content below" | "Submit" | "Cancel" | "Preview Content" | "Jump to Detail" | "Call Tool" | "Read Skill" | "Calling" | "Reading" | "Tell us your thoughts" | "What makes you satisfied?" | "What makes you dissatisfied?" | "Return Content" | "Edit" | "Deep Thinking" | "Quick Thinking" | "Image to Text" | "Loading image..." | "Failed to load image" | "Thinking..." | "Thinking Completed" | "Thinking Failed" | "Copy Success" | "Copy Failed" | "Return to bottom" | "Stop generating" | "Stopping" | "Duration" | "Yesterday" | "Parameters" | "Description" | "Execution Status" | "Running" | "Success" | "Failed" | "Pending" | "To Be Executed" | "Details" | "Retry" | "Retrying" | "Skipping" | "The task is retrying and cannot be skipped" | "The task is skipping and cannot be retried" | "Node" | "Node Config" | "Node Output" | "Basic Info" | "Flow Template" | "Node Name" | "Step Name" | "Execution Plan" | "Optional" | "Failure Handler" | "Timeout Control" | "Yes" | "No" | "Input Params" | "Output Params" | "Param Name" | "Param Value" | "Name" | "Structured Output" | "Manual Skip" | "No Data" | "Call MCP" | "More" | "Algorithm Plan Review Ticket" | "Reviewing" | "Approving" | "Abandoned" | "Approved" | "Cancelled" | "Expired" | "Rejected" | "Revoked" | "Ticket No." | "Submitted At" | "Current Handler" | "None" | "View Ticket Detail" | "Copy Ticket" | "Copy Ticket Link" | "Cancel Approval" | "Approval Cancelled" | "Refresh Ticket Status" | "This ticket has been rejected and cannot be cancelled" | "This ticket has been approved and cannot be cancelled" | "This ticket has been cancelled, no need to click again" | "Approval cannot be cancelled in the current status" | "There are {count} pending approval tickets in the current conversation. To continue, cancel approval first." | "Unsupported interrupt message" | "Searching" | "Search Completed" | "Upload File" | "Select model" | "Search models" | "Requesting..." | "Cancel satisfied" | "Cancel dissatisfied" | "Confirm delete this answer?" | "This operation cannot be undone. Please proceed with caution!" | "Preview" | "Zoom Out" | "Zoom In" | "Rotate" | "Download" | "Sorry, image loading failed. Please try reloading." | "Reset" | "Reload" | "W" | "H" | "Upload Image" | "Search keyword" | "Select date" | "Locate in Chat" | "Select All" | "Confirm" | "Upload file, up to {count} files, max {size}MB each" | "Hello, I am BlueKing AI Bot" | "Clear Search" | "Search Result is Empty" | "Valid Evidence" | "Full Screen" | "Exit Full Screen" | "Please choose to continue" | "Continue" | "Received: " | "Done" | "Skip" | "Single" | "Multiple" | "Others" | "Completed" | "question(s)" | "Answers" | "Replied" | "Please enter..." | "File Artifacts" | "File List" | "Search file keyword" | "Failed to load preview" | "No file to preview" | "Uploading files, please wait" | "Remove failed uploads before sending" | "Upload failed" | "发送" | "停止" | "问问小鲸" | "复制" | "分享" | "点赞" | "不满意" | "删除" | "引用" | "重新生成" | "重新生成将清空下文内容" | "提交" | "取消" | "预览内容" | "跳转详情" | "调用工具" | "读取 Skill" | "正在调用" | "正在读取" | "说出您的想法" | "什么原因让你满意?" | "什么原因让你不满意?" | "返回内容" | "编辑" | "深度思考" | "快速思考" | "图生文" | "图片加载中..." | "图片加载失败" | "思考中" | "已思考完成" | "思考失败" | "复制成功" | "复制失败" | "返回底部" | "停止生成" | "正在停止" | "耗时" | "昨天" | "参数" | "描述" | "执行情况" | "执行中" | "成功" | "失败" | "挂起" | "待执行" | "详情" | "重试" | "重试中" | "跳过中" | "任务正在重试中,不可跳过" | "任务正在跳过中,不可重试" | "节点" | "节点配置" | "节点输出" | "基础信息" | "流程模板" | "节点名称" | "步骤名称" | "执行方案" | "是否可选" | "失败处理" | "超时控制" | "是" | "否" | "输入参数" | "输出参数" | "参数名" | "参数值" | "名称" | "变量说明" | "结构化输出" | "手动跳过" | "暂无数据" | "调用 MCP" | "更多" | "算法方案评审单" | "评审中" | "审批中" | "已废弃" | "已批准" | "已通过" | "已取消" | "已过期" | "已拒绝" | "已撤销" | "单据编号" | "提交时间" | "当前处理人" | "无" | "查看单据详情" | "复制单据" | "复制单据链接" | "取消审批" | "已取消审批" | "刷新单据状态" | "单据已取消审批" | "该单据已被拒绝,无法取消" | "该单据已通过,无法取消" | "单据已取消,无需重复点击" | "当前状态无法取消审批" | "当前会话有 {count} 个待审批单,如需继续,请先取消审批" | "暂不支持的中断消息" | "检索中" | "检索完成" | "上传文件" | "选择模型" | "搜索模型关键字" | "请求中..." | "取消满意" | "取消不满意" | "确认删除该回答?" | "删除操作无法撤回,请谨慎操作!" | "预览" | "缩小" | "放大" | "旋转" | "下载" | "抱歉,图片加载失败,可尝试重新加载" | "重置" | "重新加载" | "宽" | "高" | "上传图片" | "搜索 关键字" | "选择日期" | "在对话中定位" | "全选" | "确定" | "上传文件,最多支持 {count} 个,单个最大 {size}MB" | "你好,我是小鲸" | "清空搜索" | "搜索结果为空" | "有效证据" | "全屏" | "退出全屏" | "请选择以继续" | "继续" | "收到信息:" | "待审批" | "已审批" | "完成" | "跳过" | "单选" | "多选" | "其他" | "已完成" | "题" | "回答内容" | "已回复" | "请输入..." | "文件产物" | "文件列表" | "搜索文件关键字" | "预览加载失败" | "暂无可预览的文件" | "文件上传中,请稍候" | "存在上传失败的文件,请删除后重试" | "上传失败";
@@ -703,7 +703,7 @@ ChatContainer 的 Props 继承自 `ChatInputProps` 和 `MessageContainerProps`
703
703
  | 属性名 | 类型 | 默认值 | 说明 |
704
704
  | ------------------------- | ---------------------------------------------------------------------------------------- | --------- | ------------------------------------------------------------------------------------------------------------------------------------ |
705
705
  | chatLoading | `boolean` | — | 整体加载状态,`true` 时显示 Loading 遮罩 |
706
- | commonTippyOptions | `AITippyProps` | — | 通用 Tippy 配置,注入到所有使用 `v-overflow-tips` 的子组件 |
706
+ | commonTippyOptions | `AITippyProps` | — | 通用 Tippy 配置,注入到所有使用 `v-overflow-tips` 的子组件。原样透传,仅全屏态强制把 `appendTo` 改为全屏容器;未传 `appendTo` 时不注入该字段,各浮层沿用自身默认挂载点 |
707
707
  | executionTabVisible | `boolean` | `true` | 「执行情况」Tab 是否展示;为 `false` 时从 Tab 栏隐藏,若正被选中则切到首个可见 Tab |
708
708
  | getSideRenderComponent | `(h, props?) => VNode \| undefined` | — | 自定义侧栏内容区渲染;未返回时使用 `selectedTab.data.component` |
709
709
  | getSideTabRenderComponent | `(h, tab, { removeCustomTab }) => VNode \| undefined` | — | 自定义侧栏 Tab 标签渲染;未返回时使用默认图标 + 文案 + 关闭按钮 |
@@ -325,8 +325,9 @@ const handleSendMessage = async (
325
325
 
326
326
  - 底部工具栏出现文件上传按钮(在快捷指令左侧)
327
327
  - 支持**点击选择**、**拖拽上传**、**粘贴上传**(Ctrl+V)
328
- - `onUpload` 每次传入**单个** `File`,返回 `{ download_url?: string }`
328
+ - `onUpload` 每次传入**单个** `File`,返回 `{ download_url?: string; id?: string; status?: 'failed' | 'success' }`
329
329
  - 文件自动去重(基于 `name + size + lastModified` 复合键),不会重复上传
330
+ - **上传中或存在失败附件时禁止发送**(点击、Enter、`triggerSendMessage` 均拦截)。失败附件需用户删除后才能再发;不要把附件 Pending 映射成 `MessageStatus.Pending`
330
331
  - 发送成功后,`uploadFiles` 自动清空
331
332
 
332
333
  **个数与大小校验(与 `FileUploadBtn` 分工)**:
@@ -604,7 +605,7 @@ const handleSendMessage = async (
604
605
  | tippyOptions | `AITippyProps` | — | - | 透传给 FileUploadBtn 和 InputAttachment 的 tooltip 配置 |
605
606
  | onSendMessage | `(content: UserMessage['content'], docSchema: TagSchema, options?: { interrupt?: Interrupt; payload?: InterruptResume }) => Promise<void>` | - | - | 发送消息回调,无文件时 content 为字符串,有文件时为数组;经 [ChatContainer](/components/setup/chat-container) 使用时,存在待回答 UserQuestion 会传入第三参数 `options` |
606
607
  | onStopSending | `() => Promise<void>` | - | - | 停止发送回调,点击停止按钮时触发 |
607
- | onUpload | `(file: File) => Promise<{ download_url?: string }>` | - | - | 文件上传回调(每次单文件) |
608
+ | onUpload | `(file: File) => Promise<{ download_url?: string; error?: string; id?: string; status?: 'failed' \| 'success' }>` | - | - | 文件上传回调(每次单文件);上传中/失败附件会阻塞发送 |
608
609
 
609
610
  ### 默认占位符
610
611
 
@@ -1,7 +1,7 @@
1
1
  <!-- AI SUMMARY -->
2
2
  ## 快速了解
3
3
 
4
- 渲染文件附件,支持图片预览和下载事件。 源码位置:src/components/chat-content/file-content/file-content.vue。
4
+ 渲染文件附件,支持图片预览、上传中/失败态和下载事件。 源码位置:src/components/chat-content/file-content/file-content.vue。
5
5
 
6
6
  ### 关联组件
7
7
  - **image-preview** — 点击图片缩略图打开全屏预览
@@ -15,18 +15,19 @@
15
15
 
16
16
  - **源码位置**:`src/components/chat-content/file-content/file-content.vue`
17
17
  - **能力域**:媒体文件
18
- - **能力说明**:渲染文件附件,支持图片预览和下载事件。
18
+ - **能力说明**:渲染文件附件,支持图片预览、上传中/失败态和下载事件。
19
19
 
20
20
  > **能力域**:媒体文件
21
21
 
22
- 文件列表展示组件,支持图片缩略图预览、点击图片全屏预览(`ImagePreview`)、文件卡片展示(类型图标 / 文件名 / 文件大小)、图片加载失败占位和删除操作。
22
+ 文件列表展示组件,支持图片缩略图预览、点击图片全屏预览(`ImagePreview`)、文件卡片展示(类型图标 / 文件名 / 文件大小)、上传中/失败态、图片加载失败占位和删除操作。
23
23
 
24
- 内部由两个子组件承载单项渲染:
24
+ 内部由三个子组件承载单项渲染:
25
25
 
26
26
  | 子组件 | 源码位置 | 职责 |
27
27
  | ------------------ | ------------------------------------------------------------------- | --------------------------------------------- |
28
- | `UploadImageItem` | `src/components/chat-content/file-content/upload-image-item.vue` | 图片缩略图、加载失败占位、hover 删除徽标 |
29
- | `UploadFileItem` | `src/components/chat-content/file-content/upload-file-item.vue` | 180px 文件卡片(`FileIcon` + 文件名 + 大小) |
28
+ | `UploadImageItem` | `src/components/chat-content/file-content/upload-image-item.vue` | 图片缩略图、上传中遮罩、失败占位、hover 删除徽标 |
29
+ | `UploadFileItem` | `src/components/chat-content/file-content/upload-file-item.vue` | 180px 文件卡片(`FileIcon` + 文件名 + 大小 / 失败文案) |
30
+ | `UploadSpinner` | `src/components/chat-content/file-content/upload-spinner.vue` | 16px 白色环形 loading,文件与图片共用 |
30
31
 
31
32
  ## 渲染决策逻辑
32
33
 
@@ -37,9 +38,12 @@ splitUploadFiles(files) // 单次遍历
37
38
  ├── 图片组(.ai-files-content-row.is-images)
38
39
  │ 判定依据:mimeType 或 file.file?.type 以 'image/' 开头
39
40
  │ src:file.url 优先,否则用本地 File 的 blob URL(按 key 缓存,移除 / 卸载时 revoke)
40
- │ 加载失败 → 错误占位(粉色背景 + 红色边框 + 灰色图标),且不进入预览列表
41
+ │ 加载失败或 status=error → 错误占位(粉色背景 + 红色边框 + 灰色图标),且不进入预览列表
42
+ │ status=pending → 半透明遮罩 + 16px 环形 loading,禁止点击预览
41
43
  └── 文件组(.ai-files-content-row.is-files)
42
44
  文件卡片:类型图标(FileIcon,按文件名解析扩展名)+ 文件名 + 文件大小
45
+ status=pending → 半透明遮罩 + 16px 环形 loading
46
+ status=error → 浅红底 + 红边框,第二行展示「上传失败」
43
47
  ```
44
48
 
45
49
  > **是否为图片只看 MIME,不看 `url`。** 解除上传类型限制后,任意文件上传成功都会拿到 `url`,若按 `url` 判断会把 PDF / DOC 渲染成破图。因此 `url` 只决定 `<img src>` 从哪里来,不参与图片判定。
@@ -124,9 +128,21 @@ MIME 为 `image/*` 时渲染为图片缩略图(`cursor: zoom-in`)。点击
124
128
 
125
129
  > **预览行为**:组件内部自动维护 `ImagePreview` 实例,无需外部管理预览状态。只有加载成功的图片才会进入预览列表,加载失败的图片被自动过滤。
126
130
 
131
+ ## 上传中 / 上传失败
132
+
133
+ `FileContent` 消费每项的 `status`(`UploadStatus`)。尺寸不变:文件卡片仍是 180×48,图片仍是定高 48、宽 48~120。loading 用共享的 `UploadSpinner`(16px 白环),不要用 `AiLoading`。删除徽标始终叠在遮罩之上。
134
+
135
+ | status | 文件卡片 | 图片缩略图 |
136
+ | --------- | -------- | ---------- |
137
+ | `pending` | `rgba(0,0,0,0.3)` 遮罩 + spinner | 保留预览图 + `rgba(0,0,0,0.5)` 遮罩 + spinner,点击不打开预览 |
138
+ | `error` | 背景 `#fff0f0`、边框 `#ea3636`,第二行「上传失败」 | 与加载失败相同的破图占位(18px `ImageErrorIcon`) |
139
+ | `success` / 未设置 | 正常卡片 | 正常缩略图,可预览 |
140
+
141
+ 上传中与上传失败的图片都不会进入 `ImagePreview` 列表。`ChatInput` 在存在 `pending` / `error` 附件时会拦截发送(见 [ChatInput](/components/input/chat-input))。
142
+
127
143
  ## 图片加载失败
128
144
 
129
- `<img>` 触发 `onerror` 时,切换为粉色背景 + 红色边框的错误占位:
145
+ `<img>` 触发 `onerror` 时,切换为粉色背景 + 红色边框的错误占位(与 `status=error` 同一套 UI):
130
146
 
131
147
  ## 混合文件(图片 + 文件)
132
148
 
@@ -238,6 +254,7 @@ MIME 为 `image/*` 时渲染为图片缩略图(`cursor: zoom-in`)。点击
238
254
  | `file.url` 有值 | `file.url` | 打开全屏预览 |
239
255
  | 无 url、有 `File` | `URL.createObjectURL(file.file)`(按 key 缓存) | 打开全屏预览 |
240
256
  | 图片加载失败 | 错误占位 | 不进入预览列表 |
257
+ | `status` 为 pending / error | 遮罩 loading 或错误占位 | 不进入预览列表 |
241
258
 
242
259
  blob URL 按附件 key 缓存,同一文件重复渲染不会重复创建;文件被移除或组件卸载时统一 `revokeObjectURL`。
243
260
 
@@ -254,7 +271,7 @@ blob URL 按附件 key 缓存,同一文件重复渲染不会重复创建;文
254
271
  ```typescript
255
272
  import type { UploadFile, BinaryInputContent } from '@blueking/chat-x';
256
273
 
257
- // 上传状态(ChatInput 内部使用,FileContent 不使用此字段)
274
+ // 上传状态:ChatInput 写入,FileContent 消费以渲染 pending / error
258
275
  enum UploadStatus {
259
276
  Pending = 'pending', // 上传中
260
277
  Success = 'success', // 上传成功
@@ -264,7 +281,7 @@ enum UploadStatus {
264
281
  // 上传文件(FileContent 的 files 数组中每一项)
265
282
  type UploadFile = BinaryInputContent & {
266
283
  file?: File; // 原始 File 对象,无则文件大小不显示
267
- status?: UploadStatus; // 上传状态(ChatInput 使用,FileContent 不消费)
284
+ status?: UploadStatus; // 上传状态(pending 遮罩 loading,error 失败样式)
268
285
  };
269
286
 
270
287
  // 二进制内容基础类型
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": "2.0.0",
3
- "generatedAt": "2026-09-01T04:15:26.001Z",
3
+ "generatedAt": "2026-09-02T02:31:02.404Z",
4
4
  "domains": {
5
5
  "setup": {
6
6
  "label": "对话搭建",
@@ -1018,8 +1018,8 @@
1018
1018
  "name": "FileContent 文件内容",
1019
1019
  "slug": "file-content",
1020
1020
  "kind": "component",
1021
- "description": "渲染文件附件,支持图片预览和下载事件。",
1022
- "aiSummary": "渲染文件附件,支持图片预览和下载事件。 源码位置:src/components/chat-content/file-content/file-content.vue。",
1021
+ "description": "渲染文件附件,支持图片预览、上传中/失败态和下载事件。",
1022
+ "aiSummary": "渲染文件附件,支持图片预览、上传中/失败态和下载事件。 源码位置:src/components/chat-content/file-content/file-content.vue。",
1023
1023
  "relatedComponents": [
1024
1024
  {
1025
1025
  "slug": "image-preview",
package/dist/mcp/index.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,26 +1,8 @@
1
1
  {
2
2
  "name": "@blueking/chat-x",
3
- "version": "0.0.51-beta.1",
3
+ "version": "0.0.51-beta.3",
4
4
  "description": "蓝鲸智云 AI Chat 组件库 —— 遵循 AG-UI,为 AI Agent 和人类开发者共同设计的对话 UI 组件库。",
5
5
  "main": "index.js",
6
- "scripts": {
7
- "prepublishOnly": "vite --config vite.config.ts build && pnpm dts && pnpm mcp:build",
8
- "dev": "vite --config vite.config.ts",
9
- "dts": "vue-tsc --project tsconfig.dts.json",
10
- "build": "vitest && vite --config vite.config.ts build && pnpm dts",
11
- "preview": "vite --config vite.config.ts build --mode preview && pnpm dts",
12
- "lint:script": "eslint . --ext .vue,.ts --fix",
13
- "lint:style": "stylelint \"**/*.{scss,css,vue}\" --fix",
14
- "lint:all": "pnpm lint:script && pnpm lint:style",
15
- "test": "vitest",
16
- "test:coverage": "vitest run --coverage",
17
- "wiki:dev": "vitepress dev wikis",
18
- "wiki:build": "vitepress build wikis",
19
- "mcp:build:index": "tsx mcp/scripts/build-index.ts",
20
- "mcp:build": "tsc -p mcp/tsconfig.json && pnpm mcp:build:index",
21
- "mcp:start": "node dist/mcp/index.js",
22
- "mcp:dev": "tsx mcp/src/index.ts"
23
- },
24
6
  "bin": {
25
7
  "chat-x-mcp": "dist/mcp/index.js"
26
8
  },
@@ -68,7 +50,6 @@
68
50
  "zod": "^4.3.6"
69
51
  },
70
52
  "devDependencies": {
71
- "@blueking/chat-helper": "workspace:*",
72
53
  "@types/katex": "^0.16.7",
73
54
  "@types/lodash": "^4.17.23",
74
55
  "@types/markdown-it": "^14.1.2",
@@ -97,6 +78,24 @@
97
78
  "vite-bundle-analyzer": "^1.3.2",
98
79
  "vitepress": "2.0.0-alpha.16",
99
80
  "vitest": "^4.0.18",
100
- "vue-tsc": "^3.1.4"
81
+ "vue-tsc": "^3.1.4",
82
+ "@blueking/chat-helper": "0.0.12-beta.29"
83
+ },
84
+ "scripts": {
85
+ "dev": "vite --config vite.config.ts",
86
+ "dts": "vue-tsc --project tsconfig.dts.json",
87
+ "build": "vitest && vite --config vite.config.ts build && pnpm dts",
88
+ "preview": "vite --config vite.config.ts build --mode preview && pnpm dts",
89
+ "lint:script": "eslint . --ext .vue,.ts --fix",
90
+ "lint:style": "stylelint \"**/*.{scss,css,vue}\" --fix",
91
+ "lint:all": "pnpm lint:script && pnpm lint:style",
92
+ "test": "vitest",
93
+ "test:coverage": "vitest run --coverage",
94
+ "wiki:dev": "vitepress dev wikis",
95
+ "wiki:build": "vitepress build wikis",
96
+ "mcp:build:index": "tsx mcp/scripts/build-index.ts",
97
+ "mcp:build": "tsc -p mcp/tsconfig.json && pnpm mcp:build:index",
98
+ "mcp:start": "node dist/mcp/index.js",
99
+ "mcp:dev": "tsx mcp/src/index.ts"
101
100
  }
102
101
  }