Every task in Xiaomi's MiMo-V2.6 RL release. Open one to see exactly what the agent gets and how it is graded, then run a rollout with a model of your choice.
${icon("chevronRight", 15, "chev")}Area is the number of environments. Click a block to filter.
${icon("search", 16)}
/
${emptyState("search", "No environments match", "Try fewer filters or a different word.", ``)}
`;
$("#q", el).value = state.q;
wire(el);
run();
}
export function unmount() { if (observer) observer.disconnect(); observer = null; document.body.classList.remove("noscroll"); }
function writeURL() {
const p = new URLSearchParams();
if (state.q) p.set("q", state.q);
if (state.dom) p.set("d", state.dom);
const f = Object.entries(state.sel).filter(([, s]) => s.size).map(([k, s]) => k + ":" + [...s].map(encodeURIComponent).join("|")).join(";");
if (f) p.set("f", f);
const qs = p.toString();
history.replaceState(null, "", "#/" + (qs ? "?" + qs : ""));
}
// ── filtering ────────────────────────────────────────────────────────────────
const facetsFor = (dom) => (dom ? DOMS[dom].facets : [["d", "Domain"], ["language", "Brief language"]]);
const valueOf = (e, key) => (key === "d" ? DOMS[e.d].name : e.f[key]);
function passes(e, skipKey) {
if (state.dom && e.d !== state.dom) return false;
if (searchIds && !searchIds.has(e.id)) return false;
for (const [k, set] of Object.entries(state.sel)) {
if (k === skipKey || !set.size) continue;
if (!vals(valueOf(e, k)).some((v) => set.has(v))) return false;
}
return true;
}
function computeSearch() {
const q = state.q.trim();
if (!q) { searchIds = null; return null; }
if (CJK.test(q)) {
const needle = q.toLowerCase();
const hit = ENVS.filter((e) => e._blob.includes(needle));
searchIds = new Set(hit.map((e) => e.id));
return new Map(hit.map((e, i) => [e.id, -i]));
}
const res = SEARCH.search(q);
searchIds = new Set(res.map((r) => r.id));
return new Map(res.map((r) => [r.id, r.score]));
}
function run() {
const scores = computeSearch();
const allowed = new Set(facetsFor(state.dom).map(([k]) => k));
Object.keys(state.sel).forEach((k) => { if (!allowed.has(k)) delete state.sel[k]; });
matches = ENVS.filter((e) => passes(e));
if (scores) matches.sort((a, b) => (scores.get(b.id) ?? 0) - (scores.get(a.id) ?? 0));
else matches.sort((a, b) => order(a) - order(b));
$("#order-note", root).innerHTML = scores ? "best match first" : `${icon("shuffle", 13)}shuffled each visit`;
const nf = Object.values(state.sel).reduce((n, s) => n + s.size, 0);
$("#nfilt", root).textContent = nf ? ` (${nf})` : "";
renderDomains(); renderFacets(); renderActive(); renderMap(); renderList(true); writeURL();
}
// ── domain cards ─────────────────────────────────────────────────────────────
function renderDomains() {
const inSearch = (d) => (searchIds ? ENVS.filter((e) => (!d || e.d === d) && searchIds.has(e.id)).length : null);
const cards = [{ id: null, name: "All domains", verifier: "5 kinds of grader", count: DATA.total }, ...DATA.domains];
$("#domains", root).innerHTML = cards.map((d) => {
const hit = inSearch(d.id);
return ``;
}).join("");
}
// ── facets ───────────────────────────────────────────────────────────────────
function renderFacets() {
$("#facets", root).innerHTML = facetsFor(state.dom).map(([key, label]) => {
const counts = new Map();
ENVS.forEach((e) => { if (passes(e, key)) vals(valueOf(e, key)).forEach((v) => counts.set(v, (counts.get(v) || 0) + 1)); });
const sel = state.sel[key] || new Set();
sel.forEach((v) => { if (!counts.has(v)) counts.set(v, 0); });
if (counts.size <= 1 && !sel.size && key !== "d") return "";
// ordinal facets keep their natural order (Tier 1 → 5, 1 voice → 6, slow → fast); the rest go by count
const ordinal = ORDINAL[key];
let items = [...counts.entries()].sort(ordinal ? (a, b) => ordinal(a[0]) - ordinal(b[0])
: (a, b) => b[1] - a[1] || String(a[0]).localeCompare(String(b[0])));
const limit = expanded.has(key) ? Infinity : (phone() ? 5 : 8);
const hidden = Math.max(0, items.length - limit);
items = items.slice(0, limit);
// sections fold: on a phone only the ones in use start open, so the sheet isn't one long scroll
const open = facetOpen.has(key) ? facetOpen.get(key) : (!phone() || sel.size > 0);
return `
${esc(label)}
${sel.size ? `${sel.size} selected` : ""}${icon("chevronDown", 14, "chev")}
${items.map(([v, c]) => ``).join("")}
${hidden || expanded.has(key) ? `` : ""}`;
}).join("");
}
const facetOpen = new Map();
const phone = () => matchMedia("(max-width: 760px)").matches;
function toggle(key, v) {
if (key === "d") { const id = DATA.domains.find((d) => d.name === v)?.id; if (id) { setDomain(id); return; } }
const set = (state.sel[key] ||= new Set());
set.has(v) ? set.delete(v) : set.add(v);
if (!set.size) delete state.sel[key];
run();
}
function setDomain(id) { state.dom = id; state.sel = {}; run(); }
function renderActive() {
const labels = Object.fromEntries(facetsFor(state.dom));
const pills = [];
Object.entries(state.sel).forEach(([k, set]) => set.forEach((v) =>
pills.push(``)));
$("#active", root).innerHTML = pills.join("");
$("#count", root).textContent = `${fmt.format(matches.length)} environment${matches.length === 1 ? "" : "s"}`;
const sr = $("#show-results", root);
if (sr) sr.textContent = `Show ${fmt.format(matches.length)} environment${matches.length === 1 ? "" : "s"}`;
}
// ── map ──────────────────────────────────────────────────────────────────────
const cssVar = (n) => getComputedStyle(document.documentElement).getPropertyValue(n).trim();
function mapData() {
if (!state.dom) {
const children = DATA.domains.map((d) => {
const counts = new Map();
ENVS.forEach((e) => { if (e.d === d.id && passes(e)) vals(e.f[d.main]).forEach((v) => counts.set(v, (counts.get(v) || 0) + 1)); });
const sorted = [...counts.entries()].sort((a, b) => b[1] - a[1]);
const top = sorted.slice(0, MAP_TOP[d.id]);
const rest = sorted.slice(MAP_TOP[d.id]).reduce((s, [, c]) => s + c, 0);
const kids = top.map(([name, value], rank) => ({ name, value, rank, dom: d.id, other: LEFTOVER.test(name) }));
if (rest) kids.push({ name: `${sorted.length - top.length} more`, value: rest, rank: top.length, dom: d.id, other: true });
return { name: d.name, dom: d.id, children: kids };
}).filter((d) => d.children.length);
return { name: "all", children };
}
const d = DOMS[state.dom];
const counts = new Map();
ENVS.forEach((e) => { if (passes(e, d.main)) vals(e.f[d.main]).forEach((v) => counts.set(v, (counts.get(v) || 0) + 1)); });
const sorted = [...counts.entries()].sort((a, b) => b[1] - a[1]);
return { name: d.name, children: [{ name: d.name, dom: d.id, children: sorted.map(([name, value], rank) => ({ name, value, rank, dom: d.id, other: LEFTOVER.test(name) })) }] };
}
export function renderMap() {
const el = root && $("#map", root);
if (!el) return;
const W = el.clientWidth, H = el.clientHeight;
$("#map-title", root).textContent = state.dom
? `${DOMS[state.dom].name}, by ${DOMS[state.dom].facets.find(([k]) => k === DOMS[state.dom].main)[1].replace(" (mentioned)", "").toLowerCase()}`
: "Everything, by domain and category";
if (!W || !H) return; // the overview is collapsed
const data = mapData();
el.innerHTML = "";
if (!data.children.length) { el.innerHTML = `
Nothing to map.
`; return; }
const h = d3.hierarchy(data).sum((d) => d.value || 0).sort((a, b) => (!!a.data.other - !!b.data.other) || b.value - a.value);
d3.treemap().size([W, H]).paddingInner(2).paddingTop((n) => (n.depth === 1 && !state.dom ? 20 : 0)).round(true).tile(d3.treemapSquarify.ratio(1.35))(h);
const surface = cssVar("--surface");
const svg = d3.select(el).append("svg").attr("viewBox", `0 0 ${W} ${H}`).attr("role", "img").attr("aria-label", "Treemap of environments by category");
if (!state.dom) {
svg.selectAll("g.dh").data(h.children).join("g").attr("class", "cell dh").attr("transform", (d) => `translate(${d.x0},${d.y0})`).call((g) => {
g.append("rect").attr("width", (d) => d.x1 - d.x0).attr("height", 18).attr("fill", "transparent").on("click", (_, d) => setDomain(d.data.dom));
g.append("text").attr("class", "dname").attr("x", 1).attr("y", 13).attr("fill", (d) => cssVar(`--c-${d.data.dom}`))
.text((d) => (d.x1 - d.x0 > 90 ? `${d.data.name} · ${fmt.format(d.value)}` : d.x1 - d.x0 > 34 ? d.data.name : ""));
});
}
const leaves = h.leaves();
const maxRank = d3.max(leaves, (d) => d.data.rank) || 1;
const sel = state.dom ? state.sel[DOMS[state.dom].main] : null;
const g = svg.selectAll("g.leaf").data(leaves).join("g").attr("class", (d) => "cell leaf" + (sel && sel.size && !sel.has(d.data.name) ? " dim" : ""))
.attr("transform", (d) => `translate(${d.x0},${d.y0})`);
g.append("rect").attr("width", (d) => Math.max(0, d.x1 - d.x0)).attr("height", (d) => Math.max(0, d.y1 - d.y0)).attr("rx", 4)
.attr("fill", (d) => d3.interpolateRgb(surface, cssVar(`--c-${d.data.dom}`))(d.data.other ? 0.42 : 0.95 - 0.38 * (d.data.rank / Math.max(maxRank, 6))))
.on("click", (_, d) => clickCell(d.data))
.on("mousemove", (ev, d) => tip(ev, `${esc(d.data.name)} ${fmt.format(d.value)} environments · ${DOMS[d.data.dom].name}`))
.on("mouseleave", () => tip());
g.each(function (d) {
const w = d.x1 - d.x0, hh = d.y1 - d.y0;
if (w < 44 || hh < 26) return;
const color = d3.lab(this.querySelector("rect").getAttribute("fill")).l > 64 ? "#17181c" : "#ffffff";
const max = Math.floor((w - 14) / 6.6);
const label = d.data.name.length > max ? d.data.name.slice(0, Math.max(1, max - 1)) + "…" : d.data.name;
const t = d3.select(this);
t.append("text").attr("class", "lbl").attr("x", 8).attr("y", 18).attr("fill", color).text(label);
if (hh > 42) t.append("text").attr("class", "cnt").attr("x", 8).attr("y", 34).attr("fill", color).text(fmt.format(d.value));
});
animateMap(svg, g, h, W, H);
}
// Drill-down motion: blocks that stay glide from where they were; new blocks grow out of the region they came
// from (the domain you clicked), or out of their own centre. Layout and clicks are unchanged; this is only motion.
let lastMap = null;
const reduceMotion = matchMedia("(prefers-reduced-motion: reduce)");
const leafKey = (d) => d.data.dom + "|" + d.data.name;
function animateMap(svg, g, h, W, H) {
const now = { W, H, leaves: new Map(), doms: new Map() };
g.each((d) => now.leaves.set(leafKey(d), [d.x0, d.y0, d.x1 - d.x0, d.y1 - d.y0]));
(h.children || []).forEach((c) => now.doms.set(c.data.dom, [c.x0, c.y0, c.x1 - c.x0, c.y1 - c.y0]));
const prev = lastMap;
lastMap = now;
if (!prev || prev.W !== W || prev.H !== H || reduceMotion.matches) return; // first paint or a resize: no motion
const T = d3.transition().duration(560).ease(d3.easeCubicInOut);
g.each(function (d) {
const to = [d.x0, d.y0, d.x1 - d.x0, d.y1 - d.y0];
const from = prev.leaves.get(leafKey(d)) || prev.doms.get(d.data.dom) || [to[0] + to[2] / 2, to[1] + to[3] / 2, 0, 0];
if (from.every((v, i) => Math.abs(v - to[i]) < 0.5)) return;
const sel = d3.select(this);
sel.attr("transform", `translate(${from[0]},${from[1]})`).transition(T).attr("transform", `translate(${to[0]},${to[1]})`);
sel.select("rect").attr("width", from[2]).attr("height", from[3]).transition(T).attr("width", to[2]).attr("height", to[3]);
sel.selectAll("text").attr("opacity", 0).transition(T).delay(260).duration(260).attr("opacity", 1);
});
svg.selectAll("g.dh").attr("opacity", 0).transition(T).delay(200).attr("opacity", 1);
}
function clickCell(d) {
tip();
const dom = DOMS[d.dom];
if (state.dom !== d.dom) { state.dom = d.dom; state.sel = {}; }
if (!d.other) {
const set = (state.sel[dom.main] ||= new Set());
set.has(d.name) ? set.delete(d.name) : set.add(d.name);
if (!set.size) delete state.sel[dom.main];
}
run();
// let the drill-down play, then bring the matching environments into view
setTimeout(() => $("#toolbar", root)?.scrollIntoView({ behavior: "smooth", block: "start" }), reduceMotion.matches ? 0 : 620);
}
function tip(ev, html) {
const el = $("#tip");
if (!ev) { el.hidden = true; return; }
el.innerHTML = html; el.hidden = false;
el.style.left = Math.min(ev.clientX + 14, innerWidth - el.offsetWidth - 8) + "px";
el.style.top = ev.clientY + 16 + "px";
}
// ── list ─────────────────────────────────────────────────────────────────────
function terms() {
if (!state.q) return [];
if (CJK.test(state.q)) return [state.q.trim()];
return state.q.toLowerCase().split(/[^\p{L}\p{N}_+#.-]+/u).filter((t) => t.length > 1);
}
function highlight(text) {
const html = esc(text), ts = terms();
if (!ts.length) return html;
const re = new RegExp("(" + ts.map((t) => esc(t).replace(/[.*+?^${}()|[\]\\]/g, "\\$&")).join("|") + ")", "gi");
return html.replace(re, "$1");
}
function card(e) {
const d = DOMS[e.d];
const chips = d.facets.filter(([k]) => k !== d.main && k !== "source")
.flatMap(([k]) => vals(e.f[k]).filter((v) => !LEFTOVER.test(v)).slice(0, 2)).slice(0, 4);
const stats = e.n ? [[`${e.n.systems}`, "systems"], [`${e.n.files}`, "files"], [`${e.n.checks}`, "checks"]] : [];
return `