@blueking/chat-x 2.4.0 → 2.4.2-beta.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/components/chat-content/flow-agent-content/flow-agent-state.d.ts +24 -7
- package/dist/components/chat-content/flow-agent-content/use-flow-agent.d.ts +6 -1
- package/dist/icons/execution.d.ts +4 -0
- package/dist/index.css +1 -1
- package/dist/index.js +2443 -2384
- package/dist/index.js.map +1 -1
- package/dist/lang/lang.d.ts +2 -1
- package/dist/mcp/generated/docs/activity-message.md +15 -13
- package/dist/mcp/generated/docs/flow-agent-content.md +19 -14
- package/dist/mcp/generated/docs/shortcut-render.md +19 -1
- package/dist/mcp/generated/index.json +1 -1
- package/package.json +2 -2
- package/skills/blueking-chat-x/references/components/activity-message.md +15 -13
- package/skills/blueking-chat-x/references/components/flow-agent-content.md +14 -10
- package/skills/blueking-chat-x/references/components/shortcut-render.md +19 -1
package/dist/lang/lang.d.ts
CHANGED
|
@@ -55,6 +55,7 @@ export declare const lang: {
|
|
|
55
55
|
readonly 执行中: "Running";
|
|
56
56
|
readonly 成功: "Success";
|
|
57
57
|
readonly 失败: "Failed";
|
|
58
|
+
readonly 已终止: "Terminated";
|
|
58
59
|
readonly 挂起: "Pending";
|
|
59
60
|
readonly 待执行: "To Be Executed";
|
|
60
61
|
readonly 详情: "Details";
|
|
@@ -173,4 +174,4 @@ export declare const lang: {
|
|
|
173
174
|
readonly '\u5B58\u5728\u4E0A\u4F20\u5931\u8D25\u7684\u6587\u4EF6\uFF0C\u8BF7\u5220\u9664\u540E\u91CD\u8BD5': "Remove failed uploads before sending";
|
|
174
175
|
readonly 上传失败: "Upload failed";
|
|
175
176
|
};
|
|
176
|
-
export declare const t: (key: keyof typeof lang) => "Send" | "Stop" | "Add" | "Skill" | "MCP" | "Prompt" | "File" | "Image" | "Tool" | "Knowledge Base" | "Conversation Files" | "Collapse" | "Show More" | "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" | "Supported formats: {formats}" | "{count} file(s) were not added because the format is not supported" | "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" | "支持格式:{formats}" | "有 {count} 个文件因格式不支持未添加" | "你好,我是小鲸" | "清空搜索" | "搜索结果为空" | "有效证据" | "全屏" | "退出全屏" | "请选择以继续" | "继续" | "收到信息:" | "待审批" | "已审批" | "完成" | "跳过" | "单选" | "多选" | "其他" | "已完成" | "题" | "回答内容" | "已回复" | "请输入..." | "文件产物" | "文件列表" | "搜索文件关键字" | "预览加载失败" | "暂无可预览的文件" | "文件上传中,请稍候" | "存在上传失败的文件,请删除后重试" | "上传失败";
|
|
177
|
+
export declare const t: (key: keyof typeof lang) => "Send" | "Stop" | "Add" | "Skill" | "MCP" | "Prompt" | "File" | "Image" | "Tool" | "Knowledge Base" | "Conversation Files" | "Collapse" | "Show More" | "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" | "Terminated" | "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" | "Supported formats: {formats}" | "{count} file(s) were not added because the format is not supported" | "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" | "支持格式:{formats}" | "有 {count} 个文件因格式不支持未添加" | "你好,我是小鲸" | "清空搜索" | "搜索结果为空" | "有效证据" | "全屏" | "退出全屏" | "请选择以继续" | "继续" | "收到信息:" | "待审批" | "已审批" | "完成" | "跳过" | "单选" | "多选" | "其他" | "已完成" | "题" | "回答内容" | "已回复" | "请输入..." | "文件产物" | "文件列表" | "搜索文件关键字" | "预览加载失败" | "暂无可预览的文件" | "文件上传中,请稍候" | "存在上传失败的文件,请删除后重试" | "上传失败";
|
|
@@ -160,12 +160,12 @@ const collapsed = ref(false); // false = 展开,true = 折叠
|
|
|
160
160
|
|
|
161
161
|
### 核心交互
|
|
162
162
|
|
|
163
|
-
- **标题栏**:显示「执行情况」+ 所有任务聚合后的各状态计数(执行中 / 成功 / 失败 /
|
|
163
|
+
- **标题栏**:显示「执行情况」+ 所有任务聚合后的各状态计数(执行中 / 成功 / 失败 / 挂起 / 已终止 / 待执行 / 跳过),颜色区分。任一任务 `task_state === REVOKED` 时前置橙红色「已终止」并用括号包裹统计
|
|
164
164
|
- **任务组**:逐个展示任务行,带状态图标、总耗时;点击箭头图标可折叠/展开节点列表
|
|
165
165
|
- **有效证据**:`task.has_confidence === true` 时,任务行右侧展示「有效证据」按钮,点击后在侧栏打开置信度/证据详情 Tab(`props.has_confidence: true`)
|
|
166
166
|
- **默认激活**:当 `MessageContainer` 已注入滚动上下文(`useContainerScrollProvider`,供 `FlowAgentContent` 内 `useContainerScrollConsumer` 读取)时,组件挂载后若存在 `task.is_active === true` 且 `task.has_confidence === true` 的任务,会自动在侧栏打开该任务的「有效证据」Tab;无滚动 Provider(例如独立演示)时不做自动打开。用户手动切换 Tab 后不再沿用 `is_active` 默认高亮
|
|
167
167
|
- **选中态**:当前侧栏 Tab 与任务行 / 节点行联动高亮(`is-selected`);任务 Tab 与「有效证据」Tab 均视为该任务的选中态
|
|
168
|
-
-
|
|
168
|
+
- **节点列表**:每个节点显示状态圆点、名称和耗时;`REVOKED` 叶子节点使用已终止圆点(`#F55B0E` 描边 / `#FEE8DD` 浅底);hover 时出现行尾操作按钮组
|
|
169
169
|
- **失败节点操作**:失败且 `retryable` / `skippable` 为 `true` 的节点,hover 时额外展示「重试」「跳过」按钮,点击后通过 `onInterruptResume` 回传 Agent(不传 `interrupt`)。仅在对话流内出现:侧栏「执行情况」面板(`ExecutionSummary`)内渲染的同一消息只保留「详情」
|
|
170
170
|
- **节点详情**:点击「详情」会通过 `useCustomTabConsumer` 在 `ChatContainer` 侧边栏新增自定义 Tab,展示节点配置(基础信息、输入参数、输出参数)
|
|
171
171
|
|
|
@@ -178,11 +178,11 @@ FlowAgentContent(activityType = 'flow_agent')
|
|
|
178
178
|
├── ActivityLayout(公共折叠布局容器)
|
|
179
179
|
│ └── #title
|
|
180
180
|
│ ├── Loading / ArrowIcon(随 status 切换)
|
|
181
|
-
│ └──
|
|
181
|
+
│ └── 执行情况:[已终止(] 执行中 N / 成功 N / 失败 N / 挂起 N / 已终止 N [)]
|
|
182
182
|
└── #default
|
|
183
183
|
└── TaskGroup × N
|
|
184
184
|
├── TaskHeader(is-selected / has-confidence;箭头点击折叠)
|
|
185
|
-
│ ├── 状态图标(running=Loading / success / failed / suspended)
|
|
185
|
+
│ ├── 状态图标(running=Loading / success / failed / terminated / suspended)
|
|
186
186
|
│ ├── task_name(HighlightKeyword 支持搜索高亮)
|
|
187
187
|
│ └── trailing:总耗时 + 「有效证据」(has_confidence 时)
|
|
188
188
|
└── NodeList
|
|
@@ -318,15 +318,17 @@ const messages = [
|
|
|
318
318
|
|
|
319
319
|
### 节点状态映射
|
|
320
320
|
|
|
321
|
-
组件内部将 BkFlow
|
|
322
|
-
|
|
323
|
-
| 归并状态
|
|
324
|
-
|
|
|
325
|
-
| `running`
|
|
326
|
-
| `success`
|
|
327
|
-
| `failed`
|
|
328
|
-
| `suspended`
|
|
329
|
-
| `
|
|
321
|
+
组件内部将 BkFlow 原始状态归并为收敛显示状态:
|
|
322
|
+
|
|
323
|
+
| 归并状态 | 原始状态 | 颜色 | 统计 | 整体 header |
|
|
324
|
+
| ------------ | ----------------------------------------------------------------------------------- | --------- | ---- | ----------- |
|
|
325
|
+
| `running` | CREATED / LOOP_READY / READY / RUNNING / BLOCKED / ROLLING_BACK / ROLL_BACK_SUCCESS | #3A84FF | 是 | 否 |
|
|
326
|
+
| `success` | FINISHED | #65C389 | 是 | 否 |
|
|
327
|
+
| `failed` | FAILED / ROLL_BACK_FAILED | #EA3636 | 是 | 否 |
|
|
328
|
+
| `suspended` | SUSPENDED | #F59500 | 是 | 否 |
|
|
329
|
+
| `terminated` | REVOKED | #F55B0E | 是 | 是 |
|
|
330
|
+
| `pending` | PENDING | #4D4F56 | 是 | 否 |
|
|
331
|
+
| `skipped` | SKIPPED | #5B7290 | 是 | 否 |
|
|
330
332
|
|
|
331
333
|
### 侧栏 Tab 命名规则
|
|
332
334
|
|
|
@@ -30,7 +30,8 @@
|
|
|
30
30
|
|
|
31
31
|
## 核心能力
|
|
32
32
|
|
|
33
|
-
- **状态聚合统计**:汇总所有任务的 `statistics.state_counts`,在标题栏按「执行中 / 成功 / 失败 / 挂起 /
|
|
33
|
+
- **状态聚合统计**:汇总所有任务的 `statistics.state_counts`,在标题栏按「执行中 / 成功 / 失败 / 挂起 / 已终止 / 待执行 / 跳过」分类展示带颜色的计数(超过 99 显示 `99+`)
|
|
34
|
+
- **已终止整体覆盖**:任一任务 `task_state === REVOKED` 时,标题栏在统计前展示橙红色「已终止」,并用括号包裹统计:`执行情况:已终止(…)`;任务行使用终止图标,叶子节点使用已终止圆点(`#F55B0E` 描边 / `#FEE8DD` 浅底)
|
|
34
35
|
- **两级折叠**:任务整体由 `ActivityLayout` 折叠;每个任务节点列表可单独展开/收起
|
|
35
36
|
- **耗时格式化**:节点耗时与任务总耗时按 `d/h/m/s` 紧凑展示,小于 1 秒显示 `<1s`
|
|
36
37
|
- **节点行尾操作**:hover 失败节点行显示「重试 / 跳过 / 详情」按钮组(间距 12px);成功 / 运行中等非失败节点仅显示「详情」。重试 / 跳过依赖节点 `retryable` / `skippable` 能力位,通过 `onInterruptResume` 回传 Agent
|
|
@@ -41,15 +42,17 @@
|
|
|
41
42
|
|
|
42
43
|
## 状态映射
|
|
43
44
|
|
|
44
|
-
组件将后端原始 `state` / `task_state`
|
|
45
|
+
组件将后端原始 `state` / `task_state` 归一为收敛状态(`getConvergedState`),用于图标、颜色与统计分类。配置源为 `STATE_DEFS`:
|
|
45
46
|
|
|
46
|
-
| 收敛状态
|
|
47
|
-
|
|
|
48
|
-
| `
|
|
49
|
-
| `
|
|
50
|
-
| `
|
|
51
|
-
| `
|
|
52
|
-
| `
|
|
47
|
+
| 收敛状态 | 颜色 | 原始状态 | 统计 | 整体 header |
|
|
48
|
+
| ------------- | ----------- | --------------------------------------------------------------------------------- | ---- | ----------- |
|
|
49
|
+
| `running` | `#3A84FF` | `CREATED`、`LOOP_READY`、`READY`、`RUNNING`、`BLOCKED`、`ROLLING_BACK`、`ROLL_BACK_SUCCESS` 及未知状态(兜底) | 是 | 否 |
|
|
50
|
+
| `success` | `#65C389` | `FINISHED` | 是 | 否 |
|
|
51
|
+
| `failed` | `#EA3636` | `FAILED`、`ROLL_BACK_FAILED` | 是 | 否 |
|
|
52
|
+
| `suspended` | `#F59500` | `SUSPENDED` | 是 | 否 |
|
|
53
|
+
| `terminated` | `#F55B0E` | `REVOKED` | 是 | 是 |
|
|
54
|
+
| `pending` | `#4D4F56` | `PENDING` | 是 | 否 |
|
|
55
|
+
| `skipped` | `#5B7290` | `SKIPPED` | 是 | 否 |
|
|
53
56
|
|
|
54
57
|
## 基础用法
|
|
55
58
|
|
|
@@ -167,7 +170,8 @@ addCustomTab?.({
|
|
|
167
170
|
ActivityLayout(activity-type=flow_agent,v-model:collapsed)
|
|
168
171
|
├── #title(执行情况统计栏)
|
|
169
172
|
│ ├── AiLoading / ArrowRightIcon(加载态 / 折叠箭头)
|
|
170
|
-
│
|
|
173
|
+
│ ├── flow-agent-flow-header(任一任务 REVOKED 时展示「已终止」)
|
|
174
|
+
│ └── flow-agent-stat-item × N(按收敛状态分类的计数,含 terminated)
|
|
171
175
|
└── flow-agent-task-group × N(任务)
|
|
172
176
|
├── flow-agent-task-header(点击折叠当前任务)
|
|
173
177
|
│ ├── task-arrow(任务展开箭头)
|
|
@@ -261,10 +265,11 @@ interface BkFlowNode {
|
|
|
261
265
|
3. **任务总耗时为节点累加**:`task-time` 由各节点 `elapsed_time` 求和得到,并非任务级独立字段。
|
|
262
266
|
4. **`task_outputs` 暂不渲染**:模板中任务输出展示区块已注释,传入也不会显示。
|
|
263
267
|
5. **未知状态兜底为 `running`**:`getConvergedState` 对未识别的原始状态统一归为运行中。
|
|
264
|
-
6.
|
|
265
|
-
7.
|
|
266
|
-
8.
|
|
267
|
-
9.
|
|
268
|
+
6. **已终止整体覆盖**:判定只看任务 `task_state`(不扫节点);叶子节点 `state === REVOKED` 使用已终止圆点;`REVOKED` 计入标题栏 / tooltip 统计,与叶子节点同色 `#F55B0E`。
|
|
269
|
+
7. **Share 模式只读查看**:`RenderMode.Share` 下保留节点/任务耗时与「详情」「有效证据」查看入口,仅过滤「重试 / 跳过」等交互式 resume 操作(由 `useFlowNodeActions` 的 `hideResumeActions` 收敛)。
|
|
270
|
+
8. **侧栏「执行情况」面板同为只读**:面板内经 `ExecutionSummary` → `MessageRender` 渲染的本组件不展示「重试 / 跳过」,只保留「详情」;判定来自 `useExecutionPanelInject()`(内部上下文,未从包入口导出;缺省 `false`),与 Share 态一起并入 `hideResumeActions`。因此脱离 `ExecutionSummary` 独立使用组件时,行为与对话流内一致。
|
|
271
|
+
9. **`onInterruptResume` 透传链路**:`MessageRender` → `ActivityMessage` → `FlowAgentContent`;未传入时重试 / 跳过按钮仍展示但点击无回调。
|
|
272
|
+
10. **pending 自动收敛**:`useFlowNodeActions` 以 `task_id:node_id:retry` 为 pending 键;节点重试再次失败(`retry` +1)后键变化,进行中态自动解除,无需手动清理。
|
|
268
273
|
|
|
269
274
|
## 关联组件
|
|
270
275
|
|
|
@@ -309,6 +309,24 @@ const components: ShortcutComponent[] = [
|
|
|
309
309
|
];
|
|
310
310
|
```
|
|
311
311
|
|
|
312
|
+
`type: 'select'` 时,组件会把默认挂载点写进 `popoverOptions.boundary`,再与 `component.props.popoverOptions` 浅合并。调用方传入的字段(含 `boundary`)优先。
|
|
313
|
+
|
|
314
|
+
## select 下拉挂载
|
|
315
|
+
|
|
316
|
+
Select 的下拉是 bkui Popover,默认会 Teleport 到 `document.body`,层级从 8000 起算。小鲸浮窗是 `position: fixed; z-index: 10000`,下拉挂到 body 后会画在浮窗后面。
|
|
317
|
+
|
|
318
|
+
`ShortcutRender` 挂在 `ChatContainer` 内时,复用同一份 tippy `appendTo`(`useCommonTippyInject`)作为 `popoverOptions.boundary`:
|
|
319
|
+
|
|
320
|
+
| `appendTo` | `boundary` |
|
|
321
|
+
| --- | --- |
|
|
322
|
+
| `HTMLElement` | 该元素 |
|
|
323
|
+
| 返回 `HTMLElement` 的函数 | 函数返回值。ChatBot 默认是 `() => rootRef ?? document.body`,即 `.ai-chatbot` |
|
|
324
|
+
| 未注入,或值为 `'parent'` 等无法解析的结果 | `'body'` |
|
|
325
|
+
|
|
326
|
+
这样下拉留在小鲸自己的层叠上下文里,bkui 自己的递增 z-index 即可盖过表单,不必再写死一个高于浮窗的数字。
|
|
327
|
+
|
|
328
|
+
不要把 `boundary` 设成 `'parent'`。`.ai-shortcut-render` 有 `overflow: hidden`,下拉会被裁掉。全屏时 `ChatContainer` 会把 `appendTo` 换成全屏容器,下拉跟着挂到那里。
|
|
329
|
+
|
|
312
330
|
通过 `component.formItemProps` 透传给 `Form.FormItem`:
|
|
313
331
|
|
|
314
332
|
```typescript
|
|
@@ -368,7 +386,7 @@ const components: ShortcutComponent[] = [
|
|
|
368
386
|
| `text` | `Input` | 同 `input`,兼容旧版写法 |
|
|
369
387
|
| `textarea` | `Input[type=textarea]` | 多行文本,**始终独占一行** |
|
|
370
388
|
| `number` | `Input[type=number]` | 数字输入,支持 `min` / `max` |
|
|
371
|
-
| `select` | `Select` | 下拉选择,需配置 `options
|
|
389
|
+
| `select` | `Select` | 下拉选择,需配置 `options`;下拉挂载见 [select 下拉挂载](#select-下拉挂载) |
|
|
372
390
|
| `radioGroup` | `Radio.Group` | 单选组,需配置 `options` |
|
|
373
391
|
| `checkboxGroup` | `Checkbox.Group` | 多选组,需配置 `options` |
|
|
374
392
|
| `switcher` | `Switcher` | 开关,值为 `boolean` |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blueking/chat-x",
|
|
3
|
-
"version": "2.4.
|
|
3
|
+
"version": "2.4.2-beta.1",
|
|
4
4
|
"description": "蓝鲸智云 AI Chat 组件库 —— 遵循 AG-UI,为 AI Agent 和人类开发者共同设计的对话 UI 组件库。",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"vitepress": "2.0.0-alpha.16",
|
|
81
81
|
"vitest": "^4.0.18",
|
|
82
82
|
"vue-tsc": "^3.1.4",
|
|
83
|
-
"@blueking/chat-helper": "
|
|
83
|
+
"@blueking/chat-helper": "2.4.0"
|
|
84
84
|
},
|
|
85
85
|
"scripts": {
|
|
86
86
|
"dev": "vite --config vite.config.ts",
|
|
@@ -155,12 +155,12 @@ const collapsed = ref(false); // false = 展开,true = 折叠
|
|
|
155
155
|
|
|
156
156
|
### 核心交互
|
|
157
157
|
|
|
158
|
-
- **标题栏**:显示「执行情况」+ 所有任务聚合后的各状态计数(执行中 / 成功 / 失败 /
|
|
158
|
+
- **标题栏**:显示「执行情况」+ 所有任务聚合后的各状态计数(执行中 / 成功 / 失败 / 挂起 / 已终止 / 待执行 / 跳过),颜色区分。任一任务 `task_state === REVOKED` 时前置橙红色「已终止」并用括号包裹统计
|
|
159
159
|
- **任务组**:逐个展示任务行,带状态图标、总耗时;点击箭头图标可折叠/展开节点列表
|
|
160
160
|
- **有效证据**:`task.has_confidence === true` 时,任务行右侧展示「有效证据」按钮,点击后在侧栏打开置信度/证据详情 Tab(`props.has_confidence: true`)
|
|
161
161
|
- **默认激活**:当 `MessageContainer` 已注入滚动上下文(`useContainerScrollProvider`,供 `FlowAgentContent` 内 `useContainerScrollConsumer` 读取)时,组件挂载后若存在 `task.is_active === true` 且 `task.has_confidence === true` 的任务,会自动在侧栏打开该任务的「有效证据」Tab;无滚动 Provider(例如独立演示)时不做自动打开。用户手动切换 Tab 后不再沿用 `is_active` 默认高亮
|
|
162
162
|
- **选中态**:当前侧栏 Tab 与任务行 / 节点行联动高亮(`is-selected`);任务 Tab 与「有效证据」Tab 均视为该任务的选中态
|
|
163
|
-
-
|
|
163
|
+
- **节点列表**:每个节点显示状态圆点、名称和耗时;`REVOKED` 叶子节点使用已终止圆点(`#F55B0E` 描边 / `#FEE8DD` 浅底);hover 时出现行尾操作按钮组
|
|
164
164
|
- **失败节点操作**:失败且 `retryable` / `skippable` 为 `true` 的节点,hover 时额外展示「重试」「跳过」按钮,点击后通过 `onInterruptResume` 回传 Agent(不传 `interrupt`)。仅在对话流内出现:侧栏「执行情况」面板(`ExecutionSummary`)内渲染的同一消息只保留「详情」
|
|
165
165
|
- **节点详情**:点击「详情」会通过 `useCustomTabConsumer` 在 `ChatContainer` 侧边栏新增自定义 Tab,展示节点配置(基础信息、输入参数、输出参数)
|
|
166
166
|
|
|
@@ -173,11 +173,11 @@ FlowAgentContent(activityType = 'flow_agent')
|
|
|
173
173
|
├── ActivityLayout(公共折叠布局容器)
|
|
174
174
|
│ └── #title
|
|
175
175
|
│ ├── Loading / ArrowIcon(随 status 切换)
|
|
176
|
-
│ └──
|
|
176
|
+
│ └── 执行情况:[已终止(] 执行中 N / 成功 N / 失败 N / 挂起 N / 已终止 N [)]
|
|
177
177
|
└── #default
|
|
178
178
|
└── TaskGroup × N
|
|
179
179
|
├── TaskHeader(is-selected / has-confidence;箭头点击折叠)
|
|
180
|
-
│ ├── 状态图标(running=Loading / success / failed / suspended)
|
|
180
|
+
│ ├── 状态图标(running=Loading / success / failed / terminated / suspended)
|
|
181
181
|
│ ├── task_name(HighlightKeyword 支持搜索高亮)
|
|
182
182
|
│ └── trailing:总耗时 + 「有效证据」(has_confidence 时)
|
|
183
183
|
└── NodeList
|
|
@@ -313,15 +313,17 @@ const messages = [
|
|
|
313
313
|
|
|
314
314
|
### 节点状态映射
|
|
315
315
|
|
|
316
|
-
组件内部将 BkFlow
|
|
317
|
-
|
|
318
|
-
| 归并状态
|
|
319
|
-
|
|
|
320
|
-
| `running`
|
|
321
|
-
| `success`
|
|
322
|
-
| `failed`
|
|
323
|
-
| `suspended`
|
|
324
|
-
| `
|
|
316
|
+
组件内部将 BkFlow 原始状态归并为收敛显示状态:
|
|
317
|
+
|
|
318
|
+
| 归并状态 | 原始状态 | 颜色 | 统计 | 整体 header |
|
|
319
|
+
| ------------ | ----------------------------------------------------------------------------------- | --------- | ---- | ----------- |
|
|
320
|
+
| `running` | CREATED / LOOP_READY / READY / RUNNING / BLOCKED / ROLLING_BACK / ROLL_BACK_SUCCESS | #3A84FF | 是 | 否 |
|
|
321
|
+
| `success` | FINISHED | #65C389 | 是 | 否 |
|
|
322
|
+
| `failed` | FAILED / ROLL_BACK_FAILED | #EA3636 | 是 | 否 |
|
|
323
|
+
| `suspended` | SUSPENDED | #F59500 | 是 | 否 |
|
|
324
|
+
| `terminated` | REVOKED | #F55B0E | 是 | 是 |
|
|
325
|
+
| `pending` | PENDING | #4D4F56 | 是 | 否 |
|
|
326
|
+
| `skipped` | SKIPPED | #5B7290 | 是 | 否 |
|
|
325
327
|
|
|
326
328
|
### 侧栏 Tab 命名规则
|
|
327
329
|
|
|
@@ -23,7 +23,8 @@
|
|
|
23
23
|
|
|
24
24
|
## 核心能力
|
|
25
25
|
|
|
26
|
-
- **状态聚合统计**:汇总所有任务的 `statistics.state_counts`,在标题栏按「执行中 / 成功 / 失败 / 挂起 /
|
|
26
|
+
- **状态聚合统计**:汇总所有任务的 `statistics.state_counts`,在标题栏按「执行中 / 成功 / 失败 / 挂起 / 已终止 / 待执行 / 跳过」分类展示带颜色的计数(超过 99 显示 `99+`)
|
|
27
|
+
- **已终止整体覆盖**:任一任务 `task_state === REVOKED` 时,标题栏在统计前展示橙红色「已终止」,并用括号包裹统计:`执行情况:已终止(…)`;任务行使用终止图标,叶子节点使用已终止圆点(`#F55B0E` 描边 / `#FEE8DD` 浅底)
|
|
27
28
|
- **两级折叠**:任务整体由 `ActivityLayout` 折叠;每个任务节点列表可单独展开/收起
|
|
28
29
|
- **耗时格式化**:节点耗时与任务总耗时按 `d/h/m/s` 紧凑展示,小于 1 秒显示 `<1s`
|
|
29
30
|
- **节点行尾操作**:hover 失败节点行显示「重试 / 跳过 / 详情」按钮组(间距 12px);成功 / 运行中等非失败节点仅显示「详情」。重试 / 跳过依赖节点 `retryable` / `skippable` 能力位,通过 `onInterruptResume` 回传 Agent
|
|
@@ -34,15 +35,17 @@
|
|
|
34
35
|
|
|
35
36
|
## 状态映射
|
|
36
37
|
|
|
37
|
-
组件将后端原始 `state` / `task_state`
|
|
38
|
+
组件将后端原始 `state` / `task_state` 归一为收敛状态(`getConvergedState`),用于图标、颜色与统计分类。配置源为 `STATE_DEFS`:
|
|
38
39
|
|
|
39
|
-
| 收敛状态
|
|
40
|
-
|
|
|
41
|
-
| `
|
|
42
|
-
| `
|
|
43
|
-
| `
|
|
44
|
-
| `
|
|
45
|
-
| `
|
|
40
|
+
| 收敛状态 | 颜色 | 原始状态 | 统计 | 整体 header |
|
|
41
|
+
| ------------- | ----------- | --------------------------------------------------------------------------------- | ---- | ----------- |
|
|
42
|
+
| `running` | `#3A84FF` | `CREATED`、`LOOP_READY`、`READY`、`RUNNING`、`BLOCKED`、`ROLLING_BACK`、`ROLL_BACK_SUCCESS` 及未知状态(兜底) | 是 | 否 |
|
|
43
|
+
| `success` | `#65C389` | `FINISHED` | 是 | 否 |
|
|
44
|
+
| `failed` | `#EA3636` | `FAILED`、`ROLL_BACK_FAILED` | 是 | 否 |
|
|
45
|
+
| `suspended` | `#F59500` | `SUSPENDED` | 是 | 否 |
|
|
46
|
+
| `terminated` | `#F55B0E` | `REVOKED` | 是 | 是 |
|
|
47
|
+
| `pending` | `#4D4F56` | `PENDING` | 是 | 否 |
|
|
48
|
+
| `skipped` | `#5B7290` | `SKIPPED` | 是 | 否 |
|
|
46
49
|
|
|
47
50
|
## 基础用法
|
|
48
51
|
|
|
@@ -160,7 +163,8 @@ addCustomTab?.({
|
|
|
160
163
|
ActivityLayout(activity-type=flow_agent,v-model:collapsed)
|
|
161
164
|
├── #title(执行情况统计栏)
|
|
162
165
|
│ ├── AiLoading / ArrowRightIcon(加载态 / 折叠箭头)
|
|
163
|
-
│
|
|
166
|
+
│ ├── flow-agent-flow-header(任一任务 REVOKED 时展示「已终止」)
|
|
167
|
+
│ └── flow-agent-stat-item × N(按收敛状态分类的计数,含 terminated)
|
|
164
168
|
└── flow-agent-task-group × N(任务)
|
|
165
169
|
├── flow-agent-task-header(点击折叠当前任务)
|
|
166
170
|
│ ├── task-arrow(任务展开箭头)
|
|
@@ -306,6 +306,24 @@ const components: ShortcutComponent[] = [
|
|
|
306
306
|
];
|
|
307
307
|
```
|
|
308
308
|
|
|
309
|
+
`type: 'select'` 时,组件会把默认挂载点写进 `popoverOptions.boundary`,再与 `component.props.popoverOptions` 浅合并。调用方传入的字段(含 `boundary`)优先。
|
|
310
|
+
|
|
311
|
+
## select 下拉挂载
|
|
312
|
+
|
|
313
|
+
Select 的下拉是 bkui Popover,默认会 Teleport 到 `document.body`,层级从 8000 起算。小鲸浮窗是 `position: fixed; z-index: 10000`,下拉挂到 body 后会画在浮窗后面。
|
|
314
|
+
|
|
315
|
+
`ShortcutRender` 挂在 `ChatContainer` 内时,复用同一份 tippy `appendTo`(`useCommonTippyInject`)作为 `popoverOptions.boundary`:
|
|
316
|
+
|
|
317
|
+
| `appendTo` | `boundary` |
|
|
318
|
+
| --- | --- |
|
|
319
|
+
| `HTMLElement` | 该元素 |
|
|
320
|
+
| 返回 `HTMLElement` 的函数 | 函数返回值。ChatBot 默认是 `() => rootRef ?? document.body`,即 `.ai-chatbot` |
|
|
321
|
+
| 未注入,或值为 `'parent'` 等无法解析的结果 | `'body'` |
|
|
322
|
+
|
|
323
|
+
这样下拉留在小鲸自己的层叠上下文里,bkui 自己的递增 z-index 即可盖过表单,不必再写死一个高于浮窗的数字。
|
|
324
|
+
|
|
325
|
+
不要把 `boundary` 设成 `'parent'`。`.ai-shortcut-render` 有 `overflow: hidden`,下拉会被裁掉。全屏时 `ChatContainer` 会把 `appendTo` 换成全屏容器,下拉跟着挂到那里。
|
|
326
|
+
|
|
309
327
|
通过 `component.formItemProps` 透传给 `Form.FormItem`:
|
|
310
328
|
|
|
311
329
|
```typescript
|
|
@@ -365,7 +383,7 @@ const components: ShortcutComponent[] = [
|
|
|
365
383
|
| `text` | `Input` | 同 `input`,兼容旧版写法 |
|
|
366
384
|
| `textarea` | `Input[type=textarea]` | 多行文本,**始终独占一行** |
|
|
367
385
|
| `number` | `Input[type=number]` | 数字输入,支持 `min` / `max` |
|
|
368
|
-
| `select` | `Select` | 下拉选择,需配置 `options
|
|
386
|
+
| `select` | `Select` | 下拉选择,需配置 `options`;下拉挂载见 [select 下拉挂载](#select-下拉挂载) |
|
|
369
387
|
| `radioGroup` | `Radio.Group` | 单选组,需配置 `options` |
|
|
370
388
|
| `checkboxGroup` | `Checkbox.Group` | 多选组,需配置 `options` |
|
|
371
389
|
| `switcher` | `Switcher` | 开关,值为 `boolean` |
|