mcp-probe-kit 1.13.0 → 1.15.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 +54 -3
- package/build/index.js +14 -1
- package/build/schemas/index.d.ts +108 -0
- package/build/schemas/index.js +2 -0
- package/build/schemas/ui-ux-schemas.d.ts +248 -0
- package/build/schemas/ui-ux-schemas.js +147 -0
- package/build/tools/__tests__/start_ui.integration.test.d.ts +6 -0
- package/build/tools/__tests__/start_ui.integration.test.js +179 -0
- package/build/tools/__tests__/start_ui.property.test.d.ts +6 -0
- package/build/tools/__tests__/start_ui.property.test.js +263 -0
- package/build/tools/__tests__/start_ui.unit.test.d.ts +6 -0
- package/build/tools/__tests__/start_ui.unit.test.js +109 -0
- package/build/tools/index.d.ts +4 -0
- package/build/tools/index.js +5 -0
- package/build/tools/init_component_catalog.d.ts +22 -0
- package/build/tools/init_component_catalog.js +809 -0
- package/build/tools/render_ui.d.ts +22 -0
- package/build/tools/render_ui.js +384 -0
- package/build/tools/start_ui.d.ts +25 -0
- package/build/tools/start_ui.js +299 -0
- package/build/tools/ui-ux-tools.d.ts +116 -0
- package/build/tools/ui-ux-tools.js +756 -0
- package/build/tools/ui-ux-tools.test.d.ts +6 -0
- package/build/tools/ui-ux-tools.test.js +132 -0
- package/build/utils/ascii-box-formatter.d.ts +29 -0
- package/build/utils/ascii-box-formatter.js +195 -0
- package/build/utils/bm25.d.ts +60 -0
- package/build/utils/bm25.js +139 -0
- package/build/utils/cache-manager.d.ts +65 -0
- package/build/utils/cache-manager.js +156 -0
- package/build/utils/design-reasoning-engine.d.ts +158 -0
- package/build/utils/design-reasoning-engine.js +363 -0
- package/build/utils/design-system-json-formatter.d.ts +41 -0
- package/build/utils/design-system-json-formatter.js +165 -0
- package/build/utils/ui-data-loader.d.ts +56 -0
- package/build/utils/ui-data-loader.js +164 -0
- package/build/utils/ui-search-engine.d.ts +57 -0
- package/build/utils/ui-search-engine.js +123 -0
- package/build/utils/ui-sync.d.ts +13 -0
- package/build/utils/ui-sync.js +241 -0
- package/docs/BEST_PRACTICES.md +257 -1
- package/docs/HOW_TO_TRIGGER.md +71 -1
- package/docs/MCP-Probe-Kit-/344/275/277/347/224/250/346/211/213/345/206/214.html +89 -29
- package/docs/MCP-Probe-Kit-/344/275/277/347/224/250/346/211/213/345/206/214.md +582 -1
- package/package.json +19 -6
- package/docs/HOW_TO_TRIGGER.html +0 -255
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* UI/UX 数据同步工具
|
|
3
|
+
*
|
|
4
|
+
* 从 npm 包 uipro-cli 同步数据到缓存目录
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from 'fs';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as os from 'os';
|
|
9
|
+
import * as https from 'https';
|
|
10
|
+
import * as tar from 'tar';
|
|
11
|
+
import { createWriteStream } from 'fs';
|
|
12
|
+
import { parse as parseCSV } from 'csv-parse/sync';
|
|
13
|
+
/**
|
|
14
|
+
* 获取 npm 包的最新版本号
|
|
15
|
+
*/
|
|
16
|
+
async function getLatestVersion(packageName) {
|
|
17
|
+
return new Promise((resolve, reject) => {
|
|
18
|
+
const url = `https://registry.npmjs.org/${packageName}/latest`;
|
|
19
|
+
https.get(url, (res) => {
|
|
20
|
+
let data = '';
|
|
21
|
+
res.on('data', (chunk) => {
|
|
22
|
+
data += chunk;
|
|
23
|
+
});
|
|
24
|
+
res.on('end', () => {
|
|
25
|
+
try {
|
|
26
|
+
const pkg = JSON.parse(data);
|
|
27
|
+
resolve(pkg.version);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
reject(new Error(`Failed to parse package metadata: ${error}`));
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}).on('error', (error) => {
|
|
34
|
+
reject(new Error(`Failed to fetch package metadata: ${error}`));
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* 下载文件
|
|
40
|
+
*/
|
|
41
|
+
async function downloadFile(url, outputPath) {
|
|
42
|
+
return new Promise((resolve, reject) => {
|
|
43
|
+
https.get(url, (res) => {
|
|
44
|
+
if (res.statusCode === 302 || res.statusCode === 301) {
|
|
45
|
+
if (res.headers.location) {
|
|
46
|
+
downloadFile(res.headers.location, outputPath).then(resolve).catch(reject);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (res.statusCode !== 200) {
|
|
51
|
+
reject(new Error(`Failed to download: HTTP ${res.statusCode}`));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const fileStream = createWriteStream(outputPath);
|
|
55
|
+
res.pipe(fileStream);
|
|
56
|
+
fileStream.on('finish', () => {
|
|
57
|
+
fileStream.close();
|
|
58
|
+
resolve();
|
|
59
|
+
});
|
|
60
|
+
fileStream.on('error', (error) => {
|
|
61
|
+
fs.unlinkSync(outputPath);
|
|
62
|
+
reject(error);
|
|
63
|
+
});
|
|
64
|
+
}).on('error', (error) => {
|
|
65
|
+
reject(error);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 解压 tarball 并提取指定目录
|
|
71
|
+
*/
|
|
72
|
+
async function extractTarball(tarballPath, extractPath, targetDir) {
|
|
73
|
+
const tempDir = path.join(extractPath, '.temp');
|
|
74
|
+
if (!fs.existsSync(tempDir)) {
|
|
75
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
76
|
+
}
|
|
77
|
+
await tar.extract({
|
|
78
|
+
file: tarballPath,
|
|
79
|
+
cwd: tempDir,
|
|
80
|
+
});
|
|
81
|
+
const sourceDir = path.join(tempDir, targetDir);
|
|
82
|
+
if (!fs.existsSync(sourceDir)) {
|
|
83
|
+
throw new Error(`Target directory not found in tarball: ${targetDir}`);
|
|
84
|
+
}
|
|
85
|
+
return sourceDir;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 转换 CSV 到 JSON
|
|
89
|
+
*/
|
|
90
|
+
function convertCSVToJSON(csvContent, filename) {
|
|
91
|
+
try {
|
|
92
|
+
const records = parseCSV(csvContent, {
|
|
93
|
+
columns: true,
|
|
94
|
+
skip_empty_lines: true,
|
|
95
|
+
trim: true,
|
|
96
|
+
relax_quotes: true,
|
|
97
|
+
relax_column_count: true,
|
|
98
|
+
escape: '\\',
|
|
99
|
+
quote: '"',
|
|
100
|
+
skip_records_with_error: true,
|
|
101
|
+
});
|
|
102
|
+
return records;
|
|
103
|
+
}
|
|
104
|
+
catch (error) {
|
|
105
|
+
console.warn(`Warning: Failed to parse ${filename}, skipping: ${error}`);
|
|
106
|
+
return [];
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 处理数据文件
|
|
111
|
+
*/
|
|
112
|
+
async function processDataFiles(sourceDir, outputDir, verbose) {
|
|
113
|
+
if (!fs.existsSync(outputDir)) {
|
|
114
|
+
fs.mkdirSync(outputDir, { recursive: true });
|
|
115
|
+
}
|
|
116
|
+
const files = fs.readdirSync(sourceDir);
|
|
117
|
+
for (const file of files) {
|
|
118
|
+
const sourcePath = path.join(sourceDir, file);
|
|
119
|
+
const stat = fs.statSync(sourcePath);
|
|
120
|
+
if (stat.isDirectory()) {
|
|
121
|
+
const subOutputDir = path.join(outputDir, file);
|
|
122
|
+
await processDataFiles(sourcePath, subOutputDir, verbose);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
if (!file.endsWith('.csv')) {
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
if (verbose) {
|
|
129
|
+
console.log(`Processing: ${file}`);
|
|
130
|
+
}
|
|
131
|
+
const csvContent = fs.readFileSync(sourcePath, 'utf-8');
|
|
132
|
+
const jsonData = convertCSVToJSON(csvContent, file);
|
|
133
|
+
if (jsonData.length === 0) {
|
|
134
|
+
if (verbose) {
|
|
135
|
+
console.log(` ⚠️ Skipped ${file} (no valid records)`);
|
|
136
|
+
}
|
|
137
|
+
continue;
|
|
138
|
+
}
|
|
139
|
+
const outputFile = file.replace('.csv', '.json');
|
|
140
|
+
const outputPath = path.join(outputDir, outputFile);
|
|
141
|
+
fs.writeFileSync(outputPath, JSON.stringify(jsonData, null, 2), 'utf-8');
|
|
142
|
+
if (verbose) {
|
|
143
|
+
console.log(` → ${outputFile} (${jsonData.length} records)`);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 写入元数据
|
|
149
|
+
*/
|
|
150
|
+
function writeMetadata(outputDir, metadata) {
|
|
151
|
+
const metadataPath = path.join(outputDir, 'metadata.json');
|
|
152
|
+
fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2), 'utf-8');
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* 清理临时文件
|
|
156
|
+
*/
|
|
157
|
+
function cleanup(tempDir) {
|
|
158
|
+
if (fs.existsSync(tempDir)) {
|
|
159
|
+
fs.rmSync(tempDir, { recursive: true, force: true });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* 同步 UI/UX 数据到指定目录(通用函数)
|
|
164
|
+
*/
|
|
165
|
+
export async function syncUIDataTo(outputDir, verbose = false) {
|
|
166
|
+
const packageName = 'uipro-cli';
|
|
167
|
+
if (verbose) {
|
|
168
|
+
console.log('🚀 Starting UI/UX data sync...\n');
|
|
169
|
+
}
|
|
170
|
+
try {
|
|
171
|
+
// 1. 获取最新版本
|
|
172
|
+
if (verbose) {
|
|
173
|
+
console.log(`Fetching latest version of ${packageName}...`);
|
|
174
|
+
}
|
|
175
|
+
const latestVersion = await getLatestVersion(packageName);
|
|
176
|
+
if (verbose) {
|
|
177
|
+
console.log(`✓ Latest version: ${latestVersion}\n`);
|
|
178
|
+
}
|
|
179
|
+
// 2. 下载 tarball
|
|
180
|
+
const tarballUrl = `https://registry.npmjs.org/${packageName}/-/${packageName}-${latestVersion}.tgz`;
|
|
181
|
+
const tempDir = path.join(os.tmpdir(), '.mcp-ui-sync');
|
|
182
|
+
const tarballPath = path.join(tempDir, 'package.tgz');
|
|
183
|
+
if (!fs.existsSync(tempDir)) {
|
|
184
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
185
|
+
}
|
|
186
|
+
if (verbose) {
|
|
187
|
+
console.log(`Downloading tarball...`);
|
|
188
|
+
}
|
|
189
|
+
await downloadFile(tarballUrl, tarballPath);
|
|
190
|
+
if (verbose) {
|
|
191
|
+
console.log('✓ Downloaded tarball\n');
|
|
192
|
+
}
|
|
193
|
+
// 3. 解压并提取数据
|
|
194
|
+
if (verbose) {
|
|
195
|
+
console.log('Extracting data files...');
|
|
196
|
+
}
|
|
197
|
+
const extractedDataDir = await extractTarball(tarballPath, tempDir, 'package/assets/data');
|
|
198
|
+
if (verbose) {
|
|
199
|
+
console.log('✓ Extracted data files\n');
|
|
200
|
+
}
|
|
201
|
+
// 4. 处理数据文件
|
|
202
|
+
if (verbose) {
|
|
203
|
+
console.log('Processing data files...');
|
|
204
|
+
}
|
|
205
|
+
await processDataFiles(extractedDataDir, outputDir, verbose);
|
|
206
|
+
if (verbose) {
|
|
207
|
+
console.log('✓ Processed all data files\n');
|
|
208
|
+
}
|
|
209
|
+
// 5. 写入元数据
|
|
210
|
+
const metadata = {
|
|
211
|
+
version: latestVersion,
|
|
212
|
+
syncedAt: new Date().toISOString(),
|
|
213
|
+
source: packageName,
|
|
214
|
+
format: 'json',
|
|
215
|
+
};
|
|
216
|
+
writeMetadata(outputDir, metadata);
|
|
217
|
+
if (verbose) {
|
|
218
|
+
console.log('✓ Written metadata\n');
|
|
219
|
+
}
|
|
220
|
+
// 6. 清理临时文件
|
|
221
|
+
cleanup(tempDir);
|
|
222
|
+
if (verbose) {
|
|
223
|
+
console.log('✓ Cleaned up temporary files\n');
|
|
224
|
+
console.log('✅ Sync completed successfully!');
|
|
225
|
+
console.log(` Version: ${latestVersion}`);
|
|
226
|
+
console.log(` Output: ${outputDir}`);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
const tempDir = path.join(os.tmpdir(), '.mcp-ui-sync');
|
|
231
|
+
cleanup(tempDir);
|
|
232
|
+
throw error;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* 同步 UI/UX 数据到缓存
|
|
237
|
+
*/
|
|
238
|
+
export async function syncUIDataToCache(force = false, verbose = false) {
|
|
239
|
+
const cacheDir = path.join(os.homedir(), '.mcp-probe-kit', 'ui-ux-data');
|
|
240
|
+
await syncUIDataTo(cacheDir, verbose);
|
|
241
|
+
}
|
package/docs/BEST_PRACTICES.md
CHANGED
|
@@ -2,11 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
> 完整的工具调用指南和使用技巧
|
|
4
4
|
|
|
5
|
+
**版本**: v1.14.0 | **工具总数**: 46 个
|
|
6
|
+
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
## 📖 目录
|
|
8
10
|
|
|
9
11
|
- [工具调用写法指南](#工具调用写法指南)
|
|
12
|
+
- [UI/UX 工具调用](#uiux-工具调用) 🆕
|
|
13
|
+
- [访谈工具调用](#访谈工具调用)
|
|
10
14
|
- [基础工具调用](#基础工具调用)
|
|
11
15
|
- [智能编排调用](#智能编排调用)
|
|
12
16
|
- [使用技巧](#使用技巧)
|
|
@@ -17,7 +21,90 @@
|
|
|
17
21
|
|
|
18
22
|
## 🎯 工具调用写法指南
|
|
19
23
|
|
|
20
|
-
###
|
|
24
|
+
### UI/UX 工具调用 🆕
|
|
25
|
+
|
|
26
|
+
#### ui_design_system - 设计系统生成
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
# 方式 1:最简单(只指定技术栈)
|
|
30
|
+
ui_design_system --stack react
|
|
31
|
+
|
|
32
|
+
# 方式 2:指定主色调
|
|
33
|
+
ui_design_system --stack react --primary-color "#3b82f6"
|
|
34
|
+
|
|
35
|
+
# 方式 3:完整配置
|
|
36
|
+
ui_design_system \
|
|
37
|
+
--stack nextjs \
|
|
38
|
+
--color-scheme light \
|
|
39
|
+
--primary-color "#3b82f6" \
|
|
40
|
+
--typography modern \
|
|
41
|
+
--spacing normal \
|
|
42
|
+
--border-radius medium
|
|
43
|
+
|
|
44
|
+
# 方式 4:对话式
|
|
45
|
+
"帮我生成一个 React 设计系统,主色调用蓝色"
|
|
46
|
+
"为我的 Tailwind 项目生成配置"
|
|
47
|
+
|
|
48
|
+
# 自动完成:
|
|
49
|
+
# ✓ 生成完整的色彩系统(11 级色阶)
|
|
50
|
+
# ✓ 生成字体系统(Sans/Serif/Mono)
|
|
51
|
+
# ✓ 生成间距系统(基于 4px)
|
|
52
|
+
# ✓ 生成组件样式(圆角、阴影、动画)
|
|
53
|
+
# ✓ 输出可直接使用的代码
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
#### ui_search - UI/UX 智能搜索
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
# 方式 1:简单搜索
|
|
60
|
+
ui_search "button primary"
|
|
61
|
+
|
|
62
|
+
# 方式 2:指定类别
|
|
63
|
+
ui_search "button" --category react
|
|
64
|
+
|
|
65
|
+
# 方式 3:完整配置
|
|
66
|
+
ui_search \
|
|
67
|
+
--query "button primary hover" \
|
|
68
|
+
--category react \
|
|
69
|
+
--limit 5 \
|
|
70
|
+
--min-score 1.0
|
|
71
|
+
|
|
72
|
+
# 方式 4:对话式
|
|
73
|
+
"我需要一个 React 的主按钮组件"
|
|
74
|
+
"搜索一下蓝色主题的配色方案"
|
|
75
|
+
"表单验证有什么 UX 最佳实践?"
|
|
76
|
+
|
|
77
|
+
# 搜索技巧:
|
|
78
|
+
# ✓ 使用具体关键词:"primary button hover" 而不是 "button"
|
|
79
|
+
# ✓ 指定类别:colors, icons, react, vue, ux-guidelines 等
|
|
80
|
+
# ✓ 调整结果数量:--limit 3(快速预览)或 --limit 20(详细搜索)
|
|
81
|
+
# ✓ 支持中英文:可以搜索 "按钮" 或 "button"
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
#### sync_ui_data - 数据同步
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
# 方式 1:检查更新
|
|
88
|
+
sync_ui_data
|
|
89
|
+
|
|
90
|
+
# 方式 2:强制同步
|
|
91
|
+
sync_ui_data --force
|
|
92
|
+
|
|
93
|
+
# 方式 3:详细日志
|
|
94
|
+
sync_ui_data --force --verbose
|
|
95
|
+
|
|
96
|
+
# 方式 4:对话式
|
|
97
|
+
"检查一下 UI 数据有没有更新"
|
|
98
|
+
"强制更新 UI 数据"
|
|
99
|
+
|
|
100
|
+
# 数据位置:
|
|
101
|
+
# ✓ 内嵌数据:npm 包内部(离线可用)
|
|
102
|
+
# ✓ 缓存数据:~/.mcp-probe-kit/ui-ux-data/(自动更新)
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
---
|
|
106
|
+
|
|
107
|
+
### 访谈工具调用
|
|
21
108
|
|
|
22
109
|
#### interview - 需求访谈
|
|
23
110
|
|
|
@@ -918,10 +1005,179 @@ AI: 好的,我来对支付 API 进行全面体检。
|
|
|
918
1005
|
|
|
919
1006
|
---
|
|
920
1007
|
|
|
1008
|
+
## 🎨 UI/UX 工具使用技巧 🆕
|
|
1009
|
+
|
|
1010
|
+
### 设计系统生成技巧
|
|
1011
|
+
|
|
1012
|
+
**1. 新项目启动**
|
|
1013
|
+
```
|
|
1014
|
+
# 步骤 1:生成基础设计系统
|
|
1015
|
+
ui_design_system --stack react
|
|
1016
|
+
|
|
1017
|
+
# 步骤 2:根据需求调整
|
|
1018
|
+
ui_design_system --stack react --primary-color "#3b82f6" --border-radius large
|
|
1019
|
+
|
|
1020
|
+
# 步骤 3:复制生成的代码到项目中
|
|
1021
|
+
```
|
|
1022
|
+
|
|
1023
|
+
**2. 技术栈选择**
|
|
1024
|
+
```
|
|
1025
|
+
# React 项目
|
|
1026
|
+
ui_design_system --stack react
|
|
1027
|
+
|
|
1028
|
+
# Next.js 项目
|
|
1029
|
+
ui_design_system --stack nextjs
|
|
1030
|
+
|
|
1031
|
+
# Tailwind 项目(生成 tailwind.config.js)
|
|
1032
|
+
ui_design_system --stack tailwind
|
|
1033
|
+
|
|
1034
|
+
# Vue 项目
|
|
1035
|
+
ui_design_system --stack vue
|
|
1036
|
+
```
|
|
1037
|
+
|
|
1038
|
+
**3. 主题定制**
|
|
1039
|
+
```
|
|
1040
|
+
# 浅色主题
|
|
1041
|
+
ui_design_system --stack react --color-scheme light
|
|
1042
|
+
|
|
1043
|
+
# 深色主题
|
|
1044
|
+
ui_design_system --stack react --color-scheme dark
|
|
1045
|
+
|
|
1046
|
+
# 自适应主题
|
|
1047
|
+
ui_design_system --stack react --color-scheme auto
|
|
1048
|
+
```
|
|
1049
|
+
|
|
1050
|
+
### UI 搜索技巧
|
|
1051
|
+
|
|
1052
|
+
**1. 组件搜索**
|
|
1053
|
+
```
|
|
1054
|
+
# ❌ 不好:太模糊
|
|
1055
|
+
ui_search "button"
|
|
1056
|
+
|
|
1057
|
+
# ✅ 好:具体明确
|
|
1058
|
+
ui_search "button primary hover effect" --category react
|
|
1059
|
+
|
|
1060
|
+
# ✅ 更好:指定技术栈
|
|
1061
|
+
ui_search "button primary" --category react --limit 5
|
|
1062
|
+
```
|
|
1063
|
+
|
|
1064
|
+
**2. 颜色搜索**
|
|
1065
|
+
```
|
|
1066
|
+
# 搜索配色方案
|
|
1067
|
+
ui_search "blue professional" --category colors
|
|
1068
|
+
|
|
1069
|
+
# 搜索特定用途的颜色
|
|
1070
|
+
ui_search "saas tech primary color" --category colors
|
|
1071
|
+
|
|
1072
|
+
# 搜索完整色阶
|
|
1073
|
+
ui_search "blue gradient" --category colors
|
|
1074
|
+
```
|
|
1075
|
+
|
|
1076
|
+
**3. 最佳实践搜索**
|
|
1077
|
+
```
|
|
1078
|
+
# 搜索 UX 指南
|
|
1079
|
+
ui_search "form validation" --category ux-guidelines
|
|
1080
|
+
|
|
1081
|
+
# 搜索性能优化
|
|
1082
|
+
ui_search "react performance" --category react-performance
|
|
1083
|
+
|
|
1084
|
+
# 搜索设计模式
|
|
1085
|
+
ui_search "card layout" --category web-interface
|
|
1086
|
+
```
|
|
1087
|
+
|
|
1088
|
+
**4. 调整搜索结果**
|
|
1089
|
+
```
|
|
1090
|
+
# 快速预览(3 个结果)
|
|
1091
|
+
ui_search "button" --limit 3
|
|
1092
|
+
|
|
1093
|
+
# 详细搜索(20 个结果)
|
|
1094
|
+
ui_search "button" --limit 20
|
|
1095
|
+
|
|
1096
|
+
# 过滤低相关性结果
|
|
1097
|
+
ui_search "button" --min-score 2.0
|
|
1098
|
+
```
|
|
1099
|
+
|
|
1100
|
+
### 数据同步技巧
|
|
1101
|
+
|
|
1102
|
+
**1. 定期检查**
|
|
1103
|
+
```
|
|
1104
|
+
# 每周检查一次(推荐)
|
|
1105
|
+
sync_ui_data
|
|
1106
|
+
|
|
1107
|
+
# 如果已是最新版本,不会重复下载
|
|
1108
|
+
```
|
|
1109
|
+
|
|
1110
|
+
**2. 遇到问题时**
|
|
1111
|
+
```
|
|
1112
|
+
# 搜索结果不准确?强制更新
|
|
1113
|
+
sync_ui_data --force --verbose
|
|
1114
|
+
|
|
1115
|
+
# 查看详细日志
|
|
1116
|
+
sync_ui_data --verbose
|
|
1117
|
+
```
|
|
1118
|
+
|
|
1119
|
+
**3. 数据位置**
|
|
1120
|
+
```
|
|
1121
|
+
# 内嵌数据(离线可用)
|
|
1122
|
+
位置:npm 包内部
|
|
1123
|
+
更新:重新安装 mcp-probe-kit
|
|
1124
|
+
|
|
1125
|
+
# 缓存数据(自动更新)
|
|
1126
|
+
位置:~/.mcp-probe-kit/ui-ux-data/
|
|
1127
|
+
更新:首次使用时自动检查
|
|
1128
|
+
|
|
1129
|
+
# 手动同步(立即更新)
|
|
1130
|
+
命令:sync_ui_data --force
|
|
1131
|
+
```
|
|
1132
|
+
|
|
1133
|
+
### 组合使用技巧
|
|
1134
|
+
|
|
1135
|
+
**场景 1:新项目完整流程**
|
|
1136
|
+
```
|
|
1137
|
+
# 步骤 1:生成设计系统
|
|
1138
|
+
ui_design_system --stack react --primary-color "#3b82f6"
|
|
1139
|
+
|
|
1140
|
+
# 步骤 2:搜索需要的组件
|
|
1141
|
+
ui_search "button card form" --category react
|
|
1142
|
+
|
|
1143
|
+
# 步骤 3:搜索配色方案
|
|
1144
|
+
ui_search "blue professional" --category colors
|
|
1145
|
+
|
|
1146
|
+
# 步骤 4:应用到项目
|
|
1147
|
+
```
|
|
1148
|
+
|
|
1149
|
+
**场景 2:优化现有项目**
|
|
1150
|
+
```
|
|
1151
|
+
# 步骤 1:搜索最佳实践
|
|
1152
|
+
ui_search "form validation ux" --category ux-guidelines
|
|
1153
|
+
|
|
1154
|
+
# 步骤 2:搜索优化方案
|
|
1155
|
+
ui_search "react performance" --category react-performance
|
|
1156
|
+
|
|
1157
|
+
# 步骤 3:搜索改进的组件
|
|
1158
|
+
ui_search "button loading state" --category react
|
|
1159
|
+
```
|
|
1160
|
+
|
|
1161
|
+
**场景 3:设计系统迁移**
|
|
1162
|
+
```
|
|
1163
|
+
# 步骤 1:生成新的设计系统
|
|
1164
|
+
ui_design_system --stack tailwind
|
|
1165
|
+
|
|
1166
|
+
# 步骤 2:搜索对应的组件
|
|
1167
|
+
ui_search "button" --category tailwind
|
|
1168
|
+
|
|
1169
|
+
# 步骤 3:逐步替换旧组件
|
|
1170
|
+
```
|
|
1171
|
+
|
|
1172
|
+
---
|
|
1173
|
+
|
|
921
1174
|
## 📚 相关文档
|
|
922
1175
|
|
|
923
1176
|
- [README](../README.md) - 项目介绍和快速开始
|
|
924
1177
|
- [工具列表](../README.md#功能特性) - 所有工具的详细说明
|
|
1178
|
+
- [UI/UX 快速开始](../QUICK-START-UI-UX.md) - UI/UX 工具快速入门 🆕
|
|
1179
|
+
- [UI/UX 完整文档](./UI-UX-PRO-MAX-GUIDE.md) - UI/UX 工具详细文档 🆕
|
|
1180
|
+
- [UI/UX 使用演示](./UI-UX-DEMO.md) - UI/UX 工具使用示例 🆕
|
|
925
1181
|
- [常见问题](../README.md#常见问题) - FAQ
|
|
926
1182
|
|
|
927
1183
|
---
|
package/docs/HOW_TO_TRIGGER.md
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
> 实用的对话技巧,让 AI 准确理解你的意图并调用正确的工具
|
|
4
4
|
|
|
5
|
+
**版本**: v1.14.0 | **工具总数**: 46 个
|
|
6
|
+
|
|
5
7
|
---
|
|
6
8
|
|
|
7
9
|
## 📖 目录
|
|
@@ -26,7 +28,75 @@ AI 需要理解你的意图才能调用正确的工具。使用明确的关键
|
|
|
26
28
|
|
|
27
29
|
## 🔑 工具触发关键词
|
|
28
30
|
|
|
29
|
-
###
|
|
31
|
+
### 🎨 0️⃣ UI/UX 设计 → `ui_design_system` / `ui_search` / `sync_ui_data` 🆕
|
|
32
|
+
|
|
33
|
+
**触发关键词**:设计系统、配色、颜色、按钮、组件、UI、UX、图标、字体
|
|
34
|
+
|
|
35
|
+
#### `ui_design_system` - 设计系统生成
|
|
36
|
+
|
|
37
|
+
**✅ 推荐说法**
|
|
38
|
+
```
|
|
39
|
+
"帮我生成一个 React 设计系统"
|
|
40
|
+
"为我的 Next.js 项目生成 Tailwind 配置"
|
|
41
|
+
"生成一个蓝色主题的设计系统"
|
|
42
|
+
"我需要一套完整的设计系统"
|
|
43
|
+
"帮我配置项目的色彩和字体"
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
**❌ 不推荐说法**
|
|
47
|
+
```
|
|
48
|
+
"设计一下"(太模糊)
|
|
49
|
+
"好看一点"(没有具体需求)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**使用场景**
|
|
53
|
+
- 新项目启动,需要设计系统
|
|
54
|
+
- 需要统一的色彩、字体、间距配置
|
|
55
|
+
- 想要生成 Tailwind/React/Vue 配置
|
|
56
|
+
- 需要完整的主题配置
|
|
57
|
+
|
|
58
|
+
#### `ui_search` - UI/UX 智能搜索
|
|
59
|
+
|
|
60
|
+
**✅ 推荐说法**
|
|
61
|
+
```
|
|
62
|
+
"我需要一个 React 的主按钮组件"
|
|
63
|
+
"搜索一下蓝色主题的配色方案"
|
|
64
|
+
"表单验证有什么 UX 最佳实践?"
|
|
65
|
+
"给我推荐一些图标"
|
|
66
|
+
"找一个加载动画组件"
|
|
67
|
+
"有什么好的卡片设计?"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**❌ 不推荐说法**
|
|
71
|
+
```
|
|
72
|
+
"找个东西"(太模糊)
|
|
73
|
+
"搜索"(没有说明搜索什么)
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
**使用场景**
|
|
77
|
+
- 需要特定的 UI 组件实现
|
|
78
|
+
- 寻找配色方案
|
|
79
|
+
- 查找设计最佳实践
|
|
80
|
+
- 需要图标、图表等设计元素
|
|
81
|
+
|
|
82
|
+
#### `sync_ui_data` - 数据同步
|
|
83
|
+
|
|
84
|
+
**✅ 推荐说法**
|
|
85
|
+
```
|
|
86
|
+
"检查一下 UI 数据有没有更新"
|
|
87
|
+
"更新 UI/UX 数据"
|
|
88
|
+
"同步最新的设计数据"
|
|
89
|
+
"强制更新 UI 数据"
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
**使用场景**
|
|
93
|
+
- 定期检查数据更新
|
|
94
|
+
- 遇到搜索结果不准确
|
|
95
|
+
- 需要最新的设计数据
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
### 🎯 1️⃣ 需求访谈 → `interview` / `ask_user`
|
|
30
100
|
|
|
31
101
|
**触发关键词**:访谈、需求不明确、想清楚、澄清需求、提问、确认
|
|
32
102
|
|