@blueking/chat-x 0.0.5 → 0.0.7

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 (85) hide show
  1. package/dist/components/ai-selection/ai-selection.vue.d.ts +2 -2
  2. package/dist/components/index.d.ts +2 -1
  3. package/dist/index.css +1 -1
  4. package/dist/index.js +6 -6
  5. package/dist/index.js.map +1 -1
  6. package/dist/mcp/generated/docs/activity-message.md +428 -0
  7. package/dist/mcp/generated/docs/ai-image.md +227 -0
  8. package/dist/mcp/generated/docs/ai-loading.md +129 -0
  9. package/dist/mcp/generated/docs/ai-selection.md +436 -0
  10. package/dist/mcp/generated/docs/animation-text.md +199 -0
  11. package/dist/mcp/generated/docs/assistant-message.md +424 -0
  12. package/dist/mcp/generated/docs/chat-container.md +402 -0
  13. package/dist/mcp/generated/docs/chat-input.md +625 -0
  14. package/dist/mcp/generated/docs/cite-content.md +138 -0
  15. package/dist/mcp/generated/docs/code-content.md +199 -0
  16. package/dist/mcp/generated/docs/common-error-content.md +70 -0
  17. package/dist/mcp/generated/docs/constants.md +216 -0
  18. package/dist/mcp/generated/docs/content-render.md +238 -0
  19. package/dist/mcp/generated/docs/delete-tool.md +188 -0
  20. package/dist/mcp/generated/docs/desc-panel.md +139 -0
  21. package/dist/mcp/generated/docs/execution-summary.md +126 -0
  22. package/dist/mcp/generated/docs/file-content.md +300 -0
  23. package/dist/mcp/generated/docs/file-upload-btn.md +174 -0
  24. package/dist/mcp/generated/docs/flow-message.md +305 -0
  25. package/dist/mcp/generated/docs/highlight-keyword.md +144 -0
  26. package/dist/mcp/generated/docs/image-content.md +178 -0
  27. package/dist/mcp/generated/docs/image-preview-group.md +181 -0
  28. package/dist/mcp/generated/docs/image-preview.md +224 -0
  29. package/dist/mcp/generated/docs/info-message.md +124 -0
  30. package/dist/mcp/generated/docs/key-value-content.md +124 -0
  31. package/dist/mcp/generated/docs/latex-content.md +196 -0
  32. package/dist/mcp/generated/docs/loading-message.md +171 -0
  33. package/dist/mcp/generated/docs/markdown-content.md +186 -0
  34. package/dist/mcp/generated/docs/markdown-latex.md +208 -0
  35. package/dist/mcp/generated/docs/markdown-mermaid.md +250 -0
  36. package/dist/mcp/generated/docs/mermaid-content.md +185 -0
  37. package/dist/mcp/generated/docs/message-container.md +534 -0
  38. package/dist/mcp/generated/docs/message-render.md +329 -0
  39. package/dist/mcp/generated/docs/message-tools.md +376 -0
  40. package/dist/mcp/generated/docs/messages.md +472 -0
  41. package/dist/mcp/generated/docs/overflow-tips.md +209 -0
  42. package/dist/mcp/generated/docs/reasoning-message.md +233 -0
  43. package/dist/mcp/generated/docs/reference-content.md +132 -0
  44. package/dist/mcp/generated/docs/scroll-btn.md +155 -0
  45. package/dist/mcp/generated/docs/selection-footer.md +75 -0
  46. package/dist/mcp/generated/docs/shortcut-btn.md +202 -0
  47. package/dist/mcp/generated/docs/shortcut-btns.md +264 -0
  48. package/dist/mcp/generated/docs/shortcut-render.md +418 -0
  49. package/dist/mcp/generated/docs/text-content.md +74 -0
  50. package/dist/mcp/generated/docs/theme.md +388 -0
  51. package/dist/mcp/generated/docs/tool-btn.md +254 -0
  52. package/dist/mcp/generated/docs/tool-message.md +217 -0
  53. package/dist/mcp/generated/docs/toolcall-render.md +299 -0
  54. package/dist/mcp/generated/docs/use-animation-text.md +198 -0
  55. package/dist/mcp/generated/docs/use-clipboard.md +206 -0
  56. package/dist/mcp/generated/docs/use-command-selection.md +128 -0
  57. package/dist/mcp/generated/docs/use-container-scroll.md +56 -0
  58. package/dist/mcp/generated/docs/use-custom-tab.md +122 -0
  59. package/dist/mcp/generated/docs/use-global-config.md +154 -0
  60. package/dist/mcp/generated/docs/use-menu-keydown.md +164 -0
  61. package/dist/mcp/generated/docs/use-message-group.md +175 -0
  62. package/dist/mcp/generated/docs/use-observer-visible-list.md +189 -0
  63. package/dist/mcp/generated/docs/use-parent-scrolling.md +46 -0
  64. package/dist/mcp/generated/docs/user-feedback.md +229 -0
  65. package/dist/mcp/generated/docs/user-message.md +347 -0
  66. package/dist/mcp/generated/index.json +1311 -0
  67. package/dist/mcp/index.d.ts +2 -0
  68. package/dist/mcp/index.js +42 -0
  69. package/dist/mcp/index.js.map +1 -0
  70. package/dist/mcp/server.d.ts +2 -0
  71. package/dist/mcp/server.js +43 -0
  72. package/dist/mcp/server.js.map +1 -0
  73. package/dist/mcp/tools/get-component-doc.d.ts +19 -0
  74. package/dist/mcp/tools/get-component-doc.js +60 -0
  75. package/dist/mcp/tools/get-component-doc.js.map +1 -0
  76. package/dist/mcp/tools/list-components.d.ts +35 -0
  77. package/dist/mcp/tools/list-components.js +147 -0
  78. package/dist/mcp/tools/list-components.js.map +1 -0
  79. package/dist/mcp/tools/search-docs.d.ts +14 -0
  80. package/dist/mcp/tools/search-docs.js +82 -0
  81. package/dist/mcp/tools/search-docs.js.map +1 -0
  82. package/dist/mcp/utils/doc-loader.d.ts +35 -0
  83. package/dist/mcp/utils/doc-loader.js +64 -0
  84. package/dist/mcp/utils/doc-loader.js.map +1 -0
  85. package/package.json +5 -7
