From d13a35ab96bd24b4c760f76ab66c5e12ad13abac Mon Sep 17 00:00:00 2001 From: Aslan Vatsaev Date: Fri, 10 Oct 2025 13:26:12 +0200 Subject: [PATCH 001/286] fix: auto show artifacts when opening a conversation --- src/lib/components/chat/Messages/ContentRenderer.svelte | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/lib/components/chat/Messages/ContentRenderer.svelte b/src/lib/components/chat/Messages/ContentRenderer.svelte index 219c0db436..b1591bf11b 100644 --- a/src/lib/components/chat/Messages/ContentRenderer.svelte +++ b/src/lib/components/chat/Messages/ContentRenderer.svelte @@ -185,8 +185,10 @@ !$mobile && $chatId ) { - showArtifacts.set(true); - showControls.set(true); + setTimeout(() => { + showArtifacts.set(true); + showControls.set(true); + }); } }} onPreview={async (value) => { From a9c4e4b422a4908cbaca21c3b3436124df6face8 Mon Sep 17 00:00:00 2001 From: Aslan Vatsaev Date: Fri, 10 Oct 2025 13:47:33 +0200 Subject: [PATCH 002/286] fix: auto show artifacts when opening a conversation --- src/lib/components/chat/Messages/ContentRenderer.svelte | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/lib/components/chat/Messages/ContentRenderer.svelte b/src/lib/components/chat/Messages/ContentRenderer.svelte index b1591bf11b..bc9cd3265d 100644 --- a/src/lib/components/chat/Messages/ContentRenderer.svelte +++ b/src/lib/components/chat/Messages/ContentRenderer.svelte @@ -176,7 +176,7 @@ {onSourceClick} {onTaskClick} {onSave} - onUpdate={(token) => { + onUpdate={async (token) => { const { lang, text: code } = token; if ( @@ -185,10 +185,9 @@ !$mobile && $chatId ) { - setTimeout(() => { - showArtifacts.set(true); - showControls.set(true); - }); + await tick(); + showArtifacts.set(true); + showControls.set(true); } }} onPreview={async (value) => { From 0031fb82748872c24d68efa03fa7f83b44cd8a23 Mon Sep 17 00:00:00 2001 From: silentoplayz Date: Sun, 19 Oct 2025 20:15:39 -0400 Subject: [PATCH 003/286] fix: correctly handle clipboard images in prompts The textVariableHandler was using URL.createObjectURL() for clipboard images, which created a blob URL instead of the required base64-encoded data URL. This caused an "illegal base64 data" error when sending messages with images pasted via a {{CLIPBOARD}} prompt. This commit updates the handler to use FileReader.readAsDataURL() to properly encode the image, aligning it with the existing on:paste logic. Additionally, it adds error handling for navigator.clipboard.read() to address potential permission issues in Firefox. --- src/lib/components/chat/MessageInput.svelte | 29 +++++++++++---------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index c525dcf34c..b8539c19c8 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -168,29 +168,30 @@ return '{{CLIPBOARD}}'; }); - const clipboardItems = await navigator.clipboard.read(); + const clipboardItems = await navigator.clipboard.read().catch((err) => { + console.error('Failed to read clipboard items:', err); + return []; + }); - let imageUrl = null; for (const item of clipboardItems) { - // Check for known image types for (const type of item.types) { if (type.startsWith('image/')) { const blob = await item.getType(type); - imageUrl = URL.createObjectURL(blob); + const reader = new FileReader(); + reader.onload = (event) => { + files = [ + ...files, + { + type: 'image', + url: event.target.result as string + } + ]; + }; + reader.readAsDataURL(blob); } } } - if (imageUrl) { - files = [ - ...files, - { - type: 'image', - url: imageUrl - } - ]; - } - text = text.replaceAll('{{CLIPBOARD}}', clipboardText); } From d1c9555a0b2c77c6b52cc487d74090565b5083df Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Tue, 28 Oct 2025 01:46:36 -0700 Subject: [PATCH 004/286] refac --- src/lib/components/common/RichTextInput/suggestions.ts | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/components/common/RichTextInput/suggestions.ts b/src/lib/components/common/RichTextInput/suggestions.ts index 0667e83060..92111f1f19 100644 --- a/src/lib/components/common/RichTextInput/suggestions.ts +++ b/src/lib/components/common/RichTextInput/suggestions.ts @@ -1,4 +1,6 @@ import { mount, unmount } from 'svelte'; +import { createClassComponent } from 'svelte/legacy'; + import tippy from 'tippy.js'; export function getSuggestionRenderer(Component: any, ComponentProps = {}) { @@ -16,7 +18,8 @@ export function getSuggestionRenderer(Component: any, ComponentProps = {}) { document.body.appendChild(container); // mount Svelte component - component = mount(Component, { + component = createClassComponent({ + component: Component, target: container, props: { char: props?.text, @@ -106,7 +109,7 @@ export function getSuggestionRenderer(Component: any, ComponentProps = {}) { popup = null; try { - unmount(component); + component.$destroy(); } catch (e) { console.error('Error unmounting component:', e); } From 61a2909a88e96afa191cdbbe17a7905e41cf6e71 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Tue, 28 Oct 2025 14:03:05 -0700 Subject: [PATCH 005/286] refac --- .../components/chat/Messages/Markdown/HTMLToken.svelte | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/lib/components/chat/Messages/Markdown/HTMLToken.svelte b/src/lib/components/chat/Messages/Markdown/HTMLToken.svelte index b66a0b01fd..fac4fad1de 100644 --- a/src/lib/components/chat/Messages/Markdown/HTMLToken.svelte +++ b/src/lib/components/chat/Messages/Markdown/HTMLToken.svelte @@ -131,12 +131,9 @@ {/if} {:else if token.text.includes(` + {:else if token.text.trim().match(/^$/i)} +
{:else} - {@const br = token.text.match(//)} - {#if br} -
- {:else} - {token.text} - {/if} + {token.text} {/if} {/if} From a0068c4a17f2686a2c1eefe4f50d51bc9c96475a Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Tue, 28 Oct 2025 14:05:49 -0700 Subject: [PATCH 006/286] refac --- src/lib/components/layout/Sidebar.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 14e73f2046..4b4960930d 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -183,6 +183,7 @@ console.log('initChatList'); currentChatPage.set(1); allChatsLoaded = false; + scrollPaginationEnabled.set(false); initFolders(); await Promise.all([ From 292be82754136cc10fcd2707d78a2edfec6764d0 Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Tue, 28 Oct 2025 17:31:38 -0700 Subject: [PATCH 007/286] refac/fix: sidebar open status --- src/lib/components/layout/Sidebar.svelte | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/lib/components/layout/Sidebar.svelte b/src/lib/components/layout/Sidebar.svelte index 4b4960930d..a5a6c59aca 100644 --- a/src/lib/components/layout/Sidebar.svelte +++ b/src/lib/components/layout/Sidebar.svelte @@ -369,10 +369,6 @@ navElement.style['-webkit-app-region'] = 'drag'; } } - - if (!$showSidebar && !value) { - showSidebar.set(true); - } }), showSidebar.subscribe(async (value) => { localStorage.sidebar = value; From 4a0359789f0f4e21a078f7c4d634625f346feb22 Mon Sep 17 00:00:00 2001 From: silentoplayz Date: Tue, 28 Oct 2025 21:54:29 -0400 Subject: [PATCH 008/286] fix: add tooltips to tools on model edit page This change adds tooltips to the tools on the model edit page, displaying the tool's description on hover. --- src/lib/components/workspace/Models/ToolsSelector.svelte | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/lib/components/workspace/Models/ToolsSelector.svelte b/src/lib/components/workspace/Models/ToolsSelector.svelte index 5f1b3b4821..af5f9f09f2 100644 --- a/src/lib/components/workspace/Models/ToolsSelector.svelte +++ b/src/lib/components/workspace/Models/ToolsSelector.svelte @@ -1,5 +1,6 @@ @@ -235,9 +177,11 @@ }} >
- {#if config && imageGenerationConfig} + {#if config}
-
{$i18n.t('Image Settings')}
+
{$i18n.t('Create Image')}
+ +
@@ -247,29 +191,35 @@
{ const enabled = e.detail; if (enabled) { if ( - config.engine === 'automatic1111' && - config.automatic1111.AUTOMATIC1111_BASE_URL === '' + config.IMAGE_GENERATION_ENGINE === 'automatic1111' && + config.AUTOMATIC1111_BASE_URL === '' ) { toast.error($i18n.t('AUTOMATIC1111 Base URL is required.')); - config.enabled = false; + config.ENABLE_IMAGE_GENERATION = false; } else if ( - config.engine === 'comfyui' && - config.comfyui.COMFYUI_BASE_URL === '' + config.IMAGE_GENERATION_ENGINE === 'comfyui' && + config.COMFYUI_BASE_URL === '' ) { toast.error($i18n.t('ComfyUI Base URL is required.')); - config.enabled = false; - } else if (config.engine === 'openai' && config.openai.OPENAI_API_KEY === '') { + config.ENABLE_IMAGE_GENERATION = false; + } else if ( + config.IMAGE_GENERATION_ENGINE === 'openai' && + config.OPENAI_API_KEY === '' + ) { toast.error($i18n.t('OpenAI API Key is required.')); - config.enabled = false; - } else if (config.engine === 'gemini' && config.gemini.GEMINI_API_KEY === '') { + config.ENABLE_IMAGE_GENERATION = false; + } else if ( + config.IMAGE_GENERATION_ENGINE === 'gemini' && + config.GEMINI_API_KEY === '' + ) { toast.error($i18n.t('Gemini API Key is required.')); - config.enabled = false; + config.ENABLE_IMAGE_GENERATION = false; } } @@ -284,7 +234,7 @@
{$i18n.t('Image Prompt Generation')}
- +
{/if} @@ -294,7 +244,7 @@
@@ -388,66 +339,22 @@
- -
-
{$i18n.t('Set Sampler')}
-
-
- - +
+
{$i18n.t('Additional Parameters')}
+
+
+