@blueking/chat-x 0.0.52-dev.6 → 2.4.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 +25 -8
- package/dist/components/chat-content/flow-agent-content/use-flow-agent.d.ts +6 -1
- package/dist/components/chat-content/flow-agent-content/use-flow-node-actions.d.ts +1 -1
- package/dist/composables/use-common.d.ts +9 -0
- package/dist/icons/execution.d.ts +4 -0
- package/dist/index.css +1 -1
- package/dist/index.js +2726 -2668
- package/dist/index.js.map +1 -1
- package/dist/lang/lang.d.ts +4 -2
- package/dist/mcp/generated/docs/activity-layout.md +4 -2
- package/dist/mcp/generated/docs/activity-message.md +18 -16
- package/dist/mcp/generated/docs/ai-selection.md +5 -2
- package/dist/mcp/generated/docs/ai-slash-input.md +4 -0
- package/dist/mcp/generated/docs/animation-text.md +5 -1
- package/dist/mcp/generated/docs/assistant-message.md +1 -1
- package/dist/mcp/generated/docs/chat-container.md +3 -1
- package/dist/mcp/generated/docs/chat-input.md +1 -0
- package/dist/mcp/generated/docs/cite-content.md +6 -2
- package/dist/mcp/generated/docs/common-error-content.md +8 -2
- package/dist/mcp/generated/docs/delete-tool.md +6 -1
- package/dist/mcp/generated/docs/desc-panel.md +5 -1
- package/dist/mcp/generated/docs/detail-section.md +3 -1
- package/dist/mcp/generated/docs/execution-summary.md +23 -1
- package/dist/mcp/generated/docs/file-content.md +8 -2
- package/dist/mcp/generated/docs/file-upload-btn.md +3 -1
- package/dist/mcp/generated/docs/flow-agent-content.md +40 -26
- package/dist/mcp/generated/docs/flow-agent-node-detail.md +5 -2
- package/dist/mcp/generated/docs/highlight-keyword.md +9 -31
- package/dist/mcp/generated/docs/input-attachment.md +3 -0
- package/dist/mcp/generated/docs/input-info-alert.md +3 -0
- package/dist/mcp/generated/docs/interrupt-message.md +6 -1
- package/dist/mcp/generated/docs/key-value-content.md +6 -1
- package/dist/mcp/generated/docs/knowledge-rag-content.md +4 -1
- package/dist/mcp/generated/docs/markdown-container.md +3 -0
- package/dist/mcp/generated/docs/markdown-content.md +2 -2
- package/dist/mcp/generated/docs/mention-tag.md +2 -0
- package/dist/mcp/generated/docs/mention-text.md +3 -0
- package/dist/mcp/generated/docs/message-container.md +4 -4
- package/dist/mcp/generated/docs/preview-toolbar.md +4 -0
- package/dist/mcp/generated/docs/reference-content.md +6 -1
- package/dist/mcp/generated/docs/reference-doc-content.md +3 -1
- package/dist/mcp/generated/docs/simple-table.md +3 -1
- package/dist/mcp/generated/docs/text-content.md +5 -1
- package/dist/mcp/generated/docs/tool-btn.md +10 -4
- package/dist/mcp/generated/docs/toolcall-render.md +8 -8
- package/dist/mcp/generated/docs/use-animation-text.md +2 -1
- package/dist/mcp/generated/docs/use-artifact-preview.md +11 -1
- package/dist/mcp/generated/docs/use-flow-node-actions.md +20 -10
- package/dist/mcp/generated/docs/user-question-card.md +31 -0
- package/dist/mcp/generated/docs/vnode-renderer.md +3 -3
- package/dist/mcp/generated/index.json +93 -100
- package/dist/mcp/index.js +0 -0
- package/dist/mcp/tools/list-components.js +1 -0
- package/dist/mcp/tools/list-components.js.map +1 -1
- package/dist/mcp/utils/doc-loader.d.ts +1 -0
- package/dist/mcp/utils/doc-loader.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/package.json +22 -21
- package/skills/blueking-chat-x/references/components/activity-message.md +15 -13
- package/skills/blueking-chat-x/references/components/ai-selection.md +1 -1
- package/skills/blueking-chat-x/references/components/flow-agent-content.md +14 -10
- package/dist/mcp/generated/docs/questions-container.md +0 -88
- package/dist/mcp/generated/docs/selection-question.md +0 -91
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
---
|
|
12
12
|
<!-- FULL DOC -->
|
|
13
13
|
|
|
14
|
-
#
|
|
14
|
+
# ToolCallRender 工具调用渲染器
|
|
15
15
|
## 源码事实
|
|
16
16
|
|
|
17
17
|
- **源码位置**:`src/components/tool-call/toolcall-render/toolcall-render.vue`
|
|
@@ -47,14 +47,14 @@
|
|
|
47
47
|
|
|
48
48
|
```vue
|
|
49
49
|
<template>
|
|
50
|
-
<
|
|
50
|
+
<ToolCallRender
|
|
51
51
|
:tool-call="toolCall"
|
|
52
52
|
:status="MessageStatus.Complete"
|
|
53
53
|
/>
|
|
54
54
|
</template>
|
|
55
55
|
|
|
56
56
|
<script setup lang="ts">
|
|
57
|
-
import {
|
|
57
|
+
import { ToolCallRender, MessageStatus, MessageContentType, type ToolCall } from '@blueking/chat-x';
|
|
58
58
|
|
|
59
59
|
const toolCall: ToolCall = {
|
|
60
60
|
id: 'call_1',
|
|
@@ -171,10 +171,10 @@ durationDisplay = formatDuration(props.duration || toolCall?.toolMessage?.durati
|
|
|
171
171
|
|
|
172
172
|
```vue
|
|
173
173
|
<!-- 方式一:直接传 duration prop(优先) -->
|
|
174
|
-
<
|
|
174
|
+
<ToolCallRender :tool-call="toolCall" status="complete" :duration="1200" />
|
|
175
175
|
|
|
176
176
|
<!-- 方式二(推荐):duration 放在 toolMessage 中,无需额外 prop -->
|
|
177
|
-
<
|
|
177
|
+
<ToolCallRender :tool-call="toolCallWithDuration" status="complete" />
|
|
178
178
|
```
|
|
179
179
|
|
|
180
180
|
```typescript
|
|
@@ -242,7 +242,7 @@ const failedToolCall: ToolCall = {
|
|
|
242
242
|
|
|
243
243
|
## 与 AssistantMessage 配合
|
|
244
244
|
|
|
245
|
-
`
|
|
245
|
+
`ToolCallRender` 通常不需要单独使用,将 `toolCalls` 传给 `AssistantMessage`,会自动为每个工具调用渲染 `ToolCallRender`:
|
|
246
246
|
|
|
247
247
|
```typescript
|
|
248
248
|
const assistantMessage = {
|
|
@@ -274,7 +274,7 @@ const assistantMessage = {
|
|
|
274
274
|
|
|
275
275
|
```vue
|
|
276
276
|
<template>
|
|
277
|
-
<
|
|
277
|
+
<ToolCallRender
|
|
278
278
|
v-for="toolCall in assistantMessage.toolCalls"
|
|
279
279
|
:key="toolCall.id"
|
|
280
280
|
:tool-call="toolCall"
|
|
@@ -338,7 +338,7 @@ interface ToolMessage {
|
|
|
338
338
|
role: 'tool';
|
|
339
339
|
content: string; // 返回内容(通常为 JSON 字符串)
|
|
340
340
|
status: MessageStatus;
|
|
341
|
-
duration: number; // 调用耗时(毫秒),被
|
|
341
|
+
duration: number; // 调用耗时(毫秒),被 ToolCallRender 自动读取
|
|
342
342
|
error?: string; // 错误信息(仅当 content 为空时由 ToolMessage 展示)
|
|
343
343
|
toolCallId: string; // 对应 ToolCall.id
|
|
344
344
|
}
|
|
@@ -122,7 +122,8 @@ useAnimationText 接收 MaybeRef<string> 与可选 AnimationConfig(fadeDuratio
|
|
|
122
122
|
</template>
|
|
123
123
|
|
|
124
124
|
<script setup lang="ts">
|
|
125
|
-
|
|
125
|
+
// AnimationText 未从包入口导出,见内部组件文档
|
|
126
|
+
// import { useAnimationText } from '@blueking/chat-x' 才是公开 API
|
|
126
127
|
</script>
|
|
127
128
|
```
|
|
128
129
|
|
|
@@ -67,8 +67,8 @@ import {
|
|
|
67
67
|
useCustomTabProvider,
|
|
68
68
|
useMessageGroup,
|
|
69
69
|
FILE_ARTIFACT_TAB_NAME,
|
|
70
|
+
t,
|
|
70
71
|
} from '@blueking/chat-x';
|
|
71
|
-
import { t } from '@blueking/chat-x/lang';
|
|
72
72
|
|
|
73
73
|
const { addCustomTab, ensureCustomTab, removeCustomTab } = useCustomTabProvider({ /* ... */ });
|
|
74
74
|
|
|
@@ -157,6 +157,16 @@ const onArtifactClick = async (file: AIFileInfo) => {
|
|
|
157
157
|
| `FILE_ARTIFACT_TAB_NAME` | `'file-artifact'` | 「文件产物」侧栏 Tab 的固定标识,不可关闭 |
|
|
158
158
|
| `ARTIFACT_PREVIEW_TOKEN` | `Symbol` | provide/inject 注入 Token |
|
|
159
159
|
|
|
160
|
+
## triggerArtifactDownload
|
|
161
|
+
|
|
162
|
+
从包入口导出,用临时 `<a download>` 触发浏览器下载(面板下载按钮内部使用):
|
|
163
|
+
|
|
164
|
+
```typescript
|
|
165
|
+
import { triggerArtifactDownload } from '@blueking/chat-x';
|
|
166
|
+
|
|
167
|
+
triggerArtifactDownload(downloadUrl, file.name);
|
|
168
|
+
```
|
|
169
|
+
|
|
160
170
|
## 返回值说明
|
|
161
171
|
|
|
162
172
|
| 属性/方法名 | 类型 | 说明 |
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
useFlowNodeActions 接收 onInterruptResume 与 openNodeDetail,返回 getNodeActions 与 isNodePending。 失败节点按 retryable/skippable 展示重试/跳过,详情恒在末尾;点击后进入 pending 防重复提交, 以 task_id:node_id:retry 为键自动收敛;点击 resume 时不传 interrupt。
|
|
4
|
+
useFlowNodeActions 接收 onInterruptResume 与 openNodeDetail,返回 getNodeActions 与 isNodePending。 失败节点按 retryable/skippable 展示重试/跳过,详情恒在末尾;点击后进入 pending 防重复提交, 以 task_id:node_id:retry 为键自动收敛;点击 resume 时不传 interrupt。 hideResumeActions 为 true 时只返回详情,覆盖 Share 分享态与侧栏「执行情况」面板两类只读场景。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **flow-agent-content** — FlowAgentContent 内部消费,驱动节点行尾按钮组渲染
|
|
@@ -11,6 +11,10 @@ useFlowNodeActions 接收 onInterruptResume 与 openNodeDetail,返回 getNodeA
|
|
|
11
11
|
|
|
12
12
|
# useFlowNodeActions 节点行尾操作
|
|
13
13
|
|
|
14
|
+
> **导出状态**:内部实现,未从 `@blueking/chat-x` 包入口导出。
|
|
15
|
+
> 实现位于 `src/components/chat-content/flow-agent-content/use-flow-node-actions.ts`,未进入 `src/composables/index.ts`。
|
|
16
|
+
> 由 [FlowAgentContent](/components/agent/flow-agent-content) 内部消费。
|
|
17
|
+
|
|
14
18
|
> **分类**:composable
|
|
15
19
|
|
|
16
20
|
将 FlowAgent 节点行尾的「详情(打开侧栏)」与「重试 / 跳过(回传 Agent resume)」聚合为统一的声明式操作列表。`FlowAgentContent` 只需遍历 `getNodeActions` 返回值渲染按钮,显隐与点击行为均收敛于此 composable。
|
|
@@ -21,7 +25,7 @@ useFlowNodeActions 接收 onInterruptResume 与 openNodeDetail,返回 getNodeA
|
|
|
21
25
|
|
|
22
26
|
```typescript
|
|
23
27
|
function useFlowNodeActions(options: {
|
|
24
|
-
/** 隐藏重试 / 跳过等交互式 resume
|
|
28
|
+
/** 隐藏重试 / 跳过等交互式 resume 操作(分享态、侧栏执行情况面板等只读场景,仅保留「详情」查看入口) */
|
|
25
29
|
hideResumeActions?: Ref<boolean>;
|
|
26
30
|
/** resume 回调(与第三方审批取消同一回调,按 payload.operation 分流) */
|
|
27
31
|
onInterruptResume: Ref<OnInterruptResume | undefined>;
|
|
@@ -71,13 +75,16 @@ interface FlowNodeActionVM {
|
|
|
71
75
|
|
|
72
76
|
| 操作 | `id` | 显隐条件 | 点击行为 |
|
|
73
77
|
| ---- | ------------------ | ------------------------------------------ | --------------------------------------------- |
|
|
74
|
-
| 重试 | `flow_node_retry` | `convergedState === 'failed'` 且 `retryable` | 调用 `onInterruptResume`,**不传** `interrupt` |
|
|
75
|
-
| 跳过 | `flow_node_skip` | `convergedState === 'failed'` 且 `skippable` | 同上 |
|
|
76
|
-
| 详情 | `detail` |
|
|
78
|
+
| 重试 | `flow_node_retry` | `convergedState === 'failed'` 且 `retryable`,且 `hideResumeActions` 为 `false` | 调用 `onInterruptResume`,**不传** `interrupt` |
|
|
79
|
+
| 跳过 | `flow_node_skip` | `convergedState === 'failed'` 且 `skippable`,且 `hideResumeActions` 为 `false` | 同上 |
|
|
80
|
+
| 详情 | `detail` | 始终(不受 `hideResumeActions` 影响) | 调用 `openNodeDetail(task.raw, node.raw)` |
|
|
77
81
|
|
|
78
82
|
展示顺序:重试 → 跳过 → 详情。
|
|
79
83
|
|
|
80
|
-
>
|
|
84
|
+
> **只读场景过滤**:`hideResumeActions` 为 `true` 时,`getNodeActions` 直接过滤掉重试 / 跳过,仅返回「详情」查看入口,用于放开查看、禁止交互的场景。`FlowAgentContent` 目前把两类只读场景并入该入参:
|
|
85
|
+
>
|
|
86
|
+
> - `RenderMode.Share` 分享态
|
|
87
|
+
> - 侧栏「执行情况」面板内(`ExecutionSummary` 通过 `EXECUTION_PANEL_TOKEN` 提供上下文,组件用 `useExecutionPanelInject` 读取)
|
|
81
88
|
|
|
82
89
|
## pending 态与防重复提交
|
|
83
90
|
|
|
@@ -112,12 +119,15 @@ onInterruptResume?.({
|
|
|
112
119
|
|
|
113
120
|
```typescript
|
|
114
121
|
import { toRef } from 'vue';
|
|
115
|
-
import { useFlowNodeActions } from '
|
|
116
|
-
|
|
122
|
+
import { useFlowNodeActions } from '../../src/components/chat-content/flow-agent-content/use-flow-node-actions';
|
|
123
|
+
|
|
124
|
+
// 是否处于侧栏「执行情况」面板内;缺省 false,即对话流内渲染
|
|
125
|
+
// useExecutionPanelInject 来自内部 src/composables/use-common.ts,未从包入口导出
|
|
126
|
+
const isInExecutionPanel = useExecutionPanelInject();
|
|
117
127
|
|
|
118
128
|
const { getNodeActions, isNodePending } = useFlowNodeActions({
|
|
119
|
-
//
|
|
120
|
-
hideResumeActions: computed(() => renderMode.value === RenderMode.Share),
|
|
129
|
+
// 分享态与侧栏执行情况面板均只读:过滤重试 / 跳过,仅保留详情
|
|
130
|
+
hideResumeActions: computed(() => renderMode.value === RenderMode.Share || isInExecutionPanel),
|
|
121
131
|
onInterruptResume: toRef(props, 'onInterruptResume'),
|
|
122
132
|
openNodeDetail,
|
|
123
133
|
});
|
|
@@ -164,6 +164,37 @@ const payload = buildSkipResumePayload(interrupt);
|
|
|
164
164
|
// }
|
|
165
165
|
```
|
|
166
166
|
|
|
167
|
+
## useUserQuestion 与选项辅助
|
|
168
|
+
|
|
169
|
+
以下符号经 interrupt 子 barrel 从 `@blueking/chat-x` 导出,实现在 `src/components/chat-message/interrupt-message/user-question/use-user-question.ts`(不在 `composables/index.ts`)。
|
|
170
|
+
|
|
171
|
+
| 符号 | 说明 |
|
|
172
|
+
| --- | --- |
|
|
173
|
+
| `useUserQuestion` | 答题分页、完成态、`setAnswer` / `buildResolvePayload` / `buildSkipPayload` |
|
|
174
|
+
| `buildSkipResumePayload` | 构造 skip resume(`status: 'cancelled'`,`answers: []`) |
|
|
175
|
+
| `OTHERS_OPTION_LABEL` | Others 选项的固定 `label`(`'others'`) |
|
|
176
|
+
| `toLetter` | 选项序号:0 → A,超过 26 回退数字 |
|
|
177
|
+
| `NormalizedUserQuestionOption` | 选择题内部展示类型(含 `letter` / `isOthers`) |
|
|
178
|
+
|
|
179
|
+
```typescript
|
|
180
|
+
import {
|
|
181
|
+
OTHERS_OPTION_LABEL,
|
|
182
|
+
toLetter,
|
|
183
|
+
useUserQuestion,
|
|
184
|
+
type NormalizedUserQuestionOption,
|
|
185
|
+
} from '@blueking/chat-x';
|
|
186
|
+
|
|
187
|
+
const {
|
|
188
|
+
questions,
|
|
189
|
+
currentIndex,
|
|
190
|
+
completed,
|
|
191
|
+
setAnswer,
|
|
192
|
+
buildResolvePayload,
|
|
193
|
+
} = useUserQuestion(() => pendingInterrupt);
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
自定义 `#question` 面板时,作答有效调用 slot 的 `setAnswer`(即 composable 的 `setAnswer`),无需自己拼 resume。
|
|
197
|
+
|
|
167
198
|
## 自定义题目渲染(#question slot)
|
|
168
199
|
|
|
169
200
|
默认每道题由 [UserQuestionChoice](/components/agent/user-question-choice) 渲染;业务可覆盖 `#question` slot 接入自定义表单:
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
将 Markdown token 转成 VNode
|
|
4
|
+
将 Markdown token 转成 VNode;包入口已导出,通常经 MarkdownContent 使用。 源码位置:src/components/chat-content/vnode-renderer.ts。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **markdown-content** — MarkdownContent 对普通 token 分组使用本组件渲染
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
</template>
|
|
42
42
|
|
|
43
43
|
<script setup lang="ts">
|
|
44
|
-
import
|
|
45
|
-
|
|
44
|
+
import { VNodeRenderer } from '@blueking/chat-x';
|
|
45
|
+
// MarkdownIt 未从包入口导出;文档站 demo 使用页面顶部相对路径
|
|
46
46
|
|
|
47
47
|
const md = new MarkdownIt();
|
|
48
48
|
const tokens = md.parse('这是一段 **加粗文本**。', {});
|