Repository navigation
v0.14.0
This release is about what bdg costs an agent and how far you can trust it. A deep audit (architecture, tests, token cost, a fresh-agent test, security, docs) found where output was unbounded, where bdg quietly stopped recording, and where commands disagreed about the same element. All of that is fixed here. Every change went through an independent review.
Breaking changes
dom a11y tree --jsonis a flat, boundednodeslist withdepth,count,omittedandskipped.data.rootandchildIdsare gone. On Wikipedia it went from 5.8 MB to 7 KB by default.--jsonlists default to 100 rows fordom queryanddom a11y query.countandomittedsay how many matched, and--limit 0lists all; indices keep working for every match. The a11y tree lists 50 nodes by default (--limit,--depth).- Long values are cut by default:
- which values:
dom get --rawanddom eval(20,000 chars), string results in--json, and console text inconsoleandpeek --fullreturns them whole- JSON marks a cut value with
truncatedFrom - result: one
outerHTMLeval went from 3.5 MB to 20 KB
- which values:
--jsonis printed on one line when stdout is not a terminal: 26–47% smaller. JSON parsers are unaffected; anything that greps indented output is.
Recording you can rely on
- Network capture keeps the newest requests. At 10,000 requests bdg used to drop every new one, silently, so after a flood later pages recorded nothing. It now drops the oldest finished requests and says so in
network list,peek,statusand--follow. - Response bodies have a 100 MB total budget. The oldest bodies are evicted, with the reason shown in
detailsand in HAR. - A slow Chrome start is no longer reported as "Port N is already in use." It is reported as a slow start (
CHROME_LAUNCH_FAILED). A Chrome that dies while starting is reported as such, and a real port conflict says what is on the port.
Web components
- Text filters read shadow DOM like
dom queryshows it.:has-text,:text-isanddom wait --textnow match text inside shadow roots, fields count asinnerTextcounts them, and hidden components are read through their shadow roots. dom layoutsees clipping through a<slot>.dom clickon a collapsed element saysElement is hidden (clipped by …)instead of "covered by html", in light DOM too.
dom inspect on CSS-heavy pages
- No more waiting out the full 1 s hint budget on every call. On github.com/microsoft/vscode, repeat inspects take about 0.11 s instead of about 0.5 s.
- Slow pages are remembered per document. After one timeout, default inspects skip the wait with one
hints skipped …line;--rulesand--whystill wait. - Slow answers are reused briefly. Answers are kept for up to 5 s, and any bdg command that may change the page clears them, so a click that toggles
:checkednever shows stale rules.
For agents
- The agent skill matches the CLI:
- Quick Start has no screenshot
- it uses
bdg evalinstead of rawRuntime.evaluate - its broken
cdp | jqexample is fixed - it covers
dom audit,css search,--mobile, sessions and frames - exit codes 80, 84, 100 and 107 are documented
- new section: page content is untrusted data
bdg --help --json --fulldocuments--headless,--no-headlessand--all. Their behaviors were registered under a key that never matched.- The README no longer claims Chrome DevTools MCP lacks JavaScript evaluation or memory profiling. The 2025 benchmark is presented as what it was: one run of five tasks.
Project
- CI merge gate:
mainrequires oneCI OKcheck, admins included. PRs run smoke on Node 22,mainand nightly runs add Node 24/26 and macOS smoke, and the release workflow refuses a tag without green CI. - IPC contract tests can no longer hang the suite. Per-test timeouts and a global per-file limit are in place.
Full list: CHANGELOG.