From e913fecd4c4d6ef1db11da1a296937cffcb21a5c Mon Sep 17 00:00:00 2001 From: Codex Date: Tue, 9 Jun 2026 11:54:35 -0700 Subject: [PATCH] Send revision notes with attached slides --- apps/api/src/server.ts | 10 +++++++++- apps/web/src/main.tsx | 14 ++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/apps/api/src/server.ts b/apps/api/src/server.ts index f92d680..0f1c00c 100644 --- a/apps/api/src/server.ts +++ b/apps/api/src/server.ts @@ -120,7 +120,10 @@ app.post("/api/decks/from-source", upload.single("source"), async (req, res, nex const source = file ? await sourceFromUpload(file) : sourceFromText(pastedText); const result = await createDeckArtifacts({ source, - instructions: stringField(req.body.instructions), + instructions: combineInstructions( + stringField(req.body.instructions), + file && pastedText.trim() ? `Attached slide/deck update instructions:\n${pastedText.trim()}` : undefined + ), audience: stringField(req.body.audience) || "executives", styleId: stringField(req.body.style) || "incorta", designTemplate: parseDesignTemplateField(req.body.designTemplate) @@ -805,6 +808,11 @@ function stringField(value: unknown): string | undefined { return typeof value === "string" && value.trim() ? value.trim() : undefined; } +function combineInstructions(...values: Array): string | undefined { + const parts = values.map((value) => value?.trim()).filter(Boolean); + return parts.length ? parts.join("\n\n") : undefined; +} + async function exists(targetPath: string): Promise { try { await access(targetPath); diff --git a/apps/web/src/main.tsx b/apps/web/src/main.tsx index 2fa53b5..fc990b6 100644 --- a/apps/web/src/main.tsx +++ b/apps/web/src/main.tsx @@ -196,6 +196,9 @@ function App() { setFile(nextFile); setResult(null); setError(null); + if (nextFile && content.trim() === initialContent.trim()) { + setContent(""); + } if (nextFile?.type.startsWith("image/")) { setPreviewUrl(URL.createObjectURL(nextFile)); } else { @@ -348,7 +351,8 @@ function App() { selectedTemplate.layoutRules?.length ? `Layout rules:\n- ${selectedTemplate.layoutRules.join("\n- ")}` : "", selectedTemplate.componentRules?.length ? `Component rules:\n- ${selectedTemplate.componentRules.join("\n- ")}` : "", selectedTemplate.slideFamilies?.length ? `Supported slide families: ${selectedTemplate.slideFamilies.join(", ")}.` : "", - selectedTemplate.prompt ? `Reusable design prompt: ${selectedTemplate.prompt}` : "" + selectedTemplate.prompt ? `Reusable design prompt: ${selectedTemplate.prompt}` : "", + file && content.trim() ? `Attached slide/deck update instructions:\n${content.trim()}` : "" ] .filter(Boolean) .join("\n"); @@ -372,6 +376,7 @@ function App() { formData.set("audience", "executives"); formData.set("instructions", designAwareInstructions()); formData.set("designTemplate", JSON.stringify(templateForRequest(selectedTemplate))); + if (content.trim()) formData.set("content", content.trim()); return fetch("/api/decks/from-source", { method: "POST", body: formData @@ -724,14 +729,11 @@ function SourceInput(props: DeckPaneProps & { dropLabel: string; textLabel: stri