From 1a2b360d3d452818f5d51b0213ad6459549ce5bc Mon Sep 17 00:00:00 2001 From: Timothy Jaeryang Baek Date: Mon, 2 Mar 2026 15:01:10 -0600 Subject: [PATCH] refac --- src/lib/components/chat/Chat.svelte | 45 ++----------------- src/lib/components/chat/MessageInput.svelte | 10 ++--- .../chat/MessageInput/IntegrationsMenu.svelte | 2 +- src/lib/components/chat/XTerminal.svelte | 10 +++++ 4 files changed, 18 insertions(+), 49 deletions(-) diff --git a/src/lib/components/chat/Chat.svelte b/src/lib/components/chat/Chat.svelte index 4d8d06f54..86cd04113 100644 --- a/src/lib/components/chat/Chat.svelte +++ b/src/lib/components/chat/Chat.svelte @@ -146,33 +146,7 @@ let webSearchEnabled = false; let codeInterpreterEnabled = false; - // Auto-inject direct terminal servers into selected tool IDs so they act like toggled-on tools - // System terminals (with id field) are handled server-side via terminal_id, not as direct tool servers - $: if ($terminalServers && $terminalServers.length > 0) { - const directTerminalServers = $terminalServers.filter((t) => !t.id); - const terminalIds = directTerminalServers.map( - (_, i) => `direct_server:terminal_${$terminalServers.indexOf(directTerminalServers[i])}` - ); - const missingIds = terminalIds.filter((id) => !selectedToolIds.includes(id)); - if (missingIds.length > 0) { - selectedToolIds = [...selectedToolIds, ...missingIds]; - } - } - // Remove disabled terminal servers from selectedToolIds automatically - $: if (selectedToolIds.length > 0) { - const directTerminalServers = ($terminalServers ?? []).filter((t) => !t.id); - const terminalIds = directTerminalServers.map( - (_, i) => - `direct_server:terminal_${($terminalServers ?? []).indexOf(directTerminalServers[i])}` - ); - const invalidTerminalIds = selectedToolIds.filter( - (id) => id.startsWith('direct_server:terminal_') && !terminalIds.includes(id) - ); - if (invalidTerminalIds.length > 0) { - selectedToolIds = selectedToolIds.filter((id) => !invalidTerminalIds.includes(id)); - } - } let showCommands = false; @@ -354,25 +328,12 @@ [...(model?.info?.meta?.toolIds ?? [])].filter((id) => $tools.find((t) => t.id === id)) ) ]; - } else if ( - $settings?.tools && - $settings.tools.some((id) => !id.startsWith('direct_server:terminal_')) - ) { + } else if ($settings?.tools) { selectedToolIds = $settings.tools; } else { - // Don't wipe existing terminal servers if no default tool IDs selectedToolIds = selectedToolIds.filter((id) => !id.startsWith('direct_server:')); } - // Auto-inject direct terminal servers (system ones are handled via terminal_id) - if ($terminalServers && $terminalServers.length > 0) { - const directTerminalServers = $terminalServers.filter((t) => !t.id); - const terminalIds = directTerminalServers.map( - (_, i) => `direct_server:terminal_${$terminalServers.indexOf(directTerminalServers[i])}` - ); - selectedToolIds = [...new Set([...selectedToolIds, ...terminalIds])]; - } - // Set Default Filters (Toggleable only) if (model?.info?.meta?.defaultFilterIds) { selectedFilterIds = model.info.meta.defaultFilterIds.filter((id) => @@ -2210,7 +2171,9 @@ tool_servers: [ ...($toolServers ?? []).filter( (server, idx) => toolServerIds.includes(idx) || toolServerIds.includes(server?.id) - ) + ), + // Direct terminal servers — always included when enabled (not routed through selectedToolIds) + ...($terminalServers ?? []).filter((t) => !t.id) ], features: getFeatures(), variables: { diff --git a/src/lib/components/chat/MessageInput.svelte b/src/lib/components/chat/MessageInput.svelte index a222783be..f3108abf2 100644 --- a/src/lib/components/chat/MessageInput.svelte +++ b/src/lib/components/chat/MessageInput.svelte @@ -1636,12 +1636,10 @@ {/if}
- {#if (selectedToolIds ?? []).filter((id) => !id.startsWith('direct_server:terminal_')).length > 0} + {#if (selectedToolIds ?? []).length > 0} !id.startsWith('direct_server:terminal_') - ).length + COUNT: (selectedToolIds ?? []).length })} > diff --git a/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte b/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte index e671b4757..3e32571d2 100644 --- a/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte +++ b/src/lib/components/chat/MessageInput/IntegrationsMenu.svelte @@ -97,7 +97,7 @@ } selectedToolIds = selectedToolIds.filter( - (id) => Object.keys(tools).includes(id) || id.startsWith('direct_server:terminal_') + (id) => Object.keys(tools).includes(id) ); }; diff --git a/src/lib/components/chat/XTerminal.svelte b/src/lib/components/chat/XTerminal.svelte index 7ed376175..3f48c59c1 100644 --- a/src/lib/components/chat/XTerminal.svelte +++ b/src/lib/components/chat/XTerminal.svelte @@ -239,6 +239,16 @@ connect(); }; + // Reconnect when the selected terminal changes + $: if ($selectedTerminalId !== undefined && term) { + // Clear the terminal screen and reconnect to the new server + disconnect(); + term.clear(); + if ($selectedTerminalId) { + connect(); + } + } + onMount(() => { initTerminal(); });