@blueking/chat-x 0.0.51-beta.5 → 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 (198) 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 +4953 -4429
  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-slash-input.md +72 -26
  47. package/dist/mcp/generated/docs/assistant-message.md +7 -1
  48. package/dist/mcp/generated/docs/chat-container.md +45 -6
  49. package/dist/mcp/generated/docs/chat-input.md +327 -483
  50. package/dist/mcp/generated/docs/collapsible-content.md +78 -0
  51. package/dist/mcp/generated/docs/constants.md +36 -3
  52. package/dist/mcp/generated/docs/execution-summary.md +1 -23
  53. package/dist/mcp/generated/docs/file-artifact-panel.md +24 -5
  54. package/dist/mcp/generated/docs/file-content.md +4 -0
  55. package/dist/mcp/generated/docs/file-upload-btn.md +15 -12
  56. package/dist/mcp/generated/docs/flow-agent-content.md +10 -12
  57. package/dist/mcp/generated/docs/input-menu-panel.md +166 -0
  58. package/dist/mcp/generated/docs/mention-tag.md +83 -0
  59. package/dist/mcp/generated/docs/mention-text.md +86 -0
  60. package/dist/mcp/generated/docs/message-container.md +1 -1
  61. package/dist/mcp/generated/docs/message-render.md +1 -1
  62. package/dist/mcp/generated/docs/message-tools.md +15 -4
  63. package/dist/mcp/generated/docs/messages.md +3 -0
  64. package/dist/mcp/generated/docs/model-selector.md +4 -2
  65. package/dist/mcp/generated/docs/overflow-tips.md +3 -3
  66. package/dist/mcp/generated/docs/resource-icon.md +102 -0
  67. package/dist/mcp/generated/docs/text-content.md +7 -3
  68. package/dist/mcp/generated/docs/theme.md +27 -35
  69. package/dist/mcp/generated/docs/use-artifact-preview.md +7 -3
  70. package/dist/mcp/generated/docs/use-command-selection.md +1 -1
  71. package/dist/mcp/generated/docs/use-container-scroll.md +2 -1
  72. package/dist/mcp/generated/docs/use-flow-node-actions.md +8 -15
  73. package/dist/mcp/generated/docs/use-global-config.md +11 -4
  74. package/dist/mcp/generated/docs/use-input-mention.md +119 -0
  75. package/dist/mcp/generated/docs/use-menu-keydown.md +15 -16
  76. package/dist/mcp/generated/docs/use-message-group.md +3 -6
  77. package/dist/mcp/generated/docs/user-message.md +39 -17
  78. package/dist/mcp/generated/index.json +233 -81
  79. package/dist/types/editor.d.ts +0 -29
  80. package/dist/types/index.d.ts +1 -0
  81. package/dist/types/input-menu.d.ts +46 -0
  82. package/dist/utils/artifact-tags.d.ts +36 -0
  83. package/dist/utils/collect-message-artifacts.d.ts +14 -0
  84. package/dist/utils/file.d.ts +3 -3
  85. package/dist/utils/index.d.ts +2 -1
  86. package/dist/utils/upload-file.d.ts +6 -1
  87. package/package.json +3 -2
  88. package/skills/blueking-chat-x/SKILL.md +143 -0
  89. package/skills/blueking-chat-x/references/_index.md +153 -0
  90. package/skills/blueking-chat-x/references/components/activity-layout.md +134 -0
  91. package/skills/blueking-chat-x/references/components/activity-message.md +486 -0
  92. package/skills/blueking-chat-x/references/components/add-menu-btn.md +88 -0
  93. package/skills/blueking-chat-x/references/components/ai-image.md +230 -0
  94. package/skills/blueking-chat-x/references/components/ai-loading.md +131 -0
  95. package/skills/blueking-chat-x/references/components/ai-selection.md +439 -0
  96. package/skills/blueking-chat-x/references/components/ai-slash-input.md +102 -0
  97. package/skills/blueking-chat-x/references/components/animation-text.md +202 -0
  98. package/skills/blueking-chat-x/references/components/assistant-message.md +504 -0
  99. package/skills/blueking-chat-x/references/components/chat-container.md +912 -0
  100. package/skills/blueking-chat-x/references/components/chat-input.md +614 -0
  101. package/skills/blueking-chat-x/references/components/cite-content.md +142 -0
  102. package/skills/blueking-chat-x/references/components/code-content.md +211 -0
  103. package/skills/blueking-chat-x/references/components/collapsible-content.md +76 -0
  104. package/skills/blueking-chat-x/references/components/common-error-content.md +73 -0
  105. package/skills/blueking-chat-x/references/components/content-render.md +233 -0
  106. package/skills/blueking-chat-x/references/components/delete-tool.md +191 -0
  107. package/skills/blueking-chat-x/references/components/desc-panel.md +162 -0
  108. package/skills/blueking-chat-x/references/components/detail-section.md +91 -0
  109. package/skills/blueking-chat-x/references/components/execution-summary.md +150 -0
  110. package/skills/blueking-chat-x/references/components/file-artifact-panel.md +307 -0
  111. package/skills/blueking-chat-x/references/components/file-content.md +340 -0
  112. package/skills/blueking-chat-x/references/components/file-icon.md +109 -0
  113. package/skills/blueking-chat-x/references/components/file-upload-btn.md +162 -0
  114. package/skills/blueking-chat-x/references/components/flow-agent-content.md +266 -0
  115. package/skills/blueking-chat-x/references/components/flow-agent-node-detail.md +236 -0
  116. package/skills/blueking-chat-x/references/components/highlight-keyword.md +146 -0
  117. package/skills/blueking-chat-x/references/components/image-content.md +182 -0
  118. package/skills/blueking-chat-x/references/components/image-preview-group.md +184 -0
  119. package/skills/blueking-chat-x/references/components/image-preview.md +226 -0
  120. package/skills/blueking-chat-x/references/components/info-message.md +144 -0
  121. package/skills/blueking-chat-x/references/components/input-attachment.md +49 -0
  122. package/skills/blueking-chat-x/references/components/input-info-alert.md +42 -0
  123. package/skills/blueking-chat-x/references/components/input-menu-panel.md +162 -0
  124. package/skills/blueking-chat-x/references/components/interrupt-message.md +212 -0
  125. package/skills/blueking-chat-x/references/components/key-value-content.md +128 -0
  126. package/skills/blueking-chat-x/references/components/knowledge-rag-content.md +122 -0
  127. package/skills/blueking-chat-x/references/components/latex-content.md +200 -0
  128. package/skills/blueking-chat-x/references/components/loading-message.md +192 -0
  129. package/skills/blueking-chat-x/references/components/markdown-content.md +232 -0
  130. package/skills/blueking-chat-x/references/components/mention-tag.md +79 -0
  131. package/skills/blueking-chat-x/references/components/mention-text.md +83 -0
  132. package/skills/blueking-chat-x/references/components/mermaid-content.md +189 -0
  133. package/skills/blueking-chat-x/references/components/message-container.md +645 -0
  134. package/skills/blueking-chat-x/references/components/message-loading.md +118 -0
  135. package/skills/blueking-chat-x/references/components/message-render.md +327 -0
  136. package/skills/blueking-chat-x/references/components/message-time.md +177 -0
  137. package/skills/blueking-chat-x/references/components/message-tools.md +427 -0
  138. package/skills/blueking-chat-x/references/components/model-selector.md +157 -0
  139. package/skills/blueking-chat-x/references/components/preview-toolbar.md +42 -0
  140. package/skills/blueking-chat-x/references/components/questions-container.md +85 -0
  141. package/skills/blueking-chat-x/references/components/reasoning-message.md +232 -0
  142. package/skills/blueking-chat-x/references/components/reference-content.md +135 -0
  143. package/skills/blueking-chat-x/references/components/reference-doc-content.md +109 -0
  144. package/skills/blueking-chat-x/references/components/resource-icon.md +98 -0
  145. package/skills/blueking-chat-x/references/components/scroll-btn.md +159 -0
  146. package/skills/blueking-chat-x/references/components/selection-footer.md +78 -0
  147. package/skills/blueking-chat-x/references/components/selection-question.md +88 -0
  148. package/skills/blueking-chat-x/references/components/shortcut-btn.md +204 -0
  149. package/skills/blueking-chat-x/references/components/shortcut-btns.md +266 -0
  150. package/skills/blueking-chat-x/references/components/shortcut-render.md +424 -0
  151. package/skills/blueking-chat-x/references/components/simple-table.md +101 -0
  152. package/skills/blueking-chat-x/references/components/text-content.md +80 -0
  153. package/skills/blueking-chat-x/references/components/tool-approval-card.md +183 -0
  154. package/skills/blueking-chat-x/references/components/tool-btn.md +317 -0
  155. package/skills/blueking-chat-x/references/components/tool-message.md +235 -0
  156. package/skills/blueking-chat-x/references/components/toolcall-render.md +348 -0
  157. package/skills/blueking-chat-x/references/components/user-feedback.md +233 -0
  158. package/skills/blueking-chat-x/references/components/user-message.md +444 -0
  159. package/skills/blueking-chat-x/references/components/user-question-answered-card.md +104 -0
  160. package/skills/blueking-chat-x/references/components/user-question-card.md +231 -0
  161. package/skills/blueking-chat-x/references/components/user-question-choice.md +105 -0
  162. package/skills/blueking-chat-x/references/components/user-question-option.md +42 -0
  163. package/skills/blueking-chat-x/references/components/vnode-renderer.md +122 -0
  164. package/skills/blueking-chat-x/references/composables/use-animation-text.md +196 -0
  165. package/skills/blueking-chat-x/references/composables/use-artifact-preview.md +235 -0
  166. package/skills/blueking-chat-x/references/composables/use-clipboard.md +203 -0
  167. package/skills/blueking-chat-x/references/composables/use-command-selection.md +150 -0
  168. package/skills/blueking-chat-x/references/composables/use-container-scroll.md +57 -0
  169. package/skills/blueking-chat-x/references/composables/use-custom-tab.md +158 -0
  170. package/skills/blueking-chat-x/references/composables/use-flow-node-actions.md +164 -0
  171. package/skills/blueking-chat-x/references/composables/use-full-screen.md +112 -0
  172. package/skills/blueking-chat-x/references/composables/use-global-config.md +155 -0
  173. package/skills/blueking-chat-x/references/composables/use-input-mention.md +115 -0
  174. package/skills/blueking-chat-x/references/composables/use-menu-keydown.md +161 -0
  175. package/skills/blueking-chat-x/references/composables/use-message-group.md +244 -0
  176. package/skills/blueking-chat-x/references/composables/use-observer-visible-list.md +188 -0
  177. package/skills/blueking-chat-x/references/composables/use-parent-scrolling.md +46 -0
  178. package/skills/blueking-chat-x/references/directives/index.md +61 -0
  179. package/skills/blueking-chat-x/references/directives/overflow-tips.md +205 -0
  180. package/skills/blueking-chat-x/references/icons/index.md +185 -0
  181. package/skills/blueking-chat-x/references/plugins/index.md +56 -0
  182. package/skills/blueking-chat-x/references/plugins/markdown-container.md +55 -0
  183. package/skills/blueking-chat-x/references/plugins/markdown-latex.md +205 -0
  184. package/skills/blueking-chat-x/references/plugins/markdown-mermaid.md +247 -0
  185. package/skills/blueking-chat-x/references/theme/theme.md +423 -0
  186. package/skills/blueking-chat-x/references/types/constants.md +340 -0
  187. package/skills/blueking-chat-x/references/types/index.md +120 -0
  188. package/skills/blueking-chat-x/references/types/interrupt.md +379 -0
  189. package/skills/blueking-chat-x/references/types/messages.md +556 -0
  190. package/skills/blueking-chat-x/references/types/schema.md +91 -0
  191. package/skills/blueking-chat-x/references/utils/index.md +196 -0
  192. package/skills/blueking-chat-x/scripts/generate-references.mjs +536 -0
  193. package/dist/components/chat-input/ai-slash-editor/ai-slash-editor.vue.d.ts +0 -28
  194. package/dist/components/chat-input/ai-slash-editor/theme.d.ts +0 -24
  195. package/dist/mcp/generated/docs/ai-prompt-list.md +0 -45
  196. package/dist/mcp/generated/docs/ai-skill-list.md +0 -75
  197. package/dist/mcp/generated/docs/ai-slash-editor.md +0 -43
  198. package/dist/mcp/generated/docs/ai-slash-menu.md +0 -42
