// ========================================================================== // App — top-level shell, store provider, route dispatcher. // ========================================================================== const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "palette": "inku" }/*EDITMODE-END*/; function AppInner() { const { route } = useStore(); // Briefings is a full-page management surface (Contra-style). Two // sub-routes: list at /briefings, detail page at /briefings/. // The chat sidebar is suppressed across both. if (route.name === 'briefings') { return (
{route.briefingId ? : }
); } const main = route.name === 'agents' ? : ; return (
{main}
); } function App() { const [tweaks, setTweak] = useTweaks(TWEAK_DEFAULTS); React.useEffect(() => { // Stored "sage" from before rebrand maps to the new "inku" default. const palette = tweaks.palette === 'sage' ? 'inku' : (tweaks.palette || 'inku'); document.documentElement.setAttribute('data-palette', palette); }, [tweaks.palette]); return (
setTweak('palette', v)} options={[ { value: 'inku', label: 'Inku' }, { value: 'neutral', label: 'Neutral' }, { value: 'inky', label: 'Inky' }, ]} /> { if (confirm('Clear all local threads, messages, artifacts, and agents?')) { Object.keys(localStorage).filter(k => k.startsWith('inku.')).forEach(k => localStorage.removeItem(k)); window.location.hash = '#/'; window.location.reload(); } }} /> ); } ReactDOM.createRoot(document.getElementById('root')).render();