feat: plan 命令新增 document-name 参数,校验依赖是否满足
This commit is contained in:
39
src/cli.ts
39
src/cli.ts
@@ -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);
|
||||
},
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user