@blueking/chat-x 0.0.48-beta.1 → 0.0.49-beta.10
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/ag-ui/types/constants.d.ts +1 -0
- package/dist/ag-ui/types/file.d.ts +13 -0
- package/dist/ag-ui/types/index.d.ts +1 -0
- package/dist/ag-ui/types/messages.d.ts +4 -0
- package/dist/components/chat-message/assistant-message/assistant-message.vue.d.ts +12 -1
- package/dist/components/chat-message/assistant-message/message-artifacts/artifact-file-card.vue.d.ts +12 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/artifact-preview/artifact-preview-host.vue.d.ts +11 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/artifact-preview/preview-strategy.d.ts +8 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/artifact-preview/renderers/code-preview.vue.d.ts +8 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/artifact-preview/renderers/html-preview.vue.d.ts +6 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/artifact-preview/renderers/image-preview.vue.d.ts +7 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/artifact-preview/renderers/markdown-preview.vue.d.ts +6 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/artifact-preview/renderers/txt-preview.vue.d.ts +6 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/artifact-preview/renderers/url-iframe-preview.vue.d.ts +6 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/artifact-preview/use-artifact-preview-loader.d.ts +22 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/file-artifact-panel.vue.d.ts +13 -0
- package/dist/components/chat-message/assistant-message/message-artifacts/message-artifacts.vue.d.ts +9 -0
- package/dist/components/chat-message/interrupt-message/user-question/use-user-question.d.ts +7 -2
- package/dist/components/chat-message/user-message/user-message.vue.d.ts +15 -2
- package/dist/components/file-icon/file-icon.vue.d.ts +7 -0
- package/dist/components/index.d.ts +3 -1
- package/dist/components/message-tools/message-time/format-message-time.d.ts +8 -0
- package/dist/components/message-tools/message-time/message-time.vue.d.ts +8 -0
- package/dist/components/message-tools/message-tools.vue.d.ts +11 -1
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/use-artifact-preview.d.ts +49 -0
- package/dist/composables/use-container-scroll.d.ts +9 -2
- package/dist/composables/use-custom-tab.d.ts +7 -3
- package/dist/composables/use-global-config.d.ts +3 -0
- package/dist/composables/use-message-group.d.ts +505 -0
- package/dist/icons/file-icons.d.ts +4 -0
- package/dist/icons/file.d.ts +6 -0
- package/dist/icons/index.d.ts +2 -0
- package/dist/icons/tools.d.ts +3 -0
- package/dist/index.css +1 -1
- package/dist/index.js +3203 -2368
- package/dist/index.js.map +1 -1
- package/dist/lang/lang.d.ts +9 -1
- package/dist/mcp/generated/docs/activity-message.md +122 -97
- package/dist/mcp/generated/docs/assistant-message.md +146 -75
- package/dist/mcp/generated/docs/chat-container.md +121 -38
- package/dist/mcp/generated/docs/chat-input.md +2 -10
- package/dist/mcp/generated/docs/constants.md +3 -1
- package/dist/mcp/generated/docs/content-render.md +2 -10
- package/dist/mcp/generated/docs/execution-summary.md +3 -3
- package/dist/mcp/generated/docs/file-artifact-panel.md +293 -0
- package/dist/mcp/generated/docs/file-icon.md +111 -0
- package/dist/mcp/generated/docs/info-message.md +29 -12
- package/dist/mcp/generated/docs/interrupt.md +1 -0
- package/dist/mcp/generated/docs/loading-message.md +36 -17
- package/dist/mcp/generated/docs/message-container.md +27 -23
- package/dist/mcp/generated/docs/message-render.md +47 -59
- package/dist/mcp/generated/docs/message-time.md +180 -0
- package/dist/mcp/generated/docs/message-tools.md +47 -12
- package/dist/mcp/generated/docs/messages.md +9 -0
- package/dist/mcp/generated/docs/reasoning-message.md +17 -20
- package/dist/mcp/generated/docs/tool-message.md +61 -45
- package/dist/mcp/generated/docs/toolcall-render.md +18 -10
- package/dist/mcp/generated/docs/use-artifact-preview.md +234 -0
- package/dist/mcp/generated/docs/use-container-scroll.md +6 -2
- package/dist/mcp/generated/docs/use-custom-tab.md +25 -8
- package/dist/mcp/generated/docs/use-global-config.md +15 -5
- package/dist/mcp/generated/docs/use-message-group.md +37 -5
- package/dist/mcp/generated/docs/user-message.md +191 -121
- package/dist/mcp/generated/docs/user-question-card.md +6 -3
- package/dist/mcp/generated/index.json +144 -18
- package/dist/mcp/index.js +0 -0
- package/dist/utils/file-type.d.ts +14 -0
- package/dist/utils/index.d.ts +1 -0
- package/package.json +20 -21
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
消息悬浮工具栏,组合复制、删除、反馈等工具按钮;提供 prepend / append 两端插槽承载消息时间等附加内容。 源码位置:src/components/message-tools/message-tools.vue。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **tool-btn** — 普通工具项由 ToolBtn 渲染
|
|
8
8
|
- **user-feedback** — like/unlike 时弹出反馈表单
|
|
9
9
|
- **delete-tool** — id 为 delete 时替换为带确认的删除按钮
|
|
10
|
+
- **message-time** — 通过 prepend / append 插槽嵌入消息时间
|
|
10
11
|
|
|
11
12
|
---
|
|
12
13
|
<!-- FULL DOC -->
|
|
@@ -20,22 +21,22 @@
|
|
|
20
21
|
|
|
21
22
|
> **能力域**:工具与反馈
|
|
22
23
|
|
|
23
|
-
AI
|
|
24
|
+
AI 消息的操作工具栏组件,由**左侧消息工具区**和**右侧更新工具区**两部分组成,中间以分隔线分隔;两端另有 `prepend` / `append` 插槽用于挂载消息时间等附加内容。仅 `like` / `unlike` 按钮会弹出反馈表单(`UserFeedback`),其余按钮直接触发 `onAction`。
|
|
24
25
|
|
|
25
26
|
## 组件结构
|
|
26
27
|
|
|
27
28
|
```
|
|
28
|
-
|
|
29
|
-
│ .ai-message-tools-container
|
|
30
|
-
│ ┌─────────────────────┐ │
|
|
31
|
-
│ │ messageTools │ │ │ updateTools
|
|
32
|
-
│ │ copy cite rebuild… │ │ │
|
|
33
|
-
│ └─────────────────────┘ │
|
|
34
|
-
│
|
|
35
|
-
|
|
29
|
+
┌───────────────────────────────────────────────────────────────────────┐
|
|
30
|
+
│ .ai-message-tools-container(display: flex,gap: 4px) │
|
|
31
|
+
│ ┌────────┐ ┌─────────────────────┐ │ ┌───────────────┐ ┌───────┐ │
|
|
32
|
+
│ │#prepend│ │ messageTools │ │ │ updateTools │ │#append│ │
|
|
33
|
+
│ │ │ │ copy cite rebuild… │ │ │ like unlike… │ │ │ │
|
|
34
|
+
│ └────────┘ └─────────────────────┘ │ └───────────────┘ └───────┘ │
|
|
35
|
+
│ 插槽区 左侧区域 分隔线 右侧区域 插槽区 │
|
|
36
|
+
└───────────────────────────────────────────────────────────────────────┘
|
|
36
37
|
```
|
|
37
38
|
|
|
38
|
-
- 分隔线(`.ai-divider
|
|
39
|
+
- 分隔线(`.ai-divider`)与**右侧更新工具区**均仅在 `updateTools` 非空时渲染
|
|
39
40
|
- `updateTools` 中 `id` 为 `like` / `unlike` 的按钮被 `Tippy` 弹窗包裹,点击后展示 `UserFeedback` 反馈表单
|
|
40
41
|
- `updateTools` 中 `id` 为 `delete` 的按钮使用 `DeleteTool` 组件,点击后展示**确认删除弹窗**(含"删除"/"取消"按钮),确认后触发 `onAction`
|
|
41
42
|
- `updateTools` 中其他按钮直接触发 `onAction`,不弹表单
|
|
@@ -224,6 +225,32 @@ const CONST_UPDATE_TOOLS = [
|
|
|
224
225
|
|
|
225
226
|
**渲染效果**
|
|
226
227
|
|
|
228
|
+
## 两端插槽(prepend / append)
|
|
229
|
+
|
|
230
|
+
`prepend`(工具图标左侧)与 `append`(工具图标右侧)用于在工具栏两端挂载附加内容,项目内用于放置 [MessageTime 消息时间](/components/feedback/message-time):
|
|
231
|
+
|
|
232
|
+
| 场景 | 使用插槽 | 效果 |
|
|
233
|
+
| --------- | --------- | --------------------------------------- |
|
|
234
|
+
| 用户消息 | `prepend` | 时间显示在工具图标左侧 |
|
|
235
|
+
| AI 消息组 | `append` | 时间显示在工具图标右侧 |
|
|
236
|
+
|
|
237
|
+
```vue
|
|
238
|
+
<template>
|
|
239
|
+
<MessageTools :on-action="handleAction">
|
|
240
|
+
<template #append>
|
|
241
|
+
<MessageTime :created-at="createdAt" />
|
|
242
|
+
</template>
|
|
243
|
+
</MessageTools>
|
|
244
|
+
</template>
|
|
245
|
+
|
|
246
|
+
<script setup lang="ts">
|
|
247
|
+
import { MessageTime, MessageTools } from '@blueking/chat-x';
|
|
248
|
+
</script>
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
- 插槽包裹容器(`.ai-message-tools-prepend` / `.ai-message-tools-append`)仅在对应插槽传入时渲染
|
|
252
|
+
- 插槽内容为空时(如消息无 `createdAt`,`MessageTime` 不渲染任何 DOM),包裹容器命中 `:empty` 被收起,不会留下多余间距
|
|
253
|
+
|
|
227
254
|
## 工具栏状态控制
|
|
228
255
|
|
|
229
256
|
`messageToolsStatus` 控制工具栏整体状态:
|
|
@@ -357,6 +384,13 @@ const CONST_UPDATE_TOOLS = [
|
|
|
357
384
|
| -------- | ------------------------------------------------------------- | ------------------------------------------ |
|
|
358
385
|
| feedback | `(tool: IToolBtn, reasonList: string[], otherReason: string)` | 用户在反馈表单点击"提交"后触发(not 取消) |
|
|
359
386
|
|
|
387
|
+
### Slots
|
|
388
|
+
|
|
389
|
+
| 插槽名 | 作用域参数 | 说明 |
|
|
390
|
+
| ------- | ---------- | ------------------------------------------------ |
|
|
391
|
+
| prepend | — | 工具图标左侧的附加内容,如用户消息的时间 |
|
|
392
|
+
| append | — | 工具图标右侧的附加内容,如 AI 消息组的时间 |
|
|
393
|
+
|
|
360
394
|
## 类型定义
|
|
361
395
|
|
|
362
396
|
```typescript
|
|
@@ -382,4 +416,5 @@ enum MessageToolsStatus {
|
|
|
382
416
|
|
|
383
417
|
- [ToolBtn](/components/feedback/tool-btn) — 单项工具按钮
|
|
384
418
|
- [UserFeedback](/components/feedback/user-feedback) — 点赞/踩反馈面板
|
|
385
|
-
- [DeleteTool](/components/feedback/delete-tool) — 删除二次确认
|
|
419
|
+
- [DeleteTool](/components/feedback/delete-tool) — 删除二次确认
|
|
420
|
+
- [MessageTime](/components/feedback/message-time) — 两端插槽内的消息时间
|
|
@@ -54,6 +54,10 @@ interface BaseMessage<T extends MessageType, C = string> {
|
|
|
54
54
|
// 消息名称(可选)
|
|
55
55
|
name?: string;
|
|
56
56
|
|
|
57
|
+
// 可选:消息创建时间,ISO 字符串或毫秒时间戳,由消息层(chat-helper)写入
|
|
58
|
+
// 用于 MessageTime 展示;缺省时不展示时间
|
|
59
|
+
createdAt?: number | string;
|
|
60
|
+
|
|
57
61
|
// 消息属性(可选)
|
|
58
62
|
property?: {
|
|
59
63
|
extra?: {
|
|
@@ -144,6 +148,9 @@ enum MessageStatus {
|
|
|
144
148
|
// 已完成
|
|
145
149
|
Complete = 'complete',
|
|
146
150
|
|
|
151
|
+
// 已完成(与 Complete 同义,兼容协议/后端返回的 completed)
|
|
152
|
+
Completed = 'completed',
|
|
153
|
+
|
|
147
154
|
// 已禁用
|
|
148
155
|
Disabled = 'disabled',
|
|
149
156
|
|
|
@@ -170,6 +177,8 @@ enum MessageStatus {
|
|
|
170
177
|
}
|
|
171
178
|
```
|
|
172
179
|
|
|
180
|
+
完整取值与说明见 [常量枚举 · MessageStatus](./constants#messagestatus)。
|
|
181
|
+
|
|
173
182
|
## 具体消息类型
|
|
174
183
|
|
|
175
184
|
### UserMessage
|
|
@@ -12,13 +12,14 @@
|
|
|
12
12
|
<!-- FULL DOC -->
|
|
13
13
|
|
|
14
14
|
# ReasoningMessage 推理消息
|
|
15
|
+
|
|
15
16
|
## 源码事实
|
|
16
17
|
|
|
17
18
|
- **源码位置**:`src/components/chat-message/reasoning-message/reasoning-message.vue`
|
|
18
19
|
- **能力域**:消息系统
|
|
19
20
|
- **能力说明**:渲染推理过程,覆盖加载、错误与 Markdown 内容展示。
|
|
20
21
|
|
|
21
|
-
>
|
|
22
|
+
> **导出说明**:`ReasoningMessage` **未**从包入口导出(入口同名是 TS interface)。消费方经 `MessageRender` / `MessageContainer` 使用。下文 `ReasoningMessageComp` 为文档站内部示例。
|
|
22
23
|
|
|
23
24
|
AI 思维链(Chain-of-Thought)推理过程展示组件。由**可点击标题栏**和**内容区域**组成,内容区支持 Markdown 渲染。`duration` 传入后自动折叠一次,用户可随时点击标题展开/收起。
|
|
24
25
|
|
|
@@ -44,17 +45,19 @@ AI 思维链(Chain-of-Thought)推理过程展示组件。由**可点击标
|
|
|
44
45
|
|
|
45
46
|
```vue
|
|
46
47
|
<template>
|
|
47
|
-
<
|
|
48
|
-
:content="content"
|
|
49
|
-
:status="status"
|
|
50
|
-
/>
|
|
48
|
+
<MessageRender :message="message" />
|
|
51
49
|
</template>
|
|
52
50
|
|
|
53
51
|
<script setup lang="ts">
|
|
54
|
-
import {
|
|
55
|
-
|
|
56
|
-
const
|
|
57
|
-
|
|
52
|
+
import { MessageRender, MessageRole, MessageStatus } from '@blueking/chat-x';
|
|
53
|
+
|
|
54
|
+
const message = {
|
|
55
|
+
id: '1',
|
|
56
|
+
messageId: '1',
|
|
57
|
+
role: MessageRole.Reasoning,
|
|
58
|
+
status: MessageStatus.Complete,
|
|
59
|
+
content: ['让我分析一下这个问题...', '首先需要考虑以下几个方面...'],
|
|
60
|
+
};
|
|
58
61
|
</script>
|
|
59
62
|
```
|
|
60
63
|
|
|
@@ -113,11 +116,12 @@ const { stop } = watch(
|
|
|
113
116
|
通过 `v-model:collapsed` 从外部读取或设置折叠状态:
|
|
114
117
|
|
|
115
118
|
```vue
|
|
119
|
+
<!-- 文档站内部示例:组件本体支持 v-model:collapsed;消费方一般经 MessageRender 渲染 -->
|
|
116
120
|
<template>
|
|
117
121
|
<button @click="collapsed = !collapsed">
|
|
118
122
|
{{ collapsed ? '展开推理' : '收起推理' }}
|
|
119
123
|
</button>
|
|
120
|
-
<
|
|
124
|
+
<ReasoningMessageComp
|
|
121
125
|
v-model:collapsed="collapsed"
|
|
122
126
|
:content="content"
|
|
123
127
|
:status="status"
|
|
@@ -127,7 +131,7 @@ const { stop } = watch(
|
|
|
127
131
|
|
|
128
132
|
<script setup lang="ts">
|
|
129
133
|
import { ref } from 'vue';
|
|
130
|
-
import {
|
|
134
|
+
import { MessageStatus } from '@blueking/chat-x';
|
|
131
135
|
|
|
132
136
|
const collapsed = ref(false);
|
|
133
137
|
const status = MessageStatus.Complete;
|
|
@@ -220,17 +224,10 @@ interface ReasoningMessage {
|
|
|
220
224
|
duration?: number; // 推理耗时(毫秒)
|
|
221
225
|
name?: string;
|
|
222
226
|
}
|
|
223
|
-
|
|
224
|
-
enum MessageStatus {
|
|
225
|
-
Pending = 'pending',
|
|
226
|
-
Streaming = 'streaming',
|
|
227
|
-
Complete = 'complete',
|
|
228
|
-
Success = 'success',
|
|
229
|
-
Error = 'error',
|
|
230
|
-
Stop = 'stop',
|
|
231
|
-
}
|
|
232
227
|
```
|
|
233
228
|
|
|
229
|
+
> `MessageStatus` 完整取值见 [常量枚举](../../types/constants)。本组件完成态识别 `complete` / `success`(与标题文案表一致)。
|
|
230
|
+
|
|
234
231
|
## 关联组件
|
|
235
232
|
|
|
236
233
|
- [MessageRender](/components/message/message-render) — reasoning 角色由其实例化
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
渲染工具返回内容;DescPanel 解析 JSON 为 key-value,嵌套值 JSON.stringify 后经 HighlightKeyword 展示。 源码位置:src/components/chat-message/tool-message/tool-message.vue。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **assistant-message** — 结果常作为 assistant 消息中 toolCall.toolMessage 内联展示
|
|
@@ -12,51 +12,57 @@
|
|
|
12
12
|
<!-- FULL DOC -->
|
|
13
13
|
|
|
14
14
|
# ToolMessage 工具消息
|
|
15
|
+
|
|
15
16
|
## 源码事实
|
|
16
17
|
|
|
17
18
|
- **源码位置**:`src/components/chat-message/tool-message/tool-message.vue`
|
|
18
19
|
- **能力域**:消息系统
|
|
19
|
-
- **能力说明**:渲染工具返回内容,JSON 场景交给 DescPanel 展示。
|
|
20
|
+
- **能力说明**:渲染工具返回内容,JSON 场景交给 DescPanel + HighlightKeyword 展示。
|
|
20
21
|
|
|
21
|
-
>
|
|
22
|
+
> **导出说明**:`ToolMessage` **未**从包入口导出(入口同名是 TS interface)。消费方经 `MessageRender` / `ToolcallRender` 使用。下文 `ToolMessageComp` 为文档站内部示例。
|
|
22
23
|
|
|
23
|
-
|
|
24
|
+
工具执行结果展示组件。内部通过 `DescPanel` 渲染,标题固定为「返回内容」,可解析 JSON 为 key-value 列表。
|
|
24
25
|
|
|
25
|
-
>
|
|
26
|
+
> **通常不需要直接使用**。`ToolcallRender` 在 `toolCall.toolMessage` 有值时内联渲染;`role: 'tool'` 也可由 `MessageRender` 渲染。
|
|
26
27
|
|
|
27
28
|
## 渲染架构
|
|
28
29
|
|
|
29
30
|
```
|
|
30
31
|
ToolMessage
|
|
31
|
-
└── DescPanel(desc=
|
|
32
|
-
├── JSON.parse
|
|
33
|
-
│ └── key-value
|
|
34
|
-
│
|
|
35
|
-
|
|
36
|
-
|
|
32
|
+
└── DescPanel(desc = content || (typeof error === 'string' ? error : undefined),title="返回内容")
|
|
33
|
+
├── JSON.parse 成功且结果为 object/array(排除 null)
|
|
34
|
+
│ └── key-value 列表
|
|
35
|
+
│ · key / value 均经 HighlightKeyword 展示
|
|
36
|
+
│ · 嵌套 object/array:JSON.stringify 后展示(无 overflow-tips)
|
|
37
|
+
└── 其他(parse 失败 / 标量)
|
|
38
|
+
└── HighlightKeyword 纯文本
|
|
37
39
|
```
|
|
38
40
|
|
|
39
41
|
## 基础用法
|
|
40
42
|
|
|
41
43
|
```vue
|
|
42
44
|
<template>
|
|
43
|
-
<
|
|
44
|
-
:content="content"
|
|
45
|
-
tool-call-id="call_1"
|
|
46
|
-
:duration="850"
|
|
47
|
-
/>
|
|
45
|
+
<MessageRender :message="message" />
|
|
48
46
|
</template>
|
|
49
47
|
|
|
50
48
|
<script setup lang="ts">
|
|
51
|
-
import {
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
49
|
+
import { MessageRender, MessageRole, MessageStatus } from '@blueking/chat-x';
|
|
50
|
+
|
|
51
|
+
const message = {
|
|
52
|
+
id: 't1',
|
|
53
|
+
messageId: 't1',
|
|
54
|
+
role: MessageRole.Tool,
|
|
55
|
+
status: MessageStatus.Complete,
|
|
56
|
+
toolCallId: 'call_1',
|
|
57
|
+
duration: 850,
|
|
58
|
+
content: JSON.stringify({
|
|
59
|
+
city: '北京',
|
|
60
|
+
temperature: 22,
|
|
61
|
+
weather: '晴',
|
|
62
|
+
humidity: '45%',
|
|
63
|
+
wind: '东北风 3 级',
|
|
64
|
+
}),
|
|
65
|
+
};
|
|
60
66
|
</script>
|
|
61
67
|
```
|
|
62
68
|
|
|
@@ -70,18 +76,22 @@ ToolMessage
|
|
|
70
76
|
|
|
71
77
|
```vue
|
|
72
78
|
<template>
|
|
73
|
-
<
|
|
74
|
-
content=""
|
|
75
|
-
:error="error"
|
|
76
|
-
tool-call-id="call_3"
|
|
77
|
-
:duration="5000"
|
|
78
|
-
/>
|
|
79
|
+
<MessageRender :message="message" />
|
|
79
80
|
</template>
|
|
80
81
|
|
|
81
82
|
<script setup lang="ts">
|
|
82
|
-
import {
|
|
83
|
-
|
|
84
|
-
const
|
|
83
|
+
import { MessageRender, MessageRole, MessageStatus } from '@blueking/chat-x';
|
|
84
|
+
|
|
85
|
+
const message = {
|
|
86
|
+
id: 't3',
|
|
87
|
+
messageId: 't3',
|
|
88
|
+
role: MessageRole.Tool,
|
|
89
|
+
status: MessageStatus.Error,
|
|
90
|
+
toolCallId: 'call_3',
|
|
91
|
+
duration: 5000,
|
|
92
|
+
content: '',
|
|
93
|
+
error: 'Connection timeout: database server is unreachable (timeout: 5000ms)',
|
|
94
|
+
};
|
|
85
95
|
</script>
|
|
86
96
|
```
|
|
87
97
|
|
|
@@ -98,25 +108,27 @@ ToolMessage
|
|
|
98
108
|
| 解析失败(非法 JSON) | 捕获异常,返回原字符串 | 纯文本 |
|
|
99
109
|
| `content` 和 `error` 均为空 | `''` → 解析失败 | 空内容区 |
|
|
100
110
|
|
|
101
|
-
> **注意**:JSON
|
|
111
|
+
> **注意**:JSON 数组 `typeof [] === 'object'`,会以 `0:`、`1:`、`2:` 为键渲染为列表,而非整段纯文本。
|
|
102
112
|
|
|
103
|
-
|
|
113
|
+
**嵌套对象 / 数组值**:`DescPanel` 用 `JSON.stringify(value)` 转成字符串后交给 `HighlightKeyword`,**不再**使用 overflow-tips。
|
|
104
114
|
|
|
105
115
|
```typescript
|
|
106
|
-
//
|
|
116
|
+
// key-value 列表
|
|
107
117
|
const jsonObject = '{"city":"北京","temperature":22}';
|
|
108
118
|
|
|
109
|
-
//
|
|
119
|
+
// index-keyed 列表(0: item1, 1: item2)
|
|
110
120
|
const jsonArray = '["item1","item2","item3"]';
|
|
111
121
|
|
|
112
|
-
//
|
|
113
|
-
const
|
|
114
|
-
const jsonBool = 'true';
|
|
122
|
+
// 嵌套值 stringify 展示
|
|
123
|
+
const nested = '{"result":"success","data":{"city":"北京","meta":{"humidity":45}}}';
|
|
115
124
|
|
|
116
|
-
//
|
|
125
|
+
// 标量 / 非法 JSON → 纯文本
|
|
126
|
+
const jsonNumber = '42';
|
|
117
127
|
const plainText = '查询成功,共返回 10 条记录。';
|
|
118
128
|
```
|
|
119
129
|
|
|
130
|
+
**嵌套 JSON 渲染效果**
|
|
131
|
+
|
|
120
132
|
## 与 ToolcallRender 的关系
|
|
121
133
|
|
|
122
134
|
`ToolcallRender` 在详情面板展开时,若 `toolCall.toolMessage` 有值,会在底部内联渲染 `ToolMessage`:
|
|
@@ -186,8 +198,8 @@ const messages = [
|
|
|
186
198
|
|
|
187
199
|
| 属性名 | 类型 | 说明 |
|
|
188
200
|
| ---------- | ------------------ | ------------------------------------------------------------------------------- |
|
|
189
|
-
| content | `string`
|
|
190
|
-
| error | `string`
|
|
201
|
+
| content | `string` | 工具执行返回内容;与 `error` 通过 `\|\|` 决定优先级,**truthy 时 error 被忽略** |
|
|
202
|
+
| error | `boolean \| string` | 类型上可为 boolean;**仅当为 `string` 且 content 为 falsy 时**才会展示 |
|
|
191
203
|
| toolCallId | `string` | 关联的工具调用 ID(透传,组件内不使用) |
|
|
192
204
|
| duration | `number` | 工具执行耗时(毫秒,透传,组件内不使用) |
|
|
193
205
|
| status | `MessageStatus` | 消息状态(透传,组件内不使用) |
|
|
@@ -210,11 +222,15 @@ interface ToolMessage {
|
|
|
210
222
|
content: string;
|
|
211
223
|
toolCallId: string; // 关联的 ToolCall.id
|
|
212
224
|
duration: number; // 工具执行耗时(毫秒)
|
|
213
|
-
error?: string; //
|
|
225
|
+
error?: boolean | string; // 仅 string 会展示在 DescPanel
|
|
214
226
|
name?: string;
|
|
215
227
|
}
|
|
216
228
|
```
|
|
217
229
|
|
|
230
|
+
### Events / Slots / Expose
|
|
231
|
+
|
|
232
|
+
无。
|
|
233
|
+
|
|
218
234
|
## 关联组件
|
|
219
235
|
|
|
220
236
|
- [AssistantMessage](/components/message/assistant-message) — toolCall.toolMessage 内联场景
|
|
@@ -31,7 +31,9 @@
|
|
|
31
31
|
│ ├── "调用工具:" / "调用 MCP:"(有 mcpName 时)
|
|
32
32
|
│ ├── .toolcall-header-title(工具名,overflow-tips 溢出截断)
|
|
33
33
|
│ └── .toolcall-status-title
|
|
34
|
-
│ ├── Loading
|
|
34
|
+
│ ├── Loading(pending / streaming)
|
|
35
|
+
│ ├── BkFlowSuccessIcon(success / complete / completed)
|
|
36
|
+
│ ├── BkFlowFailedIcon(error)
|
|
35
37
|
│ ├── 状态文案(调用中 / 调用成功 / 调用失败)
|
|
36
38
|
│ └── .toolcall-duration(耗时,如 "(1.2s)")
|
|
37
39
|
│
|
|
@@ -76,16 +78,16 @@
|
|
|
76
78
|
|
|
77
79
|
## 调用状态
|
|
78
80
|
|
|
79
|
-
`status` prop 同时控制头部的 CSS class(`toolcall-status-{status}
|
|
81
|
+
`status` prop 同时控制头部的 CSS class(`toolcall-status-{status}`)、背景/边框颜色、状态文案和状态图标:
|
|
80
82
|
|
|
81
|
-
| `status`
|
|
82
|
-
|
|
|
83
|
-
| `pending` / `streaming`
|
|
84
|
-
| `complete` / `success` | 调用成功 | `#ebfaf0` | `#a1e3ba` |
|
|
85
|
-
| `error`
|
|
86
|
-
| 其他 / `undefined`
|
|
83
|
+
| `status` | 状态文案 | 背景色 | 边框色 | 状态图标 |
|
|
84
|
+
| ------------------------------------- | -------- | ----------------- | --------- | ------------------- |
|
|
85
|
+
| `pending` / `streaming` | 调用中 | `#fafbfd` | `#dcdee5` | `Loading` |
|
|
86
|
+
| `complete` / `completed` / `success` | 调用成功 | `#ebfaf0` | `#a1e3ba` | `BkFlowSuccessIcon` |
|
|
87
|
+
| `error` | 调用失败 | `#fff0f0` | `#f8b4b4` | `BkFlowFailedIcon` |
|
|
88
|
+
| 其他 / `undefined` | 调用中 | —(无匹配 class) | — | — |
|
|
87
89
|
|
|
88
|
-
> **说明**:`statusTitle`
|
|
90
|
+
> **说明**:`statusTitle` 将 `Completed`(`completed`)与 `Complete` / `Success` 一并视为成功;主题 `$toolcallStatusMap` 同步提供 `completed` 色值。`default` 与 `case Pending` 共享「调用中」文案,`streaming` 与未知 status 命中 `default`。状态图标互斥:`pending` / `streaming` 显示 `Loading`;`success` / `complete` / `completed` 显示 `BkFlowSuccessIcon`;`error` 显示 `BkFlowFailedIcon`。
|
|
89
91
|
|
|
90
92
|
**三种状态对比**
|
|
91
93
|
|
|
@@ -244,7 +246,13 @@ const assistantMessage = {
|
|
|
244
246
|
v-for="toolCall in assistantMessage.toolCalls"
|
|
245
247
|
:key="toolCall.id"
|
|
246
248
|
:tool-call="toolCall"
|
|
247
|
-
:status="
|
|
249
|
+
:status="
|
|
250
|
+
!toolCall.toolMessage
|
|
251
|
+
? MessageStatus.Pending
|
|
252
|
+
: toolCall.toolMessage.error
|
|
253
|
+
? MessageStatus.Error
|
|
254
|
+
: (toolCall.toolMessage.status ?? assistantMessage.status)
|
|
255
|
+
"
|
|
248
256
|
/>
|
|
249
257
|
</template>
|
|
250
258
|
```
|