async function renderSettings() { const content = document.getElementById('pageContent'); content.innerHTML = `
`; try { const settings = await api.getSettings(); const prefs = settings.agent_preferences || {}; const dashboard = settings.dashboard || {}; const limits = settings.free_tier_limits || {}; const apiKeys = settings.api_keys || {}; document.getElementById('settingsForm').innerHTML = `
🤖 Agent Preferences
${['opencode', 'hermes', 'agy'].map(a => `
${a}
`).join('')}
🎨 Dashboard
🔑 API Keys
💰 Free Tier Limits
âš  Danger Zone

Reset all settings to factory defaults.

`; } catch (err) { document.getElementById('settingsForm').innerHTML = `
âš 
${escapeHtml(err.message)}
`; } } function toggleAgent(name) { const cb = document.getElementById(`agent_${name}`); const card = cb.closest('.card'); const dot = card.querySelector('.agent-dot'); dot.className = `agent-dot ${cb.checked ? 'online' : 'offline'}`; } async function saveAllSettings() { try { const settings = { agent_preferences: { opencode: { enabled: document.getElementById('agent_opencode').checked, binary: document.getElementById('bin_opencode').value }, hermes: { enabled: document.getElementById('agent_hermes').checked, binary: document.getElementById('bin_hermes').value }, agy: { enabled: document.getElementById('agent_agy').checked, binary: document.getElementById('bin_agy').value }, }, dashboard: { port: parseInt(document.getElementById('setPort').value) || 8080, host: document.getElementById('setHost').value || '127.0.0.1', dark_mode: document.getElementById('setDarkMode').checked, }, api_keys: { gemini: document.getElementById('keyGemini').value, openrouter: document.getElementById('keyOpenrouter').value, }, free_tier_limits: { gemini_flash: { requests_per_day: parseInt(document.getElementById('limGReqs').value) || 1500, tokens_per_day: parseInt(document.getElementById('limGTokens').value) || 1000000, }, openrouter_free: { requests_per_day: parseInt(document.getElementById('limORReqs').value) || 100, tokens_per_day: parseInt(document.getElementById('limORTokens').value) || 200000, }, }, }; await api.updateSettings(settings); showToast('Settings saved successfully', 'success'); } catch (err) { showToast(`Error: ${err.message}`, 'error'); } } async function resetSettings() { showModal('Reset to Defaults', `
âš 
Warning
This will reset all settings to factory defaults and cannot be undone.
`, ` `); } async function confirmReset() { const defaults = { theme: 'dark', agent_preferences: { opencode: { enabled: true, binary: 'opencode' }, hermes: { enabled: true, binary: 'hermes' }, agy: { enabled: true, binary: 'agy' } }, dashboard: { port: 8080, host: '127.0.0.1', dark_mode: true }, api_keys: { gemini: '', openrouter: '' }, free_tier_limits: { gemini_flash: { requests_per_day: 1500, tokens_per_day: 1000000 }, openrouter_free: { requests_per_day: 100, tokens_per_day: 200000 } }, }; try { await api.updateSettings(defaults); closeModal(); showToast('Settings reset to defaults', 'success'); renderSettings(); } catch (err) { showToast(`Error: ${err.message}`, 'error'); } }