diff --git a/ui/src/App.tsx b/ui/src/App.tsx index 66ff5a40..4a823ae4 100644 --- a/ui/src/App.tsx +++ b/ui/src/App.tsx @@ -35,6 +35,7 @@ const SettingsPage = lazy(() => ); const HealthPage = lazy(() => import('@/pages/health').then((m) => ({ default: m.HealthPage }))); const SharedPage = lazy(() => import('@/pages/shared').then((m) => ({ default: m.SharedPage }))); +const UpdatesPage = lazy(() => import('@/pages/updates').then((m) => ({ default: m.UpdatesPage }))); // Loading fallback for lazy components function PageLoader() { @@ -68,6 +69,14 @@ export default function App() { } /> + }> + + + } + /> + + + {latest.title} + + {formatCatalogDate(latest.publishedAt)} + + + +

{latest.summary}

+ +
+ + Open Updates Center + + + + {!compact && primaryCommand && ( + + {primaryCommand} + + )} +
+
+ + ); +} diff --git a/ui/src/pages/api.tsx b/ui/src/pages/api.tsx index 1d56ac11..dc09dfbb 100644 --- a/ui/src/pages/api.tsx +++ b/ui/src/pages/api.tsx @@ -23,6 +23,7 @@ import { ProfileCreateDialog } from '@/components/profiles/profile-create-dialog import { OpenRouterBanner } from '@/components/profiles/openrouter-banner'; import { OpenRouterQuickStart } from '@/components/profiles/openrouter-quick-start'; import { OpenRouterPromoCard } from '@/components/profiles/openrouter-promo-card'; +import { UpdatesSpotlight } from '@/components/updates/updates-spotlight'; import { useProfiles, useDeleteProfile } from '@/hooks/use-profiles'; import { useOpenRouterModels } from '@/hooks/use-openrouter-models'; import { ConfirmDialog } from '@/components/shared/confirm-dialog'; @@ -96,6 +97,10 @@ export function ApiPage() { {/* OpenRouter Announcement Banner */} setCreateDialogOpen(true)} /> +
+ +
+ {/* Main Content */}
{/* Left Panel - Profiles List */} diff --git a/ui/src/pages/cliproxy.tsx b/ui/src/pages/cliproxy.tsx index e75d645c..d79b3c76 100644 --- a/ui/src/pages/cliproxy.tsx +++ b/ui/src/pages/cliproxy.tsx @@ -17,6 +17,7 @@ import { AccountSafetyWarningCard } from '@/components/account/account-safety-wa import { ProviderEditor } from '@/components/cliproxy/provider-editor'; import { ProviderLogo } from '@/components/cliproxy/provider-logo'; import { ProxyStatusWidget } from '@/components/monitoring/proxy-status-widget'; +import { UpdatesSpotlight } from '@/components/updates/updates-spotlight'; import { useCliproxy, useCliproxyAuth, @@ -397,6 +398,7 @@ export function CliproxyPage() { {/* Right Panel */}
+ {showAccountSafetyWarning && } {selectedVariantData && parentAuthForVariant ? ( diff --git a/ui/src/pages/home.tsx b/ui/src/pages/home.tsx index 2b192021..85a1cc19 100644 --- a/ui/src/pages/home.tsx +++ b/ui/src/pages/home.tsx @@ -7,6 +7,7 @@ import { Skeleton } from '@/components/ui/skeleton'; import { Key, Zap, Users, Activity, AlertTriangle } from 'lucide-react'; import { useOverview } from '@/hooks/use-overview'; import { useSharedSummary } from '@/hooks/use-shared'; +import { UpdatesSpotlight } from '@/components/updates/updates-spotlight'; import { cn } from '@/lib/utils'; import type { LucideIcon } from 'lucide-react'; @@ -165,6 +166,8 @@ export function HomePage() {
+ + {/* Configuration Warning */} {shared?.symlinkStatus && !shared.symlinkStatus.valid && ( diff --git a/ui/src/pages/index.tsx b/ui/src/pages/index.tsx index 03ba32b3..dda9ae12 100644 --- a/ui/src/pages/index.tsx +++ b/ui/src/pages/index.tsx @@ -15,3 +15,5 @@ export { SharedPage } from './shared'; export { AnalyticsPage } from './analytics'; export { CursorPage } from './cursor'; + +export { UpdatesPage } from './updates';