@blueking/chat-x 0.0.51 → 0.0.52-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.
Files changed (199) hide show
  1. package/README.md +15 -8
  2. package/dist/ag-ui/types/contents.d.ts +2 -0
  3. package/dist/ag-ui/types/messages.d.ts +6 -1
  4. package/dist/common/constants.d.ts +2 -0
  5. package/dist/components/ai-buttons/add-menu-btn/add-menu-btn.vue.d.ts +24 -0
  6. package/dist/components/chat-content/collapsible-content/collapsible-content.vue.d.ts +28 -0
  7. package/dist/components/chat-content/file-content/upload-file-item.vue.d.ts +5 -2
  8. package/dist/components/chat-content/file-content/upload-image-item.vue.d.ts +1 -0
  9. package/dist/components/chat-content/flow-agent-content/use-flow-node-actions.d.ts +1 -1
  10. package/dist/components/chat-input/ai-slash-input/ai-slash-input.vue.d.ts +21 -10
  11. package/dist/components/chat-input/ai-slash-input/command.d.ts +6 -3
  12. package/dist/components/chat-input/ai-slash-input/constants.d.ts +2 -0
  13. package/dist/components/chat-input/ai-slash-input/use-menu-trigger.d.ts +17 -0
  14. package/dist/components/chat-input/build-default-placeholder.d.ts +9 -3
  15. package/dist/components/chat-input/chat-input.vue.d.ts +30 -18
  16. package/dist/components/chat-input/input-menu/constants.d.ts +60 -0
  17. package/dist/components/chat-input/input-menu/index.d.ts +4 -0
  18. package/dist/components/chat-input/input-menu/input-menu-option.vue.d.ts +14 -0
  19. package/dist/components/chat-input/input-menu/input-menu-panel.vue.d.ts +17 -0
  20. package/dist/components/chat-input/input-menu/use-input-menu.d.ts +22 -0
  21. package/dist/components/chat-input/model-selector/types.d.ts +3 -2
  22. package/dist/components/chat-message/message-container/message-container.vue.d.ts +1 -1
  23. package/dist/components/chat-message/user-message/user-message.vue.d.ts +1 -1
  24. package/dist/components/mention/create-mention-tippy.d.ts +27 -0
  25. package/dist/components/mention/index.d.ts +4 -0
  26. package/dist/components/{chat-input/ai-slash-input/ai-prompt-list/ai-prompt-list.vue.d.ts → mention/mention-popover.vue.d.ts} +3 -2
  27. package/dist/components/{chat-input/ai-slash-input/ai-skill-list/ai-skill-list.vue.d.ts → mention/mention-tag.vue.d.ts} +7 -3
  28. package/dist/components/{chat-input/ai-slash-input/ai-slash-menu/ai-slash-menu.vue.d.ts → mention/mention-text.vue.d.ts} +3 -3
  29. package/dist/components/resource-icon/index.d.ts +1 -0
  30. package/dist/components/resource-icon/resource-icon.vue.d.ts +11 -0
  31. package/dist/composables/index.d.ts +1 -0
  32. package/dist/composables/use-artifact-preview.d.ts +5 -2
  33. package/dist/composables/use-common.d.ts +0 -9
  34. package/dist/composables/use-global-config.d.ts +4 -0
  35. package/dist/composables/use-input-mention.d.ts +13 -0
  36. package/dist/composables/use-message-group.d.ts +1011 -72
  37. package/dist/icons/index.d.ts +1 -0
  38. package/dist/icons/input.d.ts +21 -0
  39. package/dist/icons/menu-item.d.ts +22 -0
  40. package/dist/index.css +1 -1
  41. package/dist/index.js +5116 -4595
  42. package/dist/index.js.map +1 -1
  43. package/dist/lang/lang.d.ts +13 -3
  44. package/dist/mcp/generated/docs/activity-message.md +3 -3
  45. package/dist/mcp/generated/docs/add-menu-btn.md +91 -0
  46. package/dist/mcp/generated/docs/ai-selection.md +1 -1
  47. package/dist/mcp/generated/docs/ai-slash-input.md +72 -26
  48. package/dist/mcp/generated/docs/assistant-message.md +7 -1
  49. package/dist/mcp/generated/docs/chat-container.md +45 -6
  50. package/dist/mcp/generated/docs/chat-input.md +327 -483
  51. package/dist/mcp/generated/docs/collapsible-content.md +78 -0
  52. package/dist/mcp/generated/docs/constants.md +36 -3
  53. package/dist/mcp/generated/docs/execution-summary.md +1 -23
  54. package/dist/mcp/generated/docs/file-artifact-panel.md +24 -5
  55. package/dist/mcp/generated/docs/file-content.md +4 -0
  56. package/dist/mcp/generated/docs/file-upload-btn.md +15 -12
  57. package/dist/mcp/generated/docs/flow-agent-content.md +10 -12
  58. package/dist/mcp/generated/docs/input-menu-panel.md +166 -0
  59. package/dist/mcp/generated/docs/mention-tag.md +83 -0
  60. package/dist/mcp/generated/docs/mention-text.md +86 -0
  61. package/dist/mcp/generated/docs/message-container.md +1 -1
  62. package/dist/mcp/generated/docs/message-render.md +1 -1
  63. package/dist/mcp/generated/docs/message-tools.md +15 -4
  64. package/dist/mcp/generated/docs/messages.md +3 -0
  65. package/dist/mcp/generated/docs/model-selector.md +4 -2
  66. package/dist/mcp/generated/docs/overflow-tips.md +3 -3
  67. package/dist/mcp/generated/docs/resource-icon.md +102 -0
  68. package/dist/mcp/generated/docs/text-content.md +7 -3
  69. package/dist/mcp/generated/docs/theme.md +27 -35
  70. package/dist/mcp/generated/docs/use-artifact-preview.md +7 -3
  71. package/dist/mcp/generated/docs/use-command-selection.md +1 -1
  72. package/dist/mcp/generated/docs/use-container-scroll.md +2 -1
  73. package/dist/mcp/generated/docs/use-flow-node-actions.md +8 -15
  74. package/dist/mcp/generated/docs/use-global-config.md +11 -4
  75. package/dist/mcp/generated/docs/use-input-mention.md +119 -0
  76. package/dist/mcp/generated/docs/use-menu-keydown.md +15 -16
  77. package/dist/mcp/generated/docs/use-message-group.md +3 -6
  78. package/dist/mcp/generated/docs/user-message.md +39 -17
  79. package/dist/mcp/generated/index.json +233 -81
  80. package/dist/types/editor.d.ts +0 -29
  81. package/dist/types/index.d.ts +1 -0
  82. package/dist/types/input-menu.d.ts +46 -0
  83. package/dist/utils/artifact-tags.d.ts +36 -0
  84. package/dist/utils/collect-message-artifacts.d.ts +14 -0
  85. package/dist/utils/file.d.ts +3 -3
  86. package/dist/utils/index.d.ts +2 -1
  87. package/dist/utils/upload-file.d.ts +6 -1
  88. package/package.json +4 -3
  89. package/skills/blueking-chat-x/SKILL.md +143 -0
  90. package/skills/blueking-chat-x/references/_index.md +153 -0
  91. package/skills/blueking-chat-x/references/components/activity-layout.md +134 -0
  92. package/skills/blueking-chat-x/references/components/activity-message.md +486 -0
  93. package/skills/blueking-chat-x/references/components/add-menu-btn.md +88 -0
  94. package/skills/blueking-chat-x/references/components/ai-image.md +230 -0
  95. package/skills/blueking-chat-x/references/components/ai-loading.md +131 -0
  96. package/skills/blueking-chat-x/references/components/ai-selection.md +439 -0
  97. package/skills/blueking-chat-x/references/components/ai-slash-input.md +102 -0
  98. package/skills/blueking-chat-x/references/components/animation-text.md +202 -0
  99. package/skills/blueking-chat-x/references/components/assistant-message.md +504 -0
  100. package/skills/blueking-chat-x/references/components/chat-container.md +912 -0
  101. package/skills/blueking-chat-x/references/components/chat-input.md +614 -0
  102. package/skills/blueking-chat-x/references/components/cite-content.md +142 -0
  103. package/skills/blueking-chat-x/references/components/code-content.md +211 -0
  104. package/skills/blueking-chat-x/references/components/collapsible-content.md +76 -0
  105. package/skills/blueking-chat-x/references/components/common-error-content.md +73 -0
  106. package/skills/blueking-chat-x/references/components/content-render.md +233 -0
  107. package/skills/blueking-chat-x/references/components/delete-tool.md +191 -0
  108. package/skills/blueking-chat-x/references/components/desc-panel.md +162 -0
  109. package/skills/blueking-chat-x/references/components/detail-section.md +91 -0
  110. package/skills/blueking-chat-x/references/components/execution-summary.md +150 -0
  111. package/skills/blueking-chat-x/references/components/file-artifact-panel.md +307 -0
  112. package/skills/blueking-chat-x/references/components/file-content.md +340 -0
  113. package/skills/blueking-chat-x/references/components/file-icon.md +109 -0
  114. package/skills/blueking-chat-x/references/components/file-upload-btn.md +162 -0
  115. package/skills/blueking-chat-x/references/components/flow-agent-content.md +266 -0
  116. package/skills/blueking-chat-x/references/components/flow-agent-node-detail.md +236 -0
  117. package/skills/blueking-chat-x/references/components/highlight-keyword.md +146 -0
  118. package/skills/blueking-chat-x/references/components/image-content.md +182 -0
  119. package/skills/blueking-chat-x/references/components/image-preview-group.md +184 -0
  120. package/skills/blueking-chat-x/references/components/image-preview.md +226 -0
  121. package/skills/blueking-chat-x/references/components/info-message.md +144 -0
  122. package/skills/blueking-chat-x/references/components/input-attachment.md +49 -0
  123. package/skills/blueking-chat-x/references/components/input-info-alert.md +42 -0
  124. package/skills/blueking-chat-x/references/components/input-menu-panel.md +162 -0
  125. package/skills/blueking-chat-x/references/components/interrupt-message.md +212 -0
  126. package/skills/blueking-chat-x/references/components/key-value-content.md +128 -0
  127. package/skills/blueking-chat-x/references/components/knowledge-rag-content.md +122 -0
  128. package/skills/blueking-chat-x/references/components/latex-content.md +200 -0
  129. package/skills/blueking-chat-x/references/components/loading-message.md +192 -0
  130. package/skills/blueking-chat-x/references/components/markdown-content.md +232 -0
  131. package/skills/blueking-chat-x/references/components/mention-tag.md +79 -0
  132. package/skills/blueking-chat-x/references/components/mention-text.md +83 -0
  133. package/skills/blueking-chat-x/references/components/mermaid-content.md +189 -0
  134. package/skills/blueking-chat-x/references/components/message-container.md +645 -0
  135. package/skills/blueking-chat-x/references/components/message-loading.md +118 -0
  136. package/skills/blueking-chat-x/references/components/message-render.md +327 -0
  137. package/skills/blueking-chat-x/references/components/message-time.md +177 -0
  138. package/skills/blueking-chat-x/references/components/message-tools.md +427 -0
  139. package/skills/blueking-chat-x/references/components/model-selector.md +157 -0
  140. package/skills/blueking-chat-x/references/components/preview-toolbar.md +42 -0
  141. package/skills/blueking-chat-x/references/components/questions-container.md +85 -0
  142. package/skills/blueking-chat-x/references/components/reasoning-message.md +232 -0
  143. package/skills/blueking-chat-x/references/components/reference-content.md +135 -0
  144. package/skills/blueking-chat-x/references/components/reference-doc-content.md +109 -0
  145. package/skills/blueking-chat-x/references/components/resource-icon.md +98 -0
  146. package/skills/blueking-chat-x/references/components/scroll-btn.md +159 -0
  147. package/skills/blueking-chat-x/references/components/selection-footer.md +78 -0
  148. package/skills/blueking-chat-x/references/components/selection-question.md +88 -0
  149. package/skills/blueking-chat-x/references/components/shortcut-btn.md +204 -0
  150. package/skills/blueking-chat-x/references/components/shortcut-btns.md +266 -0
  151. package/skills/blueking-chat-x/references/components/shortcut-render.md +424 -0
  152. package/skills/blueking-chat-x/references/components/simple-table.md +101 -0
  153. package/skills/blueking-chat-x/references/components/text-content.md +80 -0
  154. package/skills/blueking-chat-x/references/components/tool-approval-card.md +183 -0
  155. package/skills/blueking-chat-x/references/components/tool-btn.md +317 -0
  156. package/skills/blueking-chat-x/references/components/tool-message.md +235 -0
  157. package/skills/blueking-chat-x/references/components/toolcall-render.md +348 -0
  158. package/skills/blueking-chat-x/references/components/user-feedback.md +233 -0
  159. package/skills/blueking-chat-x/references/components/user-message.md +444 -0
  160. package/skills/blueking-chat-x/references/components/user-question-answered-card.md +104 -0
  161. package/skills/blueking-chat-x/references/components/user-question-card.md +231 -0
  162. package/skills/blueking-chat-x/references/components/user-question-choice.md +105 -0
  163. package/skills/blueking-chat-x/references/components/user-question-option.md +42 -0
  164. package/skills/blueking-chat-x/references/components/vnode-renderer.md +122 -0
  165. package/skills/blueking-chat-x/references/composables/use-animation-text.md +196 -0
  166. package/skills/blueking-chat-x/references/composables/use-artifact-preview.md +235 -0
  167. package/skills/blueking-chat-x/references/composables/use-clipboard.md +203 -0
  168. package/skills/blueking-chat-x/references/composables/use-command-selection.md +150 -0
  169. package/skills/blueking-chat-x/references/composables/use-container-scroll.md +57 -0
  170. package/skills/blueking-chat-x/references/composables/use-custom-tab.md +158 -0
  171. package/skills/blueking-chat-x/references/composables/use-flow-node-actions.md +164 -0
  172. package/skills/blueking-chat-x/references/composables/use-full-screen.md +112 -0
  173. package/skills/blueking-chat-x/references/composables/use-global-config.md +155 -0
  174. package/skills/blueking-chat-x/references/composables/use-input-mention.md +115 -0
  175. package/skills/blueking-chat-x/references/composables/use-menu-keydown.md +161 -0
  176. package/skills/blueking-chat-x/references/composables/use-message-group.md +244 -0
  177. package/skills/blueking-chat-x/references/composables/use-observer-visible-list.md +188 -0
  178. package/skills/blueking-chat-x/references/composables/use-parent-scrolling.md +46 -0
  179. package/skills/blueking-chat-x/references/directives/index.md +61 -0
  180. package/skills/blueking-chat-x/references/directives/overflow-tips.md +205 -0
  181. package/skills/blueking-chat-x/references/icons/index.md +185 -0
  182. package/skills/blueking-chat-x/references/plugins/index.md +56 -0
  183. package/skills/blueking-chat-x/references/plugins/markdown-container.md +55 -0
  184. package/skills/blueking-chat-x/references/plugins/markdown-latex.md +205 -0
  185. package/skills/blueking-chat-x/references/plugins/markdown-mermaid.md +247 -0
  186. package/skills/blueking-chat-x/references/theme/theme.md +423 -0
  187. package/skills/blueking-chat-x/references/types/constants.md +340 -0
  188. package/skills/blueking-chat-x/references/types/index.md +120 -0
  189. package/skills/blueking-chat-x/references/types/interrupt.md +379 -0
  190. package/skills/blueking-chat-x/references/types/messages.md +556 -0
  191. package/skills/blueking-chat-x/references/types/schema.md +91 -0
  192. package/skills/blueking-chat-x/references/utils/index.md +196 -0
  193. package/skills/blueking-chat-x/scripts/generate-references.mjs +536 -0
  194. package/dist/components/chat-input/ai-slash-editor/ai-slash-editor.vue.d.ts +0 -28
  195. package/dist/components/chat-input/ai-slash-editor/theme.d.ts +0 -24
  196. package/dist/mcp/generated/docs/ai-prompt-list.md +0 -45
  197. package/dist/mcp/generated/docs/ai-skill-list.md +0 -75
  198. package/dist/mcp/generated/docs/ai-slash-editor.md +0 -43
  199. package/dist/mcp/generated/docs/ai-slash-menu.md +0 -42
