@blueking/bkui-knowledge 0.0.1-beta.4 → 0.0.1-beta.5
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 +34 -15
- package/bin/bkui-knowledge.js +77 -89
- package/knowledge/manifest.json +8 -1
- package/knowledge/skills/bkui-quick-start/SKILL.md +68 -0
- package/package.json +3 -3
- package/server/mcp-core.js +10 -25
package/README.md
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
只需添加 MCP 服务配置:
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
### Cursor(默认)
|
|
14
14
|
|
|
15
15
|
```json
|
|
16
16
|
{
|
|
@@ -23,15 +23,29 @@
|
|
|
23
23
|
}
|
|
24
24
|
```
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
### CodeBuddy
|
|
27
|
+
|
|
28
|
+
在 CodeBuddy 设置 > MCP 标签页中添加:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"bkui-knowledge": {
|
|
33
|
+
"command": "npx",
|
|
34
|
+
"args": ["-y", "@blueking/bkui-knowledge", "${workspaceFolder}", "--ide=codebuddy"]
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
> 💡 通过 `--ide` 参数指定目标 IDE,不指定时默认使用 Cursor
|
|
40
|
+
|
|
41
|
+
### 本地开发
|
|
27
42
|
|
|
28
43
|
```json
|
|
29
44
|
{
|
|
30
45
|
"mcpServers": {
|
|
31
46
|
"bkui-knowledge": {
|
|
32
47
|
"command": "node",
|
|
33
|
-
"args": ["/path/to/bkui-knowledge/bin/bkui-knowledge.js"]
|
|
34
|
-
"cwd": "/path/to/your-project"
|
|
48
|
+
"args": ["/path/to/bkui-knowledge/bin/bkui-knowledge.js", "${workspaceFolder}"]
|
|
35
49
|
}
|
|
36
50
|
}
|
|
37
51
|
}
|
|
@@ -40,8 +54,9 @@
|
|
|
40
54
|
> ⚠️ 必须传递项目路径,否则 skills 无法同步到正确位置
|
|
41
55
|
|
|
42
56
|
**特性:**
|
|
43
|
-
- ✅
|
|
44
|
-
- ✅
|
|
57
|
+
- ✅ 支持 Cursor 和 CodeBuddy 两种 IDE
|
|
58
|
+
- ✅ 首次启动自动同步推荐 skills
|
|
59
|
+
- ✅ 自动生成规则文件(自动注入 AI 上下文)
|
|
45
60
|
- ✅ 自动检测版本更新,增量同步
|
|
46
61
|
- ✅ 零 Token 消耗(skills 不经过 AI 上下文)
|
|
47
62
|
- ✅ 离线可用(skills 已在本地)
|
|
@@ -54,13 +69,14 @@
|
|
|
54
69
|
|
|
55
70
|
MCP 服务启动时,skills 会自动同步到用户项目:
|
|
56
71
|
|
|
57
|
-
1. **首次启动**:自动同步推荐的 skills
|
|
72
|
+
1. **首次启动**:自动同步推荐的 skills
|
|
58
73
|
2. **后续启动**:检测版本差异,自动增量更新
|
|
59
|
-
3.
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
74
|
+
3. **同步位置**(根据 `--ide` 参数):
|
|
75
|
+
|
|
76
|
+
| IDE | Skills | Rules | Version |
|
|
77
|
+
|-----|--------|-------|---------|
|
|
78
|
+
| Cursor (默认) | `.cursor/skills/` | `.cursor/rules/bkui.mdc` | `.cursor/.bkui-knowledge-version` |
|
|
79
|
+
| CodeBuddy | `.codebuddy/skills/` | `.codebuddy/rules/bkui.mdc` | `.codebuddy/.bkui-knowledge-version` |
|
|
64
80
|
|
|
65
81
|
**更新机制**:
|
|
66
82
|
- skills 内置在 npm 包中
|
|
@@ -309,16 +325,19 @@ npm run test:server # 测试 MCP 服务器功能
|
|
|
309
325
|
## 常见问题
|
|
310
326
|
|
|
311
327
|
### Q: 如何查看所有可用资源?
|
|
312
|
-
A: 让 AI 调用 `get_knowledge_index()
|
|
328
|
+
A: 让 AI 调用 `get_knowledge_index()`,规则已自动注入到对应 IDE 的 rules 目录
|
|
313
329
|
|
|
314
330
|
### Q: 设计稿还原效果不好?
|
|
315
331
|
A: 使用 `@BKUI-EXPERT`,它会引导 AI 按完整流程执行
|
|
316
332
|
|
|
317
333
|
### Q: 知识库更新了怎么办?
|
|
318
|
-
A: 发布新版本 npm 包后,用户下次启动
|
|
334
|
+
A: 发布新版本 npm 包后,用户下次启动 IDE 时 `npx -y` 会自动拉取最新版本
|
|
319
335
|
|
|
320
336
|
### Q: skills 没有同步成功?
|
|
321
|
-
A:
|
|
337
|
+
A: 检查对应 IDE 的 skills 目录是否存在(Cursor: `.cursor/skills/`,CodeBuddy: `.codebuddy/skills/`),或查看 IDE 的 MCP 日志
|
|
338
|
+
|
|
339
|
+
### Q: 如何切换到 CodeBuddy?
|
|
340
|
+
A: 在 MCP 配置的 args 中添加 `--ide=codebuddy` 参数
|
|
322
341
|
|
|
323
342
|
---
|
|
324
343
|
|
package/bin/bkui-knowledge.js
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
* 2. 启动 MCP stdio 服务
|
|
8
8
|
*
|
|
9
9
|
* 用法(用户只需配置一次):
|
|
10
|
+
*
|
|
11
|
+
* Cursor(默认):
|
|
10
12
|
* {
|
|
11
13
|
* "mcpServers": {
|
|
12
14
|
* "bkui-knowledge": {
|
|
@@ -16,6 +18,18 @@
|
|
|
16
18
|
* }
|
|
17
19
|
* }
|
|
18
20
|
*
|
|
21
|
+
* CodeBuddy:
|
|
22
|
+
* {
|
|
23
|
+
* "bkui-knowledge": {
|
|
24
|
+
* "command": "npx",
|
|
25
|
+
* "args": ["-y", "@blueking/bkui-knowledge", "${workspaceFolder}", "--ide=codebuddy"]
|
|
26
|
+
* }
|
|
27
|
+
* }
|
|
28
|
+
*
|
|
29
|
+
* 参数说明:
|
|
30
|
+
* - 第一个非 -- 开头的参数: 项目路径
|
|
31
|
+
* - --ide=cursor|codebuddy: 指定目标 IDE(默认 cursor)
|
|
32
|
+
*
|
|
19
33
|
* 项目路径传递方式(优先级从高到低):
|
|
20
34
|
* 1. 命令行参数: npx @blueking/bkui-knowledge /path/to/project
|
|
21
35
|
* 2. 环境变量: BKUI_PROJECT_ROOT=/path/to/project
|
|
@@ -30,12 +44,20 @@
|
|
|
30
44
|
const fs = require('fs');
|
|
31
45
|
const path = require('path');
|
|
32
46
|
|
|
33
|
-
//
|
|
34
|
-
const
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
47
|
+
// IDE 配置映射
|
|
48
|
+
const IDE_CONFIGS = {
|
|
49
|
+
cursor: {
|
|
50
|
+
name: 'Cursor',
|
|
51
|
+
configDir: '.cursor',
|
|
52
|
+
skillsDir: '.cursor/skills',
|
|
53
|
+
versionFile: '.cursor/.bkui-knowledge-version'
|
|
54
|
+
},
|
|
55
|
+
codebuddy: {
|
|
56
|
+
name: 'CodeBuddy',
|
|
57
|
+
configDir: '.codebuddy',
|
|
58
|
+
skillsDir: '.codebuddy/skills',
|
|
59
|
+
versionFile: '.codebuddy/.bkui-knowledge-version'
|
|
60
|
+
}
|
|
39
61
|
};
|
|
40
62
|
|
|
41
63
|
// npm 包根目录
|
|
@@ -46,14 +68,40 @@ function log(msg) {
|
|
|
46
68
|
process.stderr.write(`[BKUI-Knowledge] ${msg}\n`);
|
|
47
69
|
}
|
|
48
70
|
|
|
71
|
+
/**
|
|
72
|
+
* 解析 --ide 参数,获取目标 IDE
|
|
73
|
+
* @returns {string} IDE 标识符 (cursor | codebuddy)
|
|
74
|
+
*/
|
|
75
|
+
function getTargetIDE() {
|
|
76
|
+
const ideArg = process.argv.find(arg => arg.startsWith('--ide='));
|
|
77
|
+
if (ideArg) {
|
|
78
|
+
const ide = ideArg.split('=')[1].toLowerCase();
|
|
79
|
+
if (IDE_CONFIGS[ide]) {
|
|
80
|
+
return ide;
|
|
81
|
+
}
|
|
82
|
+
log(`警告: 未知 IDE "${ide}",使用默认值 cursor`);
|
|
83
|
+
}
|
|
84
|
+
return 'cursor'; // 默认使用 Cursor
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* 获取当前 IDE 配置
|
|
89
|
+
* @returns {object} IDE 配置对象
|
|
90
|
+
*/
|
|
91
|
+
function getIDEConfig() {
|
|
92
|
+
const ide = getTargetIDE();
|
|
93
|
+
return IDE_CONFIGS[ide];
|
|
94
|
+
}
|
|
95
|
+
|
|
49
96
|
/**
|
|
50
97
|
* 获取用户项目根目录
|
|
51
98
|
* 优先级:命令行参数 > 环境变量 > cwd
|
|
52
99
|
*/
|
|
53
100
|
function getProjectRoot() {
|
|
54
|
-
// 1. 命令行参数: node bkui-knowledge.js /path/to/project
|
|
55
|
-
|
|
56
|
-
|
|
101
|
+
// 1. 命令行参数: node bkui-knowledge.js /path/to/project (过滤掉 -- 开头的参数)
|
|
102
|
+
const pathArg = process.argv.slice(2).find(arg => !arg.startsWith('-'));
|
|
103
|
+
if (pathArg) {
|
|
104
|
+
return pathArg;
|
|
57
105
|
}
|
|
58
106
|
// 2. 环境变量: BKUI_PROJECT_ROOT=/path/to/project
|
|
59
107
|
if (process.env.BKUI_PROJECT_ROOT) {
|
|
@@ -77,9 +125,12 @@ function getPackageVersion() {
|
|
|
77
125
|
|
|
78
126
|
/**
|
|
79
127
|
* 检查是否需要同步
|
|
128
|
+
* @param {string} projectRoot - 项目根目录
|
|
129
|
+
* @param {string} currentVersion - 当前版本
|
|
130
|
+
* @param {object} ideConfig - IDE 配置
|
|
80
131
|
*/
|
|
81
|
-
function needsSync(projectRoot, currentVersion) {
|
|
82
|
-
const versionFile = path.join(projectRoot,
|
|
132
|
+
function needsSync(projectRoot, currentVersion, ideConfig) {
|
|
133
|
+
const versionFile = path.join(projectRoot, ideConfig.versionFile);
|
|
83
134
|
if (!fs.existsSync(versionFile)) {
|
|
84
135
|
return true;
|
|
85
136
|
}
|
|
@@ -87,71 +138,12 @@ function needsSync(projectRoot, currentVersion) {
|
|
|
87
138
|
return localVersion !== currentVersion;
|
|
88
139
|
}
|
|
89
140
|
|
|
90
|
-
/**
|
|
91
|
-
* 生成 Cursor Rules 文件(自动注入 AI 上下文)
|
|
92
|
-
*/
|
|
93
|
-
function generateRules(projectRoot, manifest) {
|
|
94
|
-
const rulesDir = path.join(projectRoot, CONFIG.rulesDir);
|
|
95
|
-
fs.mkdirSync(rulesDir, { recursive: true });
|
|
96
|
-
|
|
97
|
-
const skillList = manifest.skills.items.map(s => `| ${s.id} | ${s.name} |`).join('\n');
|
|
98
|
-
const apiPriority = manifest.componentApis.priority.map(n => `bk-${n}`).join(', ');
|
|
99
|
-
const allApis = manifest.componentApis.items.map(a => a.id).join(', ');
|
|
100
|
-
const recommendedSkills = manifest.recommendedSkills || [];
|
|
101
|
-
|
|
102
|
-
const rulesContent = `---
|
|
103
|
-
description: BKUI 蓝鲸前端知识库规则(自动注入)
|
|
104
|
-
globs: ["**/*.vue", "**/*.ts", "**/*.tsx"]
|
|
105
|
-
---
|
|
106
|
-
|
|
107
|
-
# BKUI 蓝鲸前端技术规范
|
|
108
|
-
|
|
109
|
-
你是蓝鲸前端技术专家,拥有团队知识库访问权限。采用**渐进式披露架构**。
|
|
110
|
-
|
|
111
|
-
## ✅ Skills 已自动同步
|
|
112
|
-
|
|
113
|
-
推荐的 skills 已自动同步到 \`.cursor/skills/\` 目录:
|
|
114
|
-
${recommendedSkills.map(id => `- ${id}`).join('\n')}
|
|
115
|
-
|
|
116
|
-
## 可用资源索引
|
|
117
|
-
|
|
118
|
-
### Skills (调用 get_skill 获取详情)
|
|
119
|
-
| ID | 名称 |
|
|
120
|
-
|----|------|
|
|
121
|
-
${skillList}
|
|
122
|
-
|
|
123
|
-
> 💡 bkui-builder 包含布局模版和页面模版 (assets/)
|
|
124
|
-
|
|
125
|
-
### Component APIs (调用 get_component_api 获取文档)
|
|
126
|
-
⚠️ **高优先级 (必须先查询):** ${apiPriority}
|
|
127
|
-
|
|
128
|
-
全部组件: ${allApis}
|
|
129
|
-
|
|
130
|
-
## 工作流程
|
|
131
|
-
1. 分析需求 → 确定需要哪些资源
|
|
132
|
-
2. 使用布局组件? → get_component_api({ componentName: 'navigation' })
|
|
133
|
-
3. 需要模板代码? → get_skill({ skillId: 'bkui-builder' })
|
|
134
|
-
4. 批量获取? → batch_load({ skillIds: [...], componentNames: [...] })
|
|
135
|
-
|
|
136
|
-
## 强制规范
|
|
137
|
-
- 组件库: bkui-vue (前缀 bk-)
|
|
138
|
-
- 语法: Vue 3 <script setup lang="ts">
|
|
139
|
-
- 布局: 必须使用 bk-navigation
|
|
140
|
-
|
|
141
|
-
## 常见错误 (必须避免)
|
|
142
|
-
❌ <bk-navigation :default-open-keys> → ✅ default-open
|
|
143
|
-
❌ <bk-menu :default-open-keys> → ✅ :opened-keys
|
|
144
|
-
❌ <bk-dialog v-model> → ✅ v-model:isShow
|
|
145
|
-
`;
|
|
146
|
-
|
|
147
|
-
fs.writeFileSync(path.join(rulesDir, 'bkui.mdc'), rulesContent, 'utf-8');
|
|
148
|
-
log(' ✓ .cursor/rules/bkui.mdc (规则自动注入)');
|
|
149
|
-
}
|
|
150
|
-
|
|
151
141
|
/**
|
|
152
142
|
* 同步 skills 到用户项目(从 npm 包内置的 knowledge 目录)
|
|
143
|
+
* @param {string} projectRoot - 项目根目录
|
|
144
|
+
* @param {object} ideConfig - IDE 配置
|
|
153
145
|
*/
|
|
154
|
-
function syncSkills(projectRoot) {
|
|
146
|
+
function syncSkills(projectRoot, ideConfig) {
|
|
155
147
|
try {
|
|
156
148
|
const manifestPath = path.join(PKG_ROOT, 'knowledge/manifest.json');
|
|
157
149
|
|
|
@@ -166,18 +158,16 @@ function syncSkills(projectRoot) {
|
|
|
166
158
|
const version = `${pkgVersion}-${manifest.updated_at || 'unknown'}`;
|
|
167
159
|
|
|
168
160
|
// 检查是否需要同步
|
|
169
|
-
if (!needsSync(projectRoot, version)) {
|
|
170
|
-
log(`skills 已是最新版本 (v${pkgVersion})`);
|
|
161
|
+
if (!needsSync(projectRoot, version, ideConfig)) {
|
|
162
|
+
log(`[${ideConfig.name}] skills 已是最新版本 (v${pkgVersion})`);
|
|
171
163
|
return;
|
|
172
164
|
}
|
|
173
165
|
|
|
174
|
-
log(
|
|
166
|
+
log(`[${ideConfig.name}] 同步 skills (v${pkgVersion})...`);
|
|
175
167
|
|
|
176
168
|
// 创建目录
|
|
177
|
-
const skillsDir = path.join(projectRoot,
|
|
178
|
-
const commandsDir = path.join(projectRoot, CONFIG.commandsDir);
|
|
169
|
+
const skillsDir = path.join(projectRoot, ideConfig.skillsDir);
|
|
179
170
|
fs.mkdirSync(skillsDir, { recursive: true });
|
|
180
|
-
fs.mkdirSync(commandsDir, { recursive: true });
|
|
181
171
|
|
|
182
172
|
// 同步推荐的 skills
|
|
183
173
|
let count = 0;
|
|
@@ -190,23 +180,19 @@ function syncSkills(projectRoot) {
|
|
|
190
180
|
|
|
191
181
|
const content = fs.readFileSync(skillFilePath, 'utf-8');
|
|
192
182
|
fs.writeFileSync(path.join(skillsDir, `${skillId}.md`), content, 'utf-8');
|
|
193
|
-
fs.writeFileSync(path.join(commandsDir, `${skillId}.md`), `请加载使用 ${skillId} skill`, 'utf-8');
|
|
194
183
|
|
|
195
184
|
log(` ✓ ${skillId}`);
|
|
196
185
|
count++;
|
|
197
186
|
}
|
|
198
187
|
|
|
199
|
-
// 生成 Cursor Rules 文件
|
|
200
|
-
generateRules(projectRoot, manifest);
|
|
201
|
-
|
|
202
188
|
// 保存版本信息
|
|
203
|
-
fs.mkdirSync(path.dirname(path.join(projectRoot,
|
|
204
|
-
fs.writeFileSync(path.join(projectRoot,
|
|
189
|
+
fs.mkdirSync(path.dirname(path.join(projectRoot, ideConfig.versionFile)), { recursive: true });
|
|
190
|
+
fs.writeFileSync(path.join(projectRoot, ideConfig.versionFile), version, 'utf-8');
|
|
205
191
|
|
|
206
|
-
log(
|
|
192
|
+
log(`[${ideConfig.name}] 同步完成!共 ${count} 个 skills`);
|
|
207
193
|
|
|
208
194
|
} catch (error) {
|
|
209
|
-
log(
|
|
195
|
+
log(`[${ideConfig.name}] 同步失败: ${error.message}(不影响 MCP 服务)`);
|
|
210
196
|
}
|
|
211
197
|
}
|
|
212
198
|
|
|
@@ -322,12 +308,14 @@ async function startMcpServer() {
|
|
|
322
308
|
*/
|
|
323
309
|
async function main() {
|
|
324
310
|
const projectRoot = getProjectRoot();
|
|
311
|
+
const ideConfig = getIDEConfig();
|
|
325
312
|
|
|
326
|
-
//
|
|
313
|
+
// 调试:输出实际的工作目录和目标 IDE
|
|
327
314
|
log(`工作目录: ${projectRoot}`);
|
|
315
|
+
log(`目标 IDE: ${ideConfig.name}`);
|
|
328
316
|
|
|
329
317
|
// 1. 同步 skills(同步执行,从 npm 包读取)
|
|
330
|
-
syncSkills(projectRoot);
|
|
318
|
+
syncSkills(projectRoot, ideConfig);
|
|
331
319
|
|
|
332
320
|
// 2. 启动 MCP 服务
|
|
333
321
|
await startMcpServer();
|
package/knowledge/manifest.json
CHANGED
|
@@ -107,6 +107,13 @@
|
|
|
107
107
|
"category": "security",
|
|
108
108
|
"path": "nodejs-security-check/SKILL.md",
|
|
109
109
|
"tags": ["security", "nodejs", "backend", "ssrf", "sql-injection"]
|
|
110
|
+
},
|
|
111
|
+
{
|
|
112
|
+
"id": "bkui-quick-start",
|
|
113
|
+
"name": "BKUI 快速入门",
|
|
114
|
+
"category": "engineering",
|
|
115
|
+
"path": "bkui-quick-start/SKILL.md",
|
|
116
|
+
"tags": ["bkui", "规范", "索引", "入门"]
|
|
110
117
|
}
|
|
111
118
|
]
|
|
112
119
|
},
|
|
@@ -663,5 +670,5 @@
|
|
|
663
670
|
]
|
|
664
671
|
},
|
|
665
672
|
|
|
666
|
-
"recommendedSkills": ["bkui-builder", "bkui-cheatsheet", "code-review", "js-security-check"]
|
|
673
|
+
"recommendedSkills": ["bkui-quick-start", "bkui-builder", "bkui-cheatsheet", "code-review", "js-security-check"]
|
|
667
674
|
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# BKUI 快速入门
|
|
2
|
+
|
|
3
|
+
> 蓝鲸前端知识库入口指南,包含规范、索引和工作流程。
|
|
4
|
+
|
|
5
|
+
## 强制规范
|
|
6
|
+
|
|
7
|
+
- **组件库**: bkui-vue (前缀 `bk-`)
|
|
8
|
+
- **语法**: Vue 3 `<script setup lang="ts">`
|
|
9
|
+
- **样式**: MagicBox 原子类 (mt10, mb20)
|
|
10
|
+
- **布局**: 必须使用 `bk-navigation`
|
|
11
|
+
|
|
12
|
+
## 常见错误 (必须避免)
|
|
13
|
+
|
|
14
|
+
| 组件 | 错误写法 | 正确写法 |
|
|
15
|
+
|------|----------|----------|
|
|
16
|
+
| bk-navigation | `:default-open-keys` | `default-open` |
|
|
17
|
+
| bk-menu | `:default-open-keys` | `:opened-keys` |
|
|
18
|
+
| bk-dialog | `v-model` | `v-model:isShow` |
|
|
19
|
+
|
|
20
|
+
## 可用 Skills
|
|
21
|
+
|
|
22
|
+
通过 `get_skill({ skillId: 'xxx' })` 获取详情:
|
|
23
|
+
|
|
24
|
+
| ID | 名称 | 说明 |
|
|
25
|
+
|----|------|------|
|
|
26
|
+
| bkui-builder | 设计稿还原专家 | 包含布局模版和页面模版 (assets/) |
|
|
27
|
+
| bkui-cheatsheet | BKUI 组件速查 | Props 速查、常见坑点 |
|
|
28
|
+
| api-standard | 统一网络请求封装 | Axios 封装规范 |
|
|
29
|
+
| pinia-setup | 全局状态管理 | Pinia Store 模板 |
|
|
30
|
+
| permission-directive | 前端权限控制 | IAM 权限指令 |
|
|
31
|
+
| vite-migration | Webpack 到 Vite 迁移 | 迁移检查脚本 |
|
|
32
|
+
| bundle-optimization | Vite 构建优化 | 性能优化配置 |
|
|
33
|
+
| vue-composables | Vue 3 Composables | 最佳实践和模板 |
|
|
34
|
+
| virtual-list | 长列表虚拟滚动 | 性能优化方案 |
|
|
35
|
+
| unit-testing | 组件单元测试 | Vitest 测试模板 |
|
|
36
|
+
| code-review | 代码评审专家 | 评审规范和检查清单 |
|
|
37
|
+
| js-security-check | JavaScript 安全审查 | 前端安全检查 |
|
|
38
|
+
| nodejs-security-check | Node.js 安全审查 | 后端安全检查 |
|
|
39
|
+
|
|
40
|
+
## Component APIs
|
|
41
|
+
|
|
42
|
+
通过 `get_component_api({ componentName: 'xxx' })` 获取文档:
|
|
43
|
+
|
|
44
|
+
### 高优先级 (必须先查询)
|
|
45
|
+
|
|
46
|
+
- `bk-navigation` - 布局组件,易出错
|
|
47
|
+
- `bk-menu` - 与 navigation 配合
|
|
48
|
+
- `bk-table` - 列表页核心组件
|
|
49
|
+
- `bk-form` - 表单验证
|
|
50
|
+
- `bk-dialog` - v-model:isShow
|
|
51
|
+
|
|
52
|
+
### 全部组件
|
|
53
|
+
|
|
54
|
+
navigation, menu, table, form, dialog, button, input, select, checkbox, radio, date-picker, time-picker, pagination, message, notify, loading, popover, pop-confirm, tag, tag-input, alert, dropdown, tab, cascader, tree, steps, upload, sideslider, breadcrumb, card, collapse, affix, backtop, badge, divider, exception, image, link, progress, rate, slider, switcher, timeline, process, transfer, search-select, color-picker, container, resize-layout, fixed-navbar, code-diff, swiper, animate-number, overflow-title, virtual-render, scrollbar, info-box, config-provider
|
|
55
|
+
|
|
56
|
+
## 工作流程
|
|
57
|
+
|
|
58
|
+
1. **分析需求** → 确定需要哪些资源
|
|
59
|
+
2. **使用布局组件?** → `get_component_api({ componentName: 'navigation' })`
|
|
60
|
+
3. **需要模板代码?** → `get_skill({ skillId: 'bkui-builder' })`
|
|
61
|
+
4. **批量获取?** → `batch_load({ skillIds: [...], componentNames: [...] })`
|
|
62
|
+
|
|
63
|
+
## 触发条件
|
|
64
|
+
|
|
65
|
+
遇到以下关键词时,应主动使用本知识库:
|
|
66
|
+
- bk-navigation, bk-menu, bk-table, bk-form, bk-dialog 等 bk- 前缀组件
|
|
67
|
+
- bkui-vue, 蓝鲸组件库, MagicBox, 蓝鲸前端
|
|
68
|
+
- 设计稿还原, 管理后台页面
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blueking/bkui-knowledge",
|
|
3
|
-
"version": "0.0.1-beta.
|
|
4
|
-
"description": "蓝鲸前端知识库 MCP 服务 - 自动同步 skills,支持 Cursor/
|
|
3
|
+
"version": "0.0.1-beta.5",
|
|
4
|
+
"description": "蓝鲸前端知识库 MCP 服务 - 自动同步 skills,支持 Cursor/CodeBuddy",
|
|
5
5
|
"main": "server/mcp-core.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"bkui-knowledge": "./bin/bkui-knowledge.js"
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"repository": {
|
|
21
21
|
"type": "git"
|
|
22
22
|
},
|
|
23
|
-
"keywords": ["mcp", "cursor", "ai", "knowledge-base", "bkui", "vue3"],
|
|
23
|
+
"keywords": ["mcp", "cursor", "codebuddy", "ai", "knowledge-base", "bkui", "vue3"],
|
|
24
24
|
"author": "ielgnaw",
|
|
25
25
|
"license": "ISC"
|
|
26
26
|
}
|
package/server/mcp-core.js
CHANGED
|
@@ -21,31 +21,17 @@ const KNOWLEDGE_DIR = path.join(ROOT_DIR, 'knowledge');
|
|
|
21
21
|
// 重要: 工具描述会被自动注入到 AI 上下文,因此在此嵌入核心规则
|
|
22
22
|
// ---------------------------------------------------------
|
|
23
23
|
const TOOLS = [
|
|
24
|
-
// L0 工具: 获取索引
|
|
24
|
+
// L0 工具: 获取索引
|
|
25
25
|
{
|
|
26
26
|
name: "get_knowledge_index",
|
|
27
|
-
description:
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
## 强制规范
|
|
36
|
-
- 组件库: bkui-vue (前缀 bk-)
|
|
37
|
-
- 语法: Vue 3 <script setup lang="ts">
|
|
38
|
-
- 样式: MagicBox 原子类 (mt10, mb20)
|
|
39
|
-
|
|
40
|
-
## ⚠️ 常见错误
|
|
41
|
-
- bk-navigation 用 default-open,不是 default-open-keys
|
|
42
|
-
- bk-menu 用 opened-keys,不是 default-open-keys
|
|
43
|
-
- bk-dialog 用 v-model:isShow,不是 v-model
|
|
44
|
-
|
|
45
|
-
## 工作流程
|
|
46
|
-
1. 使用 bk- 组件前,先调用 get_component_api 获取 API
|
|
47
|
-
2. 需要页面模板时,调用 get_skill({ skillId: 'bkui-builder' }) 获取规则
|
|
48
|
-
3. 根据布局分析报告按需加载模版资源`,
|
|
27
|
+
description: `【蓝鲸前端知识库】遇到 bk- 组件、bkui-vue、蓝鲸组件库时必须使用。
|
|
28
|
+
|
|
29
|
+
首次使用时,请先读取 .cursor/skills/bkui-quick-start.md 获取完整规范和索引。
|
|
30
|
+
|
|
31
|
+
快速参考:
|
|
32
|
+
- bk-dialog 用 v-model:isShow(不是 v-model)
|
|
33
|
+
- bk-menu 用 opened-keys(不是 default-open-keys)
|
|
34
|
+
- bk-navigation 用 default-open(不是 default-open-keys)`,
|
|
49
35
|
inputSchema: {
|
|
50
36
|
type: "object",
|
|
51
37
|
properties: {
|
|
@@ -61,7 +47,7 @@ const TOOLS = [
|
|
|
61
47
|
// L1 工具: 获取 Skill 详情
|
|
62
48
|
{
|
|
63
49
|
name: "get_skill",
|
|
64
|
-
description: "获取技能文档 (Markdown)。可用 ID: bkui-builder(设计稿还原),
|
|
50
|
+
description: "获取技能文档 (Markdown)。可用 ID: bkui-quick-start(入门指南), bkui-builder(设计稿还原), bkui-cheatsheet(速查表), api-standard(请求封装), pinia-setup(状态管理), vite-migration(Vite迁移), bundle-optimization(构建优化), virtual-list(虚拟滚动), unit-testing(单测), code-review(代码评审)",
|
|
65
51
|
inputSchema: {
|
|
66
52
|
type: "object",
|
|
67
53
|
properties: {
|
|
@@ -447,7 +433,6 @@ ${recommendedIds.map(id => {
|
|
|
447
433
|
### 同步位置
|
|
448
434
|
|
|
449
435
|
- \`.cursor/skills/*.md\` - 技能文档
|
|
450
|
-
- \`.cursor/commands/*.md\` - 斜杠指令 (可通过 /${recommendedIds[0]} 调用)
|
|
451
436
|
- \`.cursor/rules/bkui.mdc\` - 规则文件 (自动注入 AI 上下文)
|
|
452
437
|
- \`.cursor/.bkui-knowledge-version\` - 版本标记
|
|
453
438
|
|