bmall-mcp 1.8.8 → 1.9.1
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/README.md +19 -0
- package/dist/tools/requirements/index.d.ts.map +1 -1
- package/dist/tools/requirements/index.js +106 -76
- package/dist/tools/requirements/index.js.map +1 -1
- package/dist/tools/requirements/requirement-processor.d.ts.map +1 -1
- package/dist/tools/requirements/requirement-processor.js +5 -7
- package/dist/tools/requirements/requirement-processor.js.map +1 -1
- package/package.json +1 -1
- package/src/tools/requirements/index.ts +135 -88
- package/src/tools/requirements/requirement-processor.ts +5 -7
package/README.md
CHANGED
|
@@ -204,6 +204,25 @@ src/
|
|
|
204
204
|
|
|
205
205
|
## Changelog
|
|
206
206
|
|
|
207
|
+
### v1.9.1 (2026-03-16)
|
|
208
|
+
- ✅ 修复提示词歧义:移除每个任务中的"重新调用工具"指令
|
|
209
|
+
- ✅ 明确统一调用:所有任务完成后统一调用一次工具
|
|
210
|
+
- ✅ 避免误解:AI 不会误以为每个任务都要调用
|
|
211
|
+
- ✅ 提升效率:减少不必要的工具调用次数
|
|
212
|
+
|
|
213
|
+
### v1.9.0 (2026-03-16)
|
|
214
|
+
- ✅ 优化提示词:明确推荐并行处理多个任务
|
|
215
|
+
- ✅ 说明自动检查机制:工具会自动跳过已完成的任务
|
|
216
|
+
- ✅ 避免重复执行:每次调用都会检查文件存在性
|
|
217
|
+
- ✅ 提升处理效率:同时处理多个文档,减少总耗时
|
|
218
|
+
|
|
219
|
+
### v1.8.9 (2026-03-16)
|
|
220
|
+
- ✅ 优化工作流输出:一次性返回所有需要处理的文档任务
|
|
221
|
+
- ✅ 支持并行处理:AI可以同时处理多个文档,提高效率
|
|
222
|
+
- ✅ 减少交互次数:从多次返回改为一次返回完整任务列表
|
|
223
|
+
- ✅ 完善Figma提示:像PDF一样提供具体的工具调用步骤
|
|
224
|
+
- ✅ 统一提示格式:所有文档都有清晰的操作指引
|
|
225
|
+
|
|
207
226
|
### v1.8.8 (2026-03-16)
|
|
208
227
|
- ✅ 优化PDF读取流程:同时使用read_pdf_text和read_by_ocr两个工具
|
|
209
228
|
- ✅ 简化流程:不再输出中间文件,直接合并到origin-requirement.md
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/requirements/index.ts"],"names":[],"mappings":"AAyBA,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,0BAA0B;IAClC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAmCD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,iBAAiB,CAAC;QAClD,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/requirements/index.ts"],"names":[],"mappings":"AAyBA,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,UAAU,0BAA0B;IAClC,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE;QACb,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,aAAa,CAAC,EAAE;QACd,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QACrB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAmCD,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,0BAA0B,GACjC,OAAO,CAAC;IACT,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,iBAAiB,CAAC;QAClD,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH,CAAC,CA0ND"}
|
|
@@ -47,100 +47,130 @@ export async function generateRequirements(params) {
|
|
|
47
47
|
projectRoot = getProjectRoot(params.requirementSource.path);
|
|
48
48
|
}
|
|
49
49
|
debugLog(`计算项目根目录`, { projectRoot, cwd: process.cwd() });
|
|
50
|
-
// 2.1
|
|
50
|
+
// 2.1 检查所有文档状态,收集需要处理的文档
|
|
51
|
+
const originDocPath = buildOutputPath(params.featureName, "origin-requirement.md", projectRoot);
|
|
52
|
+
const designDocPath = params.designSource ? buildOutputPath(params.featureName, "design-doc.md", projectRoot) : null;
|
|
53
|
+
const backendDocPath = params.backendSource ? buildOutputPath(params.featureName, "backend-doc.md", projectRoot) : null;
|
|
54
|
+
debugLog(`检查文档状态`, { originDocPath, designDocPath, backendDocPath });
|
|
55
|
+
// 检查各个文档是否已存在
|
|
51
56
|
const savedRequirement = await tryReadSavedRequirement(params.featureName, projectRoot);
|
|
57
|
+
const savedDesign = params.designSource ? await tryReadSavedDesign(params.featureName, projectRoot) : null;
|
|
58
|
+
const savedBackend = params.backendSource ? await tryReadSavedBackend(params.featureName, projectRoot) : null;
|
|
59
|
+
debugLog(`文档状态检查结果`, {
|
|
60
|
+
savedRequirement: !!savedRequirement,
|
|
61
|
+
savedDesign: !!savedDesign,
|
|
62
|
+
savedBackend: !!savedBackend
|
|
63
|
+
});
|
|
64
|
+
// 收集需要处理的文档
|
|
65
|
+
const tasks = [];
|
|
66
|
+
// 检查需求文档
|
|
52
67
|
if (!savedRequirement) {
|
|
53
|
-
debugLog(
|
|
54
|
-
const requirementResult = await processRequirementDocument(params.requirementSource, params.featureName);
|
|
68
|
+
debugLog(`需求文档未找到,需要处理`);
|
|
69
|
+
const requirementResult = await processRequirementDocument(params.requirementSource, params.featureName, "origin-requirement.md");
|
|
55
70
|
if (!requirementResult.success) {
|
|
56
71
|
debugLog(`需求文档需要进一步处理`, { requirementResult });
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
72
|
+
tasks.push({
|
|
73
|
+
name: "需求文档 (PRD)",
|
|
74
|
+
outputPath: originDocPath,
|
|
75
|
+
source: params.requirementSource,
|
|
76
|
+
status: "needs_processing",
|
|
77
|
+
processingInstruction: requirementResult.message
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
debugLog(`需求文档已处理`);
|
|
62
82
|
}
|
|
63
|
-
debugLog(`需求文档已保存`);
|
|
64
|
-
}
|
|
65
|
-
else {
|
|
66
|
-
debugLog(`需求文档已存在`, { contentLength: savedRequirement.length });
|
|
67
83
|
}
|
|
68
|
-
//
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
const designProjectRoot = getProjectRoot(params.designSource.path);
|
|
77
|
-
debugLog(`设计稿项目根目录`, { designProjectRoot });
|
|
78
|
-
designResult = await processRequirementDocument(params.designSource, params.featureName, "design-doc.md");
|
|
79
|
-
}
|
|
80
|
-
else if (params.designSource.type === "figma") {
|
|
81
|
-
// Figma 链接类型,返回提示让 AI 处理
|
|
82
|
-
designResult = {
|
|
83
|
-
success: false,
|
|
84
|
-
message: `🎨 检测到 Figma 设计稿链接
|
|
85
|
-
|
|
86
|
-
请使用 Figma MCP 读取设计稿并保存到文件`,
|
|
87
|
-
needsAction: {
|
|
88
|
-
type: "analyze_content",
|
|
89
|
-
instruction: `使用 Figma MCP 读取设计稿 ${params.designSource.url},保存到 ${buildOutputPath(params.featureName, "design-doc.md", projectRoot)}。完成后立即保存文件,不要把内容放在上下文中。保存后重新调用 generate_requirements 工具。`,
|
|
90
|
-
},
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
else {
|
|
94
|
-
// 未知类型,默认返回成功
|
|
95
|
-
debugLog(`设计稿类型未知,跳过`);
|
|
96
|
-
designResult = { success: true, message: "设计稿已处理" };
|
|
97
|
-
}
|
|
84
|
+
// 检查设计稿
|
|
85
|
+
if (params.designSource && !savedDesign) {
|
|
86
|
+
debugLog(`设计稿未找到,需要处理`);
|
|
87
|
+
if (params.designSource.type === "file") {
|
|
88
|
+
const designResult = await processRequirementDocument({
|
|
89
|
+
type: "file",
|
|
90
|
+
path: params.designSource.path
|
|
91
|
+
}, params.featureName, "design-doc.md");
|
|
98
92
|
if (!designResult.success) {
|
|
99
93
|
debugLog(`设计稿需要进一步处理`, { designResult });
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
94
|
+
tasks.push({
|
|
95
|
+
name: "设计稿",
|
|
96
|
+
outputPath: designDocPath,
|
|
97
|
+
source: params.designSource,
|
|
98
|
+
status: "needs_processing",
|
|
99
|
+
processingInstruction: designResult.message
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
debugLog(`设计稿已处理`);
|
|
105
104
|
}
|
|
106
|
-
debugLog(`设计稿已保存`);
|
|
107
|
-
designSourceInfo = `**设计稿位置**:${buildOutputPath(params.featureName, "design-doc.md", projectRoot)}\n`;
|
|
108
105
|
}
|
|
109
|
-
else {
|
|
110
|
-
|
|
111
|
-
|
|
106
|
+
else if (params.designSource.type === "figma") {
|
|
107
|
+
tasks.push({
|
|
108
|
+
name: "设计稿 (Figma)",
|
|
109
|
+
outputPath: designDocPath,
|
|
110
|
+
source: params.designSource,
|
|
111
|
+
status: "needs_processing",
|
|
112
|
+
processingInstruction: `🎨 检测到 Figma 设计稿链接
|
|
113
|
+
|
|
114
|
+
请读取以下 Figma 设计稿并保存到文件:
|
|
115
|
+
|
|
116
|
+
- Figma 链接:${params.designSource.url}
|
|
117
|
+
- 保存到:\`${designDocPath}\``
|
|
118
|
+
});
|
|
112
119
|
}
|
|
113
120
|
}
|
|
114
|
-
//
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
const
|
|
118
|
-
if (!
|
|
119
|
-
debugLog(
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
:
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
return {
|
|
128
|
-
success: false,
|
|
129
|
-
message: backendResult.message,
|
|
130
|
-
needsAction: backendResult.needsAction,
|
|
131
|
-
};
|
|
132
|
-
}
|
|
133
|
-
debugLog(`后端文档已保存`);
|
|
134
|
-
backendSourceInfo = `**后端文档位置**:${buildOutputPath(params.featureName, "backend-doc.md", backendProjectRoot)}\n`;
|
|
121
|
+
// 检查后端文档
|
|
122
|
+
if (params.backendSource && !savedBackend) {
|
|
123
|
+
debugLog(`后端文档未找到,需要处理`);
|
|
124
|
+
const backendResult = await processRequirementDocument(params.backendSource, params.featureName, "backend-doc.md");
|
|
125
|
+
if (!backendResult.success) {
|
|
126
|
+
debugLog(`后端文档需要进一步处理`, { backendResult });
|
|
127
|
+
tasks.push({
|
|
128
|
+
name: "后端文档",
|
|
129
|
+
outputPath: backendDocPath,
|
|
130
|
+
source: params.backendSource,
|
|
131
|
+
status: "needs_processing",
|
|
132
|
+
processingInstruction: backendResult.message
|
|
133
|
+
});
|
|
135
134
|
}
|
|
136
135
|
else {
|
|
137
|
-
debugLog(
|
|
138
|
-
backendSourceInfo = `**后端文档位置**:${buildOutputPath(params.featureName, "backend-doc.md", projectRoot)}\n`;
|
|
136
|
+
debugLog(`后端文档已处理`);
|
|
139
137
|
}
|
|
140
138
|
}
|
|
139
|
+
// 如果有需要处理的任务,返回完整工作流
|
|
140
|
+
if (tasks.length > 0) {
|
|
141
|
+
debugLog(`发现 ${tasks.length} 个需要处理的任务`);
|
|
142
|
+
let message = `📋 需要处理以下文档(共 ${tasks.length} 个)\n\n`;
|
|
143
|
+
tasks.forEach((task, index) => {
|
|
144
|
+
message += `### 任务 ${index + 1}:${task.name}\n`;
|
|
145
|
+
message += task.processingInstruction;
|
|
146
|
+
message += `\n\n`;
|
|
147
|
+
});
|
|
148
|
+
message += `⚠️ **重要提示**:\n`;
|
|
149
|
+
message += `- **推荐并行处理**:可以同时处理多个任务,提高效率\n`;
|
|
150
|
+
message += `- 每个任务处理完成后,立即保存文件,**不要把文件内容放在上下文中**\n`;
|
|
151
|
+
message += `- 所有任务完成后,重新调用 \`generate_requirements\` 工具(工具会自动检查已完成任务)\n`;
|
|
152
|
+
message += `- 这样可以避免上下文过长,同时减少重复调用\n`;
|
|
153
|
+
return {
|
|
154
|
+
success: false,
|
|
155
|
+
message,
|
|
156
|
+
needsAction: {
|
|
157
|
+
type: "process_documents",
|
|
158
|
+
instruction: `按顺序或并行处理上述 ${tasks.length} 个任务,每个任务完成后立即保存文件。所有任务完成后重新调用 generate_requirements 工具。`
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// 所有文档都已准备好
|
|
163
|
+
debugLog(`所有文档已准备完毕`);
|
|
164
|
+
let designSourceInfo = "";
|
|
165
|
+
if (savedDesign) {
|
|
166
|
+
designSourceInfo = `**设计稿位置**:${designDocPath}\n`;
|
|
167
|
+
}
|
|
168
|
+
let backendSourceInfo = "";
|
|
169
|
+
if (savedBackend) {
|
|
170
|
+
backendSourceInfo = `**后端文档位置**:${backendDocPath}\n`;
|
|
171
|
+
}
|
|
141
172
|
// 5. 生成分析提示词
|
|
142
173
|
const outputPath = buildOutputPath(params.featureName, "requirements.md", projectRoot);
|
|
143
|
-
const originDocPath = buildOutputPath(params.featureName, "origin-requirement.md", projectRoot);
|
|
144
174
|
debugLog(`生成输出路径`, { outputPath, originDocPath, projectRoot });
|
|
145
175
|
let message = "📝 需求文档已准备完毕\n\n";
|
|
146
176
|
message += `**原始文档位置**:${originDocPath}\n`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/requirements/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oCAAoC,CAAC;AAG9D,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EACL,0BAA0B,EAC1B,uBAAuB,EAEvB,kBAAkB,EAElB,mBAAmB,EACnB,cAAc,EACd,eAAe,EAEhB,MAAM,4BAA4B,CAAC;AAEpC;;GAEG;AACH,SAAS,QAAQ,CAAC,OAAe,EAAE,IAAU;IAC3C,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC3C,MAAM,UAAU,GAAG,UAAU,SAAS,KAAK,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IACxG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;AAC5B,CAAC;AAuBD;;GAEG;AACH,SAAS,sBAAsB,CAC7B,MAAkC;IAYlC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC;QACxB,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,KAAK,EAAE;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,yLAAyL;gBAClM,WAAW,EAAE;oBACX,IAAI,EAAE,iBAAiB;oBACvB,WAAW,EAAE,4EAA4E;iBAC1F;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,MAAkC;IASlC,QAAQ,CAAC,yBAAyB,EAAE;QAClC,MAAM;QACN,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,QAAQ,EAAE,EAAE,CAAC,QAAQ,EAAE;QACvB,OAAO,EAAE,EAAE,CAAC,OAAO,EAAE;KACtB,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,YAAY;QACZ,MAAM,UAAU,GAAG,sBAAsB,CAAC,MAAM,CAAC,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,UAAU,CAAC,KAAM,CAAC;QAC3B,CAAC;QAED,sBAAsB;QACtB,IAAI,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;YAC9E,WAAW,GAAG,cAAc,CAAC,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QAC9D,CAAC;QACD,QAAQ,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEzD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/requirements/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement-processor.d.ts","sourceRoot":"","sources":["../../../src/tools/requirements/requirement-processor.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAElG;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,iBAAiB,CAAC;QAClD,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,EAChD,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,MAAgC,GAC/C,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"requirement-processor.d.ts","sourceRoot":"","sources":["../../../src/tools/requirements/requirement-processor.ts"],"names":[],"mappings":"AAcA;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAexD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAElG;AAED,UAAU,iBAAiB;IACzB,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,iBAAiB,CAAC;QAClD,WAAW,EAAE,MAAM,CAAC;KACrB,CAAC;CACH;AAED;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,iBAAiB,EAAE,iBAAiB,GAAG,SAAS,EAChD,WAAW,EAAE,MAAM,EACnB,cAAc,GAAE,MAAgC,GAC/C,OAAO,CAAC,aAAa,CAAC,CAiKxB;AAED;;;GAGG;AACH,wBAAsB,uBAAuB,CAC3C,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,cAAc,EAAE,MAAM,EACtB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC,CAWf;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAcxB"}
|
|
@@ -103,24 +103,22 @@ export async function processRequirementDocument(requirementSource, featureName,
|
|
|
103
103
|
return {
|
|
104
104
|
success: false,
|
|
105
105
|
message: `📄 检测到 PDF 文件,需要提取完整内容
|
|
106
|
-
|
|
106
|
+
|
|
107
107
|
请执行以下操作:
|
|
108
108
|
|
|
109
109
|
1. 调用 \`mcp_execute_tool\` 工具读取文本层:
|
|
110
110
|
- server_name: "pdf-reader"
|
|
111
111
|
- tool_name: "read_pdf_text"
|
|
112
112
|
- arguments: { "file_path": "${filePath}" }
|
|
113
|
-
|
|
113
|
+
|
|
114
114
|
2. 调用 \`mcp_execute_tool\` 工具读取图片和表格(OCR):
|
|
115
115
|
- server_name: "pdf-reader"
|
|
116
116
|
- tool_name: "read_by_ocr"
|
|
117
117
|
- arguments: { "file_path": "${filePath}", "language": "${language}", "dpi": 300 }
|
|
118
|
-
|
|
118
|
+
|
|
119
119
|
3. 将两次读取的内容合并(文本层 + OCR内容)
|
|
120
|
-
|
|
121
|
-
4. 保存合并后的内容到:\`${outputMdPath}
|
|
122
|
-
|
|
123
|
-
5. 保存完成后,重新调用 \`generate_requirements\` 工具`,
|
|
120
|
+
|
|
121
|
+
4. 保存合并后的内容到:\`${outputMdPath}\``,
|
|
124
122
|
needsAction: {
|
|
125
123
|
type: "read_pdf",
|
|
126
124
|
instruction: `必须调用 pdf-reader MCP 的两个工具读取 PDF:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement-processor.js","sourceRoot":"","sources":["../../../src/tools/requirements/requirement-processor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"requirement-processor.js","sourceRoot":"","sources":["../../../src/tools/requirements/requirement-processor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -108,117 +108,164 @@ export async function generateRequirements(
|
|
|
108
108
|
}
|
|
109
109
|
debugLog(`计算项目根目录`, { projectRoot, cwd: process.cwd() });
|
|
110
110
|
|
|
111
|
-
// 2.1
|
|
111
|
+
// 2.1 检查所有文档状态,收集需要处理的文档
|
|
112
|
+
const originDocPath = buildOutputPath(params.featureName, "origin-requirement.md", projectRoot);
|
|
113
|
+
const designDocPath = params.designSource ? buildOutputPath(params.featureName, "design-doc.md", projectRoot) : null;
|
|
114
|
+
const backendDocPath = params.backendSource ? buildOutputPath(params.featureName, "backend-doc.md", projectRoot) : null;
|
|
115
|
+
|
|
116
|
+
debugLog(`检查文档状态`, { originDocPath, designDocPath, backendDocPath });
|
|
117
|
+
|
|
118
|
+
// 检查各个文档是否已存在
|
|
112
119
|
const savedRequirement = await tryReadSavedRequirement(params.featureName, projectRoot);
|
|
120
|
+
const savedDesign = params.designSource ? await tryReadSavedDesign(params.featureName, projectRoot) : null;
|
|
121
|
+
const savedBackend = params.backendSource ? await tryReadSavedBackend(params.featureName, projectRoot) : null;
|
|
122
|
+
|
|
123
|
+
debugLog(`文档状态检查结果`, {
|
|
124
|
+
savedRequirement: !!savedRequirement,
|
|
125
|
+
savedDesign: !!savedDesign,
|
|
126
|
+
savedBackend: !!savedBackend
|
|
127
|
+
});
|
|
128
|
+
|
|
129
|
+
// 收集需要处理的文档
|
|
130
|
+
const tasks: Array<{
|
|
131
|
+
name: string;
|
|
132
|
+
outputPath: string;
|
|
133
|
+
source?: any;
|
|
134
|
+
status: "exists" | "needs_processing";
|
|
135
|
+
processingInstruction?: string;
|
|
136
|
+
}> = [];
|
|
137
|
+
|
|
138
|
+
// 检查需求文档
|
|
113
139
|
if (!savedRequirement) {
|
|
114
|
-
debugLog(
|
|
140
|
+
debugLog(`需求文档未找到,需要处理`);
|
|
115
141
|
const requirementResult = await processRequirementDocument(
|
|
116
142
|
params.requirementSource,
|
|
117
|
-
params.featureName
|
|
143
|
+
params.featureName,
|
|
144
|
+
"origin-requirement.md"
|
|
118
145
|
);
|
|
119
|
-
|
|
146
|
+
|
|
120
147
|
if (!requirementResult.success) {
|
|
121
148
|
debugLog(`需求文档需要进一步处理`, { requirementResult });
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
149
|
+
tasks.push({
|
|
150
|
+
name: "需求文档 (PRD)",
|
|
151
|
+
outputPath: originDocPath,
|
|
152
|
+
source: params.requirementSource,
|
|
153
|
+
status: "needs_processing",
|
|
154
|
+
processingInstruction: requirementResult.message!
|
|
155
|
+
});
|
|
156
|
+
} else {
|
|
157
|
+
debugLog(`需求文档已处理`);
|
|
127
158
|
}
|
|
128
|
-
debugLog(`需求文档已保存`);
|
|
129
|
-
} else {
|
|
130
|
-
debugLog(`需求文档已存在`, { contentLength: savedRequirement.length });
|
|
131
159
|
}
|
|
132
|
-
|
|
133
|
-
//
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const savedDesign = await tryReadSavedDesign(params.featureName, projectRoot);
|
|
160
|
+
|
|
161
|
+
// 检查设计稿
|
|
162
|
+
if (params.designSource && !savedDesign) {
|
|
163
|
+
debugLog(`设计稿未找到,需要处理`);
|
|
137
164
|
|
|
138
|
-
if (
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
params.designSource as any,
|
|
148
|
-
params.featureName,
|
|
149
|
-
"design-doc.md"
|
|
150
|
-
);
|
|
151
|
-
} else if (params.designSource.type === "figma") {
|
|
152
|
-
// Figma 链接类型,返回提示让 AI 处理
|
|
153
|
-
designResult = {
|
|
154
|
-
success: false,
|
|
155
|
-
message: `🎨 检测到 Figma 设计稿链接
|
|
156
|
-
|
|
157
|
-
请使用 Figma MCP 读取设计稿并保存到文件`,
|
|
158
|
-
needsAction: {
|
|
159
|
-
type: "analyze_content" as any,
|
|
160
|
-
instruction: `使用 Figma MCP 读取设计稿 ${params.designSource.url},保存到 ${buildOutputPath(params.featureName, "design-doc.md", projectRoot)}。完成后立即保存文件,不要把内容放在上下文中。保存后重新调用 generate_requirements 工具。`,
|
|
161
|
-
},
|
|
162
|
-
};
|
|
163
|
-
} else {
|
|
164
|
-
// 未知类型,默认返回成功
|
|
165
|
-
debugLog(`设计稿类型未知,跳过`);
|
|
166
|
-
designResult = { success: true, message: "设计稿已处理" };
|
|
167
|
-
}
|
|
165
|
+
if (params.designSource.type === "file") {
|
|
166
|
+
const designResult = await processRequirementDocument(
|
|
167
|
+
{
|
|
168
|
+
type: "file",
|
|
169
|
+
path: params.designSource.path
|
|
170
|
+
},
|
|
171
|
+
params.featureName,
|
|
172
|
+
"design-doc.md"
|
|
173
|
+
);
|
|
168
174
|
|
|
169
175
|
if (!designResult.success) {
|
|
170
176
|
debugLog(`设计稿需要进一步处理`, { designResult });
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
177
|
+
tasks.push({
|
|
178
|
+
name: "设计稿",
|
|
179
|
+
outputPath: designDocPath!,
|
|
180
|
+
source: params.designSource,
|
|
181
|
+
status: "needs_processing",
|
|
182
|
+
processingInstruction: designResult.message!
|
|
183
|
+
});
|
|
184
|
+
} else {
|
|
185
|
+
debugLog(`设计稿已处理`);
|
|
176
186
|
}
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
187
|
+
} else if (params.designSource.type === "figma") {
|
|
188
|
+
tasks.push({
|
|
189
|
+
name: "设计稿 (Figma)",
|
|
190
|
+
outputPath: designDocPath!,
|
|
191
|
+
source: params.designSource,
|
|
192
|
+
status: "needs_processing",
|
|
193
|
+
processingInstruction: `🎨 检测到 Figma 设计稿链接
|
|
194
|
+
|
|
195
|
+
请读取以下 Figma 设计稿并保存到文件:
|
|
196
|
+
|
|
197
|
+
- Figma 链接:${params.designSource.url}
|
|
198
|
+
- 保存到:\`${designDocPath}\``
|
|
199
|
+
});
|
|
182
200
|
}
|
|
183
201
|
}
|
|
184
|
-
|
|
185
|
-
//
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
const
|
|
202
|
+
|
|
203
|
+
// 检查后端文档
|
|
204
|
+
if (params.backendSource && !savedBackend) {
|
|
205
|
+
debugLog(`后端文档未找到,需要处理`);
|
|
206
|
+
const backendResult = await processRequirementDocument(
|
|
207
|
+
params.backendSource,
|
|
208
|
+
params.featureName,
|
|
209
|
+
"backend-doc.md"
|
|
210
|
+
);
|
|
189
211
|
|
|
190
|
-
if (!
|
|
191
|
-
debugLog(
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
:
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
params.featureName,
|
|
200
|
-
"backend-doc.md"
|
|
201
|
-
);
|
|
202
|
-
|
|
203
|
-
if (!backendResult.success) {
|
|
204
|
-
debugLog(`后端文档需要进一步处理`, { backendResult });
|
|
205
|
-
return {
|
|
206
|
-
success: false,
|
|
207
|
-
message: backendResult.message!,
|
|
208
|
-
needsAction: backendResult.needsAction,
|
|
209
|
-
};
|
|
210
|
-
}
|
|
211
|
-
debugLog(`后端文档已保存`);
|
|
212
|
-
backendSourceInfo = `**后端文档位置**:${buildOutputPath(params.featureName, "backend-doc.md", backendProjectRoot)}\n`;
|
|
212
|
+
if (!backendResult.success) {
|
|
213
|
+
debugLog(`后端文档需要进一步处理`, { backendResult });
|
|
214
|
+
tasks.push({
|
|
215
|
+
name: "后端文档",
|
|
216
|
+
outputPath: backendDocPath!,
|
|
217
|
+
source: params.backendSource,
|
|
218
|
+
status: "needs_processing",
|
|
219
|
+
processingInstruction: backendResult.message!
|
|
220
|
+
});
|
|
213
221
|
} else {
|
|
214
|
-
debugLog(
|
|
215
|
-
backendSourceInfo = `**后端文档位置**:${buildOutputPath(params.featureName, "backend-doc.md", projectRoot)}\n`;
|
|
222
|
+
debugLog(`后端文档已处理`);
|
|
216
223
|
}
|
|
217
224
|
}
|
|
225
|
+
|
|
226
|
+
// 如果有需要处理的任务,返回完整工作流
|
|
227
|
+
if (tasks.length > 0) {
|
|
228
|
+
debugLog(`发现 ${tasks.length} 个需要处理的任务`);
|
|
229
|
+
|
|
230
|
+
let message = `📋 需要处理以下文档(共 ${tasks.length} 个)\n\n`;
|
|
231
|
+
|
|
232
|
+
tasks.forEach((task, index) => {
|
|
233
|
+
message += `### 任务 ${index + 1}:${task.name}\n`;
|
|
234
|
+
message += task.processingInstruction;
|
|
235
|
+
message += `\n\n`;
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
message += `⚠️ **重要提示**:\n`;
|
|
239
|
+
message += `- **推荐并行处理**:可以同时处理多个任务,提高效率\n`;
|
|
240
|
+
message += `- 每个任务处理完成后,立即保存文件,**不要把文件内容放在上下文中**\n`;
|
|
241
|
+
message += `- 所有任务完成后,重新调用 \`generate_requirements\` 工具(工具会自动检查已完成任务)\n`;
|
|
242
|
+
message += `- 这样可以避免上下文过长,同时减少重复调用\n`;
|
|
243
|
+
|
|
244
|
+
return {
|
|
245
|
+
success: false,
|
|
246
|
+
message,
|
|
247
|
+
needsAction: {
|
|
248
|
+
type: "process_documents" as any,
|
|
249
|
+
instruction: `按顺序或并行处理上述 ${tasks.length} 个任务,每个任务完成后立即保存文件。所有任务完成后重新调用 generate_requirements 工具。`
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
// 所有文档都已准备好
|
|
255
|
+
debugLog(`所有文档已准备完毕`);
|
|
256
|
+
|
|
257
|
+
let designSourceInfo = "";
|
|
258
|
+
if (savedDesign) {
|
|
259
|
+
designSourceInfo = `**设计稿位置**:${designDocPath}\n`;
|
|
260
|
+
}
|
|
261
|
+
|
|
262
|
+
let backendSourceInfo = "";
|
|
263
|
+
if (savedBackend) {
|
|
264
|
+
backendSourceInfo = `**后端文档位置**:${backendDocPath}\n`;
|
|
265
|
+
}
|
|
218
266
|
|
|
219
267
|
// 5. 生成分析提示词
|
|
220
268
|
const outputPath = buildOutputPath(params.featureName, "requirements.md", projectRoot);
|
|
221
|
-
const originDocPath = buildOutputPath(params.featureName, "origin-requirement.md", projectRoot);
|
|
222
269
|
debugLog(`生成输出路径`, { outputPath, originDocPath, projectRoot });
|
|
223
270
|
|
|
224
271
|
let message = "📝 需求文档已准备完毕\n\n";
|
|
@@ -133,24 +133,22 @@ export async function processRequirementDocument(
|
|
|
133
133
|
return {
|
|
134
134
|
success: false,
|
|
135
135
|
message: `📄 检测到 PDF 文件,需要提取完整内容
|
|
136
|
-
|
|
136
|
+
|
|
137
137
|
请执行以下操作:
|
|
138
138
|
|
|
139
139
|
1. 调用 \`mcp_execute_tool\` 工具读取文本层:
|
|
140
140
|
- server_name: "pdf-reader"
|
|
141
141
|
- tool_name: "read_pdf_text"
|
|
142
142
|
- arguments: { "file_path": "${filePath}" }
|
|
143
|
-
|
|
143
|
+
|
|
144
144
|
2. 调用 \`mcp_execute_tool\` 工具读取图片和表格(OCR):
|
|
145
145
|
- server_name: "pdf-reader"
|
|
146
146
|
- tool_name: "read_by_ocr"
|
|
147
147
|
- arguments: { "file_path": "${filePath}", "language": "${language}", "dpi": 300 }
|
|
148
|
-
|
|
148
|
+
|
|
149
149
|
3. 将两次读取的内容合并(文本层 + OCR内容)
|
|
150
|
-
|
|
151
|
-
4. 保存合并后的内容到:\`${outputMdPath}
|
|
152
|
-
|
|
153
|
-
5. 保存完成后,重新调用 \`generate_requirements\` 工具`,
|
|
150
|
+
|
|
151
|
+
4. 保存合并后的内容到:\`${outputMdPath}\``,
|
|
154
152
|
needsAction: {
|
|
155
153
|
type: "read_pdf",
|
|
156
154
|
instruction: `必须调用 pdf-reader MCP 的两个工具读取 PDF:
|