From 376a363615e17cbec8e0aab377dd0da2c6eef37a Mon Sep 17 00:00:00 2001 From: Lily Delalande <119957291+lily-de@users.noreply.github.com> Date: Sun, 30 Mar 2025 11:01:48 -0400 Subject: [PATCH] ui: clean up extensions (#1914) --- .../settings_v2/extensions/ExtensionsSection.tsx | 1 - .../settings_v2/extensions/agent-api.ts | 15 ++++++++++----- .../settings_v2/extensions/extension-manager.ts | 2 +- .../extensions/modal/ExtensionConfigFields.tsx | 3 ++- .../extensions/subcomponents/ExtensionList.tsx | 5 +++-- .../components/settings_v2/extensions/utils.ts | 8 ++++++++ ui/desktop/src/toasts.tsx | 14 -------------- 7 files changed, 24 insertions(+), 24 deletions(-) diff --git a/ui/desktop/src/components/settings_v2/extensions/ExtensionsSection.tsx b/ui/desktop/src/components/settings_v2/extensions/ExtensionsSection.tsx index 534fdd69..3eda7950 100644 --- a/ui/desktop/src/components/settings_v2/extensions/ExtensionsSection.tsx +++ b/ui/desktop/src/components/settings_v2/extensions/ExtensionsSection.tsx @@ -60,7 +60,6 @@ export default function ExtensionsSection() { await fetchExtensions(); // Refresh the list after successful toggle return true; // Indicate success } catch (error) { - console.error('Toggle extension failed:', error); // Don't refresh the extension list on failure - this allows our visual state rollback to work // The actual state in the config hasn't changed anyway throw error; // Re-throw to let the ExtensionItem component know it failed diff --git a/ui/desktop/src/components/settings_v2/extensions/agent-api.ts b/ui/desktop/src/components/settings_v2/extensions/agent-api.ts index 17a08524..799b0dbc 100644 --- a/ui/desktop/src/components/settings_v2/extensions/agent-api.ts +++ b/ui/desktop/src/components/settings_v2/extensions/agent-api.ts @@ -20,14 +20,15 @@ export async function extensionApiCall( type: isActivating ? 'activating' : 'removing', verb: isActivating ? 'Activating' : 'Removing', pastTense: isActivating ? 'activated' : 'removed', + presentTense: isActivating ? 'activate' : 'remove', }; // for adding the payload is an extensionConfig, for removing payload is just the name const extensionName = isActivating ? payload.name : payload; let toastId; - // Step 1: Show loading toast (only for activation) - if (isActivating) { + // Step 1: Show loading toast (only for activation of stdio) + if (isActivating && (payload as ExtensionConfig) && payload.type == 'stdio') { toastId = toastService.loading({ title: extensionName, msg: `${action.verb} ${extensionName} extension...`, @@ -75,6 +76,12 @@ export async function extensionApiCall( } catch (error) { // Final catch-all error handler toastService.dismiss(toastId); + const msg = error.length < 100 ? error : `Failed to ${action.presentTense} extension`; + toastService.error({ + title: extensionName, + msg: msg, + traceback: error, + }); console.error(`Error in extensionApiCall for ${extensionName}:`, error); throw error; } @@ -142,13 +149,11 @@ export async function addToAgent( // Check if this is a 428 error and make the message more descriptive if (error.message && error.message.includes('428')) { const enhancedError = new Error( - 'Agent is not initialized. Please initialize the agent first. (428 Precondition Required)' + 'Failed to add extension. Goose Agent was still starting up. Please try again.' ); console.error(`Failed to add extension ${extension.name} to agent: ${enhancedError.message}`); throw enhancedError; } - - console.error(`Failed to add extension ${extension.name} to agent:`, error); throw error; } } diff --git a/ui/desktop/src/components/settings_v2/extensions/extension-manager.ts b/ui/desktop/src/components/settings_v2/extensions/extension-manager.ts index 29ba7e56..2a7730a6 100644 --- a/ui/desktop/src/components/settings_v2/extensions/extension-manager.ts +++ b/ui/desktop/src/components/settings_v2/extensions/extension-manager.ts @@ -176,7 +176,7 @@ export async function toggleExtension({ showEscMessage: false, }); } catch (error) { - console.error('Error adding extension to agent. Will try to toggle back off. Error:', error); + console.error('Error adding extension to agent. Will try to toggle back off.'); try { await toggleExtension({ toggle: 'toggleOff', diff --git a/ui/desktop/src/components/settings_v2/extensions/modal/ExtensionConfigFields.tsx b/ui/desktop/src/components/settings_v2/extensions/modal/ExtensionConfigFields.tsx index 4f9bd7f4..0f814bcf 100644 --- a/ui/desktop/src/components/settings_v2/extensions/modal/ExtensionConfigFields.tsx +++ b/ui/desktop/src/components/settings_v2/extensions/modal/ExtensionConfigFields.tsx @@ -1,5 +1,6 @@ import { Input } from '../../../ui/input'; import React from 'react'; +import { removeShims } from '../utils'; interface ExtensionConfigFieldsProps { type: 'stdio' | 'sse' | 'builtin'; @@ -25,7 +26,7 @@ export default function ExtensionConfigFields({