mcp-probe-kit 3.2.0 → 3.6.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.
Files changed (180) hide show
  1. package/README.md +25 -7
  2. package/build/index.js +45 -79
  3. package/build/lib/__tests__/agents-md-template.unit.test.js +1 -0
  4. package/build/lib/__tests__/dev-workflow.unit.test.js +22 -0
  5. package/build/lib/__tests__/handles.unit.test.js +19 -0
  6. package/build/lib/__tests__/mcp-apps.unit.test.d.ts +1 -0
  7. package/build/lib/__tests__/mcp-apps.unit.test.js +52 -0
  8. package/build/lib/__tests__/mcp-tool-skill-registry.unit.test.d.ts +1 -0
  9. package/build/lib/__tests__/mcp-tool-skill-registry.unit.test.js +18 -0
  10. package/build/lib/__tests__/memory-client.unit.test.js +105 -0
  11. package/build/lib/__tests__/memory-orchestration.unit.test.d.ts +1 -0
  12. package/build/lib/__tests__/memory-orchestration.unit.test.js +88 -0
  13. package/build/lib/__tests__/memory-payload.unit.test.d.ts +1 -0
  14. package/build/lib/__tests__/memory-payload.unit.test.js +35 -0
  15. package/build/lib/__tests__/quality-constraints.unit.test.d.ts +1 -0
  16. package/build/lib/__tests__/quality-constraints.unit.test.js +54 -0
  17. package/build/lib/__tests__/spec-gate.unit.test.d.ts +1 -0
  18. package/build/lib/__tests__/spec-gate.unit.test.js +54 -0
  19. package/build/lib/__tests__/spec-validator.unit.test.js +106 -74
  20. package/build/lib/__tests__/task-defaults.unit.test.d.ts +1 -0
  21. package/build/lib/__tests__/task-defaults.unit.test.js +27 -0
  22. package/build/lib/__tests__/workflow-skill-installer.unit.test.d.ts +1 -0
  23. package/build/lib/__tests__/workflow-skill-installer.unit.test.js +110 -0
  24. package/build/lib/agents-md-template.js +40 -32
  25. package/build/lib/cursor-history-client.d.ts +54 -0
  26. package/build/lib/cursor-history-client.js +240 -0
  27. package/build/lib/dev-workflow.d.ts +36 -0
  28. package/build/lib/dev-workflow.js +497 -0
  29. package/build/lib/handles.d.ts +31 -0
  30. package/build/lib/handles.js +36 -0
  31. package/build/lib/mcp-apps.d.ts +14 -0
  32. package/build/lib/mcp-apps.js +234 -0
  33. package/build/lib/mcp-tool-skill-registry.d.ts +46 -0
  34. package/build/lib/mcp-tool-skill-registry.js +256 -0
  35. package/build/lib/memory-client.d.ts +19 -0
  36. package/build/lib/memory-client.js +69 -0
  37. package/build/lib/memory-orchestration.d.ts +5 -0
  38. package/build/lib/memory-orchestration.js +20 -0
  39. package/build/lib/merge-agents-md.d.ts +2 -2
  40. package/build/lib/merge-agents-md.js +7 -4
  41. package/build/lib/output-schema-registry.d.ts +11 -0
  42. package/build/lib/output-schema-registry.js +80 -0
  43. package/build/lib/quality-constraints.d.ts +54 -0
  44. package/build/lib/quality-constraints.js +155 -0
  45. package/build/lib/skill-bridge.js +12 -12
  46. package/build/lib/spec-gate.d.ts +32 -0
  47. package/build/lib/spec-gate.js +83 -0
  48. package/build/lib/spec-validator.js +16 -3
  49. package/build/lib/task-defaults.d.ts +6 -0
  50. package/build/lib/task-defaults.js +20 -0
  51. package/build/lib/template-loader.js +83 -23
  52. package/build/lib/tool-annotations.js +3 -0
  53. package/build/lib/toolset-manager.js +2 -0
  54. package/build/lib/workflow-skill-installer.d.ts +38 -0
  55. package/build/lib/workflow-skill-installer.js +158 -0
  56. package/build/lib/workflow-skill-template.d.ts +9 -0
  57. package/build/lib/workflow-skill-template.js +85 -0
  58. package/build/lib/workflow-skill-version.d.ts +15 -0
  59. package/build/lib/workflow-skill-version.js +68 -0
  60. package/build/resources/ui-ux-data/guidelines/vercel-web-interface.json +1632 -1632
  61. package/build/resources/ui-ux-data/metadata.json +30 -30
  62. package/build/resources/ui-ux-data/shadcn/blocks.json +2541 -2541
  63. package/build/resources/ui-ux-data/shadcn/components.json +997 -997
  64. package/build/resources/ui-ux-data/themes/presets.json +483 -483
  65. package/build/schemas/index.d.ts +110 -0
  66. package/build/schemas/index.js +1 -0
  67. package/build/schemas/memory-tools.d.ts +83 -0
  68. package/build/schemas/memory-tools.js +43 -0
  69. package/build/schemas/orchestration-tools.d.ts +8 -0
  70. package/build/schemas/orchestration-tools.js +8 -0
  71. package/build/schemas/output/code-insight-tools.d.ts +65 -0
  72. package/build/schemas/output/code-insight-tools.js +42 -0
  73. package/build/schemas/output/memory-tools.d.ts +576 -0
  74. package/build/schemas/output/memory-tools.js +148 -0
  75. package/build/schemas/project-tools.d.ts +19 -0
  76. package/build/schemas/project-tools.js +20 -0
  77. package/build/tools/__tests__/cursor-history.unit.test.d.ts +1 -0
  78. package/build/tools/__tests__/cursor-history.unit.test.js +38 -0
  79. package/build/tools/__tests__/delete_memory_asset.unit.test.d.ts +1 -0
  80. package/build/tools/__tests__/delete_memory_asset.unit.test.js +87 -0
  81. package/build/tools/__tests__/search_memory.unit.test.js +1 -0
  82. package/build/tools/__tests__/start_bugfix.unit.test.js +34 -1
  83. package/build/tools/__tests__/update_memory_asset.unit.test.d.ts +1 -0
  84. package/build/tools/__tests__/update_memory_asset.unit.test.js +82 -0
  85. package/build/tools/__tests__/workflow.unit.test.d.ts +1 -0
  86. package/build/tools/__tests__/workflow.unit.test.js +24 -0
  87. package/build/tools/check_spec.js +16 -16
  88. package/build/tools/code_insight.js +46 -42
  89. package/build/tools/code_review.js +11 -4
  90. package/build/tools/cursor_read_conversation.d.ts +7 -0
  91. package/build/tools/cursor_read_conversation.js +36 -0
  92. package/build/tools/delete_memory_asset.d.ts +7 -0
  93. package/build/tools/delete_memory_asset.js +57 -0
  94. package/build/tools/fix_bug.js +161 -161
  95. package/build/tools/gencommit.js +60 -60
  96. package/build/tools/index.d.ts +3 -0
  97. package/build/tools/index.js +3 -0
  98. package/build/tools/init_project_context.js +432 -432
  99. package/build/tools/search_memory.js +5 -2
  100. package/build/tools/start_bugfix.js +37 -4
  101. package/build/tools/start_feature.js +4 -3
  102. package/build/tools/start_product.js +1 -1
  103. package/build/tools/start_ui.js +22 -4
  104. package/build/tools/ui-ux-tools.d.ts +3 -0
  105. package/build/tools/ui-ux-tools.js +302 -290
  106. package/build/tools/update_memory_asset.d.ts +7 -0
  107. package/build/tools/update_memory_asset.js +98 -0
  108. package/build/tools/workflow.d.ts +13 -0
  109. package/build/tools/workflow.js +69 -0
  110. package/build/utils/__tests__/vercel-guidelines-sync.unit.test.js +12 -12
  111. package/build/utils/design-reasoning-engine.d.ts +2 -0
  112. package/build/utils/design-reasoning-engine.js +3 -0
  113. package/build/utils/themes-sync.js +8 -8
  114. package/package.json +6 -3
  115. package/build/resources/index.d.ts +0 -4
  116. package/build/resources/index.js +0 -4
  117. package/build/resources/tool-params-guide.d.ts +0 -571
  118. package/build/resources/tool-params-guide.js +0 -488
  119. package/build/tools/analyze_project.d.ts +0 -1
  120. package/build/tools/analyze_project.js +0 -527
  121. package/build/tools/check_deps.d.ts +0 -13
  122. package/build/tools/check_deps.js +0 -204
  123. package/build/tools/convert.d.ts +0 -13
  124. package/build/tools/convert.js +0 -599
  125. package/build/tools/css_order.d.ts +0 -13
  126. package/build/tools/css_order.js +0 -81
  127. package/build/tools/debug.d.ts +0 -13
  128. package/build/tools/debug.js +0 -131
  129. package/build/tools/design2code.d.ts +0 -20
  130. package/build/tools/design2code.js +0 -426
  131. package/build/tools/detect_shell.d.ts +0 -6
  132. package/build/tools/detect_shell.js +0 -151
  133. package/build/tools/explain.d.ts +0 -13
  134. package/build/tools/explain.js +0 -390
  135. package/build/tools/fix.d.ts +0 -13
  136. package/build/tools/fix.js +0 -303
  137. package/build/tools/gen_mock.d.ts +0 -22
  138. package/build/tools/gen_mock.js +0 -269
  139. package/build/tools/gen_skill.d.ts +0 -13
  140. package/build/tools/gen_skill.js +0 -560
  141. package/build/tools/genapi.d.ts +0 -13
  142. package/build/tools/genapi.js +0 -174
  143. package/build/tools/genchangelog.d.ts +0 -13
  144. package/build/tools/genchangelog.js +0 -250
  145. package/build/tools/gendoc.d.ts +0 -13
  146. package/build/tools/gendoc.js +0 -232
  147. package/build/tools/genpr.d.ts +0 -13
  148. package/build/tools/genpr.js +0 -194
  149. package/build/tools/genreadme.d.ts +0 -13
  150. package/build/tools/genreadme.js +0 -626
  151. package/build/tools/gensql.d.ts +0 -13
  152. package/build/tools/gensql.js +0 -320
  153. package/build/tools/genui.d.ts +0 -13
  154. package/build/tools/genui.js +0 -803
  155. package/build/tools/init_component_catalog.d.ts +0 -22
  156. package/build/tools/init_component_catalog.js +0 -809
  157. package/build/tools/init_setting.d.ts +0 -13
  158. package/build/tools/init_setting.js +0 -47
  159. package/build/tools/perf.d.ts +0 -13
  160. package/build/tools/perf.js +0 -409
  161. package/build/tools/render_ui.d.ts +0 -22
  162. package/build/tools/render_ui.js +0 -384
  163. package/build/tools/resolve_conflict.d.ts +0 -13
  164. package/build/tools/resolve_conflict.js +0 -349
  165. package/build/tools/security_scan.d.ts +0 -22
  166. package/build/tools/security_scan.js +0 -323
  167. package/build/tools/split.d.ts +0 -13
  168. package/build/tools/split.js +0 -599
  169. package/build/tools/start_api.d.ts +0 -13
  170. package/build/tools/start_api.js +0 -193
  171. package/build/tools/start_doc.d.ts +0 -13
  172. package/build/tools/start_doc.js +0 -207
  173. package/build/tools/start_refactor.d.ts +0 -13
  174. package/build/tools/start_refactor.js +0 -188
  175. package/build/tools/start_release.d.ts +0 -13
  176. package/build/tools/start_release.js +0 -167
  177. package/build/tools/start_review.d.ts +0 -13
  178. package/build/tools/start_review.js +0 -175
  179. /package/build/{utils/design-docs-generator.d.ts → lib/__tests__/dev-workflow.unit.test.d.ts} +0 -0
  180. /package/build/{utils/design-docs-generator.js → lib/__tests__/handles.unit.test.d.ts} +0 -0
