@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,144 @@
1
+ # InfoMessage 信息消息
2
+
3
+ > 能力域:消息系统 | 未从包入口导出:内部组件(入口的同名导出是 TS 类型,不是组件) | since 0.0.20
4
+
5
+ 渲染居中的系统信息提示。 源码位置:src/components/chat-message/info-message/info-message.vue。
6
+
7
+ **关联**:message-render(由 MessageRender 在 role 为 info 时创建)、message-container(嵌入消息列表时由 MessageContainer 统一布局与滚动)
8
+
9
+ ---
10
+
11
+ # InfoMessage 信息消息
12
+
13
+ ## 源码事实
14
+
15
+ - **源码位置**:`src/components/chat-message/info-message/info-message.vue`
16
+ - **能力域**:消息系统
17
+ - **能力说明**:渲染居中的系统信息提示。
18
+
19
+ > **导出说明**:`InfoMessage` **未**从包入口导出(入口同名是 TS interface)。消费方经 `MessageRender` / `MessageContainer` 使用。下文 `InfoMessageComp` 为文档站内部示例。
20
+
21
+ 系统信息分隔组件,在聊天消息列表中以**左右虚线夹中文案**的形式展示非对话类信息(会话重置、时间节点、状态变更等)。
22
+
23
+ ## 视觉原理
24
+
25
+ 根节点 `.ai-info-message` 为横向 flex:两侧通过 `::before` / `::after` 拉伸出虚线(主题边框色),中间 `.ai-info-message-body` 承载文案(主题次要文案色)。整块正常占位,避免旧实现 `height: 0` 导致内容被裁切遮挡:
26
+
27
+ ```
28
+ ─────── 以下是新的对话 ───────
29
+ ```
30
+
31
+ 多行时,多条 `.ai-info-message-content` 在 body 内纵向排列(`gap: 4px`),两侧虚线仍夹住整块文案区域。
32
+ ## 基础用法
33
+
34
+ `content` 传入字符串,渲染单行分隔信息:
35
+
36
+ ```vue
37
+ <template>
38
+ <MessageRender :message="message" />
39
+ </template>
40
+
41
+ <script setup lang="ts">
42
+ import { MessageRender, MessageRole, MessageStatus } from '@blueking/chat-x';
43
+
44
+ const message = {
45
+ id: '1',
46
+ messageId: '1',
47
+ role: MessageRole.Info,
48
+ content: '以下是新的对话',
49
+ status: MessageStatus.Complete,
50
+ };
51
+ </script>
52
+ ```
53
+
54
+ **渲染效果**
55
+
56
+ ## 多行信息
57
+
58
+ `content` 传入字符串数组时,每个元素渲染为一行居中文案,在中间 body 内纵向排列,两侧虚线夹住整块区域:
59
+
60
+ ```vue
61
+ <template>
62
+ <MessageRender :message="message" />
63
+ </template>
64
+
65
+ <script setup lang="ts">
66
+ import { MessageRender, MessageRole, MessageStatus } from '@blueking/chat-x';
67
+
68
+ // 运行时 content 兼容 string[](TS 类型声明多为 string)
69
+ const message = {
70
+ id: '1',
71
+ messageId: '1',
72
+ role: MessageRole.Info,
73
+ content: ['会话已重置', '以下是新的对话'],
74
+ status: MessageStatus.Complete,
75
+ };
76
+ </script>
77
+ ```
78
+
79
+ **渲染效果**
80
+
81
+ ## 典型使用场景
82
+
83
+ **会话分隔**
84
+
85
+ **时间节点**
86
+
87
+ **上下文清除**
88
+
89
+ ## 在 MessageContainer 中使用
90
+
91
+ `InfoMessage` 通常不需要单独引入,`MessageContainer`(或 `MessageRender`)会对 `role: 'info'` 的消息自动渲染:
92
+
93
+ ```vue
94
+ <template>
95
+ <MessageContainer :messages="messages" />
96
+ </template>
97
+
98
+ <script setup lang="ts">
99
+ import { MessageContainer, MessageRole, MessageStatus } from '@blueking/chat-x';
100
+
101
+ const messages = [
102
+ {
103
+ id: '1',
104
+ messageId: '1',
105
+ role: MessageRole.User,
106
+ content: '请帮我分析一下这份报告。',
107
+ status: MessageStatus.Complete,
108
+ },
109
+ // info 消息:role 为 'info',content 为字符串
110
+ {
111
+ id: '2',
112
+ messageId: '2',
113
+ role: MessageRole.Info, // 'info'
114
+ content: '上下文已达上限,已自动清除历史对话',
115
+ status: MessageStatus.Complete,
116
+ },
117
+ {
118
+ id: '3',
119
+ messageId: '3',
120
+ role: MessageRole.Assistant,
121
+ content: '好的,我来帮你分析这份报告...',
122
+ status: MessageStatus.Complete,
123
+ },
124
+ ];
125
+ </script>
126
+ ```
127
+
128
+ ## API
129
+
130
+ ### Props
131
+
132
+ 组件 Props 继承自 `Partial<InfoMessage>`,所有字段均可选:
133
+
134
+ | 属性名 | 类型 | 说明 |
135
+ | --------- | -------------------- | ------------------------------------------------------------------ |
136
+ | content | `string \| string[]` | 信息内容。字符串渲染单行;数组在中间区域纵向多行展示,两侧虚线夹住整块 |
137
+ | id | `number \| string` | 消息 ID(接收但不使用,由 MessageContainer 管理) |
138
+ | messageId | `number \| string` | 消息唯一标识(接收但不使用) |
139
+ | status | `MessageStatus` | 消息状态(接收但不使用,组件无状态相关渲染逻辑) |
140
+ | role | `MessageRole.Info` | 消息角色,固定为 `'info'` |
141
+
142
+ > **说明**:`content` 的 TypeScript 类型定义为 `string`(与 `BaseMessage` 泛型一致),但组件模板内部通过 `Array.isArray(content) ? content : [content]` 实际兼容字符串数组。
143
+
144
+ ## 安全性
@@ -0,0 +1,49 @@
1
+ # InputAttachment 输入附件区
2
+
3
+ > 能力域:输入交互 | 未从包入口导出:内部组件,请通过上层组件使用 | since 1.0.0
4
+
5
+ ChatInput 底部附件区布局,承载快捷按钮、文件与发送图标。 源码位置:src/components/chat-input/input-attachment/input-attachment.vue。
6
+
7
+ ---
8
+
9
+ # InputAttachment 输入附件区
10
+
11
+ > **能力域**:输入交互
12
+
13
+ ## 源码事实
14
+
15
+ - **源码位置**:`src/components/chat-input/input-attachment/input-attachment.vue`
16
+ - **能力说明**:ChatInput 底部附件区布局,承载快捷按钮、文件与发送图标。
17
+ - **交互说明**:
18
+ - `sendMessage` 点击绑定在 `.send-message-icon` 容器上(覆盖图标与按钮空白区域),而非仅绑定在 `SendMessageIcon` 上。
19
+ - `Streaming` / `Pending` / `Fetching` 时展示 `LoadingMessageIcon`,点击发出 `stopSending`。
20
+ - `Disabled`、`sendDisabledTip`、`Pending`、`Streaming` 状态下点击发送容器不会发出 `sendMessage`。
21
+
22
+ ## API 摘要
23
+
24
+ ### Props
25
+
26
+ - `{ messageState?: MessageStatus; sendDisabledTip?: string; tippyOptions?: AITippyProps; }`
27
+
28
+ ### Emits
29
+
30
+ - `{ (e: 'sendMessage'): void; (e: 'stopSending'): void; }`
31
+
32
+ ### Slots
33
+
34
+ - `default`
35
+ - `before-send`(发送按钮左侧区域,ChatInput 默认在此渲染 ModelSelector)
36
+ - `send-icon`
37
+
38
+ ### Expose
39
+
40
+ - 无。
41
+
42
+ ## 组件依赖
43
+
44
+ - 无组件依赖或仅依赖基础库。
45
+
46
+ ## 使用建议
47
+
48
+ - 优先通过上层组合组件使用;直接使用前请确认 props 数据结构来自对应类型定义。
49
+ - 自定义 `send-icon` 插槽时需自行处理发送/停止点击逻辑。
@@ -0,0 +1,42 @@
1
+ # InputInfoAlert 输入提示条
2
+
3
+ > 能力域:输入交互 | 未从包入口导出:内部组件,请通过上层组件使用 | since 1.0.0
4
+
5
+ ChatInput 上方的信息提示条。 源码位置:src/components/chat-input/input-info-alert.vue。
6
+
7
+ ---
8
+
9
+ # InputInfoAlert 输入提示条
10
+
11
+ > **能力域**:输入交互
12
+
13
+ ## 源码事实
14
+
15
+ - **源码位置**:`src/components/chat-input/input-info-alert.vue`
16
+ - **能力说明**:ChatInput 上方的信息提示条。
17
+
18
+ ## API 摘要
19
+
20
+ ### Props
21
+
22
+ - `{ content: string; }`
23
+
24
+ ### Emits
25
+
26
+ - 无。
27
+
28
+ ### Slots
29
+
30
+ - 无。
31
+
32
+ ### Expose
33
+
34
+ - 无。
35
+
36
+ ## 组件依赖
37
+
38
+ - 无组件依赖或仅依赖基础库。
39
+
40
+ ## 使用建议
41
+
42
+ - 优先通过上层组合组件使用;直接使用前请确认 props 数据结构来自对应类型定义。
@@ -0,0 +1,162 @@
1
+ # InputMenuPanel 输入框菜单
2
+
3
+ > 能力域:输入交互 | 未从包入口导出:内部组件,请通过上层组件使用 | since 0.0.51
4
+
5
+ InputMenuPanel 渲染输入框菜单:分组标题 + InputMenuOption 条目 + 「更多 +N」折叠开关, 内置键盘上下导航与 Esc 关闭;分组数据由 useInputMenu 纯数据逻辑算出(按触发方式筛类型 → 关键字过滤 → 分组 → 折叠 → 扁平化)。 源码位置:src/components/chat-input/input-menu/(input-menu-panel.vue、input-menu-option.vue、use-input-menu.ts、constants.ts)。
6
+
7
+ **关联**:chat-input(上层持有触发态与数据源并渲染本面板)、ai-slash-input(触发方式与过滤关键字由编辑器 menuChange 抛出)、add-menu-btn(+ 号唤起 plus 触发的聚合菜单)、resource-icon(条目左侧图标由 ResourceIcon 渲染)
8
+
9
+ ---
10
+
11
+ # InputMenuPanel 输入框菜单
12
+
13
+ > **能力域**:输入交互
14
+
15
+ ## 源码事实
16
+
17
+ - **面板**:`src/components/chat-input/input-menu/input-menu-panel.vue`
18
+ - **条目**:`src/components/chat-input/input-menu/input-menu-option.vue`
19
+ - **数据逻辑**:`src/components/chat-input/input-menu/use-input-menu.ts`
20
+ - **分组定义**:`src/components/chat-input/input-menu/constants.ts`
21
+ - **能力说明**:`@` `/` `\` 与左下角 + 号共用同一个面板与同一份 `menuSources`,差异只体现在「展示哪些分组」。
22
+
23
+ ## 布局与交互
24
+
25
+ - 面板由 [ChatInput](/components/input/chat-input) 绝对定位在输入框**正上方 8px**、与输入框等宽,**不跟随光标**;最大高度 400px,超出滚动。
26
+ - 键盘导航由 [useMenuKeydown](/composables/use-menu-keydown) 提供:`↑` / `↓` 移动高亮,`Enter` 选中,高亮项滚动进可视区;结果集变化后高亮回到首项。
27
+ - `Esc` 在**捕获阶段**监听并 emit `close`,避免被编辑器先行消费。
28
+ - 面板滚动时关闭条目描述气泡,防止气泡与列表错位。
29
+ - 条目 `disabled` 时不可选中,也不进入键盘导航序列。
30
+ - 条目名称过长时用 `v-overflow-tips` 展示完整名称;`description` 非空时 hover 弹出「类型:名称 + 描述」气泡(与 [MentionTag](/components/rendering/mention-tag) 同一套气泡)。
31
+
32
+ ## 分组与触发方式
33
+
34
+ | 触发方式 | 分组顺序 |
35
+ | -------- | --------------------------------------------------------- |
36
+ | `/` | Skill、MCP、工具 |
37
+ | `@` | 知识库、会话产物 |
38
+ | `\` | Prompt |
39
+ | `plus` | 添加、Skill、MCP、工具、知识库、会话产物、Prompt |
40
+
41
+ 分组静态定义(`MENU_GROUP_DEFS`):
42
+
43
+ | `key` | 标题 | 覆盖 `type` |
44
+ | --------------- | -------- | ---------------------- |
45
+ | `add` | 添加 | `file` |
46
+ | `skill` | Skill | `skill` |
47
+ | `mcp` | MCP | `mcp` |
48
+ | `tool` | 工具 | `tool` |
49
+ | `knowledgebase` | 知识库 | `knowledgebase`、`doc` |
50
+ | `artifact` | 会话产物 | `artifact` |
51
+ | `prompt` | Prompt | `prompt` |
52
+
53
+ - 组内无匹配条目时,`useInputMenu` **不产出该分组**(初始化与搜索过滤后均如此);全部组都为空时 `groups` 为空数组,`ChatInput` 因此不弹出面板。
54
+ - 面板组件本身若被传入 `items` 为空的分组,仍会渲染标题并展示「暂无数据」。`ChatInput` 默认路径不会走到这一支。
55
+ - `DIVIDED_GROUP_KEYS` 决定哪些分组下方画分隔线,目前为 `['add']`。
56
+ - `getMenuTypeLabel(type)` 由分组定义反查生成,菜单分组标题与标签气泡标题共用一份映射(`file` 映射到「添加」)。
57
+
58
+ ## 渲染示例
59
+
60
+ ## useInputMenu
61
+
62
+ 面板只负责渲染,分组结果由 `useInputMenu` 计算,可脱离 UI 单独单测。流程为:**按触发方式筛类型 → 按关键字过滤 → 分组 → 应用折叠阈值 → 扁平化供键盘导航**。
63
+
64
+ ::: info 内部模块
65
+ 面板、条目与 `useInputMenu` 都不在包入口导出,仅供 [ChatInput](/components/input/chat-input) 内部使用;`IInputMenuItem`、`MenuTrigger` 等类型从包入口导出。
66
+ :::
67
+
68
+ ```typescript
69
+ import { computed, shallowRef } from 'vue';
70
+
71
+ const trigger = shallowRef<MenuTrigger | null>(null);
72
+ const keyword = shallowRef('');
73
+
74
+ const { groups, flatItems, hasContent, toggleGroup } = useInputMenu({
75
+ sources: computed(() => availableSources.value),
76
+ keyword,
77
+ trigger,
78
+ groupItemLimit: computed(() => props.menuGroupItemLimit),
79
+ });
80
+ ```
81
+
82
+ ### 参数
83
+
84
+ | 参数 | 类型 | 说明 |
85
+ | ---------------- | --------------------------------------------- | ---------------------------------------- |
86
+ | `sources` | `Ref<IInputMenuItem[]>` | 全部可选项 |
87
+ | `keyword` | `Ref<string>` | 过滤关键字(触发符之后用户输入的文本) |
88
+ | `trigger` | `Ref<MenuTrigger \| null>` | 当前触发方式,`null` 表示菜单未激活 |
89
+ | `groupItemLimit` | `Ref<number>` | 每个分组默认展示条数上限(内部下限为 1) |
90
+
91
+ ### 返回值
92
+
93
+ | 字段 | 类型 | 说明 |
94
+ | ------------- | ------------------------------- | ------------------------------------------------ |
95
+ | `groups` | `ComputedRef<IInputMenuGroup[]>` | 渲染用分组(已应用过滤与折叠) |
96
+ | `flatItems` | `ComputedRef<IInputMenuItem[]>` | 当前可见且可选中的条目,顺序与面板一致 |
97
+ | `hasContent` | `ComputedRef<boolean>` | 面板是否有内容,供上层决定显隐 |
98
+ | `toggleGroup` | `(key: MenuGroupKey) => void` | 切换某个分组的展开 / 折叠 |
99
+
100
+ > 关键字或触发方式变化时,内部会清空手动展开状态——结果集已完全不同,沿用旧状态会造成误导。
101
+
102
+ ## API
103
+
104
+ ### InputMenuPanel Props
105
+
106
+ | 属性名 | 类型 | 必填 | 说明 |
107
+ | --------- | -------------------- | ---- | -------------------------------------- |
108
+ | groups | `IInputMenuGroup[]` | ✅ | 分组数据 |
109
+ | flatItems | `IInputMenuItem[]` | ✅ | 可选中条目的扁平序列,供键盘导航 |
110
+
111
+ ### InputMenuPanel Emits
112
+
113
+ | 事件名 | 参数 | 触发时机 |
114
+ | ----------- | -------------------------- | ---------------------------- |
115
+ | select | `(item: IInputMenuItem)` | 点击条目或按 Enter 选中 |
116
+ | toggleGroup | `(key: string)` | 点击「更多 +N / 收起」 |
117
+ | close | `()` | 按下 Esc |
118
+
119
+ ### InputMenuOption Props / Emits
120
+
121
+ | 名称 | 类型 | 说明 |
122
+ | -------- | ------------------------ | -------------------------- |
123
+ | `item` | `IInputMenuItem` | 条目数据 |
124
+ | `active` | `boolean` | 键盘导航选中态 |
125
+ | `select` | `(item: IInputMenuItem)` | 条目未禁用时点击触发 |
126
+
127
+ ### 类型定义
128
+
129
+ ```typescript
130
+ /** 面板渲染用的分组(已应用关键字过滤与折叠阈值) */
131
+ interface IInputMenuGroup {
132
+ key: string;
133
+ /** 分组标题的中文文案 key,渲染时经 t() 转换 */
134
+ name: string;
135
+ /** 当前可见条目 */
136
+ items: IInputMenuItem[];
137
+ /** 被折叠隐藏的条数,为 0 表示无需折叠 */
138
+ restCount: number;
139
+ /** 是否已展开全部条目 */
140
+ expanded: boolean;
141
+ /** 分组下方是否需要分隔线 */
142
+ divided: boolean;
143
+ }
144
+
145
+ type MenuGroupKey = 'add' | 'skill' | 'mcp' | 'tool' | 'knowledgebase' | 'artifact' | 'prompt';
146
+
147
+ /** 字符触发符,plus 由按钮唤起不在其中 */
148
+ const CHAR_TRIGGERS = ['@', '/', '\\'] as const;
149
+
150
+ /** 分组默认最多展示的条数 */
151
+ const DEFAULT_GROUP_ITEM_LIMIT = 4;
152
+ ```
153
+
154
+ `IInputMenuItem` 与 `MenuTrigger` 见 [ChatInput 类型定义](/components/input/chat-input#类型定义)。
155
+
156
+ ## 关联组件
157
+
158
+ - [ChatInput](/components/input/chat-input) — 菜单数据源、触发态与选中后的动作分发
159
+ - [AiSlashInput](/components/input/ai-slash-input) — 触发方式与关键字的来源
160
+ - [AddMenuBtn](/components/input/add-menu-btn) — `plus` 触发入口
161
+ - [ResourceIcon](/components/helper/resource-icon) — 条目图标
162
+ - [useMenuKeydown](/composables/use-menu-keydown) — 键盘导航
@@ -0,0 +1,212 @@
1
+ # InterruptMessage 中断消息
2
+
3
+ > 能力域:Agent 能力 | 导入:`import { InterruptMessageRender } from '@blueking/chat-x'` | since 1.0.0
4
+
5
+ 渲染 human-in-the-loop 中断消息,分发工具审批,并按 reason 回显 resume 结果(审批单 / 用户回答)。 源码位置:src/components/chat-message/interrupt-message/interrupt-message.vue。
6
+
7
+ **关联**:message-render(role 为 interrupt 时渲染本组件)、user-question-card(UserQuestion 待回答面板与回答回显)、tool-approval-card(AIDevToolApproval 专用子卡片)、message-container(透传 onInterruptResume;末条为 interrupt 时不触发组 hover)
8
+
9
+ ---
10
+
11
+ # InterruptMessage 中断消息
12
+ ## 源码事实
13
+
14
+ - **源码位置**:`src/components/chat-message/interrupt-message/interrupt-message.vue`
15
+ - **能力域**:Agent 能力
16
+ - **能力说明**:渲染 human-in-the-loop 中断消息,分发工具审批,并按 `result.reason` 回显 resume 结果。
17
+
18
+ > **能力域**:Agent 能力
19
+
20
+ human-in-the-loop 中断消息渲染器(导出名 **`InterruptMessageRender`**)。对应 `MessageRole.Interrupt`,解析 `content.outcome` 渲染审批卡片或兜底提示。
21
+
22
+ > 通常由 [MessageRender](/components/message/message-render) 自动调用,无需业务侧直接引入。
23
+ > `UserQuestion` 的待回答卡片由 [ChatContainer](/components/setup/chat-container) 放在输入区上方,本组件在 `outcome.success` 时按 `result.reason` 回显审批单或用户回答。
24
+
25
+ ## 渲染架构
26
+
27
+ ```
28
+ InterruptMessageRender
29
+ ├── content.message(可选)→ 顶部说明文案
30
+ └── content.outcome.type === 'interrupt'
31
+ └── v-for interrupts
32
+ ├── reason === aidev:tool_approval → ToolApprovalCard(透传 onInterruptResume,用于取消审批)
33
+ ├── reason === aidev:user_question → 不在消息内渲染,交由 ChatContainer 输入区挂载
34
+ └── 未注册 reason → 兜底块(item.message 或「暂不支持的中断消息」)
35
+
36
+ content.outcome.type === 'success'
37
+ └── resultRenderers[result.reason]
38
+ ├── aidev:tool_approval → ToolApprovalCard(可交互回显,透传 onInterruptResume)
39
+ └── aidev:user_question → UserQuestionAnsweredCard(支持 #answeredQuestion 透传 #answer)
40
+ ```
41
+
42
+ | `InterruptReason` | 子组件 |
43
+ | ------------------------------ | ------------------- |
44
+ | `aidev:tool_approval`(待审批) | `ToolApprovalCard` |
45
+ | `aidev:tool_approval`(已处理) | `ToolApprovalCard`(可交互回显,仍可取消 / 刷新) |
46
+ | `aidev:user_question`(待回答) | 输入区 `UserQuestionCard`,本组件不渲染 |
47
+ | `aidev:user_question`(已回答) | `UserQuestionAnsweredCard` |
48
+ | 其他 / 未注册 | 兜底文案区域 |
49
+
50
+ ## 基础用法(待审批)
51
+
52
+ ```vue
53
+ <template>
54
+ <InterruptMessageRender
55
+ :id="message.id"
56
+ :message-id="message.messageId"
57
+ :role="message.role"
58
+ :status="message.status"
59
+ :content="message.content"
60
+ :on-interrupt-resume="handleInterruptResume"
61
+ />
62
+ </template>
63
+
64
+ <script setup lang="ts">
65
+ import {
66
+ InterruptMessageRender,
67
+ APPROVAL_STATUS,
68
+ InterruptReason,
69
+ MessageRole,
70
+ MessageStatus,
71
+ type InterruptMessage,
72
+ } from '@blueking/chat-x';
73
+
74
+ const message: InterruptMessage = {
75
+ id: 'msg_interrupt',
76
+ messageId: 'msg_interrupt',
77
+ role: MessageRole.Interrupt,
78
+ status: MessageStatus.Pending,
79
+ content: {
80
+ message: '算法方案评审单需要您关注',
81
+ outcome: {
82
+ type: 'interrupt',
83
+ interrupts: [
84
+ {
85
+ id: 'interrupt_1',
86
+ reason: InterruptReason.AIDevToolApproval,
87
+ toolCallId: 'tool_call_1',
88
+ metadata: {
89
+ ticket: {
90
+ approvers: ['张三'],
91
+ sn: 'REV-2026-04-24-001',
92
+ status: APPROVAL_STATUS.PENDING,
93
+ submit_time: '2026-04-24 14:30:15',
94
+ title: '算法方案评审单',
95
+ url: 'https://example.com/tickets/001',
96
+ },
97
+ },
98
+ },
99
+ ],
100
+ },
101
+ },
102
+ };
103
+
104
+ const handleInterruptResume = async (payload, interrupt) => {
105
+ // ToolApprovalCard 点击「取消审批」时,payload 为 ToolApprovalResume
106
+ console.log(payload, interrupt?.id);
107
+ };
108
+ </script>
109
+ ```
110
+
111
+ **渲染效果**
112
+
113
+ ## UserQuestion 待回答
114
+
115
+ 待回答的 `UserQuestion` 不在消息内渲染;`ChatContainer` 会找到最近一条待回答中断,并在 `ChatInput` 上方挂载 [UserQuestionCard](/components/agent/user-question-card)。
116
+
117
+ ```vue
118
+ <InterruptMessageRender
119
+ :content="userQuestionMessage.content"
120
+ role="interrupt"
121
+ />
122
+ ```
123
+
124
+ **渲染效果**
125
+
126
+ ## AIDevToolApproval 已处理回显(outcome.success)
127
+
128
+ `outcome.type === 'success'` 且 `result.reason === InterruptReason.AIDevToolApproval` 时,会话内以可交互 `ToolApprovalCard` 回显审批单(`readonly: false`):待审批态仍可取消 / 刷新,终态展示置灰的取消按钮。`resultRenderers` 须与 interrupt 态一样透传 `onInterruptResume`,否则取消 / 刷新无回调。`result.payload.metadata` 需透传中断时的 `metadata`(含 `ticket`):
129
+
130
+ ```vue
131
+ <InterruptMessageRender
132
+ :content="resumedMessage.content"
133
+ role="interrupt"
134
+ />
135
+ ```
136
+
137
+ **渲染效果**
138
+
139
+ ## UserQuestion 已回答回显(outcome.success)
140
+
141
+ `outcome.type === 'success'` 且 `result.reason === InterruptReason.UserQuestion` 时,会话内回显用户回答。可通过 `#answeredQuestion` slot 自定义单题回显:
142
+
143
+ ```vue
144
+ <InterruptMessageRender
145
+ :content="userQuestionAnsweredMessage.content"
146
+ role="interrupt"
147
+ >
148
+ <template #answeredQuestion="{ item, index, status }">
149
+ <MyCustomAnswerView :data="item" :index="index" :status="status" />
150
+ </template>
151
+ </InterruptMessageRender>
152
+ ```
153
+
154
+ **渲染效果**
155
+
156
+ ## 不支持的中断类型(兜底)
157
+
158
+ ```vue
159
+ <InterruptMessageRender :content="unsupportedContent" role="interrupt" />
160
+ ```
161
+
162
+ **渲染效果**
163
+
164
+ ## 在 MessageContainer 中使用
165
+
166
+ 配置 `onInterruptResume`,由容器经 `MessageRender` 透传到本组件:
167
+
168
+ ```vue
169
+ <MessageContainer
170
+ :messages="messages"
171
+ :on-interrupt-resume="handleInterruptResume"
172
+ />
173
+ ```
174
+
175
+ 当消息组**最后一条**为 `role: 'interrupt'` 时,容器**不会**在鼠标移入时设置 `isHover`,避免误显 AI 工具栏遮挡审批卡片。
176
+
177
+ ## API
178
+
179
+ ### Props
180
+
181
+ 继承 `Partial<InterruptMessage>` 的字段(`id`、`messageId`、`role`、`content`、`status` 等),并额外支持:
182
+
183
+ | 属性名 | 类型 | 默认值 | 说明 |
184
+ | ----------------- | ------------------ | ------ | ----------------------------------------- |
185
+ | content | `InterruptMessage['content']` | — | 含 `message`、`outcome`、`result` 等 |
186
+ | onInterruptResume | `OnInterruptResume` | — | 用户完成中断操作后的回调(可选) |
187
+
188
+ ### Slots
189
+
190
+ | 插槽名 | 参数 | 说明 |
191
+ | ---------------- | ------------------------------------------------- | -------------------------------------------------------------------- |
192
+ | answeredQuestion | `{ item, index, status }` | 自定义 UserQuestion 已回答内容回显,透传给 `UserQuestionAnsweredCard` 的 `#answer` |
193
+
194
+ slot 参数与 [UserQuestionAnsweredCard](/components/agent/user-question-answered-card) 的 `#answer` 一致。
195
+
196
+ ### Events / Expose
197
+
198
+ 无。
199
+
200
+ ## 类型定义
201
+
202
+ ```typescript
203
+ import type { Interrupt, InterruptMessage, OnInterruptResume } from '@blueking/chat-x';
204
+ ```
205
+
206
+ 详见 [中断类型 Interrupt](../../types/interrupt.md)。
207
+
208
+ ## 关联组件
209
+
210
+ - [ToolApprovalCard](/components/agent/tool-approval-card) — AI Dev 审批单卡片
211
+ - [MessageRender](/components/message/message-render) — 按 `role` 派发
212
+ - [MessageContainer](/components/setup/message-container) — 列表容器与 `onInterruptResume` 透传