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 = `
${['opencode', 'hermes', 'agy'].map(a => `
`).join('')}
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', `
âš WarningThis 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');
}
}