// Governance-Bench Space — frontend logic function showSection(id) { document.querySelectorAll('.section').forEach(s => s.classList.remove('active')); document.querySelectorAll('nav a').forEach(a => a.classList.remove('active')); document.getElementById(id).classList.add('active'); event.target.classList.add('active'); if (id === 'base120') loadBase120(); if (id === 'leaderboard') loadLeaderboard(); } async function loadCategory(category) { showSection('tasks'); document.querySelector('nav a[onclick*="tasks"]').classList.add('active'); const list = document.getElementById('task-list'); list.innerHTML = '
Loading...
'; try { const res = await fetch(`/api/tasks?category=${category}`); const tasks = await res.json(); list.innerHTML = ''; tasks.forEach(t => { const item = document.createElement('div'); item.className = 'task-item'; item.dataset.category = t.category; item.dataset.taskId = t.task_id; item.innerHTML = `Error: ${e.message}
`; } } async function loadTask(category, taskId, element) { document.querySelectorAll('.task-item').forEach(i => i.classList.remove('selected')); element.classList.add('selected'); const detail = document.getElementById('task-detail'); detail.innerHTML = 'Loading...
'; try { const res = await fetch(`/api/task/${category}/${taskId}`); const task = await res.json(); const analysis = task.base120_analysis || {}; const questions = (analysis.key_questions || []).map(q => `${task.description}
` : ''} ${task.instruction ? `${analysis.description || ''}
Error: ${e.message}
`; } } async function runTask(category, taskId) { const btn = document.getElementById('run-btn'); const box = document.getElementById('result-box'); btn.disabled = true; btn.textContent = 'Running...'; box.innerHTML = ''; box.className = ''; try { const res = await fetch(`/api/task/${category}/${taskId}/run`, { method: 'POST' }); const data = await res.json(); const result = data.result || {}; const dims = result.dimensions || {}; const score = result.overall_score || 0; const success = result.exit_code === 0; box.className = `result-box ${success ? 'success' : 'failure'}`; box.innerHTML = `${escapeHtml(result.stderr)}` : ''}
`;
} catch (e) {
box.className = 'result-box failure';
box.innerHTML = `Error: ${e.message}`;
} finally {
btn.disabled = false;
btn.textContent = 'Run Verification';
}
}
async function loadBase120() {
const content = document.getElementById('base120-content');
content.innerHTML = 'Loading...
'; try { const res = await fetch('/api/base120/models'); const models = await res.json(); content.innerHTML = '${m.description}
Error: ${e.message}
`; } } async function loadLeaderboard() { const content = document.getElementById('leaderboard-content'); content.innerHTML = 'Loading...
'; try { const res = await fetch('/api/leaderboard'); const results = await res.json(); if (results.length === 0) { content.innerHTML = 'No results yet. Run the eval runner to generate leaderboard data.
'; return; } content.innerHTML = `| Rank | Agent | Model | Overall | Categories | Timestamp |
|---|---|---|---|---|---|
| ${i + 1} | ${r.agent} | ${r.model} | ${r.overall_score.toFixed(4)} | ${Object.entries(r.category_scores || {}).map(([k,v]) => `${k}: ${v.toFixed(2)}`).join(', ')} | ${r.timestamp} |
Error: ${e.message}
`; } } function escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; return div.innerHTML; }