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);