From fcba39e1690dddb57c9a84e1e422a75c8e92fb7d Mon Sep 17 00:00:00 2001 From: y-chell Date: Tue, 17 Mar 2026 13:10:43 +0800 Subject: [PATCH] fix: ensure chapters/ and story/ dirs exist before writing files on Windows --- packages/core/src/agents/writer.ts | 1 + packages/core/src/pipeline/runner.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/packages/core/src/agents/writer.ts b/packages/core/src/agents/writer.ts index 7b5a4810..4919247d 100644 --- a/packages/core/src/agents/writer.ts +++ b/packages/core/src/agents/writer.ts @@ -265,6 +265,7 @@ export class WriterAgent extends BaseAgent { const chaptersDir = join(bookDir, "chapters"); const storyDir = join(bookDir, "story"); await mkdir(chaptersDir, { recursive: true }); + await mkdir(storyDir, { recursive: true }); const paddedNum = String(output.chapterNumber).padStart(4, "0"); const filename = `${paddedNum}_${this.sanitizeFilename(output.title)}.md`; diff --git a/packages/core/src/pipeline/runner.ts b/packages/core/src/pipeline/runner.ts index 6256829b..78e7bf34 100644 --- a/packages/core/src/pipeline/runner.ts +++ b/packages/core/src/pipeline/runner.ts @@ -360,6 +360,7 @@ export class PipelineRunner { // Update truth files const storyDir = join(bookDir, "story"); + await mkdir(storyDir, { recursive: true }); if (reviseOutput.updatedState !== "(状态卡未更新)") { await writeFile(join(storyDir, "current_state.md"), reviseOutput.updatedState, "utf-8"); } @@ -581,6 +582,7 @@ export class PipelineRunner { // Update state files from revision const storyDir = join(bookDir, "story"); + await mkdir(storyDir, { recursive: true }); if (reviseOutput.updatedState !== "(状态卡未更新)") { await writeFile(join(storyDir, "current_state.md"), reviseOutput.updatedState, "utf-8"); } @@ -596,6 +598,7 @@ export class PipelineRunner { // 4. Save chapter (original or revised) const chaptersDir = join(bookDir, "chapters"); + await mkdir(chaptersDir, { recursive: true }); const paddedNum = String(chapterNumber).padStart(4, "0"); const title = output.title; const filename = `${paddedNum}_${title.replace(/[/\\?%*:|"<>]/g, "").replace(/\s+/g, "_").slice(0, 50)}.md`;