diff --git a/agentex-ui/app/page.tsx b/agentex-ui/app/page.tsx index b13114d1..b4d991ec 100644 --- a/agentex-ui/app/page.tsx +++ b/agentex-ui/app/page.tsx @@ -1,6 +1,7 @@ import { connection } from 'next/server'; import { AgentexUIRoot } from '@/components/agentex-ui-root'; +import { AgentexProvider } from '@/components/providers'; export default async function RootPage() { await connection(); @@ -19,9 +20,11 @@ export default async function RootPage() { } return ( - + > + + ); } diff --git a/agentex-ui/components/agentex-ui-root.tsx b/agentex-ui/components/agentex-ui-root.tsx index 2a8a52af..3466f2de 100644 --- a/agentex-ui/components/agentex-ui-root.tsx +++ b/agentex-ui/components/agentex-ui-root.tsx @@ -5,36 +5,41 @@ import { useCallback, useEffect, useState } from 'react'; import { ToastContainer } from 'react-toastify'; import { PrimaryContent } from '@/components/primary-content/primary-content'; -import { AgentexProvider } from '@/components/providers'; +import { useAgentexClient } from '@/components/providers'; import { TaskSidebar } from '@/components/task-sidebar/task-sidebar'; import { TracesSidebar } from '@/components/traces-sidebar/traces-sidebar'; +import { useAgents } from '@/hooks/use-agents'; import { useLocalStorageState } from '@/hooks/use-local-storage-state'; import { SearchParamKey, useSafeSearchParams, } from '@/hooks/use-safe-search-params'; -type AgentexUIRootProps = { - sgpAppURL: string; - agentexAPIBaseURL: string; -}; - -export function AgentexUIRoot({ - sgpAppURL, - agentexAPIBaseURL, -}: AgentexUIRootProps) { +export function AgentexUIRoot() { const { agentName, taskID, updateParams } = useSafeSearchParams(); const [isTracesSidebarOpen, setIsTracesSidebarOpen] = useState(false); + const { agentexClient } = useAgentexClient(); + const { data: agents = [], isLoading } = useAgents(agentexClient); const [localAgentName, setLocalAgentName] = useLocalStorageState< string | undefined >('lastSelectedAgent', undefined); useEffect(() => { + if (isLoading) return; + + const selectedAgent = agents.find(agent => agent.name === agentName); + const isAgentValid = selectedAgent && selectedAgent.status === 'Ready'; + + if (!isAgentValid) { + updateParams({ [SearchParamKey.AGENT_NAME]: null }); + setLocalAgentName(undefined); + } + if (!agentName && localAgentName) { updateParams({ [SearchParamKey.AGENT_NAME]: localAgentName }); } // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + }, [isLoading]); const handleSelectTask = useCallback( (taskId: string | null) => { @@ -70,21 +75,16 @@ export function AgentexUIRoot({ return ( <> - -
- - - setIsTracesSidebarOpen(!isTracesSidebarOpen) - } - /> - -
-
+
+ + + setIsTracesSidebarOpen(!isTracesSidebarOpen) + } + /> + +
);