@blueking/chat-x 0.0.45-beta.6 → 0.0.45-dev.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/README.md +1 -1
- package/dist/ag-ui/types/constants.d.ts +16 -0
- package/dist/ag-ui/types/contents.d.ts +2 -0
- package/dist/ag-ui/types/index.d.ts +2 -0
- package/dist/ag-ui/types/interrupt.d.ts +152 -0
- package/dist/ag-ui/types/messages.d.ts +2 -0
- package/dist/ag-ui/types/schema.d.ts +42 -0
- package/dist/components/ai-questions/questions-container.vue.d.ts +3 -0
- package/dist/components/ai-questions/selection-question.vue.d.ts +3 -0
- package/dist/components/chat-content/flow-agent-content/flow-agent-content.vue.d.ts +3 -0
- package/dist/components/chat-content/flow-agent-content/use-flow-agent.d.ts +4 -0
- package/dist/components/chat-content/flow-agent-content/use-flow-node-actions.d.ts +32 -0
- package/dist/components/chat-content/index.d.ts +2 -0
- package/dist/components/chat-input/chat-input.vue.d.ts +14 -8
- package/dist/components/chat-input/input-attachment/input-attachment.vue.d.ts +1 -0
- package/dist/components/chat-input/input-info-alert.vue.d.ts +6 -0
- package/dist/components/chat-message/activity-message/activity-message.vue.d.ts +4 -1
- package/dist/components/chat-message/assistant-message/assistant-message.vue.d.ts +1 -1
- package/dist/components/chat-message/interrupt-message/index.d.ts +2 -0
- package/dist/components/chat-message/interrupt-message/interrupt-message.vue.d.ts +17 -0
- package/dist/components/chat-message/interrupt-message/tool-approval-card.vue.d.ts +9 -0
- package/dist/components/chat-message/interrupt-message/user-question/index.d.ts +5 -0
- package/dist/components/chat-message/interrupt-message/user-question/use-user-question.d.ts +35 -0
- package/dist/components/chat-message/interrupt-message/user-question/user-question-answered-card.vue.d.ts +25 -0
- package/dist/components/chat-message/interrupt-message/user-question/user-question-card.vue.d.ts +25 -0
- package/dist/components/chat-message/interrupt-message/user-question/user-question-choice.vue.d.ts +13 -0
- package/dist/components/chat-message/interrupt-message/user-question/user-question-option.vue.d.ts +17 -0
- package/dist/components/chat-message/message-container/message-container.vue.d.ts +14 -7
- package/dist/components/chat-message/message-render/message-render.vue.d.ts +4 -0
- package/dist/components/index.d.ts +3 -2
- package/dist/composables/use-global-config.d.ts +3 -0
- package/dist/composables/use-message-group.d.ts +2221 -354
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/interrupt.d.ts +24 -0
- package/dist/index.css +1 -1
- package/dist/index.js +2570 -1936
- package/dist/index.js.map +1 -1
- package/dist/lang/lang.d.ts +34 -2
- package/dist/mcp/generated/docs/activity-layout.md +138 -0
- package/dist/mcp/generated/docs/activity-message.md +21 -7
- package/dist/mcp/generated/docs/ai-image.md +9 -4
- package/dist/mcp/generated/docs/ai-loading.md +11 -6
- package/dist/mcp/generated/docs/ai-prompt-list.md +42 -0
- package/dist/mcp/generated/docs/ai-selection.md +10 -5
- package/dist/mcp/generated/docs/ai-slash-editor.md +43 -0
- package/dist/mcp/generated/docs/ai-slash-input.md +43 -0
- package/dist/mcp/generated/docs/ai-slash-menu.md +42 -0
- package/dist/mcp/generated/docs/animation-text.md +9 -4
- package/dist/mcp/generated/docs/assistant-message.md +10 -5
- package/dist/mcp/generated/docs/chat-container.md +173 -19
- package/dist/mcp/generated/docs/chat-input.md +78 -10
- package/dist/mcp/generated/docs/cite-content.md +8 -3
- package/dist/mcp/generated/docs/code-content.md +9 -4
- package/dist/mcp/generated/docs/common-error-content.md +10 -5
- package/dist/mcp/generated/docs/constants.md +68 -3
- package/dist/mcp/generated/docs/content-render.md +10 -5
- package/dist/mcp/generated/docs/delete-tool.md +9 -4
- package/dist/mcp/generated/docs/desc-panel.md +9 -4
- package/dist/mcp/generated/docs/detail-section.md +93 -0
- package/dist/mcp/generated/docs/execution-summary.md +10 -5
- package/dist/mcp/generated/docs/file-content.md +9 -4
- package/dist/mcp/generated/docs/file-upload-btn.md +10 -5
- package/dist/mcp/generated/docs/flow-agent-content.md +252 -0
- package/dist/mcp/generated/docs/flow-agent-node-detail.md +240 -0
- package/dist/mcp/generated/docs/highlight-keyword.md +10 -5
- package/dist/mcp/generated/docs/image-content.md +9 -4
- package/dist/mcp/generated/docs/image-preview-group.md +9 -4
- package/dist/mcp/generated/docs/image-preview.md +10 -5
- package/dist/mcp/generated/docs/info-message.md +7 -2
- package/dist/mcp/generated/docs/input-attachment.md +43 -0
- package/dist/mcp/generated/docs/input-info-alert.md +42 -0
- package/dist/mcp/generated/docs/interrupt-message.md +216 -0
- package/dist/mcp/generated/docs/interrupt.md +377 -0
- package/dist/mcp/generated/docs/key-value-content.md +9 -4
- package/dist/mcp/generated/docs/knowledge-rag-content.md +126 -0
- package/dist/mcp/generated/docs/latex-content.md +9 -4
- package/dist/mcp/generated/docs/loading-message.md +11 -6
- package/dist/mcp/generated/docs/markdown-container.md +1 -1
- package/dist/mcp/generated/docs/markdown-content.md +13 -8
- package/dist/mcp/generated/docs/markdown-latex.md +3 -3
- package/dist/mcp/generated/docs/markdown-mermaid.md +3 -3
- package/dist/mcp/generated/docs/mermaid-content.md +9 -4
- package/dist/mcp/generated/docs/message-container.md +69 -11
- package/dist/mcp/generated/docs/message-loading.md +120 -0
- package/dist/mcp/generated/docs/message-render.md +23 -11
- package/dist/mcp/generated/docs/message-tools.md +10 -5
- package/dist/mcp/generated/docs/messages.md +75 -11
- package/dist/mcp/generated/docs/overflow-tips.md +4 -4
- package/dist/mcp/generated/docs/preview-toolbar.md +42 -0
- package/dist/mcp/generated/docs/questions-container.md +88 -0
- package/dist/mcp/generated/docs/reasoning-message.md +10 -5
- package/dist/mcp/generated/docs/reference-content.md +10 -5
- package/dist/mcp/generated/docs/reference-doc-content.md +112 -0
- package/dist/mcp/generated/docs/schema.md +93 -0
- package/dist/mcp/generated/docs/scroll-btn.md +8 -3
- package/dist/mcp/generated/docs/selection-footer.md +9 -4
- package/dist/mcp/generated/docs/selection-question.md +91 -0
- package/dist/mcp/generated/docs/shortcut-btn.md +10 -5
- package/dist/mcp/generated/docs/shortcut-btns.md +10 -5
- package/dist/mcp/generated/docs/shortcut-render.md +10 -5
- package/dist/mcp/generated/docs/simple-table.md +103 -0
- package/dist/mcp/generated/docs/text-content.md +9 -4
- package/dist/mcp/generated/docs/theme.md +50 -4
- package/dist/mcp/generated/docs/tool-approval-card.md +164 -0
- package/dist/mcp/generated/docs/tool-btn.md +9 -4
- package/dist/mcp/generated/docs/tool-message.md +10 -5
- package/dist/mcp/generated/docs/toolcall-render.md +10 -5
- package/dist/mcp/generated/docs/use-animation-text.md +4 -4
- package/dist/mcp/generated/docs/use-clipboard.md +3 -3
- package/dist/mcp/generated/docs/use-command-selection.md +1 -1
- package/dist/mcp/generated/docs/use-custom-tab.md +1 -1
- package/dist/mcp/generated/docs/use-flow-node-actions.md +124 -0
- package/dist/mcp/generated/docs/use-full-screen.md +3 -3
- package/dist/mcp/generated/docs/use-global-config.md +20 -5
- package/dist/mcp/generated/docs/use-menu-keydown.md +1 -1
- package/dist/mcp/generated/docs/use-message-group.md +40 -9
- package/dist/mcp/generated/docs/use-observer-visible-list.md +1 -1
- package/dist/mcp/generated/docs/user-feedback.md +8 -3
- package/dist/mcp/generated/docs/user-message.md +10 -5
- package/dist/mcp/generated/docs/user-question-answered-card.md +106 -0
- package/dist/mcp/generated/docs/user-question-card.md +228 -0
- package/dist/mcp/generated/docs/user-question-choice.md +108 -0
- package/dist/mcp/generated/docs/user-question-option.md +42 -0
- package/dist/mcp/generated/docs/vnode-renderer.md +126 -0
- package/dist/mcp/generated/index.json +1105 -562
- package/dist/mcp/server.js +1 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/mcp/tools/list-components.d.ts +7 -6
- package/dist/mcp/tools/list-components.js +23 -29
- package/dist/mcp/tools/list-components.js.map +1 -1
- package/dist/mcp/tools/search-docs.js +1 -1
- package/dist/mcp/tools/search-docs.js.map +1 -1
- package/dist/mcp/utils/doc-loader.d.ts +1 -1
- package/dist/utils/utils.d.ts +2 -2
- package/package.json +4 -3
|
@@ -1,19 +1,25 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
按 message.role 分发到用户、助手、工具、推理、活动、中断等消息组件。 源码位置:src/components/chat-message/message-render/message-render.vue。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **message-container** — 在 MessageContainer 中按组调用以渲染每条消息
|
|
8
8
|
- **assistant-message** — role 为 assistant 时渲染 AI 回复与工具调用
|
|
9
9
|
- **user-message** — role 为 user 时渲染用户消息
|
|
10
|
+
- **interrupt-message** — role 为 interrupt 时渲染 InterruptMessageRender
|
|
10
11
|
|
|
11
12
|
---
|
|
12
13
|
<!-- FULL DOC -->
|
|
13
14
|
|
|
14
15
|
# MessageRender 消息渲染器
|
|
16
|
+
## 源码事实
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
- **源码位置**:`src/components/chat-message/message-render/message-render.vue`
|
|
19
|
+
- **能力域**:消息系统
|
|
20
|
+
- **能力说明**:按 message.role 分发到用户、助手、工具、推理、活动、中断等消息组件。
|
|
21
|
+
|
|
22
|
+
> **能力域**:消息系统
|
|
17
23
|
|
|
18
24
|
统一的消息渲染入口,通过 `message.role` 字段自动派发到对应的子组件。整个渲染过程由一个 `computed` 属性完成,无额外状态。
|
|
19
25
|
|
|
@@ -33,8 +39,9 @@ MessageRender
|
|
|
33
39
|
│ ├── 'info' → InfoMessage(转发 message)
|
|
34
40
|
│ ├── 'reasoning' → ReasoningMessage(转发 message)
|
|
35
41
|
│ ├── 'tool' → ToolMessage(转发 message)
|
|
36
|
-
│ ├── 'activity' → ActivityMessage(转发 message)
|
|
42
|
+
│ ├── 'activity' → ActivityMessage(转发 message + onInterruptResume)
|
|
37
43
|
│ ├── 'loading' → LoadingMessage(转发 message)
|
|
44
|
+
│ ├── 'interrupt' → InterruptMessageRender(转发 message + onInterruptResume)
|
|
38
45
|
│ │
|
|
39
46
|
│ └── 其他 / 未知 → null(不渲染任何内容)
|
|
40
47
|
```
|
|
@@ -267,15 +274,17 @@ slot 参数类型与 `AssistantMessage` 的 slot 保持一致(`Partial<Assista
|
|
|
267
274
|
| messageToolsStatus | `MessageToolsStatus` | — | 工具按钮状态;**仅转发给 `UserMessage`** |
|
|
268
275
|
| onAction | `(tool: IToolBtn) => Promise<string[] \| void>` | — | 工具操作回调;**仅转发给 `UserMessage`** |
|
|
269
276
|
| onInputConfirm | `(content: UserMessage['content'], docSchema: TagSchema) => Promise<void>` | — | 用户编辑确认回调;**仅转发给 `UserMessage`** |
|
|
277
|
+
| onInterruptResume | `(payload: InterruptResume, interrupt?: Interrupt) => Promise<void>` | — | 中断 / FlowAgent 节点操作回调;转发给 `InterruptMessageRender` 与 `ActivityMessage`(后者仅 `flow_agent` 子组件消费) |
|
|
270
278
|
| onShortcutConfirm | `(formModel: Record<string, unknown>) => Promise<void>` | — | 用户快捷指令提交回调;**仅转发给 `UserMessage`** |
|
|
271
279
|
| tippyOptions | `Partial<Omit<TippyOptions, 'getReferenceClientRect' \| 'triggerTarget'>>` | — | 自定义 Tippy 配置;**仅转发给 `UserMessage`** |
|
|
272
280
|
|
|
273
281
|
### Slots
|
|
274
282
|
|
|
275
|
-
| 插槽名
|
|
276
|
-
|
|
|
277
|
-
|
|
|
278
|
-
|
|
|
283
|
+
| 插槽名 | 参数 | 说明 |
|
|
284
|
+
| ---------------- | -------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
|
|
285
|
+
| answeredQuestion | `{ item, index, status }` | 自定义 UserQuestion 已回答回显,透传给 InterruptMessageRender → UserQuestionAnsweredCard 的 `#answer` |
|
|
286
|
+
| codeHeader | `{ language: string; token: Token[] }` | 代码块头部自定义操作区域,透传给 ContentRender → MarkdownContent → CodeContent;**仅对 assistant 生效** |
|
|
287
|
+
| default | `{ content: string, status: MessageStatus }` | 替换 AssistantMessage 的内容区域渲染;**仅对 `role: 'assistant'` 生效** |
|
|
279
288
|
|
|
280
289
|
## 消息类型映射
|
|
281
290
|
|
|
@@ -286,8 +295,9 @@ slot 参数类型与 `AssistantMessage` 的 slot 保持一致(`Partial<Assista
|
|
|
286
295
|
| `info` | `InfoMessage` | `message` | 系统信息 / 会话分隔符 |
|
|
287
296
|
| `reasoning` | `ReasoningMessage` | `message` | AI 思考过程(可折叠) |
|
|
288
297
|
| `tool` | `ToolMessage` | `message` | 工具调用返回结果 |
|
|
289
|
-
| `activity` | `ActivityMessage` | `message`
|
|
298
|
+
| `activity` | `ActivityMessage` | `message` + `onInterruptResume` | 知识检索 / 引用文档 / FlowAgent 执行(节点重试 / 跳过) |
|
|
290
299
|
| `loading` | `LoadingMessage` | `message`(字段被忽略,组件无 Props) | 等待响应的加载占位 |
|
|
300
|
+
| `interrupt` | `InterruptMessageRender` | `message` + `onInterruptResume` | human-in-the-loop 中断 |
|
|
291
301
|
| 其他 / 未知 | — | — | 返回 `null`,不渲染 |
|
|
292
302
|
|
|
293
303
|
## 类型定义
|
|
@@ -325,6 +335,8 @@ enum MessageToolsStatus {
|
|
|
325
335
|
|
|
326
336
|
## 关联组件
|
|
327
337
|
|
|
328
|
-
- [MessageContainer](
|
|
329
|
-
- [AssistantMessage](
|
|
330
|
-
- [UserMessage](
|
|
338
|
+
- [MessageContainer](/components/setup/message-container) — 内部按组调用以渲染每条消息
|
|
339
|
+
- [AssistantMessage](/components/message/assistant-message) — assistant 角色派发目标
|
|
340
|
+
- [UserMessage](/components/message/user-message) — user 角色派发目标
|
|
341
|
+
- [InterruptMessage 中断消息](/components/agent/interrupt-message) — interrupt 角色派发目标
|
|
342
|
+
- [ToolApprovalCard 审批卡片](/components/agent/tool-approval-card) — AI Dev 审批中断子卡片
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
消息悬浮工具栏,组合复制、删除、反馈等工具按钮。 源码位置:src/components/message-tools/message-tools.vue。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **tool-btn** — 普通工具项由 ToolBtn 渲染
|
|
@@ -12,8 +12,13 @@ MessageTools 渲染 AI 消息底部工具区:左侧消息工具(复制、引
|
|
|
12
12
|
<!-- FULL DOC -->
|
|
13
13
|
|
|
14
14
|
# MessageTools 消息工具栏
|
|
15
|
+
## 源码事实
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
- **源码位置**:`src/components/message-tools/message-tools.vue`
|
|
18
|
+
- **能力域**:工具与反馈
|
|
19
|
+
- **能力说明**:消息悬浮工具栏,组合复制、删除、反馈等工具按钮。
|
|
20
|
+
|
|
21
|
+
> **能力域**:工具与反馈
|
|
17
22
|
|
|
18
23
|
AI 消息的操作工具栏组件,由**左侧消息工具区**和**右侧更新工具区**两部分组成,中间以分隔线分隔。仅 `like` / `unlike` 按钮会弹出反馈表单(`UserFeedback`),其余按钮直接触发 `onAction`。
|
|
19
24
|
|
|
@@ -371,6 +376,6 @@ enum MessageToolsStatus {
|
|
|
371
376
|
|
|
372
377
|
## 关联组件
|
|
373
378
|
|
|
374
|
-
- [ToolBtn](
|
|
375
|
-
- [UserFeedback](
|
|
376
|
-
- [DeleteTool](
|
|
379
|
+
- [ToolBtn](/components/feedback/tool-btn) — 单项工具按钮
|
|
380
|
+
- [UserFeedback](/components/feedback/user-feedback) — 点赞/踩反馈面板
|
|
381
|
+
- [DeleteTool](/components/feedback/delete-tool) — 删除二次确认
|
|
@@ -107,6 +107,9 @@ enum MessageRole {
|
|
|
107
107
|
// 信息消息
|
|
108
108
|
Info = 'info',
|
|
109
109
|
|
|
110
|
+
// human-in-the-loop 中断消息
|
|
111
|
+
Interrupt = 'interrupt',
|
|
112
|
+
|
|
110
113
|
// 加载中消息
|
|
111
114
|
Loading = 'loading',
|
|
112
115
|
|
|
@@ -138,23 +141,32 @@ enum MessageRole {
|
|
|
138
141
|
|
|
139
142
|
```typescript
|
|
140
143
|
enum MessageStatus {
|
|
141
|
-
// 等待中
|
|
142
|
-
Pending = 'pending',
|
|
143
|
-
|
|
144
|
-
// 流式输出中
|
|
145
|
-
Streaming = 'streaming',
|
|
146
|
-
|
|
147
144
|
// 已完成
|
|
148
145
|
Complete = 'complete',
|
|
149
146
|
|
|
147
|
+
// 已禁用
|
|
148
|
+
Disabled = 'disabled',
|
|
149
|
+
|
|
150
150
|
// 错误
|
|
151
151
|
Error = 'error',
|
|
152
152
|
|
|
153
|
+
// 请求中
|
|
154
|
+
Fetching = 'fetching',
|
|
155
|
+
|
|
156
|
+
// 等待中
|
|
157
|
+
Pending = 'pending',
|
|
158
|
+
|
|
153
159
|
// 已停止
|
|
154
160
|
Stop = 'stop',
|
|
155
161
|
|
|
156
|
-
//
|
|
157
|
-
|
|
162
|
+
// 停止请求中
|
|
163
|
+
StopLoading = 'stop-loading',
|
|
164
|
+
|
|
165
|
+
// 流式输出中
|
|
166
|
+
Streaming = 'streaming',
|
|
167
|
+
|
|
168
|
+
// 成功
|
|
169
|
+
Success = 'success',
|
|
158
170
|
}
|
|
159
171
|
```
|
|
160
172
|
|
|
@@ -337,6 +349,58 @@ const knowledgeRagMessage: ActivityMessage = {
|
|
|
337
349
|
| `url` | `string` | 文档预览链接 |
|
|
338
350
|
| `originFile` | `string` | 文档原始文件链接 |
|
|
339
351
|
|
|
352
|
+
### InterruptMessage
|
|
353
|
+
|
|
354
|
+
human-in-the-loop 中断消息,对应 AG-UI `RUN_FINISHED` 事件的 `outcome` 对象结构。`content.outcome.type === 'interrupt'` 时,[InterruptMessageRender](../components/agent/interrupt-message) 从 `interrupts` 渲染审批卡片或把 `UserQuestion` 交给输入区;`type: 'success'` 表示 resume 后的成功结果,`UserQuestion` 会根据 `result` 回显回答内容。类型详见 [中断类型 Interrupt](./interrupt.md)。
|
|
355
|
+
|
|
356
|
+
```typescript
|
|
357
|
+
type RunFinishedOutcome = { interrupts: Interrupt[]; type: 'interrupt' } | { type: 'success' };
|
|
358
|
+
|
|
359
|
+
type InterruptMessage = BaseMessage<
|
|
360
|
+
MessageRole.Interrupt,
|
|
361
|
+
{
|
|
362
|
+
message?: string;
|
|
363
|
+
outcome?: RunFinishedOutcome;
|
|
364
|
+
result?: BaseResume<InterruptReason>;
|
|
365
|
+
runId?: string;
|
|
366
|
+
threadId?: string;
|
|
367
|
+
}
|
|
368
|
+
>;
|
|
369
|
+
|
|
370
|
+
const interruptMessage: InterruptMessage = {
|
|
371
|
+
id: 'interrupt-message-1',
|
|
372
|
+
messageId: 'interrupt-message-1',
|
|
373
|
+
role: MessageRole.Interrupt,
|
|
374
|
+
status: MessageStatus.Pending,
|
|
375
|
+
content: {
|
|
376
|
+
message: '算法方案评审单需要您关注',
|
|
377
|
+
runId: 'run_ai_dev_tool_approval',
|
|
378
|
+
threadId: 'thread_ai_dev_tool_approval',
|
|
379
|
+
outcome: {
|
|
380
|
+
type: 'interrupt',
|
|
381
|
+
interrupts: [
|
|
382
|
+
{
|
|
383
|
+
id: 'interrupt_ai_dev_tool_approval',
|
|
384
|
+
reason: InterruptReason.AIDevToolApproval,
|
|
385
|
+
toolCallId: 'tool_call_review_ticket',
|
|
386
|
+
message: '算法方案评审单需要您关注',
|
|
387
|
+
metadata: {
|
|
388
|
+
ticket: {
|
|
389
|
+
approvers: ['张三', '李四'],
|
|
390
|
+
sn: 'REV-2026-04-24-001',
|
|
391
|
+
status: APPROVAL_STATUS.PENDING,
|
|
392
|
+
submit_time: '2026-04-24 14:30:15',
|
|
393
|
+
title: '算法方案评审单',
|
|
394
|
+
url: 'https://example.com/review-tickets/REV-2026-04-24-001',
|
|
395
|
+
},
|
|
396
|
+
},
|
|
397
|
+
},
|
|
398
|
+
],
|
|
399
|
+
},
|
|
400
|
+
},
|
|
401
|
+
};
|
|
402
|
+
```
|
|
403
|
+
|
|
340
404
|
### InfoMessage
|
|
341
405
|
|
|
342
406
|
信息消息:
|
|
@@ -473,6 +537,6 @@ interface CustomMessage extends BaseMessage<'custom-role'> {
|
|
|
473
537
|
|
|
474
538
|
## 关联组件
|
|
475
539
|
|
|
476
|
-
- [MessageContainer](../components/
|
|
477
|
-
- [MessageRender](../components/
|
|
478
|
-
- [ChatContainer](../components/
|
|
540
|
+
- [MessageContainer](../components/setup/message-container) — 消息列表
|
|
541
|
+
- [MessageRender](../components/message/message-render) — 单条消息渲染
|
|
542
|
+
- [ChatContainer](../components/setup/chat-container) — 聊天容器
|
|
@@ -203,7 +203,7 @@ type OverflowTipsValue = Partial<TippyProps> & {
|
|
|
203
203
|
|
|
204
204
|
## 关联组件
|
|
205
205
|
|
|
206
|
-
- [DescPanel](../components/
|
|
207
|
-
- [ExecutionSummary](../components/
|
|
208
|
-
- [ToolcallRender](../components/
|
|
209
|
-
- [ChatInput](../components/
|
|
206
|
+
- [DescPanel](../components/rendering/desc-panel) — 描述区溢出
|
|
207
|
+
- [ExecutionSummary](../components/agent/execution-summary) — 侧栏摘要标签
|
|
208
|
+
- [ToolcallRender](../components/agent/toolcall-render) — 工具调用标题
|
|
209
|
+
- [ChatInput](../components/input/chat-input) — `@` 菜单项(内部 AiSlashMenu)
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
<!-- AI SUMMARY -->
|
|
2
|
+
## 快速了解
|
|
3
|
+
|
|
4
|
+
图片预览的缩放、旋转、下载等工具按钮。 源码位置:src/components/image-preview/preview-toolbar.vue。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
<!-- FULL DOC -->
|
|
8
|
+
|
|
9
|
+
# PreviewToolbar 图片预览工具栏
|
|
10
|
+
|
|
11
|
+
> **能力域**:媒体文件
|
|
12
|
+
|
|
13
|
+
## 源码事实
|
|
14
|
+
|
|
15
|
+
- **源码位置**:`src/components/image-preview/preview-toolbar.vue`
|
|
16
|
+
- **能力说明**:图片预览的缩放、旋转、下载等工具按钮。
|
|
17
|
+
|
|
18
|
+
## API 摘要
|
|
19
|
+
|
|
20
|
+
### Props
|
|
21
|
+
|
|
22
|
+
- `{ activeIndex: number; currentImageInfo?: null | { resolution?: string; width?: number }; isMultiple: boolean; showInfo: boolean; total: number; }`
|
|
23
|
+
|
|
24
|
+
### Emits
|
|
25
|
+
|
|
26
|
+
- `{ (e: 'zoomIn'): void; (e: 'zoomOut'): void; (e: 'rotate'): void; (e: 'reset'): void; (e: 'download'): void; }`
|
|
27
|
+
|
|
28
|
+
### Slots
|
|
29
|
+
|
|
30
|
+
- `extra`
|
|
31
|
+
|
|
32
|
+
### Expose
|
|
33
|
+
|
|
34
|
+
- 无。
|
|
35
|
+
|
|
36
|
+
## 组件依赖
|
|
37
|
+
|
|
38
|
+
- 无组件依赖或仅依赖基础库。
|
|
39
|
+
|
|
40
|
+
## 使用建议
|
|
41
|
+
|
|
42
|
+
- 优先通过上层组合组件使用;直接使用前请确认 props 数据结构来自对应类型定义。
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
<!-- AI SUMMARY -->
|
|
2
|
+
## 快速了解
|
|
3
|
+
|
|
4
|
+
源码为空文件,没有 props、emits、slots 或渲染能力;不建议作为功能组件使用。 源码位置:src/components/ai-questions/questions-container.vue。
|
|
5
|
+
|
|
6
|
+
### 关联组件
|
|
7
|
+
- **user-question-card** — 用户问题中断交互请使用实际可渲染的问题卡片组件
|
|
8
|
+
- **user-question-option** — 用户问题选项行由实际中断组件承载
|
|
9
|
+
- **interrupt-message** — HITL 中断消息由 InterruptMessage 分发到具体问题组件
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
<!-- FULL DOC -->
|
|
13
|
+
|
|
14
|
+
# QuestionsContainer 问题容器占位
|
|
15
|
+
|
|
16
|
+
> **能力域**:辅助能力
|
|
17
|
+
|
|
18
|
+
`QuestionsContainer` 当前只是保留在源码目录中的空文件,占位路径为 `src/components/ai-questions/questions-container.vue`。它没有模板、脚本、样式、props、emits、slots 或任何渲染行为。
|
|
19
|
+
|
|
20
|
+
本文档保留该条目,是为了在组件总览和 MCP 文档检索中明确说明:它不是当前可用能力。
|
|
21
|
+
|
|
22
|
+
## 源码事实
|
|
23
|
+
|
|
24
|
+
- **源码位置**:`src/components/ai-questions/questions-container.vue`
|
|
25
|
+
- **文件大小**:`0` 字节
|
|
26
|
+
- **能力说明**:源码为空文件,没有 props、emits、slots 或渲染能力;不建议作为功能组件使用。
|
|
27
|
+
|
|
28
|
+
## 当前状态
|
|
29
|
+
|
|
30
|
+
| 项目 | 状态 |
|
|
31
|
+
| -------- | ---- |
|
|
32
|
+
| 模板 | 无 |
|
|
33
|
+
| 脚本逻辑 | 无 |
|
|
34
|
+
| 样式 | 无 |
|
|
35
|
+
| Props | 无 |
|
|
36
|
+
| Emits | 无 |
|
|
37
|
+
| Slots | 无 |
|
|
38
|
+
| Expose | 无 |
|
|
39
|
+
|
|
40
|
+
## 不可用示例
|
|
41
|
+
|
|
42
|
+
下面的写法不会产生任何可见 UI,也不会承载问题列表逻辑:
|
|
43
|
+
|
|
44
|
+
```vue
|
|
45
|
+
<template>
|
|
46
|
+
<!-- 不建议使用:当前组件为空文件 -->
|
|
47
|
+
<QuestionsContainer />
|
|
48
|
+
</template>
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## 推荐替代
|
|
52
|
+
|
|
53
|
+
如果要展示用户问题中断或选项交互,请使用已经实现的中断消息组件链路:
|
|
54
|
+
|
|
55
|
+
```vue
|
|
56
|
+
<template>
|
|
57
|
+
<InterruptMessage :message="message" />
|
|
58
|
+
</template>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
或在具体场景中使用:
|
|
62
|
+
|
|
63
|
+
- [InterruptMessage](../agent/interrupt-message.md) — 中断消息分发入口。
|
|
64
|
+
- [UserQuestionCard](../agent/user-question-card.md) — 用户问题中断交互面板。
|
|
65
|
+
- [UserQuestionOption](../agent/user-question-option.md) — 用户问题选项行。
|
|
66
|
+
|
|
67
|
+
## API
|
|
68
|
+
|
|
69
|
+
### Props
|
|
70
|
+
|
|
71
|
+
- 无。
|
|
72
|
+
|
|
73
|
+
### Emits
|
|
74
|
+
|
|
75
|
+
- 无。
|
|
76
|
+
|
|
77
|
+
### Slots
|
|
78
|
+
|
|
79
|
+
- 无。
|
|
80
|
+
|
|
81
|
+
### Expose
|
|
82
|
+
|
|
83
|
+
- 无。
|
|
84
|
+
|
|
85
|
+
## 使用建议
|
|
86
|
+
|
|
87
|
+
- 不建议在业务中使用该组件。
|
|
88
|
+
- 如果后续补齐实现,需要同步更新本文档的能力说明、示例、API 与关联组件。
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
渲染推理过程,覆盖加载、错误与 Markdown 内容展示。 源码位置:src/components/chat-message/reasoning-message/reasoning-message.vue。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **message-render** — 由 MessageRender 在 role 为 reasoning 时创建
|
|
@@ -12,8 +12,13 @@ ReasoningMessage 展示 AI 思维链(Chain-of-Thought)推理过程,含可
|
|
|
12
12
|
<!-- FULL DOC -->
|
|
13
13
|
|
|
14
14
|
# ReasoningMessage 推理消息
|
|
15
|
+
## 源码事实
|
|
15
16
|
|
|
16
|
-
|
|
17
|
+
- **源码位置**:`src/components/chat-message/reasoning-message/reasoning-message.vue`
|
|
18
|
+
- **能力域**:消息系统
|
|
19
|
+
- **能力说明**:渲染推理过程,覆盖加载、错误与 Markdown 内容展示。
|
|
20
|
+
|
|
21
|
+
> **能力域**:消息系统
|
|
17
22
|
|
|
18
23
|
AI 思维链(Chain-of-Thought)推理过程展示组件。由**可点击标题栏**和**内容区域**组成,内容区支持 Markdown 渲染。`duration` 传入后自动折叠一次,用户可随时点击标题展开/收起。
|
|
19
24
|
|
|
@@ -228,6 +233,6 @@ enum MessageStatus {
|
|
|
228
233
|
|
|
229
234
|
## 关联组件
|
|
230
235
|
|
|
231
|
-
- [MessageRender](
|
|
232
|
-
- [AssistantMessage](
|
|
233
|
-
- [MarkdownContent](
|
|
236
|
+
- [MessageRender](/components/message/message-render) — reasoning 角色由其实例化
|
|
237
|
+
- [AssistantMessage](/components/message/assistant-message) — 推理后常接正式回答
|
|
238
|
+
- [MarkdownContent](/components/rendering/markdown-content) — 推理正文 Markdown 渲染
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- AI SUMMARY -->
|
|
2
2
|
## 快速了解
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
渲染引用文档/来源列表。 源码位置:src/components/chat-content/reference-content/reference-content.vue。
|
|
5
5
|
|
|
6
6
|
### 关联组件
|
|
7
7
|
- **content-render** — ReferenceDocument 类型内容路由到本组件
|
|
@@ -11,10 +11,15 @@ ReferenceContent 以列表形式展示 AI 回复引用的参考文档:图标
|
|
|
11
11
|
<!-- FULL DOC -->
|
|
12
12
|
|
|
13
13
|
# ReferenceContent 引用文档内容
|
|
14
|
+
## 源码事实
|
|
14
15
|
|
|
15
|
-
|
|
16
|
+
- **源码位置**:`src/components/chat-content/reference-content/reference-content.vue`
|
|
17
|
+
- **能力域**:内容渲染
|
|
18
|
+
- **能力说明**:渲染引用文档/来源列表。
|
|
16
19
|
|
|
17
|
-
|
|
20
|
+
> **能力域**:内容渲染
|
|
21
|
+
|
|
22
|
+
引用文档列表渲染基础组件,用于展示 AI 回复中引用的参考文档,每项包含文档图标、标题、预览与跳转操作。
|
|
18
23
|
|
|
19
24
|
主要由 `ActivityMessage`(知识库问答场景)和 `ContentRender`(`reference_document` 类型内容)内部使用。
|
|
20
25
|
|
|
@@ -128,5 +133,5 @@ h(ReferenceContent, { content: props.content as ReferenceDocumentContent[] });
|
|
|
128
133
|
|
|
129
134
|
## 关联组件
|
|
130
135
|
|
|
131
|
-
- [ContentRender](
|
|
132
|
-
- [ActivityMessage](
|
|
136
|
+
- [ContentRender](/components/rendering/content-render) — 内容类型分发
|
|
137
|
+
- [ActivityMessage](/components/message/activity-message) — 活动消息内引用
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
<!-- AI SUMMARY -->
|
|
2
|
+
## 快速了解
|
|
3
|
+
|
|
4
|
+
渲染引用文档类活动内容,复用 ActivityLayout 与 ReferenceContent。 源码位置:src/components/chat-content/reference-doc-content/reference-doc-content.vue。
|
|
5
|
+
|
|
6
|
+
### 关联组件
|
|
7
|
+
- **activity-message** — 非 knowledge_rag / flow_agent 活动默认可分发为引用文档活动
|
|
8
|
+
- **activity-layout** — 提供可折叠的活动容器外壳
|
|
9
|
+
- **reference-content** — 渲染引用文档列表
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
<!-- FULL DOC -->
|
|
13
|
+
|
|
14
|
+
# ReferenceDocContent 引用文档活动
|
|
15
|
+
|
|
16
|
+
> **能力域**:Agent 能力
|
|
17
|
+
|
|
18
|
+
`ReferenceDocContent` 用于渲染“引用 N 篇资料作为参考”这类活动消息。组件基于 `ActivityLayout` 提供折叠外壳,并将文档数组交给 `ReferenceContent` 展示。
|
|
19
|
+
|
|
20
|
+
通常不需要直接使用,`ActivityMessage` 会在引用文档活动场景中分发到本组件。
|
|
21
|
+
|
|
22
|
+
## 源码事实
|
|
23
|
+
|
|
24
|
+
- **源码位置**:`src/components/chat-content/reference-doc-content/reference-doc-content.vue`
|
|
25
|
+
- **能力说明**:渲染引用文档类活动内容,复用 ActivityLayout 与 ReferenceContent。
|
|
26
|
+
|
|
27
|
+
## 核心能力
|
|
28
|
+
|
|
29
|
+
- **数量标题**:根据 `content.length` 生成标题,中文为“引用 N 篇资料作为参考”
|
|
30
|
+
- **文档图标**:标题区域固定展示文档图标,不随消息状态变化
|
|
31
|
+
- **可折叠内容**:通过 `v-model:collapsed` 控制引用列表展开/收起,默认展开
|
|
32
|
+
- **引用列表复用**:文档展示、hover 操作图标、链接打开规则均由 `ReferenceContent` 负责
|
|
33
|
+
|
|
34
|
+
## 基础用法
|
|
35
|
+
|
|
36
|
+
```vue
|
|
37
|
+
<template>
|
|
38
|
+
<ReferenceDocContent
|
|
39
|
+
v-model:collapsed="collapsed"
|
|
40
|
+
:content="docs"
|
|
41
|
+
/>
|
|
42
|
+
</template>
|
|
43
|
+
|
|
44
|
+
<script setup lang="ts">
|
|
45
|
+
import { ref } from 'vue';
|
|
46
|
+
import ReferenceDocContent from '@blueking/chat-x/src/components/chat-content/reference-doc-content/reference-doc-content.vue';
|
|
47
|
+
import type { ReferenceDocumentContent } from '@blueking/chat-x';
|
|
48
|
+
|
|
49
|
+
const collapsed = ref(false);
|
|
50
|
+
|
|
51
|
+
const docs: ReferenceDocumentContent[] = [
|
|
52
|
+
{ name: '蓝鲸 Agent 接入指南', url: 'https://example.com/agent', originFile: 'https://example.com/docs/agent' },
|
|
53
|
+
{ name: '主机巡检操作手册', url: 'https://example.com/host-check', originFile: 'https://example.com/docs/host-check' },
|
|
54
|
+
];
|
|
55
|
+
</script>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**渲染效果**
|
|
59
|
+
|
|
60
|
+
## 空引用
|
|
61
|
+
|
|
62
|
+
当 `content` 为空或未传入时,标题数量显示为 `0`,引用列表为空。
|
|
63
|
+
|
|
64
|
+
## 折叠状态
|
|
65
|
+
|
|
66
|
+
## API
|
|
67
|
+
|
|
68
|
+
### Props
|
|
69
|
+
|
|
70
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
71
|
+
| ---------- | ---------------------------- | ---- | ------ | -------------------------------------- |
|
|
72
|
+
| content | `ReferenceDocumentContent[]` | 否 | — | 引用文档列表 |
|
|
73
|
+
| messageUid | `string` | 否 | — | 所属消息唯一标识,当前组件暂未直接使用 |
|
|
74
|
+
|
|
75
|
+
### Models
|
|
76
|
+
|
|
77
|
+
| 名称 | 类型 | 默认值 | 说明 |
|
|
78
|
+
| --------- | --------- | ------- | ---------------- |
|
|
79
|
+
| collapsed | `boolean` | `false` | 活动内容是否折叠 |
|
|
80
|
+
|
|
81
|
+
### Emits
|
|
82
|
+
|
|
83
|
+
- 无显式 emits;`v-model:collapsed` 会产生 `update:collapsed`。
|
|
84
|
+
|
|
85
|
+
### Slots
|
|
86
|
+
|
|
87
|
+
- 无。
|
|
88
|
+
|
|
89
|
+
### Expose
|
|
90
|
+
|
|
91
|
+
- 无。
|
|
92
|
+
|
|
93
|
+
## 类型定义
|
|
94
|
+
|
|
95
|
+
```typescript
|
|
96
|
+
export type ReferenceDocumentContent = {
|
|
97
|
+
name: string; // 文档标题
|
|
98
|
+
originFile: string; // 原始文件链接,存在时 ReferenceContent 显示跳转操作
|
|
99
|
+
url: string; // 预览链接或标题点击链接
|
|
100
|
+
};
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## 使用建议
|
|
104
|
+
|
|
105
|
+
- 只负责引用文档活动外壳;如果只需要纯引用列表,请直接使用 [ReferenceContent](../rendering/reference-content.md)。
|
|
106
|
+
- 文档条目的过滤与操作图标规则以 `ReferenceContent` 为准,`ReferenceDocContent` 不重复处理。
|
|
107
|
+
|
|
108
|
+
## 关联组件
|
|
109
|
+
|
|
110
|
+
- [ActivityMessage](../message/activity-message.md) — 活动消息分发入口。
|
|
111
|
+
- [ActivityLayout](../helper/activity-layout.md) — 折叠活动外壳。
|
|
112
|
+
- [ReferenceContent](../rendering/reference-content.md) — 引用来源列表。
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
<!-- AI SUMMARY -->
|
|
2
|
+
## 快速了解
|
|
3
|
+
|
|
4
|
+
schema.ts 仍导出 UserSingleChoiceQuestionSchema、UserMultiChoiceQuestionSchema、UserQuestionSchema 及 FromSchema 推导类型; 新的 aidev:user_question 中断不再通过 BaseInterrupt.responseSchema 区分单选/多选,而是在 metadata.questions[].multiSelect 中描述题型。
|
|
5
|
+
|
|
6
|
+
### 关联组件
|
|
7
|
+
- **interrupt** — 新 UserQuestionInterrupt 与 UserQuestionResume 协议
|
|
8
|
+
- **user-question-card** — 根据 metadata.questions 渲染单选、多选与 Others 输入
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
<!-- FULL DOC -->
|
|
12
|
+
|
|
13
|
+
# 用户问题 Schema
|
|
14
|
+
|
|
15
|
+
> **分类**:type
|
|
16
|
+
|
|
17
|
+
`src/ag-ui/types/schema.ts` 保留了历史 JSON Schema 工具导出:
|
|
18
|
+
|
|
19
|
+
- `UserSingleChoiceQuestionSchema`
|
|
20
|
+
- `UserMultiChoiceQuestionSchema`
|
|
21
|
+
- `UserQuestionSchema`
|
|
22
|
+
- `UserSingleChoiceQuestion`
|
|
23
|
+
- `UserMultiChoiceQuestion`
|
|
24
|
+
- `UserQuestion`
|
|
25
|
+
|
|
26
|
+
新的 `InterruptReason.UserQuestion`(`'aidev:user_question'`)协议不再依赖 `BaseInterrupt.responseSchema`,而是在 `UserQuestionInterrupt.metadata.questions[]` 中用 `multiSelect` 描述单选 / 多选题,并通过 `UserQuestionResume.payload.answers` 回传回答。
|
|
27
|
+
|
|
28
|
+
## 新协议入口
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
type UserQuestionItem = {
|
|
32
|
+
header: string;
|
|
33
|
+
multiSelect: boolean;
|
|
34
|
+
options?: UserQuestionOptionItem[];
|
|
35
|
+
question: string;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
type UserQuestionResume = {
|
|
39
|
+
interruptId: string;
|
|
40
|
+
reason: InterruptReason.UserQuestion;
|
|
41
|
+
status: 'cancelled' | 'resolved';
|
|
42
|
+
payload: {
|
|
43
|
+
answers: UserQuestionAnswerItem[];
|
|
44
|
+
};
|
|
45
|
+
};
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
完整结构见 [中断类型 Interrupt](./interrupt.md#userquestioninterrupt)。
|
|
49
|
+
|
|
50
|
+
## 历史导出
|
|
51
|
+
|
|
52
|
+
### UserSingleChoiceQuestionSchema
|
|
53
|
+
|
|
54
|
+
```typescript
|
|
55
|
+
const UserSingleChoiceQuestionSchema = {
|
|
56
|
+
properties: {
|
|
57
|
+
question: {
|
|
58
|
+
enum: [],
|
|
59
|
+
type: 'string',
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
required: ['question'],
|
|
63
|
+
type: 'object',
|
|
64
|
+
} as const;
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### UserMultiChoiceQuestionSchema
|
|
68
|
+
|
|
69
|
+
```typescript
|
|
70
|
+
const UserMultiChoiceQuestionSchema = {
|
|
71
|
+
properties: {
|
|
72
|
+
question: {
|
|
73
|
+
items: {
|
|
74
|
+
enum: [],
|
|
75
|
+
type: 'string',
|
|
76
|
+
},
|
|
77
|
+
uniqueItems: true,
|
|
78
|
+
type: 'array',
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
required: ['question'],
|
|
82
|
+
type: 'object',
|
|
83
|
+
} as const;
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### UserQuestionSchema
|
|
87
|
+
|
|
88
|
+
`UserQuestionSchema` 与 `UserQuestion` 仍为 `UserMultiChoiceQuestionSchema` / `UserMultiChoiceQuestion` 的别名。
|
|
89
|
+
|
|
90
|
+
## 关联文档
|
|
91
|
+
|
|
92
|
+
- [中断类型 Interrupt](./interrupt.md)
|
|
93
|
+
- [UserQuestionCard 用户问题中断](../components/agent/user-question-card)
|