Repository navigation
Releases: lyd123qw2008/pi-control-chrome
Release list
v0.8.0 — generic MCP surface and durable browser reads
Highlights
- Renamed the local MCP adapter from
codex/tomcp/. The published package keeps both the./codex/mcp-server.mjsexport andpi-control-chrome-codexexecutable as compatibility aliases, and addspi-control-chrome-mcp. - Generic MCP clients now receive the complete 44-operation browser catalog by default. Codex remains intentionally bounded to 13 model-visible tools through the named
PI_CONTROL_CHROME_TOOLS=codexmode in.mcp.json. - Unscoped snapshots now sample a still-loading top-level document briefly: a settled follow-up carries
settleSamples; a coherent result that remains loading carriesunsettled: true. Selector-scoped snapshots retain caller-owned readiness. - The root and bundled DSH Skills are synchronized, including the new snapshot contract and the
mcp/adapter location.
Published surfaces
| Surface | Version |
|---|---|
| Pi root package | pi-control-chrome@0.8.0 |
| Manifest V3 extension | 0.8.0 |
| DSH companion package | @lyd123qw2008/dsh-tool-control-chrome@0.8.0 |
The root and companion packages were published from commit a6d6680.
Verification
- CI push gate and Compatibility push gate passed for the exact release commit, including the isolated Chrome/Edge matrix.
- Root Trusted Publishing and DSH companion Trusted Publishing passed.
- Registry metadata confirms both root executable entries:
pi-control-chrome-mcpand the compatibility aliaspi-control-chrome-codex, each targetingmcp/mcp-server.mjs. - The reusable Profile update merged as dsh-profile-config#19: its lockfile resolves the DSH companion and transitive root package to
0.8.0. - The active DSH Profile now pins
pi-control-chrome@0.8.0; its frozen install and composed-profile dump confirm the installedmcp/mcp-server.mjsnode-repl provider path.
Upgrade note
The active profile currently consumes pi-control-chrome directly through the node-repl cap.chrome provider, so it intentionally pins the root package rather than mounting the companion DSH plugin. No DSH process was restarted during this release. Restart DSH manually to load the updated active Profile and provider configuration.
v0.6.2 — an inherited tab can actually be closed
v0.6.2 — an inherited tab can actually be closed
Patch release completing what 0.6.1 started. 0.6.1 let close, release and cleanup cross an
extension-runtime generation, but they still compared the live tab fence against the fence stored in
the ownership record — and a replaced runtime cannot reproduce that fence by definition. A real
leftover tab therefore answered BROWSER_TAB_FENCE_CHANGED and stayed unclosable: the same wall one
check deeper. Observed live, the record carried tab:bb6803dd… while the new runtime reported
tab:d0f05bd3….
Closing, releasing or cleaning up an inherited Agent record now identifies the tab by its tabId
plus this session's own ownership record and uses the fence the current runtime actually observes. A
claimed user tab keeps the stricter treatment, and document-bound work still fails closed with
BROWSER_TAB_RUNTIME_INHERITED naming the exit that works.
Versions
| Surface | Version |
|---|---|
pi-control-chrome |
0.6.2 |
extension/manifest.json |
0.6.2 |
@lyd123qw2008/dsh-tool-control-chrome |
0.6.2 (depends on pi-control-chrome@^0.6.0) |
| Codex plugin manifest | 0.6.2 |
Verification
- Live: the tab left behind by an earlier extension runtime closed cleanly
(browser_close_tab→{"closed":1803052087}) after reloading the 0.6.2 extension. - The unit case registers no fence token for the record, which is exactly what a replaced runtime
looks like. - CI: https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34950359236
- Compatibility: https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34950359200
- Publish (Pi): https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34950589308
- Publish (DSH): https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34950646516
- npm: https://www.npmjs.com/package/pi-control-chrome/v/0.6.2
- npm: https://www.npmjs.com/package/@lyd123qw2008/dsh-tool-control-chrome/v/0.6.2
The active DSH Profile links the local checkout, so it needs no reinstall.
v0.6.1 — a read must say what it dropped, and a failure must say what to do
v0.6.1 — a read must say what it dropped, and a failure must say what to do
Patch release: three behaviour fixes found by verifying the 0.6.0 runtime against real pages, plus
the recovery-path fix that came out of the same verification.
Versions
| Surface | Version |
|---|---|
pi-control-chrome |
0.6.1 |
extension/manifest.json |
0.6.1 |
@lyd123qw2008/dsh-tool-control-chrome |
0.6.1 (depends on pi-control-chrome@^0.6.0) |
| Codex plugin manifest | 0.6.1 |
Fixes
- A second projection no longer erases the first one's omission report. The Bridge renders a
compact response and a host projects it again; the re-projection recomputed its own omission set,
so a live Jenkins digest came back astruncated: truewithomitted: {}— incomplete, and silent
about what was missing. Upstream counts and guidance now carry forward, and sequential cuts add up
because they are measured against different sources. The same page now reports
omitted {"characters":6886,"controls":225,"regions":1}with a next step and a recovery path. - A post-effect wait names the reason it failed.
waitForTabStatethrew a code-less error while
the other wait path already reported a structuredBROWSER_WAIT_TIMEOUT, and the uncertainty
envelope can only forward a failure that carries a code. Anavigate(wait: true)whose page
redirected (/git→/git/) now reportsBROWSER_WAIT_TIMEOUTwithpostEffectUrlMismatchand
postEffectLoaded, so a redirect is distinguishable from a changed tab fence. Page URL and title
stay out of the envelope. - A table's shape is no longer read as page data. A chart legend's header row published
w: Description · %and a single-character placeholder cell publishedx: x. Header rows and
one-character labels are now skipped; a real row-header pair still publishes. - A session can clean up after its own runtime. A tab this session opened used to become both
unreadable and unclosable once the extension runtime that recorded it was replaced. Closing it is
now the calling session's own bookkeeping,browser_releasedrops the record without touching the
tab, andbrowser_cleanupcloses inherited Agent tabs. Aclaimeduser tab keeps the stricter
treatment, and document-bound work still fails closed withBROWSER_TAB_RUNTIME_INHERITEDnaming
the exit that works.
Verification
- CI: https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34948237676
- Compatibility: https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34948237761
- Publish (Pi): https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34948432501
- npm: https://www.npmjs.com/package/pi-control-chrome/v/0.6.1
DSH companion package
@lyd123qw2008/dsh-tool-control-chrome@0.6.1published from the same commit, declaring
pi-control-chrome@^0.6.0(a caret on 0.6.0 already admits 0.6.1).- Publish (DSH): https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34949112201
- npm: https://www.npmjs.com/package/@lyd123qw2008/dsh-tool-control-chrome/v/0.6.1
- The active DSH Profile links the local checkout, so it needs no reinstall; the maintainer restarted
DSH and the post-restart runtime check passed (runtime.fresh: true,requiredCapabilityRevision 8,
a truncated digest reporting realomittedcounts).
Correction
The "session can clean up after its own runtime" fix in this release was incomplete: close, release
and cleanup still compared the recorded tab fence, so a real leftover tab could not be closed until
v0.6.2 removed that
comparison. Upgrade to 0.6.2 for the behaviour described above.
v0.6.0 — neutral page digest and retrievable bounded reads
v0.6.0 — neutral page digest and retrievable bounded reads
Back-filled release record: pi-control-chrome@0.6.0 was published to npm on 2026-09-15
from commit 51761c7, but no GitHub Release was created for it at the time.
Versions
| Surface | Version |
|---|---|
pi-control-chrome |
0.6.0 |
extension/manifest.json |
0.6.0 |
@lyd123qw2008/dsh-tool-control-chrome |
0.6.0 (depends on pi-control-chrome@^0.6.0) |
| Codex plugin manifest | 0.6.0 |
Highlights
- Replaced the ranked Page Map with a neutral page digest: regions in document order, repeated
containers as counts, noPrimary, no key-action ordering — identical DOM yields identical output. - Made every bounded read retrievable:
omittedcounts,nextAction/recommendation, an
addressable region list, and a shadow-root boundary instead of an empty-looking page. - Made truncation mean an incomplete answer and gave a failed semantic target a named next step.
- Converged Pi, DSH and Codex on one diagnostic contract;
browser_statusstays small while
browser_doctorcarries the capability map, metrics and recovery detail. - Documented the capability-layer/personalization-layer boundary: the plugin owns page structure,
identity and safety boundaries; a site's DOM shape, workflow and field names belong to the calling
Skill.
Verification
- CI: https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34944592680
- Compatibility: https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34944592628
- Publish (Pi): https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34944892303
- Publish (DSH): https://github.com/lyd123qw2008/pi-control-chrome/actions/runs/34944936600
- npm: https://www.npmjs.com/package/pi-control-chrome/v/0.6.0
- npm: https://www.npmjs.com/package/@lyd123qw2008/dsh-tool-control-chrome/v/0.6.0
v0.5.9 — Stable browser automation baseline
pi-control-chrome v0.5.9
Stable Chrome and Edge browser control for Pi, Codex, and DSH through a local Bridge and Manifest V3 extension.
Highlights
- Added robust browser target lifecycle management with session-scoped leases, connection-generation fencing, reconnect recovery, and fail-closed handling for uncertain operations.
- Added Chrome/Edge target inventory, explicit
browserIdrouting, Bridge Doctor diagnostics, bounded recovery metrics, and cooperative Bridge restart support. - Added real Chromium Accessibility Tree snapshots with bounded full/diff/unchanged output, document-scoped
aNrefs, AX-first semantic locators, and safe DOM fallback only when AX is unavailable. - Added semantic locator and wait support for role/name, label, text, placeholder, test id, URL, visible/hidden/enabled state, plus DOM-CUA and coordinate interactions.
- Added screenshots, bounded page extraction, Console/pageerror diagnostics, Network inspection, JavaScript dialogs, upload/download, clipboard, native CDP, and interaction probes.
- Added Codex stdio MCP integration and DSH browser tools with shared lifecycle, target, output-compaction, and recovery semantics.
- Added isolated Chrome for Testing and Edge E2E coverage, multi-Profile routing tests, and Bridge restart regression coverage.
- Hardened publishing with exact-commit CI/Compatibility gates, installed-package smoke coverage, stale-run cancellation, and Node 24-compatible GitHub Actions.
Package versions
pi-control-chrome@0.5.9— npm@lyd123qw2008/dsh-tool-control-chrome@0.5.9— npm- Manifest V3 extension version:
0.5.9
DSH plugin
The DSH package now declares a dsh.bundle.patch manifest and ships cordis.patch.yml, so one command mounts it into a Profile:
dsh plugin --profile web add @lyd123qw2008/dsh-tool-control-chromeBefore this release the Profile needed a hand-merged cordis.patch.yml entry.
Verification
CI and Compatibility passed on commit 018cc2aef73f5cbcb6f2fb0e949333ebe83b2488, and the DSH publish workflow published 0.5.9 from that same commit.
v0.3.6
Highlights
- Publish the post-0.3.5 Pi extension status update.
- Keep the bundled
pi-control-chromeSkill guidance aligned with the DSH/chrome connectand/chrome disconnectlifecycle commands. - DSH browser tools now wait for the extension's background reconnect and retry read-only readiness automatically before requesting human connection.
- Synchronize the package, browser extension manifest, and lockfile at
0.3.6.
Compatibility
- Pi package, Bridge, and unpacked browser extension:
0.3.6. - DSH browser-control package:
@lyd123qw2008/dsh-tool-control-chrome@0.3.12. - The extension must be manually reloaded when updating an unpacked installation.
Links
v0.3.5
Highlights
- Gate Pi and DSH browser tools behind the
pi-control-chromeSkill. - Keep the complete 38-tool browser catalog together; DSH
lazyTools: falseremains available for eager compatibility. - Add the canonical DSH
pi-control-chromeSkill registration and Agent-scoped activation. - Preserve Bridge target identity, session ownership, browser safety checks, debugger lease reuse, and cleanup behavior.
- Fix Pi extension startup by deferring active-tool API calls until
session_start. - Add DSH
/chrome connectand/chrome disconnectcommands;/chrome statusreports Bridge-only readiness, and/chrome restartwaits for extension reconnection.
Compatibility
- Pi package and unpacked browser extension:
0.3.5. - DSH browser-control package:
@lyd123qw2008/dsh-tool-control-chrome@0.3.9. - The extension must be manually reloaded when updating an unpacked installation.
Links
v0.2.4
v0.2.3
v0.2.2
Full Changelog: https://github.com/lyd123qw2008/pi-control-chrome/commits/v0.2.2