const state = { data: null, packet: null }; const byId = (id) => document.getElementById(id); const esc = (value) => String(value ?? "").replace(/[&<>'"]/g, (char) => ({"&":"&","<":"<",">":">","'":"'",'"':"""}[char])); const percent = (part, total) => total ? `${Math.round(part * 100 / total)}%` : "—"; async function loadData() { const response = await fetch("benchmark.json"); if (!response.ok) throw new Error(`data request failed (${response.status})`); return response.json(); } function renderResults(runs) { byId("results-body").innerHTML = runs.map((run) => ` ${esc(run.domain_label)} ${run.packet_count} ${run.trajectory_passed}/${run.packet_count} ${percent(run.trajectory_passed, run.packet_count)} ${run.independent_end_task_passed}/${run.packet_count} ${percent(run.independent_end_task_passed, run.packet_count)} ${run.primary_routing_decisions} ${run.suppressed_by_budget} `).join(""); } function unique(values) { return [...new Set(values.filter(Boolean))].sort(); } function fillSelect(select, values, label) { select.innerHTML = `` + values.map((value) => ``).join(""); } function availablePackets() { const domain = byId("domain-filter").value; return state.data.packets.filter((packet) => !domain || packet.domain === domain); } function updatePacketOptions(keepSelection = true) { const select = byId("packet-filter"); const previous = keepSelection ? select.value : ""; const packets = availablePackets(); select.innerHTML = packets.map((packet) => ``).join(""); if (packets.some((packet) => packet.packet_id === previous)) select.value = previous; renderPacket(); } function renderPacket() { const id = byId("packet-filter").value; state.packet = state.data.packets.find((packet) => packet.packet_id === id) || availablePackets()[0]; if (!state.packet) return; byId("packet-filter").value = state.packet.packet_id; const p = state.packet; byId("packet-summary").innerHTML = `

${esc(p.packet_id)}

${esc(p.domain_label)}${esc(p.executor_model)}${p.primary_routing_decisions} primary decisions
trajectory ${p.trajectory_passed ? "pass" : "fail"}trusted ${p.independent_end_task_passed ? "pass" : "fail"}

${esc(p.task)}

`; renderSteps(); } function renderSteps() { const role = byId("role-filter").value; const status = byId("status-filter").value; const rows = state.packet.steps.filter((step) => (!role || step.role === role) && (!status || step.event_status === status)); byId("trajectory").innerHTML = rows.length ? rows.map((step) => `
#${String(step.index).padStart(2,"0")}
${esc(step.role)}budget before: ${esc(step.budget_before)} · confidence: ${step.confidence == null ? "—" : Number(step.confidence).toFixed(2)}${esc(step.event_status)} · ${esc(step.semantic_delta)}
state before → after${esc(step.state_before || "not executed")}→ ${esc(step.state_after || "not executed")}
top choices
${step.top_choices.map((choice) => `${esc(choice.role)} ${(choice.probability * 100).toFixed(0)}%`).join(" · ") || "not recorded"}
`).join("") : `

No step matches the active role and status filters.

`; } async function init() { try { state.data = await loadData(); renderResults(state.data.runs); const domains = state.data.runs.map((run) => run.domain); byId("domain-filter").innerHTML += domains.map((domain) => ``).join(""); fillSelect(byId("role-filter"), unique(state.data.packets.flatMap((packet) => packet.steps.map((step) => step.role))), "All roles"); fillSelect(byId("status-filter"), unique(state.data.packets.flatMap((packet) => packet.steps.map((step) => step.event_status))), "All statuses"); updatePacketOptions(false); byId("domain-filter").addEventListener("change", () => updatePacketOptions(false)); byId("packet-filter").addEventListener("change", renderPacket); byId("role-filter").addEventListener("change", renderSteps); byId("status-filter").addEventListener("change", renderSteps); } catch (error) { byId("results-body").innerHTML = `Could not load explorer data: ${esc(error.message)}`; byId("trajectory").innerHTML = `

Explorer data is unavailable.

`; } } document.addEventListener("DOMContentLoaded", init);