From 1594fb962fd018fe96835c73cc8fe81c2e864ce7 Mon Sep 17 00:00:00 2001 From: David Hill Date: Fri, 20 Mar 2026 13:11:18 +0000 Subject: [PATCH] fix(ui): label reverted attachments by mime --- packages/app/src/pages/session.tsx | 17 +++++++++++++++-- .../composer/session-composer-region.tsx | 10 +++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/packages/app/src/pages/session.tsx b/packages/app/src/pages/session.tsx index 6d29170081..c83dd1bff8 100644 --- a/packages/app/src/pages/session.tsx +++ b/packages/app/src/pages/session.tsx @@ -1324,9 +1324,22 @@ export default function Page() { attachmentName: language.t("common.attachment"), }) + const tag = (mime: string | undefined) => { + if (mime === "application/pdf") return "pdf" + if (mime?.startsWith("image/")) return "image" + return "file" + } + + const chip = (part: { filename: string; mime: string }) => `[${tag(part.mime)}:${part.filename}]` + const line = (id: string) => { const text = draft(id) - .map((part) => (part.type === "image" ? `[image:${part.filename}]` : part.content)) + .map((part) => { + if (part.type === "image") return chip(part) + if (part.type === "file") return `[file:${part.path}]` + if (part.type === "agent") return `@${part.name}` + return part.content + }) .join("") .replace(/\s+/g, " ") .trim() @@ -1394,7 +1407,7 @@ export default function Page() { const followupText = (item: FollowupDraft) => { const text = item.prompt .map((part) => { - if (part.type === "image") return `[image:${part.filename}]` + if (part.type === "image") return chip(part) if (part.type === "file") return `[file:${part.path}]` if (part.type === "agent") return `@${part.name}` return part.content diff --git a/packages/app/src/pages/session/composer/session-composer-region.tsx b/packages/app/src/pages/session/composer/session-composer-region.tsx index a5263cd743..8c00cacc3c 100644 --- a/packages/app/src/pages/session/composer/session-composer-region.tsx +++ b/packages/app/src/pages/session/composer/session-composer-region.tsx @@ -46,6 +46,14 @@ export function SessionComposerRegion(props: { const language = useLanguage() const route = useSessionKey() + const tag = (mime: string) => { + if (mime === "application/pdf") return "pdf" + if (mime.startsWith("image/")) return "image" + return "file" + } + + const chip = (part: { filename: string; mime: string }) => `[${tag(part.mime)}:${part.filename}]` + const handoffPrompt = createMemo(() => getSessionHandoff(route.sessionKey())?.prompt) const previewPrompt = () => @@ -54,7 +62,7 @@ export function SessionComposerRegion(props: { .map((part) => { if (part.type === "file") return `[file:${part.path}]` if (part.type === "agent") return `@${part.name}` - if (part.type === "image") return `[image:${part.filename}]` + if (part.type === "image") return chip(part) return part.content }) .join("")