// CLI Status Component // Displays CLI tool availability status and allows setting default tool // ========== CLI State ========== let cliToolStatus = { gemini: {}, qwen: {}, codex: {} }; let defaultCliTool = 'gemini'; // ========== Initialization ========== function initCliStatus() { // Load CLI status on init loadCliToolStatus(); } // ========== Data Loading ========== async function loadCliToolStatus() { try { const response = await fetch('/api/cli/status'); if (!response.ok) throw new Error('Failed to load CLI status'); const data = await response.json(); cliToolStatus = data; // Update badge updateCliBadge(); return data; } catch (err) { console.error('Failed to load CLI status:', err); return null; } } // ========== Badge Update ========== function updateCliBadge() { const badge = document.getElementById('badgeCliTools'); if (badge) { const available = Object.values(cliToolStatus).filter(t => t.available).length; const total = Object.keys(cliToolStatus).length; badge.textContent = `${available}/${total}`; badge.classList.toggle('text-success', available === total); badge.classList.toggle('text-warning', available > 0 && available < total); badge.classList.toggle('text-destructive', available === 0); } } // ========== Rendering ========== function renderCliStatus() { const container = document.getElementById('cli-status-panel'); if (!container) return; const tools = ['gemini', 'qwen', 'codex']; const toolsHtml = tools.map(tool => { const status = cliToolStatus[tool] || {}; const isAvailable = status.available; const isDefault = defaultCliTool === tool; return `