feat: plan 命令新增 document-name 参数,校验依赖是否满足

This commit is contained in:
2026-06-09 10:54:03 +08:00
parent 160ec576e1
commit 5799ab6978

View File

@@ -69,17 +69,40 @@ cli.command("discuss", "讨论阶段").action(async () => {
console.log(prompt);
});
cli.command("plan <change-name>", "规划阶段").action(
async (changeName: string) => {
cli.command("plan <change-name> <document-name>", "规划阶段").action(
async (changeName: string, documentName: string) => {
const root = requireProjectRoot();
await mkdir(getChangeDir(root, changeName), { recursive: true });
const config = await loadConfig(root);
const plan = config.stages.plan;
if (!plan) throw new Error("plan 阶段未配置");
for (const doc of plan.documents) {
const prompt = await assemblePlanPrompt(config, root, changeName, doc.name);
console.log(prompt);
const planDocs = config.stages.plan?.documents;
if (!planDocs || !planDocs.find((d) => d.name === documentName)) {
throw new CommandError(
`文档 "${documentName}" 不在配置的 plan.documents 中`,
{
hint: `可用文档:${planDocs?.map((d) => d.name).join(", ") ?? "无"}`,
},
);
}
const changeDir = getChangeDir(root, changeName);
await mkdir(changeDir, { recursive: true });
const doc = planDocs.find((d) => d.name === documentName)!;
if (doc.depend && doc.depend.length > 0) {
const missing = doc.depend.filter(
(dep) => !existsSync(join(changeDir, `${dep}.md`)),
);
if (missing.length > 0) {
throw new CommandError(
`文档 "${documentName}" 的前置依赖未满足:${missing.map((d) => `${d}.md`).join("、")} 尚未完成`,
{
hint: `请先完成依赖文档rune plan ${changeName} ${missing[0]}`,
},
);
}
}
const prompt = await assemblePlanPrompt(config, root, changeName, documentName);
console.log(prompt);
},
);