From 3ba93c111ecdd06e84abbd55f09e60b826ccc6fa Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Tue, 16 Jun 2026 14:33:08 +0300 Subject: [PATCH] fix: show clear toast when agent definition is missing Surface missing agent definitions during delete Avoid hiding delete errors behind generic failures Add localized toast copy --- .../sections/agents/AgentsSidebar.tsx | 32 +++++++++++++------ .../ui/src/lib/i18n/messages/en.settings.ts | 1 + .../ui/src/lib/i18n/messages/es.settings.ts | 1 + .../ui/src/lib/i18n/messages/fr.settings.ts | 1 + .../ui/src/lib/i18n/messages/ko.settings.ts | 1 + .../ui/src/lib/i18n/messages/pl.settings.ts | 1 + .../src/lib/i18n/messages/pt-BR.settings.ts | 1 + .../ui/src/lib/i18n/messages/uk.settings.ts | 1 + .../src/lib/i18n/messages/zh-CN.settings.ts | 1 + .../src/lib/i18n/messages/zh-TW.settings.ts | 1 + packages/ui/src/stores/useAgentsStore.ts | 5 +-- 11 files changed, 34 insertions(+), 12 deletions(-) diff --git a/packages/ui/src/components/sections/agents/AgentsSidebar.tsx b/packages/ui/src/components/sections/agents/AgentsSidebar.tsx index c8ef2172..5d5cec20 100644 --- a/packages/ui/src/components/sections/agents/AgentsSidebar.tsx +++ b/packages/ui/src/components/sections/agents/AgentsSidebar.tsx @@ -181,19 +181,31 @@ export const AgentsSidebar: React.FC = ({ onItemSelect }) => } setIsConfirmActionPending(true); - const success = await deleteAgent(confirmActionAgent.name, (confirmActionAgent as Agent & { scope?: AgentScope }).scope); + try { + const success = await deleteAgent(confirmActionAgent.name, (confirmActionAgent as Agent & { scope?: AgentScope }).scope); - if (success) { - if (confirmActionType === 'delete') { - toast.success(t('settings.agents.sidebar.toast.agentDeleted', { name: confirmActionAgent.name })); + if (success) { + if (confirmActionType === 'delete') { + toast.success(t('settings.agents.sidebar.toast.agentDeleted', { name: confirmActionAgent.name })); + } else { + toast.success(t('settings.agents.sidebar.toast.agentReset', { name: confirmActionAgent.name })); + } + closeConfirmActionDialog(); + } else if (confirmActionType === 'delete') { + toast.error(t('settings.agents.sidebar.toast.deleteFailed')); } else { - toast.success(t('settings.agents.sidebar.toast.agentReset', { name: confirmActionAgent.name })); + toast.error(t('settings.agents.sidebar.toast.resetFailed')); + } + } catch (error) { + const message = error instanceof Error ? error.message : ''; + const definitionMissing = /built-in|not deletable|not found/i.test(message); + if (confirmActionType === 'delete') { + toast.error(definitionMissing + ? t('settings.agents.sidebar.toast.definitionNotFound') + : t('settings.agents.sidebar.toast.deleteFailed')); + } else { + toast.error(t('settings.agents.sidebar.toast.resetFailed')); } - closeConfirmActionDialog(); - } else if (confirmActionType === 'delete') { - toast.error(t('settings.agents.sidebar.toast.deleteFailed')); - } else { - toast.error(t('settings.agents.sidebar.toast.resetFailed')); } setIsConfirmActionPending(false); diff --git a/packages/ui/src/lib/i18n/messages/en.settings.ts b/packages/ui/src/lib/i18n/messages/en.settings.ts index 1050be64..1d921c3f 100644 --- a/packages/ui/src/lib/i18n/messages/en.settings.ts +++ b/packages/ui/src/lib/i18n/messages/en.settings.ts @@ -392,6 +392,7 @@ export const settingsDict = { 'settings.agents.sidebar.toast.agentDeleted': 'Agent "{name}" deleted successfully', 'settings.agents.sidebar.toast.agentReset': 'Agent "{name}" reset to default', 'settings.agents.sidebar.toast.deleteFailed': 'Failed to delete agent', + 'settings.agents.sidebar.toast.definitionNotFound': 'Agent definition not found. Nothing was changed.', 'settings.agents.sidebar.toast.resetFailed': 'Failed to reset agent', 'settings.agents.sidebar.toast.agentNameRequired': 'Agent name is required', 'settings.agents.sidebar.toast.agentExists': 'An agent with this name already exists', diff --git a/packages/ui/src/lib/i18n/messages/es.settings.ts b/packages/ui/src/lib/i18n/messages/es.settings.ts index a470a466..2561bc8d 100644 --- a/packages/ui/src/lib/i18n/messages/es.settings.ts +++ b/packages/ui/src/lib/i18n/messages/es.settings.ts @@ -359,6 +359,7 @@ export const settingsDict = { "settings.agents.sidebar.toast.agentDeleted": "Agente \"{name}\" eliminado correctamente", "settings.agents.sidebar.toast.agentReset": "Agente \"{name}\" restablecido a la configuración predeterminada", "settings.agents.sidebar.toast.deleteFailed": "No se pudo eliminar el agente", + "settings.agents.sidebar.toast.definitionNotFound": "No se encontró la definición del agente. No se cambió nada.", "settings.agents.sidebar.toast.resetFailed": "No se pudo restablecer el agente", "settings.agents.sidebar.toast.agentNameRequired": "Se requiere el nombre del agente", "settings.agents.sidebar.toast.agentExists": "Ya existe un agente con este nombre", diff --git a/packages/ui/src/lib/i18n/messages/fr.settings.ts b/packages/ui/src/lib/i18n/messages/fr.settings.ts index 649c73b6..fd0c6429 100644 --- a/packages/ui/src/lib/i18n/messages/fr.settings.ts +++ b/packages/ui/src/lib/i18n/messages/fr.settings.ts @@ -348,6 +348,7 @@ export const settingsDict = { 'settings.agents.sidebar.toast.agentDeleted': 'Agent "{name}" supprimé avec succès', 'settings.agents.sidebar.toast.agentReset': 'Agent "{name}" réinitialisé aux valeurs par défaut', 'settings.agents.sidebar.toast.deleteFailed': 'Échec de la suppression de l\'agent', + 'settings.agents.sidebar.toast.definitionNotFound': 'Définition de l’agent introuvable. Aucune modification effectuée.', 'settings.agents.sidebar.toast.resetFailed': 'Échec de la réinitialisation de l\'agent', 'settings.agents.sidebar.toast.agentNameRequired': 'Le nom de l\'agent est requis', 'settings.agents.sidebar.toast.agentExists': 'Un agent portant ce nom existe déjà', diff --git a/packages/ui/src/lib/i18n/messages/ko.settings.ts b/packages/ui/src/lib/i18n/messages/ko.settings.ts index 15254e79..a59b6b70 100644 --- a/packages/ui/src/lib/i18n/messages/ko.settings.ts +++ b/packages/ui/src/lib/i18n/messages/ko.settings.ts @@ -359,6 +359,7 @@ export const settingsDict = { 'settings.agents.sidebar.toast.agentDeleted': '"{name}" 에이전트를 삭제했습니다', 'settings.agents.sidebar.toast.agentReset': '"{name}" 에이전트를 기본값으로 초기화했습니다', 'settings.agents.sidebar.toast.deleteFailed': '에이전트를 삭제하지 못했습니다', + 'settings.agents.sidebar.toast.definitionNotFound': '에이전트 정의를 찾을 수 없습니다. 변경된 내용이 없습니다.', 'settings.agents.sidebar.toast.resetFailed': '에이전트를 초기화하지 못했습니다', 'settings.agents.sidebar.toast.agentNameRequired': '에이전트 이름은 필수입니다', 'settings.agents.sidebar.toast.agentExists': '같은 이름의 에이전트가 이미 존재합니다', diff --git a/packages/ui/src/lib/i18n/messages/pl.settings.ts b/packages/ui/src/lib/i18n/messages/pl.settings.ts index 94b9f62c..3231d945 100644 --- a/packages/ui/src/lib/i18n/messages/pl.settings.ts +++ b/packages/ui/src/lib/i18n/messages/pl.settings.ts @@ -79,6 +79,7 @@ export const settingsDict = { 'settings.agents.sidebar.toast.agentReset': 'Agent "{name}" został zresetowany do domyślnych ustawień', 'settings.agents.sidebar.toast.builtInCannotDelete': 'Wbudowanych agentów nie można usuwać', 'settings.agents.sidebar.toast.deleteFailed': 'Nie udało się usunąć agenta', + 'settings.agents.sidebar.toast.definitionNotFound': 'Nie znaleziono definicji agenta. Nic nie zmieniono.', 'settings.agents.sidebar.toast.removeOldAfterRenameFailed': 'Nie udało się usunąć starego agenta po zmianie nazwy', 'settings.agents.sidebar.toast.renameFailed': 'Nie udało się zmienić nazwy agenta', 'settings.agents.sidebar.toast.resetFailed': 'Nie udało się zresetować agenta', diff --git a/packages/ui/src/lib/i18n/messages/pt-BR.settings.ts b/packages/ui/src/lib/i18n/messages/pt-BR.settings.ts index c4eaf274..13c79e1e 100644 --- a/packages/ui/src/lib/i18n/messages/pt-BR.settings.ts +++ b/packages/ui/src/lib/i18n/messages/pt-BR.settings.ts @@ -359,6 +359,7 @@ export const settingsDict = { "settings.agents.sidebar.toast.agentDeleted": "Agente \"{name}\" excluído com sucesso", "settings.agents.sidebar.toast.agentReset": "Agente \"{name}\" redefinido para as configurações padrão", "settings.agents.sidebar.toast.deleteFailed": "Não foi possível excluir o agente", + "settings.agents.sidebar.toast.definitionNotFound": "Definição do agente não encontrada. Nada foi alterado.", "settings.agents.sidebar.toast.resetFailed": "Não foi possível redefinir o agente", "settings.agents.sidebar.toast.agentNameRequired": "É necessário informar o nome do agente", "settings.agents.sidebar.toast.agentExists": "Já existe um agente com este nome", diff --git a/packages/ui/src/lib/i18n/messages/uk.settings.ts b/packages/ui/src/lib/i18n/messages/uk.settings.ts index 872a30eb..3cbbd432 100644 --- a/packages/ui/src/lib/i18n/messages/uk.settings.ts +++ b/packages/ui/src/lib/i18n/messages/uk.settings.ts @@ -359,6 +359,7 @@ export const settingsDict = { "settings.agents.sidebar.toast.agentDeleted": "Агент \"{name}\" успішно видалено", "settings.agents.sidebar.toast.agentReset": "Агента \"{name}\" скинуто до значень за замовчуванням", "settings.agents.sidebar.toast.deleteFailed": "Не вдалося видалити агента", + "settings.agents.sidebar.toast.definitionNotFound": "Визначення агента не знайдено. Нічого не змінено.", "settings.agents.sidebar.toast.resetFailed": "Не вдалося скинути агента", "settings.agents.sidebar.toast.agentNameRequired": "Потрібно вказати ім’я агента", "settings.agents.sidebar.toast.agentExists": "Агент із такою назвою вже існує", diff --git a/packages/ui/src/lib/i18n/messages/zh-CN.settings.ts b/packages/ui/src/lib/i18n/messages/zh-CN.settings.ts index 8f3252cd..d1d5f3ba 100644 --- a/packages/ui/src/lib/i18n/messages/zh-CN.settings.ts +++ b/packages/ui/src/lib/i18n/messages/zh-CN.settings.ts @@ -359,6 +359,7 @@ export const settingsDict = { 'settings.agents.sidebar.toast.agentDeleted': '智能体“{name}”已删除', 'settings.agents.sidebar.toast.agentReset': '智能体“{name}”已重置为默认值', 'settings.agents.sidebar.toast.deleteFailed': '删除智能体失败', + 'settings.agents.sidebar.toast.definitionNotFound': '未找到智能体定义。未进行任何更改。', 'settings.agents.sidebar.toast.resetFailed': '重置智能体失败', 'settings.agents.sidebar.toast.agentNameRequired': '智能体名称为必填项', 'settings.agents.sidebar.toast.agentExists': '已存在同名智能体', diff --git a/packages/ui/src/lib/i18n/messages/zh-TW.settings.ts b/packages/ui/src/lib/i18n/messages/zh-TW.settings.ts index 93a18f13..a64548ba 100644 --- a/packages/ui/src/lib/i18n/messages/zh-TW.settings.ts +++ b/packages/ui/src/lib/i18n/messages/zh-TW.settings.ts @@ -356,6 +356,7 @@ 'settings.agents.sidebar.toast.agentDeleted': 'Agent「{name}」已刪除', 'settings.agents.sidebar.toast.agentReset': 'Agent「{name}」已重設為預設值', 'settings.agents.sidebar.toast.deleteFailed': '刪除 agent 失敗', + 'settings.agents.sidebar.toast.definitionNotFound': '找不到 agent 定義。未變更任何內容。', 'settings.agents.sidebar.toast.resetFailed': '重設 agent 失敗', 'settings.agents.sidebar.toast.agentNameRequired': 'Agent 名稱為必填項', 'settings.agents.sidebar.toast.agentExists': '已存在同名 agent', diff --git a/packages/ui/src/stores/useAgentsStore.ts b/packages/ui/src/stores/useAgentsStore.ts index d52a5bfb..3e07b409 100644 --- a/packages/ui/src/stores/useAgentsStore.ts +++ b/packages/ui/src/stores/useAgentsStore.ts @@ -493,8 +493,9 @@ export const useAgentsStore = create()( set({ selectedAgentName: null }); } return loaded; - } catch { - return false; + } catch (error) { + console.error('Failed to delete agent:', error); + throw error; } finally { if (!requiresReload) { finishConfigUpdate();