@@ -0,0 +1,329 @@
1
+ <!-- AI SUMMARY -->
2
+ ## 快速了解
3
+
4
+ MessageRender 是单条消息的渲染入口,根据 message.role 派发到 UserMessage、AssistantMessage、ReasoningMessage、 ToolMessage、ActivityMessage、InfoMessage、LoadingMessage 等。Assistant 默认通过插槽用 ContentRender 渲染正文,可被默认插槽覆盖。 无独立状态,通常由 MessageContainer 内部调用而非业务直接挂载。
5
+
6
+ ### 关联组件
7
+ - **message-container** — 在 MessageContainer 中按组调用以渲染每条消息
8
+ - **assistant-message** — role 为 assistant 时渲染 AI 回复与工具调用
9
+ - **user-message** — role 为 user 时渲染用户消息
10
+
11
+ ---
12
+ <!-- FULL DOC -->
13
+
14
+ # MessageRender 消息渲染器
15
+
16
+ > **层级**:分子组件 · **功能域**:消息展示
17
+
18
+ 统一的消息渲染入口,通过 `message.role` 字段自动派发到对应的子组件。整个渲染过程由一个 `computed` 属性完成,无额外状态。
19
+
20
+ ## 渲染架构
21
+
22
+ ```
23
+ MessageRender
24
+
25
+ ├── props.message.role
26
+ │ │
27
+ │ ├── 'user' → UserMessage(转发 message + onAction / onInputConfirm /
28
+ │ │ onShortcutConfirm / messageToolsStatus / tippyOptions)
29
+ │ │
30
+ │ ├── 'assistant' → AssistantMessage(转发 message + default slot)
31
+ │ │ └── default slot 默认回退到 ContentRender
32
+ │ │
33
+ │ ├── 'info' → InfoMessage(转发 message)
34
+ │ ├── 'reasoning' → ReasoningMessage(转发 message)
35
+ │ ├── 'tool' → ToolMessage(转发 message)
36
+ │ ├── 'activity' → ActivityMessage(转发 message)
37
+ │ ├── 'loading' → LoadingMessage(转发 message)
38
+ │ │
39
+ │ └── 其他 / 未知 → null(不渲染任何内容)
40
+ ```
41
+
42
+ > **重要**:`onAction`、`onInputConfirm`、`onShortcutConfirm`、`messageToolsStatus`、`tippyOptions` 这五个 prop **只转发给 `UserMessage`**。`AssistantMessage` 的工具栏由 `MessageContainer` 的 `MessageTools` 组件管理,`MessageRender` 不负责传递。
43
+
44
+ ## 基础用法
45
+
46
+ ```vue
47
+ <template>
48
+ <MessageRender
49
+ :message="message"
50
+ :on-action="handleAction"
51
+ />
52
+ </template>
53
+
54
+ <script setup lang="ts">
55
+ import { MessageRender, MessageRole, MessageStatus, type Message, type IToolBtn } from '@blueking/chat-x';
56
+
57
+ const message = {
58
+ id: '1',
59
+ messageId: '1',
60
+ role: MessageRole.Assistant,
61
+ content: '你好!我是 AI 助手,有什么可以帮你的吗?',
62
+ status: MessageStatus.Complete,
63
+ };
64
+
65
+ const handleAction = async (tool: IToolBtn) => {
66
+ console.log('消息操作:', tool.id);
67
+ };
68
+ </script>
69
+ ```
70
+
71
+ **渲染效果**
72
+
73
+ ## 各角色消息
74
+
75
+ ### 用户消息(user)
76
+
77
+ `onAction`、`onInputConfirm`、`onShortcutConfirm`、`messageToolsStatus` 在此角色下生效。
78
+
79
+ ```vue
80
+ <script setup lang="ts">
81
+ import { MessageRole, MessageStatus, type Message, type IToolBtn, type TagSchema } from '@blueking/chat-x';
82
+
83
+ const message = {
84
+ id: '1',
85
+ messageId: '1',
86
+ role: MessageRole.User,
87
+ content: '你好,请帮我解释一下什么是 Vue 3 的组合式 API',
88
+ status: MessageStatus.Complete,
89
+ };
90
+
91
+ const handleAction = async (tool: IToolBtn) => {
92
+ console.log('用户消息操作:', tool.id); // delete / copy 等
93
+ };
94
+ const handleInputConfirm = async (content: Message['content'], docSchema: TagSchema) => {
95
+ console.log('编辑确认:', content);
96
+ };
97
+ const handleShortcutConfirm = async (formModel: Record<string, unknown>) => {
98
+ console.log('快捷指令提交:', formModel);
99
+ };
100
+ </script>
101
+ ```
102
+
103
+ **渲染效果**
104
+
105
+ ### AI 助手消息(assistant)
106
+
107
+ `message` 中的全部字段(含 `toolCalls`)直接透传给 `AssistantMessage`。
108
+
109
+ ```vue
110
+ <script setup lang="ts">
111
+ import { MessageRole, MessageStatus } from '@blueking/chat-x';
112
+
113
+ const message = {
114
+ id: '2',
115
+ messageId: '2',
116
+ role: MessageRole.Assistant,
117
+ content: `## Vue 3 组合式 API\n\n**组合式 API** 是 Vue 3 引入的一种新方式...`,
118
+ status: MessageStatus.Complete,
119
+ };
120
+ </script>
121
+ ```
122
+
123
+ **渲染效果**
124
+
125
+ ### 信息消息(info)
126
+
127
+ `content` 为字符串或字符串数组,渲染居中虚线分隔条。
128
+
129
+ ### 推理消息(reasoning)
130
+
131
+ `content` 为字符串数组,`duration` 为推理耗时(毫秒)。
132
+
133
+ ### 工具调用结果(tool)
134
+
135
+ 在 `MessageContainer` 中通常不独立渲染(被注入到 AssistantMessage),单独使用时如下:
136
+
137
+ ### 活动消息(activity)
138
+
139
+ ### 加载消息(loading)
140
+
141
+ 由 `MessageContainer` 自动注入,无需手动使用。
142
+
143
+ ## 消息状态
144
+
145
+ ### 流式输出(streaming)
146
+
147
+ `status: 'streaming'` 时,`AssistantMessage` 内部展示打字光标,内容可实时追加:
148
+
149
+ ```vue
150
+ <script setup lang="ts">
151
+ import { ref } from 'vue';
152
+ import { MessageRole, MessageStatus, type Message } from '@blueking/chat-x';
153
+
154
+ const message = ref<Message>({
155
+ id: '1',
156
+ messageId: '1',
157
+ role: MessageRole.Assistant,
158
+ content: '',
159
+ status: MessageStatus.Streaming,
160
+ });
161
+
162
+ // 模拟流式输出:逐步追加内容
163
+ const chunks = ['正在', '为你', '生成', '答案...'];
164
+ let i = 0;
165
+ const timer = setInterval(() => {
166
+ if (i < chunks.length) {
167
+ message.value.content += chunks[i++];
168
+ } else {
169
+ message.value.status = MessageStatus.Complete;
170
+ clearInterval(timer);
171
+ }
172
+ }, 300);
173
+ </script>
174
+ ```
175
+
176
+ **渲染效果**
177
+
178
+ ### 错误状态(error)
179
+
180
+ ```vue
181
+ <script setup lang="ts">
182
+ import { MessageRole, MessageStatus } from '@blueking/chat-x';
183
+
184
+ const message = {
185
+ id: '1',
186
+ messageId: '1',
187
+ role: MessageRole.Assistant,
188
+ content: '抱歉,生成回答时发生了错误,请重试。',
189
+ status: MessageStatus.Error,
190
+ };
191
+ </script>
192
+ ```
193
+
194
+ **渲染效果**
195
+
196
+ ## 自定义内容渲染(default slot)
197
+
198
+ `default` slot **仅对 `role: 'assistant'` 生效**,用于替换默认的 `ContentRender`。未提供 slot 时回退渲染 `<ContentRender :content="message.content" :status="message.status" />`。
199
+
200
+ ```vue
201
+ <template>
202
+ <MessageRender
203
+ :message="message"
204
+ :on-action="handleAction"
205
+ >
206
+ <template #default="{ content, status }">
207
+ <!-- 完全接管内容区域渲染 -->
208
+ <MyMarkdownRenderer
209
+ :content="content"
210
+ :streaming="status === 'streaming'"
211
+ />
212
+ </template>
213
+ </MessageRender>
214
+ </template>
215
+ ```
216
+
217
+ slot 参数类型与 `AssistantMessage` 的 slot 保持一致(`Partial<AssistantMessage>`),主要使用:
218
+
219
+ | 参数 | 类型 | 说明 |
220
+ | --------- | --------------- | ------------ |
221
+ | `content` | `string` | 消息内容 |
222
+ | `status` | `MessageStatus` | 当前消息状态 |
223
+
224
+ ## 与 MessageContainer 配合
225
+
226
+ 在 `MessageContainer` 的 `default` slot 中使用,可替换默认的 `MessageRender` 渲染逻辑:
227
+
228
+ ```vue
229
+ <template>
230
+ <MessageContainer
231
+ :messages="messages"
232
+ :message-status="messageStatus"
233
+ :on-agent-action="handleAgentAction"
234
+ :on-user-action="handleUserAction"
235
+ @stop-streaming="handleStopStreaming"
236
+ >
237
+ <template #default="{ message, messageToolsStatus }">
238
+ <!-- 自定义 MessageRender 的行为 -->
239
+ <MessageRender
240
+ :message="message"
241
+ :message-tools-status="messageToolsStatus"
242
+ :on-action="handleUserAction"
243
+ :on-input-confirm="handleInputConfirm"
244
+ >
245
+ <template
246
+ v-if="message.role === 'assistant'"
247
+ #default="{ content, status }"
248
+ >
249
+ <MyCustomContent
250
+ :content="content"
251
+ :status="status"
252
+ />
253
+ </template>
254
+ </MessageRender>
255
+ </template>
256
+ </MessageContainer>
257
+ </template>
258
+ ```
259
+
260
+ ## API
261
+
262
+ ### Props
263
+
264
+ | 属性名 | 类型 | 默认值 | 说明 |
265
+ | ------------------ | -------------------------------------------------------------------------- | ------ | ------------------------------------------------- |
266
+ | message | `Partial<Message>` | — | **必填**,消息对象,`role` 字段决定渲染哪个子组件 |
267
+ | messageToolsStatus | `MessageToolsStatus` | — | 工具按钮状态;**仅转发给 `UserMessage`** |
268
+ | onAction | `(tool: IToolBtn) => Promise<string[] \| void>` | — | 工具操作回调;**仅转发给 `UserMessage`** |
269
+ | onInputConfirm | `(content: UserMessage['content'], docSchema: TagSchema) => Promise<void>` | — | 用户编辑确认回调;**仅转发给 `UserMessage`** |
270
+ | onShortcutConfirm | `(formModel: Record<string, unknown>) => Promise<void>` | — | 用户快捷指令提交回调;**仅转发给 `UserMessage`** |
271
+ | tippyOptions | `Partial<Omit<TippyOptions, 'getReferenceClientRect' \| 'triggerTarget'>>` | — | 自定义 Tippy 配置;**仅转发给 `UserMessage`** |
272
+
273
+ ### Slots
274
+
275
+ | 插槽名 | 参数 | 说明 |
276
+ | ------- | -------------------------------------------- | ----------------------------------------------------------------------- |
277
+ | default | `{ content: string, status: MessageStatus }` | 替换 AssistantMessage 的内容区域渲染;**仅对 `role: 'assistant'` 生效** |
278
+
279
+ ## 消息类型映射
280
+
281
+ | `MessageRole` | 渲染组件 | prop 路由 | 说明 |
282
+ | ------------- | ------------------ | ------------------------------------------------------------------------------------------------------- | --------------------- |
283
+ | `user` | `UserMessage` | `message` + `onAction` + `onInputConfirm` + `onShortcutConfirm` + `messageToolsStatus` + `tippyOptions` | 用户发送的消息 |
284
+ | `assistant` | `AssistantMessage` | `message` + `default slot` | AI 助手回复消息 |
285
+ | `info` | `InfoMessage` | `message` | 系统信息 / 会话分隔符 |
286
+ | `reasoning` | `ReasoningMessage` | `message` | AI 思考过程(可折叠) |
287
+ | `tool` | `ToolMessage` | `message` | 工具调用返回结果 |
288
+ | `activity` | `ActivityMessage` | `message` | 知识检索 / 引用文档 |
289
+ | `loading` | `LoadingMessage` | `message`(字段被忽略,组件无 Props) | 等待响应的加载占位 |
290
+ | 其他 / 未知 | — | — | 返回 `null`,不渲染 |
291
+
292
+ ## 类型定义
293
+
294
+ ```typescript
295
+ import { MessageRole, MessageStatus, MessageToolsStatus, type Message, type IToolBtn } from '@blueking/chat-x';
296
+
297
+ // 消息角色
298
+ enum MessageRole {
299
+ User = 'user',
300
+ Assistant = 'assistant',
301
+ Info = 'info',
302
+ Reasoning = 'reasoning',
303
+ Tool = 'tool',
304
+ Activity = 'activity',
305
+ Loading = 'loading',
306
+ }
307
+
308
+ // 消息状态
309
+ enum MessageStatus {
310
+ Pending = 'pending',
311
+ Streaming = 'streaming',
312
+ Complete = 'complete',
313
+ Error = 'error',
314
+ Stop = 'stop',
315
+ Disabled = 'disabled',
316
+ }
317
+
318
+ // 工具按钮状态(仅转发给 UserMessage)
319
+ enum MessageToolsStatus {
320
+ Disabled = 'disabled',
321
+ Hidden = 'hidden',
322
+ }
323
+ ```
324
+
325
+ ## 关联组件
326
+
327
+ - [MessageContainer](./message-container.md) — 内部按组调用以渲染每条消息
328
+ - [AssistantMessage](./assistant-message.md) — assistant 角色派发目标
329
+ - [UserMessage](./user-message.md) — user 角色派发目标