import { useEffect, useState } from "react"; import { Navigate, Outlet, Route, Routes, useLocation, useNavigate } from "react-router-dom"; import { getSession, restoreSession } from "./lib/api"; import Layout from "./components/Layout"; import LoginPage from "./pages/LoginPage"; import OverviewPage from "./pages/OverviewPage"; import GraphPage from "./pages/GraphPage"; import DataPage from "./pages/DataPage"; import ObservationsPage from "./pages/ObservationsPage"; import VectorsPage from "./pages/VectorsPage"; import TasksPage from "./pages/TasksPage"; import IngestPage from "./pages/IngestPage"; import WorkspaceSettingsPage from "./pages/WorkspaceSettingsPage"; import { WorkspaceProvider, useWorkspace } from "./workspaces/WorkspaceProvider"; import { legacySection, workspacePath } from "./workspaces/workspaceRoutes"; function RequireAuth({ children }: { children: React.ReactNode }) { const [loading, setLoading] = useState(!getSession()); useEffect(() => { if (getSession()) { setLoading(false); return; } let mounted = true; restoreSession().catch(() => null).finally(() => { if (mounted) setLoading(false); }); return () => { mounted = false; }; }, []); if (loading) return
Checking session…
; return getSession() ? <>{children} : ; } function WorkspaceState() { const { activeWorkspace, requestedSlug, loading, error, notFound, workspaces, canManageWorkspaces } = useWorkspace(); if (loading) return
Loading workspaces…
; if (notFound) return

Workspace not found

The workspace “{requestedSlug}” is unavailable.

{workspaces.map((item) => {item.display_name})}
; if (activeWorkspace?.archived) return

Workspace archived

This workspace is read-only and cannot execute brain operations.

; if (error) return
{error}
; if (!activeWorkspace) return

No workspace available

{canManageWorkspaces ? "Create your first workspace with the + action." : "Your credentials do not have an accessible workspace."}

; return ; } function LegacyRedirect() { const { workspaces, loading } = useWorkspace(); const location = useLocation(); const navigate = useNavigate(); const session = getSession(); useEffect(() => { if (loading || !workspaces.length) return; const selected = workspaces.find((item) => item.brain_id === session?.brainId) ?? workspaces[0]; navigate(workspacePath(selected.slug, legacySection(location.pathname)), { replace: true }); }, [loading, location.pathname, navigate, session?.brainId, workspaces]); if (!loading && !workspaces.length) return ; return
Selecting workspace…
; } function AuthenticatedRoutes() { return ; } export default function App() { return ( } /> }> }> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); }