@@ -0,0 +1,85 @@
1
+ # QuestionsContainer 问题容器占位
2
+
3
+ > 能力域:辅助能力 | 未从包入口导出:内部组件,请通过上层组件使用 | since 1.0.0
4
+
5
+ 源码为空文件,没有 props、emits、slots 或渲染能力;不建议作为功能组件使用。 源码位置:src/components/ai-questions/questions-container.vue。
6
+
7
+ **关联**:user-question-card(用户问题中断交互请使用实际可渲染的问题卡片组件)、user-question-option(用户问题选项行由实际中断组件承载)、interrupt-message(HITL 中断消息由 InterruptMessage 分发到具体问题组件)
8
+
9
+ ---
10
+
11
+ # QuestionsContainer 问题容器占位
12
+
13
+ > **能力域**:辅助能力
14
+
15
+ `QuestionsContainer` 当前只是保留在源码目录中的空文件,占位路径为 `src/components/ai-questions/questions-container.vue`。它没有模板、脚本、样式、props、emits、slots 或任何渲染行为。
16
+
17
+ 本文档保留该条目,是为了在组件总览和 MCP 文档检索中明确说明:它不是当前可用能力。
18
+
19
+ ## 源码事实
20
+
21
+ - **源码位置**:`src/components/ai-questions/questions-container.vue`
22
+ - **文件大小**:`0` 字节
23
+ - **能力说明**:源码为空文件,没有 props、emits、slots 或渲染能力;不建议作为功能组件使用。
24
+
25
+ ## 当前状态
26
+
27
+ | 项目 | 状态 |
28
+ | -------- | ---- |
29
+ | 模板 | 无 |
30
+ | 脚本逻辑 | 无 |
31
+ | 样式 | 无 |
32
+ | Props | 无 |
33
+ | Emits | 无 |
34
+ | Slots | 无 |
35
+ | Expose | 无 |
36
+
37
+ ## 不可用示例
38
+
39
+ 下面的写法不会产生任何可见 UI,也不会承载问题列表逻辑:
40
+
41
+ ```vue
42
+ <template>
43
+ <!-- 不建议使用:当前组件为空文件 -->
44
+ <QuestionsContainer />
45
+ </template>
46
+ ```
47
+
48
+ ## 推荐替代
49
+
50
+ 如果要展示用户问题中断或选项交互,请使用已经实现的中断消息组件链路:
51
+
52
+ ```vue
53
+ <template>
54
+ <InterruptMessage :message="message" />
55
+ </template>
56
+ ```
57
+
58
+ 或在具体场景中使用:
59
+
60
+ - [InterruptMessage](../agent/interrupt-message.md) — 中断消息分发入口。
61
+ - [UserQuestionCard](../agent/user-question-card.md) — 用户问题中断交互面板。
62
+ - [UserQuestionOption](../agent/user-question-option.md) — 用户问题选项行。
63
+
64
+ ## API
65
+
66
+ ### Props
67
+
68
+ - 无。
69
+
70
+ ### Emits
71
+
72
+ - 无。
73
+
74
+ ### Slots
75
+
76
+ - 无。
77
+
78
+ ### Expose
79
+
80
+ - 无。
81
+
82
+ ## 使用建议
83
+
84
+ - 不建议在业务中使用该组件。
85
+ - 如果后续补齐实现,需要同步更新本文档的能力说明、示例、API 与关联组件。
@@ -0,0 +1,232 @@
1
+ # ReasoningMessage 推理消息
2
+
3
+ > 能力域:消息系统 | 未从包入口导出:内部组件(入口的同名导出是 TS 类型,不是组件) | since 0.0.20
4
+
5
+ 渲染推理过程,覆盖加载、错误与 Markdown 内容展示。 源码位置:src/components/chat-message/reasoning-message/reasoning-message.vue。
6
+
7
+ **关联**:message-render(由 MessageRender 在 role 为 reasoning 时创建)、assistant-message(推理结束后通常紧跟 Assistant 的正式回复)、markdown-content(内容区通过 Markdown 渲染推理文本)
8
+
9
+ ---
10
+
11
+ # ReasoningMessage 推理消息
12
+
13
+ ## 源码事实
14
+
15
+ - **源码位置**:`src/components/chat-message/reasoning-message/reasoning-message.vue`
16
+ - **能力域**:消息系统
17
+ - **能力说明**:渲染推理过程,覆盖加载、错误与 Markdown 内容展示。
18
+
19
+ > **导出说明**:`ReasoningMessage` **未**从包入口导出(入口同名是 TS interface)。消费方经 `MessageRender` / `MessageContainer` 使用。下文 `ReasoningMessageComp` 为文档站内部示例。
20
+
21
+ AI 思维链(Chain-of-Thought)推理过程展示组件。由**可点击标题栏**和**内容区域**组成,内容区支持 Markdown 渲染。`duration` 传入后自动折叠一次,用户可随时点击标题展开/收起。
22
+
23
+ ## 组件结构
24
+
25
+ ```
26
+ ┌─────────────────────────────────────────────────┐
27
+ │ .ai-reasoning-message-title(可点击,toggle 折叠)│
28
+ │ ┌──────┐ 标题文案(思考中/已思考完成/思考失败) ▶ │
29
+ │ │ 加载图标│ 折叠图标 │
30
+ │ └──────┘ │
31
+ └─────────────────────────────────────────────────┘
32
+ ▼ 展开时显示(v-show)
33
+ ┌─────────────────────────────────────────────────┐
34
+ │ .ai-reasoning-message-content │
35
+ │ <MarkdownContent> × content.length │
36
+ │ (Error 时改为 CommonErrorContent) │
37
+ │ .ai-markdown-body { color: #979ba5 }(灰色文字) │
38
+ └─────────────────────────────────────────────────┘
39
+ ```
40
+
41
+ ## 基础用法
42
+
43
+ ```vue
44
+ <template>
45
+ <MessageRender :message="message" />
46
+ </template>
47
+
48
+ <script setup lang="ts">
49
+ import { MessageRender, MessageRole, MessageStatus } from '@blueking/chat-x';
50
+
51
+ const message = {
52
+ id: '1',
53
+ messageId: '1',
54
+ role: MessageRole.Reasoning,
55
+ status: MessageStatus.Complete,
56
+ content: ['让我分析一下这个问题...', '首先需要考虑以下几个方面...'],
57
+ };
58
+ </script>
59
+ ```
60
+
61
+ **渲染效果**
62
+
63
+ ## 状态与视觉效果
64
+
65
+ | `status` | 标题文案 | 加载图标 | 标题 CSS 类 |
66
+ | ------------------------------ | ------------------ | ------------- | ------------- |
67
+ | `pending` / `streaming` / 其他 | 思考中 | `AiLoading` ✓ | `is-thinking` |
68
+ | `complete` / `success` | 已思考完成(耗时) | 无 | `is-complete` |
69
+ | `error` | 思考失败 | 无 | `is-error` |
70
+
71
+ > **说明**:`streaming` 通过 `switch` 的 `default` 分支显示"思考中",与 `pending` 效果相同。
72
+
73
+ ### 思考中(pending / streaming)
74
+
75
+ ### 完成状态(带耗时)
76
+
77
+ `duration` 传入后:
78
+
79
+ 1. 标题显示"已思考完成 (耗时:x.xs)"
80
+ 2. **自动折叠一次**(watch 触发后 `stop()`,后续不再自动折叠)
81
+ 3. 用户点击标题可重新展开
82
+
83
+ ### 错误状态(error)
84
+
85
+ `status: 'error'` 时,标题显示"思考失败",内容区改为 `CommonErrorContent` 渲染(将 `content` 数组 join `\n` 后传入):
86
+
87
+ ## 折叠控制
88
+
89
+ ### 自动折叠机制
90
+
91
+ 组件内部 watch `duration` prop(`{ immediate: true }`):
92
+
93
+ - 当 `duration` **首次变为真值**时,将 `collapsed` 设为 `true` 并停止 watcher
94
+ - **一次性行为**:watcher 停止后,后续 `duration` 变化不再触发自动折叠
95
+
96
+ ```typescript
97
+ // 组件内部逻辑(简化)
98
+ const { stop } = watch(
99
+ () => props.duration,
100
+ async duration => {
101
+ if (duration) {
102
+ collapsed.value = true;
103
+ await nextTick();
104
+ stop?.(); // 停止 watcher,后续 duration 变化不再自动折叠
105
+ }
106
+ },
107
+ { immediate: true },
108
+ );
109
+ ```
110
+
111
+ ### 手动控制折叠状态
112
+
113
+ 通过 `v-model:collapsed` 从外部读取或设置折叠状态:
114
+
115
+ ```vue
116
+ <!-- 文档站内部示例:组件本体支持 v-model:collapsed;消费方一般经 MessageRender 渲染 -->
117
+ <template>
118
+ <button @click="collapsed = !collapsed">
119
+ {{ collapsed ? '展开推理' : '收起推理' }}
120
+ </button>
121
+ <ReasoningMessageComp
122
+ v-model:collapsed="collapsed"
123
+ :content="content"
124
+ :status="status"
125
+ :duration="duration"
126
+ />
127
+ </template>
128
+
129
+ <script setup lang="ts">
130
+ import { ref } from 'vue';
131
+ import { MessageStatus } from '@blueking/chat-x';
132
+
133
+ const collapsed = ref(false);
134
+ const status = MessageStatus.Complete;
135
+ const duration = 2800;
136
+ const content = ['经过分析,结论如下...', '具体原因是...'];
137
+ </script>
138
+ ```
139
+
140
+ ## 在 MessageContainer 中使用
141
+
142
+ `MessageContainer` 会自动将 `role: 'reasoning'` 的消息渲染为 `ReasoningMessage`,无需手动引入:
143
+
144
+ ```vue
145
+ <script setup lang="ts">
146
+ import { MessageRole, MessageStatus, type Message } from '@blueking/chat-x';
147
+
148
+ const messages = [
149
+ {
150
+ id: '1',
151
+ messageId: '1',
152
+ role: MessageRole.User,
153
+ content: '如何实现 TypeScript 中的深拷贝?',
154
+ status: MessageStatus.Complete,
155
+ },
156
+ {
157
+ id: '2',
158
+ messageId: '2',
159
+ role: MessageRole.Reasoning,
160
+ content: [
161
+ '用户问的是 TypeScript 深拷贝,需要考虑几种常见方案...',
162
+ 'JSON.parse/stringify 有局限性(函数、循环引用等)...',
163
+ 'structuredClone 是更现代的选择,但需要注意兼容性...',
164
+ ],
165
+ status: MessageStatus.Complete,
166
+ duration: 2800, // 毫秒,传入后自动折叠
167
+ },
168
+ {
169
+ id: '3',
170
+ messageId: '3',
171
+ role: MessageRole.Assistant,
172
+ content: 'TypeScript 中实现深拷贝有以下几种方式...',
173
+ status: MessageStatus.Complete,
174
+ },
175
+ ];
176
+ </script>
177
+ ```
178
+
179
+ ## API
180
+
181
+ ### Props
182
+
183
+ 组件 Props 继承自 `Partial<ReasoningMessage>`:
184
+
185
+ | 属性名 | 类型 | 说明 |
186
+ | --------- | -------------------- | ------------------------------------------------------------------------------ |
187
+ | content | `string \| string[]` | 推理内容;字符串数组时每项独立渲染为 `MarkdownContent`;字符串时自动包装为数组 |
188
+ | status | `MessageStatus` | 消息状态,决定标题文案、加载图标和 CSS 类 |
189
+ | duration | `number` | 推理耗时(毫秒);传入后标题追加耗时信息,并**触发一次自动折叠** |
190
+ | id | `number \| string` | 消息 ID(接收但不使用) |
191
+ | messageId | `number \| string` | 消息唯一标识(接收但不使用) |
192
+
193
+ ### v-model
194
+
195
+ | 属性名 | 类型 | 默认值 | 说明 |
196
+ | --------- | --------- | ------- | ---------------------------------------------------------- |
197
+ | collapsed | `boolean` | `false` | 内容折叠状态;`duration` 首次传入时组件内部自动设为 `true` |
198
+
199
+ ### 状态说明
200
+
201
+ | `status` | 标题文案 | 加载图标 | 标题背景 |
202
+ | ------------------ | ------------------------------------ | -------- | --------------- |
203
+ | `pending` | 思考中 | ✓ | `#f0f1f5` |
204
+ | `streaming` / 其他 | 思考中(default 分支) | ✓ | `#f0f1f5` |
205
+ | `complete` | 已思考完成(含 duration 则追加耗时) | ✗ | `#f0f1f5` |
206
+ | `success` | 已思考完成(同 complete) | ✗ | `#f0f1f5` |
207
+ | `error` | 思考失败 | ✗ | `#fff0f0`(红) |
208
+
209
+ ## 类型定义
210
+
211
+ ```typescript
212
+ import { MessageRole, MessageStatus, type ReasoningMessage } from '@blueking/chat-x';
213
+
214
+ // ReasoningMessage 继承自 BaseMessage<MessageRole.Reasoning, string[]>
215
+ interface ReasoningMessage {
216
+ id: string | number;
217
+ messageId: string | number;
218
+ role: MessageRole.Reasoning; // 'reasoning'
219
+ status: MessageStatus;
220
+ content: string[]; // TS 类型为 string[],组件内部实际兼容 string
221
+ duration?: number; // 推理耗时(毫秒)
222
+ name?: string;
223
+ }
224
+ ```
225
+
226
+ > `MessageStatus` 完整取值见 [常量枚举](../../types/constants)。本组件完成态识别 `complete` / `success`(与标题文案表一致)。
227
+
228
+ ## 关联组件
229
+
230
+ - [MessageRender](/components/message/message-render) — reasoning 角色由其实例化
231
+ - [AssistantMessage](/components/message/assistant-message) — 推理后常接正式回答
232
+ - [MarkdownContent](/components/rendering/markdown-content) — 推理正文 Markdown 渲染
@@ -0,0 +1,135 @@
1
+ # ReferenceContent 引用来源
2
+
3
+ > 能力域:内容渲染 | 未从包入口导出:内部组件,请通过上层组件使用 | since 1.0.0
4
+
5
+ 渲染引用文档/来源列表。 源码位置:src/components/chat-content/reference-content/reference-content.vue。
6
+
7
+ **关联**:content-render(ReferenceDocument 类型内容路由到本组件)、activity-message(知识库等活动场景内嵌引用列表)
8
+
9
+ ---
10
+
11
+ # ReferenceContent 引用文档内容
12
+ ## 源码事实
13
+
14
+ - **源码位置**:`src/components/chat-content/reference-content/reference-content.vue`
15
+ - **能力域**:内容渲染
16
+ - **能力说明**:渲染引用文档/来源列表。
17
+
18
+ > **能力域**:内容渲染
19
+
20
+ 引用文档列表渲染基础组件,用于展示 AI 回复中引用的参考文档,每项包含文档图标、标题、预览与跳转操作。
21
+
22
+ 主要由 `ActivityMessage`(知识库问答场景)和 `ContentRender`(`reference_document` 类型内容)内部使用。
23
+
24
+ ## 组件结构
25
+
26
+ ```
27
+ <template>(无根元素,Fragment 模式)
28
+ v-for item in links(过滤 name 为空 → 映射为 { title, url, originFileUrl })
29
+
30
+ div.ai-reference-item(flex,height: 28px,padding: 0 12px,color: #3a84ff)
31
+ ├── DocLinkIcon(color="#D66F6B",.ai-doc-link-icon,始终可见)
32
+ ├── span.ai-reference-item-title(flex: 1,ellipsis,font-size: 12px)
33
+ │ @click → url && gotoLink(url, event)
34
+ │ (XSS 安全:{{ item.title }} 文本插值)
35
+ ├── [v-if url && originFileUrl] PreviewIcon(.ai-common-icon)
36
+ │ v-tippy: "预览内容"
37
+ │ @click → gotoLink(url, event)
38
+ │ 默认 display: none,hover 父容器后 display: flex
39
+ └── [v-if url && originFileUrl] TargetIcon(.ai-common-icon)
40
+ v-tippy: "跳转详情"
41
+ @click → gotoLink(originFileUrl, event)
42
+ 默认 display: none,hover 父容器后 display: flex
43
+
44
+ gotoLink(url, event):
45
+ event.stopPropagation() + event.preventDefault()
46
+ window.open(url, '_blank', 'noopener,noreferrer')
47
+ ```
48
+
49
+ > **`v-for` key**:使用 `item.title`(即 `name`)作为 `:key`,同一组 `content` 中 `name` 须唯一,否则触发 Vue 重复 key 警告。
50
+
51
+ ## 图标可见性规则
52
+
53
+ | 图标 | 始终显示 | 显示条件(数据层) | 显示条件(交互层) |
54
+ | ------------------------- | -------- | --------------------------------- | ------------------ |
55
+ | `DocLinkIcon`(红色书签) | ✓ | 无条件 | 无条件 |
56
+ | `PreviewIcon`(预览) | — | `url` 与 `originFileUrl` 均为真值 | 仅在 hover 时出现 |
57
+ | `TargetIcon`(跳转) | — | `url` 与 `originFileUrl` 均为真值 | 仅在 hover 时出现 |
58
+
59
+ 即:只有 `url` 没有 `originFileUrl`(或反之),两个操作图标均不渲染。
60
+
61
+ ## 基础用法
62
+
63
+ ```vue
64
+ <template>
65
+ <ReferenceContent :content="references" />
66
+ </template>
67
+
68
+ <script setup lang="ts">
69
+ import { ReferenceContent } from '@blueking/chat-x';
70
+ import type { ReferenceDocumentContent } from '@blueking/chat-x';
71
+
72
+ const references: ReferenceDocumentContent[] = [
73
+ { name: '蓝鲸 PaaS 平台文档', url: 'https://bk.tencent.com', originFile: '' },
74
+ { name: '组件库使用指南', url: 'https://bk.tencent.com/docs', originFile: '' },
75
+ ];
76
+ </script>
77
+ ```
78
+
79
+ ## 含预览与跳转(url + originFile)
80
+
81
+ 同时提供 `url` 和 `originFile` 时,hover 后出现预览图标和跳转图标:
82
+
83
+ ## 混合场景:过滤与图标差异
84
+
85
+ `name` 为空的项被过滤不渲染;`originFile` 为空时不显示 `PreviewIcon` / `TargetIcon`:
86
+
87
+ ```typescript
88
+ const refs = [
89
+ { name: '有预览和跳转', url: 'https://…/preview', originFile: 'https://…/origin' }, // 两图标
90
+ { name: '仅有 url', url: 'https://…/only', originFile: '' }, // 无图标
91
+ { name: '', url: 'https://…/filtered', originFile: '' }, // 被过滤
92
+ ];
93
+ // 实际渲染 2 条,第 3 条因 name='' 被过滤
94
+ ```
95
+
96
+ ## API
97
+
98
+ ### Props
99
+
100
+ | 属性名 | 类型 | 必填 | 说明 |
101
+ | ------- | ---------------------------- | ---- | --------------------------------------------- |
102
+ | content | `ReferenceDocumentContent[]` | ✓ | 引用文档列表;`name` 为空的项会被过滤,不渲染 |
103
+
104
+ ### 类型定义
105
+
106
+ ```typescript
107
+ export type ReferenceDocumentContent = {
108
+ name: string; // 文档标题(用作列表展示文本,也作为 v-for :key)
109
+ url: string; // 预览链接:标题点击、PreviewIcon 点击时打开
110
+ originFile: string; // 原始文件链接:TargetIcon 点击时打开;为空则不渲染两个操作图标
111
+ };
112
+ ```
113
+
114
+ ## 使用场景
115
+
116
+ `ReferenceContent` 在两处被内部使用:
117
+
118
+ **1. `ActivityMessage`(知识库问答)**
119
+
120
+ ```typescript
121
+ // content 为 ReferenceDocumentContent[] 数组时直接传入
122
+ <ReferenceContent :content="Array.isArray(content) ? content : content?.referenceDocument || []" />
123
+ ```
124
+
125
+ **2. `ContentRender`(content 类型路由)**
126
+
127
+ ```typescript
128
+ // type === MessageContentType.ReferenceDocument 且 content 为数组时
129
+ h(ReferenceContent, { content: props.content as ReferenceDocumentContent[] });
130
+ ```
131
+
132
+ ## 关联组件
133
+
134
+ - [ContentRender](/components/rendering/content-render) — 内容类型分发
135
+ - [ActivityMessage](/components/message/activity-message) — 活动消息内引用
@@ -0,0 +1,109 @@
1
+ # ReferenceDocContent 引用文档活动
2
+
3
+ > 能力域:Agent 能力 | 未从包入口导出:内部组件,请通过上层组件使用 | since 1.0.0
4
+
5
+ 渲染引用文档类活动内容,复用 ActivityLayout 与 ReferenceContent。 源码位置:src/components/chat-content/reference-doc-content/reference-doc-content.vue。
6
+
7
+ **关联**:activity-message(非 knowledge_rag / flow_agent 活动默认可分发为引用文档活动)、activity-layout(提供可折叠的活动容器外壳)、reference-content(渲染引用文档列表)
8
+
9
+ ---
10
+
11
+ # ReferenceDocContent 引用文档活动
12
+
13
+ > **能力域**:Agent 能力
14
+
15
+ `ReferenceDocContent` 用于渲染“引用 N 篇资料作为参考”这类活动消息。组件基于 `ActivityLayout` 提供折叠外壳,并将文档数组交给 `ReferenceContent` 展示。
16
+
17
+ 通常不需要直接使用,`ActivityMessage` 会在引用文档活动场景中分发到本组件。
18
+
19
+ ## 源码事实
20
+
21
+ - **源码位置**:`src/components/chat-content/reference-doc-content/reference-doc-content.vue`
22
+ - **能力说明**:渲染引用文档类活动内容,复用 ActivityLayout 与 ReferenceContent。
23
+
24
+ ## 核心能力
25
+
26
+ - **数量标题**:根据 `content.length` 生成标题,中文为“引用 N 篇资料作为参考”
27
+ - **文档图标**:标题区域固定展示文档图标,不随消息状态变化
28
+ - **可折叠内容**:通过 `v-model:collapsed` 控制引用列表展开/收起,默认展开
29
+ - **引用列表复用**:文档展示、hover 操作图标、链接打开规则均由 `ReferenceContent` 负责
30
+
31
+ ## 基础用法
32
+
33
+ ```vue
34
+ <template>
35
+ <ReferenceDocContent
36
+ v-model:collapsed="collapsed"
37
+ :content="docs"
38
+ />
39
+ </template>
40
+
41
+ <script setup lang="ts">
42
+ import { ref } from 'vue';
43
+ import ReferenceDocContent from '@blueking/chat-x/src/components/chat-content/reference-doc-content/reference-doc-content.vue';
44
+ import type { ReferenceDocumentContent } from '@blueking/chat-x';
45
+
46
+ const collapsed = ref(false);
47
+
48
+ const docs: ReferenceDocumentContent[] = [
49
+ { name: '蓝鲸 Agent 接入指南', url: 'https://example.com/agent', originFile: 'https://example.com/docs/agent' },
50
+ { name: '主机巡检操作手册', url: 'https://example.com/host-check', originFile: 'https://example.com/docs/host-check' },
51
+ ];
52
+ </script>
53
+ ```
54
+
55
+ **渲染效果**
56
+
57
+ ## 空引用
58
+
59
+ 当 `content` 为空或未传入时,标题数量显示为 `0`,引用列表为空。
60
+
61
+ ## 折叠状态
62
+
63
+ ## API
64
+
65
+ ### Props
66
+
67
+ | 属性名 | 类型 | 必填 | 默认值 | 说明 |
68
+ | ---------- | ---------------------------- | ---- | ------ | -------------------------------------- |
69
+ | content | `ReferenceDocumentContent[]` | 否 | — | 引用文档列表 |
70
+ | messageUid | `string` | 否 | — | 所属消息唯一标识,当前组件暂未直接使用 |
71
+
72
+ ### Models
73
+
74
+ | 名称 | 类型 | 默认值 | 说明 |
75
+ | --------- | --------- | ------- | ---------------- |
76
+ | collapsed | `boolean` | `false` | 活动内容是否折叠 |
77
+
78
+ ### Emits
79
+
80
+ - 无显式 emits;`v-model:collapsed` 会产生 `update:collapsed`。
81
+
82
+ ### Slots
83
+
84
+ - 无。
85
+
86
+ ### Expose
87
+
88
+ - 无。
89
+
90
+ ## 类型定义
91
+
92
+ ```typescript
93
+ export type ReferenceDocumentContent = {
94
+ name: string; // 文档标题
95
+ originFile: string; // 原始文件链接,存在时 ReferenceContent 显示跳转操作
96
+ url: string; // 预览链接或标题点击链接
97
+ };
98
+ ```
99
+
100
+ ## 使用建议
101
+
102
+ - 只负责引用文档活动外壳;如果只需要纯引用列表,请直接使用 [ReferenceContent](../rendering/reference-content.md)。
103
+ - 文档条目的过滤与操作图标规则以 `ReferenceContent` 为准,`ReferenceDocContent` 不重复处理。
104
+
105
+ ## 关联组件
106
+
107
+ - [ActivityMessage](../message/activity-message.md) — 活动消息分发入口。
108
+ - [ActivityLayout](../helper/activity-layout.md) — 折叠活动外壳。
109
+ - [ReferenceContent](../rendering/reference-content.md) — 引用来源列表。
@@ -0,0 +1,98 @@
1
+ # ResourceIcon 资源图标
2
+
3
+ > 能力域:辅助能力 | 未从包入口导出:内部组件,请通过上层组件使用 | since 0.0.51
4
+
5
+ ResourceIcon 统一渲染资源图标:icon 为字符串按 img 加载(加载失败回退内置图标)、 为 Vue 组件直接渲染、缺省时按 type 查内置图标表(artifact 交给 FileIcon 按文件名后缀推导, 未登记类型回退 ModuleIcon);尺寸由 --ai-icon-size 控制,默认 16px。 源码位置:src/components/resource-icon/resource-icon.vue。
6
+
7
+ **关联**:input-menu-panel(菜单条目左侧图标)、mention-tag(输入框与消息中的资源标签图标)、model-selector(模型选择器的触发器与选项图标)、file-icon(artifact 类型委托给 FileIcon 按后缀推导)
8
+
9
+ ---
10
+
11
+ # ResourceIcon 资源图标
12
+
13
+ > **能力域**:辅助能力
14
+
15
+ ## 源码事实
16
+
17
+ - **源码位置**:`src/components/resource-icon/resource-icon.vue`
18
+ - **内置图标表**:`file` → `FileUploadIcon`、`mcp` → `McpIcon`、`tool` → `ToolIcon`、`knowledgebase` / `doc` → `KnowledgeBaseIcon`、`prompt` → `PromptIcon`
19
+ - **特殊分支**:`artifact` 走 [FileIcon](/components/helper/file-icon) 按 `name` 的文件后缀推导
20
+ - **最终兜底**:以上都不命中时渲染 `ModuleIcon`(田字格)
21
+
22
+ ## 渲染优先级
23
+
24
+ ```
25
+ icon 有值?
26
+ ├── 字符串 → <img :src="icon">
27
+ │ └── onerror → 降级到「按 type 兜底」
28
+ └── Vue 组件 → <component :is="icon">
29
+ icon 缺省
30
+ ├── type === 'artifact' → FileIcon(按 name 后缀)
31
+ ├── type 命中内置图标表 → 对应内置图标
32
+ └── 其他 → ModuleIcon
33
+ ```
34
+
35
+ `icon` 变化时会重置失效标记,换成新的 URL 会重新尝试加载。
36
+
37
+ ::: info 内部组件
38
+ 本组件不在包入口导出,由菜单、标签与模型选择器内部使用。内置图标(`McpIcon` / `ToolIcon` / `KnowledgeBaseIcon` / `PromptIcon` / `ModuleIcon` / `FileUploadIcon` / `ImageUploadIcon`)从包入口导出,可单独使用,见 [Icons 图标](/icons/)。
39
+ :::
40
+
41
+ ## 用法
42
+
43
+ ```vue
44
+ <template>
45
+ <!-- 远程图标 -->
46
+ <ResourceIcon icon="https://example.com/tool.png" name="天气查询" type="tool" />
47
+ <!-- Vue 组件图标 -->
48
+ <ResourceIcon :icon="McpIcon" name="database-server" type="mcp" />
49
+ <!-- 按类型兜底 -->
50
+ <ResourceIcon name="API 接口文档" type="knowledgebase" />
51
+ <ResourceIcon name="写文章" type="prompt" />
52
+ <!-- 会话产物按后缀推导 -->
53
+ <ResourceIcon name="巡检报告.pdf" type="artifact" />
54
+ </template>
55
+
56
+ <script setup lang="ts">
57
+ import { McpIcon } from '@blueking/chat-x';
58
+ </script>
59
+ ```
60
+
61
+ **渲染效果**(均未传 `icon`,展示按类型兜底的结果)
62
+
63
+ ## 控制尺寸
64
+
65
+ 容器宽高与 `font-size` 都取 `var(--ai-icon-size, 16px)`,图片以 `object-fit: contain` 填充并带 2px 圆角。需要改尺寸时覆盖该变量,不要直接改 svg:
66
+
67
+ ```vue
68
+ <template>
69
+ <span style="--ai-icon-size: 24px">
70
+ <ResourceIcon name="巡检报告.pdf" type="artifact" />
71
+ </span>
72
+ </template>
73
+ ```
74
+
75
+ ## API
76
+
77
+ ### Props
78
+
79
+ | 属性名 | 类型 | 必填 | 说明 |
80
+ | ------ | ----------------------- | ---- | -------------------------------------------------------- |
81
+ | icon | `Component \| string` | - | 图标 URL 或 Vue 组件;缺省时按 `type` 回退 |
82
+ | name | `string` | ✅ | 资源名称;`type` 为 `artifact` 时据此推导文件类型图标 |
83
+ | type | `string` | ✅ | 资源类型,决定兜底图标 |
84
+
85
+ ### Emits / Slots / Expose
86
+
87
+ - 无。
88
+
89
+ ## 扩展新类型
90
+
91
+ 新增类型只需在组件内的 `TYPE_FALLBACK_ICONS` 表里补一行,不必往模板加分支。`model` 等未登记的类型会落到 `ModuleIcon`,因此 [ModelSelector](/components/input/model-selector) 在模型没有 `icon` 时不会缺图。
92
+
93
+ ## 关联组件
94
+
95
+ - [InputMenuPanel](/components/input/input-menu-panel) — 菜单条目图标
96
+ - [MentionTag](/components/rendering/mention-tag) — 资源标签图标
97
+ - [ModelSelector](/components/input/model-selector) — 模型图标
98
+ - [FileIcon](/components/helper/file-icon) — `artifact` 类型的实际渲染者