speccore 8.3.33 → 8.3.35
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/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +17 -11
- package/dist/commands/analyze.js.map +1 -1
- package/dist/core/requirement-clarifier.d.ts +1 -0
- package/dist/core/requirement-clarifier.d.ts.map +1 -1
- package/dist/core/requirement-clarifier.js +6 -6
- package/dist/core/requirement-clarifier.js.map +1 -1
- package/dist/core/spec-paths.d.ts.map +1 -1
- package/dist/core/spec-paths.js +9 -2
- package/dist/core/spec-paths.js.map +1 -1
- package/dist/core/spec-skeleton.d.ts +2 -0
- package/dist/core/spec-skeleton.d.ts.map +1 -1
- package/dist/core/spec-skeleton.js +81 -14
- package/dist/core/spec-skeleton.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"AAoEA,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACxC,KAAK,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACpC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,QAAQ,CAAC,EAAE,OAAO,CAAC;IAEnB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB,WAAW,CAAC,EAAE,OAAO,CAAC;IAEtB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd,SAAS,CAAC,EAAE,OAAO,CAAC;IAEpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAEhB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"analyze.d.ts","sourceRoot":"","sources":["../../src/commands/analyze.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/analyze.js
CHANGED
|
@@ -1103,7 +1103,8 @@ async function analyzeCommand(options) {
|
|
|
1103
1103
|
const fp = (0, path_1.join)(goldenDir, reqFilePath);
|
|
1104
1104
|
await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(fp));
|
|
1105
1105
|
let finalContent = content;
|
|
1106
|
-
|
|
1106
|
+
// v8.3.35: 新文件名格式 {feature-name}-clarified.md
|
|
1107
|
+
if (reqFilePath.endsWith('-clarified.md') && !content.startsWith('---')) {
|
|
1107
1108
|
finalContent = (0, requirement_clarifier_1.buildClarifiedHeader)(reqFilePath) + content;
|
|
1108
1109
|
}
|
|
1109
1110
|
await (0, fs_extra_1.writeFile)(fp, finalContent);
|
|
@@ -1119,7 +1120,8 @@ async function analyzeCommand(options) {
|
|
|
1119
1120
|
const fp = (0, path_1.join)(goldenDir, reqFilePath.replace(/^converted\//, ''));
|
|
1120
1121
|
await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(fp));
|
|
1121
1122
|
let finalContent = content;
|
|
1122
|
-
|
|
1123
|
+
// v8.3.35: 新文件名格式 {feature-name}-clarified.md
|
|
1124
|
+
if (reqFilePath.endsWith('-clarified.md') && !content.startsWith('---')) {
|
|
1123
1125
|
finalContent = (0, requirement_clarifier_1.buildClarifiedHeader)(reqFilePath) + content;
|
|
1124
1126
|
}
|
|
1125
1127
|
await (0, fs_extra_1.writeFile)(fp, finalContent);
|
|
@@ -1492,7 +1494,8 @@ async function analyzeCommand(options) {
|
|
|
1492
1494
|
const fp = (0, path_1.join)(goldenDir, reqFilePath);
|
|
1493
1495
|
await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(fp));
|
|
1494
1496
|
let finalContent = content;
|
|
1495
|
-
|
|
1497
|
+
// v8.3.35: 新文件名格式 {feature-name}-clarified.md
|
|
1498
|
+
if (reqFilePath.endsWith('-clarified.md') && !content.startsWith('---')) {
|
|
1496
1499
|
finalContent = (0, requirement_clarifier_1.buildClarifiedHeader)(reqFilePath) + content;
|
|
1497
1500
|
}
|
|
1498
1501
|
await (0, fs_extra_1.writeFile)(fp, finalContent);
|
|
@@ -1507,7 +1510,8 @@ async function analyzeCommand(options) {
|
|
|
1507
1510
|
const fp = (0, path_1.join)(goldenDir, reqFilePath.replace(/^converted\//, ''));
|
|
1508
1511
|
await (0, fs_extra_1.ensureDir)((0, path_1.dirname)(fp));
|
|
1509
1512
|
let finalContent = content;
|
|
1510
|
-
|
|
1513
|
+
// v8.3.35: 新文件名格式 {feature-name}-clarified.md
|
|
1514
|
+
if (reqFilePath.endsWith('-clarified.md') && !content.startsWith('---')) {
|
|
1511
1515
|
finalContent = (0, requirement_clarifier_1.buildClarifiedHeader)(reqFilePath) + content;
|
|
1512
1516
|
}
|
|
1513
1517
|
await (0, fs_extra_1.writeFile)(fp, finalContent);
|
|
@@ -4112,7 +4116,7 @@ sequenceDiagram
|
|
|
4112
4116
|
prompt += `**Step 3**: 补充:验收标准(AC)、功能边界、业务规则、异常处理、数据模型\n`;
|
|
4113
4117
|
prompt += `**Step 4**: 输出澄清后的文档,使用以下标记格式:\n`;
|
|
4114
4118
|
prompt += `\`\`\`
|
|
4115
|
-
[CLARIFY:requirements/
|
|
4119
|
+
[CLARIFY:requirements/{feature-name}-clarified.md]
|
|
4116
4120
|
---
|
|
4117
4121
|
source: "原始文档路径"
|
|
4118
4122
|
clarified-at: "${now}"
|
|
@@ -4140,7 +4144,7 @@ status: "clarified"
|
|
|
4140
4144
|
...
|
|
4141
4145
|
\`\`\`
|
|
4142
4146
|
`;
|
|
4143
|
-
prompt += `**Step 5**: 用 Read 工具验证文件已正确写入 \`{迭代}/020-specs/requirements/
|
|
4147
|
+
prompt += `**Step 5**: 用 Read 工具验证文件已正确写入 \`{迭代}/020-specs/requirements/{feature-name}-clarified.md\`\n`;
|
|
4144
4148
|
prompt += `**Step 6**: 基于澄清后的需求继续 Phase 1 分析\n\n`;
|
|
4145
4149
|
prompt += `### ⚠️ 重要提醒\n\n`;
|
|
4146
4150
|
prompt += `- **如果输出中没有 [CLARIFY:xxx] 标记的澄清文档,--apply 阶段将拒绝写入所有分析结果**\n`;
|
|
@@ -4247,7 +4251,9 @@ status: "clarified"
|
|
|
4247
4251
|
if (iterDir) {
|
|
4248
4252
|
const platforms = await (0, spec_paths_1.parsePlatformList)();
|
|
4249
4253
|
const phase = options?.phase;
|
|
4250
|
-
|
|
4254
|
+
// v8.3.34: 按需求文档名组织,prompt 中的文件清单也要用功能模块结构
|
|
4255
|
+
const features = await (0, spec_paths_1.parseFeatureList)(iterDir);
|
|
4256
|
+
const manifest = (0, spec_skeleton_1.computeFeatureBasedAnalyzeManifest)(features, platforms, phase, iter);
|
|
4251
4257
|
const specDir = (0, path_1.join)(iterDir, '020-specs');
|
|
4252
4258
|
prompt += (0, spec_skeleton_1.buildSkeletonFileList)(manifest, specDir);
|
|
4253
4259
|
}
|
|
@@ -5246,11 +5252,11 @@ async function buildClarifyPhasePrompt(iteration) {
|
|
|
5246
5252
|
prompt += ` - 记录取舍:每轮迭代记录「采纳/拒绝/待确认」的决策\n\n`;
|
|
5247
5253
|
prompt += `## Step 5: 确认写入\n\n`;
|
|
5248
5254
|
prompt += `当用户确认 "满意,可以写入" 后:\n\n`;
|
|
5249
|
-
prompt += `1. 将最终版 PRD 写入 \`020-specs/requirements/
|
|
5250
|
-
prompt += `2. 同时生成 \`020-specs/requirements/
|
|
5255
|
+
prompt += `1. 将最终版 PRD 写入 \`020-specs/requirements/{源文件名}-clarified.md\`(黄金需求目录)\n`;
|
|
5256
|
+
prompt += `2. 同时生成 \`020-specs/requirements/{源文件名}-clarified-diff.md\` 保存最终对比报告\n`;
|
|
5251
5257
|
prompt += `3. 使用以下命令写入:\n\n`;
|
|
5252
5258
|
prompt += `\`\`\`bash\n`;
|
|
5253
|
-
prompt += `speccore analyze --apply '{"020-specs/requirements/clarified
|
|
5259
|
+
prompt += `speccore analyze --apply '{"020-specs/requirements/xxx-clarified.md":"...","020-specs/requirements/xxx-clarified-diff.md":"..."}' -I ${iteration}\n`;
|
|
5254
5260
|
prompt += `\`\`\`\n\n`;
|
|
5255
5261
|
prompt += `> 注意:写入后 CLI 会自动推进到需求确认阶段。\n`;
|
|
5256
5262
|
return await injectGraphSummary(prompt);
|
|
@@ -5286,7 +5292,7 @@ async function buildConfirmCheckPrompt(iteration) {
|
|
|
5286
5292
|
}
|
|
5287
5293
|
prompt += `## 确认检查清单\n\n`;
|
|
5288
5294
|
prompt += `请逐项确认:\n\n`;
|
|
5289
|
-
prompt += `- [ ] clarified
|
|
5295
|
+
prompt += `- [ ] *-clarified.md 已写入 \`020-specs/requirements/\`(黄金需求目录)\n`;
|
|
5290
5296
|
prompt += `- [ ] 验收标准可测试、可量化\n`;
|
|
5291
5297
|
prompt += `- [ ] 功能边界明确(不做什么)\n`;
|
|
5292
5298
|
prompt += `- [ ] 业务流程完整(含异常分支)\n`;
|