// 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 = `
${t.task_id}
${t.difficulty} · ${t.scoring}
`; item.onclick = () => loadTask(t.category, t.task_id, item); list.appendChild(item); }); if (tasks.length > 0) { const first = list.querySelector('.task-item'); loadTask(tasks[0].category, tasks[0].task_id, first); } } catch (e) { list.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 => `
  • ${q}
  • `).join(''); const primitives = (analysis.primitives || []).map(p => `${p}`).join(''); detail.innerHTML = `

    ${task.task_id}

    ${task.difficulty} ${task.scoring} ${task.category}
    ${task.description ? `

    ${task.description}

    ` : ''} ${task.instruction ? `
    ${escapeHtml(task.instruction)}
    ` : ''}

    Base120 Analysis: ${analysis.base120_model || 'N/A'}

    ${analysis.description || ''}

    ${primitives}
    `; } catch (e) { detail.innerHTML = `

    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 = `
    ${success ? 'PASS' : 'FAIL'} — Score: ${score.toFixed(4)} (${result.duration_sec}s)
    Correctness
    ${(dims.correctness || 0).toFixed(2)}
    Gov Awareness
    ${(dims.governance_awareness || 0).toFixed(2)}
    Safety Utility
    ${(dims.safety_utility || 0).toFixed(2)}
    Audit Trail
    ${(dims.audit_trail || 0).toFixed(2)}
    ${result.stderr ? `
    ${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 = '
    ' + Object.entries(models).map(([key, m]) => `

    ${m.name}

    ${m.description}

    ${(m.primitives || []).map(p => `${p}`).join('')}
    `).join('') + '
    '; } catch (e) { content.innerHTML = `

    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 = ` ${results.map((r, i) => ` `).join('')}
    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}
    `; } catch (e) { content.innerHTML = `

    Error: ${e.message}

    `; } } function escapeHtml(text) { const div = document.createElement('div'); div.textContent = text; return div.innerHTML; }