'use client'; import { useState } from 'react'; import Link from 'next/link'; import { usePathname } from 'next/navigation'; import { Brain, Activity, ListTodo, GitBranch, Database, Settings, ChevronLeft, ChevronRight, Rocket, Github, X, Menu, } from 'lucide-react'; const NAV_ITEMS = [ { href: '/', icon: Brain, label: 'Agent', desc: 'Run AI tasks' }, { href: '/health', icon: Activity, label: 'Health', desc: 'System status' }, { href: '/queue', icon: ListTodo, label: 'Queue', desc: 'Job queue' }, { href: '/memory', icon: Database, label: 'Memory', desc: 'Episodic memory' }, { href: '/workspace', icon: GitBranch, label: 'Workspace', desc: 'Projects' }, ]; interface AppShellProps { children: React.ReactNode; } export default function AppShell({ children }: AppShellProps) { const pathname = usePathname(); const [collapsed, setCollapsed] = useState(false); const [mobileOpen, setMobileOpen] = useState(false); return (
{/* ── Mobile overlay ── */} {mobileOpen && (
setMobileOpen(false)} /> )} {/* ── Left Sidebar ── */} {/* ── Main content area ── */}
{/* Mobile top bar */}
OpenHands
Phase 4
{/* Page content */}
{children}
); }