@blueking/chat-x 0.0.43 → 0.0.45-beta.2

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.
Files changed (149) hide show
  1. package/README.md +1 -1
  2. package/dist/ag-ui/types/constants.d.ts +16 -0
  3. package/dist/ag-ui/types/contents.d.ts +0 -3
  4. package/dist/ag-ui/types/index.d.ts +2 -0
  5. package/dist/ag-ui/types/interrupt.d.ts +107 -0
  6. package/dist/ag-ui/types/messages.d.ts +2 -0
  7. package/dist/ag-ui/types/schema.d.ts +42 -0
  8. package/dist/components/ai-buttons/tool-btn/tool-btn.vue.d.ts +1 -11
  9. package/dist/components/ai-questions/questions-container.vue.d.ts +3 -0
  10. package/dist/components/ai-questions/selection-question.vue.d.ts +3 -0
  11. package/dist/components/chat-content/flow-agent-content/flow-agent-content.vue.d.ts +0 -1
  12. package/dist/components/chat-content/flow-agent-content/flow-agent-node-detail.vue.d.ts +0 -2
  13. package/dist/components/chat-content/index.d.ts +2 -0
  14. package/dist/components/chat-input/ai-slash-input/ai-slash-input.vue.d.ts +1 -3
  15. package/dist/components/chat-input/chat-input.vue.d.ts +10 -9
  16. package/dist/components/chat-input/input-attachment/input-attachment.vue.d.ts +1 -0
  17. package/dist/components/chat-input/{ai-slash-input/ai-skill-list/ai-skill-list.vue.d.ts → input-info-alert.vue.d.ts} +1 -3
  18. package/dist/components/chat-message/interrupt-message/index.d.ts +2 -0
  19. package/dist/components/chat-message/interrupt-message/interrupt-message.vue.d.ts +17 -0
  20. package/dist/components/chat-message/interrupt-message/tool-approval-card.vue.d.ts +8 -0
  21. package/dist/components/chat-message/interrupt-message/user-question/index.d.ts +5 -0
  22. package/dist/components/chat-message/interrupt-message/user-question/use-user-question.d.ts +35 -0
  23. package/dist/components/chat-message/interrupt-message/user-question/user-question-answered-card.vue.d.ts +25 -0
  24. package/dist/components/chat-message/interrupt-message/user-question/user-question-card.vue.d.ts +25 -0
  25. package/dist/components/chat-message/interrupt-message/user-question/user-question-choice.vue.d.ts +13 -0
  26. package/dist/components/chat-message/interrupt-message/user-question/user-question-option.vue.d.ts +17 -0
  27. package/dist/components/chat-message/message-container/message-container.vue.d.ts +14 -7
  28. package/dist/components/chat-message/message-render/message-render.vue.d.ts +4 -0
  29. package/dist/components/index.d.ts +3 -5
  30. package/dist/composables/index.d.ts +0 -1
  31. package/dist/composables/use-common.d.ts +1 -1
  32. package/dist/composables/use-custom-tab.d.ts +1 -1
  33. package/dist/composables/use-message-group.d.ts +2004 -227
  34. package/dist/icons/execution.d.ts +0 -3
  35. package/dist/icons/index.d.ts +1 -1
  36. package/dist/icons/interrupt.d.ts +24 -0
  37. package/dist/index.css +1 -1
  38. package/dist/index.js +5059 -4674
  39. package/dist/index.js.map +1 -1
  40. package/dist/lang/lang.d.ts +33 -5
  41. package/dist/mcp/generated/docs/activity-layout.md +138 -0
  42. package/dist/mcp/generated/docs/activity-message.md +18 -28
  43. package/dist/mcp/generated/docs/ai-image.md +9 -4
  44. package/dist/mcp/generated/docs/ai-loading.md +11 -6
  45. package/dist/mcp/generated/docs/ai-prompt-list.md +42 -0
  46. package/dist/mcp/generated/docs/ai-selection.md +10 -5
  47. package/dist/mcp/generated/docs/ai-slash-editor.md +43 -0
  48. package/dist/mcp/generated/docs/ai-slash-input.md +43 -0
  49. package/dist/mcp/generated/docs/ai-slash-menu.md +42 -0
  50. package/dist/mcp/generated/docs/animation-text.md +9 -4
  51. package/dist/mcp/generated/docs/assistant-message.md +10 -5
  52. package/dist/mcp/generated/docs/chat-container.md +144 -93
  53. package/dist/mcp/generated/docs/chat-input.md +45 -9
  54. package/dist/mcp/generated/docs/cite-content.md +8 -3
  55. package/dist/mcp/generated/docs/code-content.md +9 -4
  56. package/dist/mcp/generated/docs/common-error-content.md +10 -5
  57. package/dist/mcp/generated/docs/constants.md +68 -3
  58. package/dist/mcp/generated/docs/content-render.md +10 -5
  59. package/dist/mcp/generated/docs/delete-tool.md +9 -4
  60. package/dist/mcp/generated/docs/desc-panel.md +9 -4
  61. package/dist/mcp/generated/docs/detail-section.md +93 -0
  62. package/dist/mcp/generated/docs/execution-summary.md +10 -5
  63. package/dist/mcp/generated/docs/file-content.md +9 -4
  64. package/dist/mcp/generated/docs/file-upload-btn.md +11 -6
  65. package/dist/mcp/generated/docs/flow-agent-content.md +212 -0
  66. package/dist/mcp/generated/docs/flow-agent-node-detail.md +240 -0
  67. package/dist/mcp/generated/docs/highlight-keyword.md +10 -5
  68. package/dist/mcp/generated/docs/image-content.md +9 -4
  69. package/dist/mcp/generated/docs/image-preview-group.md +9 -4
  70. package/dist/mcp/generated/docs/image-preview.md +10 -5
  71. package/dist/mcp/generated/docs/info-message.md +7 -2
  72. package/dist/mcp/generated/docs/input-attachment.md +43 -0
  73. package/dist/mcp/generated/docs/input-info-alert.md +42 -0
  74. package/dist/mcp/generated/docs/interrupt-message.md +204 -0
  75. package/dist/mcp/generated/docs/interrupt.md +282 -0
  76. package/dist/mcp/generated/docs/key-value-content.md +9 -4
  77. package/dist/mcp/generated/docs/knowledge-rag-content.md +126 -0
  78. package/dist/mcp/generated/docs/latex-content.md +9 -4
  79. package/dist/mcp/generated/docs/loading-message.md +11 -6
  80. package/dist/mcp/generated/docs/markdown-container.md +1 -1
  81. package/dist/mcp/generated/docs/markdown-content.md +13 -31
  82. package/dist/mcp/generated/docs/markdown-latex.md +3 -3
  83. package/dist/mcp/generated/docs/markdown-mermaid.md +3 -3
  84. package/dist/mcp/generated/docs/mermaid-content.md +9 -4
  85. package/dist/mcp/generated/docs/message-container.md +70 -12
  86. package/dist/mcp/generated/docs/message-loading.md +120 -0
  87. package/dist/mcp/generated/docs/message-render.md +21 -9
  88. package/dist/mcp/generated/docs/message-tools.md +13 -8
  89. package/dist/mcp/generated/docs/messages.md +75 -11
  90. package/dist/mcp/generated/docs/overflow-tips.md +4 -4
  91. package/dist/mcp/generated/docs/preview-toolbar.md +42 -0
  92. package/dist/mcp/generated/docs/questions-container.md +88 -0
  93. package/dist/mcp/generated/docs/reasoning-message.md +10 -5
  94. package/dist/mcp/generated/docs/reference-content.md +10 -5
  95. package/dist/mcp/generated/docs/reference-doc-content.md +112 -0
  96. package/dist/mcp/generated/docs/schema.md +93 -0
  97. package/dist/mcp/generated/docs/scroll-btn.md +8 -3
  98. package/dist/mcp/generated/docs/selection-footer.md +9 -4
  99. package/dist/mcp/generated/docs/selection-question.md +91 -0
  100. package/dist/mcp/generated/docs/shortcut-btn.md +10 -5
  101. package/dist/mcp/generated/docs/shortcut-btns.md +10 -5
  102. package/dist/mcp/generated/docs/shortcut-render.md +11 -10
  103. package/dist/mcp/generated/docs/simple-table.md +103 -0
  104. package/dist/mcp/generated/docs/text-content.md +9 -4
  105. package/dist/mcp/generated/docs/theme.md +3 -3
  106. package/dist/mcp/generated/docs/tool-approval-card.md +148 -0
  107. package/dist/mcp/generated/docs/tool-btn.md +15 -41
  108. package/dist/mcp/generated/docs/tool-message.md +10 -5
  109. package/dist/mcp/generated/docs/toolcall-render.md +10 -5
  110. package/dist/mcp/generated/docs/use-animation-text.md +4 -4
  111. package/dist/mcp/generated/docs/use-clipboard.md +3 -3
  112. package/dist/mcp/generated/docs/use-command-selection.md +1 -1
  113. package/dist/mcp/generated/docs/use-custom-tab.md +1 -1
  114. package/dist/mcp/generated/docs/use-global-config.md +1 -1
  115. package/dist/mcp/generated/docs/use-menu-keydown.md +1 -1
  116. package/dist/mcp/generated/docs/use-message-group.md +40 -9
  117. package/dist/mcp/generated/docs/use-observer-visible-list.md +1 -1
  118. package/dist/mcp/generated/docs/user-feedback.md +8 -3
  119. package/dist/mcp/generated/docs/user-message.md +10 -5
  120. package/dist/mcp/generated/docs/user-question-answered-card.md +106 -0
  121. package/dist/mcp/generated/docs/user-question-card.md +211 -0
  122. package/dist/mcp/generated/docs/user-question-choice.md +108 -0
  123. package/dist/mcp/generated/docs/user-question-option.md +42 -0
  124. package/dist/mcp/generated/docs/vnode-renderer.md +126 -0
  125. package/dist/mcp/generated/index.json +1062 -551
  126. package/dist/mcp/index.js +0 -0
  127. package/dist/mcp/server.js +1 -1
  128. package/dist/mcp/server.js.map +1 -1
  129. package/dist/mcp/tools/list-components.d.ts +7 -6
  130. package/dist/mcp/tools/list-components.js +23 -29
  131. package/dist/mcp/tools/list-components.js.map +1 -1
  132. package/dist/mcp/tools/search-docs.js +1 -1
  133. package/dist/mcp/tools/search-docs.js.map +1 -1
  134. package/dist/mcp/utils/doc-loader.d.ts +1 -1
  135. package/dist/plugins/index.d.ts +0 -1
  136. package/dist/types/custom.d.ts +0 -1
  137. package/dist/types/editor.d.ts +0 -6
  138. package/dist/types/input.d.ts +1 -1
  139. package/dist/types/tool.d.ts +3 -3
  140. package/dist/utils/index.d.ts +0 -1
  141. package/dist/utils/utils.d.ts +0 -1
  142. package/package.json +23 -21
  143. package/dist/components/chat-content/flow-agent-content/flow-agent-state.d.ts +0 -34
  144. package/dist/components/chat-content/flow-agent-content/use-flow-agent.d.ts +0 -47
  145. package/dist/components/chat-content/flow-agent-content/use-flow-tab.d.ts +0 -18
  146. package/dist/composables/use-full-screen.d.ts +0 -17
  147. package/dist/icons/screen.d.ts +0 -6
  148. package/dist/mcp/generated/docs/use-full-screen.md +0 -114
  149. package/dist/plugins/markdown-bk-inline-style.d.ts +0 -20
