一键导入
verify
Build, launch, and drive meshStep's surfaces (library + web viewer) to verify changes end-to-end.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Build, launch, and drive meshStep's surfaces (library + web viewer) to verify changes end-to-end.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | verify |
| description | Build, launch, and drive meshStep's surfaces (library + web viewer) to verify changes end-to-end. |
Node ≥ 22 runs the TypeScript sources directly. Exercise importStep through the public entry:
// from any directory — use a file:// specifier, relative paths break outside the repo
const m = await import("file:///C:/Users/stefa/Desktop/Coding/meshStep/src/index.ts");
models/pixel-pump-two-mainboard.step is the big real-world fixture (~45 s import, 2M tris);
the occt-import-js test files (node_modules/occt-import-js/test/testfiles/*/*.step) are small
(~2 s) and all carry STEP colors. For an uncolored fixture, sed '/STYLED_ITEM/d' a copy.
cd web && npm run dev # NOTE: check the port in the output — often 5180, not 5173
Drive it headless with puppeteer-core + system Chrome (Edge headless fails to launch here):
const browser = await puppeteer.launch({
executablePath: "C:/Program Files/Google/Chrome/Application/chrome.exe",
headless: "new",
args: ["--use-angle=swiftshader", "--enable-unsafe-swiftshader", "--no-sandbox",
"--user-data-dir=<some temp dir>", // required, launch fails without a clean profile
"--window-size=1500,950"],
});
Flow: (await page.$("#stepFile")).uploadFile(path) → wait #convertBtn enabled → click it →
wait until #status starts with "Done" (pixel-pump: ~70 s in-browser) → screenshot. Toggles are
checkboxes #tColors #tFeature #tEdges #tRef #tDev; render style is a segmented control
(#styleSeg .seg-btn[data-style=shaded|transparent|wireframe|edges]); camera + tools live in the
viewport toolbar (#fitBtn #viewsBtn #projBtn #sectionBtn #measureBtn, tool rows #sectionRow #measureRow); reference STL goes in #refFile. Dismiss the sponsor/CTA overlays first or they cover the viewport:
await page.evaluate(() => {
localStorage.setItem("meshstep.sponsor.dismissed", "1");
localStorage.setItem("meshstep.cta.dismissed", "1");
});
await page.reload({ waitUntil: "networkidle0" });
Gotcha: the "Export STL" button uses a blob-URL anchor click — Page.setDownloadBehavior does
not capture it. Generate reference STLs via the library (writeBinarySTL) instead.