@@ -0,0 +1,128 @@
1
+ # KeyValueContent 键值内容
2
+
3
+ > 能力域:内容渲染 | 未从包入口导出:内部组件,请通过上层组件使用 | since 1.0.0
4
+
5
+ 以键值列表展示结构化内容。 源码位置:src/components/chat-content/key-value-content/key-value-content.vue。
6
+
7
+ **关联**:user-message(用户消息内展示结构化附加信息)
8
+
9
+ ---
10
+
11
+ # KeyValueContent 键值对内容
12
+ ## 源码事实
13
+
14
+ - **源码位置**:`src/components/chat-content/key-value-content/key-value-content.vue`
15
+ - **能力域**:内容渲染
16
+ - **能力说明**:以键值列表展示结构化内容。
17
+
18
+ > **能力域**:内容渲染
19
+
20
+ 键值对列表展示基础组件,每行以 `key : value` 格式渲染一条数据,支持可选标题栏(带 `ThinkingIcon`)。
21
+
22
+ 主要被 `UserMessage` 内部用于渲染结构化引用内容(`property.extra.cite.data`),通常不需要手动引入。
23
+
24
+ ## 组件结构
25
+
26
+ ```
27
+ div.ai-key-value-content(flex column,gap: 8px,font-size: 12px,color: #4d4f56)
28
+ ├── [v-if="title"] div.ai-key-value-title(flex,gap: 4px,font-size: 12px,font-weight: 700,color: #3a84ff)
29
+ │ ├── ThinkingIcon(14×14px)
30
+ │ └── {{ title }}
31
+ └── div.ai-key-value-content(flex column,无 gap) ← 与外层同名嵌套
32
+ └── div.key-value-item × N(flex row,gap: 3px,min-height: 20px)
33
+ ├── div.item-key → {{ item.key }}(flex: 0 0 auto,font-weight: bold,color: #333)
34
+ ├── ":" → 硬编码文本节点,冒号不属于任何 div
35
+ └── div.item-value → {{ item.value }}(overflow hidden,ellipsis,`word-break: break-all` 允许多行换行)
36
+ ```
37
+
38
+ > **注意**:内层也是 `.ai-key-value-content` 类(与外层同名),仅用于布局,无额外样式差异。
39
+ > **注意**:`v-for` 使用 `item.key` 作为 `:key`,`content` 中的 `key` 字段必须唯一,否则触发 Vue 重复 key 警告。
40
+ > **注意**:`item.value` 在单行方向仍可能因 `text-overflow: ellipsis` 显示省略,但配合 `word-break: break-all` 长串会优先换行展示,**无 tooltip**(与 `DescPanel` 不同)。
41
+
42
+ ## 基础用法
43
+
44
+ ```vue
45
+ <template>
46
+ <KeyValueContent :content="data" />
47
+ </template>
48
+
49
+ <script setup lang="ts">
50
+ import { KeyValueContent } from '@blueking/chat-x';
51
+
52
+ const data = [
53
+ { key: '名称', value: '蓝鲸智云' },
54
+ { key: '版本', value: 'v3.0' },
55
+ { key: '状态', value: '运行中' },
56
+ ];
57
+ </script>
58
+ ```
59
+
60
+ ## 带标题
61
+
62
+ 传入 `title` 时,顶部显示 `ThinkingIcon` + 标题文本(蓝色加粗):
63
+
64
+ ```vue
65
+ <template>
66
+ <KeyValueContent
67
+ title="模型参数"
68
+ :content="[
69
+ { key: '模型', value: 'GPT-4' },
70
+ { key: '温度', value: '0.7' },
71
+ { key: '最大 Token', value: '2048' },
72
+ { key: '频率惩罚', value: '0.5' },
73
+ ]"
74
+ />
75
+ </template>
76
+ ```
77
+
78
+ ## 超长 value 换行
79
+
80
+ `.item-value` 使用 `word-break: break-all`,长 URL 或长文本会在容器内换行;仍保留 `overflow: hidden` 与 `text-overflow: ellipsis` 以约束极端情况,**悬停无 tooltip**:
81
+
82
+ ## API
83
+
84
+ ### Props
85
+
86
+ | 属性名 | 类型 | 必填 | 说明 |
87
+ | ------- | ----------------------------------- | ---- | ----------------------------------------------------------------- |
88
+ | content | `{ key: string; value: string; }[]` | ✓ | 键值对数组;`key` 同时作为 `v-for` 的 `:key`,需保证唯一 |
89
+ | title | `string` | — | 标题文本;传入后在列表上方渲染 `ThinkingIcon + title`(蓝色加粗) |
90
+
91
+ ## 使用场景
92
+
93
+ `KeyValueContent` 由 `UserMessage` 内部使用,渲染结构化引用内容(`property.extra.cite` 为对象类型时):
94
+
95
+ ```typescript
96
+ // UserMessage 内部逻辑(简化)
97
+ const citeTitle = computed(() => {
98
+ const cite = props.property?.extra?.cite;
99
+ return cite && typeof cite !== 'string' ? cite.title : undefined;
100
+ });
101
+
102
+ const citeContent = computed(() => {
103
+ const cite = props.property?.extra?.cite;
104
+ return cite && typeof cite !== 'string' ? cite.data : cite;
105
+ });
106
+ // citeContent 为数组时 → <KeyValueContent :content="citeContent" :title="citeTitle" />
107
+ // citeContent 为字符串时 → <CiteContent :content="citeContent" />
108
+ ```
109
+
110
+ 如需在用户消息中展示结构化引用,将 `property.extra.cite` 设置为以下格式即可:
111
+
112
+ ```typescript
113
+ const message = {
114
+ // ...
115
+ property: {
116
+ extra: {
117
+ cite: {
118
+ title: '引用标题',
119
+ data: [{ key: '字段名', value: '字段值' }],
120
+ },
121
+ },
122
+ },
123
+ };
124
+ ```
125
+
126
+ ## 关联组件
127
+
128
+ - [UserMessage](/components/message/user-message) — 键值气泡展示
@@ -0,0 +1,122 @@
1
+ # KnowledgeRagContent 知识召回内容
2
+
3
+ > 能力域:Agent 能力 | 未从包入口导出:内部组件,请通过上层组件使用 | since 1.0.0
4
+
5
+ 渲染知识召回活动,包含加载态、Markdown 内容与引用来源。 源码位置:src/components/chat-content/knowledge-rag-content/knowledge-rag-content.vue。
6
+
7
+ **关联**:activity-message(activityType 为 knowledge_rag 时分发到本组件)、activity-layout(提供可折叠的活动容器外壳)、markdown-content(渲染知识召回摘要正文)、reference-content(渲染召回引用来源列表)
8
+
9
+ ---
10
+
11
+ # KnowledgeRagContent 知识召回内容
12
+
13
+ > **能力域**:Agent 能力
14
+
15
+ `KnowledgeRagContent` 用于渲染知识召回活动内容,包含活动标题、加载态、Markdown 摘要和引用来源列表。它是 `ActivityMessage` 在 `activityType === 'knowledge_rag'` 时使用的具体内容组件。
16
+
17
+ 通常不需要直接使用,`MessageRender -> ActivityMessage` 会根据消息类型自动分发到本组件。
18
+
19
+ ## 源码事实
20
+
21
+ - **源码位置**:`src/components/chat-content/knowledge-rag-content/knowledge-rag-content.vue`
22
+ - **能力说明**:渲染知识召回活动,包含加载态、Markdown 内容与引用来源。
23
+
24
+ ## 核心能力
25
+
26
+ - **活动外壳**:基于 `ActivityLayout` 渲染可折叠活动区域,默认展开
27
+ - **状态标题**:`status` 为 `pending` / `streaming` 时标题显示“检索中”并展示 Loading;其他状态显示“检索完成”
28
+ - **Markdown 摘要**:使用 `MarkdownContent` 渲染 `content.content`
29
+ - **引用来源**:使用 `ReferenceContent` 渲染 `content.referenceDocument`
30
+ - **空值兜底**:正文缺失时传入空字符串,引用缺失时传入空数组
31
+
32
+ ## 基础用法
33
+
34
+ ```vue
35
+ <template>
36
+ <KnowledgeRagContent
37
+ v-model:collapsed="collapsed"
38
+ :content="content"
39
+ status="complete"
40
+ />
41
+ </template>
42
+
43
+ <script setup lang="ts">
44
+ import { ref } from 'vue';
45
+ import KnowledgeRagContent from '@blueking/chat-x/src/components/chat-content/knowledge-rag-content/knowledge-rag-content.vue';
46
+ import type { KnowledgeRagMessageContent } from '@blueking/chat-x';
47
+
48
+ const collapsed = ref(false);
49
+
50
+ const content: KnowledgeRagMessageContent = {
51
+ content: '根据知识库检索,**蓝鲸智云** 常见 Agent 接入流程包括...',
52
+ referenceDocument: [
53
+ { name: 'Agent 接入指南', url: 'https://example.com/agent-guide', originFile: 'https://example.com/docs/agent-guide' },
54
+ ],
55
+ };
56
+ </script>
57
+ ```
58
+
59
+ **渲染效果**
60
+
61
+ ## 检索中状态
62
+
63
+ 当消息状态为 `pending` 或 `streaming` 时,标题区域显示 Loading,标题文案为“检索中”。
64
+
65
+ ## 折叠状态
66
+
67
+ `collapsed` 通过 `v-model:collapsed` 与 `ActivityLayout` 双向绑定,适合由父级活动消息统一控制展开/收起。
68
+
69
+ ## API
70
+
71
+ ### Props
72
+
73
+ | 属性名 | 类型 | 必填 | 默认值 | 说明 |
74
+ | ---------- | ---------------------------- | ---- | ------ | ---------------------------------------- |
75
+ | content | `KnowledgeRagMessageContent` | 否 | — | 知识召回摘要与引用来源 |
76
+ | messageUid | `string` | 否 | — | 所属消息唯一标识,当前组件暂未直接使用 |
77
+ | status | `MessageStatus` | 否 | — | 消息状态,影响标题文案与 Loading 显示 |
78
+
79
+ ### Models
80
+
81
+ | 名称 | 类型 | 默认值 | 说明 |
82
+ | --------- | --------- | ------- | ---------------- |
83
+ | collapsed | `boolean` | `false` | 活动内容是否折叠 |
84
+
85
+ ### Emits
86
+
87
+ - 无显式 emits;`v-model:collapsed` 会产生 `update:collapsed`。
88
+
89
+ ### Slots
90
+
91
+ - 无。
92
+
93
+ ### Expose
94
+
95
+ - 无。
96
+
97
+ ## 类型定义
98
+
99
+ ```typescript
100
+ export type KnowledgeRagMessageContent = {
101
+ content: string;
102
+ referenceDocument: ReferenceDocumentContent[];
103
+ };
104
+
105
+ export type ReferenceDocumentContent = {
106
+ name: string;
107
+ originFile: string;
108
+ url: string;
109
+ };
110
+ ```
111
+
112
+ ## 使用建议
113
+
114
+ - 业务接入时优先通过 [ActivityMessage](../message/activity-message.md) 或完整消息链路使用,避免重复判断 `activityType`。
115
+ - `referenceDocument` 为空时组件仍会渲染正文区域,引用列表由 `ReferenceContent` 处理空数组。
116
+
117
+ ## 关联组件
118
+
119
+ - [ActivityMessage](../message/activity-message.md) — 活动消息分发入口。
120
+ - [ActivityLayout](../helper/activity-layout.md) — 折叠活动外壳。
121
+ - [MarkdownContent](../rendering/markdown-content.md) — Markdown 摘要渲染。
122
+ - [ReferenceContent](../rendering/reference-content.md) — 引用来源列表。
@@ -0,0 +1,200 @@
1
+ # LatexContent LaTeX 公式
2
+
3
+ > 能力域:内容渲染 | 导入:`import { LatexContent } from '@blueking/chat-x'` | since 1.0.0
4
+
5
+ 使用 KaTeX 渲染 LaTeX 公式内容。 源码位置:src/components/markdown-token/latex-content/latex-content.vue。
6
+
7
+ **关联**:markdown-content(插件解析 $...$ / $$...$$ 后生成数学 token 并挂载本组件)
8
+
9
+ ---
10
+
11
+ # LatexContent LaTeX 公式渲染
12
+ ## 源码事实
13
+
14
+ - **源码位置**:`src/components/markdown-token/latex-content/latex-content.vue`
15
+ - **能力域**:内容渲染
16
+ - **能力说明**:使用 KaTeX 渲染 LaTeX 公式内容。
17
+
18
+ > **能力域**:内容渲染
19
+
20
+ Markdown Token 层的 LaTeX 公式渲染基础组件,基于 **KaTeX** 实现。被 `MarkdownContent` 在解析到数学公式 token 时自动调用,通常无需手动引入。
21
+
22
+ 核心能力:**流式防抖渲染**(throttle 100ms)、**语法自动补全**(`completeLatexContent`)、**渐进式降级重试**(最多 5 次)、**错误静默**(错误文本白色不可见)。
23
+
24
+ ## 组件结构与 Token 渲染路径
25
+
26
+ ```
27
+ props.token(Token[])
28
+
29
+ ├─ token.type === 'math_block'(单块且 token.length ≤ 1)
30
+ │ wrapperTag = 'div',wrapperClass = 'ai-block-latex-content'
31
+ │ └─ <div class="ai-block-latex-wrapper">
32
+ │ └─ renderLatexToken(token) → <span class="block-katex">KaTeX HTML</span>
33
+
34
+ ├─ token.type === 'math_inline'(或混合 token 数组)
35
+ │ wrapperTag = 'span',wrapperClass = 'ai-inline-latex-content'
36
+ │ └─ renderLatexToken(token) → <span class="inline-katex">KaTeX HTML</span>
37
+
38
+ ├─ token.type === 'inline'(含 children)
39
+ │ └─ renderInlineChildren(token.children)
40
+ │ ├─ math_inline → renderLatexToken(递归)
41
+ │ ├─ text → escapeHtml
42
+ │ ├─ softbreak → '\n'
43
+ │ ├─ hardbreak → '<br>'
44
+ │ ├─ code_inline → '<code>...</code>'
45
+ │ ├─ strong_open/close → '<strong>' / '</strong>'
46
+ │ ├─ em_open/close → '<em>' / '</em>'
47
+ │ ├─ s_open/close → '<s>' / '</s>'
48
+ │ ├─ link_open/close → '<a href="...">...</a>'
49
+ │ ├─ image → '<img src="..." alt="...">'
50
+ │ └─ 未知类型 → escapeHtml(token.content)
51
+
52
+ ├─ token.type === 'paragraph_open/close' → '<p>' / '</p>'
53
+ └─ token.type === 'text' / 其他 → escapeHtml(token.content)
54
+ ```
55
+
56
+ ### displayMode 判断规则
57
+
58
+ ```typescript
59
+ // renderLatexToken 内部
60
+ const displayMode = token.type === 'math_block' || token.meta?.displayMode === true;
61
+ // math_inline 也可通过 meta.displayMode=true 强制块级渲染
62
+ ```
63
+
64
+ ## 基础用法:块级公式
65
+
66
+ ```vue
67
+ <template>
68
+ <LatexContent :token="token" />
69
+ </template>
70
+
71
+ <script setup lang="ts">
72
+ import { LatexContent } from '@blueking/chat-x';
73
+ import type { Token } from 'markdown-it';
74
+
75
+ const token: Token[] = [{ type: 'math_block', content: 'E = mc^2' } as Token];
76
+ </script>
77
+ ```
78
+
79
+ ## 行内公式
80
+
81
+ `math_inline` 类型,包装为 `span.ai-inline-latex-content`,嵌入文字流中渲染:
82
+
83
+ ```vue
84
+ <template>
85
+ <!-- 行内公式 -->
86
+ <LatexContent :token="[{ type: 'math_inline', content: 'a^2 + b^2 = c^2' }]" />
87
+ </template>
88
+ ```
89
+
90
+ ## 混合 inline token(文字 + 公式)
91
+
92
+ 传入 `inline` token 并带 `children` 时,`renderInlineChildren` 逐一处理文本、公式、标记:
93
+
94
+ ## 积分与根号
95
+
96
+ ## 矩阵
97
+
98
+ ## 对齐环境
99
+
100
+ ## 流式渲染防闪烁
101
+
102
+ 组件针对流式 Markdown 输入进行了优化:**100ms throttle**(leading + trailing)避免每字符重渲染,**`completeLatexContent`** 在每次渲染前自动补全不完整语法:
103
+
104
+ ```vue
105
+ <template>
106
+ <LatexContent :token="streamingTokens" />
107
+ </template>
108
+
109
+ <script setup lang="ts">
110
+ import { ref } from 'vue';
111
+ import { LatexContent } from '@blueking/chat-x';
112
+
113
+ const streamingTokens = ref([{ type: 'math_block', content: '' }]);
114
+
115
+ const simulate = async () => {
116
+ const formula = '\\frac{-b \\pm \\sqrt{b^2 - 4ac}}{2a}';
117
+ let content = '';
118
+ for (const char of formula) {
119
+ await new Promise(r => setTimeout(r, 50));
120
+ content += char;
121
+ streamingTokens.value = [{ type: 'math_block', content }];
122
+ }
123
+ };
124
+ </script>
125
+ ```
126
+
127
+ ## 语法自动补全(completeLatexContent)
128
+
129
+ 在每次调用 KaTeX 前,组件先通过 `completeLatexContent` 修复不完整语法,处理顺序为:
130
+
131
+ | 步骤 | 处理内容 | 示例 |
132
+ | ---- | --------------------------------------------------------------------- | --------------------------------------------- |
133
+ | 0 | 不完整 `\begin{env` → 猜测环境名补全 `\begin{env}\end{env}` | `\begin{pma` → `\begin{pmatrix}\end{pmatrix}` |
134
+ | 0.1 | 不完整 `\end{env` → 猜测环境名补全 | `\end{alig` → `\end{aligned}` |
135
+ | 0.2 | 末尾不完整命令 `\begi` → 若匹配已知命令前缀则移除,完整命令则补全参数 | `\frac` → `\frac{}{}` |
136
+ | 1 | 未闭合 `{}` → 补全缺失的 `}` | `\frac{a}{b` → `\frac{a}{b}` |
137
+ | 2 | 未闭合 `[]` → 补全缺失的 `]` | `\sqrt[3` → `\sqrt[3]` |
138
+ | 3 | 双参数命令缺第二个参数 → 追加 `{}` | `\frac{a}` → `\frac{a}{}` |
139
+ | 4 | `\begin{env}` 无对应 `\end{env}` → 追加 `\end{env}` | `\begin{matrix}...` → `...\end{matrix}` |
140
+
141
+ **可猜测的环境名**(`COMMON_ENVS`):`aligned`、`align`、`equation`、`gather`、`matrix`、`pmatrix`、`bmatrix`、`vmatrix`、`cases`、`array`、`split`、`multline`
142
+
143
+ **双参数命令**(`TWO_ARG_COMMANDS`):`frac`、`dfrac`、`tfrac`、`binom`、`cfrac`、`overset`、`underset` 等
144
+
145
+ **单参数命令**(`ONE_ARG_COMMANDS`):`sqrt`、`text`、`mathbf`、`hat`、`vec`、`overline`、`boxed` 等
146
+
147
+ ## 渐进式降级重试(tryRenderKatex)
148
+
149
+ 补全后仍渲染失败时,最多重试 5 次,每次尝试两种裁剪策略:
150
+
151
+ ```
152
+ 尝试 completeLatexContent(content) → KaTeX 渲染
153
+ 失败 →
154
+ 策略 1:移除末尾不完整命令(正则 /\\[a-zA-Z]+(\{[^{}]*\})*\s*$/)
155
+ 策略 2:移除未闭合 {(正则 /\{[^{}]*$/)
156
+ 若仍失败 → 返回 null
157
+ → 渲染 <span class="katex-loading" style="color: #666; font-style: italic;">原始文本(HTML 转义)</span>
158
+ ```
159
+
160
+ > **错误静默**:KaTeX 以 `errorColor: '#fff'`(白色)渲染错误文本,错误不可见。若检测到 HTML 中含 `katex-error` 类或 `color:#cc0000`,也视为渲染失败,降级为 `katex-loading` 显示原始文本。
161
+
162
+ ## API
163
+
164
+ ### Props
165
+
166
+ | 属性名 | 类型 | 必填 | 说明 |
167
+ | ------ | --------- | ---- | ------------------------------------------------------------------------------------------------------------------------ |
168
+ | token | `Token[]` | ✓ | markdown-it Token 数组;支持 `math_block`、`math_inline`、`inline`(含 children)、`paragraph_open/close`、`text` 等类型 |
169
+
170
+ ### Token 结构
171
+
172
+ ```typescript
173
+ // math_block / math_inline
174
+ {
175
+ type: 'math_block' | 'math_inline';
176
+ content: string; // LaTeX 公式字符串
177
+ meta?: { displayMode?: boolean }; // true → 块级渲染(math_inline 可用此强制块级)
178
+ }
179
+
180
+ // inline(含行内标记 + 公式混排)
181
+ {
182
+ type: 'inline';
183
+ children: Token[]; // 子 token 列表
184
+ }
185
+ ```
186
+
187
+ ## 样式说明
188
+
189
+ | 类名 | 标签 | 作用 |
190
+ | ----------------------- | ------ | ------------------------------------------------------------------------------------------- |
191
+ | `.ai-block-latex-content` | `div` | 单一 `math_block` 时的外层,`text-align: center`,`overflow: auto hidden`,`margin: 16px 0` |
192
+ | `.ai-inline-latex-content` | `span` | 混合/行内时的外层,`display: inline`,`vertical-align: baseline` |
193
+ | `.ai-block-latex-wrapper` | `div` | 每个 `math_block` token 的包装,`text-align: center`,`margin: 16px 0` |
194
+ | `.block-katex` | `span` | 块级 KaTeX 输出 |
195
+ | `.inline-katex` | `span` | 行内 KaTeX 输出 |
196
+ | `.katex-loading` | `span` | 渲染失败降级态,斜体灰色显示原始 LaTeX 文本 |
197
+
198
+ ## 关联组件
199
+
200
+ - [MarkdownContent](/components/rendering/markdown-content) — 数学公式 token 的来源与挂载
@@ -0,0 +1,192 @@
1
+ # LoadingMessage 加载消息
2
+
3
+ > 能力域:消息系统 | 导入:`import { LoadingMessageIcon } from '@blueking/chat-x'` | since 0.0.20
4
+
5
+ 消息列表中的加载占位,默认使用 AiLoading,也支持默认插槽覆盖。 源码位置:src/components/chat-message/loading-message/loading-message.vue。
6
+
7
+ **关联**:message-container(在消息列表末尾自动追加 Loading 消息组)、message-render(role 为 loading 时由 MessageRender 渲染)、ai-loading(内部使用 AiLoading 基础组件)
8
+
9
+ ---
10
+
11
+ # LoadingMessage 加载中消息
12
+
13
+ ## 源码事实
14
+
15
+ - **源码位置**:`src/components/chat-message/loading-message/loading-message.vue`
16
+ - **能力域**:消息系统
17
+ - **能力说明**:消息列表中的加载占位,默认使用 AiLoading,也支持默认插槽覆盖。
18
+
19
+ > **导出说明**:`LoadingMessage` **未**从包入口导出。消费方经 `MessageRender`(`role: 'loading'`)或由 `MessageContainer` 自动注入。下文 `LoadingMessageComp` 为文档站内部示例。
20
+
21
+ 加载等待状态组件:`AiLoading`(18px)+ 默认文案「请求中...」。可通过默认插槽自定义文案。
22
+
23
+ > **提示**:通常**不需要手动使用**,`MessageContainer` / `useMessageGroup` 会在满足条件时自动注入。
24
+
25
+ ## 渲染效果
26
+
27
+ ## 基础用法
28
+
29
+ 组件无 Props。文档站内部示例:
30
+
31
+ ```vue
32
+ <template>
33
+ <LoadingMessageComp />
34
+ </template>
35
+ ```
36
+
37
+ 消费方经 `MessageRender`:
38
+
39
+ ```vue
40
+ <template>
41
+ <MessageRender
42
+ :message="{
43
+ id: 'loading',
44
+ messageId: '',
45
+ role: MessageRole.Loading,
46
+ content: '',
47
+ status: MessageStatus.Pending,
48
+ }"
49
+ />
50
+ </template>
51
+
52
+ <script setup lang="ts">
53
+ import { MessageRender, MessageRole, MessageStatus } from '@blueking/chat-x';
54
+ </script>
55
+ ```
56
+
57
+ ## 自定义加载文案
58
+
59
+ 通过默认插槽覆盖「请求中...」:
60
+
61
+ ```vue
62
+ <template>
63
+ <!-- 文档站内部示例 -->
64
+ <LoadingMessageComp>正在思考中,请稍候...</LoadingMessageComp>
65
+ </template>
66
+ ```
67
+
68
+ ## 动画说明
69
+
70
+ `LoadingMessage` 内部使用 `AiLoading` 组件(18px),由两层动画叠加:
71
+
72
+ | 图层 | 动画 | 周期 |
73
+ | ---------- | ----------------------------------- | ---- |
74
+ | 旋转渐变环 | `rotate(0 → 360deg)`,线性 | 0.8s |
75
+ | 脉冲星形 | `scale(0.5 → 1 → 0.5)`,ease-in-out | 0.8s |
76
+
77
+ 颜色均使用线性渐变:`#235DFA`(蓝)→ `#8A77EC`(紫)→ `#EB8CEC`(粉)。
78
+
79
+ ## 在 MessageContainer 中的自动注入
80
+
81
+ `useMessageGroup` 构建分组时,若**最后一条为用户消息**且 **`renderMode !== RenderMode.Share`**,自动在末尾追加 Loading 组:
82
+
83
+ ```typescript
84
+ // use-message-group.ts(简化)
85
+ const shouldAppendLoading =
86
+ messages.at(-1)?.role === MessageRole.User && renderMode !== RenderMode.Share;
87
+
88
+ if (shouldAppendLoading) {
89
+ list.push({
90
+ messages: [
91
+ {
92
+ role: MessageRole.Loading,
93
+ content: '',
94
+ status: MessageStatus.Pending,
95
+ id: 'loading',
96
+ messageId: '',
97
+ },
98
+ ],
99
+ type: MessageRole.Loading,
100
+ });
101
+ }
102
+ ```
103
+
104
+ - 下一条 AI 消息到来后,末尾不再是 user,Loading 组自动消失
105
+ - **分享预览**(`renderMode === RenderMode.Share`)**不会**注入 Loading,避免分享页出现「请求中」占位
106
+
107
+ **触发示例**:
108
+
109
+ ```vue
110
+ <template>
111
+ <MessageContainer
112
+ :messages="messages"
113
+ :message-status="messageStatus"
114
+ :on-agent-action="handleAgentAction"
115
+ />
116
+ </template>
117
+
118
+ <script setup lang="ts">
119
+ import { ref } from 'vue';
120
+ import { MessageContainer, MessageRole, MessageStatus } from '@blueking/chat-x';
121
+
122
+ const messageStatus = ref(MessageStatus.Pending);
123
+
124
+ // 最后一条是 user 消息 → MessageContainer 自动追加 LoadingMessage
125
+ const messages = ref([
126
+ {
127
+ id: '1',
128
+ messageId: '1',
129
+ role: MessageRole.User,
130
+ content: '请帮我写一段 Vue 3 组合式 API 的示例代码',
131
+ status: MessageStatus.Complete,
132
+ },
133
+ ]);
134
+
135
+ const handleAgentAction = async () => {};
136
+ </script>
137
+ ```
138
+
139
+ ## 注意事项
140
+
141
+ - **无 Props**:`LoadingMessage` 组件内部没有 `defineProps`,`MessageRender` 向其传入 message 对象的字段均被忽略
142
+ - **默认插槽**:可通过默认插槽自定义加载文案,未传入时显示内置的 "请求中..."
143
+ - **i18n 支持**:默认文案 "请求中..." 通过内置 `t()` 函数处理,英文环境自动显示 "Requesting..."
144
+ - **选择模式**:`MessageContainer` 开启 `enableSelection` 时,Loading 消息组不显示复选框
145
+ - **分享模式**:`renderMode === RenderMode.Share` 时不自动注入 Loading
146
+ - **自动生命周期**:Loading 组随消息列表变化自动插入/移除,无需手动控制
147
+
148
+ ## API
149
+
150
+ ### Props
151
+
152
+ 组件无 Props。
153
+
154
+ > `MessageRender` 渲染 `role: 'loading'` 消息时会传入 message 对象字段,但 `LoadingMessage` 内部无 `defineProps`,所有传入字段均被忽略。
155
+
156
+ ### Slots
157
+
158
+ | 插槽名 | 说明 |
159
+ | ------- | ----------------------------------------------- |
160
+ | default | 自定义加载文案,默认内容为 i18n 文案"请求中..." |
161
+
162
+ ## 类型定义
163
+
164
+ ```typescript
165
+ import { MessageRole, MessageStatus } from '@blueking/chat-x';
166
+
167
+ // MessageContainer 自动注入的 Loading 消息结构
168
+ type LoadingMessageData = {
169
+ id: 'loading';
170
+ messageId: '';
171
+ role: MessageRole.Loading; // 'loading'
172
+ content: '';
173
+ status: MessageStatus.Pending;
174
+ };
175
+
176
+ enum MessageRole {
177
+ Loading = 'loading',
178
+ // ...
179
+ }
180
+ ```
181
+
182
+ ## 使用场景
183
+
184
+ - **等待 AI 响应**:用户消息发出后、AI 首个 token 到达前的过渡状态,由 `MessageContainer` 自动管理
185
+ - **手动控制场景**:在自定义聊天布局中手动展示加载态(直接引入即可,无需任何配置)
186
+ - **自定义文案**:通过默认插槽传入自定义加载提示文案,满足不同业务场景的文案需求
187
+
188
+ ## 关联组件
189
+
190
+ - [MessageContainer](/components/setup/message-container) — 自动注入加载组
191
+ - [MessageRender](/components/message/message-render) — loading 角色派发
192
+ - [AiLoading](/components/helper/ai-loading) — 内部动画组件