@@ -2,6 +2,7 @@ import { parseArgs, getString, getNumber } from '../utils/parseArgs.js';
2
2
  import { okStructured } from '../lib/response.js';
3
3
  import { createMemoryClient } from '../lib/memory-client.js';
4
4
  import { formatSearchMemoryResultsText, shouldShowSourceInSearch, } from '../lib/memory-orchestration.js';
5
+ import { attachHandles, buildMemoryAssetHandles } from '../lib/handles.js';
5
6
  import { getMemoryConfig } from '../lib/memory-config.js';
6
7
  import { handleToolError } from '../utils/error-handler.js';
7
8
  export async function searchMemory(args) {
@@ -46,12 +47,14 @@ export async function searchMemory(args) {
46
47
  tags: item.tags,
47
48
  sourcePath: shouldShowSourceInSearch(item, config) ? item.sourcePath : undefined,
48
49
  }));
49
- return okStructured(formatSearchMemoryResultsText(results, config), {
50
+ return okStructured(formatSearchMemoryResultsText(results, config), attachHandles({
50
51
  enabled: true,
51
52
  query,
52
53
  count: results.length,
53
54
  results: items,
54
- });
55
+ }, {
56
+ memory_assets: buildMemoryAssetHandles(items),
57
+ }));
55
58
  }
