soloforge 1.3.1 → 1.3.2

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 (118) hide show
  1. package/README.md +6 -3
  2. package/dist/adapters/claude_code/claude_md.d.ts.map +1 -1
  3. package/dist/adapters/claude_code/claude_md.js +4 -0
  4. package/dist/adapters/claude_code/claude_md.js.map +1 -1
  5. package/dist/adapters/claude_code/tools.d.ts +10 -10
  6. package/dist/adapters/claude_code/tools.d.ts.map +1 -1
  7. package/dist/adapters/claude_code/tools.js +317 -18
  8. package/dist/adapters/claude_code/tools.js.map +1 -1
  9. package/dist/adapters/shared/workflow_template.d.ts +26 -0
  10. package/dist/adapters/shared/workflow_template.d.ts.map +1 -1
  11. package/dist/adapters/shared/workflow_template.js +139 -46
  12. package/dist/adapters/shared/workflow_template.js.map +1 -1
  13. package/dist/bin/soloforge.d.ts.map +1 -1
  14. package/dist/bin/soloforge.js +85 -53
  15. package/dist/bin/soloforge.js.map +1 -1
  16. package/dist/engine/asset_manifest.d.ts +7 -1
  17. package/dist/engine/asset_manifest.d.ts.map +1 -1
  18. package/dist/engine/asset_manifest.js +28 -18
  19. package/dist/engine/asset_manifest.js.map +1 -1
  20. package/dist/engine/consumable_asset_registry.d.ts.map +1 -1
  21. package/dist/engine/consumable_asset_registry.js +26 -0
  22. package/dist/engine/consumable_asset_registry.js.map +1 -1
  23. package/dist/engine/consumption_trace_store.d.ts +8 -8
  24. package/dist/engine/consumption_trace_store.d.ts.map +1 -1
  25. package/dist/engine/consumption_trace_store.js +11 -7
  26. package/dist/engine/consumption_trace_store.js.map +1 -1
  27. package/dist/engine/decision_workshop.d.ts +160 -0
  28. package/dist/engine/decision_workshop.d.ts.map +1 -0
  29. package/dist/engine/decision_workshop.js +279 -0
  30. package/dist/engine/decision_workshop.js.map +1 -0
  31. package/dist/engine/dual_layer_mechanism_registry.d.ts.map +1 -1
  32. package/dist/engine/dual_layer_mechanism_registry.js +176 -2
  33. package/dist/engine/dual_layer_mechanism_registry.js.map +1 -1
  34. package/dist/engine/explicit_asset_registry.d.ts +30 -0
  35. package/dist/engine/explicit_asset_registry.d.ts.map +1 -0
  36. package/dist/engine/explicit_asset_registry.js +3508 -0
  37. package/dist/engine/explicit_asset_registry.js.map +1 -0
  38. package/dist/engine/implementation_roadmap_registry.d.ts +2 -2
  39. package/dist/engine/implementation_roadmap_registry.d.ts.map +1 -1
  40. package/dist/engine/implementation_roadmap_registry.js +44 -16
  41. package/dist/engine/implementation_roadmap_registry.js.map +1 -1
  42. package/dist/engine/intent_expander.d.ts.map +1 -1
  43. package/dist/engine/intent_expander.js +46 -2
  44. package/dist/engine/intent_expander.js.map +1 -1
  45. package/dist/engine/intent_router.d.ts +1 -1
  46. package/dist/engine/intent_router.d.ts.map +1 -1
  47. package/dist/engine/intent_router.js +2 -1
  48. package/dist/engine/intent_router.js.map +1 -1
  49. package/dist/engine/knowledge_injection_boundary.d.ts +3 -0
  50. package/dist/engine/knowledge_injection_boundary.d.ts.map +1 -1
  51. package/dist/engine/knowledge_injection_boundary.js +48 -5
  52. package/dist/engine/knowledge_injection_boundary.js.map +1 -1
  53. package/dist/engine/mechanism_contract_registry.d.ts +1 -1
  54. package/dist/engine/mechanism_contract_registry.d.ts.map +1 -1
  55. package/dist/engine/mechanism_contract_registry.js +74 -2
  56. package/dist/engine/mechanism_contract_registry.js.map +1 -1
  57. package/dist/engine/observed_consumption.d.ts +54 -0
  58. package/dist/engine/observed_consumption.d.ts.map +1 -0
  59. package/dist/engine/observed_consumption.js +377 -0
  60. package/dist/engine/observed_consumption.js.map +1 -0
  61. package/dist/engine/release_issue_scenario_registry.d.ts +64 -0
  62. package/dist/engine/release_issue_scenario_registry.d.ts.map +1 -0
  63. package/dist/engine/release_issue_scenario_registry.js +1349 -0
  64. package/dist/engine/release_issue_scenario_registry.js.map +1 -0
  65. package/dist/engine/release_readiness_gate.d.ts +1 -1
  66. package/dist/engine/release_readiness_gate.d.ts.map +1 -1
  67. package/dist/engine/release_readiness_gate.js +574 -46
  68. package/dist/engine/release_readiness_gate.js.map +1 -1
  69. package/dist/engine/release_tool_harness.d.ts +71 -0
  70. package/dist/engine/release_tool_harness.d.ts.map +1 -0
  71. package/dist/engine/release_tool_harness.js +161 -0
  72. package/dist/engine/release_tool_harness.js.map +1 -0
  73. package/dist/engine/scaffolder.d.ts.map +1 -1
  74. package/dist/engine/scaffolder.js +144 -7
  75. package/dist/engine/scaffolder.js.map +1 -1
  76. package/dist/engine/standard_asset_contract.d.ts +75 -0
  77. package/dist/engine/standard_asset_contract.d.ts.map +1 -0
  78. package/dist/engine/standard_asset_contract.js +388 -0
  79. package/dist/engine/standard_asset_contract.js.map +1 -0
  80. package/dist/engine/standard_asset_coverage.d.ts +45 -0
  81. package/dist/engine/standard_asset_coverage.d.ts.map +1 -0
  82. package/dist/engine/standard_asset_coverage.js +220 -0
  83. package/dist/engine/standard_asset_coverage.js.map +1 -0
  84. package/dist/engine/template_asset_contract_registry.d.ts +162 -0
  85. package/dist/engine/template_asset_contract_registry.d.ts.map +1 -0
  86. package/dist/engine/template_asset_contract_registry.js +598 -0
  87. package/dist/engine/template_asset_contract_registry.js.map +1 -0
  88. package/dist/engine/template_asset_visibility.d.ts +109 -0
  89. package/dist/engine/template_asset_visibility.d.ts.map +1 -0
  90. package/dist/engine/template_asset_visibility.js +321 -0
  91. package/dist/engine/template_asset_visibility.js.map +1 -0
  92. package/dist/engine/template_init_sync.d.ts +68 -0
  93. package/dist/engine/template_init_sync.d.ts.map +1 -0
  94. package/dist/engine/template_init_sync.js +218 -0
  95. package/dist/engine/template_init_sync.js.map +1 -0
  96. package/dist/engine/template_manifest_io.d.ts +10 -0
  97. package/dist/engine/template_manifest_io.d.ts.map +1 -1
  98. package/dist/engine/template_manifest_io.js +63 -30
  99. package/dist/engine/template_manifest_io.js.map +1 -1
  100. package/dist/engine/template_mechanism_auditor.d.ts +3 -1
  101. package/dist/engine/template_mechanism_auditor.d.ts.map +1 -1
  102. package/dist/engine/template_mechanism_auditor.js +27 -24
  103. package/dist/engine/template_mechanism_auditor.js.map +1 -1
  104. package/dist/engine/tool_invocation_contract_registry.d.ts.map +1 -1
  105. package/dist/engine/tool_invocation_contract_registry.js +11 -1
  106. package/dist/engine/tool_invocation_contract_registry.js.map +1 -1
  107. package/dist/knowledge/index_manager.d.ts +20 -0
  108. package/dist/knowledge/index_manager.d.ts.map +1 -1
  109. package/dist/knowledge/index_manager.js +234 -3
  110. package/dist/knowledge/index_manager.js.map +1 -1
  111. package/dist/types.d.ts +36 -1
  112. package/dist/types.d.ts.map +1 -1
  113. package/package.json +2 -2
  114. package/templates/knowledge/rules//346/240/207/345/207/206/350/265/204/344/272/247/350/246/206/347/233/226/350/247/204/345/210/231.md +29 -0
  115. package/templates/knowledge/rules//346/250/241/346/235/277/350/265/204/344/272/247/345/217/257/350/247/201/346/200/247/350/247/204/345/210/231.md +27 -0
  116. package/templates/knowledge/rules//347/224/250/346/210/267/345/217/215/351/246/210/345/245/221/347/272/246/350/247/204/345/210/231.md +62 -1
  117. package/templates/knowledge/rules//351/200/232/347/224/250/345/206/263/347/255/226/347/240/224/350/256/250/350/247/204/345/210/231.md +30 -0
  118. package/templates/knowledge/rules//351/252/214/346/224/266/346/250/241/346/235/277/350/276/223/345/207/272/345/245/221/347/272/246/350/247/204/345/210/231.md +50 -0
