let _currentPanel = 'chat'; let _skillsData = null; // cached skills list async function switchPanel(name) { _currentPanel = name; // Update nav tabs document.querySelectorAll('.nav-tab').forEach(t => t.classList.toggle('active', t.dataset.panel === name)); // Update panel views document.querySelectorAll('.panel-view').forEach(p => p.classList.remove('active')); const panelEl = $('panel' + name.charAt(0).toUpperCase() + name.slice(1)); if (panelEl) panelEl.classList.add('active'); // Lazy-load panel data if (name === 'tasks') await loadCrons(); if (name === 'skills') await loadSkills(); if (name === 'memory') await loadMemory(); if (name === 'workspaces') await loadWorkspacesPanel(); if (name === 'profiles') await loadProfilesPanel(); if (name === 'todos') loadTodos(); } // ── Cron panel ── async function loadCrons() { const box = $('cronList'); try { const data = await api('/api/crons'); if (!data.jobs || !data.jobs.length) { box.innerHTML = `