feat: assemblePlanPrompt 改为按单文档组装,增加依赖说明
This commit is contained in:
@@ -15,35 +15,51 @@ export async function assemblePlanPrompt(
|
||||
config: RuneConfig,
|
||||
projectRoot: string,
|
||||
changeName: string,
|
||||
documentName: string,
|
||||
): Promise<string> {
|
||||
const plan = config.stages.plan;
|
||||
if (!plan) throw new Error("plan 阶段未配置");
|
||||
|
||||
const doc = plan.documents.find((d) => d.name === documentName);
|
||||
if (!doc) {
|
||||
throw new Error(`文档 "${documentName}" 不在配置的 plan.documents 中`);
|
||||
}
|
||||
|
||||
const changeDir = getChangeDir(projectRoot, changeName);
|
||||
const parts: string[] = [];
|
||||
|
||||
parts.push(`# 规划阶段:${changeName}\n`);
|
||||
parts.push("请为当前变更生成以下文档:\n");
|
||||
parts.push(`# 规划阶段:${changeName}`);
|
||||
parts.push("");
|
||||
parts.push(`## 文档:${doc.name}.md`);
|
||||
parts.push(doc.prompt);
|
||||
|
||||
for (const doc of plan.documents) {
|
||||
parts.push(`## 文档:${doc.name}.md`);
|
||||
parts.push(doc.prompt);
|
||||
|
||||
const docPath = join(changeDir, `${doc.name}.md`);
|
||||
if (existsSync(docPath)) {
|
||||
const existing = await readFile(docPath, "utf-8");
|
||||
parts.push(`\n### 已有内容(请在此基础上修订):\n${existing}`);
|
||||
}
|
||||
|
||||
if (doc.template) {
|
||||
const rendered = doc.template.replace(/\{\{change-name\}\}/g, changeName);
|
||||
parts.push(`\n### 格式模板:\n${rendered}`);
|
||||
}
|
||||
|
||||
parts.push("");
|
||||
const docPath = join(changeDir, `${doc.name}.md`);
|
||||
if (existsSync(docPath)) {
|
||||
const existing = await readFile(docPath, "utf-8");
|
||||
parts.push(`\n### 已有内容(请在此基础上修订):\n${existing}`);
|
||||
}
|
||||
|
||||
parts.push(`请将文档写入目录:${changeDir}`);
|
||||
if (doc.template) {
|
||||
const rendered = doc.template.replace(/\{\{change-name\}\}/g, changeName);
|
||||
parts.push(`\n### 格式模板:\n${rendered}`);
|
||||
}
|
||||
|
||||
if (doc.depend && doc.depend.length > 0) {
|
||||
parts.push("\n---\n");
|
||||
parts.push("## 依赖说明\n");
|
||||
parts.push("本文档依赖以下前置文档:");
|
||||
|
||||
for (const dep of doc.depend) {
|
||||
const depPath = join(changeDir, `${dep}.md`);
|
||||
const depCompleted = existsSync(depPath);
|
||||
const status = depCompleted ? "已完成" : "未完成";
|
||||
parts.push(`- ${dep}.md(${status})`);
|
||||
}
|
||||
|
||||
parts.push("\n请先阅读已完成的前置文档,确保内容一致。");
|
||||
}
|
||||
|
||||
parts.push(`\n请将文档写入目录:${changeDir}`);
|
||||
return parts.join("\n");
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user