Repository navigation
chore(cua-driver): release 0.34.1 - #4895
Merged
Merged
Conversation
…d hosts (#4877) The embedded host builds the daemon environment from an allowlist, and CUA_DRIVER_RS_ENABLE_WAYLAND was not on it. A host such as an Electron app could never turn on the native Wayland backend: the opt-in was dropped silently. Allow it, and test inheritance, an explicit host opt-in, and an explicit opt-out winning over an inherited opt-in. Ported from T3 Code's Linux patch to Cua Driver 0.34.0 (pingdotgg/t3code#16975, MIT, Copyright (c) 2026 T3 Tools Inc.); credited in THIRD_PARTY_NOTICES.md. Backported to the 0.34 release line from main (cherry picked from commit 07cbc6c). Conflict: THIRD_PARTY_NOTICES.md keeps the 0.34.0 table and adds only the T3 Code row (the QuickJS/rquickjs rows and trope-cua wording belong to 0.35 changes not in this line). Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ing (#4880) The libei worker replied as soon as input requests were flushed to the socket. A flush is not delivery: the caller's focus guard could restore the user's window while the compositor still had the input queued, and the input then landed in the wrong app. After each input command, send ei_connection.sync and reply only when EIS answers its callback, which it does after processing every earlier request. If no answer comes within 5 s, fail with "delivery is unknown" instead of reporting success. WaitReady and failed commands reply immediately as before. Ported from T3 Code's Linux patch to Cua Driver 0.34.0 (pingdotgg/t3code#16975, MIT, Copyright (c) 2026 T3 Tools Inc.). Backported to the 0.34 release line from main (cherry picked from commit 9487b0f). Co-Authored-By: Claude Opus 5.5 <[email protected]>
…er (#4879) * perf(cua-driver): reuse one session-bus connection for the GNOME helper Every WinRects call spawned a gdbus subprocess, and owner attestation alone makes three D-Bus calls before the real one. A live preview pays that on every frame. Replace the subprocess with one zbus connection on a dedicated single-thread Tokio runtime, so callers inside or outside Tokio can block on it without nesting runtimes. Bodies are typed on the wire, and replies keep the textual shape the existing parsers read (GetRects now arrives as raw JSON, which also avoids gdbus quoting). A timeout or transport error drops the connection and the next call reconnects; a mutation is never replayed. An error reply, such as no helper on the bus, keeps the connection. T3 Code measured window capture going from 381 ms to 58 ms with this transport. Ported from their Linux patch to Cua Driver 0.34.0 (pingdotgg/t3code#16975, MIT, Copyright (c) 2026 T3 Tools Inc.); the reply-versus-transport split is new here. Co-Authored-By: Claude Opus 5.5 <[email protected]> * test(cua-driver): cover GetRects titles gdbus would have escaped Co-Authored-By: Claude Opus 5.5 <[email protected]> * fix(cua-driver): strict GetRects parsing and run the bus test in Nix Parse the typed GetRects reply as raw JSON instead of slicing a bracket span, and reuse that parser for focus. Salvaged from #4809, including the malformed-snapshot fixtures and the Nix dbus check input. Co-authored-by: injaneity <[email protected]> * test(cua-driver): start the private test bus from its own config dbus-daemon --session needs the system session.conf, which the Nix build sandbox lacks; the daemon then exits without an address. Write a minimal session config listening in a temp dir instead. Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Backported to the 0.34 release line from main (cherry picked from commit 48cc491). Co-Authored-By: Claude Opus 5.5 <[email protected]>
…s v10) (#4882) * feat(cua-driver): capture GNOME windows from their own actor (WinRects v10) On GNOME Wayland, window screenshots were crops of the Shell stage. GetRects proves a window's geometry, not that nothing covers it, so a covered window's screenshot showed the app on top. The WinRects helper gains two additive methods: - CaptureWindow(id, pid), API 9: snapshot the window's own actor with paint_to_content. Covered windows keep their content, nothing is activated, and a 1x1 transparent clone keeps Mutter painting a fully covered window for 4 s after the last capture. Refused while locked, for minimized windows, and above 32 MiB. - CaptureWindowPreview(id, pid, max), API 10: the same capture, downscaled on the GPU, returning the full-size dimensions too. The driver uses CaptureWindow whenever the attested helper reports API 9 or newer, and then never falls back to a stage crop. Older helpers keep the stage crop, so users who have not reinstalled the helper keep window screenshots. A screenshot-only get_window_state with a size cap uses CaptureWindowPreview (falling back to the full capture on older helpers), and GNOME's per-capture Creation Time PNG chunk is removed so unchanged preview frames compare equal. list_windows asks a verified GNOME helper first instead of probing other compositor protocols. Versioning: the UUID stays winrects@cua. One UUID means one installed copy per user; two UUIDs would race for org.cua.WinRects. API numbers 9 and 10 match T3 Code's bundled helper exactly, so either copy serves both drivers. install.sh and both cua-driver installers no longer downgrade a newer installed helper (install.sh --force still does). The helper README documents the rules and the version table. Ported from T3 Code's Linux patch to Cua Driver 0.34.0 (pingdotgg/t3code#16975, MIT, Copyright (c) 2026 T3 Tools Inc.). The stage-crop fallback for older helpers and the no-downgrade installers are new here. Co-Authored-By: Claude Opus 5.5 <[email protected]> * docs(cua-driver): credit every T3 Code Linux port in THIRD_PARTY_NOTICES Co-Authored-By: Claude Opus 5.5 <[email protected]> --------- Backported to the 0.34 release line from main (cherry picked from commit 78212ad). Conflict: THIRD_PARTY_NOTICES.md keeps the 0.34.0 table; the T3 Code row now lists every ported file, as on main. Co-Authored-By: Claude Opus 5.5 <[email protected]>
…ews (#4881) Backport of #4881 to the 0.34 release line, reworked for the 0.34.0 code. `display_only:true` on get_window_state (with include_accessibility_tree:false) returns the window's pixels and metadata but publishes, refreshes and removes no snapshot and registers no action capture, so a preview polling the window several times a second (T3 Code's picture-in-picture) no longer stales the agent's element tokens or pixel frame. It maps onto the existing internal observation-only read on macOS, Windows and Linux; on macOS it also skips the background_input probe. The contract matches T3 Code's Linux patch to Cua Driver 0.34.0 (pingdotgg/t3code#16975, MIT, Copyright (c) 2026 T3 Tools Inc.) word for word: the schema property T3 feature-detects, the refusal `display_only requires include_accessibility_tree:false`, and the `display_only` / `frame_note` result fields. The typed contract (cua-driver-contract) and the UniFFI surface are unchanged. Differences from main's #4881: - main keeps the helper in cua_driver_core::window_state_view, which does not exist on 0.34; here it is cua_driver_core::display_only with the same strings and functions, and each backend adds the property to its own schema. - Not backported: plain screenshot-only reads refreshing the current snapshot in place on Windows and Linux (refresh_screenshot_for_session is 0.35 snapshot-store code). On 0.34.x a plain screenshot-only read behaves as in 0.34.0; display_only is the side-effect-free read. - No tool-description or skill text changes; the property's description carries the contract. cli-specs and the generated reference page gain the property (macOS regenerated from the native dump). (cherry picked from commit 4cbd096, with conflicts reworked) Co-Authored-By: Claude Opus 5.5 <[email protected]>
Adds main's live smoke (#4769, extended in #4881) to the 0.34 line so the patch release runs the same real-window check on windows-latest (WinForms) and ubuntu-latest (GTK3 on Xvfb). It keeps the harness and fixtures as on main and is cut down to the 0.34 surface: act by element_token with a fresh snapshot, and display_only previews (8 reads, then a click with the token from before the previews must still land; a tree walk with display_only is refused). Left out, because they exercise 0.35 changes: the lean default read, full_output, since diffs, run_actions, combo-box set_value, pid-less element_tokens, and the plain screenshot-only token check. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Bumps every Cua Driver version site listed in release-please-config.json (VERSION, the workspace Cargo.toml, the Python and TypeScript packages, SKILL.md and the cua-spacesd lockfiles), the driver Cargo.lock and this branch's .release-please-manifest.json to 0.34.1, and syncs the generated reference-doc versions with sync_driver_release_docs.py. The same 39 files the 0.34.0 release commit changed, plus the CHANGELOG entry. The CHANGELOG entry credits T3 Code (MIT, Copyright (c) 2026 T3 Tools Inc.) for the Linux fixes and the display_only contract. main's manifest stays at 0.34.0; this commit lives only on the release/cua-driver-0.34.x line. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
The release attribution step requires the version's changelog section to reference the pull request that lands the release commits. Co-Authored-By: Claude Opus 5.5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
T3 Code pins Cua Driver 0.34.0 by asset size and SHA-256, and only takes fixes from published releases. It still ships a local Linux patch of 0.34.0 (pingdotgg/t3code#16975). The fixes from that patch are now on main, but only reach users with 0.35.0 (#4738), which is on hold and changes the UniFFI ABI.
This PR prepares 0.34.1 on a release line cut from
cua-driver-rs-v0.34.0(b0968e1). It carries only those fixes and keeps the contract and UniFFI surface of 0.34.0, so T3's 0.34.0 JS/TS bindings keep working and T3 only updates its checksums and pin.Base is
release/cua-driver-0.34.x, not main. Nothing here merges into main, and main's.release-please-manifest.jsonstays at 0.34.0, so the nightly ancestry check is unaffected.What
Backported from main (each commit cites its source):
display_onlyon get_window_state (macOS, Windows, Linux)Release metadata,
chore(cua-driver): release 0.34.1: every version site inrelease-please-config.json, the driverCargo.lock, the three cua-spacesd lockfiles, this branch's manifest, and the reference-doc versions (sync_driver_release_docs.py). It touches the same 39 files the 0.34.0 release commit did, plus a CHANGELOG entry crediting T3 Code (MIT, Copyright (c) 2026 T3 Tools Inc.).validate_release_versions.py --product driverpasses.CI:
smoke-cua-driver-live.yml(main's live smoke, #4769) did not exist at 0.34.0. It is added here, cut down to the 0.34 surface: act by element_token, and 8display_onlyreads followed by a click with the pre-preview token. The lean-read,since, run_actions and combo checks exercise 0.35 changes, so they are left out.#4881 on 0.34
cua_driver_core::window_state_view, which does not exist on 0.34. Here it iscua_driver_core::display_only, with the same strings and functions. Each backend adds the property to its own schema, routesdisplay_onlyinto the existing_observation_onlypath, and marks the response. macOS also skips thebackground_inputprobe.display_only requires include_accessibility_tree:false, and thedisplay_only/frame_notefields.refresh_screenshot_for_sessionis 0.35 snapshot-store code). On 0.34.1 a plain screenshot-only read behaves as it did in 0.34.0.display_onlyis the side-effect-free read.cli-specsand the generated reference page gain the property; macOS was regenerated from the native dump, and the docs--checkpasses on macOS.Not included (0.35 only): the lean
get_window_statedefault,since/tree_format, the UniFFI/ABI changes from #4743 and #4767, and anything else on main after 0.34.0.ABI / UniFFI
No contract, UniFFI or ABI change against 0.34.0, checked three ways (macOS arm64):
cua-driver-contract,cua-driver-bindgen,include/, or the generated TS/Python bindings changed since the tag. The onlycua-driver-sdkchange is onepub(crate)allowlist entry (fix(cua-driver): pass CUA_DRIVER_RS_ENABLE_WAYLAND through to embedded hosts #4877) plus its test. There are no UDL files (proc-macro UniFFI).node scripts/generate-uniffi-bindings.mjs --checkagainst this branch'slibcua_driver_sdk.dylibreports "UniFFI bindings are up to date", so it regenerates byte-identical TS and Python bindings to the committed 0.34.0 ones.@trycua/[email protected]from npm, with itslibcua_driver_sdk.dylibswapped for this branch's build, imports, passes UniFFI's contract-version and per-function checksum checks, and serves a native call (currentMacOsPermissionStatus). A negative control (one expected checksum altered) fails withApiChecksumMismatch, so the check really runs. The exporteduniffi_*symbol sets of the published 0.34.0 dylib and this build are identical (512 symbols).Testing
cargo test -p cua-driver-core display_onlyand-p platform-macos get_window_statepass locally (macOS). Linux and Windows run in CI, along with the live smoke on ubuntu-latest and windows-latest.runner.ts --library cua-driver --checkpasses on macOS.Docs: Driver first-run Linux smoke/first-run, which is red by design until publish. It runs because feat(cua-driver): capture GNOME windows from their own actor (WinRects v10) #4882 touches_install-rust.sh, and it refuses whenever the source version (0.34.1) differs from the installer's baked release (0.34.0): "Source and baked release differ; review the intended release before running". The baked pin only advances after 0.34.1 is published. main ran this smoke green on feat(cua-driver): capture GNOME windows from their own actor (WinRects v10) #4882 at 0.34.0.no-release: the release is cut by tag, not by Release Please reading this title, so the squash-title check is exempted.release-on-merge.ymlalso skips on this label, so merging dispatches nothing.Publishing
Nothing is tagged, released or published by this PR. Publishing waits for Francesco's explicit "publish"; the runbook is in the maintainer's automation notes. Merging this PR into
release/cua-driver-0.34.xbuilds and publishes nothing: no workflow listens to pushes on that branch, andrelease-on-merge.ymlskips onno-release. The tagcua-driver-rs-v0.34.1is what starts the release pipeline.Credit
The Linux fixes and the
display_onlycontract are ported from T3 Code's patch to Cua Driver 0.34.0 (pingdotgg/t3code#16975). T3 Code is MIT-licensed, Copyright (c) 2026 T3 Tools Inc.; credited inlibs/cua-driver/rust/THIRD_PARTY_NOTICES.mdand the CHANGELOG.Linear: CUA-1239
🤖 Generated with Claude Code