speccore 8.3.224 → 8.3.226
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 +9 -8
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/doc2spec.d.ts.map +1 -1
- package/dist/commands/doc2spec.js +50 -4
- package/dist/commands/doc2spec.js.map +1 -1
- package/dist/commands/init.js +1 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/iteration/create.js +2 -2
- package/dist/commands/iteration/split.d.ts.map +1 -1
- package/dist/commands/iteration/split.js +4 -3
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/synthesize.d.ts.map +1 -1
- package/dist/commands/synthesize.js +7 -5
- package/dist/commands/synthesize.js.map +1 -1
- package/dist/commands/units.d.ts.map +1 -1
- package/dist/commands/units.js +4 -3
- package/dist/commands/units.js.map +1 -1
- package/dist/core/analyze-context-guard.js +1 -1
- package/dist/core/analyze-engine.d.ts.map +1 -1
- package/dist/core/analyze-engine.js +4 -2
- package/dist/core/analyze-engine.js.map +1 -1
- package/dist/core/feature-metadata.d.ts.map +1 -1
- package/dist/core/feature-metadata.js +4 -3
- package/dist/core/feature-metadata.js.map +1 -1
- package/dist/core/feature-source.d.ts +12 -0
- package/dist/core/feature-source.d.ts.map +1 -0
- package/dist/core/feature-source.js +52 -0
- package/dist/core/feature-source.js.map +1 -0
- package/dist/core/handoff-generator.d.ts.map +1 -1
- package/dist/core/handoff-generator.js +3 -1
- package/dist/core/handoff-generator.js.map +1 -1
- package/dist/core/module-analyzer.d.ts.map +1 -1
- package/dist/core/module-analyzer.js +5 -4
- package/dist/core/module-analyzer.js.map +1 -1
- package/dist/core/platform-inference.d.ts.map +1 -1
- package/dist/core/platform-inference.js +8 -1
- package/dist/core/platform-inference.js.map +1 -1
- package/dist/core/requirement-clarifier.d.ts +1 -1
- package/dist/core/requirement-clarifier.d.ts.map +1 -1
- package/dist/core/requirement-clarifier.js +3 -2
- package/dist/core/requirement-clarifier.js.map +1 -1
- package/dist/core/semantic-locator.d.ts.map +1 -1
- package/dist/core/semantic-locator.js +2 -1
- package/dist/core/semantic-locator.js.map +1 -1
- package/dist/core/spec-merger.d.ts +1 -1
- package/dist/core/spec-merger.d.ts.map +1 -1
- package/dist/core/spec-merger.js +13 -11
- package/dist/core/spec-merger.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
|
@@ -62,6 +62,7 @@ const cleanup_1 = require("./cleanup");
|
|
|
62
62
|
const logger_1 = require("../utils/logger");
|
|
63
63
|
const context_1 = require("../core/context");
|
|
64
64
|
const task_paths_1 = require("../core/task-paths");
|
|
65
|
+
const feature_source_1 = require("../core/feature-source");
|
|
65
66
|
const analyze_engine_1 = require("../core/analyze-engine");
|
|
66
67
|
const fs_extra_2 = require("fs-extra");
|
|
67
68
|
const prompt_builder_1 = require("../core/prompt-builder");
|
|
@@ -510,7 +511,7 @@ async function analyzeCommand(options) {
|
|
|
510
511
|
if (!reqModules.includes(moduleName)) {
|
|
511
512
|
logger_1.logger.warn(`⚠️ 需求文档中未找到功能模块 "${moduleName}"`);
|
|
512
513
|
logger_1.logger.info(` 需求中已有的模块: ${reqModules.slice(0, 10).join(', ')}${reqModules.length > 10 ? '...' : ''}`);
|
|
513
|
-
logger_1.logger.info(` 建议: 先确认模块名称是否正确,或在 010-requirements/features/ 中创建 ${moduleName}/
|
|
514
|
+
logger_1.logger.info(` 建议: 先确认模块名称是否正确,或在 010-requirements/features/ 中创建 ${moduleName}/SOURCE.md`);
|
|
514
515
|
}
|
|
515
516
|
}
|
|
516
517
|
logger_1.logger.info(` 涉及端: ${result.involvedPlatforms.join(', ') || '待确定'}`);
|
|
@@ -550,7 +551,7 @@ async function analyzeCommand(options) {
|
|
|
550
551
|
spinner.start();
|
|
551
552
|
const result = await (0, analyze_engine_1.analyzeSingleFeature)(iterDir, featureName);
|
|
552
553
|
if (!result) {
|
|
553
|
-
spinner.fail(`未找到功能模块: 010-requirements/features/${featureName}/README.md
|
|
554
|
+
spinner.fail(`未找到功能模块: 010-requirements/features/${featureName}/SOURCE.md(旧项目为 README.md)`);
|
|
554
555
|
return;
|
|
555
556
|
}
|
|
556
557
|
spinner.stop(`✅ 局部分析完成: 020-specs/features/${featureName}.md`);
|
|
@@ -969,14 +970,14 @@ async function analyzeCommand(options) {
|
|
|
969
970
|
const reqRoot = (0, path_1.join)(reqDir, 'REQUIREMENT.md');
|
|
970
971
|
if (await (0, fs_extra_1.pathExists)(reqRoot))
|
|
971
972
|
requirements.push(reqRoot);
|
|
972
|
-
// 收集 features/*/README.md
|
|
973
|
+
// 收集 features/*/SOURCE.md(v8.3.226+ 语义名,兼容旧 README.md)
|
|
973
974
|
const featuresDir = (0, path_1.join)(reqDir, 'features');
|
|
974
975
|
if (await (0, fs_extra_1.pathExists)(featuresDir)) {
|
|
975
976
|
try {
|
|
976
977
|
const featureEntries = await (0, fs_extra_2.readdir)(featuresDir, { withFileTypes: true });
|
|
977
978
|
for (const fe of featureEntries) {
|
|
978
979
|
if (fe.isDirectory() && !fe.name.startsWith('.')) {
|
|
979
|
-
const readmePath = (0, path_1.join)(featuresDir, fe.name
|
|
980
|
+
const readmePath = await (0, feature_source_1.resolveUnitSourcePath)((0, path_1.join)(featuresDir, fe.name));
|
|
980
981
|
if (await (0, fs_extra_1.pathExists)(readmePath))
|
|
981
982
|
requirements.push(readmePath);
|
|
982
983
|
}
|
|
@@ -5457,7 +5458,7 @@ status: "clarified"
|
|
|
5457
5458
|
prompt += `3. 读取迭代需求文档(按功能模块组织):\n`;
|
|
5458
5459
|
prompt += ` a. 先读 010-requirements/INDEX.md — 获取功能模块清单\n`;
|
|
5459
5460
|
prompt += ` b. **按功能模块逐一读取**:每个功能模块独立分析,不要跨模块混淆\n`;
|
|
5460
|
-
prompt += ` - 读取该模块对应的 010-requirements/converted/*.md 或 features/{模块}/README.md
|
|
5461
|
+
prompt += ` - 读取该模块对应的 010-requirements/converted/*.md 或 features/{模块}/SOURCE.md(旧项目为 README.md)\n`;
|
|
5461
5462
|
prompt += ` - 读取该模块涉及的原型文件(HTML/图片/链接)\n`;
|
|
5462
5463
|
prompt += ` c. **文档长度自适应**:如果单个需求文档超过 5000 字,先快速扫描目录和章节标题,标记关键章节,再深入阅读\n`;
|
|
5463
5464
|
prompt += `4. **按功能模块逐一撰写文档(重要)**:\n`;
|
|
@@ -5510,7 +5511,7 @@ status: "clarified"
|
|
|
5510
5511
|
prompt += ` - 「来源」:该功能模块在需求文档中的具体位置,用 Markdown 链接格式\n`;
|
|
5511
5512
|
prompt += ` - 格式:[文档名](相对路径#章节锚点),如 [PRD v2.0](../010-requirements/sources/PRD-v2.0.md#3-2-会议室管理)\n`;
|
|
5512
5513
|
prompt += ` - 如果模块来自 converted 文档:[xxx需求](../010-requirements/converted/xxx.md#相关章节)\n`;
|
|
5513
|
-
prompt += ` - 如果来自 features 目录:[xxx功能](../010-requirements/features/xxx/
|
|
5514
|
+
prompt += ` - 如果来自 features 目录:[xxx功能](../010-requirements/features/xxx/SOURCE.md)\n`;
|
|
5514
5515
|
prompt += ` - 目的是让阅读者能直接点击跳转到原始需求位置\n`;
|
|
5515
5516
|
prompt += ` - 示例:| M-01 | 会议室档案管理 | room-service, admin-web | 扩展:增加设备管理 | [PRD v2.0](../010-requirements/sources/PRD-v2.0.md#2-1) | 会议室 CRUD、设备管理 |\n`;
|
|
5516
5517
|
prompt += ` - split 命令将读取「涉及端」列来决定创建哪些端的子任务目录\n`;
|
|
@@ -6121,7 +6122,7 @@ async function buildClarifyPhasePrompt(iteration) {
|
|
|
6121
6122
|
prompt += `1. \`010-requirements/INDEX.md\` — 需求全貌\n`;
|
|
6122
6123
|
prompt += `2. \`010-requirements/sources/*.md\` — 原始需求(主要依据)\n`;
|
|
6123
6124
|
prompt += `3. \`010-requirements/converted/*.md\` — 已转换文档\n`;
|
|
6124
|
-
prompt += `4. \`010-requirements/features/*/README.md
|
|
6125
|
+
prompt += `4. \`010-requirements/features/*/SOURCE.md\`(旧项目为 README.md) — 功能级补充\n`;
|
|
6125
6126
|
prompt += `5. \`010-requirements/prototypes/\` — 原型文件\n\n`;
|
|
6126
6127
|
// v8.3.160+ 修复:列出实际扫描到的源文档清单,明确每份文档独立澄清
|
|
6127
6128
|
if (docPaths.length > 0) {
|
|
@@ -6395,7 +6396,7 @@ async function extractIterationUnits(iterDir) {
|
|
|
6395
6396
|
const entries = await (0, fs_extra_2.readdir)(featuresDir, { withFileTypes: true });
|
|
6396
6397
|
const dirs = entries.filter(e => e.isDirectory() && !e.name.startsWith('.') && !e.name.startsWith('_'));
|
|
6397
6398
|
for (const dir of dirs) {
|
|
6398
|
-
const readmePath = (0, path_1.join)(featuresDir, dir.name
|
|
6399
|
+
const readmePath = await (0, feature_source_1.resolveUnitSourcePath)((0, path_1.join)(featuresDir, dir.name));
|
|
6399
6400
|
let content = '';
|
|
6400
6401
|
if (await (0, fs_extra_1.pathExists)(readmePath)) {
|
|
6401
6402
|
content = (await (0, fs_extra_2.readFile)(readmePath, 'utf-8')).slice(0, 500);
|