@blueking/chat-x 0.0.25 → 0.0.27
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/messages.d.ts +1 -0
- package/dist/common/constants.d.ts +1 -0
- package/dist/components/chat-content/flow-agent-content/flow-agent-content.vue.d.ts +1 -0
- package/dist/components/chat-content/flow-agent-content/flow-agent-node-detail.vue.d.ts +11 -1
- package/dist/components/chat-content/knowledge-rag-content/knowledge-rag-content.vue.d.ts +1 -0
- package/dist/components/chat-content/reference-doc-content/reference-doc-content.vue.d.ts +1 -0
- package/dist/components/execution-summary/execution-summary.vue.d.ts +2 -2
- package/dist/composables/use-custom-tab.d.ts +6 -2
- package/dist/composables/use-message-group.d.ts +72 -3
- package/dist/index.css +1 -1
- package/dist/index.js +1794 -1738
- package/dist/index.js.map +1 -1
- package/dist/lang/lang.d.ts +2 -1
- package/dist/mcp/generated/docs/activity-message.md +2 -0
- package/dist/mcp/generated/docs/chat-container.md +20 -8
- package/dist/mcp/generated/docs/chat-input.md +2 -2
- package/dist/mcp/generated/docs/code-content.md +10 -14
- package/dist/mcp/generated/docs/constants.md +242 -0
- package/dist/mcp/generated/docs/execution-summary.md +4 -4
- package/dist/mcp/generated/docs/markdown-container.md +56 -0
- package/dist/mcp/generated/docs/markdown-latex.md +208 -0
- package/dist/mcp/generated/docs/markdown-mermaid.md +250 -0
- package/dist/mcp/generated/docs/message-container.md +9 -8
- package/dist/mcp/generated/docs/messages.md +475 -0
- package/dist/mcp/generated/docs/theme.md +388 -0
- package/dist/mcp/generated/docs/use-custom-tab.md +2 -1
- package/dist/mcp/generated/docs/use-message-group.md +18 -7
- package/dist/mcp/generated/index.json +1293 -0
- package/dist/types/custom.d.ts +3 -1
- package/package.json +1 -1
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
<!-- AI SUMMARY -->
|
|
2
|
+
## 快速了解
|
|
3
|
+
|
|
4
|
+
markdownItLatex 为 markdown-it 插件,解析 $...$、$$...$$、\\(...\\)、\\[...\\] 为 math_inline / math_block token,可选 LatexOption.replaceAlignStart。 不负责渲染,KaTeX 在 LatexContent 中异步渲染。与 Markdown 管道、ContentRender 中的公式展示链路配合。
|
|
5
|
+
|
|
6
|
+
### 关联组件
|
|
7
|
+
- **latex-content** — 消费 math token 并 KaTeX 渲染
|
|
8
|
+
- **markdown-content** — Markdown 渲染管线
|
|
9
|
+
- **content-render** — 消息内容统一渲染入口
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
<!-- FULL DOC -->
|
|
13
|
+
|
|
14
|
+
# markdownItLatex LaTeX 解析插件
|
|
15
|
+
|
|
16
|
+
> **分类**:plugin
|
|
17
|
+
|
|
18
|
+
Markdown-it LaTeX 解析插件,用于解析 LaTeX 数学公式语法。
|
|
19
|
+
|
|
20
|
+
## 功能说明
|
|
21
|
+
|
|
22
|
+
此插件只负责解析 LaTeX 语法,将其转换为 `math_inline` 和 `math_block` token。实际的 KaTeX 渲染在 `LatexContent` 组件中完成。
|
|
23
|
+
|
|
24
|
+
## 支持的语法
|
|
25
|
+
|
|
26
|
+
| 语法 | 类型 | 示例 |
|
|
27
|
+
| --------- | -------- | ---------------------- |
|
|
28
|
+
| `$...$` | 行内公式 | `$E = mc^2$` |
|
|
29
|
+
| `$$...$$` | 块级公式 | `$$\sum_{i=1}^{n} i$$` |
|
|
30
|
+
| `\(...\)` | 行内公式 | `\(E = mc^2\)` |
|
|
31
|
+
| `\[...\]` | 块级公式 | `\[\sum_{i=1}^{n} i\]` |
|
|
32
|
+
|
|
33
|
+
## 基础用法
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import MarkdownIt from 'markdown-it';
|
|
37
|
+
import { markdownItLatex } from '@blueking/chat-x';
|
|
38
|
+
|
|
39
|
+
const md = new MarkdownIt().use(markdownItLatex);
|
|
40
|
+
|
|
41
|
+
// 解析包含 LaTeX 的 Markdown
|
|
42
|
+
const tokens = md.parse(`
|
|
43
|
+
行内公式:$E = mc^2$
|
|
44
|
+
|
|
45
|
+
块级公式:
|
|
46
|
+
|
|
47
|
+
$$
|
|
48
|
+
\\int_0^\\infty e^{-x^2} dx = \\frac{\\sqrt{\\pi}}{2}
|
|
49
|
+
$$
|
|
50
|
+
`);
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## 配置选项
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
import MarkdownIt from 'markdown-it';
|
|
57
|
+
import { markdownItLatex, type LatexOption } from '@blueking/chat-x';
|
|
58
|
+
|
|
59
|
+
const options: LatexOption = {
|
|
60
|
+
replaceAlignStart: true, // 将 align* 替换为 aligned(KaTeX 不支持 align*)
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
const md = new MarkdownIt().use(markdownItLatex, options);
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### 配置项
|
|
67
|
+
|
|
68
|
+
| 属性名 | 类型 | 默认值 | 说明 |
|
|
69
|
+
| ----------------- | --------- | ------ | -------------------------------- |
|
|
70
|
+
| replaceAlignStart | `boolean` | `true` | 是否将 `align*` 替换为 `aligned` |
|
|
71
|
+
|
|
72
|
+
## Token 类型
|
|
73
|
+
|
|
74
|
+
插件会生成以下两种 token:
|
|
75
|
+
|
|
76
|
+
### math_inline
|
|
77
|
+
|
|
78
|
+
行内数学公式 token:
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
{
|
|
82
|
+
type: 'math_inline',
|
|
83
|
+
tag: 'math',
|
|
84
|
+
content: 'E = mc^2',
|
|
85
|
+
markup: '$',
|
|
86
|
+
meta: { displayMode: false }
|
|
87
|
+
}
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### math_block
|
|
91
|
+
|
|
92
|
+
块级数学公式 token:
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
{
|
|
96
|
+
type: 'math_block',
|
|
97
|
+
tag: 'math',
|
|
98
|
+
content: '\\sum_{i=1}^{n} i = \\frac{n(n+1)}{2}',
|
|
99
|
+
markup: '$$',
|
|
100
|
+
block: true,
|
|
101
|
+
map: [startLine, endLine]
|
|
102
|
+
}
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## 公式示例
|
|
106
|
+
|
|
107
|
+
### 基础公式
|
|
108
|
+
|
|
109
|
+
```markdown
|
|
110
|
+
行内公式:$E = mc^2$
|
|
111
|
+
|
|
112
|
+
块级公式:
|
|
113
|
+
|
|
114
|
+
$$
|
|
115
|
+
E = mc^2
|
|
116
|
+
$$
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 复杂公式
|
|
120
|
+
|
|
121
|
+
```markdown
|
|
122
|
+
$$
|
|
123
|
+
\\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}
|
|
124
|
+
$$
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 矩阵
|
|
128
|
+
|
|
129
|
+
```markdown
|
|
130
|
+
$$
|
|
131
|
+
\\begin{pmatrix}
|
|
132
|
+
a & b \\\\
|
|
133
|
+
c & d
|
|
134
|
+
\\end{pmatrix}
|
|
135
|
+
$$
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### 多行公式
|
|
139
|
+
|
|
140
|
+
```markdown
|
|
141
|
+
$$
|
|
142
|
+
\\begin{aligned}
|
|
143
|
+
f(x) &= x^2 + 2x + 1 \\\\
|
|
144
|
+
&= (x + 1)^2
|
|
145
|
+
\\end{aligned}
|
|
146
|
+
$$
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 转义处理
|
|
150
|
+
|
|
151
|
+
插件会正确处理转义的分隔符:
|
|
152
|
+
|
|
153
|
+
```markdown
|
|
154
|
+
这不是公式:\$100
|
|
155
|
+
|
|
156
|
+
这是公式:$x = 100$
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
## 与 KaTeX 配合
|
|
160
|
+
|
|
161
|
+
渲染由 `LatexContent` 组件完成,使用 KaTeX 库:
|
|
162
|
+
|
|
163
|
+
```vue
|
|
164
|
+
<template>
|
|
165
|
+
<LatexContent :token="latexTokens" />
|
|
166
|
+
</template>
|
|
167
|
+
|
|
168
|
+
<script setup lang="ts">
|
|
169
|
+
import { LatexContent } from '@blueking/chat-x';
|
|
170
|
+
|
|
171
|
+
// latexTokens 是包含 math_inline 或 math_block 的 token 数组
|
|
172
|
+
</script>
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
## KaTeX 支持说明
|
|
176
|
+
|
|
177
|
+
KaTeX 支持的功能:
|
|
178
|
+
|
|
179
|
+
- 大多数 LaTeX 数学符号
|
|
180
|
+
- 分数、根号、指数
|
|
181
|
+
- 矩阵和数组
|
|
182
|
+
- 括号和分隔符
|
|
183
|
+
- 希腊字母和运算符
|
|
184
|
+
- 上下标和大型运算符
|
|
185
|
+
|
|
186
|
+
KaTeX 限制:
|
|
187
|
+
|
|
188
|
+
- 不支持 `align*` 环境(插件会自动替换为 `aligned`)
|
|
189
|
+
- 部分 LaTeX 宏不支持
|
|
190
|
+
|
|
191
|
+
## 使用场景
|
|
192
|
+
|
|
193
|
+
- AI 数学问答
|
|
194
|
+
- 技术文档展示
|
|
195
|
+
- 教育类应用
|
|
196
|
+
- 科学计算结果展示
|
|
197
|
+
|
|
198
|
+
## 注意事项
|
|
199
|
+
|
|
200
|
+
1. **双反斜杠**:在 JavaScript 字符串中,`\` 需要写成 `\\`
|
|
201
|
+
2. **环境支持**:建议使用 `aligned` 替代 `align*`
|
|
202
|
+
3. **性能考虑**:KaTeX 渲染在组件中异步进行,避免阻塞主线程
|
|
203
|
+
|
|
204
|
+
## 关联组件
|
|
205
|
+
|
|
206
|
+
- [LatexContent](../components/atomic/latex-content.md) — KaTeX 渲染
|
|
207
|
+
- [MarkdownContent](../components/atomic/markdown-content.md) — Markdown 内容
|
|
208
|
+
- [ContentRender](../components/molecular/content-render.md) — 内容渲染
|
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
<!-- AI SUMMARY -->
|
|
2
|
+
## 快速了解
|
|
3
|
+
|
|
4
|
+
markdownItMermaid 为 markdown-it 插件,将 ```mermaid 代码块转为带 data-mermaid-code、data-mermaid-idx 的占位 DOM,便于前端挂载渲染。 实际绘图由 Mermaid 动态导入在 MermaidContent 中完成,支持流式场景节流与缓存。ContentRender 驱动完整消息 Markdown 流程。
|
|
5
|
+
|
|
6
|
+
### 关联组件
|
|
7
|
+
- **mermaid-content** — 解析占位并渲染图表
|
|
8
|
+
- **markdown-content** — Markdown fence 管线
|
|
9
|
+
- **content-render** — 消息块级内容渲染
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
<!-- FULL DOC -->
|
|
13
|
+
|
|
14
|
+
# markdownItMermaid Mermaid 解析插件
|
|
15
|
+
|
|
16
|
+
> **分类**:plugin
|
|
17
|
+
|
|
18
|
+
Markdown-it Mermaid 解析插件,用于解析 Mermaid 图表代码块。
|
|
19
|
+
|
|
20
|
+
## 功能说明
|
|
21
|
+
|
|
22
|
+
此插件将 Mermaid 代码块转换为特定的 HTML 结构,实际的 Mermaid 渲染在 `MermaidContent` 组件中完成。
|
|
23
|
+
|
|
24
|
+
## 支持的语法
|
|
25
|
+
|
|
26
|
+
````markdown
|
|
27
|
+
```mermaid
|
|
28
|
+
graph TD
|
|
29
|
+
A[开始] --> B[结束]
|
|
30
|
+
```
|
|
31
|
+
````
|
|
32
|
+
|
|
33
|
+
## 基础用法
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
import MarkdownIt from 'markdown-it';
|
|
37
|
+
import { markdownItMermaid } from '@blueking/chat-x';
|
|
38
|
+
|
|
39
|
+
const md = new MarkdownIt().use(markdownItMermaid);
|
|
40
|
+
|
|
41
|
+
const html = md.render(`
|
|
42
|
+
\`\`\`mermaid
|
|
43
|
+
graph TD
|
|
44
|
+
A[开始] --> B{判断}
|
|
45
|
+
B -->|是| C[处理]
|
|
46
|
+
B -->|否| D[结束]
|
|
47
|
+
C --> D
|
|
48
|
+
\`\`\`
|
|
49
|
+
`);
|
|
50
|
+
|
|
51
|
+
// 输出:
|
|
52
|
+
// <div class="mermaid-wrapper" data-mermaid-code="..." data-mermaid-idx="0"></div>
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## 渲染结果
|
|
56
|
+
|
|
57
|
+
插件会将 Mermaid 代码块转换为以下 HTML:
|
|
58
|
+
|
|
59
|
+
```html
|
|
60
|
+
<div
|
|
61
|
+
class="mermaid-wrapper"
|
|
62
|
+
data-mermaid-code="graph%20TD%0A%20%20%20%20A%5B%E5%BC%80%E5%A7%8B%5D%20--%3E%20B%5B%E7%BB%93%E6%9D%9F%5D"
|
|
63
|
+
data-mermaid-idx="0"
|
|
64
|
+
></div>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
- `data-mermaid-code`: URL 编码后的 Mermaid 代码
|
|
68
|
+
- `data-mermaid-idx`: 代码块索引
|
|
69
|
+
|
|
70
|
+
## 支持的图表类型
|
|
71
|
+
|
|
72
|
+
### 流程图 (Flowchart)
|
|
73
|
+
|
|
74
|
+
````markdown
|
|
75
|
+
```mermaid
|
|
76
|
+
graph TD
|
|
77
|
+
A[开始] --> B{条件判断}
|
|
78
|
+
B -->|是| C[执行操作]
|
|
79
|
+
B -->|否| D[结束]
|
|
80
|
+
C --> D
|
|
81
|
+
```
|
|
82
|
+
````
|
|
83
|
+
|
|
84
|
+
### 时序图 (Sequence Diagram)
|
|
85
|
+
|
|
86
|
+
````markdown
|
|
87
|
+
```mermaid
|
|
88
|
+
sequenceDiagram
|
|
89
|
+
participant A as 客户端
|
|
90
|
+
participant B as 服务器
|
|
91
|
+
A->>B: 请求
|
|
92
|
+
B-->>A: 响应
|
|
93
|
+
```
|
|
94
|
+
````
|
|
95
|
+
|
|
96
|
+
### 甘特图 (Gantt Chart)
|
|
97
|
+
|
|
98
|
+
````markdown
|
|
99
|
+
```mermaid
|
|
100
|
+
gantt
|
|
101
|
+
title 项目计划
|
|
102
|
+
dateFormat YYYY-MM-DD
|
|
103
|
+
section 阶段1
|
|
104
|
+
任务1 :a1, 2024-01-01, 30d
|
|
105
|
+
任务2 :after a1, 20d
|
|
106
|
+
section 阶段2
|
|
107
|
+
任务3 :2024-02-01, 12d
|
|
108
|
+
```
|
|
109
|
+
````
|
|
110
|
+
|
|
111
|
+
### 类图 (Class Diagram)
|
|
112
|
+
|
|
113
|
+
````markdown
|
|
114
|
+
```mermaid
|
|
115
|
+
classDiagram
|
|
116
|
+
class Animal {
|
|
117
|
+
+name: string
|
|
118
|
+
+age: int
|
|
119
|
+
+makeSound()
|
|
120
|
+
}
|
|
121
|
+
class Dog {
|
|
122
|
+
+breed: string
|
|
123
|
+
+bark()
|
|
124
|
+
}
|
|
125
|
+
Animal <|-- Dog
|
|
126
|
+
```
|
|
127
|
+
````
|
|
128
|
+
|
|
129
|
+
### 状态图 (State Diagram)
|
|
130
|
+
|
|
131
|
+
````markdown
|
|
132
|
+
```mermaid
|
|
133
|
+
stateDiagram-v2
|
|
134
|
+
[*] --> 待处理
|
|
135
|
+
待处理 --> 处理中: 开始处理
|
|
136
|
+
处理中 --> 已完成: 处理完成
|
|
137
|
+
处理中 --> 失败: 处理失败
|
|
138
|
+
已完成 --> [*]
|
|
139
|
+
失败 --> 待处理: 重试
|
|
140
|
+
```
|
|
141
|
+
````
|
|
142
|
+
|
|
143
|
+
### 饼图 (Pie Chart)
|
|
144
|
+
|
|
145
|
+
````markdown
|
|
146
|
+
```mermaid
|
|
147
|
+
pie title 语言使用占比
|
|
148
|
+
"JavaScript" : 45
|
|
149
|
+
"TypeScript" : 35
|
|
150
|
+
"Python" : 15
|
|
151
|
+
"其他" : 5
|
|
152
|
+
```
|
|
153
|
+
````
|
|
154
|
+
|
|
155
|
+
### ER 图 (Entity Relationship)
|
|
156
|
+
|
|
157
|
+
````markdown
|
|
158
|
+
```mermaid
|
|
159
|
+
erDiagram
|
|
160
|
+
用户 ||--o{ 订单 : 创建
|
|
161
|
+
订单 ||--|{ 订单明细 : 包含
|
|
162
|
+
商品 ||--o{ 订单明细 : 包含于
|
|
163
|
+
```
|
|
164
|
+
````
|
|
165
|
+
|
|
166
|
+
## 与 MermaidContent 组件配合
|
|
167
|
+
|
|
168
|
+
实际渲染由 `MermaidContent` 组件完成:
|
|
169
|
+
|
|
170
|
+
```vue
|
|
171
|
+
<template>
|
|
172
|
+
<MermaidContent
|
|
173
|
+
:token="mermaidTokens"
|
|
174
|
+
@mounted="handleMounted"
|
|
175
|
+
/>
|
|
176
|
+
</template>
|
|
177
|
+
|
|
178
|
+
<script setup lang="ts">
|
|
179
|
+
import { MermaidContent } from '@blueking/chat-x';
|
|
180
|
+
|
|
181
|
+
// mermaidTokens 是包含 mermaid fence 的 token 数组
|
|
182
|
+
const handleMounted = ({ el }) => {
|
|
183
|
+
console.log('Mermaid 图表渲染完成:', el);
|
|
184
|
+
};
|
|
185
|
+
</script>
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## 流式渲染
|
|
189
|
+
|
|
190
|
+
组件支持流式渲染,在代码输入过程中实时更新图表:
|
|
191
|
+
|
|
192
|
+
````vue
|
|
193
|
+
<template>
|
|
194
|
+
<ContentRender
|
|
195
|
+
:content="streamingContent"
|
|
196
|
+
:status="MessageStatus.Streaming"
|
|
197
|
+
/>
|
|
198
|
+
</template>
|
|
199
|
+
|
|
200
|
+
<script setup lang="ts">
|
|
201
|
+
import { ref } from 'vue';
|
|
202
|
+
import { ContentRender, MessageStatus } from '@blueking/chat-x';
|
|
203
|
+
|
|
204
|
+
const streamingContent = ref('');
|
|
205
|
+
|
|
206
|
+
// 模拟流式输入 Mermaid 代码
|
|
207
|
+
const simulateStreaming = async () => {
|
|
208
|
+
const code = '```mermaid\ngraph TD\n A --> B\n```';
|
|
209
|
+
for (const char of code) {
|
|
210
|
+
await new Promise(r => setTimeout(r, 50));
|
|
211
|
+
streamingContent.value += char;
|
|
212
|
+
}
|
|
213
|
+
};
|
|
214
|
+
</script>
|
|
215
|
+
````
|
|
216
|
+
|
|
217
|
+
## 错误处理
|
|
218
|
+
|
|
219
|
+
当 Mermaid 代码语法错误时:
|
|
220
|
+
|
|
221
|
+
1. 插件仍会正常解析并输出 HTML
|
|
222
|
+
2. `MermaidContent` 组件会捕获渲染错误
|
|
223
|
+
3. 控制台会输出警告信息
|
|
224
|
+
4. 图表区域保持空白,不会影响其他内容
|
|
225
|
+
|
|
226
|
+
## 性能优化
|
|
227
|
+
|
|
228
|
+
- **节流渲染**:流式输入时使用 100ms 节流
|
|
229
|
+
- **代码缓存**:相同代码不会重复渲染
|
|
230
|
+
- **异步加载**:Mermaid 库按需动态导入
|
|
231
|
+
|
|
232
|
+
## 使用场景
|
|
233
|
+
|
|
234
|
+
- AI 生成的流程图说明
|
|
235
|
+
- 技术文档中的架构图
|
|
236
|
+
- 项目计划展示
|
|
237
|
+
- 数据关系可视化
|
|
238
|
+
|
|
239
|
+
## 注意事项
|
|
240
|
+
|
|
241
|
+
1. **异步渲染**:Mermaid 库是动态导入的,首次渲染可能有短暂延迟
|
|
242
|
+
2. **语法验证**:组件会先验证语法,无效代码不会尝试渲染
|
|
243
|
+
3. **SVG 输出**:渲染结果是 SVG,可以自由缩放
|
|
244
|
+
4. **样式覆盖**:可以通过 CSS 自定义图表样式
|
|
245
|
+
|
|
246
|
+
## 关联组件
|
|
247
|
+
|
|
248
|
+
- [MermaidContent](../components/atomic/mermaid-content.md) — Mermaid 渲染
|
|
249
|
+
- [MarkdownContent](../components/atomic/markdown-content.md) — Markdown 内容
|
|
250
|
+
- [ContentRender](../components/molecular/content-render.md) — 内容渲染
|
|
@@ -20,7 +20,7 @@ MessageContainer 是消息列表的核心容器。接收父组件用 useMessageG
|
|
|
20
20
|
- **消息分组**:将连续的非用户消息合并为一组,每组共享一个工具栏
|
|
21
21
|
- **Tool 消息关联**:自动将 `role: 'tool'` 消息注入到对应 Assistant 消息的 toolCall 中
|
|
22
22
|
- **Loading 自动注入**:末尾为用户消息时,自动追加 Loading 动画组
|
|
23
|
-
-
|
|
23
|
+
- **滚动管理**:`messageStatus` 为流式、等待响应或请求中(`streaming` / `pending` / `fetching`)时显示「停止生成」,离开底部时显示「返回底部」
|
|
24
24
|
- **多选模式**:支持按消息组勾选,用户消息与 AI 回复联动选中
|
|
25
25
|
|
|
26
26
|
## 基础用法
|
|
@@ -110,6 +110,7 @@ MessageContainer 是消息列表的核心容器。接收父组件用 useMessageG
|
|
|
110
110
|
|
|
111
111
|
**关键细节**:
|
|
112
112
|
|
|
113
|
+
- 每个消息组外层 DOM 的 `id` 为 **`MessageGroup.uid`**(由 `useMessageGroup` 生成),供执行摘要「在对话中定位」、侧栏自定义 Tab 等场景滚动锚定
|
|
113
114
|
- `role: 'tool'` 消息**不会独立渲染**,而是被注入到对应 AssistantMessage 的 `toolCall.toolMessage` 字段
|
|
114
115
|
- 若 `toolMessage.error` 存在,AssistantMessage 的 `status` 会被强制设为 `MessageStatus.Error`
|
|
115
116
|
- `MessageTools` 工具栏只在 `type === 'assistant'` 的消息组底部渲染(不依赖鼠标悬停,始终可见),且满足以下条件时**不渲染**:
|
|
@@ -124,9 +125,9 @@ MessageContainer 是消息列表的核心容器。接收父组件用 useMessageG
|
|
|
124
125
|
|
|
125
126
|
当 `messages` 末尾为 `role: 'user'` 时,自动追加 Loading 消息组,展示 AI 正在处理的加载动画:
|
|
126
127
|
|
|
127
|
-
##
|
|
128
|
+
## 流式输出与停止生成
|
|
128
129
|
|
|
129
|
-
`messageStatus` 为 `streaming`
|
|
130
|
+
当 `messageStatus` 为 `streaming`、`pending`(等待首包)或 `fetching`(请求中、与末尾 Loading 占位一致)时,底部固定区域显示「停止生成」按钮(`stop-loading` 时按钮展示为正在停止),点击后触发 `@stop-streaming` 事件。
|
|
130
131
|
|
|
131
132
|
点击下方按钮体验完整的流式输出过程:
|
|
132
133
|
|
|
@@ -443,10 +444,10 @@ AI 回复状态为 `error` 时,消息以错误样式展示:
|
|
|
443
444
|
|
|
444
445
|
底部固定区域(`position: sticky; bottom: 12px`)根据条件显示两个按钮:
|
|
445
446
|
|
|
446
|
-
| 按钮 | 显示条件
|
|
447
|
-
| ------------ |
|
|
448
|
-
| 「停止生成」 | `messageStatus
|
|
449
|
-
| 「返回底部」 | `debouncedShowScrollBottomBtn`(距底部 > 100px,且防抖 300ms 后才显示/隐藏)
|
|
447
|
+
| 按钮 | 显示条件 | 点击行为 |
|
|
448
|
+
| ------------ | ---------------------------------------------------------------------------------------------- | ---------------------- |
|
|
449
|
+
| 「停止生成」 | `messageStatus` 为 `streaming`、`pending`、`fetching` 或 `stop-loading`(停止中 loading 态) | 触发 `@stop-streaming` |
|
|
450
|
+
| 「返回底部」 | `debouncedShowScrollBottomBtn`(距底部 > 100px,且防抖 300ms 后才显示/隐藏) | 滚动到消息列表底部 |
|
|
450
451
|
|
|
451
452
|
> **防抖说明**:「返回底部」按钮的显隐使用 300ms 防抖,避免快速滚动时按钮频繁闪烁。隐藏时立即生效(无防抖),显示时延迟 300ms。
|
|
452
453
|
|
|
@@ -458,7 +459,7 @@ AI 回复状态为 `error` 时,消息以错误样式展示:
|
|
|
458
459
|
| ------------------------ | -------------------------------------------------------------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------------------------------- |
|
|
459
460
|
| messages | `Message[]` | — | **必填**,消息列表 |
|
|
460
461
|
| messageGroups | `MessageGroup[]` | — | 预计算的消息分组;传入时跳过内部分组逻辑,由 `ChatContainer` 通过 `useMessageGroup` 提供 |
|
|
461
|
-
| messageStatus | `MessageStatus` | — |
|
|
462
|
+
| messageStatus | `MessageStatus` | — | 当前整体消息状态,控制底部「停止生成」按钮显示;`ChatContainer` 会结合末尾 Loading 占位推导 `fetching` 等再传入 |
|
|
462
463
|
| messageToolsStatus | `MessageToolsStatus` | — | 工具栏状态,透传给 `MessageTools` 和 `MessageRender` |
|
|
463
464
|
| messageToolsTippyOptions | `AITippyProps` | — | 透传给 `MessageTools` 和 `MessageRender`(进而透传给 `UserMessage` 的工具栏)的 Tippy 配置,用于自定义 tooltip 挂载点(如 `appendTo`)等 |
|
|
464
465
|
| enableSelection | `boolean` | `false` | 是否启用多选模式 |
|