@@ -0,0 +1,161 @@
1
+ /**
2
+ * 发布问题真实 MCP 工具测试装置。
3
+ *
4
+ * callTool() 每次实际调用已注册 handler 时,记录不可由场景手填的 ToolInvocationObservation。
5
+ * collectTrace() 必须从 ToolInvocationObservation 生成 tool_entrypoint 和 diagnostic_codes。
6
+ */
7
+ import fs from "node:fs";
8
+ import path from "node:path";
9
+ import os from "node:os";
10
+ const handlers = new Map();
11
+ function createFakeMcpServer() {
12
+ handlers.clear();
13
+ return {
14
+ tool(name, _desc, _schema, handler) {
15
+ handlers.set(name, handler);
16
+ },
17
+ };
18
+ }
19
+ /**
20
+ * 创建真实 MCP 工具测试装置。
21
+ *
22
+ * 每个 scenario runner 调用此函数获得独立的临时项目 + 工具注册环境,
23
+ * 通过 callTool("sf_classify", ...) 调用与生产一致的注册工具。
24
+ * 每次 callTool 自动记录 ToolInvocationObservation。
25
+ */
26
+ export async function createToolHarness(options = {}) {
27
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), "soloforge-b6-harness-"));
28
+ const stateDir = path.join(tmpDir, ".soloforge", "state");
29
+ fs.mkdirSync(stateDir, { recursive: true });
30
+ // 可选复制知识库
31
+ if (options.copyKnowledge) {
32
+ const { copyKnowledgeToProject } = await import("./template_init_sync.js");
33
+ await copyKnowledgeToProject(process.cwd(), tmpDir);
34
+ }
35
+ // 清空 consumption traces
36
+ const { clearConsumptionTraces } = await import("./consumption_trace_store.js");
37
+ clearConsumptionTraces();
38
+ // 清空注入合同缓存
39
+ const { clearInjectionContractCache } = await import("./knowledge_injection_boundary.js");
40
+ clearInjectionContractCache();
41
+ const config = {
42
+ name: "release-issue-test",
43
+ tech_stack: {
44
+ backend: options.techStack?.backend ?? { lang: "typescript", framework: "node", version: "20" },
45
+ frontend: options.techStack?.frontend ?? { lang: "typescript", framework: "react", version: "18" },
46
+ },
47
+ product_profile: options.productProfile ?? "saas",
48
+ repos: [],
49
+ build_commands: {
50
+ backend: { build: "npm run build", test: "npm test", full: "npm run ci" },
51
+ frontend: { build: "npm run build", test: "npm test", full: "npm run ci" },
52
+ },
53
+ scope: { backend: ["src/"], frontend: ["src/"] },
54
+ _projectPath: tmpDir,
55
+ };
56
+ const { TaskContextManager: TCM } = await import("./task_context.js");
57
+ const taskContext = new TCM(stateDir);
58
+ const { KnowledgeIndexManager: KIM } = await import("../knowledge/index_manager.js");
59
+ const knowledgeIndex = new KIM(config, { watch: false });
60
+ await knowledgeIndex.build();
61
+ // 注册真实 MCP 工具
62
+ const { registerTools } = await import("../adapters/claude_code/tools.js");
63
+ const server = createFakeMcpServer();
64
+ await registerTools(server, { config, knowledgeIndex, taskContext });
65
+ // 不可手填的观察记录
66
+ const observations = [];
67
+ // callTool: 记录完整观察
68
+ const callTool = async (name, args) => {
69
+ const handler = handlers.get(name);
70
+ if (!handler)
71
+ throw new Error(`Tool ${name} not registered`);
72
+ // 调用前状态
73
+ let beforeStatus;
74
+ const tid = args?.task_id;
75
+ if (tid) {
76
+ try {
77
+ const ctx = await taskContext.load(tid);
78
+ beforeStatus = ctx?.status;
79
+ }
80
+ catch { /* 任务可能不存在 */ }
81
+ }
82
+ const timestamp = new Date().toISOString();
83
+ let isErr = false;
84
+ let rawResult;
85
+ try {
86
+ rawResult = await handler(args);
87
+ isErr = rawResult?.isError === true;
88
+ }
89
+ catch (e) {
90
+ isErr = true;
91
+ rawResult = { content: [{ type: "text", text: JSON.stringify({ error: e.message }) }], isError: true };
92
+ }
93
+ // 解析响应
94
+ const parsed = parseResultFn(rawResult);
95
+ const diagCode = parsed?.diagnostic_code ?? parsed?.error ?? undefined;
96
+ // 调用后状态
97
+ let afterStatus;
98
+ if (tid) {
99
+ try {
100
+ const ctx = await taskContext.load(tid);
101
+ afterStatus = ctx?.status;
102
+ }
103
+ catch { /* 忽略 */ }
104
+ }
105
+ observations.push({
106
+ tool_name: name,
107
+ request: args,
108
+ parsed_response: parsed,
109
+ is_error: isErr,
110
+ task_id: tid,
111
+ before_status: beforeStatus,
112
+ after_status: afterStatus,
113
+ diagnostic_code: diagCode,
114
+ timestamp,
115
+ });
116
+ return rawResult;
117
+ };
118
+ const parseResultFn = (raw) => {
119
+ const text = raw?.content?.[0]?.text;
120
+ try {
121
+ return JSON.parse(text);
122
+ }
123
+ catch {
124
+ return text;
125
+ }
126
+ };
127
+ const getObservations = () => observations;
128
+ const getLastObservation = () => observations[observations.length - 1];
129
+ // collectTrace: 从观察记录生成(非手写)
130
+ const collectTrace = async () => {
131
+ const toolNames = observations.map(o => o.tool_name);
132
+ const diagCodes = observations
133
+ .map(o => o.diagnostic_code)
134
+ .filter((c) => typeof c === "string" && c.length > 0);
135
+ const { getConsumptionTraces } = await import("./consumption_trace_store.js");
136
+ const traces = getConsumptionTraces();
137
+ const gatesConsumed = [...new Set(traces.map((t) => t.consumer))];
138
+ return {
139
+ tool_entrypoint: toolNames.join(" → ") || "unknown",
140
+ diagnostic_codes: [...new Set(diagCodes)],
141
+ gates_consumed: gatesConsumed,
142
+ };
143
+ };
144
+ // 显式设置计划提案门禁(场景必须明确调用)
145
+ const setupPlanGate = async (taskId) => {
146
+ await taskContext.setPlanProposalGate(taskId, {
147
+ passed: true, plan_gate_status: "passed", required_level: "execution_plan",
148
+ reason_zh: "release issue scenario 显式设置", violations: [], diagnostic_code: undefined,
149
+ evidence_refs: ["release-issue-test"], blocked_actions: [],
150
+ });
151
+ };
152
+ const cleanup = () => {
153
+ knowledgeIndex.close().catch(() => { });
154
+ fs.rmSync(tmpDir, { recursive: true, force: true });
155
+ };
156
+ return {
157
+ tmpDir, stateDir, config, taskContext, knowledgeIndex,
158
+ callTool, parseResult: parseResultFn, getObservations, getLastObservation, collectTrace, setupPlanGate, cleanup,
159
+ };
160
+ }
161
+ //# sourceMappingURL=release_tool_harness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"release_tool_harness.js","sourceRoot":"","sources":["../../src/engine/release_tool_harness.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../../src/engine/scaffolder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAgB,cAAc,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAG/F;;;GAGG;AAEH,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAkEpF"}
1
+ {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../../src/engine/scaffolder.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAgB,cAAc,EAAE,aAAa,EAA0B,MAAM,aAAa,CAAC;AAMvH;;;GAGG;AAEH,gBAAgB;AAChB,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,cAAc,CAAC;IAC/B,MAAM,EAAE,aAAa,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CA0JpF"}
@@ -3,6 +3,9 @@ import fss from "node:fs";
3
3
  import path from "node:path";
4
4
  import Handlebars from "handlebars";
5
5
  import { debug } from "./logger.js";
6
+ import { getContractDecision } from "./template_asset_contract_registry.js";
7
+ import { recordConsumptionTrace } from "./consumption_trace_store.js";
8
+ import { getContractByPath } from "./template_asset_contract_registry.js";
6
9
  /**
7
10
  * 生成代码骨架 — 遍历模板集,编译渲染每个 .hbs 模板,映射到目标路径并检测冲突。
8
11
  * @param input - 脚手架输入,包含用户意图、分类结果、项目配置和项目路径
@@ -18,6 +21,9 @@ export async function generateScaffold(input) {
18
21
  // 渲染模板
19
22
  const files = [];
20
23
  const warnings = [];
24
+ if (templateSets.length === 0) {
25
+ warnings.push("当前技术栈没有适用的内置脚手架模板,请提供匹配技术栈的自定义模板合同");
26
+ }
21
27
  for (const templateSet of templateSets) {
22
28
  const templateDir = resolveTemplateDir(templateSet, config);
23
29
  if (!fss.existsSync(templateDir)) {
@@ -29,13 +35,96 @@ export async function generateScaffold(input) {
29
35
  for (const tplFile of templateFiles) {
30
36
  if (!tplFile.endsWith(".hbs"))
31
37
  continue;
38
+ // 合同门禁: 内置和自定义模板统一校验
39
+ const isBuiltin = templateDir.includes(path.join("templates", "scaffolds"));
40
+ if (isBuiltin) {
41
+ const relPath = `templates/scaffolds/${templateSet}/${tplFile}`;
42
+ const decision = getContractDecision(relPath);
43
+ if (decision.decision === "unregistered") {
44
+ recordConsumptionTrace({ consumer: "scaffold", asset_id: relPath, asset_path: relPath, contract_decision: "unregistered", fields_consumed: ["asset_path", "contract_decision", "template_vars"], matched_reason: "未注册脚手架模板", task_id_or_route: "generateScaffold", consumed_at: new Date().toISOString() });
45
+ warnings.push(`未注册脚手架模板: ${tplFile} — 必须先在 explicit_asset_registry 注册`);
46
+ debug("脚手架生成", `未注册模板被阻断: ${relPath}`);
47
+ continue;
48
+ }
49
+ if (decision.decision === "denied" && decision.contract?.asset_visibility !== "scaffold_only") {
50
+ recordConsumptionTrace({ consumer: "scaffold", asset_id: decision.contract?.asset_id ?? relPath, asset_path: relPath, contract_decision: "denied", fields_consumed: ["asset_path", "contract_decision", "template_vars"], matched_reason: "模板可见性不符", task_id_or_route: "generateScaffold", consumed_at: new Date().toISOString() });
51
+ warnings.push(`模板可见性不符: ${tplFile} — 预期 scaffold_only`);
52
+ debug("脚手架生成", `模板可见性不符: ${relPath}`);
53
+ continue;
54
+ }
55
+ if (decision.contract && !matchesBuiltinTechStack(decision.contract.applicable_tech_stack, config)) {
56
+ recordConsumptionTrace({ consumer: "scaffold", asset_id: decision.contract.asset_id, asset_path: relPath, contract_decision: "denied", fields_consumed: ["asset_path", "contract_decision", "applicable_tech_stack"], matched_reason: "内置脚手架技术栈不匹配", task_id_or_route: "generateScaffold", consumed_at: new Date().toISOString() });
57
+ warnings.push(`模板技术栈不匹配: ${tplFile} — 仅适用于 ${decision.contract.applicable_tech_stack.join(", ")}`);
58
+ continue;
59
+ }
60
+ recordConsumptionTrace({ consumer: "scaffold", asset_id: decision.contract?.asset_id ?? relPath, asset_path: relPath, contract_decision: "allowed", fields_consumed: ["asset_path", "contract_decision", "template_vars"], matched_reason: "内置模板通过合同门禁", task_id_or_route: "generateScaffold", consumed_at: new Date().toISOString() });
61
+ }
62
+ else {
63
+ // 自定义模板: 必须有显式合同,缺失则阻断
64
+ const customAssetId = `custom:${templateSet}/${tplFile}`;
65
+ const contract = config.scaffold?.contracts?.[templateSet];
66
+ if (!contract) {
67
+ recordConsumptionTrace({ consumer: "scaffold", asset_id: customAssetId, asset_path: customAssetId, contract_decision: "denied", fields_consumed: ["asset_path", "contract_decision", "template_vars"], matched_reason: `自定义模板集 "${templateSet}" 缺少显式合同: 在 config.scaffold.contracts["${templateSet}"] 中定义 required_template_vars, tech_stack, output_boundary, forbidden_patterns`, task_id_or_route: "generateScaffold", consumed_at: new Date().toISOString() });
68
+ warnings.push(`自定义模板集 "${templateSet}" 缺少显式合同 — 请在 config.scaffold.contracts["${templateSet}"] 中定义: required_template_vars, tech_stack, output_boundary`);
69
+ debug("脚手架生成", `自定义模板集缺少合同被阻断: ${templateSet}`);
70
+ continue;
71
+ }
72
+ const contractResult = validateCustomContract(customAssetId, tplFile, contract, config);
73
+ if (!contractResult.passed) {
74
+ recordConsumptionTrace({ consumer: "scaffold", asset_id: customAssetId, asset_path: customAssetId, contract_decision: "denied", fields_consumed: ["asset_path", "contract_decision", "template_vars"], matched_reason: contractResult.reason, task_id_or_route: "generateScaffold", consumed_at: new Date().toISOString() });
75
+ warnings.push(contractResult.reason);
76
+ debug("脚手架生成", `自定义模板被合同阻断: ${customAssetId} — ${contractResult.reason}`);
77
+ continue;
78
+ }
79
+ }
32
80
  const templateContent = await fs.readFile(path.join(templateDir, tplFile), "utf-8");
81
+ // 自定义模板: 必需变量内容校验
82
+ if (!isBuiltin) {
83
+ const customAssetId = `custom:${templateSet}/${tplFile}`;
84
+ const contract = config.scaffold?.contracts?.[templateSet];
85
+ if (!contract)
86
+ continue; // 前面已阻断
87
+ const requiredVars = contract.required_template_vars ?? [];
88
+ // 检查模板内容是否引用了所有必需变量
89
+ const missing = requiredVars.filter(v => !templateContent.includes(`{{${v}}}`) && !templateContent.includes(v));
90
+ if (missing.length > 0) {
91
+ recordConsumptionTrace({ consumer: "scaffold", asset_id: customAssetId, asset_path: customAssetId, contract_decision: "denied", fields_consumed: ["asset_path", "contract_decision", "template_vars"], matched_reason: `模板缺少必需变量引用: ${missing.join(", ")}`, task_id_or_route: "generateScaffold", consumed_at: new Date().toISOString() });
92
+ warnings.push(`自定义模板 ${tplFile} 缺少必需变量引用: ${missing.join(", ")}`);
93
+ continue;
94
+ }
95
+ recordConsumptionTrace({ consumer: "scaffold", asset_id: customAssetId, asset_path: customAssetId, contract_decision: "allowed", fields_consumed: ["asset_path", "contract_decision", "template_vars"], matched_reason: "自定义模板通过合同校验", task_id_or_route: "generateScaffold", consumed_at: new Date().toISOString() });
96
+ }
33
97
  const compiled = Handlebars.compile(templateContent, {
34
98
  knownHelpersOnly: true,
35
99
  knownHelpers: { if: true, each: true, with: true, unless: true, lookup: true, log: true },
36
100
  });
37
101
  const vars = buildTemplateVars(moduleName, config, templateSet, classification);
102
+ // 内置模板: 校验 required_template_vars 与模板真实引用变量一致
103
+ if (isBuiltin) {
104
+ const relPath = `templates/scaffolds/${templateSet}/${tplFile}`;
105
+ const contract = getContractByPath(relPath);
106
+ if (contract?.required_template_vars && contract.required_template_vars.length > 0) {
107
+ for (const reqVar of contract.required_template_vars) {
108
+ if (!(reqVar in vars) || !vars[reqVar]) {
109
+ warnings.push(`缺少合同要求的模板变量: ${reqVar} — 模板 ${tplFile} 无法渲染`);
110
+ debug("脚手架生成", `变量缺失: ${reqVar} 在 ${relPath}`);
111
+ }
112
+ }
113
+ }
114
+ }
38
115
  const rendered = compiled(vars);
116
+ // 自定义模板: 输出边界校验
117
+ if (!isBuiltin) {
118
+ const contract = config.scaffold?.contracts?.[templateSet];
119
+ if (!contract)
120
+ continue;
121
+ const boundaryResult = validateOutputBoundary(tplFile, rendered, contract);
122
+ if (!boundaryResult.passed) {
123
+ warnings.push(boundaryResult.reason);
124
+ debug("脚手架生成", `输出边界违反: ${tplFile} — ${boundaryResult.reason}`);
125
+ continue;
126
+ }
127
+ }
39
128
  // 计算目标路径
40
129
  const outputName = tplFile.replace(".hbs", "").replaceAll("{{ModuleName}}", vars.ModuleName);
41
130
  const targetPath = resolveTargetPath(outputName, vars, templateSet, config);
@@ -122,7 +211,7 @@ function pluralize(name) {
122
211
  return name + "s";
123
212
  }
124
213
  // ── 模板集解析 ──
125
- /** 根据项目技术栈解析适用的模板集 — 当前支持 spring-boot 和 react,默认使用 spring-boot */
214
+ /** 根据项目技术栈解析适用的模板集 — 当前支持 spring-boot 和 react */
126
215
  function resolveTemplateSets(config) {
127
216
  const sets = [];
128
217
  const backendFramework = config.tech_stack.backend.framework.toLowerCase();
@@ -131,10 +220,19 @@ function resolveTemplateSets(config) {
131
220
  sets.push("spring-boot");
132
221
  if (frontendFramework.includes("react"))
133
222
  sets.push("react");
134
- if (sets.length === 0)
135
- sets.push("spring-boot"); // 默认后端
136
223
  return sets;
137
224
  }
225
+ function matchesBuiltinTechStack(required, config) {
226
+ if (required.length === 0)
227
+ return true;
228
+ const actual = [
229
+ config.tech_stack.backend.lang,
230
+ config.tech_stack.backend.framework,
231
+ config.tech_stack.frontend.lang,
232
+ config.tech_stack.frontend.framework,
233
+ ].filter(Boolean).map((value) => value.toLowerCase());
234
+ return required.some((value) => actual.some((actualValue) => actualValue.includes(value.toLowerCase())));
235
+ }
138
236
  /**
139
237
  * 解析模板目录路径 — 优先使用项目自定义模板目录,回退到内置模板目录。
140
238
  * @param templateSet - 模板集名称(如 "spring-boot"、"react")
@@ -148,7 +246,12 @@ function resolveTemplateDir(templateSet, config) {
148
246
  if (fss.existsSync(customDir))
149
247
  return customDir;
150
248
  }
151
- return path.join(process.cwd(), "templates", "scaffolds", templateSet);
249
+ // npm 包路径解析内置脚手架模板,使用 import.meta.dirname
250
+ const builtinDir = path.resolve(import.meta.dirname, "..", "..", "templates", "scaffolds", templateSet);
251
+ if (fss.existsSync(builtinDir))
252
+ return builtinDir;
253
+ // 最终回退仍指向包内路径
254
+ return builtinDir;
152
255
  }
153
256
  /**
154
257
  * 构建 Handlebars 模板变量 — 包括模块名各种命名风格(Pascal/camel/snake/SCREAMING_SNAKE)和项目元信息。
@@ -237,11 +340,45 @@ function resolveTargetPath(outputName, vars, templateSet, config) {
237
340
  }
238
341
  return outputName;
239
342
  }
343
+ /** 校验自定义模板的项目级合同(tech_stack + 必需变量声明阶段) */
344
+ function validateCustomContract(assetId, tplFile, contract, config) {
345
+ // tech_stack 校验
346
+ if (contract.tech_stack && contract.tech_stack.length > 0) {
347
+ const backend = config.tech_stack.backend.framework.toLowerCase();
348
+ const frontend = config.tech_stack.frontend.framework.toLowerCase();
349
+ const matched = contract.tech_stack.some(ts => backend.includes(ts.toLowerCase()) || frontend.includes(ts.toLowerCase()));
350
+ if (!matched) {
351
+ return { passed: false, reason: `自定义模板 ${tplFile} 要求技术栈 [${contract.tech_stack.join(", ")}],与当前项目 (${backend}/${frontend}) 不匹配` };
352
+ }
353
+ }
354
+ return { passed: true, reason: "" };
355
+ }
356
+ /** 校验渲染后输出的边界约束 */
357
+ function validateOutputBoundary(tplFile, rendered, contract) {
358
+ const boundary = contract.output_boundary;
359
+ if (!boundary)
360
+ return { passed: true, reason: "" };
361
+ // 文件大小校验
362
+ if (boundary.max_file_size && rendered.length > boundary.max_file_size) {
363
+ return { passed: false, reason: `自定义模板 ${tplFile} 输出超过最大限制: ${rendered.length} > ${boundary.max_file_size} 字节` };
364
+ }
365
+ // 禁止内容模式校验
366
+ if (boundary.forbidden_patterns) {
367
+ for (const pattern of boundary.forbidden_patterns) {
368
+ try {
369
+ if (new RegExp(pattern).test(rendered)) {
370
+ return { passed: false, reason: `自定义模板 ${tplFile} 输出包含禁止内容: /${pattern}/` };
371
+ }
372
+ }
373
+ catch {
374
+ // 无效正则视为不匹配
375
+ }
376
+ }
377
+ }
378
+ return { passed: true, reason: "" };
379
+ }
240
380
  /**
241
381
  * 生成文件中文描述 — 根据输出文件名后缀和前缀匹配预定义描述表。
242
- * @param outputName - 输出文件名
243
- * @param moduleName - 模块名
244
- * @returns 文件中文描述
245
382
  */
246
383
  function describeFile(outputName, moduleName) {
247
384
  // 文件后缀 → 中文描述映射表
@@ -1 +1 @@
1
- {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../../src/engine/scaffolder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../../src/engine/scaffolder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ /**
2
+ * 标准资产契约 — 为每类标准资产定义机器可读契约字段。
3
+ *
4
+ * 覆盖模板、规则、流程、检查清单、审查规则、patterns、脚手架
5
+ * 和 adapter workflow 的契约 schema、验证和修复闭环。
6
+ */
7
+ export type AssetContractKind = "acceptance_template" | "rule" | "procedure" | "checklist" | "review_rule" | "pattern" | "scaffold" | "adapter_workflow";
8
+ export type ContractLevel = "required" | "supporting" | "advisory";
9
+ export interface StandardAssetContract {
10
+ contract_version: string;
11
+ asset_id: string;
12
+ asset_kind: AssetContractKind;
13
+ owner_mechanism_id: string;
14
+ contract_level: ContractLevel;
15
+ applicable_routes: string[];
16
+ applicable_task_types: string[];
17
+ applicable_output_paths: string[];
18
+ applicable_tech_stacks: string[];
19
+ trigger_conditions: string[];
20
+ required_inputs: string[];
21
+ required_outputs: string[];
22
+ failure_severity: "hard_fail" | "advisory";
23
+ verification_strategy: string[];
24
+ /** per-kind 额外字段存储 */
25
+ kind_specific: Record<string, unknown>;
26
+ }
27
+ export interface ContractVerificationResult {
28
+ passed: boolean;
29
+ contract: StandardAssetContract;
30
+ missing_fields: string[];
31
+ messages: string[];
32
+ }
33
+ export interface RepairReverifyDirective {
34
+ phase_directive: "repair_reverify";
35
+ asset_id: string;
36
+ contract_id: string;
37
+ missing_fields: string[];
38
+ messages: string[];
39
+ repair_suggestion: string;
40
+ }
41
+ export declare const P0_TEMPLATE_CONTRACTS: StandardAssetContract[];
42
+ export declare function getStandardAssetContractSchema(kind: AssetContractKind): string[];
43
+ export declare function verifyStandardAssetContract(contract: StandardAssetContract): ContractVerificationResult;
44
+ /**
45
+ * 模板匹配 — 综合输出产物类型、工作流意图、路由决策、文件路径和用户要求,
46
+ * 不只用文件名判断。
47
+ */
48
+ export declare function matchTemplateContract(params: {
49
+ output_artifact_kind?: string;
50
+ workflow_intent?: string;
51
+ route_decision?: string;
52
+ file_path?: string;
53
+ user_requirement?: string;
54
+ }): StandardAssetContract | null;
55
+ /**
56
+ * 验证真实产物文件是否满足契约要求。
57
+ */
58
+ export declare function verifyOutputAgainstContract(contract: StandardAssetContract, content: string, rootDir: string): ContractVerificationResult;
59
+ /**
60
+ * 生成修复重验指令。
61
+ */
62
+ export declare function createRepairReverifyDirective(contract: StandardAssetContract, result: ContractVerificationResult): RepairReverifyDirective;
63
+ /**
64
+ * 检查是否为低风险任务(不应触发模板契约)。
65
+ */
66
+ export declare function isLowRiskTask(params: {
67
+ route_decision?: string;
68
+ workflow_intent?: string;
69
+ changed_files?: string[];
70
+ }): boolean;
71
+ /**
72
+ * 检查草稿标记 — 草稿文档不应进入编码消费。
73
+ */
74
+ export declare function isDraftDocument(content: string): boolean;
75
+ //# sourceMappingURL=standard_asset_contract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard_asset_contract.d.ts","sourceRoot":"","sources":["../../src/engine/standard_asset_contract.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH,MAAM,MAAM,iBAAiB,GACzB,qBAAqB,GACrB,MAAM,GACN,WAAW,GACX,WAAW,GACX,aAAa,GACb,SAAS,GACT,UAAU,GACV,kBAAkB,CAAC;AAEvB,MAAM,MAAM,aAAa,GAAG,UAAU,GAAG,YAAY,GAAG,UAAU,CAAC;AAEnE,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,iBAAiB,CAAC;IAC9B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,aAAa,CAAC;IAC9B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,uBAAuB,EAAE,MAAM,EAAE,CAAC;IAClC,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,gBAAgB,EAAE,WAAW,GAAG,UAAU,CAAC;IAC3C,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,sBAAsB;IACtB,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,0BAA0B;IACzC,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,qBAAqB,CAAC;IAChC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,uBAAuB;IACtC,eAAe,EAAE,iBAAiB,CAAC;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAqCD,eAAO,MAAM,qBAAqB,EAAE,qBAAqB,EAyHxD,CAAC;AAIF,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,iBAAiB,GAAG,MAAM,EAAE,CAEhF;AAED,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,qBAAqB,GAC9B,0BAA0B,CA4B5B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B,GAAG,qBAAqB,GAAG,IAAI,CAoC/B;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,qBAAqB,EAC/B,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,0BAA0B,CA4G5B;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,qBAAqB,EAC/B,MAAM,EAAE,0BAA0B,GACjC,uBAAuB,CAazB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;CAC1B,GAAG,OAAO,CAYV;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAUxD"}