@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.
- package/README.md +15 -8
- package/dist/ag-ui/types/contents.d.ts +2 -0
- package/dist/ag-ui/types/messages.d.ts +6 -1
- package/dist/common/constants.d.ts +2 -0
- package/dist/components/ai-buttons/add-menu-btn/add-menu-btn.vue.d.ts +24 -0
- package/dist/components/chat-content/collapsible-content/collapsible-content.vue.d.ts +28 -0
- package/dist/components/chat-content/file-content/upload-file-item.vue.d.ts +5 -2
- package/dist/components/chat-content/file-content/upload-image-item.vue.d.ts +1 -0
- package/dist/components/chat-content/flow-agent-content/use-flow-node-actions.d.ts +1 -1
- package/dist/components/chat-input/ai-slash-input/ai-slash-input.vue.d.ts +21 -10
- package/dist/components/chat-input/ai-slash-input/command.d.ts +6 -3
- package/dist/components/chat-input/ai-slash-input/constants.d.ts +2 -0
- package/dist/components/chat-input/ai-slash-input/use-menu-trigger.d.ts +17 -0
- package/dist/components/chat-input/build-default-placeholder.d.ts +9 -3
- package/dist/components/chat-input/chat-input.vue.d.ts +30 -18
- package/dist/components/chat-input/input-menu/constants.d.ts +60 -0
- package/dist/components/chat-input/input-menu/index.d.ts +4 -0
- package/dist/components/chat-input/input-menu/input-menu-option.vue.d.ts +14 -0
- package/dist/components/chat-input/input-menu/input-menu-panel.vue.d.ts +17 -0
- package/dist/components/chat-input/input-menu/use-input-menu.d.ts +22 -0
- package/dist/components/chat-input/model-selector/types.d.ts +3 -2
- package/dist/components/chat-message/message-container/message-container.vue.d.ts +1 -1
- package/dist/components/chat-message/user-message/user-message.vue.d.ts +1 -1
- package/dist/components/mention/create-mention-tippy.d.ts +27 -0
- package/dist/components/mention/index.d.ts +4 -0
- 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
- 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
- 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
- package/dist/components/resource-icon/index.d.ts +1 -0
- package/dist/components/resource-icon/resource-icon.vue.d.ts +11 -0
- package/dist/composables/index.d.ts +1 -0
- package/dist/composables/use-artifact-preview.d.ts +5 -2
- package/dist/composables/use-common.d.ts +0 -9
- package/dist/composables/use-global-config.d.ts +4 -0
- package/dist/composables/use-input-mention.d.ts +13 -0
- package/dist/composables/use-message-group.d.ts +1011 -72
- package/dist/icons/index.d.ts +1 -0
- package/dist/icons/input.d.ts +21 -0
- package/dist/icons/menu-item.d.ts +22 -0
- package/dist/index.css +1 -1
- package/dist/index.js +4953 -4429
- package/dist/index.js.map +1 -1
- package/dist/lang/lang.d.ts +13 -3
- package/dist/mcp/generated/docs/activity-message.md +3 -3
- package/dist/mcp/generated/docs/add-menu-btn.md +91 -0
- package/dist/mcp/generated/docs/ai-slash-input.md +72 -26
- package/dist/mcp/generated/docs/assistant-message.md +7 -1
- package/dist/mcp/generated/docs/chat-container.md +45 -6
- package/dist/mcp/generated/docs/chat-input.md +327 -483
- package/dist/mcp/generated/docs/collapsible-content.md +78 -0
- package/dist/mcp/generated/docs/constants.md +36 -3
- package/dist/mcp/generated/docs/execution-summary.md +1 -23
- package/dist/mcp/generated/docs/file-artifact-panel.md +24 -5
- package/dist/mcp/generated/docs/file-content.md +4 -0
- package/dist/mcp/generated/docs/file-upload-btn.md +15 -12
- package/dist/mcp/generated/docs/flow-agent-content.md +10 -12
- package/dist/mcp/generated/docs/input-menu-panel.md +166 -0
- package/dist/mcp/generated/docs/mention-tag.md +83 -0
- package/dist/mcp/generated/docs/mention-text.md +86 -0
- package/dist/mcp/generated/docs/message-container.md +1 -1
- package/dist/mcp/generated/docs/message-render.md +1 -1
- package/dist/mcp/generated/docs/message-tools.md +15 -4
- package/dist/mcp/generated/docs/messages.md +3 -0
- package/dist/mcp/generated/docs/model-selector.md +4 -2
- package/dist/mcp/generated/docs/overflow-tips.md +3 -3
- package/dist/mcp/generated/docs/resource-icon.md +102 -0
- package/dist/mcp/generated/docs/text-content.md +7 -3
- package/dist/mcp/generated/docs/theme.md +27 -35
- package/dist/mcp/generated/docs/use-artifact-preview.md +7 -3
- package/dist/mcp/generated/docs/use-command-selection.md +1 -1
- package/dist/mcp/generated/docs/use-container-scroll.md +2 -1
- package/dist/mcp/generated/docs/use-flow-node-actions.md +8 -15
- package/dist/mcp/generated/docs/use-global-config.md +11 -4
- package/dist/mcp/generated/docs/use-input-mention.md +119 -0
- package/dist/mcp/generated/docs/use-menu-keydown.md +15 -16
- package/dist/mcp/generated/docs/use-message-group.md +3 -6
- package/dist/mcp/generated/docs/user-message.md +39 -17
- package/dist/mcp/generated/index.json +233 -81
- package/dist/types/editor.d.ts +0 -29
- package/dist/types/index.d.ts +1 -0
- package/dist/types/input-menu.d.ts +46 -0
- package/dist/utils/artifact-tags.d.ts +36 -0
- package/dist/utils/collect-message-artifacts.d.ts +14 -0
- package/dist/utils/file.d.ts +3 -3
- package/dist/utils/index.d.ts +2 -1
- package/dist/utils/upload-file.d.ts +6 -1
- package/package.json +3 -2
- package/skills/blueking-chat-x/SKILL.md +143 -0
- package/skills/blueking-chat-x/references/_index.md +153 -0
- package/skills/blueking-chat-x/references/components/activity-layout.md +134 -0
- package/skills/blueking-chat-x/references/components/activity-message.md +486 -0
- package/skills/blueking-chat-x/references/components/add-menu-btn.md +88 -0
- package/skills/blueking-chat-x/references/components/ai-image.md +230 -0
- package/skills/blueking-chat-x/references/components/ai-loading.md +131 -0
- package/skills/blueking-chat-x/references/components/ai-selection.md +439 -0
- package/skills/blueking-chat-x/references/components/ai-slash-input.md +102 -0
- package/skills/blueking-chat-x/references/components/animation-text.md +202 -0
- package/skills/blueking-chat-x/references/components/assistant-message.md +504 -0
- package/skills/blueking-chat-x/references/components/chat-container.md +912 -0
- package/skills/blueking-chat-x/references/components/chat-input.md +614 -0
- package/skills/blueking-chat-x/references/components/cite-content.md +142 -0
- package/skills/blueking-chat-x/references/components/code-content.md +211 -0
- package/skills/blueking-chat-x/references/components/collapsible-content.md +76 -0
- package/skills/blueking-chat-x/references/components/common-error-content.md +73 -0
- package/skills/blueking-chat-x/references/components/content-render.md +233 -0
- package/skills/blueking-chat-x/references/components/delete-tool.md +191 -0
- package/skills/blueking-chat-x/references/components/desc-panel.md +162 -0
- package/skills/blueking-chat-x/references/components/detail-section.md +91 -0
- package/skills/blueking-chat-x/references/components/execution-summary.md +150 -0
- package/skills/blueking-chat-x/references/components/file-artifact-panel.md +307 -0
- package/skills/blueking-chat-x/references/components/file-content.md +340 -0
- package/skills/blueking-chat-x/references/components/file-icon.md +109 -0
- package/skills/blueking-chat-x/references/components/file-upload-btn.md +162 -0
- package/skills/blueking-chat-x/references/components/flow-agent-content.md +266 -0
- package/skills/blueking-chat-x/references/components/flow-agent-node-detail.md +236 -0
- package/skills/blueking-chat-x/references/components/highlight-keyword.md +146 -0
- package/skills/blueking-chat-x/references/components/image-content.md +182 -0
- package/skills/blueking-chat-x/references/components/image-preview-group.md +184 -0
- package/skills/blueking-chat-x/references/components/image-preview.md +226 -0
- package/skills/blueking-chat-x/references/components/info-message.md +144 -0
- package/skills/blueking-chat-x/references/components/input-attachment.md +49 -0
- package/skills/blueking-chat-x/references/components/input-info-alert.md +42 -0
- package/skills/blueking-chat-x/references/components/input-menu-panel.md +162 -0
- package/skills/blueking-chat-x/references/components/interrupt-message.md +212 -0
- package/skills/blueking-chat-x/references/components/key-value-content.md +128 -0
- package/skills/blueking-chat-x/references/components/knowledge-rag-content.md +122 -0
- package/skills/blueking-chat-x/references/components/latex-content.md +200 -0
- package/skills/blueking-chat-x/references/components/loading-message.md +192 -0
- package/skills/blueking-chat-x/references/components/markdown-content.md +232 -0
- package/skills/blueking-chat-x/references/components/mention-tag.md +79 -0
- package/skills/blueking-chat-x/references/components/mention-text.md +83 -0
- package/skills/blueking-chat-x/references/components/mermaid-content.md +189 -0
- package/skills/blueking-chat-x/references/components/message-container.md +645 -0
- package/skills/blueking-chat-x/references/components/message-loading.md +118 -0
- package/skills/blueking-chat-x/references/components/message-render.md +327 -0
- package/skills/blueking-chat-x/references/components/message-time.md +177 -0
- package/skills/blueking-chat-x/references/components/message-tools.md +427 -0
- package/skills/blueking-chat-x/references/components/model-selector.md +157 -0
- package/skills/blueking-chat-x/references/components/preview-toolbar.md +42 -0
- package/skills/blueking-chat-x/references/components/questions-container.md +85 -0
- package/skills/blueking-chat-x/references/components/reasoning-message.md +232 -0
- package/skills/blueking-chat-x/references/components/reference-content.md +135 -0
- package/skills/blueking-chat-x/references/components/reference-doc-content.md +109 -0
- package/skills/blueking-chat-x/references/components/resource-icon.md +98 -0
- package/skills/blueking-chat-x/references/components/scroll-btn.md +159 -0
- package/skills/blueking-chat-x/references/components/selection-footer.md +78 -0
- package/skills/blueking-chat-x/references/components/selection-question.md +88 -0
- package/skills/blueking-chat-x/references/components/shortcut-btn.md +204 -0
- package/skills/blueking-chat-x/references/components/shortcut-btns.md +266 -0
- package/skills/blueking-chat-x/references/components/shortcut-render.md +424 -0
- package/skills/blueking-chat-x/references/components/simple-table.md +101 -0
- package/skills/blueking-chat-x/references/components/text-content.md +80 -0
- package/skills/blueking-chat-x/references/components/tool-approval-card.md +183 -0
- package/skills/blueking-chat-x/references/components/tool-btn.md +317 -0
- package/skills/blueking-chat-x/references/components/tool-message.md +235 -0
- package/skills/blueking-chat-x/references/components/toolcall-render.md +348 -0
- package/skills/blueking-chat-x/references/components/user-feedback.md +233 -0
- package/skills/blueking-chat-x/references/components/user-message.md +444 -0
- package/skills/blueking-chat-x/references/components/user-question-answered-card.md +104 -0
- package/skills/blueking-chat-x/references/components/user-question-card.md +231 -0
- package/skills/blueking-chat-x/references/components/user-question-choice.md +105 -0
- package/skills/blueking-chat-x/references/components/user-question-option.md +42 -0
- package/skills/blueking-chat-x/references/components/vnode-renderer.md +122 -0
- package/skills/blueking-chat-x/references/composables/use-animation-text.md +196 -0
- package/skills/blueking-chat-x/references/composables/use-artifact-preview.md +235 -0
- package/skills/blueking-chat-x/references/composables/use-clipboard.md +203 -0
- package/skills/blueking-chat-x/references/composables/use-command-selection.md +150 -0
- package/skills/blueking-chat-x/references/composables/use-container-scroll.md +57 -0
- package/skills/blueking-chat-x/references/composables/use-custom-tab.md +158 -0
- package/skills/blueking-chat-x/references/composables/use-flow-node-actions.md +164 -0
- package/skills/blueking-chat-x/references/composables/use-full-screen.md +112 -0
- package/skills/blueking-chat-x/references/composables/use-global-config.md +155 -0
- package/skills/blueking-chat-x/references/composables/use-input-mention.md +115 -0
- package/skills/blueking-chat-x/references/composables/use-menu-keydown.md +161 -0
- package/skills/blueking-chat-x/references/composables/use-message-group.md +244 -0
- package/skills/blueking-chat-x/references/composables/use-observer-visible-list.md +188 -0
- package/skills/blueking-chat-x/references/composables/use-parent-scrolling.md +46 -0
- package/skills/blueking-chat-x/references/directives/index.md +61 -0
- package/skills/blueking-chat-x/references/directives/overflow-tips.md +205 -0
- package/skills/blueking-chat-x/references/icons/index.md +185 -0
- package/skills/blueking-chat-x/references/plugins/index.md +56 -0
- package/skills/blueking-chat-x/references/plugins/markdown-container.md +55 -0
- package/skills/blueking-chat-x/references/plugins/markdown-latex.md +205 -0
- package/skills/blueking-chat-x/references/plugins/markdown-mermaid.md +247 -0
- package/skills/blueking-chat-x/references/theme/theme.md +423 -0
- package/skills/blueking-chat-x/references/types/constants.md +340 -0
- package/skills/blueking-chat-x/references/types/index.md +120 -0
- package/skills/blueking-chat-x/references/types/interrupt.md +379 -0
- package/skills/blueking-chat-x/references/types/messages.md +556 -0
- package/skills/blueking-chat-x/references/types/schema.md +91 -0
- package/skills/blueking-chat-x/references/utils/index.md +196 -0
- package/skills/blueking-chat-x/scripts/generate-references.mjs +536 -0
- package/dist/components/chat-input/ai-slash-editor/ai-slash-editor.vue.d.ts +0 -28
- package/dist/components/chat-input/ai-slash-editor/theme.d.ts +0 -24
- package/dist/mcp/generated/docs/ai-prompt-list.md +0 -45
- package/dist/mcp/generated/docs/ai-skill-list.md +0 -75
- package/dist/mcp/generated/docs/ai-slash-editor.md +0 -43
- package/dist/mcp/generated/docs/ai-slash-menu.md +0 -42
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AIFileInfo } from '../ag-ui/types/file';
|
|
2
|
+
import type { Message } from '../ag-ui/types/messages';
|
|
3
|
+
import type { IInputMenuItem } from '../types/input-menu';
|
|
4
|
+
/**
|
|
5
|
+
* 把文件产物转成输入框菜单条目。
|
|
6
|
+
*
|
|
7
|
+
* 「消息里自动收集」与「点击引用按钮插入」必须共用这套映射:id 不一致会导致
|
|
8
|
+
* `@` 菜单的去重、以及已插入标签的匹配全部失效。
|
|
9
|
+
*/
|
|
10
|
+
export declare const toArtifactMenuItem: (file: AIFileInfo) => IInputMenuItem;
|
|
11
|
+
/** 从同一条消息提取具有 outputId 的助手产物与上传附件,供菜单、侧栏共用。 */
|
|
12
|
+
export declare const getMessageArtifacts: (message: Message) => AIFileInfo[];
|
|
13
|
+
/** 同一 outputId 取最后一次名称,菜单位置保持首次出现的顺序。 */
|
|
14
|
+
export declare const collectMessageArtifacts: (messages?: Message[]) => IInputMenuItem[];
|
package/dist/utils/file.d.ts
CHANGED
|
@@ -36,10 +36,10 @@ export declare const formatUploadNotAddedMessage: (count: number, maxMb: string,
|
|
|
36
36
|
export declare const normalizeAcceptTokens: (accept: string) => string[];
|
|
37
37
|
/** 当前 accept 是否就是对话默认允许列表(忽略顺序与大小写) */
|
|
38
38
|
export declare const isDefaultUploadAccept: (accept?: string) => boolean;
|
|
39
|
-
/** 默认允许列表的分类说明,与 ALLOWED_UPLOAD_EXTENSIONS 同源;每一类单独一行 */
|
|
40
|
-
export declare const formatDefaultUploadAcceptTip: (isEn: boolean) => string;
|
|
41
39
|
/**
|
|
42
40
|
* 按 input accept 规则判断文件是否允许上传。
|
|
43
|
-
* accept 为空表示不限制;支持扩展名、精确 mime
|
|
41
|
+
* accept 为空表示不限制;支持扩展名、精确 mime、类型通配(如 image/*)以及任意类型。
|
|
44
42
|
*/
|
|
45
43
|
export declare const isFileAcceptedByAccept: (file: File, accept?: string) => boolean;
|
|
44
|
+
/** 默认允许列表的分类说明,与 ALLOWED_UPLOAD_EXTENSIONS 同源;每一类单独一行 */
|
|
45
|
+
export declare const formatDefaultUploadAcceptTip: (isEn: boolean) => string;
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
export * from './artifact-tags';
|
|
2
|
+
export * from './collect-message-artifacts';
|
|
1
3
|
export * from './file';
|
|
2
4
|
export * from './file-type';
|
|
3
5
|
export * from './markdown-completer';
|
|
4
6
|
export * from './merge-tools-by-id';
|
|
5
7
|
export { completeMarkdownSyntax } from './stream-markdown-completer';
|
|
6
|
-
export * from './upload-accept';
|
|
7
8
|
export * from './upload-file';
|
|
8
9
|
export * from './utils';
|
|
@@ -1,16 +1,19 @@
|
|
|
1
|
+
import type { AIFileInfo } from '../ag-ui/types/file';
|
|
1
2
|
/** 附件的结构化最小契约,`Partial<UploadFile>` 可直接传入 */
|
|
2
3
|
export type UploadFileLike = {
|
|
3
4
|
file?: File;
|
|
4
5
|
filename?: string;
|
|
5
6
|
mimeType?: string;
|
|
7
|
+
outputId?: string;
|
|
6
8
|
size?: number;
|
|
9
|
+
status?: string;
|
|
7
10
|
url?: string;
|
|
8
11
|
};
|
|
9
12
|
/** `File` 的身份标识:同名文件靠体积与修改时间区分,用于去重与列表 key */
|
|
10
13
|
export declare const getFileIdentity: (file: File) => string;
|
|
11
14
|
/**
|
|
12
15
|
* 附件的稳定 key:待发送态用 `File` 身份(上传成功回填 url 后不变),
|
|
13
|
-
*
|
|
16
|
+
* 已发送态优先用 outputId,旧附件退回 url / 文件名。
|
|
14
17
|
*/
|
|
15
18
|
export declare const getUploadFileKey: (item: UploadFileLike) => string;
|
|
16
19
|
/**
|
|
@@ -33,3 +36,5 @@ export declare const splitUploadFiles: <T extends UploadFileLike>(items: T[]) =>
|
|
|
33
36
|
imageFiles: T[];
|
|
34
37
|
otherFiles: T[];
|
|
35
38
|
};
|
|
39
|
+
/** 已上传附件按 path 映射出的 outputId 进入与助手产物相同的引用、预览流程。 */
|
|
40
|
+
export declare const toUploadArtifact: (item: UploadFileLike) => AIFileInfo | undefined;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blueking/chat-x",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.52-dev.1",
|
|
4
4
|
"description": "蓝鲸智云 AI Chat 组件库 —— 遵循 AG-UI,为 AI Agent 和人类开发者共同设计的对话 UI 组件库。",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -20,7 +20,8 @@
|
|
|
20
20
|
"types": "dist/index.d.ts",
|
|
21
21
|
"files": [
|
|
22
22
|
"dist",
|
|
23
|
-
"README.md"
|
|
23
|
+
"README.md",
|
|
24
|
+
"skills"
|
|
24
25
|
],
|
|
25
26
|
"keywords": [],
|
|
26
27
|
"author": "Tencent BlueKing",
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: blueking-chat-x
|
|
3
|
+
description: >-
|
|
4
|
+
Use when 在消费方项目中接入 / 使用 @blueking/chat-x 对话组件库(已 npm 安装、非改库源码),
|
|
5
|
+
涉及「某组件怎么用、有哪些 props / events / slots / expose / v-model、怎么搭 AI 对话界面、
|
|
6
|
+
流式输出、停止生成、工具调用 ToolCall、快捷指令、文件上传、图片上传、@ 资源、自定义消息或侧栏 Tab、
|
|
7
|
+
分享多选、HITL 中断审批、Markdown / 代码 / 公式 / 图表渲染、字号与主题 CSS 变量、
|
|
8
|
+
消息时间 MessageTime / timezone」等问题时优先使用。
|
|
9
|
+
若是在 packages/chat-x/src 内改库源码(写组件 / composable / 样式 / 测试),改用 chat-x-dev skill。
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# 使用 @blueking/chat-x
|
|
13
|
+
|
|
14
|
+
帮助**消费方项目**(已 `npm i @blueking/chat-x`)快速理解组件库、查清每个组件的用法与 API,并写出正确的接入代码。
|
|
15
|
+
|
|
16
|
+
本 skill 的组件资料在 `references/` 下,由 `scripts/generate-references.mjs` 从库的 `wikis/` 文档自动生成(剥离演示噪音、保留完整 API 与示例)。**它就是组件 API 的真相源**——不要凭记忆臆测 props/事件/插槽名。
|
|
17
|
+
|
|
18
|
+
## 信息源优先级(先查再写)
|
|
19
|
+
|
|
20
|
+
| 想知道什么 | 去哪里查(按优先级) |
|
|
21
|
+
| --- | --- |
|
|
22
|
+
| 某组件的 Props / Events / Slots / Expose / v-model / 用法 | ① `references/_index.md` 定位 slug → ② `references/components/<slug>.md`;③ 若项目装了 chat-x MCP,可用 `get_component_doc` / `search_docs` 交叉验证 |
|
|
23
|
+
| 有哪些组件、按能力域怎么选 | `references/_index.md`(能力地图) |
|
|
24
|
+
| composable / 类型 / 主题(字号、CSS 变量) | `references/composables/*`、`references/types/*`、`references/theme/*` |
|
|
25
|
+
| 工具函数 / 指令 / Markdown 插件 / 图标 | `references/utils/*`、`references/directives/*`、`references/plugins/*`、`references/icons/*` |
|
|
26
|
+
| 某个组件到底能不能 `import` | 看 reference 顶部:有「导入」行才是包入口导出;标注「未从包入口导出」的是内部组件,须经上层组件使用 |
|
|
27
|
+
| 最小接入怎么写 | 本文「快速接入」一节 |
|
|
28
|
+
|
|
29
|
+
> references 缺失或过期时,按本文「再生成 references」一节重新生成。
|
|
30
|
+
|
|
31
|
+
## 心智模型(一句话)
|
|
32
|
+
|
|
33
|
+
**消息驱动 + 角色分发**:业务维护一份 `Message[]` → `ChatContainer`(或 `useMessageGroup`)分组 → `MessageRender` 按 `message.role` 分发到具体消息组件 → `ContentRender` 按内容类型分发 → `MarkdownContent` 按 token 分发。
|
|
34
|
+
|
|
35
|
+
接入心智:**你只负责维护 `messages` 数组和实现 `onSendMessage` 等回调**,组件负责渲染与交互。
|
|
36
|
+
|
|
37
|
+
## 快速接入(ChatContainer 一站式,推荐入口)
|
|
38
|
+
|
|
39
|
+
```vue
|
|
40
|
+
<template>
|
|
41
|
+
<ChatContainer
|
|
42
|
+
v-model="input"
|
|
43
|
+
:messages="messages"
|
|
44
|
+
:message-status="messageStatus"
|
|
45
|
+
:on-send-message="handleSendMessage"
|
|
46
|
+
:on-stop-sending="handleStopSending"
|
|
47
|
+
@stop-streaming="handleStopStreaming"
|
|
48
|
+
/>
|
|
49
|
+
</template>
|
|
50
|
+
|
|
51
|
+
<script setup lang="ts">
|
|
52
|
+
import { ref } from 'vue';
|
|
53
|
+
import { ChatContainer, MessageRole, MessageStatus, type Message, type TagSchema, type UserMessage } from '@blueking/chat-x';
|
|
54
|
+
|
|
55
|
+
const input = ref('');
|
|
56
|
+
const messages = ref<Message[]>([]);
|
|
57
|
+
const messageStatus = ref(MessageStatus.Complete);
|
|
58
|
+
|
|
59
|
+
const handleSendMessage = async (content: UserMessage['content'], docSchema: TagSchema) => {
|
|
60
|
+
messages.value.push({ id: `u_${Date.now()}`, messageId: `u_${Date.now()}`, role: MessageRole.User, content, status: MessageStatus.Complete });
|
|
61
|
+
const ai: Message = { id: `a_${Date.now()}`, messageId: `a_${Date.now()}`, role: MessageRole.Assistant, content: '', status: MessageStatus.Streaming };
|
|
62
|
+
messages.value.push(ai);
|
|
63
|
+
messageStatus.value = MessageStatus.Streaming;
|
|
64
|
+
// 接你的 SSE / WebSocket,把增量写入 ai.content
|
|
65
|
+
ai.status = MessageStatus.Complete;
|
|
66
|
+
messageStatus.value = MessageStatus.Complete;
|
|
67
|
+
};
|
|
68
|
+
const handleStopSending = async () => { messageStatus.value = MessageStatus.Stop; };
|
|
69
|
+
const handleStopStreaming = () => { messageStatus.value = MessageStatus.Stop; };
|
|
70
|
+
</script>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
前置依赖:`vue >= 3.5`、`bkui-vue 2.x`;样式随导入自动加载,无需手动引入。
|
|
74
|
+
需要完全控制布局时改用「`MessageContainer` + `ChatInput` + `useMessageGroup`」组合——细节查 `references/components/message-container.md` 与 `chat-input.md`。
|
|
75
|
+
|
|
76
|
+
## 怎么查一个组件(标准流程)
|
|
77
|
+
|
|
78
|
+
1. 在 `references/_index.md` 里按名称/能力域找到组件,拿到它的 `path`。
|
|
79
|
+
2. 读 `references/components/<slug>.md`:顶部是能力域 + 导入符号(或「未从包入口导出」标注)+ 概述 + 关联组件,正文含「核心能力 / 基础用法 / API(Props/Events/Slots/Expose/v-model)/ 类型定义」。
|
|
80
|
+
3. 按 API 表格落地代码,需要的类型与常量从 `@blueking/chat-x` 具名导入。
|
|
81
|
+
|
|
82
|
+
> 接入逻辑常跨多个组件(如 `ChatContainer` 透传 `ChatInput` / `MessageContainer` 的 props,自定义 `#message` 插槽需透传 `onAction` 等回调)。遇到「透传到底要带哪些参数」时,连同关联组件文档一起读。
|
|
83
|
+
|
|
84
|
+
## 常见坑(消费方高频,先看再调)
|
|
85
|
+
|
|
86
|
+
| 症状 | 原因 / 修法 |
|
|
87
|
+
| --- | --- |
|
|
88
|
+
| 自定义 `#message` 插槽后,用户消息的工具(删除/编辑/复制/引用)全失效,但 AI 消息工具正常 | 自定义 `#message` 渲染 `MessageRender` 时漏透传 `on-action` / `on-input-confirm` / `on-shortcut-confirm` / `tippy-options`;AI 消息工具在 `MessageContainer` 内部渲染不经过该插槽,故不受影响 |
|
|
89
|
+
| 用户消息编辑态的 `ChatInput` 上传配置与主输入区不一致 | `supportUpload` 需全链路透传 `ChatContainer → MessageContainer → MessageRender → UserMessage`,否则回退默认 `true` |
|
|
90
|
+
| 想自定义代码块头部动作(插入/应用代码)无从下手 | 用 `codeHeader` 插槽,参数为 `{ language, token }`(`AIBlueking/ChatBot` 已支持透传) |
|
|
91
|
+
| `requestOptions.data` 不知道进 body 还是 query | POST/PUT/PATCH/DELETE 合并进 body;GET/HEAD/OPTIONS 合并进 query(params) |
|
|
92
|
+
|
|
93
|
+
## 常见任务 → 入口
|
|
94
|
+
|
|
95
|
+
| 任务 | 入口组件 / 文档 |
|
|
96
|
+
| --- | --- |
|
|
97
|
+
| 搭完整对话界面 | `components/chat-container.md` |
|
|
98
|
+
| 自定义布局(自己拼消息列表 + 输入框) | `components/message-container.md` + `components/chat-input.md` + `composables/use-message-group.md` |
|
|
99
|
+
| `/` Prompt、`@` 资源、文件 / 图片上传 | `components/chat-input.md` |
|
|
100
|
+
| 流式输出 / 停止生成 | `components/chat-container.md`(`messageStatus` + `@stop-streaming`) |
|
|
101
|
+
| 工具调用 / ToolCall 渲染 | `components/toolcall-render.md`、`components/tool-message.md` |
|
|
102
|
+
| HITL 中断 / 工具审批 / 用户提问 | `components/interrupt-message.md`、`components/tool-approval-card.md`、`components/user-question-card.md` |
|
|
103
|
+
| FlowAgent 执行 / 知识召回展示 | `components/flow-agent-content.md`、`components/knowledge-rag-content.md` |
|
|
104
|
+
| 渲染 Markdown / 代码 / 公式 / 图表 | `components/content-render.md`、`components/markdown-content.md`、`components/code-content.md` |
|
|
105
|
+
| 图片预览 / 文件展示 | `components/ai-image.md`、`components/image-preview-group.md`、`components/file-content.md` |
|
|
106
|
+
| 快捷指令表单 | `components/shortcut-render.md`、`components/chat-input.md` |
|
|
107
|
+
| 分享 / 多选 | `components/chat-container.md`、`components/selection-footer.md` |
|
|
108
|
+
| 自定义消息类型 / 侧栏 Tab | `composables/use-custom-tab.md` + `components/chat-container.md` |
|
|
109
|
+
| 字号 / 主题 CSS 变量 | `theme/theme.md` |
|
|
110
|
+
| 消息时间 / 时区 | `ChatContainer` 的 `timezone` prop;组件 `MessageTime`(wikis `components/feedback/message-time.md`)。四档:今天 `12:00` / 昨天 / 今年内 `3-12 12:00` / 跨年;无 `createdAt` 不渲染 |
|
|
111
|
+
|
|
112
|
+
## 类型与常量速查
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
// 类型按需具名导入
|
|
116
|
+
import type { Message, UserMessage, AssistantMessage, ToolMessage, IToolBtn, Shortcut, TagSchema } from '@blueking/chat-x';
|
|
117
|
+
|
|
118
|
+
// 枚举 / 预置工具
|
|
119
|
+
import {
|
|
120
|
+
MessageRole, MessageStatus, MessageContentType,
|
|
121
|
+
CONST_MESSAGE_TOOLS, // AI 消息默认工具:复制 / 引用 / 重新生成 / 分享
|
|
122
|
+
CONST_USER_MESSAGE_TOOLS, // 用户消息默认工具:复制 / 引用 / 编辑 / 删除
|
|
123
|
+
} from '@blueking/chat-x';
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
更全的类型/常量定义查 `references/types/*`。
|
|
127
|
+
|
|
128
|
+
## 再生成 references
|
|
129
|
+
|
|
130
|
+
references 由脚本从 `wikis/` 生成。当库升级、wikis 更新,或 references 缺失/过期时重新生成(**运行脚本前需经用户同意**):
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
# 在 packages/chat-x 下执行(依赖 glob / gray-matter 已在 devDependencies)
|
|
134
|
+
node skills/blueking-chat-x/scripts/generate-references.mjs
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
脚本会全量重建 `references/`:`glob wikis` → `gray-matter` 解析 frontmatter → 清洗正文(去 VitePress demo `<script>` / `<div class="demo">` / 内联 style,保留代码围栏与 API 表格)→ 按组件能力域 + composables / types / utils / directives / plugins / icons / theme 写出 + 生成 `_index.md`。
|
|
138
|
+
|
|
139
|
+
「导入」行不是从文档标题猜的:脚本会从 `src/index.ts` 递归解析 barrel,拿到包入口**值导出**与**类型导出**两个集合,只有命中值导出才生成 `import` 语句;大小写漂移(`ToolcallRender` → `ToolCallRender`)自动纠正,只存在同名类型导出的(如 `UserMessage`)会明确标注「同名导出是 TS 类型,不是组件」。个别导出名与组件名不一致时,在 wikis frontmatter 用 `exportSymbol: MessageUserFeedback` 指定,确认为内部组件则写 `exportSymbol: false`。运行后留意 `[warn]` 输出。
|
|
140
|
+
|
|
141
|
+
## 通用项目规则
|
|
142
|
+
|
|
143
|
+
中文回复、不擅自处理 eslint/格式、运行脚本需先经同意、git 提交禁用 `--no-verify`、不确定先问——见仓库 `AGENTS.md` 与 `.cursor/rules/project.mdc`。
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
# @blueking/chat-x 能力地图(自动生成)
|
|
2
|
+
|
|
3
|
+
> 由 `scripts/generate-references.mjs` 从 `wikis/` 生成,请勿手改。
|
|
4
|
+
> 查某个能力时:先在本索引定位 slug,再读对应 `path` 的 reference 文档。
|
|
5
|
+
|
|
6
|
+
## 组件(按能力域)
|
|
7
|
+
|
|
8
|
+
### 对话搭建
|
|
9
|
+
|
|
10
|
+
- **ChatContainer 聊天容器** — 完整对话容器,组合消息列表、输入区、模型选择、快捷指令、执行摘要、分享选择和自定义 Tab。 → `components/chat-container.md`
|
|
11
|
+
- **MessageContainer 消息列表容器** — 负责消息分组渲染、滚动控制、工具栏和消息插槽透传。 → `components/message-container.md`
|
|
12
|
+
|
|
13
|
+
### 消息系统
|
|
14
|
+
|
|
15
|
+
- **ActivityMessage 活动消息** — 按 activityType 分发 FlowAgent、知识召回、引用文档等活动内容。 → `components/activity-message.md`
|
|
16
|
+
- **AssistantMessage AI 助手消息** — 渲染助手消息主体、工具调用与文件产物,默认插槽可覆盖正文渲染。 → `components/assistant-message.md`
|
|
17
|
+
- **FileArtifactPanel 文件产物预览** — 汇总当前会话全部文件产物,支持搜索、选中与分类型预览,挂载在 ChatContainer 侧栏「文件产物」Tab。 → `components/file-artifact-panel.md`
|
|
18
|
+
- **InfoMessage 信息消息** — 渲染居中的系统信息提示。 → `components/info-message.md`
|
|
19
|
+
- **LoadingMessage 加载消息** — 消息列表中的加载占位,默认使用 AiLoading,也支持默认插槽覆盖。 → `components/loading-message.md`
|
|
20
|
+
- **MessageRender 消息渲染器** — 按 message.role 分发到用户、助手、工具、推理、活动、中断等消息组件。 → `components/message-render.md`
|
|
21
|
+
- **ReasoningMessage 推理消息** — 渲染推理过程,覆盖加载、错误与 Markdown 内容展示。 → `components/reasoning-message.md`
|
|
22
|
+
- **ToolMessage 工具消息** — 渲染工具返回内容,JSON 场景交给 DescPanel + HighlightKeyword 展示。 → `components/tool-message.md`
|
|
23
|
+
- **UserMessage 用户消息** — 渲染用户消息,支持纯文本、键值引用、文件附件和编辑态输入。 → `components/user-message.md`
|
|
24
|
+
|
|
25
|
+
### 内容渲染
|
|
26
|
+
|
|
27
|
+
- **AnimationText 动画文本** — 按文本增量播放流式动画。 → `components/animation-text.md`
|
|
28
|
+
- **CiteContent 引用内容** — 渲染输入或消息中的引用片段。 → `components/cite-content.md`
|
|
29
|
+
- **CodeContent 代码块** — 渲染 Markdown 代码块,支持高亮、复制和 header 插槽。 → `components/code-content.md`
|
|
30
|
+
- **CollapsibleContent 折叠内容** — 内容超过阈值高度时折叠,并在下方展示「显示更多 / 收起」。 → `components/collapsible-content.md`
|
|
31
|
+
- **CommonErrorContent 错误内容** — 展示统一错误提示内容。 → `components/common-error-content.md`
|
|
32
|
+
- **ContentRender 内容渲染器** — 按 MessageContentType 分发 Markdown、文本、引用、键值、图片等内容。 → `components/content-render.md`
|
|
33
|
+
- **DescPanel 描述面板** — 将文本或 JSON 内容降级为可读描述面板。 → `components/desc-panel.md`
|
|
34
|
+
- **KeyValueContent 键值内容** — 以键值列表展示结构化内容。 → `components/key-value-content.md`
|
|
35
|
+
- **LatexContent LaTeX 公式** — 使用 KaTeX 渲染 LaTeX 公式内容。 → `components/latex-content.md`
|
|
36
|
+
- **MarkdownContent Markdown 内容渲染** — Markdown 主渲染器,集成代码块、公式、错误降级和 codeHeader 插槽。 → `components/markdown-content.md`
|
|
37
|
+
- **MentionTag 资源标签** — 单个资源标签,带类型图标、描述气泡与会话产物点击预览。 → `components/mention-tag.md`
|
|
38
|
+
- **MentionText 标签文本** — 把发送时保留的富文本文档还原成「文本 + 资源标签」,用于用户消息回显。 → `components/mention-text.md`
|
|
39
|
+
- **MermaidContent Mermaid 图表** — 渲染 Mermaid 图表并处理渲染事件。 → `components/mermaid-content.md`
|
|
40
|
+
- **ReferenceContent 引用来源** — 渲染引用文档/来源列表。 → `components/reference-content.md`
|
|
41
|
+
- **TextContent 文本内容** — 渲染纯文本内容。 → `components/text-content.md`
|
|
42
|
+
|
|
43
|
+
### 媒体文件
|
|
44
|
+
|
|
45
|
+
- **AiImage 图片展示** — 图片展示组件,组合加载、错误、预览和 extra 插槽。 → `components/ai-image.md`
|
|
46
|
+
- **FileContent 文件内容** — 渲染文件附件,支持图片预览、上传中/失败态和下载事件。 → `components/file-content.md`
|
|
47
|
+
- **ImageContent 图片内容** — 渲染 Markdown 图片 token。 → `components/image-content.md`
|
|
48
|
+
- **ImagePreview 图片预览** — 图片全屏预览容器,支持缩放、旋转、下载工具栏。 → `components/image-preview.md`
|
|
49
|
+
- **ImagePreviewGroup 图片预览组** — 通过 provide/inject 管理同组图片预览。 → `components/image-preview-group.md`
|
|
50
|
+
- **PreviewToolbar 图片预览工具栏** — 图片预览的缩放、旋转、下载等工具按钮。 → `components/preview-toolbar.md`
|
|
51
|
+
|
|
52
|
+
### 输入交互
|
|
53
|
+
|
|
54
|
+
- **AddMenuBtn 添加菜单按钮** — 输入框左下角的 + 号按钮,唤起聚合菜单,展开态高亮。 → `components/add-menu-btn.md`
|
|
55
|
+
- **AiSelection 划词选择** — 监听选中文本并展示快捷操作浮窗。 → `components/ai-selection.md`
|
|
56
|
+
- **AiSlashInput 富文本命令输入** — ChatInput 内部富文本编辑区,负责触发符识别、资源标签插入与文档同步。 → `components/ai-slash-input.md`
|
|
57
|
+
- **ChatInput 聊天输入框** — 聊天输入区,组合富文本输入、统一菜单(@ / \ 与 + 号)、快捷指令、附件、引用、发送/停止等交互。 → `components/chat-input.md`
|
|
58
|
+
- **FileUploadBtn 文件上传按钮** — 文件选择按钮,封装 input[type=file] 并输出选择事件。 → `components/file-upload-btn.md`
|
|
59
|
+
- **InputAttachment 输入附件区** — ChatInput 底部附件区布局,承载快捷按钮、文件与发送图标。 → `components/input-attachment.md`
|
|
60
|
+
- **InputInfoAlert 输入提示条** — ChatInput 上方的信息提示条。 → `components/input-info-alert.md`
|
|
61
|
+
- **InputMenuPanel 输入框菜单** — 输入框上方的统一菜单面板,@ / \ 与 + 号共用一套数据源、分组与折叠逻辑。 → `components/input-menu-panel.md`
|
|
62
|
+
- **ModelSelector 模型选择器** — 聊天输入区的模型下拉选择器,支持搜索过滤、能力标签与键盘导航。 → `components/model-selector.md`
|
|
63
|
+
- **SelectionFooter 多选操作栏** — 消息多选/分享模式下的底部操作栏。 → `components/selection-footer.md`
|
|
64
|
+
- **ShortcutBtn 快捷指令按钮** — 单个快捷指令按钮,支持默认/append 插槽和 expose focus。 → `components/shortcut-btn.md`
|
|
65
|
+
- **ShortcutBtns 快捷指令按钮组** — 快捷指令列表入口,内部组合多个 ShortcutBtn。 → `components/shortcut-btns.md`
|
|
66
|
+
- **ShortcutRender 快捷指令表单** — 渲染快捷指令 components 表单并回传确认数据。 → `components/shortcut-render.md`
|
|
67
|
+
|
|
68
|
+
### Agent 能力
|
|
69
|
+
|
|
70
|
+
- **DetailSection 详情分段** — FlowAgent 节点详情中的标题/内容分段容器。 → `components/detail-section.md`
|
|
71
|
+
- **ExecutionSummary 执行摘要** — 按消息流提取执行摘要,支持关键词定位和消息渲染。 → `components/execution-summary.md`
|
|
72
|
+
- **FlowAgentContent FlowAgent 执行内容** — 渲染 FlowAgent 任务/节点执行状态、耗时、详情入口和自定义 Tab 联动。 → `components/flow-agent-content.md`
|
|
73
|
+
- **FlowAgentNodeDetail FlowAgent 节点详情** — 展示 FlowAgent 节点输入、输出、异常、耗时等详情。 → `components/flow-agent-node-detail.md`
|
|
74
|
+
- **InterruptMessage 中断消息** — 渲染 human-in-the-loop 中断消息,分发工具审批,并按 reason 回显 resume 结果。 → `components/interrupt-message.md`
|
|
75
|
+
- **KnowledgeRagContent 知识召回内容** — 渲染知识召回活动,包含加载态、Markdown 内容与引用来源。 → `components/knowledge-rag-content.md`
|
|
76
|
+
- **ReferenceDocContent 引用文档活动** — 渲染引用文档类活动内容,复用 ActivityLayout 与 ReferenceContent。 → `components/reference-doc-content.md`
|
|
77
|
+
- **SimpleTable 简易表格** — FlowAgent 节点详情中的轻量表格展示组件。 → `components/simple-table.md`
|
|
78
|
+
- **ToolApprovalCard 工具审批卡片** — 渲染 AIDevToolApproval 中断的审批信息与取消/刷新操作,readonly prop 支持纯只读展示。 → `components/tool-approval-card.md`
|
|
79
|
+
- **ToolcallRender 工具调用渲染器** — 渲染 assistant toolCalls,展示工具调用状态、参数和结果。 → `components/toolcall-render.md`
|
|
80
|
+
- **UserQuestionAnsweredCard 用户问题回答回显** — 在 UserQuestion resume 成功后回显用户回答或取消状态。 → `components/user-question-answered-card.md`
|
|
81
|
+
- **UserQuestionCard 用户问题中断** — 渲染 UserQuestion 中断的待回答面板;一次一题分页切换,支持单选/多选、Others、跳过与已完成进度。 → `components/user-question-card.md`
|
|
82
|
+
- **UserQuestionChoice 用户问题选择题** — UserQuestionCard 默认的选择题渲染组件,封装单选/多选、Others 输入与答案组装。 → `components/user-question-choice.md`
|
|
83
|
+
- **UserQuestionOption 用户问题选项** — UserQuestionChoice 内部选项行,处理单选/多选状态和 Others 输入。 → `components/user-question-option.md`
|
|
84
|
+
|
|
85
|
+
### 工具与反馈
|
|
86
|
+
|
|
87
|
+
- **DeleteTool 删除确认按钮** — 消息删除二次确认工具。 → `components/delete-tool.md`
|
|
88
|
+
- **MessageTime 消息时间** — 按「今天 / 昨天 / 今年内 / 跨年」四档格式展示消息创建时间。 → `components/message-time.md`
|
|
89
|
+
- **MessageTools 消息工具栏** — 消息悬浮工具栏,组合复制、删除、反馈等工具按钮。 → `components/message-tools.md`
|
|
90
|
+
- **ScrollBtn 滚动按钮** — 停止生成或返回底部等滚动/状态按钮。 → `components/scroll-btn.md`
|
|
91
|
+
- **ToolBtn 工具按钮** — 工具栏图标按钮。 → `components/tool-btn.md`
|
|
92
|
+
- **UserFeedback 用户反馈** — 用户反馈弹层,提交踩/反馈原因。 → `components/user-feedback.md`
|
|
93
|
+
|
|
94
|
+
### 辅助能力
|
|
95
|
+
|
|
96
|
+
- **ActivityLayout 活动布局** — 活动消息的折叠布局容器,提供 title/default 插槽。 → `components/activity-layout.md`
|
|
97
|
+
- **AiLoading 三点加载** — 小尺寸 AI 加载动效。 → `components/ai-loading.md`
|
|
98
|
+
- **FileIcon 文件类型图标** — 按文件扩展名渲染对应类型图标,尺寸随外层 font-size 自适应。 → `components/file-icon.md`
|
|
99
|
+
- **HighlightKeyword 关键词高亮** — 根据注入关键词高亮文本片段。 → `components/highlight-keyword.md`
|
|
100
|
+
- **MessageLoading 品牌加载** — 带品牌图标和逐字渐变动画的加载组件。 → `components/message-loading.md`
|
|
101
|
+
- **QuestionsContainer 问题容器占位** — 源码为空文件,没有 props、emits、slots 或渲染能力;不建议作为功能组件使用。 → `components/questions-container.md`
|
|
102
|
+
- **ResourceIcon 资源图标** — 按 URL / Vue 组件 / 类型兜底三级策略渲染资源图标,图片失效自动回退。 → `components/resource-icon.md`
|
|
103
|
+
- **SelectionQuestion 选择问题占位** — 源码为空文件,没有 props、emits、slots 或渲染能力;不建议作为功能组件使用。 → `components/selection-question.md`
|
|
104
|
+
- **VNodeRenderer VNode 渲染器** — 将 Markdown token 转成 VNode 的内部渲染桥。 → `components/vnode-renderer.md`
|
|
105
|
+
|
|
106
|
+
## Composables 组合式函数
|
|
107
|
+
|
|
108
|
+
- **useAnimationText** — 文本淡入动画的组合式函数。将响应式文本按**增量**拆分为独立 chunk,每个新增 chunk 对应一次淡入动画,适用于 AI 流式输出的逐段渐显效果。 → `composables/use-animation-text.md`
|
|
109
|
+
- **useArtifactPreview** — Provider/Consumer 模式的文件产物预览状态管理,用于 ChatContainer 侧栏「文件产物」Tab 的命中与切换。 Provider 在 ChatContainer 中创建,Consumer 在深层文件卡片中注入使用。 → `composables/use-artifact-preview.md`
|
|
110
|
+
- **useClipboard** — 复制文本到剪贴板的组合式函数。内置两级降级策略,并自动通过 bkui-vue `Message` 提示复制结果,调用方无需关心成功/失败处理。 → `composables/use-clipboard.md`
|
|
111
|
+
- **useCommandSelection** — 为 `edix` 富文本编辑器提供光标位置追踪能力的组合式函数。内部封装一个 `EditorCommand`,由编辑器调用后将光标的行列信息存入响应式变量,供后续编辑命令(如插入 tag、删除关键词)精确定位。 → `composables/use-command-selection.md`
|
|
112
|
+
- **useContainerScroll** — 为消息容器提供滚动控制的组合式函数对,通过 **Provider/Consumer** 模式在父子组件间共享滚动状态。 → `composables/use-container-scroll.md`
|
|
113
|
+
- **useCustomTab** — Provider/Consumer 模式的自定义 Tab 管理,用于 `ChatContainer` 侧边栏的 Tab 动态管理。Provider 在 `ChatContainer` 中创建,Consumer 在任意后代组件中注入使用。 → `composables/use-custom-tab.md`
|
|
114
|
+
- **useFlowNodeActions** — 聚合 FlowAgent 节点行尾操作(详情 / 重试 / 跳过)为声明式视图模型列表,显隐与 resume 回调收敛于此。 → `composables/use-flow-node-actions.md`
|
|
115
|
+
- **useFullScreen** — 基于浏览器原生 Fullscreen API 的全屏控制组合式函数,自动嗅探标准与 WebKit 前缀,状态与 ESC 退出保持同步。 → `composables/use-full-screen.md`
|
|
116
|
+
- **useGlobalConfig** — 在聊天根容器与子组件之间通过 provide/inject 共享全局展示配置(字号主题档位、是否支持上传、消息时间时区、输入框菜单数据源)。 → `composables/use-global-config.md`
|
|
117
|
+
- **useInputMention** — 通过 provide/inject 把「资源插入输入框」的能力开放给任意深度的后代组件。 → `composables/use-input-mention.md`
|
|
118
|
+
- **useMenuKeydown** — 为弹出菜单提供键盘导航能力的组合式函数。在 `onMounted` 时于 **`window` 捕获阶段**注册 `keydown` 监听,在 `onScopeDispose` 时自动移除,通过 `menuRef.offsetParent` 检测菜单可见性来决定是否响应按键。 → `composables/use-menu-keydown.md`
|
|
119
|
+
- **useMessageGroup** — 核心消息分组逻辑,将原始 `Message[]` 数组转换为结构化的 `MessageGroup[]`。处理 Tool 消息合并、Loading 自动注入、执行摘要过滤和消息多选/分享等逻辑。 → `composables/use-message-group.md`
|
|
120
|
+
- **useObserverVisibleList** — 基于 `ResizeObserver` 的容器宽度感知组合式函数:遍历列表项的实际 `offsetWidth`,使用贪心算法计算在容器中能完整显示的项目子集,并为"更多"按钮动态预留空间。 → `composables/use-observer-visible-list.md`
|
|
121
|
+
- **useParentScrolling** — 向上递归查找**最近可滚动祖先**,监听其 `scroll` / `scrollend` 事件,提供 `isScrolling` 状态。常用于滚动时自动关闭浮层、禁用交互等场景。 → `composables/use-parent-scrolling.md`
|
|
122
|
+
|
|
123
|
+
## 类型定义
|
|
124
|
+
|
|
125
|
+
- **常量枚举** — `@blueking/chat-x` 导出的常量和枚举类型。 → `types/constants.md`
|
|
126
|
+
- **类型定义** — `@blueking/chat-x` 提供完整的 TypeScript 类型定义。 → `types/index.md`
|
|
127
|
+
- **中断类型 Interrupt** — AG-UI human-in-the-loop 中断相关类型,含 Interrupt、UserQuestion、InterruptMessage 与 resume 回调。 → `types/interrupt.md`
|
|
128
|
+
- **消息类型** — `@blueking/chat-x` 提供了完整的消息类型定义,用于构建 AI 对话消息。 → `types/messages.md`
|
|
129
|
+
- **用户问题 Schema** — 历史 human-in-the-loop 用户问题 JSON Schema 工具;新 UserQuestion 中断协议以 Interrupt 文档为准。 → `types/schema.md`
|
|
130
|
+
|
|
131
|
+
## Utils 工具函数
|
|
132
|
+
|
|
133
|
+
- **工具函数** — `@blueking/chat-x` 提供了一些工具函数,用于处理 Markdown、Cookie 等常见操作。 → `utils/index.md`
|
|
134
|
+
|
|
135
|
+
## Directives 指令
|
|
136
|
+
|
|
137
|
+
- **指令总览** — `@blueking/chat-x` 目前提供以下 Vue 自定义指令: → `directives/index.md`
|
|
138
|
+
- **OverflowTips** — 当元素文本**水平溢出**(`scrollWidth > clientWidth`)时,鼠标悬停自动弹出 Tippy tooltip 显示完整内容;未溢出时不创建实例,零性能损耗。 → `directives/overflow-tips.md`
|
|
139
|
+
|
|
140
|
+
## Plugins Markdown 插件
|
|
141
|
+
|
|
142
|
+
- **插件** — `@blueking/chat-x` 提供了一些 Markdown-it 插件,用于扩展 Markdown 的解析能力。 → `plugins/index.md`
|
|
143
|
+
- **markdownItContainer** — Markdown-it 自定义容器插件,支持 ::: name ... ::: 语法,用于对齐块等场景。 → `plugins/markdown-container.md`
|
|
144
|
+
- **markdownItLatex** — Markdown-it LaTeX 解析插件,用于解析 LaTeX 数学公式语法。 → `plugins/markdown-latex.md`
|
|
145
|
+
- **markdownItMermaid** — Markdown-it Mermaid 解析插件,用于解析 Mermaid 图表代码块。 → `plugins/markdown-mermaid.md`
|
|
146
|
+
|
|
147
|
+
## Icons 图标
|
|
148
|
+
|
|
149
|
+
- **图标** — `@blueking/chat-x` 内置了 76 个 SVG 图标:其中 70 个通过 Vue `h()` 预创建为 VNode 对象,可直接用于模板渲染; → `icons/index.md`
|
|
150
|
+
|
|
151
|
+
## 主题
|
|
152
|
+
|
|
153
|
+
- **主题配置** — `@blueking/chat-x` 使用 SCSS 变量和 CSS 类来控制样式,支持通过覆盖变量或样式来自定义主题。 → `theme/theme.md`
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
# ActivityLayout 活动布局
|
|
2
|
+
|
|
3
|
+
> 能力域:辅助能力 | 未从包入口导出:内部组件,请通过上层组件使用 | since 1.0.0
|
|
4
|
+
|
|
5
|
+
活动消息的折叠布局容器,提供 title/default 插槽。 源码位置:src/components/chat-content/activity-layout/activity-layout.vue。
|
|
6
|
+
|
|
7
|
+
**关联**:activity-message(活动消息通过本组件承载标题栏与内容区)、knowledge-rag-content(知识召回活动复用本组件展示加载标题与正文)、reference-doc-content(引用文档活动复用本组件展示文档数量与引用列表)、flow-agent-content(FlowAgent 活动复用本组件,但隐藏默认折叠箭头)
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# ActivityLayout 活动布局
|
|
12
|
+
|
|
13
|
+
> **能力域**:辅助能力
|
|
14
|
+
|
|
15
|
+
`ActivityLayout` 是活动消息的通用折叠布局容器,负责渲染标题栏、折叠箭头和内容区域。它不关心活动内容类型本身,标题和正文均通过插槽传入,因此常被 `KnowledgeRagContent`、`ReferenceDocContent`、`FlowAgentContent` 等活动组件复用。
|
|
16
|
+
|
|
17
|
+
通常不需要业务侧直接使用;如果要新增一种活动消息内容,可以用它作为标题/内容外壳。
|
|
18
|
+
|
|
19
|
+
## 源码事实
|
|
20
|
+
|
|
21
|
+
- **源码位置**:`src/components/chat-content/activity-layout/activity-layout.vue`
|
|
22
|
+
- **能力说明**:活动消息的折叠布局容器,提供 `title` / `default` 插槽。
|
|
23
|
+
|
|
24
|
+
## 核心能力
|
|
25
|
+
|
|
26
|
+
- **标题栏点击折叠**:点击标题栏切换 `collapsed`,内容区通过 `v-show="!collapsed"` 显示或隐藏
|
|
27
|
+
- **双向绑定**:通过 `v-model:collapsed` 让父组件控制展开/收起状态,默认展开
|
|
28
|
+
- **标题插槽透传状态**:`title` 插槽会收到 `{ collapsed }`,可根据折叠状态调整标题内容
|
|
29
|
+
- **默认折叠箭头**:非 FlowAgent 活动自动在标题右侧显示折叠箭头
|
|
30
|
+
- **FlowAgent 特例**:`activityType === MessageContentType.FlowAgent` 时隐藏默认折叠箭头,由 FlowAgent 自己渲染标题交互
|
|
31
|
+
|
|
32
|
+
## 基础用法
|
|
33
|
+
|
|
34
|
+
```vue
|
|
35
|
+
<template>
|
|
36
|
+
<ActivityLayout v-model:collapsed="collapsed">
|
|
37
|
+
<template #title="{ collapsed }">
|
|
38
|
+
<span class="ai-activity-message-title-icon">
|
|
39
|
+
<DocumentIcon style="font-size: 12px" />
|
|
40
|
+
</span>
|
|
41
|
+
<span class="ai-activity-message-title-text">
|
|
42
|
+
{{ collapsed ? '已折叠' : '引用 2 篇资料作为参考' }}
|
|
43
|
+
</span>
|
|
44
|
+
</template>
|
|
45
|
+
|
|
46
|
+
<div style="padding: 0 14px;">
|
|
47
|
+
活动内容
|
|
48
|
+
</div>
|
|
49
|
+
</ActivityLayout>
|
|
50
|
+
</template>
|
|
51
|
+
|
|
52
|
+
<script setup lang="ts">
|
|
53
|
+
import { ref } from 'vue';
|
|
54
|
+
import ActivityLayout from '@blueking/chat-x/src/components/chat-content/activity-layout/activity-layout.vue';
|
|
55
|
+
import { DocumentIcon } from '@blueking/chat-x/src/icons/content';
|
|
56
|
+
|
|
57
|
+
const collapsed = ref(false);
|
|
58
|
+
</script>
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**渲染效果**
|
|
62
|
+
|
|
63
|
+
## 折叠状态
|
|
64
|
+
|
|
65
|
+
`collapsed` 默认为 `false`。设置为 `true` 时只展示标题栏,正文内容保留在 DOM 中但通过 `v-show` 隐藏。
|
|
66
|
+
|
|
67
|
+
## FlowAgent 活动
|
|
68
|
+
|
|
69
|
+
传入 `activityType="flow_agent"` 时,`ActivityLayout` 不渲染右侧默认折叠箭头。该场景下标题栏通常由 `FlowAgentContent` 自己展示状态统计、加载图标和展开箭头。
|
|
70
|
+
|
|
71
|
+
```vue
|
|
72
|
+
<ActivityLayout
|
|
73
|
+
v-model:collapsed="collapsed"
|
|
74
|
+
:activity-type="MessageContentType.FlowAgent"
|
|
75
|
+
>
|
|
76
|
+
<template #title>
|
|
77
|
+
<span>执行情况: 成功 2 / 失败 1</span>
|
|
78
|
+
</template>
|
|
79
|
+
<div>FlowAgent 节点列表</div>
|
|
80
|
+
</ActivityLayout>
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
## 组件结构
|
|
84
|
+
|
|
85
|
+
```
|
|
86
|
+
.ai-activity-message
|
|
87
|
+
├── .ai-activity-message-title(点击切换 collapsed)
|
|
88
|
+
│ ├── title slot(slot props: { collapsed })
|
|
89
|
+
│ └── CollapsedIcon(activityType !== flow_agent 时显示)
|
|
90
|
+
└── .ai-activity-message-content(v-show="!collapsed")
|
|
91
|
+
└── default slot
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## API
|
|
95
|
+
|
|
96
|
+
### Props
|
|
97
|
+
|
|
98
|
+
| 属性名 | 类型 | 必填 | 默认值 | 说明 |
|
|
99
|
+
| ------------ | -------------------- | ---- | ------ | --------------------------------------------- |
|
|
100
|
+
| activityType | `MessageContentType` | 否 | — | 活动类型;为 `flow_agent` 时隐藏默认折叠箭头 |
|
|
101
|
+
|
|
102
|
+
### Models
|
|
103
|
+
|
|
104
|
+
| 名称 | 类型 | 默认值 | 说明 |
|
|
105
|
+
| --------- | --------- | ------- | ---------------- |
|
|
106
|
+
| collapsed | `boolean` | `false` | 活动内容是否折叠 |
|
|
107
|
+
|
|
108
|
+
### Emits
|
|
109
|
+
|
|
110
|
+
- 无显式 emits;`v-model:collapsed` 会产生 `update:collapsed`。
|
|
111
|
+
|
|
112
|
+
### Slots
|
|
113
|
+
|
|
114
|
+
| 插槽名 | 参数 | 说明 |
|
|
115
|
+
| ------- | ----------------------- | ---------- |
|
|
116
|
+
| title | `{ collapsed: boolean }` | 标题栏内容 |
|
|
117
|
+
| default | — | 活动正文 |
|
|
118
|
+
|
|
119
|
+
### Expose
|
|
120
|
+
|
|
121
|
+
- 无。
|
|
122
|
+
|
|
123
|
+
## 使用建议
|
|
124
|
+
|
|
125
|
+
- 适合作为活动消息内部布局外壳,不建议替代通用卡片、面板或页面 Section。
|
|
126
|
+
- 标题栏点击区域会整体触发折叠,标题插槽内如有按钮或链接,需要自行处理事件冒泡。
|
|
127
|
+
- `default` 内容使用 `v-show` 控制可见性,折叠时不会卸载内部组件。
|
|
128
|
+
|
|
129
|
+
## 关联组件
|
|
130
|
+
|
|
131
|
+
- [ActivityMessage](../message/activity-message.md) — 活动消息分发入口。
|
|
132
|
+
- [KnowledgeRagContent](../agent/knowledge-rag-content.md) — 知识召回活动。
|
|
133
|
+
- [ReferenceDocContent](../agent/reference-doc-content.md) — 引用文档活动。
|
|
134
|
+
- [FlowAgentContent](../agent/flow-agent-content.md) — FlowAgent 执行活动。
|