/** * Router (react-router v7 declarative style): /login is public; all other routes go through * the RequireAuth guard (redirects to /login when not authenticated) and are wrapped in * ProjectProvider + AppLayout. */ import { BrowserRouter, Navigate, Route, Routes } from "react-router"; import { useAuth } from "./state/auth"; import { ProjectProvider } from "./state/project"; import { SessionsProvider } from "./state/sessions"; import { AppLayout } from "./components/layout/app-layout"; import { LoginPage } from "./pages/login"; import { ChatPage } from "./features/chat/chat-page"; import { AgentsPage } from "./features/agents/agents-page"; import { AgentSettingsPage } from "./features/agents/agent-settings-page"; import { SkillsPage } from "./features/skills/skills-page"; import { ModelsPage } from "./features/models/models-page"; import { UsagePage } from "./features/usage/usage-page"; import { TracesPage } from "./features/traces/traces-page"; import { BenchmarkPage } from "./features/benchmark/benchmark-page"; import { AdminUsersPage } from "./features/admin/admin-users-page"; /** Route guard: shows blank while initializing, redirects to /login when not authenticated. */ function RequireAuth() { const { user } = useAuth(); if (user === undefined) return null; // GET /api/me is still initializing if (user === null) return ; return ( ); } /** When already logged in, visiting /login redirects straight to the chat page. */ function LoginRoute() { const { user } = useAuth(); if (user) return ; return ; } export function AppRouter() { return ( } /> }> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> } /> ); }