speccore 6.6.0 → 6.11.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.
- package/.agents/skills/spec-ask/SKILL.md +24 -4
- package/README.md +10 -0
- package/dist/cli.js +18 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/about.d.ts.map +1 -1
- package/dist/commands/about.js +10 -3
- package/dist/commands/about.js.map +1 -1
- package/dist/commands/analyze.d.ts +3 -0
- package/dist/commands/analyze.d.ts.map +1 -1
- package/dist/commands/analyze.js +178 -11
- package/dist/commands/analyze.js.map +1 -1
- package/dist/commands/change.d.ts.map +1 -1
- package/dist/commands/change.js +16 -4
- package/dist/commands/change.js.map +1 -1
- package/dist/commands/doc2spec.d.ts +1 -0
- package/dist/commands/doc2spec.d.ts.map +1 -1
- package/dist/commands/doc2spec.js +175 -0
- package/dist/commands/doc2spec.js.map +1 -1
- package/dist/commands/done.js +25 -5
- package/dist/commands/done.js.map +1 -1
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +20 -6
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/help.js +32 -5
- package/dist/commands/help.js.map +1 -1
- package/dist/commands/iteration/create.d.ts.map +1 -1
- package/dist/commands/iteration/create.js +40 -15
- package/dist/commands/iteration/create.js.map +1 -1
- package/dist/commands/iteration/split.d.ts.map +1 -1
- package/dist/commands/iteration/split.js +309 -36
- package/dist/commands/iteration/split.js.map +1 -1
- package/dist/commands/knowledge.d.ts +6 -0
- package/dist/commands/knowledge.d.ts.map +1 -0
- package/dist/commands/knowledge.js +94 -0
- package/dist/commands/knowledge.js.map +1 -0
- package/dist/commands/rag-index.d.ts +19 -0
- package/dist/commands/rag-index.d.ts.map +1 -0
- package/dist/commands/rag-index.js +272 -0
- package/dist/commands/rag-index.js.map +1 -0
- package/dist/commands/refresh.d.ts +21 -0
- package/dist/commands/refresh.d.ts.map +1 -0
- package/dist/commands/refresh.js +185 -0
- package/dist/commands/refresh.js.map +1 -0
- package/dist/commands/sync-global.d.ts.map +1 -1
- package/dist/commands/sync-global.js +59 -0
- package/dist/commands/sync-global.js.map +1 -1
- package/dist/core/ai-context-generator.d.ts +2 -0
- package/dist/core/ai-context-generator.d.ts.map +1 -1
- package/dist/core/ai-context-generator.js +8 -6
- package/dist/core/ai-context-generator.js.map +1 -1
- package/dist/core/analyze-engine.d.ts +19 -0
- package/dist/core/analyze-engine.d.ts.map +1 -1
- package/dist/core/analyze-engine.js +326 -9
- package/dist/core/analyze-engine.js.map +1 -1
- package/dist/core/ask-engine.d.ts.map +1 -1
- package/dist/core/ask-engine.js +134 -4
- package/dist/core/ask-engine.js.map +1 -1
- package/dist/core/ask-host-ai.d.ts.map +1 -1
- package/dist/core/ask-host-ai.js +9 -6
- package/dist/core/ask-host-ai.js.map +1 -1
- package/dist/core/code-scanner.d.ts +24 -2
- package/dist/core/code-scanner.d.ts.map +1 -1
- package/dist/core/code-scanner.js +310 -9
- package/dist/core/code-scanner.js.map +1 -1
- package/dist/core/context-builder.d.ts.map +1 -1
- package/dist/core/context-builder.js +28 -9
- package/dist/core/context-builder.js.map +1 -1
- package/dist/core/decay-detector.d.ts +2 -2
- package/dist/core/decay-detector.d.ts.map +1 -1
- package/dist/core/decay-detector.js +135 -6
- package/dist/core/decay-detector.js.map +1 -1
- package/dist/core/git-integration.d.ts +50 -2
- package/dist/core/git-integration.d.ts.map +1 -1
- package/dist/core/git-integration.js +217 -27
- package/dist/core/git-integration.js.map +1 -1
- package/dist/core/global-knowledge.d.ts +25 -0
- package/dist/core/global-knowledge.d.ts.map +1 -0
- package/dist/core/global-knowledge.js +228 -0
- package/dist/core/global-knowledge.js.map +1 -0
- package/dist/core/index-guard.d.ts +57 -0
- package/dist/core/index-guard.d.ts.map +1 -0
- package/dist/core/index-guard.js +202 -0
- package/dist/core/index-guard.js.map +1 -0
- package/dist/core/intent-cache.d.ts +3 -1
- package/dist/core/intent-cache.d.ts.map +1 -1
- package/dist/core/intent-cache.js +33 -3
- package/dist/core/intent-cache.js.map +1 -1
- package/dist/core/intent-recognition.d.ts.map +1 -1
- package/dist/core/intent-recognition.js +21 -2
- package/dist/core/intent-recognition.js.map +1 -1
- package/dist/core/knowledge-graph.d.ts +18 -3
- package/dist/core/knowledge-graph.d.ts.map +1 -1
- package/dist/core/knowledge-graph.js +539 -42
- package/dist/core/knowledge-graph.js.map +1 -1
- package/dist/core/knowledge-visualizer.d.ts +19 -0
- package/dist/core/knowledge-visualizer.d.ts.map +1 -0
- package/dist/core/knowledge-visualizer.js +528 -0
- package/dist/core/knowledge-visualizer.js.map +1 -0
- package/dist/core/next-steps.js +6 -0
- package/dist/core/next-steps.js.map +1 -1
- package/dist/core/platform-registry.d.ts +5 -0
- package/dist/core/platform-registry.d.ts.map +1 -1
- package/dist/core/platform-registry.js +52 -0
- package/dist/core/platform-registry.js.map +1 -1
- package/dist/core/prompt-builder.d.ts +3 -2
- package/dist/core/prompt-builder.d.ts.map +1 -1
- package/dist/core/prompt-builder.js +361 -72
- package/dist/core/prompt-builder.js.map +1 -1
- package/dist/core/rag-engine.d.ts +152 -0
- package/dist/core/rag-engine.d.ts.map +1 -0
- package/dist/core/rag-engine.js +816 -0
- package/dist/core/rag-engine.js.map +1 -0
- package/dist/core/spec-merger.d.ts +133 -0
- package/dist/core/spec-merger.d.ts.map +1 -0
- package/dist/core/spec-merger.js +735 -0
- package/dist/core/spec-merger.js.map +1 -0
- package/dist/core/unified-retrieval.d.ts +141 -0
- package/dist/core/unified-retrieval.d.ts.map +1 -0
- package/dist/core/unified-retrieval.js +471 -0
- package/dist/core/unified-retrieval.js.map +1 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-context-generator.d.ts","sourceRoot":"","sources":["../../src/core/ai-context-generator.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW;IACX,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACvC,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,
|
|
1
|
+
{"version":3,"file":"ai-context-generator.d.ts","sourceRoot":"","sources":["../../src/core/ai-context-generator.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,cAAc;IAC7B,eAAe;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,8BAA8B;IAC9B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IACvB,aAAa;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW;IACX,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACvC,WAAW;IACX,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CACpC;AAED,MAAM,WAAW,eAAe;IAC9B,sBAAsB;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAoEvF"}
|
|
@@ -17,12 +17,14 @@ const INDEX_PATH = (0, path_1.join)('.speccore', 'cache', 'code-structure.json')
|
|
|
17
17
|
// ── 主入口 ──
|
|
18
18
|
async function generateAIContext(input) {
|
|
19
19
|
await (0, fs_extra_1.ensureDir)(PROMPTS_DIR);
|
|
20
|
-
// 1.
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
// 1. 读取需求文档(若调用方已提供则跳过重复读取)
|
|
21
|
+
let reqContents = input.reqContents || [];
|
|
22
|
+
if (reqContents.length === 0) {
|
|
23
|
+
for (const reqPath of input.requirements) {
|
|
24
|
+
if (await (0, fs_extra_1.pathExists)(reqPath)) {
|
|
25
|
+
const content = await (0, fs_extra_1.readFile)(reqPath, 'utf-8');
|
|
26
|
+
reqContents.push(`## 来源: ${reqPath}\n\n${content}`);
|
|
27
|
+
}
|
|
26
28
|
}
|
|
27
29
|
}
|
|
28
30
|
// 1.5 读取 CONSTITUTION.md 获取工程配置映射
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-context-generator.js","sourceRoot":"","sources":["../../src/core/ai-context-generator.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ai-context-generator.js","sourceRoot":"","sources":["../../src/core/ai-context-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -33,6 +33,25 @@ export interface AnalysisResult {
|
|
|
33
33
|
};
|
|
34
34
|
}
|
|
35
35
|
export declare function runAnalysis(input: AnalyzeInput): Promise<AnalysisResult>;
|
|
36
|
+
/**
|
|
37
|
+
* 局部分析:只分析单个功能模块,写入 020-specs/features/{feature}.md
|
|
38
|
+
* 用于 --feature 模式,避免全量重跑
|
|
39
|
+
*/
|
|
40
|
+
export declare function analyzeSingleFeature(iterDir: string, featureName: string): Promise<{
|
|
41
|
+
outputPath: string;
|
|
42
|
+
report: string;
|
|
43
|
+
} | null>;
|
|
44
|
+
/**
|
|
45
|
+
* 局部分析:单个类型文档(bugs/refactors/research)
|
|
46
|
+
*
|
|
47
|
+
* @param iterDir 迭代目录
|
|
48
|
+
* @param docPath 类型路径,如 "bugs/login-timeout" 或 "refactors/db-pool"
|
|
49
|
+
* 对应 010-requirements/{typeDir}/{slug}.md
|
|
50
|
+
*/
|
|
51
|
+
export declare function analyzeSingleTypedDoc(iterDir: string, docPath: string): Promise<{
|
|
52
|
+
outputPath: string;
|
|
53
|
+
report: string;
|
|
54
|
+
} | null>;
|
|
36
55
|
export interface SupplementResult {
|
|
37
56
|
outputPath: string;
|
|
38
57
|
addedFiles: string[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyze-engine.d.ts","sourceRoot":"","sources":["../../src/core/analyze-engine.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"analyze-engine.d.ts","sourceRoot":"","sources":["../../src/core/analyze-engine.ts"],"names":[],"mappings":"AA6BA,MAAM,WAAW,YAAY;IAC3B,aAAa;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,eAAe;IACf,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,WAAW;IACX,KAAK,EAAE,QAAQ,GAAG,WAAW,GAAG,MAAM,CAAC;IACvC,qCAAqC;IACrC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW;IACX,KAAK,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;IACnC,YAAY;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,wBAAwB;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,uBAAuB;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,MAAM,EAAE,MAAM,CAAC;IACf,WAAW;IACX,OAAO,EAAE;QACP,MAAM,EAAE,MAAM,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAMD,wBAAsB,WAAW,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC,CAoI9E;AA4pCD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAoDxD;AAED;;;;;;GAMG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CA8CxD;AA+GD,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAsJnC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.runAnalysis = runAnalysis;
|
|
4
|
+
exports.analyzeSingleFeature = analyzeSingleFeature;
|
|
5
|
+
exports.analyzeSingleTypedDoc = analyzeSingleTypedDoc;
|
|
4
6
|
exports.supplementAnalysis = supplementAnalysis;
|
|
5
7
|
/**
|
|
6
8
|
* analyze-engine — 统一分析引擎
|
|
@@ -24,6 +26,8 @@ const task_utils_1 = require("../utils/task-utils");
|
|
|
24
26
|
const code_scanner_1 = require("./code-scanner");
|
|
25
27
|
const ai_context_generator_1 = require("./ai-context-generator");
|
|
26
28
|
const git_integration_1 = require("./git-integration");
|
|
29
|
+
const rag_engine_1 = require("./rag-engine");
|
|
30
|
+
const knowledge_graph_1 = require("./knowledge-graph");
|
|
27
31
|
// ================================================================
|
|
28
32
|
// 主入口
|
|
29
33
|
// ================================================================
|
|
@@ -89,8 +93,8 @@ async function runAnalysis(input) {
|
|
|
89
93
|
break;
|
|
90
94
|
default: throw new Error(`Unknown analysis type: ${type}`);
|
|
91
95
|
}
|
|
92
|
-
// ──
|
|
93
|
-
if (type
|
|
96
|
+
// ── code 模式生成 AI 上下文(req/combined 已在各自分析函数内处理) ──
|
|
97
|
+
if (type === 'code') {
|
|
94
98
|
try {
|
|
95
99
|
await (0, ai_context_generator_1.generateAIContext)({
|
|
96
100
|
requirements: effectiveInput.requirements,
|
|
@@ -103,6 +107,64 @@ async function runAnalysis(input) {
|
|
|
103
107
|
}
|
|
104
108
|
catch { } // 非关键,静默失败
|
|
105
109
|
}
|
|
110
|
+
// ── 为当前 scope 构建/刷新 RAG 索引(按 scope 分文件,避免互相覆盖)──
|
|
111
|
+
try {
|
|
112
|
+
const cwd = process.cwd();
|
|
113
|
+
if (effectiveInput.scope === 'task' && effectiveInput.taskId && effectiveInput.iteration) {
|
|
114
|
+
// task 模式:索引任务目录(默认文件名 rag-index.json)
|
|
115
|
+
const taskDir = (0, path_1.join)(`Iteration-${effectiveInput.iteration}`, '030-tasks', effectiveInput.taskId);
|
|
116
|
+
if (await (0, fs_extra_1.pathExists)(taskDir)) {
|
|
117
|
+
const { staleFiles, newFiles } = await (0, rag_engine_1.checkRagIndexFreshness)(cwd);
|
|
118
|
+
await (0, rag_engine_1.refreshRagIndex)(cwd, taskDir, effectiveInput.iteration);
|
|
119
|
+
const totalChanges = staleFiles.length + newFiles.length;
|
|
120
|
+
if (totalChanges > 0) {
|
|
121
|
+
logger_1.logger.info(` 🔄 RAG 索引已增量刷新 (${totalChanges} 个文件更新): ${taskDir}`);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
logger_1.logger.info(` 🔍 RAG 索引已生成: ${taskDir}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
else if (effectiveInput.scope === 'iteration' && effectiveInput.iteration) {
|
|
129
|
+
// iteration 模式:索引 020-specs/ 目录(独立文件名)
|
|
130
|
+
const specsDir = (0, path_1.join)(`Iteration-${effectiveInput.iteration}`, '020-specs');
|
|
131
|
+
if (await (0, fs_extra_1.pathExists)(specsDir)) {
|
|
132
|
+
const scope = `${effectiveInput.iteration}_020-specs_iteration_all`;
|
|
133
|
+
const fileName = `rag-index-${effectiveInput.iteration}.json`;
|
|
134
|
+
await (0, rag_engine_1.indexDirectoryDocuments)(cwd, specsDir, scope, fileName);
|
|
135
|
+
logger_1.logger.info(` 🔍 迭代 RAG 索引已生成: ${specsDir} → ${fileName}`);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
else if (effectiveInput.scope === 'global') {
|
|
139
|
+
// global 模式:索引全局 specs 目录(独立文件名)
|
|
140
|
+
const globalSpecsDir = (0, path_1.join)(cwd, '.speccore', 'GLOBAL', '020-specs');
|
|
141
|
+
const fallbackDir = (0, path_1.join)(cwd, '.speccore');
|
|
142
|
+
const targetDir = await (0, fs_extra_1.pathExists)(globalSpecsDir) ? globalSpecsDir : fallbackDir;
|
|
143
|
+
const scope = 'GLOBAL_020-specs_global_all';
|
|
144
|
+
await (0, rag_engine_1.indexDirectoryDocuments)(cwd, targetDir, scope, 'rag-index-global.json');
|
|
145
|
+
logger_1.logger.info(` 🔍 全局 RAG 索引已生成: ${targetDir} → rag-index-global.json`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch (e) {
|
|
149
|
+
logger_1.logger.debug('RAG 索引生成失败(非关键):', e);
|
|
150
|
+
}
|
|
151
|
+
// ── 统一刷新代码索引 + 知识图谱(所有 scope)──
|
|
152
|
+
try {
|
|
153
|
+
logger_1.logger.info(' 🔄 刷新代码索引...');
|
|
154
|
+
await (0, code_scanner_1.buildCodeIndex)(undefined, true);
|
|
155
|
+
logger_1.logger.info(' ✅ 代码索引已刷新');
|
|
156
|
+
}
|
|
157
|
+
catch (e) {
|
|
158
|
+
logger_1.logger.debug('代码索引刷新失败(非关键):', e);
|
|
159
|
+
}
|
|
160
|
+
try {
|
|
161
|
+
logger_1.logger.info(' 🔄 刷新知识图谱...');
|
|
162
|
+
await (0, knowledge_graph_1.refreshKnowledgeGraph)(process.cwd(), effectiveInput.iteration);
|
|
163
|
+
logger_1.logger.info(' ✅ 知识图谱已刷新');
|
|
164
|
+
}
|
|
165
|
+
catch (e) {
|
|
166
|
+
logger_1.logger.debug('知识图谱刷新失败(非关键):', e);
|
|
167
|
+
}
|
|
106
168
|
return result;
|
|
107
169
|
}
|
|
108
170
|
// ================================================================
|
|
@@ -122,6 +184,19 @@ async function analyzeRequirements(input) {
|
|
|
122
184
|
const fullContent = allContent.join('\n\n---\n\n');
|
|
123
185
|
const issues = scanCompleteness(fullContent);
|
|
124
186
|
const archImpact = await analyzeArchitectureImpact(fullContent);
|
|
187
|
+
// ── 需求分析时默认读取关联代码(避免分析不接地气 + 减少重复 token 消耗) ──
|
|
188
|
+
let sourceContents = {};
|
|
189
|
+
const shouldReadSource = input.readSource !== false;
|
|
190
|
+
if (shouldReadSource && (input.iteration || input.taskId)) {
|
|
191
|
+
const limit = input.depth === 'deep' ? 15 : (input.depth === 'quick' ? 3 : 8);
|
|
192
|
+
const maxBytes = input.depth === 'deep' ? 80000 : (input.depth === 'quick' ? 20000 : 40000);
|
|
193
|
+
const rawMatches = await (0, code_scanner_1.findRelevantCode)(fullContent, limit, input.sourceScope, input.iteration, input.taskId);
|
|
194
|
+
sourceContents = await (0, code_scanner_1.readRelevantSource)(rawMatches, maxBytes);
|
|
195
|
+
if (Object.keys(sourceContents).length > 0) {
|
|
196
|
+
const scopeHint = input.sourceScope ? ` (范围: ${input.sourceScope})` : '';
|
|
197
|
+
logger_1.logger.info(` 📖 需求分析已关联 ${Object.keys(sourceContents).length} 个源码文件${scopeHint}`);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
125
200
|
let outputPath;
|
|
126
201
|
let report;
|
|
127
202
|
if (input.scope === 'global') {
|
|
@@ -131,23 +206,40 @@ async function analyzeRequirements(input) {
|
|
|
131
206
|
else if (input.scope === 'task') {
|
|
132
207
|
// task scope — 已在入口校验
|
|
133
208
|
outputPath = (0, path_1.join)(`Iteration-${input.iteration}`, '030-tasks', input.taskId, '00-specs', input.output || 'ANALYSIS.md');
|
|
134
|
-
report = buildTaskReqReport(input, issues, archImpact);
|
|
209
|
+
report = buildTaskReqReport(input, issues, archImpact, sourceContents);
|
|
135
210
|
}
|
|
136
211
|
else {
|
|
137
212
|
// iteration (default)
|
|
138
213
|
const iterDir = `Iteration-${input.iteration || 'current'}`;
|
|
139
214
|
outputPath = (0, path_1.join)(iterDir, '020-specs', input.output || 'ANALYSIS.md');
|
|
140
|
-
report = buildIterationReqReport(input, issues, archImpact);
|
|
215
|
+
report = buildIterationReqReport(input, issues, archImpact, sourceContents);
|
|
141
216
|
// 按端分目录输出
|
|
142
217
|
await writePerPlatform(iterDir, report, input.output || 'ANALYSIS.md');
|
|
218
|
+
// 按功能模块输出到 020-specs/features/
|
|
219
|
+
await writePerFeature(iterDir, report, input.output || 'ANALYSIS.md');
|
|
220
|
+
// 按类型输出扁平文件到 020-specs/{bugs,refactors,research}/
|
|
221
|
+
await writePerTypedDoc(iterDir, report, input.output || 'ANALYSIS.md');
|
|
222
|
+
}
|
|
223
|
+
// ── 生成 AI 上下文(传入已读取的需求内容,避免重复 readFile) ──
|
|
224
|
+
try {
|
|
225
|
+
await (0, ai_context_generator_1.generateAIContext)({
|
|
226
|
+
requirements: input.requirements,
|
|
227
|
+
reqContents: allContent,
|
|
228
|
+
sources: input.sources,
|
|
229
|
+
scope: input.scope,
|
|
230
|
+
iteration: input.iteration,
|
|
231
|
+
taskId: input.taskId,
|
|
232
|
+
depth: input.depth,
|
|
233
|
+
});
|
|
143
234
|
}
|
|
235
|
+
catch { } // 非关键,静默失败
|
|
144
236
|
return {
|
|
145
237
|
outputPath,
|
|
146
238
|
report,
|
|
147
239
|
summary: {
|
|
148
240
|
issues: issues.length,
|
|
149
241
|
blockers: issues.filter(i => i.severity === 'blocker').length,
|
|
150
|
-
filesAnalyzed: input.requirements.length,
|
|
242
|
+
filesAnalyzed: input.requirements.length + Object.keys(sourceContents).length,
|
|
151
243
|
apisFound: archImpact.apis?.length || 0,
|
|
152
244
|
risks: archImpact.risks?.length || 0,
|
|
153
245
|
},
|
|
@@ -179,6 +271,7 @@ async function analyzeCodebase(input) {
|
|
|
179
271
|
outputPath = (0, path_1.join)(iterDir, '020-specs', input.output || 'CODE_ANALYSIS.md');
|
|
180
272
|
report = buildIterationCodeReport(input, fileStats, apiInventory, hotspots, deps);
|
|
181
273
|
await writePerPlatform(iterDir, report, input.output || 'CODE_ANALYSIS.md');
|
|
274
|
+
await writePerFeature(iterDir, report, input.output || 'CODE_ANALYSIS.md');
|
|
182
275
|
}
|
|
183
276
|
return {
|
|
184
277
|
outputPath,
|
|
@@ -224,9 +317,10 @@ async function analyzeCombined(input) {
|
|
|
224
317
|
else {
|
|
225
318
|
logger_1.logger.info(' 📚 使用缓存的代码索引(1 小时内已构建)');
|
|
226
319
|
}
|
|
227
|
-
// ── AI 上下文生成:
|
|
320
|
+
// ── AI 上下文生成: 替代关键词匹配(传入已读取的需求内容,避免重复 readFile) ──
|
|
228
321
|
const aiContext = await (0, ai_context_generator_1.generateAIContext)({
|
|
229
322
|
requirements: input.requirements,
|
|
323
|
+
reqContents: allContent,
|
|
230
324
|
sources: input.sources,
|
|
231
325
|
scope: input.scope,
|
|
232
326
|
iteration: input.iteration,
|
|
@@ -243,7 +337,7 @@ async function analyzeCombined(input) {
|
|
|
243
337
|
if (shouldReadSource) {
|
|
244
338
|
const limit = input.depth === 'deep' ? 20 : (input.depth === 'quick' ? 5 : 10);
|
|
245
339
|
const maxBytes = input.depth === 'deep' ? 120000 : (input.depth === 'quick' ? 30000 : 60000);
|
|
246
|
-
const rawMatches = await (0, code_scanner_1.findRelevantCode)(fullReqContent, limit, input.sourceScope);
|
|
340
|
+
const rawMatches = await (0, code_scanner_1.findRelevantCode)(fullReqContent, limit, input.sourceScope, input.iteration, input.taskId);
|
|
247
341
|
sourceContents = await (0, code_scanner_1.readRelevantSource)(rawMatches, maxBytes);
|
|
248
342
|
if (Object.keys(sourceContents).length > 0) {
|
|
249
343
|
const scopeHint = input.sourceScope ? ` (范围: ${input.sourceScope})` : '';
|
|
@@ -265,6 +359,7 @@ async function analyzeCombined(input) {
|
|
|
265
359
|
outputPath = (0, path_1.join)(iterDir, '020-specs', input.output || 'ANALYSIS.md');
|
|
266
360
|
report = await buildAIEnhancedReport(input, 'iteration', { issues, archImpact, fileStats, apiInventory, aiContext, sourceContents });
|
|
267
361
|
await writePerPlatform(iterDir, report, input.output || 'ANALYSIS.md');
|
|
362
|
+
await writePerFeature(iterDir, report, input.output || 'ANALYSIS.md');
|
|
268
363
|
}
|
|
269
364
|
return {
|
|
270
365
|
outputPath,
|
|
@@ -657,7 +752,7 @@ function buildReqConsistencyReport(input, issues, archImpact) {
|
|
|
657
752
|
r += `- ⚠️ ${risk}\n`;
|
|
658
753
|
return r;
|
|
659
754
|
}
|
|
660
|
-
function buildIterationReqReport(input, issues, archImpact) {
|
|
755
|
+
function buildIterationReqReport(input, issues, archImpact, sourceContents) {
|
|
661
756
|
const now = new Date().toISOString().split('T')[0];
|
|
662
757
|
const iter = input.iteration || 'current';
|
|
663
758
|
const blockerCount = issues.filter(i => i.severity === 'blocker').length;
|
|
@@ -699,6 +794,15 @@ function buildIterationReqReport(input, issues, archImpact) {
|
|
|
699
794
|
r += `- [ ] ${rk}\n`;
|
|
700
795
|
if (archImpact.newDependencies.length > 0)
|
|
701
796
|
r += `- [ ] 确认新增依赖的引入方案和排期\n`;
|
|
797
|
+
// ── 代码关联分析(v6.8.0 新增:需求分析默认关联代码) ──
|
|
798
|
+
if (sourceContents && Object.keys(sourceContents).length > 0) {
|
|
799
|
+
r += `\n---\n\n## 3.5 关联代码现状\n\n`;
|
|
800
|
+
r += `> 以下源码文件与当前需求相关,供技术方案参考\n\n`;
|
|
801
|
+
for (const [path, content] of Object.entries(sourceContents)) {
|
|
802
|
+
const preview = content.slice(0, 600).replace(/\n/g, '\n ');
|
|
803
|
+
r += `### \`${path}\`\n\n\`\`\`${path.split('.').pop() || 'ts'}\n${preview}${content.length > 600 ? '\n // ... 截断 ...' : ''}\n\`\`\`\n\n`;
|
|
804
|
+
}
|
|
805
|
+
}
|
|
702
806
|
r += `\n---\n\n## 4. 技术方案(待填写)\n\n`;
|
|
703
807
|
r += `| 模块 | 技术方案 | 负责人 | 预计工时 |\n| :--- | :--- | :--- | :--- |\n| | | | |\n\n`;
|
|
704
808
|
r += `### 数据库变更\n| 表名 | 变更类型 | 说明 |\n| :--- | :--- | :--- |\n| | | |\n\n`;
|
|
@@ -707,7 +811,7 @@ function buildIterationReqReport(input, issues, archImpact) {
|
|
|
707
811
|
r += `- [ ] 需求确认无遗漏\n- [ ] 技术方案评审通过\n- [ ] 工时评估合理\n- [ ] 可以开始拆分任务\n`;
|
|
708
812
|
return r;
|
|
709
813
|
}
|
|
710
|
-
function buildTaskReqReport(input, issues, archImpact) {
|
|
814
|
+
function buildTaskReqReport(input, issues, archImpact, sourceContents) {
|
|
711
815
|
const now = new Date().toISOString().split('T')[0];
|
|
712
816
|
let r = `# 任务需求分析\n\n`;
|
|
713
817
|
r += `> 迭代: ${input.iteration} | 任务: ${input.taskId} | 分析: ${now}\n\n---\n\n`;
|
|
@@ -722,6 +826,15 @@ function buildTaskReqReport(input, issues, archImpact) {
|
|
|
722
826
|
for (const rk of archImpact.risks)
|
|
723
827
|
r += `- ⚠️ ${rk}\n`;
|
|
724
828
|
}
|
|
829
|
+
// ── 代码关联分析(v6.8.0 新增) ──
|
|
830
|
+
if (sourceContents && Object.keys(sourceContents).length > 0) {
|
|
831
|
+
r += `\n## 关联代码\n\n`;
|
|
832
|
+
r += `> 以下源码与当前任务相关\n\n`;
|
|
833
|
+
for (const [path, content] of Object.entries(sourceContents)) {
|
|
834
|
+
const preview = content.slice(0, 400).replace(/\n/g, '\n ');
|
|
835
|
+
r += `- **\`${path}\`**\n\n \`\`\`${path.split('.').pop() || 'ts'}\n ${preview}${content.length > 400 ? '\n // ... 截断 ...' : ''}\n \`\`\`\n\n`;
|
|
836
|
+
}
|
|
837
|
+
}
|
|
725
838
|
return r;
|
|
726
839
|
}
|
|
727
840
|
// ================================================================
|
|
@@ -1056,6 +1169,210 @@ async function writePerPlatform(iterDir, report, filename) {
|
|
|
1056
1169
|
// 目录不存在,静默跳过
|
|
1057
1170
|
}
|
|
1058
1171
|
}
|
|
1172
|
+
/**
|
|
1173
|
+
* 局部分析:只分析单个功能模块,写入 020-specs/features/{feature}.md
|
|
1174
|
+
* 用于 --feature 模式,避免全量重跑
|
|
1175
|
+
*/
|
|
1176
|
+
async function analyzeSingleFeature(iterDir, featureName) {
|
|
1177
|
+
const reqDir = (0, path_1.join)(iterDir, '010-requirements');
|
|
1178
|
+
const featureReqPath = (0, path_1.join)(reqDir, 'features', featureName, 'README.md');
|
|
1179
|
+
if (!(await (0, fs_extra_1.pathExists)(featureReqPath))) {
|
|
1180
|
+
return null;
|
|
1181
|
+
}
|
|
1182
|
+
const content = await (0, fs_extra_1.readFile)(featureReqPath, 'utf-8');
|
|
1183
|
+
const issues = scanCompleteness(content);
|
|
1184
|
+
const archImpact = await analyzeArchitectureImpact(content);
|
|
1185
|
+
const now = new Date().toISOString().split('T')[0];
|
|
1186
|
+
const blockerCount = issues.filter(i => i.severity === 'blocker').length;
|
|
1187
|
+
// 构建单模块分析报告
|
|
1188
|
+
let r = `# ${featureName} — 需求分析报告\n\n`;
|
|
1189
|
+
r += `> 模块: ${featureName} | 分析时间: ${now} | 模式: 局部刷新 | 状态: ${blockerCount > 0 ? '🔴 有阻断' : '🟢 可拆分'}\n\n`;
|
|
1190
|
+
r += `---\n\n`;
|
|
1191
|
+
r += `## 1. 需求完整性检查\n\n`;
|
|
1192
|
+
r += `| 严重度 | 分类 | 问题 |\n| :--- | :--- | :--- |\n`;
|
|
1193
|
+
for (const issue of issues) {
|
|
1194
|
+
r += `| ${icon(issue.severity)} ${issue.severity} | ${issue.category} | ${issue.message.replace(/\n/g, '<br>')} |\n`;
|
|
1195
|
+
}
|
|
1196
|
+
if (issues.length === 0)
|
|
1197
|
+
r += `| ✅ | - | 未发现明显问题 |\n`;
|
|
1198
|
+
r += `\n`;
|
|
1199
|
+
r += `## 2. 架构影响\n\n`;
|
|
1200
|
+
if (archImpact.modules.length > 0)
|
|
1201
|
+
r += `**影响模块**: ${archImpact.modules.join(', ')}\n\n`;
|
|
1202
|
+
if (archImpact.risks.length > 0) {
|
|
1203
|
+
r += `**风险**:\n`;
|
|
1204
|
+
for (const risk of archImpact.risks)
|
|
1205
|
+
r += `- ⚠️ ${risk}\n`;
|
|
1206
|
+
r += `\n`;
|
|
1207
|
+
}
|
|
1208
|
+
if (archImpact.apis.length > 0) {
|
|
1209
|
+
r += `**涉及接口**:\n`;
|
|
1210
|
+
for (const api of archImpact.apis)
|
|
1211
|
+
r += `- \`${api}\`\n`;
|
|
1212
|
+
r += `\n`;
|
|
1213
|
+
}
|
|
1214
|
+
if (archImpact.modules.length === 0 && archImpact.risks.length === 0) {
|
|
1215
|
+
r += `_未检测到明显架构影响_\n\n`;
|
|
1216
|
+
}
|
|
1217
|
+
r += `## 3. 需求原文\n\n${content}\n`;
|
|
1218
|
+
// 写入 020-specs/features/
|
|
1219
|
+
const featuresDir = (0, path_1.join)(iterDir, '020-specs', 'features');
|
|
1220
|
+
await (0, fs_extra_1.ensureDir)(featuresDir);
|
|
1221
|
+
const outputPath = (0, path_1.join)(featuresDir, `${featureName}.md`);
|
|
1222
|
+
await (0, fs_extra_1.writeFile)(outputPath, r);
|
|
1223
|
+
return { outputPath, report: r };
|
|
1224
|
+
}
|
|
1225
|
+
/**
|
|
1226
|
+
* 局部分析:单个类型文档(bugs/refactors/research)
|
|
1227
|
+
*
|
|
1228
|
+
* @param iterDir 迭代目录
|
|
1229
|
+
* @param docPath 类型路径,如 "bugs/login-timeout" 或 "refactors/db-pool"
|
|
1230
|
+
* 对应 010-requirements/{typeDir}/{slug}.md
|
|
1231
|
+
*/
|
|
1232
|
+
async function analyzeSingleTypedDoc(iterDir, docPath) {
|
|
1233
|
+
const reqDir = (0, path_1.join)(iterDir, '010-requirements');
|
|
1234
|
+
const parts = docPath.split('/');
|
|
1235
|
+
if (parts.length !== 2)
|
|
1236
|
+
return null;
|
|
1237
|
+
const [typeDir, slug] = parts;
|
|
1238
|
+
if (!['bugs', 'refactors', 'research'].includes(typeDir))
|
|
1239
|
+
return null;
|
|
1240
|
+
const docFilePath = (0, path_1.join)(reqDir, typeDir, `${slug}.md`);
|
|
1241
|
+
if (!(await (0, fs_extra_1.pathExists)(docFilePath)))
|
|
1242
|
+
return null;
|
|
1243
|
+
const content = await (0, fs_extra_1.readFile)(docFilePath, 'utf-8');
|
|
1244
|
+
const issues = scanCompleteness(content);
|
|
1245
|
+
const archImpact = await analyzeArchitectureImpact(content);
|
|
1246
|
+
const now = new Date().toISOString().split('T')[0];
|
|
1247
|
+
const blockerCount = issues.filter(i => i.severity === 'blocker').length;
|
|
1248
|
+
const typeLabel = typeDir === 'bugs' ? 'Bug 分析' : typeDir === 'refactors' ? '重构分析' : '研究分析';
|
|
1249
|
+
let r = `# ${slug} — ${typeLabel}\n\n`;
|
|
1250
|
+
r += `> 类型: ${typeDir} | 分析时间: ${now} | 状态: ${blockerCount > 0 ? '🔴 有阻断' : '🟢 可拆分'}\n\n`;
|
|
1251
|
+
r += `---\n\n`;
|
|
1252
|
+
// 完整性检查
|
|
1253
|
+
r += `## 完整性检查\n\n`;
|
|
1254
|
+
if (issues.length === 0) {
|
|
1255
|
+
r += `✅ 无阻断项\n\n`;
|
|
1256
|
+
}
|
|
1257
|
+
else {
|
|
1258
|
+
for (const issue of issues) {
|
|
1259
|
+
const icon = issue.severity === 'blocker' ? '🔴' : issue.severity === 'warning' ? '🟡' : 'ℹ️';
|
|
1260
|
+
r += `${icon} **${issue.category}**: ${issue.message}\n`;
|
|
1261
|
+
}
|
|
1262
|
+
r += '\n';
|
|
1263
|
+
}
|
|
1264
|
+
// 架构影响
|
|
1265
|
+
r += `## 架构影响分析\n\n`;
|
|
1266
|
+
r += archImpact + '\n\n';
|
|
1267
|
+
// 写入 020-specs/{typeDir}/
|
|
1268
|
+
const destDir = (0, path_1.join)(iterDir, '020-specs', typeDir);
|
|
1269
|
+
await (0, fs_extra_1.ensureDir)(destDir);
|
|
1270
|
+
const outputPath = (0, path_1.join)(destDir, `${slug}.md`);
|
|
1271
|
+
await (0, fs_extra_1.writeFile)(outputPath, r);
|
|
1272
|
+
return { outputPath, report: r };
|
|
1273
|
+
}
|
|
1274
|
+
/** 按功能模块写入 020-specs/features/ */
|
|
1275
|
+
async function writePerFeature(iterDir, report, filename) {
|
|
1276
|
+
const reqDir = (0, path_1.join)(iterDir, '010-requirements');
|
|
1277
|
+
const featuresDir = (0, path_1.join)(iterDir, '020-specs', 'features');
|
|
1278
|
+
// 非 feature 型目录的排除名单
|
|
1279
|
+
const EXCLUDED_DIRS = new Set(['sources', 'assets', 'converted', 'staging', 'bugs', 'refactors', 'research']);
|
|
1280
|
+
try {
|
|
1281
|
+
const entries = await (0, fs_extra_1.readdir)(reqDir, { withFileTypes: true });
|
|
1282
|
+
const features = entries
|
|
1283
|
+
.filter(e => e.isDirectory() && !e.name.startsWith('_') && !e.name.startsWith('.')
|
|
1284
|
+
&& !EXCLUDED_DIRS.has(e.name))
|
|
1285
|
+
.map(e => e.name);
|
|
1286
|
+
if (features.length === 0)
|
|
1287
|
+
return;
|
|
1288
|
+
await (0, fs_extra_1.ensureDir)(featuresDir);
|
|
1289
|
+
for (const feature of features) {
|
|
1290
|
+
// 读取该 feature 的 README.md 作为头部,拼接完整报告
|
|
1291
|
+
const featureReqPath = (0, path_1.join)(reqDir, feature, 'README.md');
|
|
1292
|
+
let featureHeader = '';
|
|
1293
|
+
if (await (0, fs_extra_1.pathExists)(featureReqPath)) {
|
|
1294
|
+
featureHeader = `# ${feature} — 需求分析\n\n> 来源: 010-requirements/features/${feature}/README.md\n\n---\n\n`;
|
|
1295
|
+
}
|
|
1296
|
+
const featureContent = featureHeader + report;
|
|
1297
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(featuresDir, `${feature}.md`), featureContent);
|
|
1298
|
+
}
|
|
1299
|
+
}
|
|
1300
|
+
catch { }
|
|
1301
|
+
}
|
|
1302
|
+
/**
|
|
1303
|
+
* 按类型写入 020-specs/{bugs,refactors,research}/
|
|
1304
|
+
*
|
|
1305
|
+
* 与 writePerFeature 的区别:
|
|
1306
|
+
* - feature 用子目录(features/{module}/README.md)
|
|
1307
|
+
* - bugfix/refactor/research 用扁平文件(bugs/{slug}.md)
|
|
1308
|
+
*
|
|
1309
|
+
* 对每个类型目录下的 .md 文件,生成对应的分析报告到 020-specs/ 下
|
|
1310
|
+
*/
|
|
1311
|
+
async function writePerTypedDoc(iterDir, report, filename) {
|
|
1312
|
+
const reqDir = (0, path_1.join)(iterDir, '010-requirements');
|
|
1313
|
+
const typeDirs = ['bugs', 'refactors', 'research'];
|
|
1314
|
+
for (const typeDir of typeDirs) {
|
|
1315
|
+
const srcDir = (0, path_1.join)(reqDir, typeDir);
|
|
1316
|
+
const destDir = (0, path_1.join)(iterDir, '020-specs', typeDir);
|
|
1317
|
+
try {
|
|
1318
|
+
if (!(await (0, fs_extra_1.pathExists)(srcDir)))
|
|
1319
|
+
continue;
|
|
1320
|
+
const entries = await (0, fs_extra_1.readdir)(srcDir, { withFileTypes: true });
|
|
1321
|
+
const mdFiles = entries.filter(e => e.isFile() && e.name.endsWith('.md') && !e.name.startsWith('README') && !(0, task_utils_1.isTimestampBackup)(e.name));
|
|
1322
|
+
if (mdFiles.length === 0)
|
|
1323
|
+
continue;
|
|
1324
|
+
await (0, fs_extra_1.ensureDir)(destDir);
|
|
1325
|
+
for (const entry of mdFiles) {
|
|
1326
|
+
const content = await (0, fs_extra_1.readFile)((0, path_1.join)(srcDir, entry.name), 'utf-8');
|
|
1327
|
+
const slug = entry.name.replace(/\.md$/, '');
|
|
1328
|
+
const header = `# ${slug} — 需求分析\n\n> 来源: 010-requirements/${typeDir}/${entry.name}\n\n---\n\n`;
|
|
1329
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(destDir, entry.name), header + report);
|
|
1330
|
+
}
|
|
1331
|
+
}
|
|
1332
|
+
catch { }
|
|
1333
|
+
}
|
|
1334
|
+
// ── 处理 staging/ 目录(doc2spec --classify 产物,带 type frontmatter)──
|
|
1335
|
+
const stagingDir = (0, path_1.join)(reqDir, 'staging');
|
|
1336
|
+
try {
|
|
1337
|
+
if (!(await (0, fs_extra_1.pathExists)(stagingDir)))
|
|
1338
|
+
return;
|
|
1339
|
+
const stagingFiles = (await (0, fs_extra_1.readdir)(stagingDir, { withFileTypes: true }))
|
|
1340
|
+
.filter(e => e.isFile() && e.name.endsWith('.md') && !e.name.startsWith('README') && !(0, task_utils_1.isTimestampBackup)(e.name));
|
|
1341
|
+
if (stagingFiles.length === 0)
|
|
1342
|
+
return;
|
|
1343
|
+
// type frontmatter → 020-specs 目标目录
|
|
1344
|
+
const typeToSpecDir = {
|
|
1345
|
+
feature: 'features',
|
|
1346
|
+
bugfix: 'bugs',
|
|
1347
|
+
refactor: 'refactors',
|
|
1348
|
+
research: 'research',
|
|
1349
|
+
};
|
|
1350
|
+
for (const entry of stagingFiles) {
|
|
1351
|
+
const content = await (0, fs_extra_1.readFile)((0, path_1.join)(stagingDir, entry.name), 'utf-8');
|
|
1352
|
+
// 解析 frontmatter 中的 type 和 nature 字段
|
|
1353
|
+
const fmMatch = content.match(/^---\n([\s\S]*?)\n---/);
|
|
1354
|
+
let specType = 'features'; // 默认
|
|
1355
|
+
let nature = '';
|
|
1356
|
+
if (fmMatch) {
|
|
1357
|
+
const typeLine = fmMatch[1].split('\n').find(l => l.startsWith('type:'));
|
|
1358
|
+
if (typeLine) {
|
|
1359
|
+
const typeVal = typeLine.replace('type:', '').trim();
|
|
1360
|
+
specType = typeToSpecDir[typeVal] || 'features';
|
|
1361
|
+
}
|
|
1362
|
+
const natureLine = fmMatch[1].split('\n').find(l => l.startsWith('nature:'));
|
|
1363
|
+
if (natureLine) {
|
|
1364
|
+
nature = natureLine.replace('nature:', '').trim();
|
|
1365
|
+
}
|
|
1366
|
+
}
|
|
1367
|
+
const destDir = (0, path_1.join)(iterDir, '020-specs', specType);
|
|
1368
|
+
await (0, fs_extra_1.ensureDir)(destDir);
|
|
1369
|
+
const slug = entry.name.replace(/\.md$/, '');
|
|
1370
|
+
const header = `# ${slug} — 需求分析\n\n> 来源: 010-requirements/staging/${entry.name}\n> 意图: ${nature || '未标注'}\n\n---\n\n`;
|
|
1371
|
+
await (0, fs_extra_1.writeFile)((0, path_1.join)(destDir, entry.name), header + report);
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1374
|
+
catch { }
|
|
1375
|
+
}
|
|
1059
1376
|
/**
|
|
1060
1377
|
* 补充分析:读取已有报告,找到未覆盖的源码文件,追加到报告中
|
|
1061
1378
|
* 不重新生成全部文档,只追加源码内容
|