speccore 8.3.262 → 8.3.263
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 +39 -4
- package/dist/commands/analyze.js.map +1 -1
- package/dist/core/ask-engine.d.ts.map +1 -1
- package/dist/core/ask-engine.js +7 -0
- package/dist/core/ask-engine.js.map +1 -1
- package/dist/core/intent-cache.d.ts.map +1 -1
- package/dist/core/intent-cache.js +16 -7
- package/dist/core/intent-cache.js.map +1 -1
- package/dist/core/intent-recognition.d.ts +2 -0
- package/dist/core/intent-recognition.d.ts.map +1 -1
- package/dist/core/intent-recognition.js +15 -1
- package/dist/core/intent-recognition.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":"
|
|
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
|
@@ -5954,8 +5954,29 @@ async function generateQualityReport(iteration) {
|
|
|
5954
5954
|
}
|
|
5955
5955
|
return { docPaths, reports: qualityReports };
|
|
5956
5956
|
}
|
|
5957
|
+
// v8.3.263: 澄清阶段的功能单元优先从 features/ 目录提取(切分层对齐锚点)——
|
|
5958
|
+
// 文档章节提取会把「使用规范/修订记录」等元章节误当功能单元,导致澄清粒度错位;
|
|
5959
|
+
// features/ 为空时才回退到文档章节提取。
|
|
5960
|
+
async function extractUnitsForClarify(iterDir, allDocContent) {
|
|
5961
|
+
const featuresDir = (0, path_1.join)(iterDir, '010-requirements', 'features');
|
|
5962
|
+
try {
|
|
5963
|
+
if (await (0, fs_extra_1.pathExists)(featuresDir)) {
|
|
5964
|
+
const entries = await (0, fs_extra_2.readdir)(featuresDir, { withFileTypes: true });
|
|
5965
|
+
const dirs = entries.filter((e) => e.isDirectory() && !e.name.startsWith('.'));
|
|
5966
|
+
if (dirs.length > 0) {
|
|
5967
|
+
return dirs.map((e, i) => ({
|
|
5968
|
+
id: `M-${String(i + 1).padStart(2, '0')}`,
|
|
5969
|
+
name: e.name,
|
|
5970
|
+
content: '',
|
|
5971
|
+
}));
|
|
5972
|
+
}
|
|
5973
|
+
}
|
|
5974
|
+
}
|
|
5975
|
+
catch { /* features/ 不可读时回退章节提取 */ }
|
|
5976
|
+
return (0, requirement_clarifier_1.extractUnitsFromText)(allDocContent);
|
|
5977
|
+
}
|
|
5978
|
+
// 生成质量报告(复用抽离的审查逻辑)+ 拿到文档清单与质量报告
|
|
5957
5979
|
async function buildClarifyPhasePrompt(iteration) {
|
|
5958
|
-
// 生成质量报告(复用抽离的审查逻辑)+ 拿到文档清单与质量报告
|
|
5959
5980
|
const iterDir = await (0, context_1.getIterationDir)(iteration);
|
|
5960
5981
|
const raw = await generateQualityReport(iteration);
|
|
5961
5982
|
// v8.3.236+: 过滤非需求文档——功能单元元数据(features/*/)、全局上下文(overview/GLOBAL_CONTEXT-*)
|
|
@@ -5971,7 +5992,21 @@ async function buildClarifyPhasePrompt(iteration) {
|
|
|
5971
5992
|
return false;
|
|
5972
5993
|
return true;
|
|
5973
5994
|
});
|
|
5974
|
-
|
|
5995
|
+
// v8.3.263: 排除 010-requirements 根 README.md(目录规范说明,非业务需求文档),
|
|
5996
|
+
// 同名文档去重(sources/ 与 converted/ 各一份时 converted 优先——doc2spec 转换版更规范)
|
|
5997
|
+
const rootReadme = (0, path_1.join)(iterDir, '010-requirements', 'README.md');
|
|
5998
|
+
const dedupMap = new Map();
|
|
5999
|
+
for (const r of qualityReports) {
|
|
6000
|
+
if (r.filePath === rootReadme)
|
|
6001
|
+
continue;
|
|
6002
|
+
const base = (0, path_1.basename)(r.filePath);
|
|
6003
|
+
const prev = dedupMap.get(base);
|
|
6004
|
+
if (!prev || (r.filePath.includes('converted') && !prev.filePath.includes('converted'))) {
|
|
6005
|
+
dedupMap.set(base, r);
|
|
6006
|
+
}
|
|
6007
|
+
}
|
|
6008
|
+
const dedupedReports = qualityReports.filter((r) => r.filePath !== rootReadme && dedupMap.get((0, path_1.basename)(r.filePath)) === r);
|
|
6009
|
+
const docPaths = dedupedReports.map((r) => r.filePath);
|
|
5975
6010
|
let allDocContent = '';
|
|
5976
6011
|
for (const p of docPaths) {
|
|
5977
6012
|
try {
|
|
@@ -5979,7 +6014,7 @@ async function buildClarifyPhasePrompt(iteration) {
|
|
|
5979
6014
|
}
|
|
5980
6015
|
catch { /* ignore */ }
|
|
5981
6016
|
}
|
|
5982
|
-
const extractedUnits = (
|
|
6017
|
+
const extractedUnits = await extractUnitsForClarify(iterDir, allDocContent);
|
|
5983
6018
|
const hasMultipleUnits = extractedUnits.length >= 2;
|
|
5984
6019
|
let prompt = `\n# 任务: 需求专业化(Phase 0: 需求澄清,v6.84.0+)\n\n`;
|
|
5985
6020
|
const projectRoot = (0, task_utils_1.findProjectRoot)() || ((0, task_utils_1.findProjectRoot)() || process.cwd());
|
|
@@ -6012,7 +6047,7 @@ async function buildClarifyPhasePrompt(iteration) {
|
|
|
6012
6047
|
prompt += '\n\n';
|
|
6013
6048
|
}
|
|
6014
6049
|
prompt += `## 质量评价摘要(7维度)\n\n`;
|
|
6015
|
-
for (const r of
|
|
6050
|
+
for (const r of dedupedReports) {
|
|
6016
6051
|
const name = r.filePath.split('/').pop() || '-';
|
|
6017
6052
|
prompt += `### ${name} — 综合评分 ${r.overallScore}/100 (${r.level.toUpperCase()})\n\n`;
|
|
6018
6053
|
prompt += `| 维度 | 评分 | 问题数 | 状态 |\n`;
|