diff --git a/frontend/src/app/workspace/agents/new/page.tsx b/frontend/src/app/workspace/agents/new/page.tsx index 33f6de213..8b24e8494 100644 --- a/frontend/src/app/workspace/agents/new/page.tsx +++ b/frontend/src/app/workspace/agents/new/page.tsx @@ -31,7 +31,12 @@ import { ArtifactsProvider } from "@/components/workspace/artifacts"; import { MessageList } from "@/components/workspace/messages"; import { ThreadContext } from "@/components/workspace/messages/context"; import type { Agent } from "@/core/agents"; -import { checkAgentName, getAgent } from "@/core/agents/api"; +import { + AgentNameCheckError, + checkAgentName, + createAgent, + getAgent, +} from "@/core/agents/api"; import { useI18n } from "@/core/i18n/hooks"; import { useThreadStream } from "@/core/threads/hooks"; import { uuid } from "@/core/utils/uuid"; @@ -65,6 +70,20 @@ async function getAgentWithRetry(agentName: string) { return null; } +function getCreateAgentErrorMessage( + error: unknown, + networkErrorMessage: string, + fallbackMessage: string, +) { + if (error instanceof TypeError && error.message === "Failed to fetch") { + return networkErrorMessage; + } + if (error instanceof Error && error.message) { + return error.message; + } + return fallbackMessage; +} + export default function NewAgentPage() { const { t } = useI18n(); const router = useRouter(); @@ -73,6 +92,7 @@ export default function NewAgentPage() { const [nameInput, setNameInput] = useState(""); const [nameError, setNameError] = useState(""); const [isCheckingName, setIsCheckingName] = useState(false); + const [isCreatingAgent, setIsCreatingAgent] = useState(false); const [agentName, setAgentName] = useState(""); const [agent, setAgent] = useState(null); const [showSaveHint, setShowSaveHint] = useState(false); @@ -134,7 +154,10 @@ export default function NewAgentPage() { return; } } catch (err) { - if (err instanceof TypeError && err.message === "Failed to fetch") { + if ( + err instanceof AgentNameCheckError && + err.reason === "backend_unreachable" + ) { setNameError(t.agents.nameStepNetworkError); } else { setNameError(t.agents.nameStepCheckError); @@ -144,6 +167,26 @@ export default function NewAgentPage() { setIsCheckingName(false); } + setIsCreatingAgent(true); + try { + await createAgent({ + name: trimmed, + description: "", + soul: "", + }); + } catch (err) { + setNameError( + getCreateAgentErrorMessage( + err, + t.agents.nameStepNetworkError, + t.agents.nameStepCheckError, + ), + ); + return; + } finally { + setIsCreatingAgent(false); + } + setAgentName(trimmed); setStep("chat"); await sendMessage(threadId, { @@ -292,7 +335,9 @@ export default function NewAgentPage() {