From b8be4f8f12bf7582d91e275ea857d55f025265d8 Mon Sep 17 00:00:00 2001 From: marko-kraemer Date: Tue, 12 Aug 2025 16:23:02 -0700 Subject: [PATCH] merge --- .../agents/config/[agentId]/page.tsx | 43 +++++++++++++++++++ .../agents/agent-version-switcher.tsx | 1 - .../components/thread/thread-site-header.tsx | 38 +++++----------- 3 files changed, 53 insertions(+), 29 deletions(-) diff --git a/frontend/src/app/(dashboard)/agents/config/[agentId]/page.tsx b/frontend/src/app/(dashboard)/agents/config/[agentId]/page.tsx index a9cf0352..72a0c207 100644 --- a/frontend/src/app/(dashboard)/agents/config/[agentId]/page.tsx +++ b/frontend/src/app/(dashboard)/agents/config/[agentId]/page.tsx @@ -201,6 +201,49 @@ export default function AgentConfigurationPage() { setFormData(prev => ({ ...prev, [field]: value })); }, [isViewingOldVersion]); + // Dedicated name save handler that saves immediately + const handleNameSave = useCallback(async (name: string) => { + if (!agent || isViewingOldVersion || isSaving) { + return; + } + + const isSunaAgent = agent?.metadata?.is_suna_default || false; + const restrictions = agent?.metadata?.restrictions || {}; + + if (isSunaAgent && restrictions.name_editable === false) { + toast.error("Name cannot be edited", { + description: "Suna's name is managed centrally and cannot be changed.", + }); + return; + } + + // Update form data immediately + setFormData(prev => ({ ...prev, name })); + + setIsSaving(true); + + try { + await updateAgentMutation.mutateAsync({ + agentId, + name, + description: formData.description, + is_default: formData.is_default, + profile_image_url: formData.profile_image_url || undefined, + }); + + // Update original data to reflect the save + setOriginalData(prev => ({ ...prev, name })); + toast.success('Agent name saved'); + } catch (error) { + console.error('❌ Name save error:', error); + toast.error('Failed to save agent name'); + // Revert the name change on error + setFormData(prev => ({ ...prev, name: formData.name })); + } finally { + setIsSaving(false); + } + }, [isViewingOldVersion, formData, agent, agentId, updateAgentMutation, isSaving]); + const handleSystemPromptSave = useCallback(async (value: string) => { if (!agent || isViewingOldVersion || isSaving) { return; diff --git a/frontend/src/components/agents/agent-version-switcher.tsx b/frontend/src/components/agents/agent-version-switcher.tsx index 47515ad8..79d68e79 100644 --- a/frontend/src/components/agents/agent-version-switcher.tsx +++ b/frontend/src/components/agents/agent-version-switcher.tsx @@ -112,7 +112,6 @@ export function AgentVersionSwitcher({ return (
- Loading versions...
); } diff --git a/frontend/src/components/thread/thread-site-header.tsx b/frontend/src/components/thread/thread-site-header.tsx index 45d15e4c..af1b97fa 100644 --- a/frontend/src/components/thread/thread-site-header.tsx +++ b/frontend/src/components/thread/thread-site-header.tsx @@ -1,7 +1,7 @@ 'use client'; import { Button } from "@/components/ui/button" -import { FolderOpen, Link, PanelRightOpen, Check, X, Menu, Share2, Book } from "lucide-react" +import { FolderOpen, Link, PanelRightOpen, Menu, Share2, Book } from "lucide-react" import { usePathname } from "next/navigation" import { toast } from "sonner" import { @@ -152,33 +152,15 @@ export function SiteHeader({
{isEditing ? ( -
- setEditName(e.target.value)} - onKeyDown={handleKeyDown} - onBlur={saveNewName} - className="h-8 w-auto min-w-[180px] text-base font-medium" - maxLength={50} - /> - - -
+ setEditName(e.target.value)} + onKeyDown={handleKeyDown} + onBlur={saveNewName} + className="h-8 w-auto min-w-[180px] text-base font-medium" + maxLength={50} + /> ) : !projectName || projectName === 'Project' ? ( ) : (