import { writeFileSync } from "node:fs"; const cdpPort = process.env.CDP_PORT ?? "9231"; const baseUrl = process.env.SITE_URL ?? "http://127.0.0.1:4327"; const pages = await fetch(`http://127.0.0.1:${cdpPort}/json/list`) .then((response) => response.json()); const page = pages.find((entry) => entry.type === "page"); if (!page) throw new Error(`CDP ${cdpPort} 没有可用页面`); const socket = new WebSocket(page.webSocketDebuggerUrl); await new Promise((resolve, reject) => { socket.addEventListener("open", resolve, { once: true }); socket.addEventListener("error", reject, { once: true }); }); let nextId = 0; const pending = new Map(); const exceptions = []; socket.addEventListener("message", (event) => { const message = JSON.parse(event.data); if (message.id && pending.has(message.id)) { const { resolve, reject } = pending.get(message.id); pending.delete(message.id); if (message.error) reject(new Error(message.error.message)); else resolve(message.result); } if (message.method === "Runtime.exceptionThrown") { exceptions.push( message.params.exceptionDetails.exception?.description ?? message.params.exceptionDetails.text, ); } }); const command = (method, params = {}) => new Promise((resolve, reject) => { const id = ++nextId; pending.set(id, { resolve, reject }); socket.send(JSON.stringify({ id, method, params })); }); const pause = (milliseconds) => new Promise( (resolve) => setTimeout(resolve, milliseconds), ); const evaluate = async (expression) => { const result = await command("Runtime.evaluate", { expression, returnByValue: true, awaitPromise: true, }); if (result.exceptionDetails) { throw new Error( result.exceptionDetails.exception?.description ?? result.exceptionDetails.text, ); } return result.result.value; }; const screenshot = async (path) => { const result = await command("Page.captureScreenshot", { format: "png", captureBeyondViewport: false, }); writeFileSync(path, Buffer.from(result.data, "base64")); }; const assert = (condition, message) => { if (!condition) throw new Error(message); }; await command("Page.enable"); await command("Runtime.enable"); await command("Emulation.setDeviceMetricsOverride", { width: 1440, height: 1100, deviceScaleFactor: 1, mobile: false, }); await command("Page.navigate", { url: `${baseUrl}/deepseek/#task-bootstrap-crn`, }); for (let attempt = 0; attempt < 100; attempt += 1) { await pause(100); if (await evaluate("document.readyState === 'complete'")) break; } const overview = await evaluate(`(() => { const root = document.querySelector("[data-task-bootstrap-lab]"); if (!root) return null; document.documentElement.style.scrollBehavior = "auto"; window.scrollTo(0, root.getBoundingClientRect().top + window.scrollY); const facts = Object.fromEntries( [...root.querySelectorAll(".tb-ledger article")].map((node) => [ node.querySelector("span").textContent.trim(), node.querySelector("b").textContent.trim(), ]), ); return { tabs: root.querySelectorAll("[data-tb-tab]").length, panels: root.querySelectorAll("[data-tb-panel]").length, active: root.querySelector("[data-tb-panel]:not([hidden])")?.dataset.tbPanel, bars: root.querySelectorAll(".uniform-bars article").length, lanes: root.querySelectorAll(".token-lanes article").length, laneTokens: root.querySelectorAll(".token-lanes article i").length, facts, labs: [...document.querySelectorAll(".page-facts > div")] .find((node) => node.querySelector("dt")?.textContent.trim() === "LABS") ?.querySelector("dd")?.textContent.trim(), status: [...document.querySelectorAll(".page-facts > div")] .find((node) => node.querySelector("dt")?.textContent.trim() === "STATUS") ?.querySelector("dd")?.textContent.trim(), documentOverflow: document.documentElement.scrollWidth - document.documentElement.clientWidth, }; })()`); await pause(250); await screenshot("/tmp/llm-atlas-task-bootstrap-sampler-desktop.png"); const bootstrap = await evaluate(`(() => { const root = document.querySelector("[data-task-bootstrap-lab]"); root.querySelector('[data-tb-tab="bootstrap"]').click(); const read = () => ({ active: root.querySelector("[data-tb-panel]:not([hidden])").dataset.tbPanel, conditionCards: [...root.querySelectorAll("[data-tb-condition-cards] article")] .map((node) => node.querySelector("b").textContent.trim()), forest: [...root.querySelectorAll("[data-tb-forest] > article")].map((node) => ({ label: node.querySelector("span").textContent.trim(), point: node.querySelector(":scope > b").textContent.trim(), band: node.querySelector("small").textContent.trim(), clear: node.querySelector("u").classList.contains("clear"), })), robust: root.querySelector("[data-tb-robust-count]").textContent.trim(), }); const codeCorrectness = read(); root.querySelector('[data-tb-metric="generated_tokens"]').click(); const codeLength = read(); root.querySelector('[data-tb-domain="math"]').click(); const mathLength = read(); return { codeCorrectness, codeLength, mathLength }; })()`); await pause(150); await screenshot("/tmp/llm-atlas-task-bootstrap-forest-desktop.png"); const taskExplorer = await evaluate(`(() => { const root = document.querySelector("[data-task-bootstrap-lab]"); root.querySelector('[data-tb-tab="tasks"]').click(); const domain = root.querySelector("[data-tb-task-domain]"); const contrast = root.querySelector("[data-tb-task-contrast]"); domain.value = "math"; domain.dispatchEvent(new Event("change", { bubbles: true })); contrast.value = "system_at_eos"; contrast.dispatchEvent(new Event("change", { bubbles: true })); root.querySelector('[data-tb-task-page="2"]').click(); return { active: root.querySelector("[data-tb-panel]:not([hidden])").dataset.tbPanel, rows: root.querySelectorAll("[data-tb-task-rows] > article").length, page: root.querySelector("[data-tb-task-page-label]").textContent.trim(), selectedPage: root.querySelector('[data-tb-task-page][aria-pressed="true"]') .dataset.tbTaskPage, firstTask: root.querySelector("[data-tb-task-rows] > article span b") .textContent.trim(), transition: [...root.querySelectorAll("[data-tb-transition-cards] article")] .map((node) => node.querySelector("b").textContent.trim()), }; })()`); const tape = await evaluate(`(() => { const root = document.querySelector("[data-task-bootstrap-lab]"); root.querySelector('[data-tb-tab="tapes"]').click(); const domain = root.querySelector("[data-tb-tape-domain]"); const contrast = root.querySelector("[data-tb-tape-contrast]"); domain.value = "math"; domain.dispatchEvent(new Event("change", { bubbles: true })); contrast.value = "system_at_eos"; contrast.dispatchEvent(new Event("change", { bubbles: true })); return { active: root.querySelector("[data-tb-panel]:not([hidden])").dataset.tbPanel, rows: root.querySelectorAll("[data-tb-tape-rows] > article").length, cells: root.querySelectorAll("[data-tb-tape-rows] > article > b").length, means: [...root.querySelectorAll("[data-tb-tape-means] > b")] .map((node) => node.textContent.trim()), taskRange: root.querySelector("[data-tb-task-range]").textContent.trim(), tapeRange: root.querySelector("[data-tb-tape-range]").textContent.trim(), }; })()`); const audit = await evaluate(`(() => { const root = document.querySelector("[data-task-bootstrap-lab]"); root.querySelector('[data-tb-tab="audit"]').click(); return { active: root.querySelector("[data-tb-panel]:not([hidden])").dataset.tbPanel, fields: [...root.querySelectorAll(".replay-fields article")] .map((node) => node.querySelector("b").textContent.trim()), codeOutcomes: root.querySelectorAll(".failure-ledger > article:first-child > div").length, mathOutcomes: root.querySelectorAll(".failure-ledger > article:last-child > div").length, deviations: root.querySelectorAll(".deviation-ledger article").length, artifacts: root.querySelectorAll(".artifact-chain article").length, }; })()`); const keyboard = await evaluate(`(() => { const root = document.querySelector("[data-task-bootstrap-lab]"); const first = root.querySelector('[data-tb-tab="sampler"]'); first.click(); first.focus(); first.dispatchEvent(new KeyboardEvent("keydown", { key: "ArrowRight", bubbles: true, })); return { selected: root.querySelector('[data-tb-tab][aria-selected="true"]').dataset.tbTab, active: root.querySelector("[data-tb-panel]:not([hidden])").dataset.tbPanel, focused: document.activeElement.dataset.tbTab, }; })()`); await command("Emulation.setDeviceMetricsOverride", { width: 390, height: 844, deviceScaleFactor: 1, mobile: true, }); await pause(300); const mobile = await evaluate(`(() => { const root = document.querySelector("[data-task-bootstrap-lab]"); root.querySelector('[data-tb-tab="tasks"]').click(); root.scrollIntoView(); return { documentOverflow: document.documentElement.scrollWidth - document.documentElement.clientWidth, rootOverflow: root.scrollWidth - root.clientWidth, tableWidth: root.querySelector(".task-table").getBoundingClientRect().width, tableScrollWidth: root.querySelector(".task-table").scrollWidth, viewport: window.innerWidth, }; })()`); await screenshot("/tmp/llm-atlas-task-bootstrap-mobile.png"); assert(overview, "找不到任务 bootstrap 实验"); assert(overview.tabs === 5 && overview.panels === 5, "五页签/面板合同异常"); assert(overview.active === "sampler", "初始面板不是 sampler"); assert(overview.bars === 8, "uniform tape 前八步渲染异常"); assert(overview.lanes === 4 && overview.laneTokens === 32, "四条件 token lane 异常"); assert(overview.facts.TASKS === "32 + 32", "任务 headline 异常"); assert(overview.facts["FORMAL GRID"] === "352", "formal headline 异常"); assert(overview.facts["UNIFORM AUDIT"] === "352 / 352", "uniform headline 异常"); assert(overview.facts["FRESH PROCESS"] === "64 / 64", "replay headline 异常"); assert(overview.labs === "22 个可操作实验", "DeepSeek LABS 总账异常"); assert(overview.status === "八轮 · 864 条采样", "DeepSeek STATUS 总账异常"); assert(overview.documentOverflow <= 1, `桌面横向溢出 ${overview.documentOverflow}px`); assert(bootstrap.codeCorrectness.active === "bootstrap", "bootstrap 面板切换异常"); assert(bootstrap.codeCorrectness.conditionCards.join("|") === "16 / 32 pass|16 / 32 pass|15 / 32 pass|12 / 32 pass", "Code 条件 pass 表异常"); assert(bootstrap.codeCorrectness.forest.length === 4, "forest contrast 数异常"); assert(bootstrap.codeCorrectness.robust === "0 / 4 bands 不跨 0", "Code correctness 带数异常"); assert(bootstrap.codeLength.robust === "2 / 4 bands 不跨 0", "Code length 带数异常"); assert(bootstrap.codeLength.forest.at(-1).point === "-130.9 tok", "Code system-period 长度异常"); assert(bootstrap.mathLength.robust === "1 / 4 bands 不跨 0", "Math length 带数异常"); assert(bootstrap.mathLength.forest.at(-1).point === "+25.1 tok", "Math system-period 长度异常"); assert(taskExplorer.active === "tasks", "逐题面板切换异常"); assert(taskExplorer.rows === 8 && taskExplorer.page === "17–24 / 32", "逐题分页异常"); assert(taskExplorer.selectedPage === "2", "逐题页按钮状态异常"); assert(taskExplorer.firstTask === "gsm8k/test/1050", "逐题页首任务异常"); assert(taskExplorer.transition.join("|") === "3 / 32|3 / 32|16 / 32|10 / 32", "Math system-EOS 转移异常"); assert(tape.active === "tapes", "tape 面板切换异常"); assert(tape.rows === 4 && tape.cells === 16, "4×4 tape matrix 异常"); assert(tape.means.join("|") === "0.00|+0.50|-0.25|+0.25", "Math system-EOS tape means 异常"); assert(tape.taskRange === "1.25" && tape.tapeRange === "1.00", "tape/task range 异常"); assert(audit.active === "audit", "审计面板切换异常"); assert(audit.fields.length === 12, "重放字段数不为 12"); assert(audit.fields.every((value) => value === "64 / 64"), "重放字段未全部 exact"); assert(audit.codeOutcomes === 6 && audit.mathOutcomes === 2, "失败分类数量异常"); assert(audit.deviations === 2, "偏离账数量异常"); assert(audit.artifacts === 4, "工件 hash 数量异常"); assert( keyboard.selected === "bootstrap" && keyboard.active === "bootstrap" && keyboard.focused === "bootstrap", "页签键盘导航异常", ); assert(mobile.documentOverflow <= 1, `移动端 document 横向溢出 ${mobile.documentOverflow}px`); assert(mobile.rootOverflow <= 1, `移动端实验横向溢出 ${mobile.rootOverflow}px`); assert(mobile.tableWidth <= mobile.viewport, "移动端任务表容器超出 viewport"); assert(mobile.tableScrollWidth > mobile.tableWidth, "移动端任务表没有内部横向滚动"); assert(exceptions.length === 0, `浏览器异常:${exceptions.join(" | ")}`); console.log(JSON.stringify({ overview, bootstrap, taskExplorer, tape, audit, keyboard, mobile, screenshots: [ "/tmp/llm-atlas-task-bootstrap-sampler-desktop.png", "/tmp/llm-atlas-task-bootstrap-forest-desktop.png", "/tmp/llm-atlas-task-bootstrap-mobile.png", ], }, null, 2)); socket.close();