mirror of
https://github.com/browseros-ai/BrowserOS.git
synced 2026-05-22 05:15:13 +00:00
209 lines
8.1 KiB
TypeScript
209 lines
8.1 KiB
TypeScript
import type { FC } from 'react'
|
|
import { HashRouter, Navigate, Route, Routes, useParams } from 'react-router'
|
|
import { Feature } from '@/lib/browseros/capabilities'
|
|
import { useCapabilities } from '@/lib/browseros/useCapabilities'
|
|
import { NewTab } from '../newtab/index/NewTab'
|
|
import { NewTabChat } from '../newtab/index/NewTabChat'
|
|
import { NewTabLayout } from '../newtab/layout/NewTabLayout'
|
|
import { Personalize } from '../newtab/personalize/Personalize'
|
|
import { OnboardingDemo } from '../onboarding/demo/OnboardingDemo'
|
|
import { FeaturesPage } from '../onboarding/features/Features'
|
|
import { Onboarding } from '../onboarding/index/Onboarding'
|
|
import { StepsLayout } from '../onboarding/steps/StepsLayout'
|
|
import { AclSettingsPage } from './acl-settings/AclSettingsPage'
|
|
import { AdminDashboardPage } from './admin-dashboard/AdminDashboardPage'
|
|
import { AgentCommandConversation } from './agent-command/AgentCommandConversation'
|
|
import { AgentCommandHome } from './agent-command/AgentCommandHome'
|
|
import { AgentCommandLayout } from './agent-command/agent-command-layout'
|
|
import { AgentsPage } from './agents/AgentsPage'
|
|
import { AISettingsPage } from './ai-settings/AISettingsPage'
|
|
import { ConnectMCP } from './connect-mcp/ConnectMCP'
|
|
import { CustomizationPage } from './customization/CustomizationPage'
|
|
import { SurveyPage } from './jtbd-agent/SurveyPage'
|
|
import { AuthLayout } from './layout/AuthLayout'
|
|
import { SettingsSidebarLayout } from './layout/SettingsSidebarLayout'
|
|
import { SidebarLayout } from './layout/SidebarLayout'
|
|
import { LlmHubPage } from './llm-hub/LlmHubPage'
|
|
import { LoginPage } from './login/LoginPage'
|
|
import { LogoutPage } from './login/LogoutPage'
|
|
import { MagicLinkCallback } from './login/MagicLinkCallback'
|
|
import { MCPSettingsPage } from './mcp-settings/MCPSettingsPage'
|
|
import { MemoryPage } from './memory/MemoryPage'
|
|
import { ProfilePage } from './profile/ProfilePage'
|
|
import { ScheduledTasksPage } from './scheduled-tasks/ScheduledTasksPage'
|
|
import { SearchProviderPage } from './search-provider/SearchProviderPage'
|
|
import { SkillsPage } from './skills/SkillsPage'
|
|
import { SoulPage } from './soul/SoulPage'
|
|
import { ToolApprovalsPage } from './tool-approvals/ToolApprovalsPage'
|
|
import { UsagePage } from './usage/UsagePage'
|
|
|
|
function getSurveyParams(): { maxTurns?: number; experimentId?: string } {
|
|
const params = new URLSearchParams(window.location.search)
|
|
const maxTurnsStr = params.get('maxTurns')
|
|
const experimentId = params.get('experimentId') ?? 'default'
|
|
const maxTurns = maxTurnsStr ? Number.parseInt(maxTurnsStr, 10) : 7
|
|
return { maxTurns, experimentId }
|
|
}
|
|
|
|
const OptionsRedirect: FC = () => {
|
|
const params = useParams()
|
|
const path = params['*'] || ''
|
|
|
|
const routeMap: Record<string, string> = {
|
|
ai: '/settings/ai',
|
|
chat: '/settings/chat',
|
|
'connect-mcp': '/connect-apps',
|
|
mcp: '/settings/mcp',
|
|
customization: '/settings/customization',
|
|
search: '/settings/search',
|
|
soul: '/home/soul',
|
|
skills: '/home/skills',
|
|
'jtbd-agent': '/settings/survey',
|
|
scheduled: '/scheduled',
|
|
}
|
|
|
|
const newPath = routeMap[path] || '/settings/ai'
|
|
return <Navigate to={newPath} replace />
|
|
}
|
|
|
|
export const App: FC = () => {
|
|
const surveyParams = getSurveyParams()
|
|
const { supports } = useCapabilities()
|
|
const alphaEnabled = supports(Feature.ALPHA_FEATURES_SUPPORT)
|
|
|
|
return (
|
|
<HashRouter>
|
|
<Routes>
|
|
{/* Public auth routes */}
|
|
<Route element={<AuthLayout />}>
|
|
<Route path="login" element={<LoginPage />} />
|
|
<Route path="logout" element={<LogoutPage />} />
|
|
<Route path="profile" element={<ProfilePage />} />
|
|
<Route path="auth/magic-link" element={<MagicLinkCallback />} />
|
|
</Route>
|
|
|
|
{/* Main app with sidebar */}
|
|
<Route element={<SidebarLayout />}>
|
|
{/* Home routes */}
|
|
<Route
|
|
path="home"
|
|
element={<NewTabLayout useChatSessionOnHome={!alphaEnabled} />}
|
|
>
|
|
{alphaEnabled ? (
|
|
<>
|
|
<Route element={<AgentCommandLayout />}>
|
|
<Route index element={<AgentCommandHome />} />
|
|
<Route
|
|
path="agents/:agentId"
|
|
element={<AgentCommandConversation />}
|
|
/>
|
|
</Route>
|
|
<Route path="chat" element={<NewTabChat />} />
|
|
<Route path="personalize" element={<Personalize />} />
|
|
</>
|
|
) : (
|
|
<Route index element={<NewTab />} />
|
|
)}
|
|
<Route path="soul" element={<SoulPage />} />
|
|
<Route path="skills" element={<SkillsPage />} />
|
|
<Route path="memory" element={<MemoryPage />} />
|
|
</Route>
|
|
|
|
{/* Primary nav routes */}
|
|
<Route path="connect-apps" element={<ConnectMCP />} />
|
|
<Route path="scheduled" element={<ScheduledTasksPage />} />
|
|
{alphaEnabled ? (
|
|
<>
|
|
<Route path="agents" element={<AgentsPage />} />
|
|
<Route element={<AgentCommandLayout />}>
|
|
<Route
|
|
path="agents/:agentId"
|
|
element={
|
|
<AgentCommandConversation
|
|
variant="page"
|
|
backPath="/agents"
|
|
agentPathPrefix="/agents"
|
|
createAgentPath="/agents"
|
|
/>
|
|
}
|
|
/>
|
|
</Route>
|
|
</>
|
|
) : null}
|
|
{alphaEnabled ? (
|
|
<Route path="admin" element={<AdminDashboardPage />} />
|
|
) : null}
|
|
</Route>
|
|
|
|
{/* Settings with dedicated sidebar */}
|
|
<Route element={<SettingsSidebarLayout />}>
|
|
<Route path="settings">
|
|
<Route index element={<Navigate to="/settings/ai" replace />} />
|
|
<Route path="ai" element={<AISettingsPage key="ai" />} />
|
|
<Route path="chat" element={<LlmHubPage />} />
|
|
<Route path="mcp" element={<MCPSettingsPage />} />
|
|
<Route path="customization" element={<CustomizationPage />} />
|
|
<Route path="search" element={<SearchProviderPage />} />
|
|
<Route path="survey" element={<SurveyPage {...surveyParams} />} />
|
|
<Route path="usage" element={<UsagePage />} />
|
|
{alphaEnabled ? (
|
|
<>
|
|
<Route path="acl" element={<AclSettingsPage />} />
|
|
<Route path="approvals" element={<ToolApprovalsPage />} />
|
|
</>
|
|
) : null}
|
|
</Route>
|
|
</Route>
|
|
|
|
{/* Onboarding routes - no sidebar, no auth required */}
|
|
<Route path="onboarding">
|
|
<Route index element={<Onboarding />} />
|
|
<Route path="steps/:stepId" element={<StepsLayout />} />
|
|
<Route path="demo" element={<OnboardingDemo />} />
|
|
<Route path="features" element={<FeaturesPage />} />
|
|
</Route>
|
|
|
|
{/* Backward compatibility redirects */}
|
|
<Route path="/" element={<Navigate to="/home" replace />} />
|
|
<Route
|
|
path="/personalize"
|
|
element={
|
|
<Navigate
|
|
to={alphaEnabled ? '/home/personalize' : '/home'}
|
|
replace
|
|
/>
|
|
}
|
|
/>
|
|
<Route
|
|
path="/settings/connect-mcp"
|
|
element={<Navigate to="/connect-apps" replace />}
|
|
/>
|
|
<Route
|
|
path="/settings/soul"
|
|
element={<Navigate to="/home/soul" replace />}
|
|
/>
|
|
<Route
|
|
path="/settings/skills"
|
|
element={<Navigate to="/home/skills" replace />}
|
|
/>
|
|
<Route
|
|
path="/audit"
|
|
element={<Navigate to={alphaEnabled ? '/admin' : '/home'} replace />}
|
|
/>
|
|
<Route
|
|
path="/observability"
|
|
element={<Navigate to={alphaEnabled ? '/admin' : '/home'} replace />}
|
|
/>
|
|
<Route
|
|
path="/executions"
|
|
element={<Navigate to={alphaEnabled ? '/admin' : '/home'} replace />}
|
|
/>
|
|
<Route path="/options/*" element={<OptionsRedirect />} />
|
|
|
|
{/* Fallback to home */}
|
|
<Route path="*" element={<Navigate to="/home" replace />} />
|
|
</Routes>
|
|
</HashRouter>
|
|
)
|
|
}
|