From 1b3b9375bb4de0f360782dd2f9d8c7c2903b8baa Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Sat, 22 Aug 2026 08:21:53 -0400 Subject: [PATCH] refac --- src/lib/components/chat/FileNav.svelte | 24 ++++++------ src/lib/components/chat/MessageInput.svelte | 43 ++++++++++----------- src/lib/components/common/FileItem.svelte | 12 ++++-- 3 files changed, 41 insertions(+), 38 deletions(-) diff --git a/src/lib/components/chat/FileNav.svelte b/src/lib/components/chat/FileNav.svelte index 18206e60ec..8223b78cb9 100644 --- a/src/lib/components/chat/FileNav.svelte +++ b/src/lib/components/chat/FileNav.svelte @@ -1173,21 +1173,21 @@ return; } - const lastSlash = filePath.lastIndexOf('/'); - const dir = lastSlash > 0 ? filePath.substring(0, lastSlash + 1) : '/'; - invalidateTreeCache(dir); + const lastSlash = filePath.lastIndexOf('/'); + const dir = lastSlash > 0 ? filePath.substring(0, lastSlash + 1) : '/'; + invalidateTreeCache(dir); - if (selectedFile) { - if (selectedFile === filePath || currentPath.startsWith(dir)) { - const fileName = selectedFile.split('/').pop() ?? ''; - await openEntry({ name: fileName, type: 'file', size: 0 }); + if (selectedFile) { + if (selectedFile === filePath || currentPath.startsWith(dir)) { + const fileName = selectedFile.split('/').pop() ?? ''; + await openEntry({ name: fileName, type: 'file', size: 0 }); } - } else { - if (currentPath.startsWith(dir) || dir.startsWith(currentPath)) { - await refreshBrowser(); - } + } else { + if (currentPath.startsWith(dir) || dir.startsWith(currentPath)) { + await refreshBrowser(); } - }); + } + }); if (!handledDisplayFile && terminal) { loading = true; diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index 9b39b25f3b..32f552ba3a 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -33,12 +33,12 @@ toolServers, terminalServers, user as _user, - showControls, - showSettings, - showFileNavDir, - selectedTerminalId, - TTSWorker, - temporaryChatEnabled + showControls, + showSettings, + showFileNavDir, + selectedTerminalId, + TTSWorker, + temporaryChatEnabled } from '$lib/stores'; import { @@ -876,10 +876,7 @@ return ( (settingsValue?.terminalServers ?? []).find( - (t: any) => - t.url === selectedId && - t.enabled && - t.config?.chat_uploads === 'filesystem' + (t: any) => t.url === selectedId && t.enabled && t.config?.chat_uploads === 'filesystem' ) ?? null ); }; @@ -925,11 +922,13 @@ if (filesystemUploadTerminal) { try { const cwd = - (await getCwd( - filesystemUploadTerminal.url, - filesystemUploadTerminal.key, - chatId || undefined - ))?.cwd || '/'; + ( + await getCwd( + filesystemUploadTerminal.url, + filesystemUploadTerminal.key, + chatId || undefined + ) + )?.cwd || '/'; const uploadedFile = await uploadToTerminal( filesystemUploadTerminal.url, filesystemUploadTerminal.key, @@ -939,16 +938,16 @@ ); if (uploadedFile) { - fileItem.type = 'terminal_file'; + fileItem.type = 'filesystem'; fileItem.status = 'uploaded'; fileItem.id = uploadedFile.path; fileItem.path = uploadedFile.path; - fileItem.url = uploadedFile.path; - fileItem.size = uploadedFile.size ?? file.size; - fileItem.file = uploadedFile; - files = files; - showFileNavDir.set(uploadedFile.path); - } else { + fileItem.url = uploadedFile.path; + fileItem.size = uploadedFile.size ?? file.size; + fileItem.file = uploadedFile; + files = files; + showFileNavDir.set(uploadedFile.path); + } else { fileItem.status = 'error'; fileItem.error = $i18n.t('Failed to upload file.'); toast.error(fileItem.error); diff --git a/src/lib/components/common/FileItem.svelte b/src/lib/components/common/FileItem.svelte index 881088ca26..cf1695018c 100644 --- a/src/lib/components/common/FileItem.svelte +++ b/src/lib/components/common/FileItem.svelte @@ -3,7 +3,7 @@ import { WEBUI_API_BASE_URL } from '$lib/constants'; import { formatFileSize } from '$lib/utils'; - import { settings } from '$lib/stores'; + import { settings, showFileNavPath } from '$lib/stores'; import FileItemModal from './FileItemModal.svelte'; import GarbageBin from '../icons/GarbageBin.svelte'; @@ -57,7 +57,11 @@ : 'gap-1 rounded-2xl p-1.5'} text-left" type="button" on:click={async () => { - if (item?.file?.data?.content || item?.type === 'file' || item?.content || modal) { + const filesystemPath = item?.type === 'filesystem' ? (item.path ?? item.url ?? item.id) : null; + + if (filesystemPath) { + showFileNavPath.set(filesystemPath); + } else if (item?.file?.data?.content || item?.type === 'file' || item?.content || modal) { showModal = !showModal; } else { if (url) { @@ -111,7 +115,7 @@ ? $i18n.t('Note') : type === 'chat' ? $i18n.t('Chat') - : type === 'file' + : type === 'file' || type === 'filesystem' ? $i18n.t('File') : $i18n.t('Document')} placement="top" @@ -145,7 +149,7 @@ ? 'text-gray-800 dark:text-gray-100' : 'text-gray-500'}" > - {#if type === 'file'} + {#if type === 'file' || type === 'filesystem'} {$i18n.t('File')} {:else if type === 'note'} {$i18n.t('Note')}