Release v0.9.5: Maestro CLI 2.10.0 - #77
Merged
Merged
Conversation
Maestro 2.6 removed `maestro studio`, which kept the Android/iOS drivers warm and served the web session's HTTP API. The keepers now run `maestro <flags> mcp --no-viewer`, whose per-device session holds the driver for the life of the process: - Android: hierarchy/driver_keeper.rs (was studio.rs), gRPC on :7001 - iOS simulator: runner on :22087, same readiness probes - Web: commands via the MCP `run` tool, hierarchy via `inspect_screen`, live preview via a CDP screencast of the keeper's Chrome (shared with the run mirror in web_session/cdp.rs) Orphan sweeps are scoped by the global flags (--udid / --device / -p web) so a user's own `maestro mcp` is never killed. REQUIRED_MAESTRO is now 2.10.0; the step parser and completions learn the 2.9 dark-mode commands and the swipe relative-point suffix. Physical iPhones still need the patched 2.5.1 jars and are knowingly broken until the bridge is updated.
The managed install short-circuited on any recorded maestro path, so a user whose app had installed 2.5.1 would keep it forever. The manifest now records the version maestro was installed at; a mismatch (or a legacy manifest without one) reads as not installed, and the automatic setup fetches the pinned release.
push() delays inserting a toast by 180 ms when another one is open. A quick operation (driver recovery takes ~100 ms) dismissed its toast inside that window: the dismiss matched nothing, then the toast was inserted and, being persistent, stayed up forever. Pending toasts are now tracked so such a dismiss cancels the insert.
… flow Since maestro 2.7 these commands write into the run's debug bundle (<bundle>/<flow>/takeScreenshot/<path>.png) instead of the working directory, so the screenshot bank reported every capture as missing. Each run now gets its own flattened bundle (--debug-output --flatten-debug-output), and its command outputs are copied back to the flow's directory before runner:exit, where maestro 2.5 used to put them.
FlowScrollGrid drives its cells from the container's scroll progress. A gallery that fits without scrolling (e.g. 6 web baselines) never moves off progress 0, so every card stayed half-size, offset and faded, leaving huge gaps. It now renders a static grid unless the container actually scrolls. When it does animate, clamping the keyframe offsets into [0, 1] piled the first row's entry keyframes up at 0, so it also started shrunken. Offsets are now re-sampled with toUnitKeyframes, which keeps the curve and computes the real value at both edges. Web baselines also get a globe icon instead of the Android logo.
Only the macOS/Windows window hiders use it since the keeper stopped spawning maestro itself, so Linux CI failed on an unused import.
|
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.


Summary
Moves Maestro Deck from Maestro CLI 2.5.1 to 2.10.0 and bumps the app to v0.9.5.
Maestro 2.6 removed
maestro studio, which the app used to keep device drivers warm and, on web, as the browser's HTTP API. The three keepers now runmaestro <flags> mcp --no-viewer, which keeps one driver session per device for as long as the process lives:hierarchy/driver_keeper.rs(wasstudio.rs). The fast gRPC hierarchy path on :7001 is unchanged.runtool, the hierarchy throughinspect_screen(flattened to the existing element format, so the tap resolver and inspector are untouched), and the live preview is a CDP screencast of the keeper's Chrome, shared with the run mirror inweb_session/cdp.rs.--udid/--device/-p web), so a user's ownmaestro mcpis never killed.Other changes
REQUIRED_MAESTROis now 2.10.0. The managed setup records the version it installed, and re-downloads a managed Maestro installed at another version.takeScreenshot/startRecordingwrite into the run's debug bundle instead of the working directory. Each run now gets its own flattened bundle (--debug-output … --flatten-debug-output), and those files are copied back next to the flow beforerunner:exit, so the screenshot bank finds them again.at <point>suffix; Billy's prompt lists the dark-mode commands.Known limitation
Physical iPhones still need the devicelab-patched Maestro 2.5.1 jars (BlueShork/maestro-ios-device), so they don't work with 2.10.0 until the bridge is updated. Cloud workers keep their own pinned Maestro and are not affected by this PR.
Test plan
cargo clippy --all-targets -D warnings,cargo fmt --check, 296 Rust teststsc,eslint, 541 frontend testsmaestro testoutput byte-identical between 2.5.1 and 2.10.0 on the same flowMAESTRO_BIN=…):web_keeper_end_to_end,android_keeper_end_to_endon a physical Samsung,ios_sim_keeper_end_to_endandcapture_with_touch_injection_does_not_panicon an iPhone 17 simulator🤖 Generated with Claude Code