mcp-probe-kit 3.0.24 → 3.2.0
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 +755 -779
- package/build/index.js +42 -41
- package/build/lib/__tests__/spec-validator.unit.test.js +115 -0
- package/build/lib/agents-md-template.js +32 -32
- package/build/lib/memory-orchestration.js +29 -8
- package/build/lib/skill-bridge.js +12 -12
- package/build/lib/spec-validator.d.ts +36 -0
- package/build/lib/spec-validator.js +103 -0
- package/build/lib/template-loader.js +149 -47
- package/build/lib/tool-annotations.d.ts +30 -0
- package/build/lib/tool-annotations.js +55 -0
- package/build/lib/toolset-manager.js +2 -0
- package/build/resources/index.d.ts +4 -0
- package/build/resources/index.js +4 -0
- package/build/resources/tool-params-guide.d.ts +571 -0
- package/build/resources/tool-params-guide.js +488 -0
- package/build/resources/ui-ux-data/guidelines/vercel-web-interface.json +1632 -1632
- package/build/resources/ui-ux-data/metadata.json +30 -30
- package/build/resources/ui-ux-data/shadcn/blocks.json +2541 -2541
- package/build/resources/ui-ux-data/shadcn/components.json +997 -997
- package/build/resources/ui-ux-data/themes/presets.json +483 -483
- package/build/schemas/index.d.ts +22 -22
- package/build/schemas/memory-tools.d.ts +0 -22
- package/build/schemas/memory-tools.js +0 -14
- package/build/schemas/project-tools.d.ts +22 -0
- package/build/schemas/project-tools.js +23 -0
- package/build/tools/analyze_project.d.ts +1 -0
- package/build/tools/analyze_project.js +527 -0
- package/build/tools/check_deps.d.ts +13 -0
- package/build/tools/check_deps.js +204 -0
- package/build/tools/check_spec.d.ts +7 -0
- package/build/tools/check_spec.js +81 -0
- package/build/tools/code_insight.js +41 -41
- package/build/tools/convert.d.ts +13 -0
- package/build/tools/convert.js +599 -0
- package/build/tools/css_order.d.ts +13 -0
- package/build/tools/css_order.js +81 -0
- package/build/tools/debug.d.ts +13 -0
- package/build/tools/debug.js +131 -0
- package/build/tools/design2code.d.ts +20 -0
- package/build/tools/design2code.js +426 -0
- package/build/tools/detect_shell.d.ts +6 -0
- package/build/tools/detect_shell.js +151 -0
- package/build/tools/explain.d.ts +13 -0
- package/build/tools/explain.js +390 -0
- package/build/tools/fix.d.ts +13 -0
- package/build/tools/fix.js +303 -0
- package/build/tools/fix_bug.js +161 -161
- package/build/tools/gen_mock.d.ts +22 -0
- package/build/tools/gen_mock.js +269 -0
- package/build/tools/gen_skill.d.ts +13 -0
- package/build/tools/gen_skill.js +560 -0
- package/build/tools/genapi.d.ts +13 -0
- package/build/tools/genapi.js +174 -0
- package/build/tools/genchangelog.d.ts +13 -0
- package/build/tools/genchangelog.js +250 -0
- package/build/tools/gencommit.js +60 -60
- package/build/tools/gendoc.d.ts +13 -0
- package/build/tools/gendoc.js +232 -0
- package/build/tools/genpr.d.ts +13 -0
- package/build/tools/genpr.js +194 -0
- package/build/tools/genreadme.d.ts +13 -0
- package/build/tools/genreadme.js +626 -0
- package/build/tools/gensql.d.ts +13 -0
- package/build/tools/gensql.js +320 -0
- package/build/tools/genui.d.ts +13 -0
- package/build/tools/genui.js +803 -0
- package/build/tools/index.d.ts +1 -1
- package/build/tools/index.js +1 -1
- package/build/tools/init_component_catalog.d.ts +22 -0
- package/build/tools/init_component_catalog.js +809 -0
- package/build/tools/init_project_context.js +432 -432
- package/build/tools/init_setting.d.ts +13 -0
- package/build/tools/init_setting.js +47 -0
- package/build/tools/perf.d.ts +13 -0
- package/build/tools/perf.js +409 -0
- package/build/tools/render_ui.d.ts +22 -0
- package/build/tools/render_ui.js +384 -0
- package/build/tools/resolve_conflict.d.ts +13 -0
- package/build/tools/resolve_conflict.js +349 -0
- package/build/tools/security_scan.d.ts +22 -0
- package/build/tools/security_scan.js +323 -0
- package/build/tools/split.d.ts +13 -0
- package/build/tools/split.js +599 -0
- package/build/tools/start_api.d.ts +13 -0
- package/build/tools/start_api.js +193 -0
- package/build/tools/start_bugfix.js +254 -243
- package/build/tools/start_doc.d.ts +13 -0
- package/build/tools/start_doc.js +207 -0
- package/build/tools/start_feature.js +162 -127
- package/build/tools/start_product.js +1 -1
- package/build/tools/start_refactor.d.ts +13 -0
- package/build/tools/start_refactor.js +188 -0
- package/build/tools/start_release.d.ts +13 -0
- package/build/tools/start_release.js +167 -0
- package/build/tools/start_review.d.ts +13 -0
- package/build/tools/start_review.js +175 -0
- package/build/tools/start_ui.js +426 -412
- package/build/tools/ui-ux-tools.js +290 -290
- package/build/utils/__tests__/vercel-guidelines-sync.unit.test.js +12 -12
- package/build/utils/themes-sync.js +8 -8
- package/package.json +81 -83
- package/build/lib/__tests__/memory-orchestration.unit.test.js +0 -88
- package/build/lib/__tests__/memory-payload.unit.test.js +0 -35
- package/build/lib/cursor-history-client.d.ts +0 -54
- package/build/lib/cursor-history-client.js +0 -240
- package/build/tools/__tests__/cursor-history.unit.test.js +0 -38
- package/build/tools/cursor_read_conversation.d.ts +0 -7
- package/build/tools/cursor_read_conversation.js +0 -36
- package/docs/.mcp-probe/layout.json +0 -11
- package/docs/CNAME +0 -1
- package/docs/assets/font/MaterialSymbolsOutlined.codepoints +0 -4102
- package/docs/assets/font/MaterialSymbolsOutlined.ttf +0 -0
- package/docs/assets/font/noto-sans-sc-400.ttf +0 -0
- package/docs/assets/font/noto-sans-sc-700.ttf +0 -0
- package/docs/assets/font/noto-sans-sc-900.ttf +0 -0
- package/docs/assets/js/i18n.js +0 -375
- package/docs/assets/js/tailwind.js +0 -83
- package/docs/assets/logo-zh.png +0 -0
- package/docs/assets/logo.png +0 -0
- package/docs/data/tools.js +0 -523
- package/docs/i18n/all-tools/en.json +0 -190
- package/docs/i18n/all-tools/ja.json +0 -171
- package/docs/i18n/all-tools/ko.json +0 -171
- package/docs/i18n/all-tools/zh-CN.json +0 -190
- package/docs/i18n/en.json +0 -626
- package/docs/i18n/ja.json +0 -602
- package/docs/i18n/ko.json +0 -602
- package/docs/i18n/zh-CN.json +0 -626
- package/docs/index.html +0 -327
- package/docs/memory-local-setup.md +0 -315
- package/docs/memory-local-setup.zh-CN.md +0 -283
- package/docs/pages/all-tools.html +0 -515
- package/docs/pages/examples.html +0 -717
- package/docs/pages/getting-started.html +0 -964
- package/docs/pages/migration.html +0 -308
- package/docs/specs/user-auth/design.md +0 -82
- package/docs/specs/user-auth/requirements.md +0 -52
- package/docs/specs/user-auth/tasks.md +0 -55
- /package/build/lib/__tests__/{memory-orchestration.unit.test.d.ts → spec-validator.unit.test.d.ts} +0 -0
- /package/build/{lib/__tests__/memory-payload.unit.test.d.ts → utils/design-docs-generator.d.ts} +0 -0
- /package/build/{tools/__tests__/cursor-history.unit.test.d.ts → utils/design-docs-generator.js} +0 -0
|
@@ -264,24 +264,24 @@ export async function uiDesignSystem(args) {
|
|
|
264
264
|
? pickThemeForProductType(loader.getSearchEngine().getCategoryData('ui-themes') || [], request.productType)
|
|
265
265
|
: undefined;
|
|
266
266
|
const themeSection = themeRecommendation
|
|
267
|
-
? `
|
|
268
|
-
## 🎨 推荐 shadcn 主题(内嵌预设)
|
|
269
|
-
|
|
270
|
-
- **主题**: ${themeRecommendation.title} (\`${themeRecommendation.name}\`)
|
|
271
|
-
- **说明**: ${themeRecommendation.description}
|
|
272
|
-
- **操作**: 将下方 CSS variables 写入 \`app/globals.css\`;也可用 \`ui_search --category=ui-themes --query="${request.productType}"\`
|
|
273
|
-
|
|
274
|
-
\`\`\`css
|
|
275
|
-
${themeRecommendation.globalsCssSnippet}
|
|
276
|
-
\`\`\`
|
|
267
|
+
? `
|
|
268
|
+
## 🎨 推荐 shadcn 主题(内嵌预设)
|
|
269
|
+
|
|
270
|
+
- **主题**: ${themeRecommendation.title} (\`${themeRecommendation.name}\`)
|
|
271
|
+
- **说明**: ${themeRecommendation.description}
|
|
272
|
+
- **操作**: 将下方 CSS variables 写入 \`app/globals.css\`;也可用 \`ui_search --category=ui-themes --query="${request.productType}"\`
|
|
273
|
+
|
|
274
|
+
\`\`\`css
|
|
275
|
+
${themeRecommendation.globalsCssSnippet}
|
|
276
|
+
\`\`\`
|
|
277
277
|
`
|
|
278
278
|
: '';
|
|
279
279
|
const vercelSection = isShadcnStack(request.stack)
|
|
280
|
-
? `
|
|
281
|
-
## ✅ Vercel 界面规范(实现时对照)
|
|
282
|
-
|
|
283
|
-
- 检索: \`ui_search --category=ui-guidelines-vercel --query="form accessibility animation"\`
|
|
284
|
-
- 重点: 表单可访问性、\`prefers-reduced-motion\`、对比度、键盘焦点、禁止 \`transition: all\`
|
|
280
|
+
? `
|
|
281
|
+
## ✅ Vercel 界面规范(实现时对照)
|
|
282
|
+
|
|
283
|
+
- 检索: \`ui_search --category=ui-guidelines-vercel --query="form accessibility animation"\`
|
|
284
|
+
- 重点: 表单可访问性、\`prefers-reduced-motion\`、对比度、键盘焦点、禁止 \`transition: all\`
|
|
285
285
|
`
|
|
286
286
|
: '';
|
|
287
287
|
// 构建输出对象
|
|
@@ -297,126 +297,126 @@ ${themeRecommendation.globalsCssSnippet}
|
|
|
297
297
|
.map(file => `${file.order}. **${file.path}** ${file.required ? '(必需)' : '(可选)'}\n ${file.purpose}`)
|
|
298
298
|
.join('\n\n');
|
|
299
299
|
// 格式化创作指导
|
|
300
|
-
const guidanceText = `
|
|
301
|
-
### 设计原则文档主题
|
|
302
|
-
${creationGuidance.principles.map((topic, i) => `${i + 1}. ${topic}`).join('\n')}
|
|
303
|
-
|
|
304
|
-
### 交互规范文档主题
|
|
305
|
-
${creationGuidance.interaction.map((topic, i) => `${i + 1}. ${topic}`).join('\n')}
|
|
306
|
-
|
|
307
|
-
### 布局规范文档主题
|
|
308
|
-
${creationGuidance.layout.map((topic, i) => `${i + 1}. ${topic}`).join('\n')}
|
|
309
|
-
|
|
310
|
-
### 技术配置文档主题
|
|
311
|
-
${creationGuidance.config.map((topic, i) => `${i + 1}. ${topic}`).join('\n')}
|
|
312
|
-
|
|
313
|
-
### 创作提示
|
|
314
|
-
${creationGuidance.tips.map((tip, i) => `${i + 1}. ${tip}`).join('\n')}
|
|
300
|
+
const guidanceText = `
|
|
301
|
+
### 设计原则文档主题
|
|
302
|
+
${creationGuidance.principles.map((topic, i) => `${i + 1}. ${topic}`).join('\n')}
|
|
303
|
+
|
|
304
|
+
### 交互规范文档主题
|
|
305
|
+
${creationGuidance.interaction.map((topic, i) => `${i + 1}. ${topic}`).join('\n')}
|
|
306
|
+
|
|
307
|
+
### 布局规范文档主题
|
|
308
|
+
${creationGuidance.layout.map((topic, i) => `${i + 1}. ${topic}`).join('\n')}
|
|
309
|
+
|
|
310
|
+
### 技术配置文档主题
|
|
311
|
+
${creationGuidance.config.map((topic, i) => `${i + 1}. ${topic}`).join('\n')}
|
|
312
|
+
|
|
313
|
+
### 创作提示
|
|
314
|
+
${creationGuidance.tips.map((tip, i) => `${i + 1}. ${tip}`).join('\n')}
|
|
315
315
|
`;
|
|
316
|
-
const message = `# ✅ 设计系统推荐已生成
|
|
317
|
-
|
|
318
|
-
**产品类型**: ${request.productType}
|
|
319
|
-
**技术栈**: ${request.stack || 'html'}
|
|
320
|
-
${request.targetAudience ? `**目标用户**: ${request.targetAudience}` : ''}
|
|
321
|
-
|
|
322
|
-
---
|
|
323
|
-
|
|
324
|
-
## 🎨 1. 核心设计推荐(ASCII Box)
|
|
325
|
-
|
|
326
|
-
以下是基于 AI 推理引擎生成的核心设计推荐:
|
|
327
|
-
|
|
328
|
-
\`\`\`
|
|
329
|
-
${asciiBox}
|
|
330
|
-
\`\`\`
|
|
331
|
-
|
|
332
|
-
---
|
|
333
|
-
|
|
334
|
-
## 📊 2. 精确配置数据(JSON)
|
|
335
|
-
|
|
336
|
-
以下是机器可读的设计系统配置,包含所有精确数值:
|
|
337
|
-
|
|
338
|
-
\`\`\`json
|
|
339
|
-
${JSON.stringify(designSystemJson, null, 2)}
|
|
340
|
-
\`\`\`
|
|
341
|
-
|
|
342
|
-
---
|
|
343
|
-
|
|
344
|
-
## 📁 3. 文件索引(按创建顺序)
|
|
345
|
-
|
|
346
|
-
请严格按照以下顺序创建文件:
|
|
347
|
-
|
|
348
|
-
${fileIndexList}
|
|
349
|
-
|
|
350
|
-
**注意**: design-system.md 是最后创建的主文档,它应该包含完整的设计系统概览和 ASCII Box 推荐。
|
|
351
|
-
|
|
352
|
-
---
|
|
353
|
-
|
|
354
|
-
## 📝 4. 文档创作指导
|
|
355
|
-
|
|
356
|
-
以下是各类文档应包含的关键主题。**请根据上述 ASCII Box 推荐和 JSON 数据自由创作内容,不要使用固定模板**:
|
|
357
|
-
|
|
358
|
-
${guidanceText}
|
|
359
|
-
${themeSection}
|
|
360
|
-
${vercelSection}
|
|
361
|
-
|
|
362
|
-
---
|
|
363
|
-
|
|
364
|
-
## ✨ 请根据以上推荐和指导创建文档
|
|
365
|
-
|
|
366
|
-
**现在,请按照文件索引的顺序,逐个创建设计系统文档。**
|
|
367
|
-
|
|
368
|
-
### 创作要求:
|
|
369
|
-
|
|
370
|
-
1. **使用核心数据**:
|
|
371
|
-
- 将 ASCII Box 中的核心推荐作为设计依据
|
|
372
|
-
- 使用 JSON 数据中的精确数值(颜色代码、字体大小、间距值等)
|
|
373
|
-
- 确保所有数值与 JSON 配置保持一致
|
|
374
|
-
|
|
375
|
-
2. **遵循文件顺序**:
|
|
376
|
-
- 严格按照文件索引的顺序创建(1→2→3→4→5→6→7)
|
|
377
|
-
- design-system.json 最先创建(包含所有精确配置)
|
|
378
|
-
- design-system.md 最后创建(包含完整概览)
|
|
379
|
-
|
|
380
|
-
3. **自由创作内容**:
|
|
381
|
-
- 参考创作指导中的主题列表
|
|
382
|
-
- 根据产品类型 "${request.productType}" 调整重点
|
|
383
|
-
${request.stack ? `- 提供 ${request.stack} 的具体实现示例` : ''}
|
|
384
|
-
- 不要局限于固定模板,发挥创造力
|
|
385
|
-
|
|
386
|
-
4. **保持一致性**:
|
|
387
|
-
- 所有文档使用相同的设计 Token(颜色、字体、间距)
|
|
388
|
-
- 确保术语和命名规范统一
|
|
389
|
-
- 交叉引用其他文档时保持准确
|
|
390
|
-
|
|
391
|
-
5. **提供实用示例**:
|
|
392
|
-
- 包含具体的代码示例(不要抽象描述)
|
|
393
|
-
- 展示实际应用场景
|
|
394
|
-
- 参考反模式(antiPatterns)提供"应避免"的建议
|
|
395
|
-
${isShadcnStack(request.stack) ? `
|
|
396
|
-
6. **shadcn/ui 实现路径**(${request.stack}):
|
|
397
|
-
- 用 \`ui_search --category=ui-themes\` 确认主题;上文的 globals.css 片段可直接使用
|
|
398
|
-
- 用 \`ui_search --category=shadcn-blocks --query="..."\` 找 block,再 \`npx shadcn@latest add <name>\`
|
|
399
|
-
- 用 \`ui_search --category=ui-guidelines-vercel\` 对照 Vercel 规范
|
|
400
|
-
- 在 block 基础上改文案/数据,不要从零写 Card/Button
|
|
401
|
-
` : ''}
|
|
402
|
-
|
|
403
|
-
### 开始创作:
|
|
404
|
-
|
|
405
|
-
**第一步**:创建 \`docs/design-system.json\`,包含所有精确配置数据(使用上面的 JSON)
|
|
406
|
-
|
|
407
|
-
**第二步**:创建 \`docs/design-guidelines/README.md\`,提供设计指南的索引和导航
|
|
408
|
-
|
|
409
|
-
**第三步至第六步**:依次创建四个设计指南文档(principles、interaction、layout、config)
|
|
410
|
-
|
|
411
|
-
**最后一步**:创建 \`docs/design-system.md\`,包含以下内容:
|
|
412
|
-
- ASCII Box 推荐(核心设计)
|
|
413
|
-
- 完整的设计系统概览
|
|
414
|
-
- **文件索引**(列出所有设计文档的链接,方便后续查看和使用)
|
|
415
|
-
- 快速开始指南
|
|
416
|
-
|
|
417
|
-
---
|
|
418
|
-
|
|
419
|
-
🚀 **准备好了吗?让我们开始创建第一个文件吧!**
|
|
316
|
+
const message = `# ✅ 设计系统推荐已生成
|
|
317
|
+
|
|
318
|
+
**产品类型**: ${request.productType}
|
|
319
|
+
**技术栈**: ${request.stack || 'html'}
|
|
320
|
+
${request.targetAudience ? `**目标用户**: ${request.targetAudience}` : ''}
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
## 🎨 1. 核心设计推荐(ASCII Box)
|
|
325
|
+
|
|
326
|
+
以下是基于 AI 推理引擎生成的核心设计推荐:
|
|
327
|
+
|
|
328
|
+
\`\`\`
|
|
329
|
+
${asciiBox}
|
|
330
|
+
\`\`\`
|
|
331
|
+
|
|
332
|
+
---
|
|
333
|
+
|
|
334
|
+
## 📊 2. 精确配置数据(JSON)
|
|
335
|
+
|
|
336
|
+
以下是机器可读的设计系统配置,包含所有精确数值:
|
|
337
|
+
|
|
338
|
+
\`\`\`json
|
|
339
|
+
${JSON.stringify(designSystemJson, null, 2)}
|
|
340
|
+
\`\`\`
|
|
341
|
+
|
|
342
|
+
---
|
|
343
|
+
|
|
344
|
+
## 📁 3. 文件索引(按创建顺序)
|
|
345
|
+
|
|
346
|
+
请严格按照以下顺序创建文件:
|
|
347
|
+
|
|
348
|
+
${fileIndexList}
|
|
349
|
+
|
|
350
|
+
**注意**: design-system.md 是最后创建的主文档,它应该包含完整的设计系统概览和 ASCII Box 推荐。
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## 📝 4. 文档创作指导
|
|
355
|
+
|
|
356
|
+
以下是各类文档应包含的关键主题。**请根据上述 ASCII Box 推荐和 JSON 数据自由创作内容,不要使用固定模板**:
|
|
357
|
+
|
|
358
|
+
${guidanceText}
|
|
359
|
+
${themeSection}
|
|
360
|
+
${vercelSection}
|
|
361
|
+
|
|
362
|
+
---
|
|
363
|
+
|
|
364
|
+
## ✨ 请根据以上推荐和指导创建文档
|
|
365
|
+
|
|
366
|
+
**现在,请按照文件索引的顺序,逐个创建设计系统文档。**
|
|
367
|
+
|
|
368
|
+
### 创作要求:
|
|
369
|
+
|
|
370
|
+
1. **使用核心数据**:
|
|
371
|
+
- 将 ASCII Box 中的核心推荐作为设计依据
|
|
372
|
+
- 使用 JSON 数据中的精确数值(颜色代码、字体大小、间距值等)
|
|
373
|
+
- 确保所有数值与 JSON 配置保持一致
|
|
374
|
+
|
|
375
|
+
2. **遵循文件顺序**:
|
|
376
|
+
- 严格按照文件索引的顺序创建(1→2→3→4→5→6→7)
|
|
377
|
+
- design-system.json 最先创建(包含所有精确配置)
|
|
378
|
+
- design-system.md 最后创建(包含完整概览)
|
|
379
|
+
|
|
380
|
+
3. **自由创作内容**:
|
|
381
|
+
- 参考创作指导中的主题列表
|
|
382
|
+
- 根据产品类型 "${request.productType}" 调整重点
|
|
383
|
+
${request.stack ? `- 提供 ${request.stack} 的具体实现示例` : ''}
|
|
384
|
+
- 不要局限于固定模板,发挥创造力
|
|
385
|
+
|
|
386
|
+
4. **保持一致性**:
|
|
387
|
+
- 所有文档使用相同的设计 Token(颜色、字体、间距)
|
|
388
|
+
- 确保术语和命名规范统一
|
|
389
|
+
- 交叉引用其他文档时保持准确
|
|
390
|
+
|
|
391
|
+
5. **提供实用示例**:
|
|
392
|
+
- 包含具体的代码示例(不要抽象描述)
|
|
393
|
+
- 展示实际应用场景
|
|
394
|
+
- 参考反模式(antiPatterns)提供"应避免"的建议
|
|
395
|
+
${isShadcnStack(request.stack) ? `
|
|
396
|
+
6. **shadcn/ui 实现路径**(${request.stack}):
|
|
397
|
+
- 用 \`ui_search --category=ui-themes\` 确认主题;上文的 globals.css 片段可直接使用
|
|
398
|
+
- 用 \`ui_search --category=shadcn-blocks --query="..."\` 找 block,再 \`npx shadcn@latest add <name>\`
|
|
399
|
+
- 用 \`ui_search --category=ui-guidelines-vercel\` 对照 Vercel 规范
|
|
400
|
+
- 在 block 基础上改文案/数据,不要从零写 Card/Button
|
|
401
|
+
` : ''}
|
|
402
|
+
|
|
403
|
+
### 开始创作:
|
|
404
|
+
|
|
405
|
+
**第一步**:创建 \`docs/design-system.json\`,包含所有精确配置数据(使用上面的 JSON)
|
|
406
|
+
|
|
407
|
+
**第二步**:创建 \`docs/design-guidelines/README.md\`,提供设计指南的索引和导航
|
|
408
|
+
|
|
409
|
+
**第三步至第六步**:依次创建四个设计指南文档(principles、interaction、layout、config)
|
|
410
|
+
|
|
411
|
+
**最后一步**:创建 \`docs/design-system.md\`,包含以下内容:
|
|
412
|
+
- ASCII Box 推荐(核心设计)
|
|
413
|
+
- 完整的设计系统概览
|
|
414
|
+
- **文件索引**(列出所有设计文档的链接,方便后续查看和使用)
|
|
415
|
+
- 快速开始指南
|
|
416
|
+
|
|
417
|
+
---
|
|
418
|
+
|
|
419
|
+
🚀 **准备好了吗?让我们开始创建第一个文件吧!**
|
|
420
420
|
`;
|
|
421
421
|
// 构建结构化数据对象
|
|
422
422
|
const structuredData = {
|
|
@@ -452,17 +452,17 @@ ${isShadcnStack(request.stack) ? `
|
|
|
452
452
|
colors: {},
|
|
453
453
|
typography: {},
|
|
454
454
|
};
|
|
455
|
-
return okStructured(`❌ 设计系统生成失败: ${errorMessage}
|
|
456
|
-
|
|
457
|
-
**可能的原因**:
|
|
458
|
-
1. 数据未加载完成
|
|
459
|
-
2. 产品类型不明确
|
|
460
|
-
3. 数据格式错误
|
|
461
|
-
|
|
462
|
-
**建议**:
|
|
463
|
-
1. 提供更具体的产品类型(如 "SaaS", "E-commerce", "Healthcare")
|
|
464
|
-
2. 添加产品描述帮助推理引擎理解需求
|
|
465
|
-
3. 检查数据是否已同步(使用 \`sync_ui_data\` 工具)
|
|
455
|
+
return okStructured(`❌ 设计系统生成失败: ${errorMessage}
|
|
456
|
+
|
|
457
|
+
**可能的原因**:
|
|
458
|
+
1. 数据未加载完成
|
|
459
|
+
2. 产品类型不明确
|
|
460
|
+
3. 数据格式错误
|
|
461
|
+
|
|
462
|
+
**建议**:
|
|
463
|
+
1. 提供更具体的产品类型(如 "SaaS", "E-commerce", "Healthcare")
|
|
464
|
+
2. 添加产品描述帮助推理引擎理解需求
|
|
465
|
+
3. 检查数据是否已同步(使用 \`sync_ui_data\` 工具)
|
|
466
466
|
`, errorData, {
|
|
467
467
|
schema: (await import('../schemas/output/ui-ux-tools.js')).DesignSystemSchema,
|
|
468
468
|
});
|
|
@@ -486,22 +486,22 @@ export async function uiSearch(args) {
|
|
|
486
486
|
// 格式化组件列表
|
|
487
487
|
const components = catalog.components || [];
|
|
488
488
|
const componentList = components.map((comp, index) => {
|
|
489
|
-
return `### ${index + 1}. ${comp.name}
|
|
490
|
-
|
|
491
|
-
**描述**: ${comp.description || '无'}
|
|
492
|
-
**Props**: ${Object.keys(comp.props || {}).join(', ')}
|
|
493
|
-
**样式**: ${comp.styles ? Object.keys(comp.styles).join(', ') : '无'}
|
|
489
|
+
return `### ${index + 1}. ${comp.name}
|
|
490
|
+
|
|
491
|
+
**描述**: ${comp.description || '无'}
|
|
492
|
+
**Props**: ${Object.keys(comp.props || {}).join(', ')}
|
|
493
|
+
**样式**: ${comp.styles ? Object.keys(comp.styles).join(', ') : '无'}
|
|
494
494
|
`;
|
|
495
495
|
}).join('\n---\n\n');
|
|
496
|
-
const message = `# 📦 组件目录
|
|
497
|
-
|
|
498
|
-
共 ${components.length} 个可用组件
|
|
499
|
-
|
|
500
|
-
---
|
|
501
|
-
|
|
502
|
-
${componentList}
|
|
503
|
-
|
|
504
|
-
**提示**: 这些组件可以在 UI 模板中使用
|
|
496
|
+
const message = `# 📦 组件目录
|
|
497
|
+
|
|
498
|
+
共 ${components.length} 个可用组件
|
|
499
|
+
|
|
500
|
+
---
|
|
501
|
+
|
|
502
|
+
${componentList}
|
|
503
|
+
|
|
504
|
+
**提示**: 这些组件可以在 UI 模板中使用
|
|
505
505
|
`;
|
|
506
506
|
const structuredData = {
|
|
507
507
|
summary: `组件目录 - ${components.length} 个组件`,
|
|
@@ -526,9 +526,9 @@ ${componentList}
|
|
|
526
526
|
results: [],
|
|
527
527
|
totalResults: 0,
|
|
528
528
|
};
|
|
529
|
-
return okStructured(`❌ 未找到组件目录文件
|
|
530
|
-
|
|
531
|
-
请先运行 \`init_component_catalog\` 生成组件目录。
|
|
529
|
+
return okStructured(`❌ 未找到组件目录文件
|
|
530
|
+
|
|
531
|
+
请先运行 \`init_component_catalog\` 生成组件目录。
|
|
532
532
|
`, errorData, {
|
|
533
533
|
schema: (await import('../schemas/output/ui-ux-tools.js')).UISearchResultSchema,
|
|
534
534
|
});
|
|
@@ -553,18 +553,18 @@ ${componentList}
|
|
|
553
553
|
results: [],
|
|
554
554
|
totalResults: 0,
|
|
555
555
|
};
|
|
556
|
-
return okStructured(`📭 暂无可用模板
|
|
557
|
-
|
|
558
|
-
**建议**:
|
|
559
|
-
1. 使用 \`start_ui\` 生成新模板
|
|
560
|
-
2. 模板会自动保存到 \`docs/ui/pages/\` 目录
|
|
561
|
-
3. 下次可以直接搜索使用
|
|
562
|
-
|
|
563
|
-
**示例**:
|
|
564
|
-
\`\`\`
|
|
565
|
-
start_ui "登录页面"
|
|
566
|
-
start_ui "用户列表"
|
|
567
|
-
\`\`\`
|
|
556
|
+
return okStructured(`📭 暂无可用模板
|
|
557
|
+
|
|
558
|
+
**建议**:
|
|
559
|
+
1. 使用 \`start_ui\` 生成新模板
|
|
560
|
+
2. 模板会自动保存到 \`docs/ui/pages/\` 目录
|
|
561
|
+
3. 下次可以直接搜索使用
|
|
562
|
+
|
|
563
|
+
**示例**:
|
|
564
|
+
\`\`\`
|
|
565
|
+
start_ui "登录页面"
|
|
566
|
+
start_ui "用户列表"
|
|
567
|
+
\`\`\`
|
|
568
568
|
`, emptyData, {
|
|
569
569
|
schema: (await import('../schemas/output/ui-ux-tools.js')).UISearchResultSchema,
|
|
570
570
|
});
|
|
@@ -601,41 +601,41 @@ start_ui "用户列表"
|
|
|
601
601
|
})),
|
|
602
602
|
totalResults: 0,
|
|
603
603
|
};
|
|
604
|
-
return okStructured(`未找到匹配的模板
|
|
605
|
-
|
|
606
|
-
**查询**: ${query}
|
|
607
|
-
**可用模板**: ${templates.map(t => t.name).join(', ')}
|
|
608
|
-
|
|
609
|
-
**建议**: 使用 \`start_ui "${query}"\` 生成新模板
|
|
604
|
+
return okStructured(`未找到匹配的模板
|
|
605
|
+
|
|
606
|
+
**查询**: ${query}
|
|
607
|
+
**可用模板**: ${templates.map(t => t.name).join(', ')}
|
|
608
|
+
|
|
609
|
+
**建议**: 使用 \`start_ui "${query}"\` 生成新模板
|
|
610
610
|
`, noMatchData, {
|
|
611
611
|
schema: (await import('../schemas/output/ui-ux-tools.js')).UISearchResultSchema,
|
|
612
612
|
});
|
|
613
613
|
}
|
|
614
614
|
// 格式化模板列表
|
|
615
615
|
const templateList = filteredTemplates.map((t, index) => {
|
|
616
|
-
return `### ${index + 1}. ${t.name}
|
|
617
|
-
|
|
618
|
-
**文件**: \`docs/ui/pages/${t.file}\`
|
|
619
|
-
**描述**: ${t.description}
|
|
620
|
-
**组件数**: ${JSON.stringify(t.template).match(/"type":/g)?.length || 0}
|
|
621
|
-
|
|
622
|
-
\`\`\`json
|
|
623
|
-
${JSON.stringify(t.template, null, 2)}
|
|
624
|
-
\`\`\`
|
|
616
|
+
return `### ${index + 1}. ${t.name}
|
|
617
|
+
|
|
618
|
+
**文件**: \`docs/ui/pages/${t.file}\`
|
|
619
|
+
**描述**: ${t.description}
|
|
620
|
+
**组件数**: ${JSON.stringify(t.template).match(/"type":/g)?.length || 0}
|
|
621
|
+
|
|
622
|
+
\`\`\`json
|
|
623
|
+
${JSON.stringify(t.template, null, 2)}
|
|
624
|
+
\`\`\`
|
|
625
625
|
`;
|
|
626
626
|
}).join('\n---\n\n');
|
|
627
|
-
const message = `# 📄 UI 模板搜索结果
|
|
628
|
-
|
|
629
|
-
找到 ${filteredTemplates.length} 个匹配模板
|
|
630
|
-
|
|
631
|
-
---
|
|
632
|
-
|
|
633
|
-
${templateList}
|
|
634
|
-
|
|
635
|
-
**使用方法**:
|
|
636
|
-
\`\`\`
|
|
637
|
-
render_ui docs/ui/pages/<文件名>.json --framework=react
|
|
638
|
-
\`\`\`
|
|
627
|
+
const message = `# 📄 UI 模板搜索结果
|
|
628
|
+
|
|
629
|
+
找到 ${filteredTemplates.length} 个匹配模板
|
|
630
|
+
|
|
631
|
+
---
|
|
632
|
+
|
|
633
|
+
${templateList}
|
|
634
|
+
|
|
635
|
+
**使用方法**:
|
|
636
|
+
\`\`\`
|
|
637
|
+
render_ui docs/ui/pages/<文件名>.json --framework=react
|
|
638
|
+
\`\`\`
|
|
639
639
|
`;
|
|
640
640
|
const structuredData = {
|
|
641
641
|
summary: `找到 ${filteredTemplates.length} 个模板`,
|
|
@@ -662,20 +662,20 @@ render_ui docs/ui/pages/<文件名>.json --framework=react
|
|
|
662
662
|
results: [],
|
|
663
663
|
totalResults: 0,
|
|
664
664
|
};
|
|
665
|
-
return okStructured(`📭 暂无可用模板
|
|
666
|
-
|
|
667
|
-
模板目录不存在或为空。
|
|
668
|
-
|
|
669
|
-
**建议**:
|
|
670
|
-
使用 \`start_ui\` 生成第一个模板:
|
|
671
|
-
|
|
672
|
-
\`\`\`
|
|
673
|
-
start_ui "登录页面"
|
|
674
|
-
start_ui "用户列表"
|
|
675
|
-
start_ui "设置页面"
|
|
676
|
-
\`\`\`
|
|
677
|
-
|
|
678
|
-
模板会自动保存到 \`docs/ui/pages/\` 目录。
|
|
665
|
+
return okStructured(`📭 暂无可用模板
|
|
666
|
+
|
|
667
|
+
模板目录不存在或为空。
|
|
668
|
+
|
|
669
|
+
**建议**:
|
|
670
|
+
使用 \`start_ui\` 生成第一个模板:
|
|
671
|
+
|
|
672
|
+
\`\`\`
|
|
673
|
+
start_ui "登录页面"
|
|
674
|
+
start_ui "用户列表"
|
|
675
|
+
start_ui "设置页面"
|
|
676
|
+
\`\`\`
|
|
677
|
+
|
|
678
|
+
模板会自动保存到 \`docs/ui/pages/\` 目录。
|
|
679
679
|
`, errorData, {
|
|
680
680
|
schema: (await import('../schemas/output/ui-ux-tools.js')).UISearchResultSchema,
|
|
681
681
|
});
|
|
@@ -699,17 +699,17 @@ start_ui "设置页面"
|
|
|
699
699
|
results: [],
|
|
700
700
|
totalResults: 0,
|
|
701
701
|
};
|
|
702
|
-
return okStructured(`未找到匹配的 UI/UX 数据。
|
|
703
|
-
|
|
704
|
-
**搜索条件:**
|
|
705
|
-
- 查询: ${query}
|
|
706
|
-
- 类别: ${options.category || '全部'}
|
|
707
|
-
- 技术栈: ${options.stack || '全部'}
|
|
708
|
-
|
|
709
|
-
**建议:**
|
|
710
|
-
1. 尝试使用更通用的关键词
|
|
711
|
-
2. 检查拼写是否正确
|
|
712
|
-
3. 移除类别或技术栈限制
|
|
702
|
+
return okStructured(`未找到匹配的 UI/UX 数据。
|
|
703
|
+
|
|
704
|
+
**搜索条件:**
|
|
705
|
+
- 查询: ${query}
|
|
706
|
+
- 类别: ${options.category || '全部'}
|
|
707
|
+
- 技术栈: ${options.stack || '全部'}
|
|
708
|
+
|
|
709
|
+
**建议:**
|
|
710
|
+
1. 尝试使用更通用的关键词
|
|
711
|
+
2. 检查拼写是否正确
|
|
712
|
+
3. 移除类别或技术栈限制
|
|
713
713
|
`, noResultData, {
|
|
714
714
|
schema: (await import('../schemas/output/ui-ux-tools.js')).UISearchResultSchema,
|
|
715
715
|
});
|
|
@@ -718,21 +718,21 @@ start_ui "设置页面"
|
|
|
718
718
|
const formattedResults = results.map((result, index) => {
|
|
719
719
|
const data = result.data;
|
|
720
720
|
if (isShadcnCategory(result.category)) {
|
|
721
|
-
return `### ${index + 1}. ${data.name || data.title} (相关度: ${result.score.toFixed(2)})
|
|
722
|
-
|
|
723
|
-
${formatShadcnResult(data)}
|
|
721
|
+
return `### ${index + 1}. ${data.name || data.title} (相关度: ${result.score.toFixed(2)})
|
|
722
|
+
|
|
723
|
+
${formatShadcnResult(data)}
|
|
724
724
|
`;
|
|
725
725
|
}
|
|
726
726
|
if (isThemeCategory(result.category)) {
|
|
727
|
-
return `### ${index + 1}. ${data.title || data.name} (相关度: ${result.score.toFixed(2)})
|
|
728
|
-
|
|
729
|
-
${formatThemeResult(data)}
|
|
727
|
+
return `### ${index + 1}. ${data.title || data.name} (相关度: ${result.score.toFixed(2)})
|
|
728
|
+
|
|
729
|
+
${formatThemeResult(data)}
|
|
730
730
|
`;
|
|
731
731
|
}
|
|
732
732
|
if (isGuidelineCategory(result.category)) {
|
|
733
|
-
return `### ${index + 1}. ${data.level} (相关度: ${result.score.toFixed(2)})
|
|
734
|
-
|
|
735
|
-
${formatGuidelineResult(data)}
|
|
733
|
+
return `### ${index + 1}. ${data.level} (相关度: ${result.score.toFixed(2)})
|
|
734
|
+
|
|
735
|
+
${formatGuidelineResult(data)}
|
|
736
736
|
`;
|
|
737
737
|
}
|
|
738
738
|
const fields = Object.entries(data)
|
|
@@ -744,23 +744,23 @@ ${formatGuidelineResult(data)}
|
|
|
744
744
|
return `- **${key}**: ${value}`;
|
|
745
745
|
})
|
|
746
746
|
.join('\n');
|
|
747
|
-
return `### ${index + 1}. ${result.category} (相关度: ${result.score.toFixed(2)})
|
|
748
|
-
|
|
749
|
-
${fields}
|
|
747
|
+
return `### ${index + 1}. ${result.category} (相关度: ${result.score.toFixed(2)})
|
|
748
|
+
|
|
749
|
+
${fields}
|
|
750
750
|
`;
|
|
751
751
|
}).join('\n---\n\n');
|
|
752
|
-
const message = `# UI/UX 搜索结果
|
|
753
|
-
|
|
754
|
-
找到 ${results.length} 条匹配结果
|
|
755
|
-
|
|
756
|
-
**搜索条件:**
|
|
757
|
-
- 查询: ${query}
|
|
758
|
-
- 类别: ${options.category || '全部'}
|
|
759
|
-
- 技术栈: ${options.stack || '全部'}
|
|
760
|
-
|
|
761
|
-
---
|
|
762
|
-
|
|
763
|
-
${formattedResults}
|
|
752
|
+
const message = `# UI/UX 搜索结果
|
|
753
|
+
|
|
754
|
+
找到 ${results.length} 条匹配结果
|
|
755
|
+
|
|
756
|
+
**搜索条件:**
|
|
757
|
+
- 查询: ${query}
|
|
758
|
+
- 类别: ${options.category || '全部'}
|
|
759
|
+
- 技术栈: ${options.stack || '全部'}
|
|
760
|
+
|
|
761
|
+
---
|
|
762
|
+
|
|
763
|
+
${formattedResults}
|
|
764
764
|
`;
|
|
765
765
|
const structuredData = {
|
|
766
766
|
summary: `找到 ${results.length} 条结果`,
|
|
@@ -825,14 +825,14 @@ export async function syncUiData(args, context) {
|
|
|
825
825
|
version: updateInfo.uipro.current || updateInfo.uipro.latest,
|
|
826
826
|
timestamp: new Date().toISOString(),
|
|
827
827
|
};
|
|
828
|
-
return okStructured(`✅ UI/UX 数据已是最新版本
|
|
829
|
-
|
|
830
|
-
**uipro-cli:** ${updateInfo.uipro.current || 'unknown'} (latest ${updateInfo.uipro.latest})
|
|
831
|
-
**shadcn registry:** ${updateInfo.shadcn.current || 'unknown'} (latest ${updateInfo.shadcn.latest})
|
|
832
|
-
**ui-themes:** ${updateInfo.themes.current || 'unknown'} (latest ${updateInfo.themes.latest})
|
|
833
|
-
**vercel guidelines:** ${updateInfo.vercel.current || 'unknown'} (latest ${updateInfo.vercel.latest})
|
|
834
|
-
|
|
835
|
-
无需更新。如需强制同步,请使用 \`force: true\` 参数。
|
|
828
|
+
return okStructured(`✅ UI/UX 数据已是最新版本
|
|
829
|
+
|
|
830
|
+
**uipro-cli:** ${updateInfo.uipro.current || 'unknown'} (latest ${updateInfo.uipro.latest})
|
|
831
|
+
**shadcn registry:** ${updateInfo.shadcn.current || 'unknown'} (latest ${updateInfo.shadcn.latest})
|
|
832
|
+
**ui-themes:** ${updateInfo.themes.current || 'unknown'} (latest ${updateInfo.themes.latest})
|
|
833
|
+
**vercel guidelines:** ${updateInfo.vercel.current || 'unknown'} (latest ${updateInfo.vercel.latest})
|
|
834
|
+
|
|
835
|
+
无需更新。如需强制同步,请使用 \`force: true\` 参数。
|
|
836
836
|
`, upToDateData, {
|
|
837
837
|
schema: (await import('../schemas/output/ui-ux-tools.js')).SyncReportSchema,
|
|
838
838
|
});
|
|
@@ -878,26 +878,26 @@ export async function syncUiData(args, context) {
|
|
|
878
878
|
timestamp: new Date().toISOString(),
|
|
879
879
|
};
|
|
880
880
|
await reportToolProgress(context, 100, 'sync_ui_data: 同步完成');
|
|
881
|
-
return okStructured(`✅ UI/UX 数据同步成功
|
|
882
|
-
|
|
883
|
-
数据已更新到缓存目录: ${cacheDir}
|
|
884
|
-
下载版本: ${metadata?.version || 'unknown'}
|
|
885
|
-
|
|
886
|
-
**同步统计:**
|
|
887
|
-
- 颜色: ${syncedData.synced.colors} 条
|
|
888
|
-
- 图标: ${syncedData.synced.icons} 条
|
|
889
|
-
- 组件: ${syncedData.synced.components} 条
|
|
890
|
-
- 模式: ${syncedData.synced.patterns} 条
|
|
891
|
-
- shadcn blocks: ${syncedData.synced.shadcnBlocks || 0} 条
|
|
892
|
-
- shadcn components: ${syncedData.synced.shadcnComponents || 0} 条
|
|
893
|
-
- UI 主题: ${syncedData.synced.themes || 0} 套
|
|
894
|
-
- Vercel 规范: ${syncedData.synced.vercelGuidelines || 0} 条
|
|
895
|
-
|
|
896
|
-
**会话状态:**
|
|
897
|
-
- 当前会话使用版本: ${sessionInfo.activeVersion || 'unknown'}(source: ${sessionInfo.source})
|
|
898
|
-
- 下次启动生效版本: ${sessionInfo.pendingVersion || metadata?.version || 'unknown'}
|
|
899
|
-
|
|
900
|
-
**提示:** 为保证会话内结果一致,新数据将在下次启动后生效。
|
|
881
|
+
return okStructured(`✅ UI/UX 数据同步成功
|
|
882
|
+
|
|
883
|
+
数据已更新到缓存目录: ${cacheDir}
|
|
884
|
+
下载版本: ${metadata?.version || 'unknown'}
|
|
885
|
+
|
|
886
|
+
**同步统计:**
|
|
887
|
+
- 颜色: ${syncedData.synced.colors} 条
|
|
888
|
+
- 图标: ${syncedData.synced.icons} 条
|
|
889
|
+
- 组件: ${syncedData.synced.components} 条
|
|
890
|
+
- 模式: ${syncedData.synced.patterns} 条
|
|
891
|
+
- shadcn blocks: ${syncedData.synced.shadcnBlocks || 0} 条
|
|
892
|
+
- shadcn components: ${syncedData.synced.shadcnComponents || 0} 条
|
|
893
|
+
- UI 主题: ${syncedData.synced.themes || 0} 套
|
|
894
|
+
- Vercel 规范: ${syncedData.synced.vercelGuidelines || 0} 条
|
|
895
|
+
|
|
896
|
+
**会话状态:**
|
|
897
|
+
- 当前会话使用版本: ${sessionInfo.activeVersion || 'unknown'}(source: ${sessionInfo.source})
|
|
898
|
+
- 下次启动生效版本: ${sessionInfo.pendingVersion || metadata?.version || 'unknown'}
|
|
899
|
+
|
|
900
|
+
**提示:** 为保证会话内结果一致,新数据将在下次启动后生效。
|
|
901
901
|
`, syncedData, {
|
|
902
902
|
schema: (await import('../schemas/output/ui-ux-tools.js')).SyncReportSchema,
|
|
903
903
|
});
|
|
@@ -911,18 +911,18 @@ export async function syncUiData(args, context) {
|
|
|
911
911
|
timestamp: new Date().toISOString(),
|
|
912
912
|
errors: [errorMessage],
|
|
913
913
|
};
|
|
914
|
-
return okStructured(`❌ UI 数据同步失败: ${errorMessage}
|
|
915
|
-
|
|
916
|
-
**可能的原因:**
|
|
917
|
-
1. 网络连接问题
|
|
918
|
-
2. npm registry 不可访问
|
|
919
|
-
3. 磁盘空间不足
|
|
920
|
-
4. 权限问题
|
|
921
|
-
|
|
922
|
-
**建议:**
|
|
923
|
-
1. 检查网络连接
|
|
924
|
-
2. 稍后重试
|
|
925
|
-
3. 使用 \`verbose: true\` 查看详细日志
|
|
914
|
+
return okStructured(`❌ UI 数据同步失败: ${errorMessage}
|
|
915
|
+
|
|
916
|
+
**可能的原因:**
|
|
917
|
+
1. 网络连接问题
|
|
918
|
+
2. npm registry 不可访问
|
|
919
|
+
3. 磁盘空间不足
|
|
920
|
+
4. 权限问题
|
|
921
|
+
|
|
922
|
+
**建议:**
|
|
923
|
+
1. 检查网络连接
|
|
924
|
+
2. 稍后重试
|
|
925
|
+
3. 使用 \`verbose: true\` 查看详细日志
|
|
926
926
|
`, errorData, {
|
|
927
927
|
schema: (await import('../schemas/output/ui-ux-tools.js')).SyncReportSchema,
|
|
928
928
|
});
|