Repository Public
1import type { Metadata, Viewport } from 'next';2import { GeistSans } from 'geist/font/sans';3import '@fontsource/jetbrains-mono/400.css';4import '@fontsource/jetbrains-mono/500.css';5import '@fontsource/jetbrains-mono/700.css';6import './globals.css';7import { Providers } from '@/components/providers';89export const metadata: Metadata = {10 title: 'Agent OS',11 description: 'Agent OS — mission console for autonomous agents',12 manifest: '/manifest.webmanifest',13 robots: { index: false, follow: false },14 icons: {15 icon: [16 { url: '/icons/icon.svg', type: 'image/svg+xml' },17 { url: '/icons/icon-192.png', sizes: '192x192', type: 'image/png' },18 ],19 apple: [{ url: '/icons/apple-touch-icon.png', sizes: '180x180' }],20 },21 appleWebApp: { capable: true, title: 'Agent OS', statusBarStyle: 'black-translucent' },22 formatDetection: { telephone: false, email: false, address: false },23 other: { 'mobile-web-app-capable': 'yes' },24};2526export const viewport: Viewport = {27 width: 'device-width',28 initialScale: 1,29 viewportFit: 'cover',30 interactiveWidget: 'resizes-content',31 themeColor: '#F7F6F3', // light default; /theme-init.js and the theme store update it32 colorScheme: 'light dark',33};3435export default function RootLayout({ children }: { children: React.ReactNode }) {36 return (37 <html lang="en" className={GeistSans.variable} data-theme="light" suppressHydrationWarning>38 <head>39 {/* Blocking, same-origin: sets data-theme before first paint (the CSP forbids inline scripts). */}40 {/* eslint-disable-next-line @next/next/no-sync-scripts */}41 <script src="/theme-init.js" />42 </head>43 <body>44 <Providers>{children}</Providers>45 </body>46 </html>47 );48}49