Kaynağa Gözat

fix: inject marathon outline into Step0 and Step4 AI context

nonvioce 6 ay önce
ebeveyn
işleme
9d8a9a63d9

+ 1 - 0
src/app/features/novel-writer/components/pipeline/Step0ControlCard.tsx

@@ -92,6 +92,7 @@ export default function Step0ControlCard({
         'project-overview.md',
         'theme-and-proposition.md',
         'cast-bible.md',
+        'world_state/marathon-outline.md',
       ];
       const contextParts: string[] = [];
 

+ 21 - 1
src/app/features/novel-writer/components/pipeline/Step4ContentEditor.tsx

@@ -560,6 +560,20 @@ ${antiText}
         }
       }
 
+      // Read marathon outline if it exists
+      let marathonOutline = '';
+      try {
+        const moRes = await fetch('/api/novel/files', {
+          method: 'POST',
+          headers: { 'Content-Type': 'application/json' },
+          body: JSON.stringify({ action: 'read', projectPath, filePath: 'world_state/marathon-outline.md' }),
+        });
+        if (moRes.ok) {
+          const moData = await moRes.json();
+          if (moData.content) marathonOutline = moData.content;
+        }
+      } catch { /* ignore */ }
+
       const worldContext = buildLayeredContext(
         worldStateFiles,
         loreFiles,
@@ -568,7 +582,13 @@ ${antiText}
         rollingSummaries
       );
 
-      const prompt = await buildGenerationPrompt(worldContext);
+      const marathonSection = marathonOutline
+        ? `## 马拉松大纲(第${chapterIndex}章在整体弧中的位置)\n${marathonOutline}`
+        : '';
+
+      const prompt = await buildGenerationPrompt(
+        marathonSection ? `${marathonSection}\n\n${worldContext}` : worldContext
+      );
 
       const response = await fetch('/api/stream-proxy', {
         method: 'POST',