From bf74745b835d3c5f02788197025104123480f6e2 Mon Sep 17 00:00:00 2001 From: w770583069 Date: Fri, 22 May 2026 16:53:25 +0800 Subject: [PATCH] feat: add inline file preview for text-based files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add fetchFileText() to download API - Add preview modal to MarkdownRenderer for .txt/.md/.json/.csv etc. - File card: click card body → preview, click download button → download --- packages/client/src/api/hermes/download.ts | 14 ++++ .../hermes/chat/MarkdownRenderer.vue | 72 ++++++++++++++++++- .../components/hermes/chat/mermaidRenderer.ts | 3 +- 3 files changed, 85 insertions(+), 4 deletions(-) diff --git a/packages/client/src/api/hermes/download.ts b/packages/client/src/api/hermes/download.ts index 20442c4..7d8d9e2 100644 --- a/packages/client/src/api/hermes/download.ts +++ b/packages/client/src/api/hermes/download.ts @@ -53,3 +53,17 @@ export async function downloadFile(filePath: string, fileName?: string): Promise document.body.removeChild(a) URL.revokeObjectURL(blobUrl) } + +/** + * Get preview file content. + * Throws with error message on failure. + */ +export async function fetchFileText(filePath: string, fileName?: string): Promise { + const url = getDownloadUrl(filePath, fileName) + const res = await fetch(url) + if (!res.ok) { + const body = await res.json().catch(() => ({ error: `HTTP ${res.status}` })) + throw new Error(body.error || `Preview failed: ${res.status}`) + } + return res.text() +} diff --git a/packages/client/src/components/hermes/chat/MarkdownRenderer.vue b/packages/client/src/components/hermes/chat/MarkdownRenderer.vue index e27bcdb..85421e0 100644 --- a/packages/client/src/components/hermes/chat/MarkdownRenderer.vue +++ b/packages/client/src/components/hermes/chat/MarkdownRenderer.vue @@ -1,7 +1,7 @@