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
This commit is contained in:
Bohdan Triapitsyn
2026-06-16 14:33:08 +03:00
parent 8f1da2f728
commit 3ba93c111e
11 changed files with 34 additions and 12 deletions
@@ -181,19 +181,31 @@ export const AgentsSidebar: React.FC<AgentsSidebarProps> = ({ 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);
@@ -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',
@@ -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",
@@ -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 lagent 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à',
@@ -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': '같은 이름의 에이전트가 이미 존재합니다',
@@ -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',
@@ -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",
@@ -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": "Агент із такою назвою вже існує",
@@ -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': '已存在同名智能体',
@@ -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',
+3 -2
View File
@@ -493,8 +493,9 @@ export const useAgentsStore = create<AgentsStore>()(
set({ selectedAgentName: null });
}
return loaded;
} catch {
return false;
} catch (error) {
console.error('Failed to delete agent:', error);
throw error;
} finally {
if (!requiresReload) {
finishConfigUpdate();