@@ -0,0 +1,282 @@
1
+ <!-- AI SUMMARY -->
2
+ ## 快速了解
3
+
4
+ 定义 RunFinishedOutcome、BaseInterrupt、AIDevToolApprovalInterrupt、UserQuestionInterrupt、BaseResume、InterruptMessage 与 OnInterruptResume。 与 MessageRole.Interrupt、InterruptMessageRender、UserQuestionCard、ToolApprovalCard 配合,对应 RUN_FINISHED outcome。
5
+
6
+ ### 关联组件
7
+ - **interrupt-message** — 根据 outcome.interrupts 与 reason 渲染中断 UI,success 时回显 UserQuestion 回答
8
+ - **user-question-card** — UserQuestion 交互面板,挂载在 ChatInput 上方
9
+ - **tool-approval-card** — AIDevToolApproval 专用卡片
10
+ - **message-render** — role 为 interrupt 时派发 InterruptMessageRender
11
+
12
+ ---
13
+ <!-- FULL DOC -->
14
+
15
+ # 中断类型 Interrupt
16
+
17
+ > **分类**:type
18
+
19
+ AG-UI [Interrupts](https://docs.ag-ui.com/drafts/interrupts) 协议相关类型,定义在 `src/ag-ui/types/interrupt.ts`,由 `@blueking/chat-x` 导出。
20
+
21
+ 中断链路分为两段:
22
+
23
+ 1. Agent 返回 `RUN_FINISHED { outcome: { type: 'interrupt', interrupts } }`,前端渲染等待用户处理的 UI。
24
+ 2. 用户操作后调用 `onInterruptResume(payload, interrupt)`,业务侧将 `payload` 作为 `RunAgentInput.resume` 回传给 Agent。
25
+
26
+ ## RunFinishedOutcome
27
+
28
+ `RUN_FINISHED` 事件的 `outcome` 联合类型:
29
+
30
+ ```typescript
31
+ type RunFinishedOutcome =
32
+ | { interrupts: Interrupt[]; type: 'interrupt' }
33
+ | { type: 'success' };
34
+ ```
35
+
36
+ | `type` | 说明 |
37
+ | ------------- | -------------------------------------------------------------------- |
38
+ | `'interrupt'` | 等待用户响应;`interrupts` 驱动 UI 渲染审批卡片、用户问题面板等 |
39
+ | `'success'` | 用户已通过 `resume` 处理;若 `result.reason === UserQuestion` 则回显回答内容 |
40
+
41
+ ## BaseInterrupt
42
+
43
+ 所有中断项的公共结构:
44
+
45
+ ```typescript
46
+ type BaseInterrupt<T extends InterruptReason, M extends Record<string, any>> = {
47
+ expiresAt?: string;
48
+ id: string;
49
+ message?: string;
50
+ metadata?: M;
51
+ properties?: Record<string, any>;
52
+ reason: T;
53
+ toolCallId: string;
54
+ };
55
+ ```
56
+
57
+ ## AIDevToolApprovalInterrupt
58
+
59
+ AI Dev 第三方工具审批中断,`reason` 为 `InterruptReason.AIDevToolApproval`(`'aidev:tool_approval'`):
60
+
61
+ ```typescript
62
+ type AIDevToolApprovalInterrupt = BaseInterrupt<
63
+ InterruptReason.AIDevToolApproval,
64
+ {
65
+ ticket: {
66
+ approvers: string[];
67
+ sn: string;
68
+ status: APPROVAL_STATUS;
69
+ submit_time: string;
70
+ title: string;
71
+ url: string;
72
+ };
73
+ }
74
+ >;
75
+ ```
76
+
77
+ ## UserQuestionInterrupt
78
+
79
+ 用户回答问题中断,`reason` 为 `InterruptReason.UserQuestion`(`'aidev:user_question'`)。交互面板由 `ChatContainer` 挂载到 `ChatInput` 上方。
80
+
81
+ ```typescript
82
+ type UserQuestionInterrupt = BaseInterrupt<
83
+ InterruptReason.UserQuestion,
84
+ {
85
+ questions: UserQuestionItem[];
86
+ }
87
+ >;
88
+
89
+ type UserQuestionItem = {
90
+ header: string;
91
+ /** 是否多选;仅选择题语义,自定义表单类问题可不传 */
92
+ multiSelect?: boolean;
93
+ options?: UserQuestionOptionItem[];
94
+ question: string;
95
+ };
96
+
97
+ type UserQuestionOptionItem = {
98
+ description: string;
99
+ label: string;
100
+ };
101
+ ```
102
+
103
+ 约定:
104
+
105
+ - `multiSelect: false` 表示单选题,`true` 表示多选题;**不传**时 UI 不展示单选/多选标签,默认选择题组件仍按单选行为处理。
106
+ - 前端会为每道**选择题**追加 `label: 'others'` 的自由输入项;后端无需重复下发该选项。
107
+ - 当用户选择 Others 时,`answer[].description` 为用户输入文本。
108
+ - 业务可通过 `UserQuestionCard` 的 `#question` slot 渲染自定义表单;作答有效时调用 `setAnswer` 回传 `UserQuestionAnswerItem`,无效时传 `undefined`。
109
+
110
+ ## Interrupt
111
+
112
+ 当前支持的中断联合类型:
113
+
114
+ ```typescript
115
+ type Interrupt =
116
+ | AIDevToolApprovalInterrupt
117
+ | UserQuestionInterrupt
118
+ | BaseInterrupt<InterruptReason, Record<string, any>>;
119
+ ```
120
+
121
+ ## BaseResume / UserQuestionResume
122
+
123
+ `UserQuestion` 的 resume payload 为单个对象,与 `chat-helper` 的 `IResume` 保持一致:
124
+
125
+ ```typescript
126
+ type BaseResume<T extends InterruptReason, P extends Record<string, any>> = {
127
+ interruptId: string;
128
+ payload: P;
129
+ reason: T;
130
+ status: 'cancelled' | 'resolved';
131
+ };
132
+
133
+ type UserQuestionAnswerItem = {
134
+ answer: UserQuestionOptionItem[];
135
+ multiSelect?: boolean;
136
+ question: string;
137
+ };
138
+
139
+ type UserQuestionResume = BaseResume<
140
+ InterruptReason.UserQuestion,
141
+ {
142
+ answers: UserQuestionAnswerItem[];
143
+ }
144
+ >;
145
+ ```
146
+
147
+ 示例:
148
+
149
+ ```typescript
150
+ const resume: UserQuestionResume = {
151
+ interruptId: 'interrupt_user_question',
152
+ reason: InterruptReason.UserQuestion,
153
+ status: 'resolved',
154
+ payload: {
155
+ answers: [
156
+ {
157
+ question: '请选择语言',
158
+ multiSelect: true,
159
+ answer: [
160
+ { label: 'Java', description: 'Java' },
161
+ { label: 'others', description: 'Rust' },
162
+ ],
163
+ },
164
+ ],
165
+ },
166
+ };
167
+ ```
168
+
169
+ ## InterruptMessage
170
+
171
+ `MessageRole.Interrupt` 对应的消息类型,`content` 承载 outcome、可选说明文案与 resume 结果:
172
+
173
+ ```typescript
174
+ type InterruptMessage = BaseMessage<
175
+ MessageRole.Interrupt,
176
+ {
177
+ message?: string;
178
+ outcome?: RunFinishedOutcome;
179
+ result?: BaseResume<InterruptReason>;
180
+ runId?: string;
181
+ threadId?: string;
182
+ }
183
+ >;
184
+ ```
185
+
186
+ | 字段 | 说明 |
187
+ | ---------- | ------------------------------------------------------------ |
188
+ | `message` | 消息组顶部可选说明文案,由 `InterruptMessageRender` 展示 |
189
+ | `outcome` | `type: 'interrupt'` 时从 `interrupts` 渲染交互;`success` 时进入已处理态 |
190
+ | `result` | 用户 resume 后回传的单对象 payload;`UserQuestion` 会用于会话内回显 |
191
+ | `runId` | 关联 AG-UI run 标识 |
192
+ | `threadId` | 关联会话线程标识 |
193
+
194
+ ## OnInterruptResume
195
+
196
+ 用户完成中断操作后的回调(由 `ChatContainer` / `MessageContainer` / `MessageRender` 透传):
197
+
198
+ ```typescript
199
+ type OnInterruptResume = (
200
+ payload: InterruptResume,
201
+ interrupt: Interrupt,
202
+ ) => Promise<void> | void;
203
+ ```
204
+
205
+ | 参数 | 说明 |
206
+ | ----------- | -------------------------------------------------------------------------- |
207
+ | `payload` | 用户操作产生的 resume 负载;审批取消为 `{ action: 'cancel' }`,用户问题为 `UserQuestionResume` |
208
+ | `interrupt` | 原始中断项,业务侧可读取 `interrupt.id`、`toolCallId`、`metadata` 等上下文 |
209
+
210
+ ## 使用示例
211
+
212
+ ```typescript
213
+ import {
214
+ APPROVAL_STATUS,
215
+ InterruptReason,
216
+ MessageRole,
217
+ MessageStatus,
218
+ type InterruptMessage,
219
+ type OnInterruptResume,
220
+ } from '@blueking/chat-x';
221
+
222
+ const message: InterruptMessage = {
223
+ id: 'msg_interrupt_1',
224
+ messageId: 'msg_interrupt_1',
225
+ role: MessageRole.Interrupt,
226
+ status: MessageStatus.Pending,
227
+ content: {
228
+ message: '需要您处理以下中断',
229
+ outcome: {
230
+ type: 'interrupt',
231
+ interrupts: [
232
+ {
233
+ id: 'interrupt_approval_1',
234
+ reason: InterruptReason.AIDevToolApproval,
235
+ toolCallId: 'tool_call_approval_1',
236
+ metadata: {
237
+ ticket: {
238
+ approvers: ['张三'],
239
+ sn: 'REV-2026-04-24-001',
240
+ status: APPROVAL_STATUS.PENDING,
241
+ submit_time: '2026-04-24 14:30:15',
242
+ title: '算法方案评审单',
243
+ url: 'https://example.com/tickets/REV-2026-04-24-001',
244
+ },
245
+ },
246
+ },
247
+ {
248
+ id: 'interrupt_question_1',
249
+ reason: InterruptReason.UserQuestion,
250
+ toolCallId: 'tool_call_question_1',
251
+ message: '请选择实现方案',
252
+ metadata: {
253
+ questions: [
254
+ {
255
+ header: '请选择实现方案',
256
+ multiSelect: false,
257
+ question: '你希望采用哪种排序实现?',
258
+ options: [
259
+ { label: 'basic', description: '基础冒泡排序' },
260
+ { label: 'optimized', description: '提前终止优化版' },
261
+ ],
262
+ },
263
+ ],
264
+ },
265
+ },
266
+ ],
267
+ },
268
+ },
269
+ };
270
+
271
+ const handleInterruptResume: OnInterruptResume = async (payload, interrupt) => {
272
+ console.log('resume', interrupt.id, payload);
273
+ };
274
+ ```
275
+
276
+ ## 关联文档
277
+
278
+ - [常量枚举 Constants](./constants.md) — `InterruptReason`、`APPROVAL_STATUS`
279
+ - [消息类型 Messages](./messages.md) — `InterruptMessage` 在消息联合类型中的位置
280
+ - [InterruptMessage 中断消息](../components/agent/interrupt-message)
281
+ - [UserQuestionCard 用户问题中断](../components/agent/user-question-card)
282
+ - [ToolApprovalCard 审批卡片](../components/agent/tool-approval-card)
@@ -1,7 +1,7 @@
1
1
  <!-- AI SUMMARY -->
2
2
  ## 快速了解
3
3
 
4
- KeyValueContent 以多行 key : value 形式展示结构化数据,可选标题栏与 ThinkingIcon 常见于用户消息等需要表格化键值的气泡展示。
4
+ 以键值列表展示结构化内容。 源码位置:src/components/chat-content/key-value-content/key-value-content.vue
5
5
 
6
6
  ### 关联组件
7
7
  - **user-message** — 用户消息内展示结构化附加信息
@@ -10,10 +10,15 @@ KeyValueContent 以多行 key : value 形式展示结构化数据,可选标题
10
10
  <!-- FULL DOC -->
11
11
 
12
12
  # KeyValueContent 键值对内容
13
+ ## 源码事实
13
14
 
14
- > **层级**:原子组件 · **功能域**:辅助组件
15
+ - **源码位置**:`src/components/chat-content/key-value-content/key-value-content.vue`
16
+ - **能力域**:内容渲染
17
+ - **能力说明**:以键值列表展示结构化内容。
15
18
 
16
- 键值对列表展示原子组件,每行以 `key : value` 格式渲染一条数据,支持可选标题栏(带 `ThinkingIcon`)。
19
+ > **能力域**:内容渲染
20
+
21
+ 键值对列表展示基础组件,每行以 `key : value` 格式渲染一条数据,支持可选标题栏(带 `ThinkingIcon`)。
17
22
 
18
23
  主要被 `UserMessage` 内部用于渲染结构化引用内容(`property.extra.cite.data`),通常不需要手动引入。
19
24
 
@@ -121,4 +126,4 @@ const message = {
121
126
 
122
127
  ## 关联组件
123
128
 
124
- - [UserMessage](../molecular/user-message.md) — 键值气泡展示
129
+ - [UserMessage](/components/message/user-message) — 键值气泡展示
@@ -0,0 +1,126 @@
1
+ <!-- AI SUMMARY -->
2
+ ## 快速了解
3
+
4
+ 渲染知识召回活动,包含加载态、Markdown 内容与引用来源。 源码位置:src/components/chat-content/knowledge-rag-content/knowledge-rag-content.vue。
5
+
6
+ ### 关联组件
7
+ - **activity-message** — activityType 为 knowledge_rag 时分发到本组件
8
+ - **activity-layout** — 提供可折叠的活动容器外壳
9
+ - **markdown-content** — 渲染知识召回摘要正文
10
+ - **reference-content** — 渲染召回引用来源列表
11
+
12
+ ---
13
+ <!-- FULL DOC -->
14
+
15
+ # KnowledgeRagContent 知识召回内容
16
+
17
+ > **能力域**:Agent 能力
18
+
19
+ `KnowledgeRagContent` 用于渲染知识召回活动内容,包含活动标题、加载态、Markdown 摘要和引用来源列表。它是 `ActivityMessage` 在 `activityType === 'knowledge_rag'` 时使用的具体内容组件。
20
+
21
+ 通常不需要直接使用,`MessageRender -> ActivityMessage` 会根据消息类型自动分发到本组件。
22
+
23
+ ## 源码事实
24
+
25
+ - **源码位置**:`src/components/chat-content/knowledge-rag-content/knowledge-rag-content.vue`
26
+ - **能力说明**:渲染知识召回活动,包含加载态、Markdown 内容与引用来源。
27
+
28
+ ## 核心能力
29
+
30
+ - **活动外壳**:基于 `ActivityLayout` 渲染可折叠活动区域,默认展开
31
+ - **状态标题**:`status` 为 `pending` / `streaming` 时标题显示“检索中”并展示 Loading;其他状态显示“检索完成”
32
+ - **Markdown 摘要**:使用 `MarkdownContent` 渲染 `content.content`
33
+ - **引用来源**:使用 `ReferenceContent` 渲染 `content.referenceDocument`
34
+ - **空值兜底**:正文缺失时传入空字符串,引用缺失时传入空数组
35
+
36
+ ## 基础用法
37
+
38
+ ```vue
39
+ <template>
40
+ <KnowledgeRagContent
41
+ v-model:collapsed="collapsed"
42
+ :content="content"
43
+ status="complete"
44
+ />
45
+ </template>
46
+
47
+ <script setup lang="ts">
48
+ import { ref } from 'vue';
49
+ import KnowledgeRagContent from '@blueking/chat-x/src/components/chat-content/knowledge-rag-content/knowledge-rag-content.vue';
50
+ import type { KnowledgeRagMessageContent } from '@blueking/chat-x';
51
+
52
+ const collapsed = ref(false);
53
+
54
+ const content: KnowledgeRagMessageContent = {
55
+ content: '根据知识库检索,**蓝鲸智云** 常见 Agent 接入流程包括...',
56
+ referenceDocument: [
57
+ { name: 'Agent 接入指南', url: 'https://example.com/agent-guide', originFile: 'https://example.com/docs/agent-guide' },
58
+ ],
59
+ };
60
+ </script>
61
+ ```
62
+
63
+ **渲染效果**
64
+
65
+ ## 检索中状态
66
+
67
+ 当消息状态为 `pending` 或 `streaming` 时,标题区域显示 Loading,标题文案为“检索中”。
68
+
69
+ ## 折叠状态
70
+
71
+ `collapsed` 通过 `v-model:collapsed` 与 `ActivityLayout` 双向绑定,适合由父级活动消息统一控制展开/收起。
72
+
73
+ ## API
74
+
75
+ ### Props
76
+
77
+ | 属性名 | 类型 | 必填 | 默认值 | 说明 |
78
+ | ---------- | ---------------------------- | ---- | ------ | ---------------------------------------- |
79
+ | content | `KnowledgeRagMessageContent` | 否 | — | 知识召回摘要与引用来源 |
80
+ | messageUid | `string` | 否 | — | 所属消息唯一标识,当前组件暂未直接使用 |
81
+ | status | `MessageStatus` | 否 | — | 消息状态,影响标题文案与 Loading 显示 |
82
+
83
+ ### Models
84
+
85
+ | 名称 | 类型 | 默认值 | 说明 |
86
+ | --------- | --------- | ------- | ---------------- |
87
+ | collapsed | `boolean` | `false` | 活动内容是否折叠 |
88
+
89
+ ### Emits
90
+
91
+ - 无显式 emits;`v-model:collapsed` 会产生 `update:collapsed`。
92
+
93
+ ### Slots
94
+
95
+ - 无。
96
+
97
+ ### Expose
98
+
99
+ - 无。
100
+
101
+ ## 类型定义
102
+
103
+ ```typescript
104
+ export type KnowledgeRagMessageContent = {
105
+ content: string;
106
+ referenceDocument: ReferenceDocumentContent[];
107
+ };
108
+
109
+ export type ReferenceDocumentContent = {
110
+ name: string;
111
+ originFile: string;
112
+ url: string;
113
+ };
114
+ ```
115
+
116
+ ## 使用建议
117
+
118
+ - 业务接入时优先通过 [ActivityMessage](../message/activity-message.md) 或完整消息链路使用,避免重复判断 `activityType`。
119
+ - `referenceDocument` 为空时组件仍会渲染正文区域,引用列表由 `ReferenceContent` 处理空数组。
120
+
121
+ ## 关联组件
122
+
123
+ - [ActivityMessage](../message/activity-message.md) — 活动消息分发入口。
124
+ - [ActivityLayout](../helper/activity-layout.md) — 折叠活动外壳。
125
+ - [MarkdownContent](../rendering/markdown-content.md) — Markdown 摘要渲染。
126
+ - [ReferenceContent](../rendering/reference-content.md) — 引用来源列表。
@@ -1,7 +1,7 @@
1
1
  <!-- AI SUMMARY -->
2
2
  ## 快速了解
3
3
 
4
- LatexContent 使用 KaTeX 渲染 math_block / math_inline 等 token,支持行内块级混排与流式防抖。 必填 props 为 token 数组;失败时静默降级展示原始 LaTeX 文本。 由 MarkdownContent 在数学插件解析后自动调用。
4
+ 使用 KaTeX 渲染 LaTeX 公式内容。 源码位置:src/components/markdown-token/latex-content/latex-content.vue。
5
5
 
6
6
  ### 关联组件
7
7
  - **markdown-content** — 插件解析 $...$ / $$...$$ 后生成数学 token 并挂载本组件
@@ -10,10 +10,15 @@ LatexContent 使用 KaTeX 渲染 math_block / math_inline 等 token,支持行
10
10
  <!-- FULL DOC -->
11
11
 
12
12
  # LatexContent LaTeX 公式渲染
13
+ ## 源码事实
13
14
 
14
- > **层级**:原子组件 · **功能域**:内容渲染
15
+ - **源码位置**:`src/components/markdown-token/latex-content/latex-content.vue`
16
+ - **能力域**:内容渲染
17
+ - **能力说明**:使用 KaTeX 渲染 LaTeX 公式内容。
15
18
 
16
- Markdown Token 层的 LaTeX 公式渲染原子组件,基于 **KaTeX** 实现。被 `MarkdownContent` 在解析到数学公式 token 时自动调用,通常无需手动引入。
19
+ > **能力域**:内容渲染
20
+
21
+ Markdown Token 层的 LaTeX 公式渲染基础组件,基于 **KaTeX** 实现。被 `MarkdownContent` 在解析到数学公式 token 时自动调用,通常无需手动引入。
17
22
 
18
23
  核心能力:**流式防抖渲染**(throttle 100ms)、**语法自动补全**(`completeLatexContent`)、**渐进式降级重试**(最多 5 次)、**错误静默**(错误文本白色不可见)。
19
24
 
@@ -193,4 +198,4 @@ const displayMode = token.type === 'math_block' || token.meta?.displayMode === t
193
198
 
194
199
  ## 关联组件
195
200
 
196
- - [MarkdownContent](./markdown-content.md) — 数学公式 token 的来源与挂载
201
+ - [MarkdownContent](/components/rendering/markdown-content) — 数学公式 token 的来源与挂载
@@ -1,19 +1,24 @@
1
1
  <!-- AI SUMMARY -->
2
2
  ## 快速了解
3
3
 
4
- LoadingMessage 展示等待 AI 响应的加载动画(内部 AiLoading),无必填 Props,默认插槽可自定义「请求中」文案。 典型用法是由 MessageContainer 在末尾为用户消息时自动注入 Loading 组;也可在自定义布局中手动放置。
4
+ 消息列表中的加载占位,默认使用 AiLoading,也支持默认插槽覆盖。 源码位置:src/components/chat-message/loading-message/loading-message.vue。
5
5
 
6
6
  ### 关联组件
7
7
  - **message-container** — 在消息列表末尾自动追加 Loading 消息组
8
8
  - **message-render** — role 为 loading 时由 MessageRender 渲染
9
- - **ai-loading** — 内部使用 AiLoading 原子组件
9
+ - **ai-loading** — 内部使用 AiLoading 基础组件
10
10
 
11
11
  ---
12
12
  <!-- FULL DOC -->
13
13
 
14
14
  # LoadingMessage 加载中消息
15
+ ## 源码事实
15
16
 
16
- > **层级**:分子组件 · **功能域**:消息展示
17
+ - **源码位置**:`src/components/chat-message/loading-message/loading-message.vue`
18
+ - **能力域**:消息系统
19
+ - **能力说明**:消息列表中的加载占位,默认使用 AiLoading,也支持默认插槽覆盖。
20
+
21
+ > **能力域**:消息系统
17
22
 
18
23
  加载等待状态组件,展示 AI 正在处理请求时的过渡动画。由旋转渐变环 + 脉冲星形图标(蓝→紫→粉渐变)和"请求中..."文案组成。支持通过默认插槽自定义加载文案。
19
24
 
@@ -166,6 +171,6 @@ enum MessageRole {
166
171
 
167
172
  ## 关联组件
168
173
 
169
- - [MessageContainer](./message-container.md) — 自动注入加载组
170
- - [MessageRender](./message-render.md) — loading 角色派发
171
- - [AiLoading](../atomic/ai-loading.md) — 内部动画组件
174
+ - [MessageContainer](/components/setup/message-container) — 自动注入加载组
175
+ - [MessageRender](/components/message/message-render) — loading 角色派发
176
+ - [AiLoading](/components/helper/ai-loading) — 内部动画组件
@@ -53,4 +53,4 @@ const md = new MarkdownIt({ html: true }).use(markdownItContainer, /^hljs-(left|
53
53
 
54
54
  ## 关联
55
55
 
56
- - [MarkdownContent](../components/atomic/markdown-content.md) — 实际接入与样式
56
+ - [MarkdownContent](../components/rendering/markdown-content) — 实际接入与样式
@@ -1,7 +1,7 @@
1
1
  <!-- AI SUMMARY -->
2
2
  ## 快速了解
3
3
 
4
- MarkdownContent 将 Markdown 字符串解析为 token 并渲染,集成代码块、公式、Mermaid 等子渲染器。 核心 props 为 content 与 status;内置流式节流、语法补全与 DOMPurify 安全策略。 通常由 ContentRender、AssistantMessage 等间接使用,无需业务直接挂载。
4
+ Markdown 主渲染器,集成代码块、公式、错误降级和 codeHeader 插槽。 源码位置:src/components/chat-content/markdown-content/markdown-content.vue。
5
5
 
6
6
  ### 关联组件
7
7
  - **code-content** — fence 代码块语法高亮与复制
@@ -13,12 +13,17 @@ MarkdownContent 将 Markdown 字符串解析为 token 并渲染,集成代码
13
13
  <!-- FULL DOC -->
14
14
 
15
15
  # MarkdownContent Markdown 内容渲染
16
+ ## 源码事实
16
17
 
17
- > **层级**:原子组件 · **功能域**:内容渲染
18
+ - **源码位置**:`src/components/chat-content/markdown-content/markdown-content.vue`
19
+ - **能力域**:内容渲染
20
+ - **能力说明**:Markdown 主渲染器,集成代码块、公式、错误降级和 codeHeader 插槽。
18
21
 
19
- AI 消息内容渲染的核心原子组件,集成代码高亮、LaTeX 公式、Mermaid 图表等能力,内置流式渲染优化(5ms throttle + 语法补全 + 防闪烁)。
22
+ > **能力域**:内容渲染
20
23
 
21
- `AssistantMessage`、`ReasoningMessage` 等分子组件内部自动使用,通常不需要手动引入。
24
+ AI 消息内容渲染的核心基础组件,集成代码高亮、LaTeX 公式、Mermaid 图表等能力,内置流式渲染优化(5ms throttle + 语法补全 + 防闪烁)。
25
+
26
+ 由 `AssistantMessage`、`ReasoningMessage` 等组合组件内部自动使用,通常不需要手动引入。
22
27
 
23
28
  ## 组件结构与渲染流程
24
29
 
@@ -177,7 +182,6 @@ props.content → completeMarkdownSyntax → md.parse → groupTokens → groupe
177
182
 
178
183
  | 插件 | 语法 | 功能 |
179
184
  | --------------------------- | ------------------- | -------------------- |
180
- | `markdownItBkInlineStyle` | 见下文「蓝鲸行内样式」 | 安全行内颜色/字号/粗斜体(非 HTML) |
181
185
  | `markdown-it-footnote` | `[^1]` | 脚注 |
182
186
  | `markdown-it-ins` | `++text++` | 下划线 |
183
187
  | `markdown-it-mark` | `==text==` | 高亮 |
@@ -188,30 +192,8 @@ props.content → completeMarkdownSyntax → md.parse → groupTokens → groupe
188
192
  | `markdownItLatex` | `$...$` / `$$...$$` | KaTeX 数学公式 token |
189
193
  | `markdownItContainer` | `::: hljs-left` 等 | 自定义对齐容器(class 与 highlight.js 命名对齐) |
190
194
 
191
- ### 蓝鲸行内样式(`markdownItBkInlineStyle`)
192
-
193
- 不开启 `html: true`,由专用语法生成带白名单 `style` 的 `<span class="bk-md-inline-style">`。
194
-
195
- **语法**:`::bk{` *属性* `}` *正文* `:/bk::`
196
-
197
- - 属性写在 `{}` 内,使用 `;` 分隔;每项为 `键=值` 或 `键:值`。
198
- - 正文支持行内 Markdown(如 `**粗体**`)。
199
- - 结束标记必须为字面量 `:/bk::`,请勿在正文中出现该序列。
200
-
201
- **支持的键**:`color` / `c`、`background-color`、`font-size`、`bold`、`italic`(详见 `plugins/markdown-bk-inline-style.ts` 内注释)。
202
-
203
- **示例**:
204
-
205
- ```markdown
206
- ::bk{color:#c00;font-size:18px}**重要**:/bk::
207
- ::bk{background-color:yellow}高亮:/bk::
208
- ::bk{bold;italic}强调:/bk::
209
- ```
210
-
211
195
  ### 安全性
212
196
 
213
- `MarkdownIt` **不**开启 `html: true`,用户无法插入任意 HTML 标签;行内彩色/字号等请使用上文「蓝鲸行内样式」扩展。
214
-
215
197
  `VNodeRenderer` 渲染的 HTML 统一经过 DOMPurify 过滤,并额外允许 KaTeX 所需标签:
216
198
 
217
199
  ```typescript
@@ -225,7 +207,7 @@ const domPurifyConfig = {
225
207
 
226
208
  ## 关联组件
227
209
 
228
- - [CodeContent](./code-content.md) — 代码 fence 高亮
229
- - [LatexContent](./latex-content.md) — 公式渲染
230
- - [MermaidContent](./mermaid-content.md) — Mermaid 图表
231
- - [ContentRender](../molecular/content-render.md) — 内容类型分发入口
210
+ - [CodeContent](/components/rendering/code-content) — 代码 fence 高亮
211
+ - [LatexContent](/components/rendering/latex-content) — 公式渲染
212
+ - [MermaidContent](/components/rendering/mermaid-content) — Mermaid 图表
213
+ - [ContentRender](/components/rendering/content-render) — 内容类型分发入口
@@ -203,6 +203,6 @@ KaTeX 限制:
203
203
 
204
204
  ## 关联组件
205
205
 
206
- - [LatexContent](../components/atomic/latex-content.md) — KaTeX 渲染
207
- - [MarkdownContent](../components/atomic/markdown-content.md) — Markdown 内容
208
- - [ContentRender](../components/molecular/content-render.md) — 内容渲染
206
+ - [LatexContent](../components/rendering/latex-content) — KaTeX 渲染
207
+ - [MarkdownContent](../components/rendering/markdown-content) — Markdown 内容
208
+ - [ContentRender](../components/rendering/content-render) — 内容渲染
@@ -245,6 +245,6 @@ erDiagram
245
245
 
246
246
  ## 关联组件
247
247
 
248
- - [MermaidContent](../components/atomic/mermaid-content.md) — Mermaid 渲染
249
- - [MarkdownContent](../components/atomic/markdown-content.md) — Markdown 内容
250
- - [ContentRender](../components/molecular/content-render.md) — 内容渲染
248
+ - [MermaidContent](../components/rendering/mermaid-content) — Mermaid 渲染
249
+ - [MarkdownContent](../components/rendering/markdown-content) — Markdown 内容
250
+ - [ContentRender](../components/rendering/content-render) — 内容渲染
@@ -1,7 +1,7 @@
1
1
  <!-- AI SUMMARY -->
2
2
  ## 快速了解
3
3
 
4
- MermaidContent info mermaid 的 fence token 渲染为 SVG,模块级懒加载单例 Mermaid 具备流式 throttle、错误静默与 SVG ID 随机化,避免多实例冲突。 由 MarkdownContent 在解析 mermaid 代码块时调用。
4
+ 渲染 Mermaid 图表并处理渲染事件。 源码位置:src/components/markdown-token/mermaid-content/mermaid-content.vue
5
5
 
6
6
  ### 关联组件
7
7
  - **markdown-content** — 解析 mermaid 类型 fence 代码块后传入 token
@@ -10,10 +10,15 @@ MermaidContent 将 info 为 mermaid 的 fence token 渲染为 SVG,模块级懒
10
10
  <!-- FULL DOC -->
11
11
 
12
12
  # MermaidContent Mermaid 图表渲染
13
+ ## 源码事实
13
14
 
14
- > **层级**:原子组件 · **功能域**:内容渲染
15
+ - **源码位置**:`src/components/markdown-token/mermaid-content/mermaid-content.vue`
16
+ - **能力域**:内容渲染
17
+ - **能力说明**:渲染 Mermaid 图表并处理渲染事件。
15
18
 
16
- Markdown Token 层的 Mermaid 图表渲染原子组件,被 `MarkdownContent` 在检测到 mermaid fence token 时自动调用,通常无需手动引入。
19
+ > **能力域**:内容渲染
20
+
21
+ Markdown Token 层的 Mermaid 图表渲染基础组件,被 `MarkdownContent` 在检测到 mermaid fence token 时自动调用,通常无需手动引入。
17
22
 
18
23
  核心能力:**按需懒加载 Mermaid**(动态 import 单例)、**三级去重跳过**(代码比对 → 语法校验 → SVG 比对)、**100ms throttle** 流式防抖、**错误静默**(parse 失败时保持上一次 SVG)。
19
24
 
@@ -182,4 +187,4 @@ mermaid.default.render('mermaid-content-' + Math.random().toString(36).substring
182
187
 
183
188
  ## 关联组件
184
189
 
185
- - [MarkdownContent](./markdown-content.md) — mermaid fence token 的来源与挂载
190
+ - [MarkdownContent](/components/rendering/markdown-content) — mermaid fence token 的来源与挂载