56
59
  catch (error) {
57
60
  return handleToolError(error, 'search_memory');
@@ -1,13 +1,15 @@
1
1
  import * as fs from "node:fs";
2
2
  import { parseArgs, getString, getNumber } from "../utils/parseArgs.js";
3
3
  import { okStructured } from "../lib/response.js";
4
+ import { attachHandles } from "../lib/handles.js";
4
5
  import { renderOrchestrationHeader } from "../lib/orchestration-guidance.js";
5
6
  import { BugFixReportSchema, RequirementsLoopSchema } from "../schemas/structured-output.js";
6
7
  import { reportToolProgress, throwIfAborted, } from "../lib/tool-execution-context.js";
7
8
  import { buildBugfixGraphContext } from "../lib/gitnexus-bridge.js";
8
- import { buildMemoryPlanStep, loadMemoryInjectionContext, renderMemoryGuideSection, } from "../lib/memory-orchestration.js";
9
+ import { buildMemoryPlanStep, loadMemoryInjectionContext, renderMemoryGuideSection, buildOrchestrationHandles, } from "../lib/memory-orchestration.js";
9
10
  import { resolveWorkspaceRoot, isLikelyProjectNamedRelativePath, buildProjectRootRetryHint } from "../lib/workspace-root.js";
10
11
  import { layoutAbsPath, parseLayoutArgsFromRecord, resolveProjectContextLayout, } from "../lib/project-context-layout.js";
12
+ import { buildCheckSpecPlanStep, renderSpecGatePromptSection, resolveBugfixSpecGate, } from "../lib/spec-gate.js";
11
13
  function decideTemplateProfile(description) {
12
14
  const text = description || '';
13
15
  const lengthScore = text.length >= 200 ? 2 : text.length >= 120 ? 1 : 0;
@@ -120,6 +122,8 @@ const PROMPT_TEMPLATE_GUIDED = `# 🐛 Bug 修复编排指南(TBP 8 步真因
120
122
 
121
123
  **产出**: 测试代码
122
124
 
125
+ {spec_gate_section}
126
+
123
127
  ---
124
128
 
125
129
  ## ✅ 完成检查
@@ -177,6 +181,7 @@ const PROMPT_TEMPLATE_STRICT = `# 🐛 Bug 修复编排(严格 | TBP 8 步)
177
181
  "framework": "[根据项目上下文选择: jest/vitest/mocha]"
178
182
  }
179
183
  \`\`\`
184
+ {spec_gate_section}
180
185
 
181
186
  ---
182
187
 
@@ -307,6 +312,8 @@ export async function startBugfix(args, context) {
307
312
  stack_trace: ["stack", "trace", "堆栈", "调用栈"],
308
313
  code_context: ["code_context", "code", "context", "相关代码", "代码上下文"],
309
314
  project_root: ["projectRoot", "project_path", "projectPath", "root", "project_root", "项目路径", "项目根目录"],
315
+ docs_dir: ["dir", "output", "目录", "文档目录"],
316
+ feature_name: ["name", "feature", "spec", "功能名", "功能名称", "规格"],
310
317
  analysis_mode: ["analysis_mode", "methodology", "rca", "tbp", "分析方法"],
311
318
  template_profile: ["profile", "template_profile", "模板档位", "模板模式"],
312
319
  requirements_mode: ["mode", "requirements_mode", "loop", "需求模式"],
@@ -320,6 +327,7 @@ export async function startBugfix(args, context) {
320
327
  const codeContext = getString(parsedArgs.code_context);
321
328
  const projectRoot = getString(parsedArgs.project_root);
322
329
  const docsDir = getString(parsedArgs.docs_dir) || "docs";
330
+ const featureNameInput = getString(parsedArgs.feature_name);
323
331
  if (isLikelyProjectNamedRelativePath(projectRoot)) {
324
332
  return {
325
333
  content: [{
@@ -388,6 +396,18 @@ export async function startBugfix(args, context) {
388
396
  layoutManifest: layout.manifestPath,
389
397
  };
390
398
  const graphDocsMissing = !bootstrapState.latestMarkdownExists || !bootstrapState.latestJsonExists;
399
+ const specGate = resolveBugfixSpecGate({
400
+ featureName: featureNameInput,
401
+ projectRoot: layout.projectRoot,
402
+ docsDir,
403
+ hintText: combinedText,
404
+ });
405
+ const specGateSection = specGate ? renderSpecGatePromptSection(specGate) : '';
406
+ if (specGate) {
407
+ headerNotes.push(specGate.detected
408
+ ? `规格闸门: 已自动关联 ${specGate.specDir}/,修复后需 check_spec`
409
+ : `规格闸门: 关联 ${specGate.specDir}/,修复后需 check_spec`);
410
+ }
391
411
  const graphContext = await buildBugfixGraphContext({
392
412
  errorMessage,
393
413
  stackTrace,
@@ -571,7 +591,7 @@ ${graphContext.highlights.length > 0
571
591
  },
572
592
  };
573
593
  await reportToolProgress(context, 95, "start_bugfix: loop 输出已生成");
574
- return okStructured(guide, loopReport, {
594
+ return okStructured(guide, attachHandles(loopReport, buildOrchestrationHandles(memoryContext)), {
575
595
  schema: RequirementsLoopSchema,
576
596
  note: 'AI 应按轮次澄清 Bug 需求并更新结构化输出,满足结束条件后再进入 fix_bug / gentest',
577
597
  });
@@ -598,7 +618,8 @@ ${graphContext.highlights.length > 0
598
618
  .replace(/{error_message}/g, errorMessage)
599
619
  .replace(/{stack_trace}/g, stackTrace)
600
620
  .replace(/{analysis_mode}/g, analysisMode)
601
- .replace(/{stack_trace_section}/g, stackTraceSection);
621
+ .replace(/{stack_trace_section}/g, stackTraceSection)
622
+ .replace(/{spec_gate_section}/g, specGateSection);
602
623
  const guide = header + memoryGuideSection + renderedPrompt + graphGuideSection;
603
624
  const plan = {
604
625
  mode: 'delegated',
@@ -635,6 +656,7 @@ ${graphContext.highlights.length > 0
635
656
  },
636
657
  outputs: [],
637
658
  },
659
+ ...(specGate ? [buildCheckSpecPlanStep(specGate.featureName, specGate.docsDir)] : []),
638
660
  ...(memoryContext.enabled ? [buildMemoryPlanStep('bugfix')] : []),
639
661
  ],
640
662
  };
@@ -659,6 +681,13 @@ ${graphContext.highlights.length > 0
659
681
  status: 'pending',
660
682
  description: '调用 gentest 工具生成测试用例',
661
683
  },
684
+ ...(specGate
685
+ ? [{
686
+ name: '规格闸门校验',
687
+ status: 'pending',
688
+ description: `修复后调用 check_spec 校验 ${specGate.specDir}/`,
689
+ }]
690
+ : []),
662
691
  ],
663
692
  artifacts: [],
664
693
  nextSteps: [
@@ -670,6 +699,9 @@ ${graphContext.highlights.length > 0
670
699
  '调用 fix_bug 工具分析问题并形成因果句真因',
671
700
  '调用 gentest 工具生成回归测试',
672
701
  '运行测试验证修复',
702
+ ...(specGate
703
+ ? [`修复后调用 check_spec 校验 ${specGate.specDir}/,未通过先补规格再重跑`]
704
+ : []),
673
705
  ],
674
706
  rootCause: '待分析(需要调用 fix_bug 工具)',
675
707
  fixPlan: '待制定(需要调用 fix_bug 工具)',
@@ -709,10 +741,11 @@ ${graphContext.highlights.length > 0
709
741
  graphDocsMissing,
710
742
  },
711
743
  graphContext,
744
+ ...(specGate ? { specGate } : {}),
712
745
  },
713
746
  };
714
747
  await reportToolProgress(context, 95, "start_bugfix: 执行计划输出已生成");
715
- return okStructured(guide, bugfixReport, {
748
+ return okStructured(guide, attachHandles(bugfixReport, buildOrchestrationHandles(memoryContext)), {
716
749
  schema: BugFixReportSchema,
717
750
  note: 'AI 应该按照指南执行步骤,并在每个步骤完成后更新 structuredContent 中的状态',
718
751
  });
@@ -1,11 +1,12 @@
1
1
  import * as fs from "node:fs";
2
2
  import { parseArgs, getString, getNumber } from "../utils/parseArgs.js";
3
3
  import { okStructured } from "../lib/response.js";
4
+ import { attachHandles } from "../lib/handles.js";
4
5
  import { renderOrchestrationHeader } from "../lib/orchestration-guidance.js";
5
6
  import { FeatureReportSchema, RequirementsLoopSchema } from "../schemas/structured-output.js";
6
7
  import { reportToolProgress, throwIfAborted, } from "../lib/tool-execution-context.js";
7
8
  import { buildFeatureGraphContext } from "../lib/gitnexus-bridge.js";
8
- import { buildMemoryPlanStep, loadMemoryInjectionContext, renderMemoryGuideSection, } from "../lib/memory-orchestration.js";
9
+ import { buildMemoryPlanStep, loadMemoryInjectionContext, renderMemoryGuideSection, buildOrchestrationHandles, } from "../lib/memory-orchestration.js";
9
10
  import { resolveWorkspaceRoot, toWorkspacePath, isLikelyProjectNamedRelativePath, buildProjectRootRetryHint } from "../lib/workspace-root.js";
10
11
  import { layoutAbsPath, parseLayoutArgsFromRecord, resolveProjectContextLayout, } from "../lib/project-context-layout.js";
11
12
  /**
@@ -463,7 +464,7 @@ ${graphContext.highlights.length > 0
463
464
  },
464
465
  };
465
466
  await reportToolProgress(context, 95, "start_feature: loop 输出已生成");
466
- return okStructured(guide, loopReport, {
467
+ return okStructured(guide, attachHandles(loopReport, buildOrchestrationHandles(memoryContext)), {
467
468
  schema: RequirementsLoopSchema,
468
469
  note: 'AI 应按轮次澄清需求并更新结构化输出,满足结束条件后再进入 add_feature / estimate',
469
470
  });
@@ -595,7 +596,7 @@ ${graphContext.highlights.length > 0
595
596
  },
596
597
  };
597
598
  await reportToolProgress(context, 95, "start_feature: 执行计划输出已生成");
598
- return okStructured(guide, featureReport, {
599
+ return okStructured(guide, attachHandles(featureReport, buildOrchestrationHandles(memoryContext)), {
599
600
  schema: FeatureReportSchema,
600
601
  note: 'AI 应该按照指南执行步骤,并在每个步骤完成后更新 structuredContent 中的状态和估算信息',
601
602
  });
@@ -89,7 +89,7 @@ export async function startProduct(args, context) {
89
89
  ],
90
90
  notes: [buildSkillHeaderNote(skillBridge)],
91
91
  });
92
- const guidanceText = header + skillBridgeSection + `# 🚀 产品设计工作流执行指导
92
+ const guidanceText = header + skillBridgeSection + `# 🚀 产品设计工作流执行指导
93
93
 
94
94
  基于${requirementsSource},请按照以下步骤完成从需求到 HTML 原型的完整产品设计流程。
95
95
 
@@ -10,14 +10,26 @@
10
10
  import { parseArgs, getString, getNumber } from "../utils/parseArgs.js";
11
11
  import { getReasoningEngine } from "./ui-ux-tools.js";
12
12
  import { okStructured } from "../lib/response.js";
13
+ import { attachHandles } from "../lib/handles.js";
13
14
  import { renderOrchestrationHeader } from "../lib/orchestration-guidance.js";
14
15
  import { buildSkillBridgePlanStep, buildSkillHeaderNote, detectSkillBridge, renderSkillBridgeSection, } from "../lib/skill-bridge.js";
15
16
  import { UIReportSchema, RequirementsLoopSchema } from "../schemas/structured-output.js";
16
17
  import { detectProjectType } from "../lib/project-detector.js";
17
18
  import { resolveWorkspaceRoot, isLikelyProjectNamedRelativePath, buildProjectRootRetryHint } from "../lib/workspace-root.js";
18
19
  import { reportToolProgress, throwIfAborted, } from "../lib/tool-execution-context.js";
19
- import { buildMemoryPlanStep, loadMemoryInjectionContext, renderMemoryGuideSection, } from "../lib/memory-orchestration.js";
20
+ import { buildMemoryPlanStep, loadMemoryInjectionContext, renderMemoryGuideSection, buildOrchestrationHandles, } from "../lib/memory-orchestration.js";
20
21
  import { isShadcnStack } from "../lib/shadcn-ui.js";
22
+ import { renderUiHardRules, renderUiBannedList, renderPreFlightChecklist } from "../lib/quality-constraints.js";
23
+ /** 渲染代码步骤统一注入的 UI 硬约束 + 黑名单 + 交付前自检 */
24
+ const UI_CONSTRAINTS_BLOCK = `
25
+
26
+ ---
27
+
28
+ ${renderUiHardRules()}
29
+
30
+ ${renderUiBannedList()}
31
+
32
+ ${renderPreFlightChecklist()}`;
21
33
  function buildShadcnBlocksPlanStep(description, framework) {
22
34
  if (!isShadcnStack(framework)) {
23
35
  return [];
@@ -262,6 +274,10 @@ A: 不需要。如果文件已存在,直接跳过步骤 1。
262
274
 
263
275
  **Q: 如何使用自定义模板?**
264
276
  A: 在 \`docs/ui/\` 目录创建 JSON 模板文件,然后在步骤 4 中指定模板路径。
277
+
278
+ ---
279
+
280
+ ${UI_CONSTRAINTS_BLOCK}
265
281
  `;
266
282
  const PROMPT_TEMPLATE_STRICT = `# UI 开发编排(严格)
267
283
 
@@ -339,6 +355,8 @@ const PROMPT_TEMPLATE_STRICT = `# UI 开发编排(严格)
339
355
  ## 步骤 7: 更新项目上下文索引
340
356
 
341
357
  将 UI 文档链接添加到 \`docs/project-context.md\`
358
+
359
+ ${UI_CONSTRAINTS_BLOCK}
342
360
  `;
343
361
  const LOOP_PROMPT_TEMPLATE_GUIDED = `# 🧭 UI 需求澄清与补全(Requirements Loop)
344
362
 
@@ -765,7 +783,7 @@ start_ui <描述> --requirements_mode=loop
765
783
  },
766
784
  };
767
785
  await reportToolProgress(context, 95, "start_ui: loop 输出已生成");
768
- return okStructured(guide, loopReport, {
786
+ return okStructured(guide, attachHandles(loopReport, buildOrchestrationHandles(memoryContext)), {
769
787
  schema: RequirementsLoopSchema,
770
788
  note: 'AI 应按轮次澄清 UI 需求并更新结构化输出,满足结束条件后再执行 UI 计划',
771
789
  });
@@ -1018,7 +1036,7 @@ ${recommendation.reasoning}
1018
1036
  },
1019
1037
  };
1020
1038
  await reportToolProgress(context, 95, "start_ui: auto 输出已生成");
1021
- return okStructured(smartPlan, uiReport, {
1039
+ return okStructured(smartPlan, attachHandles(uiReport, buildOrchestrationHandles(memoryContext)), {
1022
1040
  schema: UIReportSchema,
1023
1041
  note: 'AI 应该按照智能计划执行步骤,并在每个步骤完成后更新 structuredContent',
1024
1042
  });
@@ -1221,7 +1239,7 @@ start_ui "设置页面" --framework=react
1221
1239
  },
1222
1240
  };
1223
1241
  await reportToolProgress(context, 95, "start_ui: manual 输出已生成");
1224
- return okStructured(guide, uiReport, {
1242
+ return okStructured(guide, attachHandles(uiReport, buildOrchestrationHandles(memoryContext)), {
1225
1243
  schema: UIReportSchema,
1226
1244
  note: 'AI 应该按照指南执行步骤,并在每个步骤完成后更新 structuredContent',
1227
1245
  });
@@ -26,6 +26,9 @@ export interface CreationGuidance {
26
26
  layout: string[];
27
27
  config: string[];
28
28
  tips: string[];
29
+ hardRules: string;
30
+ banned: string;
31
+ preFlight: string;
29
32
  }
30
33
  /**
31
34
  * UI 设计系统输出接口(重构版)