Skill 安装
多 Agent 安装npx skills add https://github.com/callstackincubator/agent-device --skill dogfood
使用 npx skills 快速安装,支持将 Skill 添加到多个兼容的 AI Agent。
Skill 调研报告
callstackincubator/agent-device#dogfood
Skill 更新日志
版本列表
v0.21.15 最新
## What's Changed
* fix(android): carry the field's hint text on the snapshot node as placeholder by @okwasniewski in https://github.com/callstack/agent-device/pull/2927
* fix(timeouts): prove request envelopes cover their worst-case work by @thymikee in https://github.com/callstack/agent-device/pull/2916
* fix(android): return from an app open only after the launched app is readable by @thymikee in https://github.com/callstack/agent-device/pull/2895
* fix(wait): report readiness work that consumed the wait budget by @thymikee in https://github.com/callstack/agent-device/pull/2893
* refactor(ios-runner): make the snapshot quality verdict state a closed enum by @thymikee in https://github.com/callstack/agent-device/pull/2888
* refactor(macos): derive macOS surface routing from one owner table by @thymikee in https://github.com/callstack/agent-device/pull/2886
* fix(android): fill verification samples until a deadline instead of three fixed points by @okwasniewski in https://github.com/callstack/agent-device/pull/2926
* fix(android): carry the checked state of a checkable control on the snapshot node by @okwasniewski in https://github.com/callstack/agent-device/pull/2913
* test(android): drop byte-identical duplicate text-input cases by @thymikee in https://github.com/callstack/agent-device/pull/2931
* feat(android): a helper capture carries the display's pixel density in its snapshot metadata by @okwasniewski in https://github.com/callstack/agent-device/pull/2928
* refactor(provider-webdriver): remove superseded cloud runtime factories by @thymikee in https://github.com/callstack/agent-device/pull/2930
* test(ios-runner): pin production-built runner requests in a golden table TS and Swift both verify by @thymikee in https://github.com/callstack/agent-device/pull/2900
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.14...v0.21.15
v0.21.14
## What's Changed
* docs(adr): rewrap the overlong ADR 0013 gesture-schedule line by @thymikee in https://github.com/callstack/agent-device/pull/2874
* ci(diagnose): retire the 1874 diagnose loop by @thymikee in https://github.com/callstack/agent-device/pull/2875
* docs(ios-runner): point RUNNER_PROTOCOL.md at the current declarations and document recovery and busy codes by @thymikee in https://github.com/callstack/agent-device/pull/2876
* test(ios): recover the E2E visibility search from a scroll that overshoots its target by @thymikee in https://github.com/callstack/agent-device/pull/2883
* fix(ios): drop -Werror from runtime clang builds and cache the fold helper build by @thymikee in https://github.com/callstack/agent-device/pull/2858
* fix(ios): parse the Xcode 27 time-profile stack by @thymikee in https://github.com/callstack/agent-device/pull/2889
* fix(interaction): carry one post-gesture outcome on the tree and disclose it on every route by @thymikee in https://github.com/callstack/agent-device/pull/2864
* fix(apple): refuse fold on a scoped simulator set at runtime admission by @thymikee in https://github.com/callstack/agent-device/pull/2887
* refactor(ios): make unscoped simctl argv a type error at the Apple tool port by @thymikee in https://github.com/callstack/agent-device/pull/2898
* fix(install): send a default User-Agent with app-source downloads (#2842) by @alcpereira in https://github.com/callstack/agent-device/pull/2846
* fix(android): carry the content description beside the label on the snapshot node by @okwasniewski in https://github.com/callstack/agent-device/pull/2912
* docs(adr): repair 0004 paths, record the RUNNER_BUSY asymmetry, settle 0026 status by @thymikee in https://github.com/callstack/agent-device/pull/2909
* fix(ios-runner): one synthesize-then-fallback helper; sequence taps use the standalone tap policy by @thymikee in https://github.com/callstack/agent-device/pull/2865
* fix(ios): find a popover dismiss region in one query instead of reading every element by @thymikee in https://github.com/callstack/agent-device/pull/2901
* test(ios): wait out the launch an accepted deep-link confirmation releases by @thymikee in https://github.com/callstack/agent-device/pull/2902
* fix(android): carry the heading flag and the role description on the snapshot node by @okwasniewski in https://github.com/callstack/agent-device/pull/2915
* chore: remove CHANGELOG.md in favor of generated release notes by @thymikee in https://github.com/callstack/agent-device/pull/2922
* refactor(ios-e2e): use canonical wait reasons in confirmation helper by @thymikee in https://github.com/callstack/agent-device/pull/2919
* test(android): a content description change invalidates snapshot reuse and survives the selector digest by @okwasniewski in https://github.com/callstack/agent-device/pull/2920
* fix(ios): carry the snapshot viewport across the runner boundary as a declared fact by @thymikee in https://github.com/callstack/agent-device/pull/2908
* refactor(ios): brand the simctl builders and require the brand where runXcrun runs simctl by @thymikee in https://github.com/callstack/agent-device/pull/2917
* perf(ios): shorten smoke critical path with affected XCTest selection by @thymikee in https://github.com/callstack/agent-device/pull/2896
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.13...v0.21.14
v0.21.13
## What's Changed
* fix(ios): derive selected from the AX bridge traits word by @thymikee in https://github.com/callstack/agent-device/pull/2768
* fix(ios): pay for one toolchain in the snapshot bridge identity read (#2712) by @thymikee in https://github.com/callstack/agent-device/pull/2765
* refactor(replay): bootstrap packages/replay-port with the builtin-vars leaf (#2663) by @thymikee in https://github.com/callstack/agent-device/pull/2769
* fix(recording): export touch overlay at capture size, never black (#2707) by @thymikee in https://github.com/callstack/agent-device/pull/2767
* refactor(contracts): move unconfirmed fill evidence into a leaf module by @thymikee in https://github.com/callstack/agent-device/pull/2778
* fix(ios): derive hittable from geometric actionability on the AX bridge by @thymikee in https://github.com/callstack/agent-device/pull/2775
* docs(command-registry): state what the descriptor root actually guarantees by @thymikee in https://github.com/callstack/agent-device/pull/2779
* refactor(command-registry): place the literalness guards beside the unions they constrain by @thymikee in https://github.com/callstack/agent-device/pull/2805
* docs(adr): retire the parity-gate claim, state press-shape refusal, record the descriptor-root block by @thymikee in https://github.com/callstack/agent-device/pull/2808
* refactor(ios): declare runner screen-capture facts at the owning contract by @thymikee in https://github.com/callstack/agent-device/pull/2813
* refactor(move): split runner failure classification out of the wire contract by @thymikee in https://github.com/callstack/agent-device/pull/2809
* refactor(move): collocate the daemon device family under src/daemon/device by @thymikee in https://github.com/callstack/agent-device/pull/2780
* fix(ios): report capture refusals as typed reasons in back-fallback and recording by @thymikee in https://github.com/callstack/agent-device/pull/2766
* fix(web): refuse the press shapes a browser click cannot drive by @thymikee in https://github.com/callstack/agent-device/pull/2806
* refactor(contracts): make the alert legs optional members and drop their denials by @thymikee in https://github.com/callstack/agent-device/pull/2807
* refactor(contracts): drop the Limrun iOS denials its facts already make by @thymikee in https://github.com/callstack/agent-device/pull/2815
* refactor(interactors): stop handing web and Vega a full wall of refusals by @thymikee in https://github.com/callstack/agent-device/pull/2816
* fix(scroll): name what a scroll observed and read an edge off one tree by @thymikee in https://github.com/callstack/agent-device/pull/2770
* fix(scroll): observe the movement a directional scroll can claim by @thymikee in https://github.com/callstack/agent-device/pull/2776
* fix(scroll): answer with the movement a directional scroll observed by @thymikee in https://github.com/callstack/agent-device/pull/2771
* docs(scroll): tell the caller what a scroll's movement field means by @thymikee in https://github.com/callstack/agent-device/pull/2772
* refactor(cli): drop the inert --device-hub option by @thymikee in https://github.com/callstack/agent-device/pull/2821
* refactor(platform-apple): collapse the runner client chain and merge the command trait table by @thymikee in https://github.com/callstack/agent-device/pull/2822
* refactor(mcp): project command output schemas from their owning family by @thymikee in https://github.com/callstack/agent-device/pull/2810
* refactor(ios-runner): key TS runner retry rules on typed connect-failure reasons by @thymikee in https://github.com/callstack/agent-device/pull/2820
* fix(ios-runner): log the fast app guard and gesture policy only when they change by @okwasniewski in https://github.com/callstack/agent-device/pull/2814
* fix(daemon): refuse to replace a reachable daemon newer than the client by @okwasniewski in https://github.com/callstack/agent-device/pull/2811
* fix(ios): spawn the AX bridge and fold helper inside the scoped simulator set by @thymikee in https://github.com/callstack/agent-device/pull/2818
* refactor(ios): one simctl --set builder and one simulator state parser by @thymikee in https://github.com/callstack/agent-device/pull/2824
* fix(ios): let a Simulator open wait out a slow app discovery before observing the launch by @thymikee in https://github.com/callstack/agent-device/pull/2838
* fix(ios): request runner synthesis only on platforms that synthesize by @thymikee in https://github.com/callstack/agent-device/pull/2835
* test(ios): expect the AX bridge to derive hittability in the depth-frontier E2E by @thymikee in https://github.com/callstack/agent-device/pull/2832
* fix(apple): classify visionOS simulators from their simctl runtime by @thymikee in https://github.com/callstack/agent-device/pull/2829
* fix(install): answer the direct lookup in the shape Node asks for (#2840) by @alcpereira in https://github.com/callstack/agent-device/pull/2844
* fix(ios): keep alert activation out of XCTest's interruption handling by @thymikee in https://github.com/callstack/agent-device/pull/2843
* chore(ios-runner): delete the unreachable synthesized continuous drag profile by @thymikee in https://github.com/callstack/agent-device/pull/2825
* chore(ios-runner): remove unset env knobs, the dead back wire command, and unreachable paths by @thymikee in https://github.com/callstack/agent-device/pull/2828
* refactor(ios-runner): key runner retry decisions on typed failures, not message text by @thymikee in https://github.com/callstack/agent-device/pull/2831
* refactor(ios-runner): drop the runner's snapshot warning text; the verdict carries every disclosure by @thymikee in https://github.com/callstack/agent-device/pull/2834
* refactor(ios-runner): restrict the tap-witness synthesized type route to the bare submit key by @thymikee in https://github.com/callstack/agent-device/pull/2845
* fix(macos): refuse --fullscreen on every helper-captured surface by @thymikee in https://github.com/callstack/agent-device/pull/2849
* fix(install): name the network error code when an app-source download fails by @alcpereira in https://github.com/callstack/agent-device/pull/2848
* refactor(move): move the runner's inline unit tests into UnitTests/ by @thymikee in https://github.com/callstack/agent-device/pull/2854
* refactor(move): split RunnerTests+CommandExecution.swift along command families by @thymikee in https://github.com/callstack/agent-device/pull/2855
* test(ios): stop cold-host timing from failing the occupancy test by @thymikee in https://github.com/callstack/agent-device/pull/2847
* fix(interaction): report an unsettled post-gesture surface instead of a definite miss by @thymikee in https://github.com/callstack/agent-device/pull/2839
* refactor(platform-apple): dedupe xctrace logic behind perf-xctrace and split perf.ts by @thymikee in https://github.com/callstack/agent-device/pull/2823
* fix(ios-runner): keep snapshot-plan target state on main and bound the query sweep by its slice by @thymikee in https://github.com/callstack/agent-device/pull/2836
* fix(ios): never launch a not-running session app from an observation by @thymikee in https://github.com/callstack/agent-device/pull/2852
* fix(ios): keep devicectl hints on physical install and delete the dead install paths by @thymikee in https://github.com/callstack/agent-device/pull/2857
* fix(ios-runner): return work that finished at the timeout boundary and bound recorder frame capture by @thymikee in https://github.com/callstack/agent-device/pull/2837
* fix(ios-runner): resend read-only commands across the RUNNER_BUSY drain window by @okwasniewski in https://github.com/callstack/agent-device/pull/2804
* fix(ios): cut modal-contained presentations from bridge snapshots by @thymikee in https://github.com/callstack/agent-device/pull/2850
* fix(apple-runner): resend a read only on the runner's busy refusal by @thymikee in https://github.com/callstack/agent-device/pull/2863
* fix(providers): name the simulator HID helper in the fold refusal hints by @thymikee in https://github.com/callstack/agent-device/pull/2873
* fix(selectors): retire the stored tree after a side effect or a native read by @thymikee in https://github.com/callstack/agent-device/pull/2869
* fix(ios-runner): adopt the scene lifecycle so the host app launches on the iOS 27 SDK by @thymikee in https://github.com/callstack/agent-device/pull/2867
## New Contributors
* @alcpereira made their first contribution in https://github.com/callstack/agent-device/pull/2844
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.12...v0.21.13
v0.21.12
## What's Changed
* feat(ios): fold Duo headlessly through simulator HID by @thymikee in https://github.com/callstack/agent-device/pull/2762
* feat(ios): animate fold with timed hinge keyframes by @thymikee in https://github.com/callstack/agent-device/pull/2763
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.11...v0.21.12
v0.21.11
## What's Changed
* chore(gates): drop the contact-sheet over-ceiling approval now that main carries it by @thymikee in https://github.com/callstack/agent-device/pull/2757
* fix(ios): read scroll indicator ownership from the parent edge by @thymikee in https://github.com/callstack/agent-device/pull/2758
* test(ios): enforce scroll-eligibility parity and settle ScrollArea for macOS by @thymikee in https://github.com/callstack/agent-device/pull/2759
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.10...v0.21.11
v0.21.10
## What's Changed
* fix(ios): bind Safari as the target app for simulator web-URL opens by @thymikee in https://github.com/callstack/agent-device/pull/2761
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.9...v0.21.10
v0.21.9
## What's Changed
* feat(ios-runner): hand physical iOS runners across daemon restarts by @thymikee in https://github.com/callstack/agent-device/pull/2692
* chore(worktrees): stop copying .env into agent worktrees by @thymikee in https://github.com/callstack/agent-device/pull/2732
* fix(fold): require a settled hinge before reporting half-open by @thymikee in https://github.com/callstack/agent-device/pull/2734
* feat(settings): read and apply the preferred text size by @thymikee in https://github.com/callstack/agent-device/pull/2723
* docs(adr): record which runner capture surface sees the lit foldable panel by @thymikee in https://github.com/callstack/agent-device/pull/2739
* fix(ios): keep list rows after a selectable text row in interactive snapshots by @okwasniewski in https://github.com/callstack/agent-device/pull/2740
* fix(ios-runner): decode targetActivation prior states in the SDK's order by @thymikee in https://github.com/callstack/agent-device/pull/2735
* fix(ios): serve a simulator recording whose recorder died with its daemon by @thymikee in https://github.com/callstack/agent-device/pull/2736
* test(ios): close the snapshot convergence evidence sweep at a final head (#2188) by @thymikee in https://github.com/callstack/agent-device/pull/2750
* fix(fold): report screen dimensions in their native-panel coordinate space by @thymikee in https://github.com/callstack/agent-device/pull/2737
* fix(apple): harden Device Hub discovery and sidebar recovery by @thymikee in https://github.com/callstack/agent-device/pull/2733
* refactor(capture-kit): resolve recording helper scripts from swift-cache by @thymikee in https://github.com/callstack/agent-device/pull/2743
* feat(recording): decode contact-sheet frames from an exported clip by @thymikee in https://github.com/callstack/agent-device/pull/2744
* feat(recording): choose the frames a contact sheet shows by @thymikee in https://github.com/callstack/agent-device/pull/2745
* feat(capture-kit): paint the contact-sheet grid onto one PNG by @thymikee in https://github.com/callstack/agent-device/pull/2746
* feat(recording): build a contact sheet from a finished recording by @thymikee in https://github.com/callstack/agent-device/pull/2752
* feat(cli): read a recording with record contact-sheet by @thymikee in https://github.com/callstack/agent-device/pull/2747
* fix(ios): target the active window for foldable interactions by @thymikee in https://github.com/callstack/agent-device/pull/2724
* test(examples): manual iPhone Duo pose-transition semantic checks by @thymikee in https://github.com/callstack/agent-device/pull/2738
* docs(adr): scroll clip authority — ownership is the parent edge by @thymikee in https://github.com/callstack/agent-device/pull/2755
* fix(ios): capture the display that hosts the app, not the main screen by @thymikee in https://github.com/callstack/agent-device/pull/2741
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.8...v0.21.9
v0.21.8
## What's Changed
* refactor(system-button): declare home, app-switcher and action-button as one button family by @thymikee in https://github.com/callstack/agent-device/pull/2715
* feat(diff): accept JPEG inputs for screenshot comparison by @thymikee in https://github.com/callstack/agent-device/pull/2718
* fix(macos-helper): hold synthetic clicks long enough to be delivered by @thymikee in https://github.com/callstack/agent-device/pull/2716
* feat(fold): pose a foldable iPhone simulator through Device Hub and verify it with CoreDevice by @thymikee in https://github.com/callstack/agent-device/pull/2717
* docs(commands): note that timing-based apps read a fast --count 2 as a double-click by @thymikee in https://github.com/callstack/agent-device/pull/2721
* feat(ios-runner): key runner startup failures on typed reasons by @thymikee in https://github.com/callstack/agent-device/pull/2688
* feat(ios-runner): read developer mode and disk image state from the device by @thymikee in https://github.com/callstack/agent-device/pull/2690
* chore: stop tracking .agent-device and keep the replay test from writing into the repo by @thymikee in https://github.com/callstack/agent-device/pull/2722
* feat(maestro): support setPermissions and launchApp.permissions by @Rohit3523 in https://github.com/callstack/agent-device/pull/2363
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.7...v0.21.8
v0.21.7
## What's Changed
* refactor(daemon): move the durable-capture admission family to capture-kit by @thymikee in https://github.com/callstack/agent-device/pull/2651
* fix(ios): publish captured keyboard geometry in the app's orientation space by @thymikee in https://github.com/callstack/agent-device/pull/2653
* refactor(ios-runner): decode every runner response body in one module by @thymikee in https://github.com/callstack/agent-device/pull/2666
* refactor(replay): move the response and observation vocabulary out of the daemon by @thymikee in https://github.com/callstack/agent-device/pull/2668
* refactor(ios): move the coordinate-space rule into the presentation package by @thymikee in https://github.com/callstack/agent-device/pull/2664
* feat(ios): publish the captured keyboard band as a producer-declared fact by @thymikee in https://github.com/callstack/agent-device/pull/2670
* refactor(ios-runner): give runner sessions a lifecycle state by @thymikee in https://github.com/callstack/agent-device/pull/2673
* feat(cli): open --wait, flag suggestions, and refusals that name what to run by @thymikee in https://github.com/callstack/agent-device/pull/2665
* refactor(ios): normalize snapshot geometry in one pass after acquisition (#2661) by @thymikee in https://github.com/callstack/agent-device/pull/2669
* fix(limrun): write the iOS screenshot as PNG instead of Limrun's JPEG bytes by @okwasniewski in https://github.com/callstack/agent-device/pull/2645
* refactor(replay): pass the Maestro script-trust flag as a command input (#2663 PR A) by @thymikee in https://github.com/callstack/agent-device/pull/2675
* refactor(cli): fold cli-schema into commands/schema, move batch-steps into commands/batch (#2679) by @thymikee in https://github.com/callstack/agent-device/pull/2678
* refactor(ios): drop the flat sweep's discarded hittable computation by @thymikee in https://github.com/callstack/agent-device/pull/2684
* refactor(platform-apple): derive the runner host port instead of mirroring host-kit by @thymikee in https://github.com/callstack/agent-device/pull/2689
* fix(android): classify the clipboard shell response, not its exit status by @thymikee in https://github.com/callstack/agent-device/pull/2676
* refactor(replay): cut the daemon out of the replay unit's imports (#2663 PR A, second half) by @thymikee in https://github.com/callstack/agent-device/pull/2672
* refactor(replay): bind the session and dispatch envelope inside the unit (#2663 PR A′) by @thymikee in https://github.com/callstack/agent-device/pull/2686
* feat(limrun): screen recording through the provider's server-side recorder by @okwasniewski in https://github.com/callstack/agent-device/pull/2646
* fix(ios): capture the lit panel on foldable Apple devices by @thymikee in https://github.com/callstack/agent-device/pull/2703
* fix(device-shell): one typed device-shell boundary for adb, exec-out, and hdc by @thymikee in https://github.com/callstack/agent-device/pull/2611
* test(ios): size the alert command's deadline to the host's own reads by @thymikee in https://github.com/callstack/agent-device/pull/2708
* docs(ios): scope the overlay defect to touch drawing, not rot90 by @thymikee in https://github.com/callstack/agent-device/pull/2709
* feat(action-button): press the iPhone Action Button by @thymikee in https://github.com/callstack/agent-device/pull/2702
* test(android): name the crash in failed-step evidence by @thymikee in https://github.com/callstack/agent-device/pull/2710
* feat(ios-runner): disclose target re-activation on the command that caused it (#2682) by @thymikee in https://github.com/callstack/agent-device/pull/2691
* feat(#2682): disclose the target re-activation on every capture-consuming command by @thymikee in https://github.com/callstack/agent-device/pull/2693
* fix(test-app): launch the lab on iOS 27.1 by adopting the scene lifecycle by @thymikee in https://github.com/callstack/agent-device/pull/2704
* feat(test-app): fit the lab to regular-width panels by @thymikee in https://github.com/callstack/agent-device/pull/2705
* test: derive the command-surface enumerations that restated a declaration by @thymikee in https://github.com/callstack/agent-device/pull/2713
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.6...v0.21.7
v0.21.6
## What's Changed
* refactor(android): separate adb transport addressing from the command payload by @thymikee in https://github.com/callstack/agent-device/pull/2632
* fix(daemon): stop cwd-scoped session resources by store address on close by @AdzeB in https://github.com/callstack/agent-device/pull/2648
* refactor(maestro): move the daemon-side runtime port out of src/daemon by @thymikee in https://github.com/callstack/agent-device/pull/2652
* fix(host-kit): process lock proves ownership before release and never evicts a live owner by @thymikee in https://github.com/callstack/agent-device/pull/2598
* fix(ios): Simulator AX bridge reports enabled from the NotEnabled trait by @okwasniewski in https://github.com/callstack/agent-device/pull/2644
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.5...v0.21.6
v0.21.5
## What's Changed
* feat(limrun): long press on iOS direct sessions via HID touch primitives by @okwasniewski in https://github.com/callstack/agent-device/pull/2642
* fix(ios): keep an identifier hook the fold cannot prove inert by @thymikee in https://github.com/callstack/agent-device/pull/2643
* fix(ios-snapshot): prepare the AX bridge off the capture deadline by @thymikee in https://github.com/callstack/agent-device/pull/2607
* fix(limrun): batch the iOS double tap so the inter-tap gap stays on-device by @okwasniewski in https://github.com/callstack/agent-device/pull/2641
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.4...v0.21.5
v0.21.4
## What's Changed
* refactor(android): drop the snapshot helper manifest installArgs by @thymikee in https://github.com/callstack/agent-device/pull/2618
* fix(limrun): witness the field a fill taps before typing by @thymikee in https://github.com/callstack/agent-device/pull/2592
* docs(agents): answer review findings at the owning rule by @thymikee in https://github.com/callstack/agent-device/pull/2620
* fix(android): name the OEM install dialog on helper install timeouts by @thymikee in https://github.com/callstack/agent-device/pull/2619
* fix(apple-runner): recovery decisions read typed rules, and a deadline gets a verdict by @thymikee in https://github.com/callstack/agent-device/pull/2600
* refactor(settings): derive the permission vocabulary from one declaration by @thymikee in https://github.com/callstack/agent-device/pull/2625
* feat(contracts): name the keyboard band that owns a tap point by @thymikee in https://github.com/callstack/agent-device/pull/2601
* fix(interaction): refuse taps whose target sits behind the visible keyboard by @thymikee in https://github.com/callstack/agent-device/pull/2602
* fix(ios-runner): dispose a busy runner on close so open boots clean (#2552) by @thymikee in https://github.com/callstack/agent-device/pull/2605
* test(apple-runner): pin the close release truth table at the lifecycle seam by @thymikee in https://github.com/callstack/agent-device/pull/2623
* fix(ios): keep the runner alive through hostile snapshots by @okwasniewski in https://github.com/callstack/agent-device/pull/2621
* test(ios): resolve the host app before stubbing its tree snapshot by @okwasniewski in https://github.com/callstack/agent-device/pull/2633
* fix: carry response warnings to every surface, and stamp the sheet behind a refusal by @thymikee in https://github.com/callstack/agent-device/pull/2571
* feat(record): report whether the recorder stopped beside the export by @thymikee in https://github.com/callstack/agent-device/pull/2613
* feat(record): export a recording from a copy of what its recorder wrote by @thymikee in https://github.com/callstack/agent-device/pull/2631
* fix(runner): bound XCTest's idle wait around alert activation by @thymikee in https://github.com/callstack/agent-device/pull/2610
* fix(host-kit): a killed command settles on its exit, and background exec cannot take a timeout by @thymikee in https://github.com/callstack/agent-device/pull/2599
* fix(android): warn about the 180s record limit only when the last chunk ended early by @thymikee in https://github.com/callstack/agent-device/pull/2636
* test: route test scratch through mkdtempForTest; forbid node:os in tests by @thymikee in https://github.com/callstack/agent-device/pull/2629
* fix(android): read device ownership off the device, not off adb by @thymikee in https://github.com/callstack/agent-device/pull/2604
* feat(ios): type into the Apple Pay sheet by serving PassbookUIService in place by @okwasniewski in https://github.com/callstack/agent-device/pull/2639
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.3...v0.21.4
v0.21.3
## What's Changed
* refactor(cli-schema): orient the schema layer above commands (#2543 step 3) by @thymikee in https://github.com/callstack/agent-device/pull/2590
* fix(daemon): key the implicit session by workspace and platform by @thymikee in https://github.com/callstack/agent-device/pull/2587
* docs(agents): delete the file-size tiers nobody enforces by @thymikee in https://github.com/callstack/agent-device/pull/2597
* refactor(shell-quote): one implementation, reached through the runner host port by @thymikee in https://github.com/callstack/agent-device/pull/2595
* refactor(daemon): stop the client value-importing daemon internals (#2559) by @thymikee in https://github.com/callstack/agent-device/pull/2594
* refactor(daemon): resolve device interactors through a composed capability by @thymikee in https://github.com/callstack/agent-device/pull/2593
* perf(scroll-until): answer every candidate from one visibility index by @thymikee in https://github.com/callstack/agent-device/pull/2596
* fix(android): install the snapshot and IME helpers as plain, non-test-only APKs by @thymikee in https://github.com/callstack/agent-device/pull/2603
* fix(record): keep a failed capture's evidence for the retry by @thymikee in https://github.com/callstack/agent-device/pull/2591
* fix(browserstack): send W3C-only capabilities so bstack:options labels are honoured by @Procopis-QG in https://github.com/callstack/agent-device/pull/2608
* feat(browserstack): add --provider-appium-version to pin the hosted Appium server by @Procopis-QG in https://github.com/callstack/agent-device/pull/2609
## New Contributors
* @Procopis-QG made their first contribution in https://github.com/callstack/agent-device/pull/2608
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.2...v0.21.3
v0.21.2
## Highlights
v0.21.2 makes navigation take fewer steps and improves recovery when captures, recordings, or sessions hit a problem.
- **Find off-screen elements in one command**. `scroll --until ` scrolls and checks until the target is on screen. Scrolls also stay above the keyboard, and edge scrolling stops when a surface gets stuck.
- **Automate iOS web sign-in sheets in place**. Interact with `ASWebAuthenticationSession` login sheets without switching away from the app or cancelling its authentication session.
- **Snapshots and waits report more useful results**. Cut-off captures are disclosed across platforms, regular iOS snapshots honor `--depth` across backends, and waits keep polling through retriable runner refusals.
- **Recordings recover more reliably**. Retrying `record stop` returns the finished export, Simulator startup and shutdown recover more safely, and stale Android recording evidence no longer blocks the next recording. Android results also report the duration actually captured, with a warning when it falls short of the requested window.
- **Maestro gains inline JavaScript expressions**. Use `evalScript` to compute `output` values for later steps. Exported flows also preserve `tel:` and `mailto:` links, and replay results produce well-formed JUnit XML.
- **Sessions survive more interruptions**. Matching installed versions reuse the same daemon without unnecessary replacement, rebooted devices can shed stale claims, and admitted work keeps its lease while it runs. BrowserStack allocation settings and cancelled cloud screen reads are handled more consistently.
## What's Changed
* refactor(contracts): additive capability facts pilot on touch family by @thymikee in https://github.com/callstack/agent-device/pull/2420
* refactor(commands): declare a command option once and derive its surfaces by @thymikee in https://github.com/callstack/agent-device/pull/2421
* fix(android): ease controlled scrolls within the requested duration by @thymikee in https://github.com/callstack/agent-device/pull/2393
* fix(ios): serve regular --depth from every snapshot backend by @thymikee in https://github.com/callstack/agent-device/pull/2431
* fix(check): honor Vitest worker configuration by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2437
* fix(wait): retire native selector bypass and recover text observations by @thymikee in https://github.com/callstack/agent-device/pull/2440
* fix(snapshot): compare unchanged presentations by value by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2442
* test(daemon): split the two replay test files over the size tripwire by @thymikee in https://github.com/callstack/agent-device/pull/2455
* fix(ios): budget snapshot bridge test compile from the build ceiling by @thymikee in https://github.com/callstack/agent-device/pull/2454
* refactor(cli-schema): derive the flag tail of usage synopses by @thymikee in https://github.com/callstack/agent-device/pull/2456
* fix(ios): budget cold toolchain probes for the first-exec signature stall by @thymikee in https://github.com/callstack/agent-device/pull/2423
* refactor(contracts): additive capability facts on the keyboard family by @thymikee in https://github.com/callstack/agent-device/pull/2459
* refactor(contracts): additive capability facts on the gesture family by @thymikee in https://github.com/callstack/agent-device/pull/2460
* refactor(contracts): additive capability facts on the clipboard family by @thymikee in https://github.com/callstack/agent-device/pull/2464
* refactor(commands): declare project-config admission and recorder sanitization on the flag declaration by @thymikee in https://github.com/callstack/agent-device/pull/2453
* feat(scroll): find off-screen targets in one command with --until by @thymikee in https://github.com/callstack/agent-device/pull/2436
* fix(cli): declare projectConfig on the scroll --until flag by @thymikee in https://github.com/callstack/agent-device/pull/2472
* chore(layering): runner modules reach host-kit only through the runner host port by @thymikee in https://github.com/callstack/agent-device/pull/2470
* refactor(apple): carry one phase Deadline through the runner interfaces and test cancellation as a matrix by @thymikee in https://github.com/callstack/agent-device/pull/2473
* chore(gates): name the added modules and import paths when an eager closure grows by @thymikee in https://github.com/callstack/agent-device/pull/2471
* fix(maestro): preserve tel and mailto links in replay export by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2463
* fix(network): report iOS requests that reused a keep-alive connection by @boorad in https://github.com/callstack/agent-device/pull/2433
* fix(test): emit well-formed JUnit XML for replay results by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2477
* perf(package): strip comments from the Apple runner source the npm package ships by @thymikee in https://github.com/callstack/agent-device/pull/2467
* fix(ios): refuse Simulator bridge trees that end at a web view's remote content (#2484) by @thymikee in https://github.com/callstack/agent-device/pull/2486
* fix(orientation): disclose an unconfirmed rotation instead of asserting it by @prateekranka in https://github.com/callstack/agent-device/pull/2483
* fix(test): keep the working directory literal during glob discovery by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2490
* fix(android): retire completed recording evidence after pid reuse by @thymikee in https://github.com/callstack/agent-device/pull/2487
* fix(ios): reap orphaned simulator recorders with a graceful finalize window by @thymikee in https://github.com/callstack/agent-device/pull/2457
* chore(react-devtools): pin agent-react-devtools 0.5.0 for React Native 0.87+ by @thymikee in https://github.com/callstack/agent-device/pull/2488
* fix(selectors): collapse an unverified-hittability wrapper chain to its control by @prateekranka in https://github.com/callstack/agent-device/pull/2482
* fix(wait): poll through a retriable runner refusal instead of surrendering the budget by @thymikee in https://github.com/callstack/agent-device/pull/2493
* fix(test): prevent custom reporter exit-code wraparound by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2497
* feat(ios): drive ASWebAuthenticationSession sign-in sheets in place (#2438) by @thymikee in https://github.com/callstack/agent-device/pull/2448
* fix(ios): recover simulator recorder startup failures by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2447
* fix(browserstack): carry the full provider-allocation config over the lease_allocate envelope (#2494) by @thymikee in https://github.com/callstack/agent-device/pull/2495
* docs(website): swap in the new agent-device logotype and README banner by @thymikee in https://github.com/callstack/agent-device/pull/2502
* fix(selectors): resolve a wrapper chain's control for uniqueness reads by @thymikee in https://github.com/callstack/agent-device/pull/2501
* fix(scroll): pace edge passes to rest and stop a stuck surface by @thymikee in https://github.com/callstack/agent-device/pull/2499
* docs(adr-0011): narrow the offscreen rescue comment to the per-request surface policy by @thymikee in https://github.com/callstack/agent-device/pull/2465
* fix(diff): include maximum RGB distance at threshold one by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2508
* fix(ios): gate alert activation on a fresh hittable read by @thymikee in https://github.com/callstack/agent-device/pull/2506
* fix(test): preserve colliding diagnostic artifacts by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2507
* fix(aws): defer Android app launch until open by @dennisimoo in https://github.com/callstack/agent-device/pull/2512
* fix(android): carry accessibility selected state into snapshots by @thymikee in https://github.com/callstack/agent-device/pull/2515
* perf(screenshot): read the crop region instead of decoding the whole capture by @thymikee in https://github.com/callstack/agent-device/pull/2504
* perf(scripts): add a device-free PNG crop benchmark by @thymikee in https://github.com/callstack/agent-device/pull/2505
* feat(snapshot): disclose a cut capture on every platform; raise the iOS bridge node cap to 5000 by @thymikee in https://github.com/callstack/agent-device/pull/2510
* refactor(snapshot): drop the bridge truncation dimension; stop promising --scope for depth caps by @thymikee in https://github.com/callstack/agent-device/pull/2511
* fix(daemon): keep a discarded rejection from shutting the daemon down by @thymikee in https://github.com/callstack/agent-device/pull/2532
* chore(config): scope the qs override and drop dead fallow, worktree and prettier entries by @thymikee in https://github.com/callstack/agent-device/pull/2535
* fix(cloud): cancel a screen read that its caller gave up on by @thymikee in https://github.com/callstack/agent-device/pull/2516
* fix(daemon): let admitted work keep the lease it is working on by @thymikee in https://github.com/callstack/agent-device/pull/2517
* docs: fix phantom specifiers, the duplicate ADR 0019, and the Node floor by @thymikee in https://github.com/callstack/agent-device/pull/2533
* fix(record): replay the finished export from a retried record stop by @thymikee in https://github.com/callstack/agent-device/pull/2534
* fix(contracts): state the scroll keyboard clip once for every platform by @thymikee in https://github.com/callstack/agent-device/pull/2537
* fix(scroll): keep the swipe above the keyboard, refuse when it cannot by @thymikee in https://github.com/callstack/agent-device/pull/2503
* fix(android): keep a scroll's swipe out of the IME window by @thymikee in https://github.com/callstack/agent-device/pull/2514
* refactor(daemon): bind only the command families the daemon dispatches through by @thymikee in https://github.com/callstack/agent-device/pull/2548
* refactor(runtime): own provider-device admission behind a typed capability by @thymikee in https://github.com/callstack/agent-device/pull/2556
* test(layering): classify daemon edges that reach platform mechanics through a hub by @thymikee in https://github.com/callstack/agent-device/pull/2557
* fix(android-helper): build with the pinned build-tools version, fail on CI when unset by @thymikee in https://github.com/callstack/agent-device/pull/2568
* refactor(command-registry): move CLI flag grammar, text and aliases down (#2543) by @thymikee in https://github.com/callstack/agent-device/pull/2561
* refactor(daemon): cut the last edges into the CLI schema layer (#2543) by @thymikee in https://github.com/callstack/agent-device/pull/2562
* fix(cli): hand device-auth URLs to the browser without a shell by @thymikee in https://github.com/callstack/agent-device/pull/2567
* refactor(move): settle a device claim in its own module by @thymikee in https://github.com/callstack/agent-device/pull/2574
* feat(devices): answer when a device's current boot began by @thymikee in https://github.com/callstack/agent-device/pull/2575
* fix(daemon): take a foreign device claim the device's own reboot invalidated by @thymikee in https://github.com/callstack/agent-device/pull/2570
* fix(apple): carry the runner's sparse verdict through a viewport refusal by @thymikee in https://github.com/callstack/agent-device/pull/2572
* fix(android): retire recording evidence stranded by a re-adopted device id by @thymikee in https://github.com/callstack/agent-device/pull/2564
* fix(record): end the recorder a loaded host could not confirm by @thymikee in https://github.com/callstack/agent-device/pull/2565
* fix(android): report the clip an Android recording really captured by @thymikee in https://github.com/callstack/agent-device/pull/2566
* fix(daemon): let an installed version stand as its whole code identity by @thymikee in https://github.com/callstack/agent-device/pull/2569
* refactor(tests): share the router-open fixtures between its suites by @thymikee in https://github.com/callstack/agent-device/pull/2585
* refactor(recording): remove unused start trimming and its exclusive support code by @thymikee in https://github.com/callstack/agent-device/pull/2586
* feat(maestro): support evalScript inline JavaScript expressions by @Rohit3523 in https://github.com/callstack/agent-device/pull/2158
* docs(adr): ADR 0024 — screen recording as one coordinator with two facts (proposed) by @thymikee in https://github.com/callstack/agent-device/pull/2588
## New Contributors
* @boorad made their first contribution in https://github.com/callstack/agent-device/pull/2433
* @prateekranka made their first contribution in https://github.com/callstack/agent-device/pull/2483
* @dennisimoo made their first contribution in https://github.com/callstack/agent-device/pull/2512
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.1...v0.21.2
v0.21.1
## Highlights
v0.21.1 improves iOS snapshots, Android scrolling, and remote-device support.
- **Deep iOS snapshots recover more efficiently**. Large accessibility trees use bounded depth recovery, and repeated Simulator captures reuse learned depth hints. First taps are more resilient to optional probe failures.
- **Android scrolling stops more predictably**. Controlled scrolls suppress the fling at release, reducing overshoot when you ask for a specific distance.
- **Connect to HarmonyOS devices through a proxy**. The new `harmonyos-instance` lease backend keeps the selected device attached through commands and recording/replay.
- **Export more Maestro flows**. Replay exports now support Home actions and flows that switch between apps.
- **Apple performance sampling targets the right app**. Sampling stays scoped to the selected app's executable instead of accidentally including another Simulator's copy.
## What's Changed
* fix(ios): avoid duplicate alert routing queries by @thiagobrez in https://github.com/callstack/agent-device/pull/2398
* refactor(move): move the remaining package-ready modules out of src/core by @thymikee in https://github.com/callstack/agent-device/pull/2401
* refactor(daemon): move the device selection cluster into @agent-device/device-selection by @thymikee in https://github.com/callstack/agent-device/pull/2396
* refactor(move): move lease scope vocabulary into @agent-device/contracts by @thymikee in https://github.com/callstack/agent-device/pull/2380
* fix(android): honor scroll releaseBehavior to stop the fling overshoot by @thymikee in https://github.com/callstack/agent-device/pull/2372
* feat(remote): add HarmonyOS proxy lease backend by @bytemain in https://github.com/callstack/agent-device/pull/2266
* feat(maestro): export home actions from replay scripts by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2394
* feat(maestro): export replay flows that switch apps by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2407
* refactor(daemon): isolate Apple session observations by @PLASMA-FR in https://github.com/callstack/agent-device/pull/2405
* refactor(move): move the selector pipeline and interaction targeting into @agent-device/selectors by @thymikee in https://github.com/callstack/agent-device/pull/2397
* fix(apple): scope perf processes to the resolved app executable by @thiagobrez in https://github.com/callstack/agent-device/pull/2406
* chore: hoist shared snapshot/selector test fixtures into a single canonical location by @thymikee in https://github.com/callstack/agent-device/pull/2419
* test(daemon): split the three over-budget daemon test files along their source modules by @thymikee in https://github.com/callstack/agent-device/pull/2417
* perf(apple): gate the launch-observation probe on the snapshot circuit breaker by @thymikee in https://github.com/callstack/agent-device/pull/2391
* refactor(daemon): normalize lifecycle participation of platform resource owners by @thymikee in https://github.com/callstack/agent-device/pull/2415
* test(coverage): declare every public command's coverage judgments once by @thymikee in https://github.com/callstack/agent-device/pull/2418
* refactor(daemon): separate open-target policy from platform mechanics by @thymikee in https://github.com/callstack/agent-device/pull/2416
* fix(host-kit): resolve the code-signature root so a symlinked checkout stamps its own files by @thymikee in https://github.com/callstack/agent-device/pull/2429
* perf(ios): speed up deep snapshots and keep first taps reliable by @thymikee in https://github.com/callstack/agent-device/pull/2414
* test(ios): add a shared AX recovery conformance fixture with a host adapter by @thymikee in https://github.com/callstack/agent-device/pull/2425
* test(ios): run the shared AX recovery fixture through the runner and characterize its depth memory by @thymikee in https://github.com/callstack/agent-device/pull/2428
* perf(ios): learn generation-scoped native depth hints in the host AX source by @thymikee in https://github.com/callstack/agent-device/pull/2427
## New Contributors
* @bytemain made their first contribution in https://github.com/callstack/agent-device/pull/2266
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.21.0...v0.21.1
v0.21.0
## Highlights
v0.21 makes device automation faster and easier to control.
- **iOS Simulator apps open faster**. Cold opens took 27% to 40% less time across six benchmark screens. Snapshots are faster too, and cold-start commands respect the timeout you set.
- **Take over a remote device without ending the agent’s session**. Pause its actions, handle a step yourself, then let it continue.
- **Agents get clearer results**. Absence checks distinguish a missing element from a failed capture. Android snapshots expose field details such as whether an input is editable or showing placeholder text.
- **Testing takes fewer steps**. Crop a screenshot to a selected element, clear a field with `fill ""`, or reset the whole Simulator keychain for a fresh-login test. Maestro gains more selectors and `clearState` support.
- **Remote runs are easier to debug**. Cancellation reaches the daemon, failure logs are accessible through the proxy, and incompatible versions fail earlier.
- **Installation is smaller**. Dependency bundling reduced the measured install size from 9.89 MB to 4.44 MB.
Under the hood, commands now use platform-owned runtimes and shared snapshot handling, with less duplicated logic.
**Before upgrading (breaking changes)**: batch steps now use structured `input`; `perf` requires a specific operation such as `frames` or `memory`; the deprecated SDK rotate wrapper has been removed.
## What's Changed
* refactor: migrate viewport to request runtime by @thymikee in https://github.com/callstack/agent-device/pull/1864
* refactor(daemon): admit-before-bind as an admitted-plan token; retire the R32 syntax policy by @thymikee in https://github.com/callstack/agent-device/pull/1841
* refactor: tighten viewport runtime facts by @thymikee in https://github.com/callstack/agent-device/pull/1873
* fix(layering): list the whole zone when R10's type-cycle ceiling is exceeded by @thymikee in https://github.com/callstack/agent-device/pull/1852
* fix(daemon): cap events.ndjson with cursor-safe rotation by @thymikee in https://github.com/callstack/agent-device/pull/1867
* fix(layering): resolve relative imports inside workspace packages referencing #1781 by @thymikee in https://github.com/callstack/agent-device/pull/1872
* fix(utils): throw AppError from app-log-files and verified-file guards by @thymikee in https://github.com/callstack/agent-device/pull/1853
* test: refuse foreign-pid signals from unit-test workers (Coverage fork death, #1824) by @thymikee in https://github.com/callstack/agent-device/pull/1854
* test: classify the runner XCTests — pure decisions to a macOS host lane, simulator semantics gated os(iOS) (#1781 A7) by @thymikee in https://github.com/callstack/agent-device/pull/1861
* docs: keep size review in CI and local feedback fast by @thymikee in https://github.com/callstack/agent-device/pull/1842
* fix: stabilize global flag declaration type by @kkkhs in https://github.com/callstack/agent-device/pull/1879
* fix(daemon,kernel): device-selection safety — identity conflicts and ambiguity fail instead of retargeting by @thymikee in https://github.com/callstack/agent-device/pull/1880
* refactor: migrate screenshot to request-bound runtime by @thymikee in https://github.com/callstack/agent-device/pull/1878
* refactor(daemon): one capture-input builder and one admit-then-bind step by @thymikee in https://github.com/callstack/agent-device/pull/1876
* ci: give check:affected real Apple ownership rules and route ios.yml on them (#1781 A9-2) by @thymikee in https://github.com/callstack/agent-device/pull/1857
* fix(android): warn when a permission revoke kills the session app by @thymikee in https://github.com/callstack/agent-device/pull/1856
* fix: surface remote install network causes by @thymikee in https://github.com/callstack/agent-device/pull/1863
* refactor(android): raw is the acquired tree; one presentation for dialog recovery; residues declared (#1832 C3) by @thymikee in https://github.com/callstack/agent-device/pull/1865
* test(fuzz): structured CLI/Maestro generators that reach command validation and assert error codes (#1781 B2) by @thymikee in https://github.com/callstack/agent-device/pull/1866
* feat(snapshot): move scope into presentation by @thymikee in https://github.com/callstack/agent-device/pull/1855
* fix(maestro): refresh targets after transient selector misses by @thymikee in https://github.com/callstack/agent-device/pull/1886
* test: make hard-coded caps overridable behind seams (#1781 B5) by @thymikee in https://github.com/callstack/agent-device/pull/1858
* test: catch daemon lifecycle and durable-state leaks (#1781 B1) by @thymikee in https://github.com/callstack/agent-device/pull/1859
* ci: bound the Linux apt install so a stalled mirror fails fast by @thymikee in https://github.com/callstack/agent-device/pull/1887
* fix(maestro): restore conformance invariants by @thymikee in https://github.com/callstack/agent-device/pull/1889
* refactor: reuse kernel uniqueStrings instead of local copies by @thymikee in https://github.com/callstack/agent-device/pull/1892
* test(bench): falsification fixtures for oracles + typed runner outcomes by @thymikee in https://github.com/callstack/agent-device/pull/1893
* docs: simplify AI SDK integration guide by @thymikee in https://github.com/callstack/agent-device/pull/1891
* refactor(maestro): remove obsolete presentation mapping by @thymikee in https://github.com/callstack/agent-device/pull/1896
* fix(maestro): make iOS presentation correspondence authoritative by @thymikee in https://github.com/callstack/agent-device/pull/1899
* fix(android): warn when recording readiness inspection fails open by @thymikee in https://github.com/callstack/agent-device/pull/1898
* fix: calibrate iOS scroll execution by @thymikee in https://github.com/callstack/agent-device/pull/1905
* refactor: migrate get to the request-bound device runtime by @thymikee in https://github.com/callstack/agent-device/pull/1877
* refactor: migrate wait to request-bound runtime by @thymikee in https://github.com/callstack/agent-device/pull/1875
* test: add web platform command coverage manifest by @thymikee in https://github.com/callstack/agent-device/pull/1902
* test: cover host runner tv remote and recording paths by @thymikee in https://github.com/callstack/agent-device/pull/1903
* perf(check-affected): stop running coverage locally, CI stays authoritative by @thymikee in https://github.com/callstack/agent-device/pull/1908
* docs(agents): restore and enforce progressive disclosure by @thymikee in https://github.com/callstack/agent-device/pull/1888
* fix(maestro): align label metadata ownership by @thymikee in https://github.com/callstack/agent-device/pull/1909
* feat(maestro): add recursive tree selectors by @thymikee in https://github.com/callstack/agent-device/pull/1910
* feat(maestro): add positional selectors by @thymikee in https://github.com/callstack/agent-device/pull/1911
* test: add filesystem boundary fault matrix by @thymikee in https://github.com/callstack/agent-device/pull/1904
* test(gesture): assert pan duration in the iOS gesture-lab replay by @thymikee in https://github.com/callstack/agent-device/pull/1901
* fix: make iOS scroll release controlled by @thymikee in https://github.com/callstack/agent-device/pull/1906
* docs: capture gesture verification lessons by @thymikee in https://github.com/callstack/agent-device/pull/1913
* feat(ios): split raw and regular snapshot projections behind one capture hint (#1797) by @thymikee in https://github.com/callstack/agent-device/pull/1926
* perf: reduce cold iOS runner startup latency by @thymikee in https://github.com/callstack/agent-device/pull/1927
* test: add tvOS platform command coverage manifest by @thymikee in https://github.com/callstack/agent-device/pull/1919
* test: add Linux platform command coverage manifest by @thymikee in https://github.com/callstack/agent-device/pull/1921
* docs: record visionOS/watchOS support decision by @thymikee in https://github.com/callstack/agent-device/pull/1918
* refactor(web): drop duplicate viewport facts spread in webRuntimeFacts by @thymikee in https://github.com/callstack/agent-device/pull/1928
* fix: preserve Maestro clickable-first ordering by @thymikee in https://github.com/callstack/agent-device/pull/1917
* test: complete boundary fault matrix by @thymikee in https://github.com/callstack/agent-device/pull/1920
* feat(ios): move the regular-projection clip fold into snapshot presentation (#1797) by @thymikee in https://github.com/callstack/agent-device/pull/1929
* feat(ios): publish effective snapshot geometry by @thymikee in https://github.com/callstack/agent-device/pull/1931
* refactor: migrate focus to the request-bound device runtime by @thymikee in https://github.com/callstack/agent-device/pull/1925
* chore: refresh root development dependencies by @thymikee in https://github.com/callstack/agent-device/pull/1923
* test: add macOS platform command coverage manifest by @thymikee in https://github.com/callstack/agent-device/pull/1922
* fix(ios): separate snapshot actionability from occlusion by @thymikee in https://github.com/callstack/agent-device/pull/1933
* ci: attribute native package size and trim Apple runner by @thymikee in https://github.com/callstack/agent-device/pull/1934
* feat(ios): add snapshot backend conformance by @thymikee in https://github.com/callstack/agent-device/pull/1930
* fix(ios): report an unobserved text commit instead of a partial success by @thymikee in https://github.com/callstack/agent-device/pull/1924
* refactor(apple): drop dead runner code and collapse duplicated helpers by @thymikee in https://github.com/callstack/agent-device/pull/1936
* fix(ios): make snapshot presentation construction private by @thymikee in https://github.com/callstack/agent-device/pull/1937
* refactor: migrate type to the request-bound device runtime by @thymikee in https://github.com/callstack/agent-device/pull/1935
* chore: ignore host-local workspace artifacts by @thymikee in https://github.com/callstack/agent-device/pull/1942
* fix(web): read enabled=false from the snapshot [disabled] annotation by @thymikee in https://github.com/callstack/agent-device/pull/1940
* refactor(recording): share the AVFoundation export pipeline between overlay and trim by @thymikee in https://github.com/callstack/agent-device/pull/1943
* refactor: complete the find cutover onto the request-bound runtime by @thymikee in https://github.com/callstack/agent-device/pull/1944
* refactor: derive every --settle surface from the descriptor trait (#1652) by @thymikee in https://github.com/callstack/agent-device/pull/1945
* fix: Linux input/a11y defects from #1935 (click miss, typed '=', GTK4 text) by @thymikee in https://github.com/callstack/agent-device/pull/1949
* perf(ios): build structural-identifier suppression child index once per pass by @thymikee in https://github.com/callstack/agent-device/pull/1938
* fix(ios): isolate snapshot acquisition timing from presentation by @thymikee in https://github.com/callstack/agent-device/pull/1948
* perf(ios): memoize simulator app url-scheme probes per bundle mtime by @thymikee in https://github.com/callstack/agent-device/pull/1939
* refactor: dedupe containsPoint and rectArea into @agent-device/kernel by @thymikee in https://github.com/callstack/agent-device/pull/1953
* docs: drop stale apps.ts over-budget warning from AGENTS.md by @thymikee in https://github.com/callstack/agent-device/pull/1954
* perf(typecheck): make the root tsc project incremental by @thymikee in https://github.com/callstack/agent-device/pull/1957
* refactor(daemon): lazy-load platform cleanup helpers in session teardown by @thymikee in https://github.com/callstack/agent-device/pull/1950
* fix(ios): enforce regular snapshot clip invariant by @thymikee in https://github.com/callstack/agent-device/pull/1946
* refactor(tests): replace the test-utils barrel with direct module imports by @thymikee in https://github.com/callstack/agent-device/pull/1956
* diagnose(1874): instrument the synthesized commit wait and add a dispatchable stall loop by @thymikee in https://github.com/callstack/agent-device/pull/1941
* fix(ios): preserve regular snapshot depth through structural wrappers by @thymikee in https://github.com/callstack/agent-device/pull/1947
* perf(contracts): granularize entry surfaces so hub importers stop evaluating the facade clump by @thymikee in https://github.com/callstack/agent-device/pull/1969
* dx(check): fail fast when node_modules lags the lockfile by @thymikee in https://github.com/callstack/agent-device/pull/1967
* fix(mutation): move the repo size ratchet where the lane cannot reach it by @thymikee in https://github.com/callstack/agent-device/pull/1977
* perf(find): reuse snapshot index once per ranking pass by @thymikee in https://github.com/callstack/agent-device/pull/1971
* feat(android): carry effective snapshot geometry by @thymikee in https://github.com/callstack/agent-device/pull/1968
* feat(android): bound snapshot presentation quality by @thymikee in https://github.com/callstack/agent-device/pull/1972
* test(snapshot): add cross-runtime presentation conformance by @thymikee in https://github.com/callstack/agent-device/pull/1973
* perf(android): keep the automation helper warm across fill and scroll by @thymikee in https://github.com/callstack/agent-device/pull/1974
* fix(web): scope disabled detection to the ref-bearing annotation group by @thymikee in https://github.com/callstack/agent-device/pull/1951
* fix(android): update snapshot quality lifecycle import by @thymikee in https://github.com/callstack/agent-device/pull/1980
* fix(macos): sign nested runner code so the host runner app can launch by @thymikee in https://github.com/callstack/agent-device/pull/1979
* refactor(recording): move gesture telemetry out of the daemon zone by @thymikee in https://github.com/callstack/agent-device/pull/1985
* perf(android): bound occlusion coverage memory by @thymikee in https://github.com/callstack/agent-device/pull/1982
* dx(test): opt-in worker-count override for solo local vitest runs by @thymikee in https://github.com/callstack/agent-device/pull/1964
* refactor: migrate back/home/orientation/tv-remote/keyboard to the request-bound device runtime by @thymikee in https://github.com/callstack/agent-device/pull/1955
* refactor(test): fold the last two coverage-summary copies into the shared builder by @thymikee in https://github.com/callstack/agent-device/pull/1992
* refactor(request): move the device-inventory context out of core by @thymikee in https://github.com/callstack/agent-device/pull/1993
* test(structure): per-package eager-closure budgets — the ADR-0019 loading-shape probe (#1739) by @thymikee in https://github.com/callstack/agent-device/pull/1965
* refactor(lint): retire the facade closure test for a budget row and a lint rule by @thymikee in https://github.com/callstack/agent-device/pull/1990
* fix(ios): verify fill's synthesized-replacement route before reporting success by @thymikee in https://github.com/callstack/agent-device/pull/1995
* refactor: move Wave 5 touch commands to platform runtime by @thymikee in https://github.com/callstack/agent-device/pull/1987
* refactor: migrate the gesture family to the request-bound device runtime by @thymikee in https://github.com/callstack/agent-device/pull/1952
* fix(test): drain session-event-log writes before rmSync cleanup in save-script transport tests by @thymikee in https://github.com/callstack/agent-device/pull/1999
* perf(selectors): resolve a recorded replay target in one matching pass by @thymikee in https://github.com/callstack/agent-device/pull/1988
* docs(agents): simplify testing and pull-request guidance wording by @thymikee in https://github.com/callstack/agent-device/pull/1997
* fix: stop replay retries after cleanup failures by @thymikee in https://github.com/callstack/agent-device/pull/2001
* ci: consolidate CI workflow from 15 jobs to 8 by @thymikee in https://github.com/callstack/agent-device/pull/1996
* fix(ci): run the fuzz corpus replay outside the coverage lane by @thymikee in https://github.com/callstack/agent-device/pull/1994
* fix(android): publish covered state from exact order evidence by @thymikee in https://github.com/callstack/agent-device/pull/1981
* refactor: make interaction response cleanup platform-neutral by @thymikee in https://github.com/callstack/agent-device/pull/2002
* refactor(snapshot): type the acquisition producer beside the platform channel by @thymikee in https://github.com/callstack/agent-device/pull/2000
* fix(ci): repair nightly XCTest and conformance lanes by @thymikee in https://github.com/callstack/agent-device/pull/1989
* chore(test): start the subprocess-stub kill-criterion experiment (#1823) by @thymikee in https://github.com/callstack/agent-device/pull/2007
* test(daemon): harden the timed-out wait decoration test against CI load by @thymikee in https://github.com/callstack/agent-device/pull/2008
* perf(selectors): collapse the double tree scan for disambiguate/fail-closed rows by @thymikee in https://github.com/callstack/agent-device/pull/2009
* feat(maestro): support assertTrue phase 1 - literal/${VAR} truthiness (#1295) by @thymikee in https://github.com/callstack/agent-device/pull/2010
* test: close web platform command-coverage gaps from #1426 by @thymikee in https://github.com/callstack/agent-device/pull/2011
* refactor(snapshot): establish presentation ownership boundary by @thymikee in https://github.com/callstack/agent-device/pull/2005
* feat: session-scoped echo protection for parameterized recorded inputs by @thymikee in https://github.com/callstack/agent-device/pull/2013
* fix(ci): make the two rg-based static checks actually run by @thymikee in https://github.com/callstack/agent-device/pull/2006
* feat: add Linux command evidence lane by @thymikee in https://github.com/callstack/agent-device/pull/2017
* Extract snapshot policy from daemon to host-side facet (#1983) by @thymikee in https://github.com/callstack/agent-device/pull/2014
* fix(daemon): close web sessions on daemon shutdown instead of leaking the browser fleet by @thymikee in https://github.com/callstack/agent-device/pull/2012
* fix: persist daemon-owned child process records by @thymikee in https://github.com/callstack/agent-device/pull/2019
* docs: define composable recorded fragments by @thymikee in https://github.com/callstack/agent-device/pull/2018
* perf(android): one dumpsys read per window question; batch text via the helper IME by @thymikee in https://github.com/callstack/agent-device/pull/2003
* refactor(android): admit text onto one resolved channel by @thymikee in https://github.com/callstack/agent-device/pull/2030
* feat: add deterministic device selection resolver by @thymikee in https://github.com/callstack/agent-device/pull/2020
* Harden the MCP surface: registry rug-pull fix, operator-only credentials/endpoints, device-shell argv gate, declared timeouts by @thymikee in https://github.com/callstack/agent-device/pull/2023
* perf(daemon): revalidate the source code-signature cache by stat instead of rereading the graph by @thymikee in https://github.com/callstack/agent-device/pull/2004
* fix(daemon): stop branch-named daemon before replacement by @thymikee in https://github.com/callstack/agent-device/pull/2015
* refactor(daemon): Wave 6 — migrate clipboard, app-switcher, trigger-app-event, settings, alert, react-native and capabilities onto request-bound runtimes (R55–R63) by @thymikee in https://github.com/callstack/agent-device/pull/2021
* fix(daemon): close no longer throws tenant-isolation error on a never-allocated lease by @thymikee in https://github.com/callstack/agent-device/pull/2029
* fix(web): launch npm and the managed backend through node, not .cmd shims by @thymikee in https://github.com/callstack/agent-device/pull/2033
* fix(ci): skip release instead of erroring when both fixtures are cached by @thymikee in https://github.com/callstack/agent-device/pull/2036
* Migrate audio probe to platform runtime with durable resource lifecycle by @thymikee in https://github.com/callstack/agent-device/pull/2038
* refactor(contracts): retire the platform/interaction compatibility façades by @thymikee in https://github.com/callstack/agent-device/pull/2048
* refactor(registry): flip react-devtools to none (Wave 6 residue, part of #2042) by @thymikee in https://github.com/callstack/agent-device/pull/2047
* test(perf): raise local Vitest worker cap to four by @thymikee in https://github.com/callstack/agent-device/pull/2049
* refactor: remove next-major compatibility surfaces by @thymikee in https://github.com/callstack/agent-device/pull/2046
* refactor(apple): colocate the XCUITest runner client into packages/platform-apple (#2040) by @thymikee in https://github.com/callstack/agent-device/pull/2050
* refactor(android): extract the adb executor and IME cluster into packages/platform-android (#2041) by @thymikee in https://github.com/callstack/agent-device/pull/2044
* fix(ios): grant the text-entry commit wait time against progress by @thymikee in https://github.com/callstack/agent-device/pull/2035
* perf(harmonyos): memoize gesture viewport dumps by @thymikee in https://github.com/callstack/agent-device/pull/2051
* refactor(android): one injectable host-adb transport for the remaining raw adb sites by @thymikee in https://github.com/callstack/agent-device/pull/2052
* perf(diagnostics): reuse redaction and directory work per scope by @thymikee in https://github.com/callstack/agent-device/pull/2056
* perf(apple): uninstall stale runner bundles concurrently by @thymikee in https://github.com/callstack/agent-device/pull/2058
* perf(apple): reuse booted simulator memo during open by @thymikee in https://github.com/callstack/agent-device/pull/2060
* fix(fuzz): run parser cases in a worker process, not the runner's thread (#2053) by @thymikee in https://github.com/callstack/agent-device/pull/2055
* refactor: migrate perf to device runtime by @thymikee in https://github.com/callstack/agent-device/pull/2061
* fix(daemon): reconcile device claims held by a replaced daemon by @thymikee in https://github.com/callstack/agent-device/pull/2057
* refactor(runtime): close residue execution units by @thymikee in https://github.com/callstack/agent-device/pull/2054
* fix(daemon): keep the recovery hint on Maestro replay errors by @thymikee in https://github.com/callstack/agent-device/pull/2075
* fix(ci): spawn the differential's agent-device CLI as argv, not one option by @thymikee in https://github.com/callstack/agent-device/pull/2069
* feat(interaction): accept `fill ""` as the clear-field primitive by @NicolasBataille in https://github.com/callstack/agent-device/pull/2066
* fix(daemon): address cwd-scoped sessions by their store key, not their public name by @NicolasBataille in https://github.com/callstack/agent-device/pull/2068
* fix(cli): name `--udid` when a device identity is passed to `--device` by @NicolasBataille in https://github.com/callstack/agent-device/pull/2065
* fix(build): silence TS2883 dts noise in the Apple runner client shim by @thymikee in https://github.com/callstack/agent-device/pull/2077
* fix(mcp): admit a batch step's input against the nested command's own schema by @thymikee in https://github.com/callstack/agent-device/pull/2076
* docs(batch): name the step shape and the accepted commands in `help batch` and in its refusals by @NicolasBataille in https://github.com/callstack/agent-device/pull/2067
* refactor: move platform provider composition out of daemon by @thymikee in https://github.com/callstack/agent-device/pull/2070
* refactor: move Android system observation out of daemon by @thymikee in https://github.com/callstack/agent-device/pull/2071
* refactor: close the daemon platform boundary by @thymikee in https://github.com/callstack/agent-device/pull/2072
* ci: run coverage in one job again by @thymikee in https://github.com/callstack/agent-device/pull/2079
* refactor(commands): one audience table for common input fields by @thymikee in https://github.com/callstack/agent-device/pull/2074
* docs: reject explanatory implementation comments by @thymikee in https://github.com/callstack/agent-device/pull/2087
* refactor: retire ADR-0019 cutover scaffolding by @thymikee in https://github.com/callstack/agent-device/pull/2081
* test: derive unavailable runtime fixtures by @thymikee in https://github.com/callstack/agent-device/pull/2084
* refactor: remove retired capability matrix by @thymikee in https://github.com/callstack/agent-device/pull/2089
* refactor(test): derive provider gateway facts from runtime builder by @thymikee in https://github.com/callstack/agent-device/pull/2093
* refactor(layering): remove retired migration scaffolding by @thymikee in https://github.com/callstack/agent-device/pull/2092
* fix(test): settle the daemon's exit on its own deadline in the web shutdown lane by @thymikee in https://github.com/callstack/agent-device/pull/2083
* fix(ci): stop ten artifact uploads discarding their hidden paths by @thymikee in https://github.com/callstack/agent-device/pull/2091
* refactor: delete capabilities projection shell by @thymikee in https://github.com/callstack/agent-device/pull/2094
* fix(daemon): refuse host path install sources on the HTTP surface by @thymikee in https://github.com/callstack/agent-device/pull/2102
* refactor(substrate): split host mechanics into @agent-device/host-kit capability ports by @thymikee in https://github.com/callstack/agent-device/pull/2088
* refactor(platforms): break the four upward edges out of src/platforms by @thymikee in https://github.com/callstack/agent-device/pull/2090
* refactor(platforms): sink the shared src/platforms root files into their substrate homes by @thymikee in https://github.com/callstack/agent-device/pull/2100
* fix(daemon): dispose late durable capture authorities by @thymikee in https://github.com/callstack/agent-device/pull/2107
* fix(wait): surface runner restart timeout evidence by @kkkhs in https://github.com/callstack/agent-device/pull/2113
* refactor: sink package-closed src modules into existing packages by @thymikee in https://github.com/callstack/agent-device/pull/2106
* fix(daemon): let a retried open supersede the claim its aborted attempt abandoned by @thymikee in https://github.com/callstack/agent-device/pull/2105
* ci(1874): declare the diagnose lane and stop it misreading its own loop by @thymikee in https://github.com/callstack/agent-device/pull/2059
* chore: adopt shared oxlint config by @thymikee in https://github.com/callstack/agent-device/pull/2115
* fix(daemon): fail closed when the auth hook is silent about tenant by @thymikee in https://github.com/callstack/agent-device/pull/2104
* fix(daemon): enforce provider session artifact ownership by @thymikee in https://github.com/callstack/agent-device/pull/2109
* refactor: move W6 platform families behind package facades by @thymikee in https://github.com/callstack/agent-device/pull/2116
* refactor: move Android family behind package exports by @thymikee in https://github.com/callstack/agent-device/pull/2117
* refactor: move Apple platform family into package by @thymikee in https://github.com/callstack/agent-device/pull/2118
* fix(daemon): confine remote HTTP trust boundaries by @thymikee in https://github.com/callstack/agent-device/pull/2111
* feat: add human takeover controls by @szdziedzic in https://github.com/callstack/agent-device/pull/2078
* refactor: retire platforms source seam by @thymikee in https://github.com/callstack/agent-device/pull/2119
* refactor: prune platform split residue by @thymikee in https://github.com/callstack/agent-device/pull/2123
* refactor: contract Apple platform surface by @thymikee in https://github.com/callstack/agent-device/pull/2125
* test: characterize replay application behavior and coordinator ownership by @thymikee in https://github.com/callstack/agent-device/pull/2137
* refactor(layering): centralize architecture ownership by @thymikee in https://github.com/callstack/agent-device/pull/2150
* refactor(snapshot): move text-surface into snapshot presentation by @thymikee in https://github.com/callstack/agent-device/pull/2152
* fix: use canonical viewport fallback for rootless touch targeting by @thymikee in https://github.com/callstack/agent-device/pull/2122
* refactor: dissolve caller-side src/replay into command and CLI owners by @thymikee in https://github.com/callstack/agent-device/pull/2151
* feat: add symbol-aware depgraph authority overlay by @thymikee in https://github.com/callstack/agent-device/pull/2157
* feat: open Limrun uploaded apps by @thymikee in https://github.com/callstack/agent-device/pull/2110
* fix: improve ref-based interaction recovery by @thymikee in https://github.com/callstack/agent-device/pull/2167
* fix(maestro): measure settle outcomes directly by @thymikee in https://github.com/callstack/agent-device/pull/2155
* fix: reuse canonical Maestro visibility context by @thymikee in https://github.com/callstack/agent-device/pull/2156
* fix: keep named sessions visible in scoped inventory by @thymikee in https://github.com/callstack/agent-device/pull/2164
* feat(apple): reclaim retained runners under device-claim authority by @thymikee in https://github.com/callstack/agent-device/pull/2160
* feat: add stale device claim release and dead-end recovery guidance by @thymikee in https://github.com/callstack/agent-device/pull/2162
* docs+ux: make device ownership discoverable end to end by @thymikee in https://github.com/callstack/agent-device/pull/2165
* chore: remove stray validation recording by @thymikee in https://github.com/callstack/agent-device/pull/2169
* refactor: extract daemon replay behind one application facade by @thymikee in https://github.com/callstack/agent-device/pull/2166
* fix(apple): switch to manual code signing when a provisioning profile is set by @thymikee in https://github.com/callstack/agent-device/pull/2172
* fix(daemon): compose stale-claim recovery from the dead owner's state dir by @thymikee in https://github.com/callstack/agent-device/pull/2171
* refactor(recording): move Swift cache policy to recording ownership by @thymikee in https://github.com/callstack/agent-device/pull/2179
* refactor(snapshot): move snapshot policy utilities (#2135) by @thymikee in https://github.com/callstack/agent-device/pull/2181
* refactor(host-kit): move verified-file ownership by @thymikee in https://github.com/callstack/agent-device/pull/2180
* refactor: extract daemon session lifecycle inventory facade by @thymikee in https://github.com/callstack/agent-device/pull/2183
* refactor(snapshot): move Android helper presentation by @thymikee in https://github.com/callstack/agent-device/pull/2184
* refactor(recording): move video validation policy by @thymikee in https://github.com/callstack/agent-device/pull/2186
* refactor(app-log): move policy into daemon ownership by @thymikee in https://github.com/callstack/agent-device/pull/2185
* test(kernel): move source-value coverage beside kernel owner by @thymikee in https://github.com/callstack/agent-device/pull/2187
* refactor(cli): move update-check policy by @thymikee in https://github.com/callstack/agent-device/pull/2194
* refactor(cli): move process-exit lifecycle to CLI boundary by @thymikee in https://github.com/callstack/agent-device/pull/2193
* fix: address security scanner findings by @thymikee in https://github.com/callstack/agent-device/pull/2182
* refactor(daemon): move open lifecycle behind session facade by @thymikee in https://github.com/callstack/agent-device/pull/2201
* perf: retain iOS runner across physical relaunch by @thymikee in https://github.com/callstack/agent-device/pull/2200
* refactor(output): split presentation owners by @thymikee in https://github.com/callstack/agent-device/pull/2202
* refactor: move close lifecycle behind session facade by @thymikee in https://github.com/callstack/agent-device/pull/2212
* feat(daemon): establish interaction application facade by @thymikee in https://github.com/callstack/agent-device/pull/2205
* refactor(ios): define snapshot acquisition and presentation contracts by @thymikee in https://github.com/callstack/agent-device/pull/2203
* refactor(url): split client and Metro URL ownership by @thymikee in https://github.com/callstack/agent-device/pull/2210
* perf: avoid redundant physical iOS runner health check by @thymikee in https://github.com/callstack/agent-device/pull/2215
* refactor(ios): extract snapshot presenter by @thymikee in https://github.com/callstack/agent-device/pull/2206
* refactor(ios): implement snapshot engine by @thymikee in https://github.com/callstack/agent-device/pull/2211
* test(ios): add snapshot engine conformance gates by @thymikee in https://github.com/callstack/agent-device/pull/2213
* refactor(daemon): move session observability behind facade by @thymikee in https://github.com/callstack/agent-device/pull/2216
* fix: preserve physical iOS session health check by @thymikee in https://github.com/callstack/agent-device/pull/2218
* refactor(provision-kit): move install-source configuration to its owner by @thymikee in https://github.com/callstack/agent-device/pull/2217
* refactor(ios): integrate runner with snapshot engine by @thymikee in https://github.com/callstack/agent-device/pull/2214
* refactor(transport): move shared host mechanics by @thymikee in https://github.com/callstack/agent-device/pull/2221
* refactor: move utilities to owning modules by @thymikee in https://github.com/callstack/agent-device/pull/2225
* docs: clarify technical issue requirements by @thymikee in https://github.com/callstack/agent-device/pull/2226
* docs: adopt Simlock-backed Host device allocation by @thymikee in https://github.com/callstack/agent-device/pull/2220
* test(ios): establish snapshot convergence baselines and permanent evidence by @thymikee in https://github.com/callstack/agent-device/pull/2204
* refactor(ios): route Appium snapshots through engine by @thymikee in https://github.com/callstack/agent-device/pull/2224
* refactor(daemon): move interaction and find routes behind facade by @thymikee in https://github.com/callstack/agent-device/pull/2228
* refactor: enforce src/utils retirement (#2149) by @thymikee in https://github.com/callstack/agent-device/pull/2229
* refactor(ios): converge Limrun snapshots through engine by @thymikee in https://github.com/callstack/agent-device/pull/2222
* refactor(daemon): move shared snapshot execution out of handlers by @thymikee in https://github.com/callstack/agent-device/pull/2232
* refactor(ios): carry provider acquisitions through one presentation owner by @thymikee in https://github.com/callstack/agent-device/pull/2233
* fix(android): apply settings airplane through the connectivity service by @thymikee in https://github.com/callstack/agent-device/pull/2234
* fix(daemon): skip sessionless local host teardown for provider devices by @thymikee in https://github.com/callstack/agent-device/pull/2235
* chore(gates): drop the test-file size pin map, keep the merge-base ratchet by @thymikee in https://github.com/callstack/agent-device/pull/2238
* refactor(layering): one retired-paths rule for src/utils and src/replay by @thymikee in https://github.com/callstack/agent-device/pull/2240
* chore(depgraph): stop re-deriving the layering inversion baseline by @thymikee in https://github.com/callstack/agent-device/pull/2241
* test(remote-connection): extract shared fixtures from the connection suite by @thymikee in https://github.com/callstack/agent-device/pull/2243
* test(remote-connection): extract shared fixtures from the connection suite by @thymikee in https://github.com/callstack/agent-device/pull/2252
* test(daemon): extract shared fixtures from the snapshot handler suite by @thymikee in https://github.com/callstack/agent-device/pull/2254
* ci(ios): give the pan-duration replay a budget that absorbs a runner rebuild by @thymikee in https://github.com/callstack/agent-device/pull/2250
* feat: add strict native absence assertion by @thymikee in https://github.com/callstack/agent-device/pull/2245
* test(replay): extract shared fixtures from the target-verification suite by @thymikee in https://github.com/callstack/agent-device/pull/2249
* docs(layering): kill criteria on every rule module by @thymikee in https://github.com/callstack/agent-device/pull/2244
* fix(ci): fingerprint the test app from its own directory by @thymikee in https://github.com/callstack/agent-device/pull/2256
* feat: add strict wait absent polling (#2236) by @thymikee in https://github.com/callstack/agent-device/pull/2264
* test(daemon): session-relaunch-close through the request seam by @thymikee in https://github.com/callstack/agent-device/pull/2262
* test(android-e2e): make an alert-dismiss failure self-explaining by @thymikee in https://github.com/callstack/agent-device/pull/2260
* ci(android): wait for the producer's platform job and keep the fallback build alive by @thymikee in https://github.com/callstack/agent-device/pull/2261
* docs(adr): ADR-0019 end-state numbers for the daemon composition root by @thymikee in https://github.com/callstack/agent-device/pull/2242
* docs(agents): PR diff budget, move PRs, gates commit, validation lifecycle by @thymikee in https://github.com/callstack/agent-device/pull/2247
* test(platform): extract Apple perf and Android runtime fixtures by @thymikee in https://github.com/callstack/agent-device/pull/2253
* chore(bench): move iOS snapshot benchmark evidence to the evidence/ios-snapshot branch by @thymikee in https://github.com/callstack/agent-device/pull/2251
* test(vitest): retire the subprocess-stub kill-criterion experiment by @thymikee in https://github.com/callstack/agent-device/pull/2255
* fix(security): bump fast-uri override to 3.1.6 by @thymikee in https://github.com/callstack/agent-device/pull/2267
* fix(security): bump test-app overrides for xmldom, browserslist, decode-uri-component by @thymikee in https://github.com/callstack/agent-device/pull/2268
* chore(gates): eager-closure budgets ratchet against merge-base with per-category ceilings by @thymikee in https://github.com/callstack/agent-device/pull/2257
* feat(runtime): add managed-local ownership and the exact-only managed runtime by @thymikee in https://github.com/callstack/agent-device/pull/2258
* feat(daemon): add the allocator-held device claim kind by @thymikee in https://github.com/callstack/agent-device/pull/2263
* fix(remote): materialize test suite artifacts against a remote daemon by @thymikee in https://github.com/callstack/agent-device/pull/2272
* ci: enforce the image-size parser mitigation through a test-app gate by @thymikee in https://github.com/callstack/agent-device/pull/2269
* perf(ios): decide Simulator AX bridge viability (GO, Node-direct guest reader) by @thymikee in https://github.com/callstack/agent-device/pull/2237
* fix: encode the mcp subcommand in server.json package arguments by @thymikee in https://github.com/callstack/agent-device/pull/2275
* feat(screenshot): add --crop-on to crop captures to a selector frame by @thymikee in https://github.com/callstack/agent-device/pull/2276
* test(coverage): rename-only hunks owe no changed-line coverage by @thymikee in https://github.com/callstack/agent-device/pull/2248
* feat(ios): productionize Simulator AX snapshot bridge by @thymikee in https://github.com/callstack/agent-device/pull/2277
* fix(daemon): fence managed readiness behind runtime admission by @thymikee in https://github.com/callstack/agent-device/pull/2280
* feat(daemon): add managed allocation operation journal by @thymikee in https://github.com/callstack/agent-device/pull/2284
* refactor(cli): derive the common flag readers from the common-field table by @thymikee in https://github.com/callstack/agent-device/pull/2292
* refactor(contracts): build unavailable runtime facts once by @thymikee in https://github.com/callstack/agent-device/pull/2291
* feat(runtime): add contained transports for managed leases by @thymikee in https://github.com/callstack/agent-device/pull/2285
* refactor(commands): retire the navigation-only type projection by @thymikee in https://github.com/callstack/agent-device/pull/2294
* refactor(cli): let help resolve command aliases itself and retire R12 by @thymikee in https://github.com/callstack/agent-device/pull/2293
* docs: simplify agent context and resolve conflicting guidance by @thymikee in https://github.com/callstack/agent-device/pull/2287
* perf: bundle tar-stream to reduce install footprint by @thymikee in https://github.com/callstack/agent-device/pull/2286
* chore(layering): derive the contracts export inventory from package.json by @thymikee in https://github.com/callstack/agent-device/pull/2297
* test(daemon): one typed conformance helper for the daemon runtime suites by @thymikee in https://github.com/callstack/agent-device/pull/2298
* chore(gates): layering baselines ratchet against merge-base by @thymikee in https://github.com/callstack/agent-device/pull/2299
* test(daemon): session-devices-batch-runtime through the request seam by @thymikee in https://github.com/callstack/agent-device/pull/2305
* test(daemon): session-open-url-prewarm through the request seam by @thymikee in https://github.com/callstack/agent-device/pull/2304
* fix(web): preserve the backend ref so snapshot refs match actionable refs by @thymikee in https://github.com/callstack/agent-device/pull/2283
* ci: avoid unrelated Apple runner cache invalidation by @thymikee in https://github.com/callstack/agent-device/pull/2303
* perf: bundle runtime dependencies and report full install size by @thymikee in https://github.com/callstack/agent-device/pull/2310
* test(contracts): one typed conformance helper for the runtime-family suites by @thymikee in https://github.com/callstack/agent-device/pull/2301
* fix(apple-runner): never compare an unavailable toolchain probe; name the mismatching cache keys by @thymikee in https://github.com/callstack/agent-device/pull/2306
* spike(daemon): give the ADR-0014 ref frame private ownership by @thymikee in https://github.com/callstack/agent-device/pull/2296
* refactor(runtime): let platform runtimes list apps and read app state directly by @thymikee in https://github.com/callstack/agent-device/pull/2295
* refactor(daemon): inline the touch sub-switch into the interaction dispatcher by @thymikee in https://github.com/callstack/agent-device/pull/2302
* feat(ios): route Simulator snapshots through AX bridge by @thymikee in https://github.com/callstack/agent-device/pull/2279
* refactor(commands): author each executable command once in its facet by @thymikee in https://github.com/callstack/agent-device/pull/2313
* fix: stop stamping recovered iOS captures truncated; confirm Android alert dismissal by @thymikee in https://github.com/callstack/agent-device/pull/2315
* refactor(move): move managed device allocation into its own workspace package (#2316) by @thymikee in https://github.com/callstack/agent-device/pull/2321
* fix(android): preserve editable-field metadata in snapshots by @AdzeB in https://github.com/callstack/agent-device/pull/2290
* refactor(capture-kit): move durable-capture resource mechanics out of the daemon by @thymikee in https://github.com/callstack/agent-device/pull/2320
* fix(ios): avoid replaying alert mutations by @billsbooth in https://github.com/callstack/agent-device/pull/2323
* refactor: share daemon command and teardown budgets by @thymikee in https://github.com/callstack/agent-device/pull/2307
* feat: add fenced managed lease admission by @thymikee in https://github.com/callstack/agent-device/pull/2308
* fix: contain managed ADB transport to its lease target by @thymikee in https://github.com/callstack/agent-device/pull/2311
* feat: delegate reviewed managed automation by @thymikee in https://github.com/callstack/agent-device/pull/2312
* feat: admit managed requests within lease authority by @thymikee in https://github.com/callstack/agent-device/pull/2319
* refactor(contracts): own the daemon HTTP wire contract so clients stop importing src/daemon by @thymikee in https://github.com/callstack/agent-device/pull/2322
* fix(runtime): resolve each lazily imported platform module exactly once by @thymikee in https://github.com/callstack/agent-device/pull/2327
* fix: repair main after the managed-allocation move landed under stale PRs by @thymikee in https://github.com/callstack/agent-device/pull/2328
* fix(ios): confirm alerts without repeating activation by @billsbooth in https://github.com/callstack/agent-device/pull/2326
* refactor(commands): move commands-side rendering out of src/daemon and retire the doctor progress flag by @thymikee in https://github.com/callstack/agent-device/pull/2349
* fix(ios): stop charging every capture for a slow Simulator app discovery by @thymikee in https://github.com/callstack/agent-device/pull/2331
* refactor(daemon): move four pure leaves to their kits by @thymikee in https://github.com/callstack/agent-device/pull/2347
* refactor(daemon): split src/daemon/types.ts into request types and session state by @thymikee in https://github.com/callstack/agent-device/pull/2346
* test(android-e2e): record rotation state and logcat rotation decisions on a failed step by @thymikee in https://github.com/callstack/agent-device/pull/2350
* feat(wait): carry a per-poll timeline in timeout failures by @thymikee in https://github.com/callstack/agent-device/pull/2344
* feat(ios): support explicit iOS simulator keychain reset by @thymikee in https://github.com/callstack/agent-device/pull/2345
* refactor(core): move the command descriptor registry into its own workspace package by @thymikee in https://github.com/callstack/agent-device/pull/2348
* refactor(contracts): move single-owner modules out of @agent-device/contracts by @thymikee in https://github.com/callstack/agent-device/pull/2357
* refactor(daemon): relocate the daemon client out of src/daemon by @thymikee in https://github.com/callstack/agent-device/pull/2360
* refactor(daemon): extract the session event journal into a workspace package by @thymikee in https://github.com/callstack/agent-device/pull/2361
* test(android): reveal smoke canaries by visibility by @thiagobrez in https://github.com/callstack/agent-device/pull/2369
* perf(ios): derive runner demand for Simulator opens and stop observation from awaiting the runner by @thymikee in https://github.com/callstack/agent-device/pull/2329
* feat(remote): proxy parity for Simulator observation (#2198 slice B) by @thymikee in https://github.com/callstack/agent-device/pull/2351
* fix(android): return from orientation once the display reports the rotation by @thymikee in https://github.com/callstack/agent-device/pull/2356
* test(android-e2e): read the logcat tail for rotation evidence by @thymikee in https://github.com/callstack/agent-device/pull/2359
* fix(capture): export durable resource record type by @billsbooth in https://github.com/callstack/agent-device/pull/2365
* fix(ios): honor the startup budget through a cold Simulator boot by @PrinceD96 in https://github.com/callstack/agent-device/pull/2325
* fix(gates): stop an eager-closure approval from turning main red on merge by @thymikee in https://github.com/callstack/agent-device/pull/2375
* chore: drop the stale planned-operations closure approval by @thymikee in https://github.com/callstack/agent-device/pull/2373
* perf(cli): keep scroll vocabulary off gesture runtime by @dvd233 in https://github.com/callstack/agent-device/pull/2378
* refactor(cli): take the CLI's vocabulary off runtime barrels by @thymikee in https://github.com/callstack/agent-device/pull/2379
* refactor(move): move replay divergence vocabulary into @agent-device/ad-replay by @thymikee in https://github.com/callstack/agent-device/pull/2384
* fix(remote): let a plain-session client read its own failure diagnostics record by @thymikee in https://github.com/callstack/agent-device/pull/2382
* refactor(move): move the batch runner and batch policy into @agent-device/command-registry by @thymikee in https://github.com/callstack/agent-device/pull/2388
* refactor(ios): prune converged snapshot paths by @thymikee in https://github.com/callstack/agent-device/pull/2383
* fix(daemon): stop an attested tenant from downgrading its own isolation by @thymikee in https://github.com/callstack/agent-device/pull/2386
* test(remote): assert the proxied snapshot's whole wire conversation by @thymikee in https://github.com/callstack/agent-device/pull/2387
* fix(conformance): isolate post-tap settling from app launch by @thymikee in https://github.com/callstack/agent-device/pull/2390
* refactor(ios): delete the unused snapshot plan interface by @thymikee in https://github.com/callstack/agent-device/pull/2392
* refactor(capture-kit): complete ADR 0019 end state — relocate snapshot and recording zones by @thymikee in https://github.com/callstack/agent-device/pull/2385
* feat: support standalone Maestro clearState command by @Rohit3523 in https://github.com/callstack/agent-device/pull/2366
* perf(ios): settle the first interaction on a deadline, not a fixed sleep by @thymikee in https://github.com/callstack/agent-device/pull/2395
* test(capture): avoid coverage timeouts with a smaller crop fixture by @thymikee in https://github.com/callstack/agent-device/pull/2399
* chore(gates): classify #2278 daemon-platform-runtime edges and ratchet handler session authority by @thymikee in https://github.com/callstack/agent-device/pull/2354
* docs(adr): record the #2278 coupling audit and re-trace entry-to-platform hops by @thymikee in https://github.com/callstack/agent-device/pull/2355
## New Contributors
* @kkkhs made their first contribution in https://github.com/callstack/agent-device/pull/1879
* @NicolasBataille made their first contribution in https://github.com/callstack/agent-device/pull/2066
* @AdzeB made their first contribution in https://github.com/callstack/agent-device/pull/2290
* @PrinceD96 made their first contribution in https://github.com/callstack/agent-device/pull/2325
* @dvd233 made their first contribution in https://github.com/callstack/agent-device/pull/2378
* @Rohit3523 made their first contribution in https://github.com/callstack/agent-device/pull/2366
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.20.10...v0.21.0
v0.20.10
## Highlights
- **AI SDK and MCP integrations:** A first-party `agent-device/ai-sdk` tool set makes agent-device available to AI SDK applications, while compact MCP instructions and an MCP-only help tool reduce setup and discovery overhead. [#1804](https://github.com/callstack/agent-device/pull/1804), [#1839](https://github.com/callstack/agent-device/pull/1839)
- **More accurate iOS snapshots:** Private-AX scroll visibility is unified, offscreen subtree leaks and clamped descendants are removed, snapshot presentation becomes an explicit seam, and transition snapshots derive from the visible capture. [#1798](https://github.com/callstack/agent-device/pull/1798), [#1807](https://github.com/callstack/agent-device/pull/1807), [#1811](https://github.com/callstack/agent-device/pull/1811), [#1845](https://github.com/callstack/agent-device/pull/1845), [#1831](https://github.com/callstack/agent-device/pull/1831), [#1848](https://github.com/callstack/agent-device/pull/1848), [#1850](https://github.com/callstack/agent-device/pull/1850), [#1851](https://github.com/callstack/agent-device/pull/1851)
- **Better Android visibility and gestures:** Covering siblings hide only the content they actually cover, snapshot scope resolves once with the API 23 evidence gap disclosed, and saturated scroll gestures stay below the status bar. [#1808](https://github.com/callstack/agent-device/pull/1808), [#1846](https://github.com/callstack/agent-device/pull/1846), [#1820](https://github.com/callstack/agent-device/pull/1820)
- **Web hover automation:** The new `hover` command supports hover-gated menus, tooltips, and other web UI that cannot be exercised with click or touch alone. [#1786](https://github.com/callstack/agent-device/pull/1786), [#1817](https://github.com/callstack/agent-device/pull/1817)
- **Safer sessions, devices, and cloud runs:** Invalid path-like session names are rejected, sessionless mutations enforce device claims, remote diagnostics reach the caller, and WebDriver cloud creation has a bounded budget without leaking billed sessions. [#1815](https://github.com/callstack/agent-device/pull/1815), [#1809](https://github.com/callstack/agent-device/pull/1809), [#1814](https://github.com/callstack/agent-device/pull/1814), [#1782](https://github.com/callstack/agent-device/pull/1782)
- **Lean, more trustworthy CI:** Native lanes skip docs-only changes, parked suites are dispatch-only, nightly iOS runs the full XCTest suite, transient comment failures no longer fail bundle-size checks, and redundant or cascading jobs are removed. [#1791](https://github.com/callstack/agent-device/pull/1791), [#1794](https://github.com/callstack/agent-device/pull/1794), [#1789](https://github.com/callstack/agent-device/pull/1789), [#1795](https://github.com/callstack/agent-device/pull/1795), [#1787](https://github.com/callstack/agent-device/pull/1787), [#1822](https://github.com/callstack/agent-device/pull/1822)
## Release breakdown
- 46 commits
- 44 merged pull requests
- 1 contributor
## What's Changed
* ci: drop duplicate nightly-macos replay job (#1781 A2) by @thymikee in https://github.com/callstack/agent-device/pull/1787
* fix: unify private AX scroll visibility by @thymikee in https://github.com/callstack/agent-device/pull/1798
* chore: restore unreleased version by @thymikee in https://github.com/callstack/agent-device/pull/1805
* fix: prevent private AX subtree leaks at source by @thymikee in https://github.com/callstack/agent-device/pull/1807
* ci: skip device lanes for root-level docs-only changes (#1781 A9) by @thymikee in https://github.com/callstack/agent-device/pull/1791
* test(android): restore full-tier lifecycle and observability scenarios (#1781 A1) by @thymikee in https://github.com/callstack/agent-device/pull/1793
* ci: move parked device replay suites to a dispatch-only workflow (#1781 A1) by @thymikee in https://github.com/callstack/agent-device/pull/1794
* test: assert the specific error code instead of any failure (#1781 B4) by @thymikee in https://github.com/callstack/agent-device/pull/1790
* chore(format): ignore .claude/** in oxfmt so a main-checkout format can't sweep worktrees by @thymikee in https://github.com/callstack/agent-device/pull/1803
* fix: hide clamped descendants of offscreen iOS rows by @thymikee in https://github.com/callstack/agent-device/pull/1811
* feat(web): add hover command for hover-gated UI (#1783) by @thymikee in https://github.com/callstack/agent-device/pull/1786
* ci: keep Bundle Size job green on transient GitHub comment failures by @thymikee in https://github.com/callstack/agent-device/pull/1795
* fix(daemon): reject '.', '..' and empty session names so session artifacts stay under sessions/ by @thymikee in https://github.com/callstack/agent-device/pull/1815
* feat(ai-sdk): add agent-device/ai-sdk tool set and document the MCP zero-code path by @thymikee in https://github.com/callstack/agent-device/pull/1804
* fix: reject selector-shaped wait arguments instead of reading them as text by @thymikee in https://github.com/callstack/agent-device/pull/1813
* ci(ios): run the full XCTest suite nightly and check the PR test list (#1781 A7) by @thymikee in https://github.com/callstack/agent-device/pull/1789
* fix(ios-runner): reject CGRect.infinite in navigation frame guards by @thymikee in https://github.com/callstack/agent-device/pull/1816
* fix: declare frameworkTier on the hover descriptor by @thymikee in https://github.com/callstack/agent-device/pull/1817
* fix: enforce device claims for sessionless device mutations (#1799) by @thymikee in https://github.com/callstack/agent-device/pull/1809
* fix(scroll): keep saturated scroll gestures out of the status bar; gate Android replays from android/emulator (#1781 A1) by @thymikee in https://github.com/callstack/agent-device/pull/1820
* fix(android): let a covering sibling hide only what its content covers by @thymikee in https://github.com/callstack/agent-device/pull/1808
* fix: report real claim results from daemon stop by @thymikee in https://github.com/callstack/agent-device/pull/1818
* fix: read replay scripts on the caller and ship them with the request by @thymikee in https://github.com/callstack/agent-device/pull/1810
* chore(test): remove the contention retry (0 fires since 07-29) and shrink the subprocess-stub project to its 3 real spawners (#1781 A4) by @thymikee in https://github.com/callstack/agent-device/pull/1827
* chore(layering): document R12/R18/R19, retire R8, make R9 shrink mandatory (#1781 A6) by @thymikee in https://github.com/callstack/agent-device/pull/1825
* fix: serve remote daemon request diagnostics to the caller by @thymikee in https://github.com/callstack/agent-device/pull/1814
* fix(webdriver): give cloud session creation its own budget and stop leaking billed sessions by @thymikee in https://github.com/callstack/agent-device/pull/1782
* refactor: migrate snapshot to device runtime by @thymikee in https://github.com/callstack/agent-device/pull/1779
* refactor: split the test-suite command out of the replay handler by @thymikee in https://github.com/callstack/agent-device/pull/1826
* fix(layering): keep the snapshot interactor seam out of the type cycle by @thymikee in https://github.com/callstack/agent-device/pull/1838
* refactor(ios): establish snapshot presentation seam by @thymikee in https://github.com/callstack/agent-device/pull/1845
* ci: park perf-nightly to dispatch and stop the coverage-gate cascade double-red (#1781 A3, A5) by @thymikee in https://github.com/callstack/agent-device/pull/1822
* chore(mutation): shrink to report-only — drop the ratchet, baseline and graduation (#1457, #1781) by @thymikee in https://github.com/callstack/agent-device/pull/1828
* test: prune abandoned test-run tmp directories at run setup by @thymikee in https://github.com/callstack/agent-device/pull/1834
* feat(mcp): compact server instructions in both eras + MCP-only help tool by @thymikee in https://github.com/callstack/agent-device/pull/1839
* fix: derive iOS transition snapshots from visible presentation by @thymikee in https://github.com/callstack/agent-device/pull/1831
* refactor(ios): route snapshot backends through presentation by @thymikee in https://github.com/callstack/agent-device/pull/1848
* docs(agents): ADR 0019 unit checklist, owning-seam mock rule, worktree and rebase guidance by @thymikee in https://github.com/callstack/agent-device/pull/1836
* fix(android): resolve snapshot scope once and disclose the API 23 occlusion-scan gap (#1832 C1/C2) by @thymikee in https://github.com/callstack/agent-device/pull/1846
* feat(ios): unify snapshot eligibility by @thymikee in https://github.com/callstack/agent-device/pull/1850
* refactor: migrate diff to request-bound runtime by @thymikee in https://github.com/callstack/agent-device/pull/1847
* test: pin test files over 1,000 lines at their exact length so they can only shrink by @thymikee in https://github.com/callstack/agent-device/pull/1843
* test(ratchet): pin snapshot-handler.test.ts at main's 2654 lines by @thymikee in https://github.com/callstack/agent-device/pull/1860
* fix: derive transition backend from capture by @thymikee in https://github.com/callstack/agent-device/pull/1851
## Contributors
- @thymikee — 44 pull requests
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.20.9...v0.20.10
v0.20.9
## Highlights
- **More resilient snapshots across Android and iOS:** Android no longer lets empty focusable overlays hide app content, sparse captures now include a fallback screenshot, compact action labels survive presentation, and private-AX settling/custom-action reads are more stable. [#1737](https://github.com/callstack/agent-device/pull/1737), [#1764](https://github.com/callstack/agent-device/pull/1764), [#1773](https://github.com/callstack/agent-device/pull/1773), [#1749](https://github.com/callstack/agent-device/pull/1749), [#1784](https://github.com/callstack/agent-device/pull/1784)
- **Safer device ownership and command execution:** Local device claims recover stale owners, while boot, apps, app state, shutdown, installation, and application lifecycle move onto request-bound runtimes for consistent cancellation, admission, and provider behavior. [#1735](https://github.com/callstack/agent-device/pull/1735), [#1747](https://github.com/callstack/agent-device/pull/1747), [#1755](https://github.com/callstack/agent-device/pull/1755), [#1756](https://github.com/callstack/agent-device/pull/1756), [#1757](https://github.com/callstack/agent-device/pull/1757), [#1758](https://github.com/callstack/agent-device/pull/1758), [#1759](https://github.com/callstack/agent-device/pull/1759)
- **Better failure evidence:** Batch recovery keeps typed signals, URL credential errors are preserved, request-timeout cleanup is platform-aware, recording evidence survives faults, and iOS final-probe diagnostics remain available. [#1761](https://github.com/callstack/agent-device/pull/1761), [#1762](https://github.com/callstack/agent-device/pull/1762), [#1751](https://github.com/callstack/agent-device/pull/1751), [#1734](https://github.com/callstack/agent-device/pull/1734), [#1776](https://github.com/callstack/agent-device/pull/1776)
- **Physical-device and recording fixes:** Physical iOS screenshots use the current `devicectl` syntax, iOS runner releases install their dependencies, and macOS recording finalization is validated before success is reported. [#1769](https://github.com/callstack/agent-device/pull/1769), [#1785](https://github.com/callstack/agent-device/pull/1785), [#1732](https://github.com/callstack/agent-device/pull/1732)
- **Stronger release and architecture gates:** CLI help examples are checked against the schema, the built daemon is fingerprinted from its real import graph, previously missing CI checks now run, and runtime cutovers are enforced structurally. [#1766](https://github.com/callstack/agent-device/pull/1766), [#1771](https://github.com/callstack/agent-device/pull/1771), [#1770](https://github.com/callstack/agent-device/pull/1770), [#1745](https://github.com/callstack/agent-device/pull/1745), [#1753](https://github.com/callstack/agent-device/pull/1753)
## Release breakdown
- 40 commits
- 39 merged pull requests
- 3 contributors
## What's Changed
* refactor: tighten capture ownership boundaries by @thymikee in https://github.com/callstack/agent-device/pull/1736
* refactor: narrow perf API to actionable evidence by @thymikee in https://github.com/callstack/agent-device/pull/1731
* feat: enforce local device claims and reconcile stale owners by @thymikee in https://github.com/callstack/agent-device/pull/1735
* docs: amend ADR 0019 with broader-migration governance by @thymikee in https://github.com/callstack/agent-device/pull/1738
* refactor(daemon): absorb androidAdbExecutor DI slot into the generic provider scope by @thymikee in https://github.com/callstack/agent-device/pull/1742
* refactor(contracts): consolidate per-domain defineUse wrappers into one neutral defineUse by @thymikee in https://github.com/callstack/agent-device/pull/1741
* fix(android): stop empty focusable overlays from hiding app content by @thymikee in https://github.com/callstack/agent-device/pull/1737
* refactor(daemon): split touch interaction orchestration into semantic modules by @thymikee in https://github.com/callstack/agent-device/pull/1748
* fix(layering): stop double-reporting contracts-authority violations by @thymikee in https://github.com/callstack/agent-device/pull/1746
* refactor: route selector-resolution structural stages into typed policy by @thymikee in https://github.com/callstack/agent-device/pull/1744
* fix(batch): preserve typed error recovery signals by @cosin2077 in https://github.com/callstack/agent-device/pull/1761
* fix(install-source): preserve URL credential validation error by @cosin2077 in https://github.com/callstack/agent-device/pull/1762
* refactor(registry): exhaustive platformExecution discriminator (ADR 0019 §6) by @thymikee in https://github.com/callstack/agent-device/pull/1740
* chore: drive unused production exports to zero by @thymikee in https://github.com/callstack/agent-device/pull/1743
* refactor(layering): give each colliding rule id its own number by @thymikee in https://github.com/callstack/agent-device/pull/1750
* refactor(layering): one parametrized runtime-command-cutover gate (ADR 0019 §8) by @thymikee in https://github.com/callstack/agent-device/pull/1745
* refactor: route boot through readiness runtime by @thymikee in https://github.com/callstack/agent-device/pull/1747
* refactor: route apps through request runtime by @thymikee in https://github.com/callstack/agent-device/pull/1756
* fix(ios): use current devicectl capture-screenshot syntax for physical devices by @thymikee in https://github.com/callstack/agent-device/pull/1769
* test(cli-help): gate every help example against the CLI schema by @thymikee in https://github.com/callstack/agent-device/pull/1766
* fix: preserve recording evidence across fault boundaries by @thymikee in https://github.com/callstack/agent-device/pull/1734
* fix(ci): run the three checks no workflow was running by @thymikee in https://github.com/callstack/agent-device/pull/1770
* fix: validate macOS recording finalization by @thymikee in https://github.com/callstack/agent-device/pull/1732
* fix(ios): make custom-action reads atomically single-flight by @thymikee in https://github.com/callstack/agent-device/pull/1749
* fix: harden iOS alert smoke scenario by @thymikee in https://github.com/callstack/agent-device/pull/1767
* refactor(snapshot): clean snapshot ownership by @thymikee in https://github.com/callstack/agent-device/pull/1754
* refactor(ci): make gate ownership structural (#1429) by @thymikee in https://github.com/callstack/agent-device/pull/1753
* refactor: route appstate through platform runtime by @thymikee in https://github.com/callstack/agent-device/pull/1755
* fix(daemon): make request-timeout cleanup and hints platform-aware by @thymikee in https://github.com/callstack/agent-device/pull/1751
* fix: fingerprint the built daemon's real import graph (#1545) by @thymikee in https://github.com/callstack/agent-device/pull/1771
* refactor: route shutdown through device runtime by @thymikee in https://github.com/callstack/agent-device/pull/1757
* refactor: route install commands through platform runtime by @thymikee in https://github.com/callstack/agent-device/pull/1758
* refactor: route application lifecycle through runtime facts by @thymikee in https://github.com/callstack/agent-device/pull/1759
* fix: preserve compact snapshot action labels by @thymikee in https://github.com/callstack/agent-device/pull/1773
* feat(snapshot): attach a fallback screenshot to sparse captures by @thymikee in https://github.com/callstack/agent-device/pull/1764
* fix(ios): preserve final-probe xcodebuild diagnostics by @emmanuelchucks in https://github.com/callstack/agent-device/pull/1776
* docs: reposition README around mobile app automation for AI agents by @thymikee in https://github.com/callstack/agent-device/pull/1780
* fix: install dependencies for iOS runner releases by @thymikee in https://github.com/callstack/agent-device/pull/1785
* fix: stabilize private AX settle snapshots by @thymikee in https://github.com/callstack/agent-device/pull/1784
## Contributors
- @thymikee — 36 pull requests
- @cosin2077 — 2 pull requests (first contribution)
- @emmanuelchucks — 1 pull request (first contribution)
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.20.8...v0.20.9
v0.20.7
## Highlights
- **HarmonyOS support:** Automate HarmonyOS devices through HDC, including discovery, snapshots, app lifecycle, HAP deployment, interactions, gestures, keyboard actions, logs, performance sampling, screen recording, and diagnostics. [[#1683](https://github.com/callstack/agent-device/pull/1683)](https://github.com/callstack/agent-device/pull/1683)
- **Start working in fewer turns:** `open --foreground` can attach to the active app on an unambiguous iOS simulator and return the first interactive snapshot immediately. [[#1670](https://github.com/callstack/agent-device/pull/1670)](https://github.com/callstack/agent-device/pull/1670), [[#1671](https://github.com/callstack/agent-device/pull/1671)](https://github.com/callstack/agent-device/pull/1671), [[#1693](https://github.com/callstack/agent-device/pull/1693)](https://github.com/callstack/agent-device/pull/1693)
- **Faster CLI startup:** Common warm commands are up to 54% faster by keeping HTTP and ICU initialization off the local CLI startup path. `appstate` improved from roughly 146 ms to 68 ms in benchmarks. [[#1681](https://github.com/callstack/agent-device/pull/1681)](https://github.com/callstack/agent-device/pull/1681)
- **Better iOS automation:** `snapshot --actions` exposes custom accessibility actions on merged elements, such as React Native feed cards. Hidden-keyboard text entry now waits for the complete text commit before reporting success. [[#1665](https://github.com/callstack/agent-device/pull/1665)](https://github.com/callstack/agent-device/pull/1665), [[#1676](https://github.com/callstack/agent-device/pull/1676)](https://github.com/callstack/agent-device/pull/1676)
- **More reliable Android interactions:** Snapshot recovery now retires unhealthy helper sessions, masked fills return target-bound verification evidence, and free-text shell arguments are safely quoted. [[#1708](https://github.com/callstack/agent-device/pull/1708)](https://github.com/callstack/agent-device/pull/1708), [[#1645](https://github.com/callstack/agent-device/pull/1645)](https://github.com/callstack/agent-device/pull/1645)
- **Stronger cloud and remote-device support:** BrowserStack and AWS Device Farm iOS sessions can capture snapshots reliably, while cloud fills wait for evidence that the intended field received focus. Concurrent remote connections are isolated correctly. [[#1666](https://github.com/callstack/agent-device/pull/1666)](https://github.com/callstack/agent-device/pull/1666), [[#1675](https://github.com/callstack/agent-device/pull/1675)](https://github.com/callstack/agent-device/pull/1675)
- **Modern MCP compatibility:** The MCP server supports the stateless `2026-07-28` revision alongside legacy handshake clients, including discovery and cacheable tool metadata. [[#1678](https://github.com/callstack/agent-device/pull/1678)](https://github.com/callstack/agent-device/pull/1678)
- **Safer targeting and recovery:** Mutating selectors now reject genuinely distinct ambiguous matches instead of silently choosing one. Device inventory, logs, and network capture also moved onto request-bound platform runtimes, improving cancellation, recovery, and process-relaunch handling. [[#1667](https://github.com/callstack/agent-device/pull/1667)](https://github.com/callstack/agent-device/pull/1667), [[#1699](https://github.com/callstack/agent-device/pull/1699)](https://github.com/callstack/agent-device/pull/1699), [[#1701](https://github.com/callstack/agent-device/pull/1701)](https://github.com/callstack/agent-device/pull/1701), [[#1702](https://github.com/callstack/agent-device/pull/1702)](https://github.com/callstack/agent-device/pull/1702)
## What's Changed
* perf(cli): lazy-load dedicated client command handlers by @thymikee in https://github.com/callstack/agent-device/pull/1660
* fix(daemon): SESSION_NOT_FOUND hint names the detected foreground app by @thymikee in https://github.com/callstack/agent-device/pull/1662
* [RFC] prototype: open --foreground collapses the snapshot->hint->open->snapshot dance into one call by @thymikee in https://github.com/callstack/agent-device/pull/1670
* fix(test): deterministic temp-dir cleanup across node --test lanes by @thymikee in https://github.com/callstack/agent-device/pull/1661
* feat(cli): compact workflow help card + version header by @thymikee in https://github.com/callstack/agent-device/pull/1663
* fix: heal dangling XCTestDevices redirect and prove lock-owner death before reclaim by @thymikee in https://github.com/callstack/agent-device/pull/1672
* fix(cloud): unblock iOS snapshot and gate cloud fill on text-entry focus (#1658) by @thymikee in https://github.com/callstack/agent-device/pull/1666
* fix(test): clean Swift toolchain temporary directories by @thymikee in https://github.com/callstack/agent-device/pull/1664
* fix: enforce replay timeout envelope by @thymikee in https://github.com/callstack/agent-device/pull/1674
* fix(ios): wait for hidden-keyboard synthesized text to commit before responding by @thymikee in https://github.com/callstack/agent-device/pull/1676
* feat(ios): expose AX custom actions on merged accessibility elements by @thymikee in https://github.com/callstack/agent-device/pull/1665
* refactor(find): resolve a mutating find's target once, not twice (#1654) by @thymikee in https://github.com/callstack/agent-device/pull/1669
* fix(daemon): open --foreground P1 hotfix — selector rejection, interactive snapshot, capture-failure masking by @thymikee in https://github.com/callstack/agent-device/pull/1671
* fix: isolate concurrent remote connections by @thymikee in https://github.com/callstack/agent-device/pull/1675
* perf(cli): keep node:http and ICU off the CLI startup path (-54% warm call) by @thymikee in https://github.com/callstack/agent-device/pull/1681
* fix: reject distinct ambiguous mutation targets by @thymikee in https://github.com/callstack/agent-device/pull/1667
* test: measure oracle liveness suite-wide; pin the one dead-path oracle by @thymikee in https://github.com/callstack/agent-device/pull/1679
* docs(cli): advertise open --foreground and snapshot --actions in the workflow card by @thymikee in https://github.com/callstack/agent-device/pull/1682
* feat(mcp): serve the stateless 2026-07-28 revision alongside the legacy handshake by @thymikee in https://github.com/callstack/agent-device/pull/1678
* fix: harden artifact ingestion boundaries by @thymikee in https://github.com/callstack/agent-device/pull/1692
* perf: collapse app-driving startup turns by @thymikee in https://github.com/callstack/agent-device/pull/1693
* docs: split device cloud integration guides by @thymikee in https://github.com/callstack/agent-device/pull/1695
* feat: add HarmonyOS support by @vwww-droid in https://github.com/callstack/agent-device/pull/1683
* docs: adopt request-bound platform runtime by @thymikee in https://github.com/callstack/agent-device/pull/1697
* refactor: extract platform device inventory runtime by @thymikee in https://github.com/callstack/agent-device/pull/1699
* fix: harden Android snapshot and fill reliability by @thymikee in https://github.com/callstack/agent-device/pull/1708
* fix(android): shell-quote free-text arguments reaching the device shell by @thymikee in https://github.com/callstack/agent-device/pull/1645
* test: cap Vitest workers for parallel worktrees by @thymikee in https://github.com/callstack/agent-device/pull/1710
* fix(test): include workspace packages in changed-line coverage by @thymikee in https://github.com/callstack/agent-device/pull/1711
* docs: align snapshot fallback and actions guidance by @thymikee in https://github.com/callstack/agent-device/pull/1713
* refactor: extract platform log runtime by @thymikee in https://github.com/callstack/agent-device/pull/1701
* refactor: extract platform network runtime by @thymikee in https://github.com/callstack/agent-device/pull/1702
* docs: record platform runtime adoption checkpoint by @thymikee in https://github.com/callstack/agent-device/pull/1703
* fix(record): make an aborted authoring recording terminal by construction by @thymikee in https://github.com/callstack/agent-device/pull/1712
* perf: speed up iOS agent recovery and streamline CLI guidance by @thymikee in https://github.com/callstack/agent-device/pull/1700
* test: add daemon RPC wire-surface compatibility gate by @thymikee in https://github.com/callstack/agent-device/pull/1717
* docs: prefer design fixes over regression-only guards by @thymikee in https://github.com/callstack/agent-device/pull/1722
* feat: add simulator verification skills by @thymikee in https://github.com/callstack/agent-device/pull/1716
## New Contributors
* @vwww-droid made their first contribution in https://github.com/callstack/agent-device/pull/1683
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.20.6...v0.20.7
v0.20.6
## Highlights
- **Faster, more reliable iOS automation** — hostile-screen captures are up to 2× faster, deep private-AX snapshots recover more useful elements, and tap/text-entry handling is substantially more resilient on dynamic apps such as Bluesky.
- **Evidence-based interaction outcomes** — waits, taps, scrolls, swipes, and other gestures now distinguish confirmed effects from no-ops, surface ambiguity candidates, and explain when success could not be proven.
- **Selector-targeted drag gestures** — drag elements using selectors instead of brittle coordinates, with improved scroll-container selection across Android and Maestro paths.
- **More control over captures and settling** — scale screenshots directly and use `--settle` with `scroll` and `back` for more deterministic workflows.
- **Stronger recording and replay reliability** — Android recording now survives static screens, slow video finalization, and dead processes, while replay artifacts use a single authoritative ledger.
- **Safer remote connections** — daemon bearer tokens are no longer persisted, and forced reconnects authenticate release requests correctly.
## What's Changed
* fix: make wait verdicts evidence-based by @thymikee in https://github.com/callstack/agent-device/pull/1570
* test(layering): pin exact façade symbols for all workspace packages by @thymikee in https://github.com/callstack/agent-device/pull/1574
* refactor(replay): make the daemon's artifact set the run's one ledger (#1478 P5 follow-up) by @thymikee in https://github.com/callstack/agent-device/pull/1575
* docs: remove superseded architecture proposals and design prototypes (#1478 P7) by @thymikee in https://github.com/callstack/agent-device/pull/1580
* build: verify the published tarball instead of grepping the bundle by @thymikee in https://github.com/callstack/agent-device/pull/1578
* fix(ios): preserve timed pan duration by @thymikee in https://github.com/callstack/agent-device/pull/1572
* refactor: extract snapshot and replay identity semantics by @thymikee in https://github.com/callstack/agent-device/pull/1582
* refactor(android): enforce transport lowering in the type system by @thymikee in https://github.com/callstack/agent-device/pull/1583
* perf(ios): halve hostile-screen capture cost under the XCTest-channel penalty by @thymikee in https://github.com/callstack/agent-device/pull/1587
* chore: scan packages/** with fallow instead of ignoring it by @thymikee in https://github.com/callstack/agent-device/pull/1591
* refactor: move selector engine into workspace package by @thymikee in https://github.com/callstack/agent-device/pull/1589
* fix(snapshot): one-shot recovered warning for internally armed penalties by @thymikee in https://github.com/callstack/agent-device/pull/1590
* fix(ios): stop shipping runner unit tests in the npm package by @thymikee in https://github.com/callstack/agent-device/pull/1594
* fix: surface AMBIGUOUS_MATCH candidates and name find's supported actions by @thymikee in https://github.com/callstack/agent-device/pull/1602
* fix(daemon): surface proven no-effect gestures to the agent by @thymikee in https://github.com/callstack/agent-device/pull/1601
* fix: flush stdout/stderr before every CLI process.exit() (#1596) by @thymikee in https://github.com/callstack/agent-device/pull/1603
* fix(ios): give keyboard dismiss a safe-area-tap fallback (#1598) by @thymikee in https://github.com/callstack/agent-device/pull/1606
* fix(maestro): unify the scrollable-ancestor walks and fix Android scroll-container selection by @thymikee in https://github.com/callstack/agent-device/pull/1592
* fix(daemon): judge post-gesture movement by identity, not by the intersection by @thymikee in https://github.com/callstack/agent-device/pull/1573
* fix(ios): harden Bluesky-class interaction reliability by @thymikee in https://github.com/callstack/agent-device/pull/1588
* fix: stop the unit suite from leaking temp directories by @thymikee in https://github.com/callstack/agent-device/pull/1593
* fix: prevent iOS text entry runner wedge by @thymikee in https://github.com/callstack/agent-device/pull/1604
* feat: add selector-targeted drag gestures by @thiagobrez in https://github.com/callstack/agent-device/pull/1567
* fix: stabilize Replay Nightly fixture boundaries by @thymikee in https://github.com/callstack/agent-device/pull/1610
* docs: clarify iOS drag synthesis profiles by @thymikee in https://github.com/callstack/agent-device/pull/1616
* refactor(daemon): give the Maestro fallback and ambiguous-match details real types by @thymikee in https://github.com/callstack/agent-device/pull/1612
* refactor(ios): share one private-XCTest event bridge between gesture and text synthesis by @thymikee in https://github.com/callstack/agent-device/pull/1608
* refactor(contracts): name façade exports explicitly and retire the pin table by @thymikee in https://github.com/callstack/agent-device/pull/1614
* refactor(contracts): one viewport-root predicate for the whole repo by @thymikee in https://github.com/callstack/agent-device/pull/1613
* build: eliminate tsdown bundle warnings by @thymikee in https://github.com/callstack/agent-device/pull/1607
* fix(ios): never signal a recycled runner pid from a stale lease by @thymikee in https://github.com/callstack/agent-device/pull/1621
* fix(ios): corroborate recorded tap outcomes by @thymikee in https://github.com/callstack/agent-device/pull/1605
* fix: update MCP registry namespace by @thymikee in https://github.com/callstack/agent-device/pull/1618
* fix: resolve Dependabot security alerts by @thymikee in https://github.com/callstack/agent-device/pull/1623
* feat(ios): extend depth-capped private-AX captures via element-rooted requests by @thymikee in https://github.com/callstack/agent-device/pull/1627
* refactor(daemon): one interface for the deferred interaction outcome by @thymikee in https://github.com/callstack/agent-device/pull/1633
* refactor: sink backend.ts's cycle-closing types — R9 cycle 76 → 49 by @thymikee in https://github.com/callstack/agent-device/pull/1636
* fix(ios): pin tap-outcome corroboration probes to the baseline's backend by @thymikee in https://github.com/callstack/agent-device/pull/1634
* ci: remove package smoke workflow by @thymikee in https://github.com/callstack/agent-device/pull/1624
* fix: stop the slow-snapshot warning from firing on a single cold start by @thymikee in https://github.com/callstack/agent-device/pull/1628
* feat: add scale-only screenshot sizing by @szdziedzic in https://github.com/callstack/agent-device/pull/1617
* fix: honest find contract — press/tap aliases, read-only list action, selector uniqueness by @thymikee in https://github.com/callstack/agent-device/pull/1637
* refactor: import package types directly — no internal re-export laundering by @thymikee in https://github.com/callstack/agent-device/pull/1640
* docs: pin the version-skew invariant and the four legitimate compat axes by @thymikee in https://github.com/callstack/agent-device/pull/1643
* test: pin own-pid start time in device-claim tests to stop load flakes by @thymikee in https://github.com/callstack/agent-device/pull/1642
* refactor(daemon): consolidate post-gesture surface-evidence helpers and their rationale by @thymikee in https://github.com/callstack/agent-device/pull/1615
* fix: make Android record stop survive static screens, slow moov finalization, and dead-pid recovery by @thymikee in https://github.com/callstack/agent-device/pull/1651
* feat: support --settle on scroll and back (#1638) by @thymikee in https://github.com/callstack/agent-device/pull/1650
* perf(cli): route command aliases through the help fast path by @thymikee in https://github.com/callstack/agent-device/pull/1641
* fix(daemon): say why a no-effect claim was withheld by @thymikee in https://github.com/callstack/agent-device/pull/1655
* refactor: declare selector resolution policy as data by @thymikee in https://github.com/callstack/agent-device/pull/1649
* refactor(ios): runner error classification as data; recovery tested at the transport seam by @thymikee in https://github.com/callstack/agent-device/pull/1644
* fix(remote): stop persisting the daemon bearer token, and authenticate forced-reconnect release correctly by @thymikee in https://github.com/callstack/agent-device/pull/1648
* fix(ios): keep the baseline presentation when a tap corroboration has no request flags by @thymikee in https://github.com/callstack/agent-device/pull/1646
* fix(ios): synthesize hidden-keyboard text through responder by @thymikee in https://github.com/callstack/agent-device/pull/1657
* fix(daemon): report the device claim retained by a failed close by @thymikee in https://github.com/callstack/agent-device/pull/1647
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.20.5...v0.20.6
v0.20.5
## Highlights
- **Restored npm installations.** Fixes the 0.20.4 packaging regression that left private workspace imports in the published bundle, causing commands such as `npx agent-device devices` to fail with a missing `@agent-device/ad-script` package.
- **Release integrity is now enforced.** Packaging fails if any private `@agent-device/*` import escapes into the built JavaScript or declarations, and CI runs `devices --json` from the globally installed tarball before release.
- **Replay internals have a durable package boundary.** Native `.ad` replay execution now lives in `@agent-device/ad-replay`, reducing daemon coupling while preserving the existing replay behavior and compatibility contract.
## What's Changed
* refactor(daemon): extract native .ad replay to packages/ad-replay (#1478 P5) by @thymikee in https://github.com/callstack/agent-device/pull/1555
* fix: prevent publishing unresolved workspace imports by @thymikee in https://github.com/callstack/agent-device/pull/1577
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.20.4...v0.20.5
v0.20.4
## Highlights
- **Continue interactively after replay.** Native `.ad` replays support `--keep-session` and SDK `keepSession`, allowing agents to suppress a terminal `close` and take over the active session.
- **More trustworthy replay execution.** Replay gained stronger save-script validation, launch-time capture retries, session-lifecycle handling, post-gesture stability checks, off-screen verification, and divergence evidence.
- **Verify cloud access without allocating a device.** `connect` validates BrowserStack, AWS Device Farm, and Limrun credentials and resources, reports readiness, and provides exact next steps without creating a provider session.
- **More capable BrowserStack sessions.** Configure orientation, location, timezone, language, locale, networking, and app resigning; cloud orientation now uses valid WebDriver transports.
- **Faster and more reliable device automation.** Android permission prompts, targeted text reads, and snapshot recovery are more dependable. Concurrent device discovery, usbmux-first physical iOS transport, and memoized snapshot occlusion reduce latency and prevent CPU stalls.
**Security:** Project-local configuration can no longer control credentials, remote endpoints, provider settings, headers, or other operator-sensitive values. Thanks to [[@glmgbj233](https://github.com/glmgbj233)](https://github.com/glmgbj233) for responsibly reporting the issue. **Action possibly needed**: move sensitive or operator-specific values out of project-local `agent-device.json` files and into user configuration, explicitly selected configuration, environment variables, CLI arguments, or saved remote profiles.
## What's Changed
* fix: resolve qs Dependabot alert #55 by @thymikee in https://github.com/callstack/agent-device/pull/1493
* refactor: pnpm workspace + @agent-device/kernel pilot (#1490 W0) by @thymikee in https://github.com/callstack/agent-device/pull/1494
* test(ios): fix nightly fixture selector drift by @thymikee in https://github.com/callstack/agent-device/pull/1492
* refactor: consolidate daemon errors by @thymikee in https://github.com/callstack/agent-device/pull/1496
* refactor: restore pngjs codec by @thymikee in https://github.com/callstack/agent-device/pull/1498
* test: stabilize parallel provider scenarios by @thymikee in https://github.com/callstack/agent-device/pull/1497
* Simplify screenshot diff output by @thymikee in https://github.com/callstack/agent-device/pull/1495
* test(android): add comprehensive emulator E2E coverage by @thymikee in https://github.com/callstack/agent-device/pull/1482
* docs: require complete change migrations by @thymikee in https://github.com/callstack/agent-device/pull/1500
* refactor: extract contracts workspace package by @thymikee in https://github.com/callstack/agent-device/pull/1499
* fix(daemon): reject unsupported raw --save-script flags at request ingress by @thymikee in https://github.com/callstack/agent-device/pull/1501
* docs: organize navigation and Node.js integrations by @thymikee in https://github.com/callstack/agent-device/pull/1503
* test: characterize replay-test reporter contract and extend R10 by @thymikee in https://github.com/callstack/agent-device/pull/1505
* fix(ios): deny viewport during capability admission on Apple targets by @thymikee in https://github.com/callstack/agent-device/pull/1507
* refactor: isolate maestro engine package by @thymikee in https://github.com/callstack/agent-device/pull/1506
* test: add Android full emulator coverage by @thymikee in https://github.com/callstack/agent-device/pull/1484
* refactor: isolate Limrun construction dependencies by @thymikee in https://github.com/callstack/agent-device/pull/1502
* refactor(daemon): consolidate session-script test factories and drop saveScriptDefaultedHealedPath by @thymikee in https://github.com/callstack/agent-device/pull/1508
* fix(ci): drop pipefail from the nightly Android emulator script by @thymikee in https://github.com/callstack/agent-device/pull/1512
* feat(ios): usbmux runner route override + #1403 transport experiment evidence by @thymikee in https://github.com/callstack/agent-device/pull/1510
* refactor(replay-test): neutralize the values crossing the scheduler seam (#1478 P3, part 1) by @thymikee in https://github.com/callstack/agent-device/pull/1509
* refactor: extract WebDriver provider package by @thymikee in https://github.com/callstack/agent-device/pull/1504
* fix(test): give the iOS scroll search a capture-sized wait budget by @thymikee in https://github.com/callstack/agent-device/pull/1514
* fix(android): re-capture past a transient helper content verdict by @thymikee in https://github.com/callstack/agent-device/pull/1513
* test(replay-test): pin the retry-path reporter hint by @thymikee in https://github.com/callstack/agent-device/pull/1516
* feat(ios): reach physical devices through usbmux first, tunnel as fallback by @thymikee in https://github.com/callstack/agent-device/pull/1517
* fix(ios): map usbmux connect result codes to the right verdict by @thymikee in https://github.com/callstack/agent-device/pull/1523
* fix(device): state when nothing is claimed and reap dead claims by @thymikee in https://github.com/callstack/agent-device/pull/1519
* perf(devices): probe platform inventories concurrently by @thymikee in https://github.com/callstack/agent-device/pull/1524
* refactor: move Limrun provider behind package facade by @thymikee in https://github.com/callstack/agent-device/pull/1518
* fix: normalize physical iOS landscape taps by @thymikee in https://github.com/callstack/agent-device/pull/1520
* test: stop two tests failing on timing and megapixels by @thymikee in https://github.com/callstack/agent-device/pull/1526
* test: narrow Limrun public type contract by @thymikee in https://github.com/callstack/agent-device/pull/1528
* fix(ios): name Developer Mode and pairing as the real launch blockers by @thymikee in https://github.com/callstack/agent-device/pull/1527
* test: fix Android observability scenario to Android contracts by @thymikee in https://github.com/callstack/agent-device/pull/1531
* refactor(replay-test): extract packages/replay-test (#1478 P3b) by @thymikee in https://github.com/callstack/agent-device/pull/1525
* fix(ios): diagnose a runner that cannot install, instead of blaming the screen by @thymikee in https://github.com/callstack/agent-device/pull/1529
* fix: treat Android permission prompts as pending alerts, not tap escapes by @thymikee in https://github.com/callstack/agent-device/pull/1530
* fix(cli): drop the removed durationMs positional from swipe help by @thymikee in https://github.com/callstack/agent-device/pull/1534
* refactor(daemon): session script publication behind one capability (#1478 P4a) by @thymikee in https://github.com/callstack/agent-device/pull/1532
* test(daemon): pin resolveScriptTarget's retention table directly by @thymikee in https://github.com/callstack/agent-device/pull/1539
* fix(test): repair Android replay fixtures against live device reality by @thymikee in https://github.com/callstack/agent-device/pull/1538
* refactor(daemon): serialize replay transactions behind a locked coordinator (#1478 P4b) by @thymikee in https://github.com/callstack/agent-device/pull/1535
* fix: clear the polynomial-redos class across main by @thymikee in https://github.com/callstack/agent-device/pull/1546
* docs(agents): a green check is evidence only once you have seen it red by @thymikee in https://github.com/callstack/agent-device/pull/1547
* fix: memoize snapshot occlusion coverage checks to stop a daemon CPU-spin by @thymikee in https://github.com/callstack/agent-device/pull/1541
* refactor: extract the .ad script codec into packages/ad-script (#1478) by @thymikee in https://github.com/callstack/agent-device/pull/1536
* fix: restore scheduled workflow health by @thymikee in https://github.com/callstack/agent-device/pull/1543
* refactor(ios): drop the transport seam usbmux-first made dead by @thymikee in https://github.com/callstack/agent-device/pull/1540
* feat(cloud-webdriver): BrowserStack device-feature capabilities, and fix cloud orientation by @leovarmak in https://github.com/callstack/agent-device/pull/1544
* test(replay-test): cover failFast, retry exhaustion, plan-prep failure, JUnit escaping by @thymikee in https://github.com/callstack/agent-device/pull/1550
* refactor: tidy three post-extraction seams by @thymikee in https://github.com/callstack/agent-device/pull/1551
* fix(test): tolerate dead session in iOS e2e full-tier cleanup by @thymikee in https://github.com/callstack/agent-device/pull/1548
* feat(mutation): add target-annotation-serde + snapshot-occlusion kernels by @thymikee in https://github.com/callstack/agent-device/pull/1553
* fix: clear the last polynomial-redos instance in swift-cache by @thymikee in https://github.com/callstack/agent-device/pull/1549
* test: pin selector-port behavior ahead of the P5 extraction (#1478) by @thymikee in https://github.com/callstack/agent-device/pull/1552
* test: make pid-liveness fixtures deterministic under load by @thymikee in https://github.com/callstack/agent-device/pull/1556
* feat: keep replay session active on request by @thymikee in https://github.com/callstack/agent-device/pull/1554
* fix(daemon): reject unarmed close --save-script before teardown by @thymikee in https://github.com/callstack/agent-device/pull/1558
* fix(ios): keyboard-dismiss content settle race (#1542) — partial, defect 2 needs a decision by @thymikee in https://github.com/callstack/agent-device/pull/1559
* fix: read Android get text from target field by @thymikee in https://github.com/callstack/agent-device/pull/1561
* fix(ios): double-check off-screen click refusals against a direct element read by @thymikee in https://github.com/callstack/agent-device/pull/1566
* fix(daemon): distrust post-gesture stability that matches the pre-gesture baseline by @thymikee in https://github.com/callstack/agent-device/pull/1563
* fix: restrict project config trust by @thymikee in https://github.com/callstack/agent-device/pull/1565
* docs: add security policy by @thymikee in https://github.com/callstack/agent-device/pull/1568
* feat: verify device cloud connections by @thymikee in https://github.com/callstack/agent-device/pull/1564
## New Contributors
* @leovarmak made their first contribution in https://github.com/callstack/agent-device/pull/1544
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.20.3...v0.20.4
v0.20.3
## Highlights
A focused reliability release for replay and iOS lifecycle handling.
- **Safer replay references.** Replay now publishes only element refs actually exposed in the response, keeping them session-bound and one-shot. [[#1489](https://github.com/callstack/agent-device/pull/1489)](https://github.com/callstack/agent-device/pull/1489)
- **More reliable iOS launches.** Clear-state behavior is preserved when opening with launch URLs, and simulator relaunches now use the URL as the atomic cold-launch trigger. [[#1486](https://github.com/callstack/agent-device/pull/1486)](https://github.com/callstack/agent-device/pull/1486), [[#1483](https://github.com/callstack/agent-device/pull/1483)](https://github.com/callstack/agent-device/pull/1483)
- **Expanded Limrun session support.** Reusable capabilities now cover app management, input, logs, recording, installation, Android port forwarding, and iOS simulator operations. [[#1485](https://github.com/callstack/agent-device/pull/1485)](https://github.com/callstack/agent-device/pull/1485)
## What's Changed
* fix: relaunch iOS simulator app URLs atomically by @thymikee in https://github.com/callstack/agent-device/pull/1483
* feat: expose Limrun device session capabilities by @thymikee in https://github.com/callstack/agent-device/pull/1485
* test: add scroll-edge-state suite, close mutation gap (#1455) by @thymikee in https://github.com/callstack/agent-device/pull/1474
* test: pin daemon modularity migration contracts by @thymikee in https://github.com/callstack/agent-device/pull/1487
* fix: preserve clear state before iOS launch URLs by @thymikee in https://github.com/callstack/agent-device/pull/1486
* perf: speed up unit tests and streamline checks by @thymikee in https://github.com/callstack/agent-device/pull/1488
* refactor(kernel): relocate non-foundational stragglers before packaging (#1490 W-pre) by @thymikee in https://github.com/callstack/agent-device/pull/1491
* fix: publish replay refs after response projection by @thymikee in https://github.com/callstack/agent-device/pull/1489
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.20.2...v0.20.3
v0.20.2
## Highlights
This release makes session cleanup safer, replay failures easier to understand, and the SDK more useful for integrations.
- **No more leaked device claims after failed script saves** — closing a session now releases the device and removes the session even when close-time `.ad` persistence fails.
- **Clearer, safer Maestro failures** — resolved target labels and `runFlow` paths appear in diagnostics, sensitive `inputText` remains redacted, and malformed environment entries return typed `INVALID_ARGS` errors.
- **Public Limrun runtime** — cloud and provider integrations can now import `LimrunRuntime` from `agent-device/limrun` without depending directly on `@limrun/api`.
- **Fail-closed CLI parsing** — extra positional arguments are rejected instead of silently ignored, preventing malformed agent plans such as `open app url close` from partially executing.
- **Runnable Node.js SDK examples** — new examples cover client sessions, batch orchestration, Metro runtime resolution, contracts, and typed error handling.
- **More stable replay progress output** — terminal output remains intact when the viewport resizes or reflow ends.
- **Stronger release confidence** — expanded iOS simulator smoke coverage, replay-compat and mutation gates, property-based testing, concurrency checks, and narrowly controlled timeout-only CI retries.
### Compatibility note
Commands with excess positional arguments now fail with `INVALID_ARGS`. Any scripts relying on previously ignored trailing arguments must use the command’s documented syntax.
## What's Changed
* fix(android): stamp status-bar chrome during the walk instead of reconstructing it downstream (#1319) by @thymikee in https://github.com/callstack/agent-device/pull/1359
* fix(apple): parse parenthesized xctrace physical device format by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1360
* Generalize subprocess stub tests to support multiple platforms by @thymikee in https://github.com/callstack/agent-device/pull/1362
* chore: remove dead code and tune fallow's dead-code rules by @thymikee in https://github.com/callstack/agent-device/pull/1363
* chore: remove dead type re-exports, prune stale suppressions, gate unused-types by @thymikee in https://github.com/callstack/agent-device/pull/1364
* chore: remove verified dead code and migration scaffolding (~700 LOC) by @thymikee in https://github.com/callstack/agent-device/pull/1367
* test: serialize client-metro and harden the unit suite against ambient daemon env by @thymikee in https://github.com/callstack/agent-device/pull/1365
* chore(deps): resolve dependabot alerts by @thymikee in https://github.com/callstack/agent-device/pull/1372
* refactor(cli): decompose runCli into explicit phase functions by @thymikee in https://github.com/callstack/agent-device/pull/1373
* refactor(interaction): resolve the CapturedSnapshot name collision by @thymikee in https://github.com/callstack/agent-device/pull/1371
* refactor(commands): derive pass-through command bindings with a generic BoundOf helper by @thymikee in https://github.com/callstack/agent-device/pull/1368
* fix: select iOS simulator by installed app by @thymikee in https://github.com/callstack/agent-device/pull/1376
* fix(android): preserve fixed siblings after snapshot filtering by @thymikee in https://github.com/callstack/agent-device/pull/1378
* feat(events): enrich session event details by @szdziedzic in https://github.com/callstack/agent-device/pull/1379
* fix: report bundle sizes with two decimal MB precision by @thymikee in https://github.com/callstack/agent-device/pull/1382
* fix(interaction): direction-named, selector-first off-screen recovery hints (#1366) by @thymikee in https://github.com/callstack/agent-device/pull/1374
* fix(daemon): explicit abort message on uncommitted repair close by @jibin7jose in https://github.com/callstack/agent-device/pull/1383
* feat(replay): recorded landmark identity for wait, is coverage — read-only step identity (#1349) by @thymikee in https://github.com/callstack/agent-device/pull/1381
* fix(daemon): keep an active replay session's daemon alive over the CLI path by @thymikee in https://github.com/callstack/agent-device/pull/1390
* feat: parameterize sensitive recorded inputs by @thymikee in https://github.com/callstack/agent-device/pull/1369
* feat: add WebView accessibility lab by @thymikee in https://github.com/callstack/agent-device/pull/1397
* fix(cli): compact stale device status by @thymikee in https://github.com/callstack/agent-device/pull/1388
* docs: restructure AGENTS.md and CONTEXT.md for progressive disclosure by @thymikee in https://github.com/callstack/agent-device/pull/1402
* fix(replay): preserve cwd scope for opened sessions by @Bortlesboat in https://github.com/callstack/agent-device/pull/1401
* feat: add first-class Vega VVD TV support by @thymikee in https://github.com/callstack/agent-device/pull/1396
* docs(adr): rules-first ADR restructure + ADR 0017 proposal (unified event journal) by @thymikee in https://github.com/callstack/agent-device/pull/1399
* feat(apple): injectable Apple runner transport seam for provider interactors by @thymikee in https://github.com/callstack/agent-device/pull/1389
* fix(gestures): fail pre-removal gesture forms at .ad parse time (#1216) by @thymikee in https://github.com/callstack/agent-device/pull/1393
* refactor(boundaries): put shared contracts below their consumers, gate the result by @thymikee in https://github.com/callstack/agent-device/pull/1405
* feat: strengthen agent help benchmarks by @thymikee in https://github.com/callstack/agent-device/pull/1404
* fix: select app-bearing simulator for replay by @thymikee in https://github.com/callstack/agent-device/pull/1387
* fix: support xctrace-only iOS physical devices by @thymikee in https://github.com/callstack/agent-device/pull/1375
* fix(replay): bounded retry on pre-dispatch capture racing app launch (#1385) by @thymikee in https://github.com/callstack/agent-device/pull/1386
* feat(scripts): dependency-graph report over the layering gate's model by @thymikee in https://github.com/callstack/agent-device/pull/1410
* feat(bench): renderer-pinned samples, topic-coverage gate, error-recovery quizzes; trim skillgym to agentic checks by @thymikee in https://github.com/callstack/agent-device/pull/1411
* docs: architecture principles mapped to enforcing gates and open ledgers by @thymikee in https://github.com/callstack/agent-device/pull/1428
* docs: bless the works-today iOS SpringBoard/widget workflow (#1296 PR A) by @thymikee in https://github.com/callstack/agent-device/pull/1395
* fix: update vulnerable dependencies by @thymikee in https://github.com/callstack/agent-device/pull/1434
* fix(daemon): keep close-time script-save failures from leaking the session/device claim by @thymikee in https://github.com/callstack/agent-device/pull/1392
* test: property-based testing foundation (fast-check) over parse/print and geometry kernels by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1437
* refactor(contracts): declare shared vocabulary below its consumers, ratchet what remains by @thymikee in https://github.com/callstack/agent-device/pull/1435
* fix(cli): reject excess positionals by @Bortlesboat in https://github.com/callstack/agent-device/pull/1433
* test: frozen replay-compat corpus with expected verdicts (#1417) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1436
* test: ratchet mutation score over enumerated decision kernels by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1441
* test(daemon): seeded concurrency torture lane for session/lease/lock invariants by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1439
* test: nightly parser fuzz lane — parser input fails as typed AppErrors, never hangs (#1414) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1438
* fix(ci): upload hidden diagnostics by @thymikee in https://github.com/callstack/agent-device/pull/1443
* test: gate public command surface against commands.md reference by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1446
* chore(deps): Renovate config, packageManager-derived pnpm in CI, repo-wide format by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1444
* test(ci): gate PRs on changed-line coverage (#1418) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1447
* test: enumerate error-code recovery quizzes in a unit-lane gate by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1445
* test: smoke every package.json export subpath from the packed package by @thymikee in https://github.com/callstack/agent-device/pull/1452
* fix(replay): resolve Maestro failures and resize progress by @thymikee in https://github.com/callstack/agent-device/pull/1450
* test(replay): split session-replay-vars.test.ts by actual subject (#1460) by @thymikee in https://github.com/callstack/agent-device/pull/1468
* refactor(daemon): table-ify handleSessionCommands by @thymikee in https://github.com/callstack/agent-device/pull/1467
* build(android): unify the 4 helper build/package scripts behind one parameterized pair by @thymikee in https://github.com/callstack/agent-device/pull/1466
* refactor(layering): declare R1-R3 as a policy table, and test them by @thymikee in https://github.com/callstack/agent-device/pull/1449
* feat(scripts): blast-radius query — dependents, owning gates, live-coverage owners (#1425) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1470
* test(apple): split the 3,487-line core index.test.ts along its import boundaries by @thymikee in https://github.com/callstack/agent-device/pull/1472
* feat: expose Limrun runtime by @thymikee in https://github.com/callstack/agent-device/pull/1476
* test(kernel): cover all six errors.ts exports, kernel-errors mutation 55.19% → 86.26% by @thymikee in https://github.com/callstack/agent-device/pull/1475
* obs: repo-health snapshot command aggregating existing analyzers into one JSON by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1471
* test(ios): expand simulator e2e coverage by @thymikee in https://github.com/callstack/agent-device/pull/1408
* ci: fold single-grep jobs into steps, call named pnpm scripts by @thymikee in https://github.com/callstack/agent-device/pull/1465
* feat(examples): add runnable Node.js SDK examples under examples/sdk/ by @thymikee in https://github.com/callstack/agent-device/pull/1469
* ci(android): trust cached fixture APKs by @thymikee in https://github.com/callstack/agent-device/pull/1479
* Remove SkillGym suite and repo-health snapshot infrastructure by @thymikee in https://github.com/callstack/agent-device/pull/1480
* docs: propose daemon module boundaries by @thymikee in https://github.com/callstack/agent-device/pull/1451
* test(ci): single-retry policy for enumerated contention-flaky files (timeouts only) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1448
## New Contributors
* @jibin7jose made their first contribution in https://github.com/callstack/agent-device/pull/1383
* @Bortlesboat made their first contribution in https://github.com/callstack/agent-device/pull/1401
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.20.0...v0.20.2
v0.20.1
## Highlights
This release expands platform coverage and makes recorded workflows safer and more reliable.
- **Amazon Vega OS TV support** — control apps in the Vega Virtual Device with discovery, lifecycle commands, navigation, and the complete TV remote surface.
- **Broader physical iOS support** — xctrace-only devices can now use XCTest-backed app automation through usbmux, including interactions, snapshots, and screenshots.
- **Secret-safe replay recording** — `fill --record-as ` sends the real value to the app while storing only a `${VAR}` placeholder in the recorded `.ad` script.
- **Stronger replay verification** — recorded `wait` landmarks now retain element identity, preventing same-label elements on changed screens from producing false-positive replays.
- **More resilient replay startup** — bounded retries handle transient sparse captures while an app is launching, without masking permanent transport failures.
- **Smarter device selection** — replay can select the simulator containing the requested app and better preserves authored platform and deep-link intent.
- **Better recovery guidance** — off-screen interaction errors now recommend a direction, bounded movement, and selector-based retries.
- **iOS system UI guidance** — new help covers SpringBoard and simulator widget add, edit, and removal workflows.
- **Improved diagnostics** — richer, sanitized session-event details make automation failures easier to investigate.
- **Stronger release confidence** — substantially expanded registry-derived iOS simulator coverage, replay scenarios, architecture gates, and help-conformance checks.
### Compatibility note
Legacy recorded gesture forms containing removed duration or velocity positionals now fail during `.ad` parsing with migration guidance. Convert timed movement to `gesture pan` or use the current canonical gesture syntax.
## What's Changed
* fix(android): stamp status-bar chrome during the walk instead of reconstructing it downstream (#1319) by @thymikee in https://github.com/callstack/agent-device/pull/1359
* fix(apple): parse parenthesized xctrace physical device format by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1360
* Generalize subprocess stub tests to support multiple platforms by @thymikee in https://github.com/callstack/agent-device/pull/1362
* chore: remove dead code and tune fallow's dead-code rules by @thymikee in https://github.com/callstack/agent-device/pull/1363
* chore: remove dead type re-exports, prune stale suppressions, gate unused-types by @thymikee in https://github.com/callstack/agent-device/pull/1364
* chore: remove verified dead code and migration scaffolding (~700 LOC) by @thymikee in https://github.com/callstack/agent-device/pull/1367
* test: serialize client-metro and harden the unit suite against ambient daemon env by @thymikee in https://github.com/callstack/agent-device/pull/1365
* chore(deps): resolve dependabot alerts by @thymikee in https://github.com/callstack/agent-device/pull/1372
* refactor(cli): decompose runCli into explicit phase functions by @thymikee in https://github.com/callstack/agent-device/pull/1373
* refactor(interaction): resolve the CapturedSnapshot name collision by @thymikee in https://github.com/callstack/agent-device/pull/1371
* refactor(commands): derive pass-through command bindings with a generic BoundOf helper by @thymikee in https://github.com/callstack/agent-device/pull/1368
* fix: select iOS simulator by installed app by @thymikee in https://github.com/callstack/agent-device/pull/1376
* fix(android): preserve fixed siblings after snapshot filtering by @thymikee in https://github.com/callstack/agent-device/pull/1378
* feat(events): enrich session event details by @szdziedzic in https://github.com/callstack/agent-device/pull/1379
* fix: report bundle sizes with two decimal MB precision by @thymikee in https://github.com/callstack/agent-device/pull/1382
* fix(interaction): direction-named, selector-first off-screen recovery hints (#1366) by @thymikee in https://github.com/callstack/agent-device/pull/1374
* fix(daemon): explicit abort message on uncommitted repair close by @jibin7jose in https://github.com/callstack/agent-device/pull/1383
* feat(replay): recorded landmark identity for wait, is coverage — read-only step identity (#1349) by @thymikee in https://github.com/callstack/agent-device/pull/1381
* fix(daemon): keep an active replay session's daemon alive over the CLI path by @thymikee in https://github.com/callstack/agent-device/pull/1390
* feat: parameterize sensitive recorded inputs by @thymikee in https://github.com/callstack/agent-device/pull/1369
* feat: add WebView accessibility lab by @thymikee in https://github.com/callstack/agent-device/pull/1397
* fix(cli): compact stale device status by @thymikee in https://github.com/callstack/agent-device/pull/1388
* docs: restructure AGENTS.md and CONTEXT.md for progressive disclosure by @thymikee in https://github.com/callstack/agent-device/pull/1402
* fix(replay): preserve cwd scope for opened sessions by @Bortlesboat in https://github.com/callstack/agent-device/pull/1401
* feat: add first-class Vega VVD TV support by @thymikee in https://github.com/callstack/agent-device/pull/1396
* docs(adr): rules-first ADR restructure + ADR 0017 proposal (unified event journal) by @thymikee in https://github.com/callstack/agent-device/pull/1399
* feat(apple): injectable Apple runner transport seam for provider interactors by @thymikee in https://github.com/callstack/agent-device/pull/1389
* fix(gestures): fail pre-removal gesture forms at .ad parse time (#1216) by @thymikee in https://github.com/callstack/agent-device/pull/1393
* refactor(boundaries): put shared contracts below their consumers, gate the result by @thymikee in https://github.com/callstack/agent-device/pull/1405
* feat: strengthen agent help benchmarks by @thymikee in https://github.com/callstack/agent-device/pull/1404
* fix: select app-bearing simulator for replay by @thymikee in https://github.com/callstack/agent-device/pull/1387
* fix: support xctrace-only iOS physical devices by @thymikee in https://github.com/callstack/agent-device/pull/1375
* fix(replay): bounded retry on pre-dispatch capture racing app launch (#1385) by @thymikee in https://github.com/callstack/agent-device/pull/1386
* feat(scripts): dependency-graph report over the layering gate's model by @thymikee in https://github.com/callstack/agent-device/pull/1410
* feat(bench): renderer-pinned samples, topic-coverage gate, error-recovery quizzes; trim skillgym to agentic checks by @thymikee in https://github.com/callstack/agent-device/pull/1411
* docs: architecture principles mapped to enforcing gates and open ledgers by @thymikee in https://github.com/callstack/agent-device/pull/1428
* docs: bless the works-today iOS SpringBoard/widget workflow (#1296 PR A) by @thymikee in https://github.com/callstack/agent-device/pull/1395
* fix: update vulnerable dependencies by @thymikee in https://github.com/callstack/agent-device/pull/1434
## New Contributors
* @jibin7jose made their first contribution in https://github.com/callstack/agent-device/pull/1383
* @Bortlesboat made their first contribution in https://github.com/callstack/agent-device/pull/1401
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.20.0...v0.20.1
v0.20.0
Agent Device v0.20 gives coding agents a more dependable path from exploring an app to running the resulting workflow again. The release redesigns gesture execution, expands Maestro YAML compatibility, and turns `.ad` recordings into reusable scripts that agents can diagnose and repair when an interface changes.
## One gesture system across every surface
Gestures now pass through one normalization and planning model across the CLI, Node.js client, MCP, replay, Android, and Apple platforms.
Pan, fling, swipe, pinch, rotate, transform, and two-finger pan use explicit, viewport-aware pointer trajectories. Agent Device validates every planned point before injection, preserves authored timing, and reports an actionable error when the requested motion cannot fit inside the active app.
Android gestures now run through the persistent automation helper, which owns snapshot capture, viewport resolution, and touch injection. iOS simulator multitouch consumes the same canonical plans through native XCTest synthesis.
The result is consistent gesture intent across live commands, `.ad` replay, and Maestro flows.
## Maestro compatibility through a typed engine
Maestro YAML now runs through a source-preserving typed interpreter built directly into Agent Device. Commands retain their source paths and line numbers while the engine handles hooks, includes, environment values, conditions, repeat and retry blocks, observations, and gestures.
v0.20 also expands the supported Maestro subset:
- Numeric options accept `${VAR}` lookup interpolation.
- `optional` composes with `scrollUntilVisible` and `extendedWaitUntil`.
- Visibility assertions accept `childOf` ancestor scoping.
- `scrollUntilVisible` targets the correct scroll container.
- Maestro swipe behavior follows the redesigned gesture system on Android and iOS.
Compatibility is checked against generated, version-pinned Maestro fixtures. Unsupported syntax still fails explicitly, so agents do not mistake partial execution for a passing flow.
## Reusable and fixable `.ad` scripts
Agents can turn a live exploration into a deterministic `.ad` script, replay it later, and repair it when the app drifts.
A replay divergence now includes a bounded screen report, ranked selector suggestions, and a plan-bound resume point. The agent can inspect the current state, perform the correct action, continue from the safe step, and publish the repaired script atomically. Earlier successful steps do not need to run again.
v0.20 also adds active-session publication:
```sh
agent-device open com.example.app --save-script=checkout.ad
# Navigate through the app
agent-device wait 'role="heading" label="Checkout"'
agent-device session save-script
```
`session save-script` publishes the recording without closing the app. The resulting script can recreate the journey from a cold start, stop at a verified destination, and return an active session for the agent’s next task.
Recorded input values are written literally to `.ad` files. Use non-secret fixture credentials until parameterized recording is available.
## Migration notes
v0.20 removes several deprecated gesture forms:
- Use `orientation` for device rotation. The old `rotate` alias has been removed.
- Use `gesture rotate` for a two-finger rotation.
- Use `gesture pan` when authored duration matters. Timed `swipe` and `fling` inputs have been removed.
- Capture a fresh snapshot or use selectors between ref-based mutations. Session ref frames now expire after mutation to prevent stale `@ref` actions.
Validation: The claims above are grounded in the v0.20 tag and accepted architecture records. I treated this as release-highlight copy rather than a complete changelog and kept the three requested themes central.
## What's Changed
* refactor: remove redundant facade exports by @thymikee in https://github.com/callstack/agent-device/pull/1204
* feat: parse and preserve .ad target-v1 evidence (ADR 0012 migration step 3) by @thymikee in https://github.com/callstack/agent-device/pull/1196
* fix: honor session metro hints and expo dev-client bundle urls by @thymikee in https://github.com/callstack/agent-device/pull/1199
* fix: scope Android settle diffs to app content and collapse IME chrome by @thymikee in https://github.com/callstack/agent-device/pull/1200
* feat: add Android test IME helper for deterministic text entry (#1198) by @thymikee in https://github.com/callstack/agent-device/pull/1201
* feat(replay): ADR 0012 migration step 2 — structured replay divergence report by @thymikee in https://github.com/callstack/agent-device/pull/1197
* refactor: keep command and daemon-route owner-file claims tooling-only (#1178) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1192
* feat: disclose selector resolution in interaction responses by @thymikee in https://github.com/callstack/agent-device/pull/1193
* refactor: consolidate architecture ownership and client results by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1210
* Project navigation contracts and add a network digest by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1208
* fix(macos): allow XCTest teardown before runner kill by @lott-ai in https://github.com/callstack/agent-device/pull/1206
* fix: unbreak main — repoint relocated request-progress/cancel imports by @thymikee in https://github.com/callstack/agent-device/pull/1215
* feat(replay): ADR 0012 migration steps 5+6 — resume + --update retirement by @thymikee in https://github.com/callstack/agent-device/pull/1211
* chore: close out architecture experiments by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1213
* fix: preserve Maestro coordinate swipes on Android by @thymikee in https://github.com/callstack/agent-device/pull/1207
* feat(replay): ADR 0012 migration step 4 — target-binding verification enforcement by @thymikee in https://github.com/callstack/agent-device/pull/1209
* fix(mcp): advertise public Apple platform leaves in boot/shutdown/prepare output schemas by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1224
* fix: wrap replay selector-miss as REPLAY_DIVERGENCE (repair-loop regression) by @thymikee in https://github.com/callstack/agent-device/pull/1223
* docs: ADR-0012 Decision 6 (agent-supervised re-record repair) by @thymikee in https://github.com/callstack/agent-device/pull/1226
* feat(replay): ADR 0012 decision 6 — agent-supervised re-record repair by @thymikee in https://github.com/callstack/agent-device/pull/1228
* docs: remove ready-for-human guidance by @thymikee in https://github.com/callstack/agent-device/pull/1237
* fix: align layering claims, remove app-log ineffective dynamic import, refresh architecture records (#1222) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1227
* feat: unify gesture planning and multi-touch execution by @thymikee in https://github.com/callstack/agent-device/pull/1212
* fix: write Android debug_http_host to the RN default-preferences file by @thymikee in https://github.com/callstack/agent-device/pull/1242
* fix: support physical iOS close with Xcode 26 by @thymikee in https://github.com/callstack/agent-device/pull/1236
* docs: ADR-0012 Decision 6 — repair-transaction lifecycle (R7 + commit semantics) by @thymikee in https://github.com/callstack/agent-device/pull/1234
* fix(record): validate finalized iOS device MP4 before reporting record stop success by @mvanhorn in https://github.com/callstack/agent-device/pull/1238
* fix(daemon): isolate disconnect cancellation and resource teardown by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1225
* fix: reject stale iOS refs after navigation by @thymikee in https://github.com/callstack/agent-device/pull/1241
* docs: define session ref-frame lifetime by @thymikee in https://github.com/callstack/agent-device/pull/1247
* fix: remove Android ADB swipe fallbacks by @thymikee in https://github.com/callstack/agent-device/pull/1243
* fix: exclude keyboard/IME chrome from replay divergence screen.refs by @thymikee in https://github.com/callstack/agent-device/pull/1233
* fix: bound the iOS system-modal snapshot probe to the capture deadline (#1244) by @thymikee in https://github.com/callstack/agent-device/pull/1248
* fix(replay): repair-transaction lifecycle — keep-alive, no-partial-emit, close-as-lifecycle, atomic publish by @thymikee in https://github.com/callstack/agent-device/pull/1235
* fix(replay): resume.from now agrees with repairHint's record-and-heal continuation by @thymikee in https://github.com/callstack/agent-device/pull/1260
* fix: Android status/nav-bar systemui chrome leaks into non-raw captures (#1251) by @thymikee in https://github.com/callstack/agent-device/pull/1256
* refactor: rename `rotate` command to `orientation` (rotate kept as deprecated alias) by @thymikee in https://github.com/callstack/agent-device/pull/1252
* fix(ios): support remote-hosted alerts on physical devices by @knchst in https://github.com/callstack/agent-device/pull/1232
* fix(replay): extend resume.from record-and-heal shape to caution/manual by @thymikee in https://github.com/callstack/agent-device/pull/1267
* feat(daemon): ADR 0014 session ref-frame lifetime — full implementation by @thymikee in https://github.com/callstack/agent-device/pull/1257
* fix: unify divergence screen capture with snapshot's full-window scope by @thymikee in https://github.com/callstack/agent-device/pull/1265
* feat: --force/--overwrite for --save-script + arm-time EEXIST preflight by @thymikee in https://github.com/callstack/agent-device/pull/1266
* fix(apple): avoid blocked interactions on physical iOS by @billsbooth in https://github.com/callstack/agent-device/pull/1263
* fix: refresh Android snapshots after in-place ComposeView content swaps (#1254) by @thymikee in https://github.com/callstack/agent-device/pull/1259
* refactor(daemon): remove the superseded coarse snapshotRefsStale marker (ADR 0014 step 8) by @thymikee in https://github.com/callstack/agent-device/pull/1268
* refactor: replace Maestro compat with typed direct engine by @thymikee in https://github.com/callstack/agent-device/pull/1217
* refactor: colocate native platform sources under android/, apple/, linux/ by @thymikee in https://github.com/callstack/agent-device/pull/1273
* fix: demote non-unique ids from writer identity/selector chain (#1269) by @thymikee in https://github.com/callstack/agent-device/pull/1272
* chore: baseline-free production-exports cleanup (#1276) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1282
* chore: remove deprecated rotate CLI command alias (#1277) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1283
* chore: remove unreachable read-only find handling from daemon find handler by @thymikee in https://github.com/callstack/agent-device/pull/1290
* fix: warn agents that armed-repair diagnostic reads are recorded too (#1271 stage 1) by @thymikee in https://github.com/callstack/agent-device/pull/1287
* feat(android): one persistent automation helper owning snapshot + viewport + canonical injection by @thymikee in https://github.com/callstack/agent-device/pull/1281
* fix(android): bound the scroll-hint dumpsys probe and skip it in wait polling (#1270) by @thymikee in https://github.com/callstack/agent-device/pull/1288
* fix(android): actionable error when the snapshot helper is unavailable (#1284) by @thymikee in https://github.com/callstack/agent-device/pull/1285
* fix(replay): retarget identity-empty press containers to their labeled descendant (#1280) by @thymikee in https://github.com/callstack/agent-device/pull/1286
* feat: add direct Limrun provider runtime by @thymikee in https://github.com/callstack/agent-device/pull/1278
* test: stop pinning settle capture counts against a wall-clock loop by @thymikee in https://github.com/callstack/agent-device/pull/1307
* docs: clarify keyboard dismiss fallbacks by @thymikee in https://github.com/callstack/agent-device/pull/1302
* fix(cli): forward --no-record from every recordable command reader by @thymikee in https://github.com/callstack/agent-device/pull/1305
* test: replace the hand-typed Maestro fixture with a generated conformance oracle by @thymikee in https://github.com/callstack/agent-device/pull/1289
* fix(replay): default-exclude observation-only reads from repair heals, add --record opt-in (#1271 stage 2) by @thymikee in https://github.com/callstack/agent-device/pull/1303
* test: stabilize iOS snapshot timeout regression by @thymikee in https://github.com/callstack/agent-device/pull/1309
* fix(android): return meaningful occluding system surfaces instead of failing the snapshot by @thymikee in https://github.com/callstack/agent-device/pull/1301
* fix(cli): deliver --no-record to the daemon (supersedes #1305) by @thymikee in https://github.com/callstack/agent-device/pull/1311
* fix: sleep past the settle quiet deadline instead of onto it (#1306) by @thymikee in https://github.com/callstack/agent-device/pull/1308
* fix(android): drop the dumpsys scroll-hint probe instead of capping it (#1270) by @thymikee in https://github.com/callstack/agent-device/pull/1314
* fix(replay): publish a full-cover system overlay's targets in divergence screen.refs by @thymikee in https://github.com/callstack/agent-device/pull/1318
* fix(mcp): advertise --no-record on every recordable command's tool schema by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1313
* fix(remote): preserve tenant scope for proxy artifact downloads by @thymikee in https://github.com/callstack/agent-device/pull/1317
* feat!: remove deprecated gesture duration and rotate velocity inputs (#1218, #1216) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1315
* chore: gitignore .env files by @thymikee in https://github.com/callstack/agent-device/pull/1322
* test: give the tap-retry differential a fixture control that forces the retry by @thymikee in https://github.com/callstack/agent-device/pull/1327
* fix(record): finalize active recording on session/daemon teardown by @adamTrz in https://github.com/callstack/agent-device/pull/1325
* feat: add daemon stop lifecycle by @thymikee in https://github.com/callstack/agent-device/pull/1323
* ci(test-app): key the fixture build cache on the Expo fingerprint by @thymikee in https://github.com/callstack/agent-device/pull/1321
* Maestro compat: support childOf on assertVisible/assertNotVisible (#1294) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1334
* docs: improve README onboarding by @thymikee in https://github.com/callstack/agent-device/pull/1333
* feat: add advisory device claims by @thymikee in https://github.com/callstack/agent-device/pull/1329
* fix(maestro): consume deferred stability before waitForAnimationToEnd (#1326) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1337
* feat(maestro): support optional on scrollUntilVisible and extendedWaitUntil (#1291) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1339
* fix(mcp): restore result and config parity by @thymikee in https://github.com/callstack/agent-device/pull/1343
* feat(maestro): numeric option fields accept ${VAR} lookup interpolation (#1293) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1342
* refactor(mcp): extract reference-pin state into tool-ref-pins module (#1344) by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1345
* docs: propose active-session script publication by @thymikee in https://github.com/callstack/agent-device/pull/1347
* docs: simplify README language by @thymikee in https://github.com/callstack/agent-device/pull/1352
* docs: retire Maestro compatibility tracker by @thymikee in https://github.com/callstack/agent-device/pull/1350
* fix(tvos): skip SpringBoard system-modal probe on tvOS (#1351) by @thymikee in https://github.com/callstack/agent-device/pull/1353
* fix: target Maestro scrollUntilVisible container by @thymikee in https://github.com/callstack/agent-device/pull/1338
* chore: add FreeRange range-analysis check by @thymikee in https://github.com/callstack/agent-device/pull/1354
* fix: align Android Maestro gesture dispatch by @thymikee in https://github.com/callstack/agent-device/pull/1356
* feat: publish scripts from active sessions by @thymikee in https://github.com/callstack/agent-device/pull/1357
## New Contributors
* @lott-ai made their first contribution in https://github.com/callstack/agent-device/pull/1206
* @mvanhorn made their first contribution in https://github.com/callstack/agent-device/pull/1238
* @billsbooth made their first contribution in https://github.com/callstack/agent-device/pull/1263
* @adamTrz made their first contribution in https://github.com/callstack/agent-device/pull/1325
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.19.3...v0.20.0
v0.19.3
## What's Changed
* fix: guide agents past iOS keyboard dismissal and get-text guesses by @thymikee in https://github.com/callstack/agent-device/pull/1173
* fix: make settle tail list real actionable targets by @thymikee in https://github.com/callstack/agent-device/pull/1172
* feat: fix codex runner, add --override-doc grading, port skillgym quiz cases to help-conformance bench by @thymikee in https://github.com/callstack/agent-device/pull/1176
* fix: add curated suggestions for open-url and close-session by @thymikee in https://github.com/callstack/agent-device/pull/1175
* docs: ADR for interactive replay and resolution disclosure by @thymikee in https://github.com/callstack/agent-device/pull/1177
* chore: add agent-efficiency regression guards by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1174
* refactor(daemon): route perf metrics sampling body through PlatformPlugin facet by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1191
* test(output-economy): add routine-workflow output-behavior oracle by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1190
* fix: align Maestro swipe semantics across platforms by @thymikee in https://github.com/callstack/agent-device/pull/1179
* ci: ratchet against production-unused exports by @thymikee in https://github.com/callstack/agent-device/pull/1202
* feat: add derived fail-open check:affected selector by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1195
* refactor: remove production-unused exports by @thymikee in https://github.com/callstack/agent-device/pull/1203
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.19.2...v0.19.3
v0.19.2
## What's Changed
* fix: read runner cache package version from project root by @thymikee in https://github.com/callstack/agent-device/pull/1170
* fix: point unknown selector keys at role=/label= forms by @thymikee in https://github.com/callstack/agent-device/pull/1165
* fix: reap idle daemons and take over stale runner leases by @thymikee in https://github.com/callstack/agent-device/pull/1169
* fix: make manual-qa help self-sufficient and slim routine help paths by @thymikee in https://github.com/callstack/agent-device/pull/1168
* fix: alias launch/relaunch to open and suggest canonical commands for unknown names by @thymikee in https://github.com/callstack/agent-device/pull/1166
* feat: include unchanged interactive refs in settle output by @thymikee in https://github.com/callstack/agent-device/pull/1167
* fix: stabilize android maestro gestures by @thymikee in https://github.com/callstack/agent-device/pull/1171
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.19.1...v0.19.2
v0.19.1
## Highlights
- **TV remote control**: Added `tv-remote` for Android TV and tvOS focus navigation. [[#1147](https://github.com/callstack/agent-device/pull/1147)](https://github.com/callstack/agent-device/pull/1147)
- **Session event timeline**: Added `agent-device events` and `events.ndjson` for compact request/action history. [[#1032](https://github.com/callstack/agent-device/pull/1032)](https://github.com/callstack/agent-device/pull/1032)
- **Re.Pack support**: `metro prepare` now supports Re.Pack apps and auto-detects Re.Pack projects. [[#1145](https://github.com/callstack/agent-device/pull/1145)](https://github.com/callstack/agent-device/pull/1145)
- **Better visual evidence**: iOS simulator screenshots now use logical 1x density by default, and recordings are app-scoped unless requested otherwise. [[#1160](https://github.com/callstack/agent-device/pull/1160)](https://github.com/callstack/agent-device/pull/1160), [[#1163](https://github.com/callstack/agent-device/pull/1163)](https://github.com/callstack/agent-device/pull/1163)
- **More reliable iOS automation**: Hardened iOS snapshots, drags, and XCTest recovery paths. [[#1144](https://github.com/callstack/agent-device/pull/1144)](https://github.com/callstack/agent-device/pull/1144), [[#1148](https://github.com/callstack/agent-device/pull/1148)](https://github.com/callstack/agent-device/pull/1148), [[#1158](https://github.com/callstack/agent-device/pull/1158)](https://github.com/callstack/agent-device/pull/1158)
- **Clearer agent guidance**: Help/docs now better explain `--settle`, `fill` vs `type`, `doctor`, and Android IME handling. [[#1154](https://github.com/callstack/agent-device/pull/1157)](https://github.com/callstack/agent-device/pull/1157), [[#1164](https://github.com/callstack/agent-device/pull/1164)](https://github.com/callstack/agent-device/pull/1164)
## What's Changed
* test: remove slow-test ratchet pins by @thymikee in https://github.com/callstack/agent-device/pull/1143
* fix: soften recovered snapshot warning by @thymikee in https://github.com/callstack/agent-device/pull/1146
* fix: omit interaction uptime from wire responses by @thymikee in https://github.com/callstack/agent-device/pull/1142
* fix: keep XCTest tree snapshots on main by @thymikee in https://github.com/callstack/agent-device/pull/1144
* feat: add TV remote command by @thymikee in https://github.com/callstack/agent-device/pull/1147
* fix: keep iOS synthesized drags off AX by @thymikee in https://github.com/callstack/agent-device/pull/1148
* feat: support Re.Pack dev server prepare by @thymikee in https://github.com/callstack/agent-device/pull/1145
* fix: derive interaction response data transforms by @thymikee in https://github.com/callstack/agent-device/pull/1149
* fix: improve settle observation guidance by @thymikee in https://github.com/callstack/agent-device/pull/1154
* refactor: make iOS synthesized gesture policy explicit by @thymikee in https://github.com/callstack/agent-device/pull/1152
* refactor: derive command identity from descriptors by @thymikee in https://github.com/callstack/agent-device/pull/1151
* fix: handle Android IME overlays in snapshots by @thymikee in https://github.com/callstack/agent-device/pull/1157
* fix: narrow client result contracts by @thymikee in https://github.com/callstack/agent-device/pull/1155
* chore: migrate to TypeScript 7 by @thymikee in https://github.com/callstack/agent-device/pull/1161
* fix: normalize iOS simulator screenshot density by @thymikee in https://github.com/callstack/agent-device/pull/1160
* fix: harden iOS XCTest recovery paths by @thymikee in https://github.com/callstack/agent-device/pull/1158
* feat: add session event timeline by @szdziedzic in https://github.com/callstack/agent-device/pull/1032
* docs: clarify agent setup and text entry guidance by @thymikee in https://github.com/callstack/agent-device/pull/1164
* fix: make record app-scoped by default by @thymikee in https://github.com/callstack/agent-device/pull/1163
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.19.0...v0.19.1
v0.19.0
## Highlights
- **Act and observe in one step**: `--settle` now returns a settled diff with fresh refs, backed by `wait stable` and optional `--verify` evidence.
- **Safer refs, selectors, and taps**: `tap` aliases `press`, stale/out-of-viewport refs get warnings, non-hittable targets include hints, and MCP can auto-pin snapshot refs.
- **Cleaner snapshot verification**: snapshot output deduplicates inherited labels/identifiers, and `diff snapshot` is promoted for compact before/after checks.
- **Better diagnostics for agents**: typed errors, ADB timeout hints, stderr excerpts, and the new `capabilities` command make failures and platform support easier to act on.
- **More reliable iOS automation**: capture stalls are bounded, runner recovery preserves sessions, text entry is faster, and main-thread timeout hints are clearer.
- **More durable artifacts and recordings**: artifacts have semantic types and deterministic downloads, and Android recordings can recover after daemon restarts.
## What's Changed
* fix: hint @ref when a bare snapshot ref is passed as interaction target by @thymikee in https://github.com/callstack/agent-device/pull/1039
* Surface targetHittable/hint for non-hittable press/fill targets (#1037) by @thymikee in https://github.com/callstack/agent-device/pull/1040
* fix: report unknown command before flag-support validation by @thymikee in https://github.com/callstack/agent-device/pull/1038
* feat: accept tap as an alias of press by @thymikee in https://github.com/callstack/agent-device/pull/1053
* refactor: add shared TTL memo reset registry by @thymikee in https://github.com/callstack/agent-device/pull/1060
* docs: document conservative revisit triggers by @thymikee in https://github.com/callstack/agent-device/pull/1056
* refactor: centralize known CLI command checks by @thymikee in https://github.com/callstack/agent-device/pull/1057
* fix: clarify prepare ios-runner timing overlap by @thymikee in https://github.com/callstack/agent-device/pull/1058
* refactor: split runner xctestrun module by @thymikee in https://github.com/callstack/agent-device/pull/1062
* feat(help): document behavioral guarantees in help workflow by @thymikee in https://github.com/callstack/agent-device/pull/1054
* refactor: split oversized session and apple app files by @thymikee in https://github.com/callstack/agent-device/pull/1061
* perf: smaller minified output and a lighter eager CLI startup path by @thymikee in https://github.com/callstack/agent-device/pull/1065
* feat(snapshot): dedup inherited labels/identifiers in output; promote diff snapshot by @thymikee in https://github.com/callstack/agent-device/pull/1063
* fix: surface stderr excerpts from hand-rolled exec failure wraps by @thymikee in https://github.com/callstack/agent-device/pull/1072
* fix: make artifact inventory consumption deterministic on download by @thymikee in https://github.com/callstack/agent-device/pull/1073
* fix: surface typed error codes for metro, MCP, and batch validation failures by @thymikee in https://github.com/callstack/agent-device/pull/1070
* fix: accept selector-first `is` form and print find action confirmations by @thymikee in https://github.com/callstack/agent-device/pull/1068
* feat: add wait stable settle primitive by @thymikee in https://github.com/callstack/agent-device/pull/1059
* fix: report expired daemon resources as expiry, not INVALID_ARGS by @thymikee in https://github.com/callstack/agent-device/pull/1069
* feat(interaction): opt-in --verify evidence for press/click/fill by @thymikee in https://github.com/callstack/agent-device/pull/1064
* feat: tag daemon artifacts with semantic types by @sjchmiela in https://github.com/callstack/agent-device/pull/1066
* feat: classify adb failures with actionable hints at the executor level by @thymikee in https://github.com/callstack/agent-device/pull/1067
* fix(errors): close call-site and consumer gaps around the central error system by @thymikee in https://github.com/callstack/agent-device/pull/1071
* refactor: harden exec failure wrapping end to end by @thymikee in https://github.com/callstack/agent-device/pull/1074
* fix: honor wait budgets, preserve the daemon on polling timeouts, refuse off-screen selector taps by @thymikee in https://github.com/callstack/agent-device/pull/1075
* RFC: ADR 0011 — interaction guarantee contract (path × guarantee matrix) by @thymikee in https://github.com/callstack/agent-device/pull/1080
* feat: preflight native-ref fast path with shared interaction guards (ADR 0011) by @thymikee in https://github.com/callstack/agent-device/pull/1082
* refactor: single construction site for interaction responses (ADR 0011 Layer 2) by @thymikee in https://github.com/callstack/agent-device/pull/1083
* refactor: declare command timeout policy on descriptors (ADR 0011) by @thymikee in https://github.com/callstack/agent-device/pull/1084
* feat: warn on out-of-viewport coordinate taps (ADR 0011) by @thymikee in https://github.com/callstack/agent-device/pull/1085
* feat: golden tap-point parity table for TS and the iOS runner (ADR 0011) by @thymikee in https://github.com/callstack/agent-device/pull/1086
* build: migrate the library build from rslib to tsdown (Rolldown) by @thymikee in https://github.com/callstack/agent-device/pull/1087
* chore: delete dead tap-by-text runner arm and settledAfterMs; hint on tiny stable trees by @thymikee in https://github.com/callstack/agent-device/pull/1089
* feat: actionable hint for adb timeouts by @thymikee in https://github.com/callstack/agent-device/pull/1090
* test: interaction contract suite with registry-driven coverage gate (ADR 0011 Layer 3) by @thymikee in https://github.com/callstack/agent-device/pull/1092
* ci: drop duplicate unit-test run, cache Size base dist, typecheck with tsgo by @thymikee in https://github.com/callstack/agent-device/pull/1094
* feat: direct iOS selector falls back to tree resolution on semantic failures (ADR 0011) by @thymikee in https://github.com/callstack/agent-device/pull/1091
* feat: warn when @refs outlive the session snapshot they came from by @thymikee in https://github.com/callstack/agent-device/pull/1093
* docs: native-ref dispatch path is web-only in production by @thymikee in https://github.com/callstack/agent-device/pull/1095
* docs: refocus AGENTS.md on principles and enforcement gates by @thymikee in https://github.com/callstack/agent-device/pull/1097
* test: slow-test ratchet and speed rules from measured experiments by @thymikee in https://github.com/callstack/agent-device/pull/1099
* feat: versioned snapshot refs with MCP auto-pinning by @thymikee in https://github.com/callstack/agent-device/pull/1096
* build: drop tsc entirely and fix sandbox-hostile tests by @thymikee in https://github.com/callstack/agent-device/pull/1100
* test: split the args.test.ts aggregation along source topology by @thymikee in https://github.com/callstack/agent-device/pull/1102
* docs: tighten agent operating guide by @thymikee in https://github.com/callstack/agent-device/pull/1104
* fix: bound iOS capture stalls and make runner recovery session-preserving (#1105) by @thymikee in https://github.com/callstack/agent-device/pull/1107
* build: support packaged CLI on Node 22.12 by @thymikee in https://github.com/callstack/agent-device/pull/1116
* test: split interaction runtime tests by @thymikee in https://github.com/callstack/agent-device/pull/1113
* ci: deepen Node 22 packaged CLI smoke by @thymikee in https://github.com/callstack/agent-device/pull/1125
* fix: name split declaration chunks by @thymikee in https://github.com/callstack/agent-device/pull/1127
* test: split the Android platform test aggregation and share the scripted adb stub by @thymikee in https://github.com/callstack/agent-device/pull/1103
* fix: harden apple runner recovery by @thymikee in https://github.com/callstack/agent-device/pull/1126
* build: strip runner unit-test blocks from package by @thymikee in https://github.com/callstack/agent-device/pull/1128
* fix: recover Android recordings after daemon restart by @thymikee in https://github.com/callstack/agent-device/pull/1129
* fix: reap managed web browser orphans by @thymikee in https://github.com/callstack/agent-device/pull/1112
* refactor: extract host process primitives by @thymikee in https://github.com/callstack/agent-device/pull/1134
* feat: add capabilities command by @thymikee in https://github.com/callstack/agent-device/pull/1133
* feat: --settle returns the settled diff in the interaction response (#1101) by @thymikee in https://github.com/callstack/agent-device/pull/1106
* refactor: derive command exposure lists from descriptors by @thymikee in https://github.com/callstack/agent-device/pull/1137
* fix: speed up iOS text entry by @thymikee in https://github.com/callstack/agent-device/pull/1139
* fix: hint on iOS runner main-thread timeouts by @thymikee in https://github.com/callstack/agent-device/pull/1140
* fix: simplify Android recording recovery by @thymikee in https://github.com/callstack/agent-device/pull/1135
* fix: normalize interaction response wire shapes by @thymikee in https://github.com/callstack/agent-device/pull/1114
* fix: recover completed Android recording from pending-only manifest by @thymikee in https://github.com/callstack/agent-device/pull/1141
## New Contributors
* @sjchmiela made their first contribution in https://github.com/callstack/agent-device/pull/1066
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.18.3...v0.19.0
v0.18.3
## What's Changed
* feat: warm the iOS runner build cache from doctor and boot by @thymikee in https://github.com/callstack/agent-device/pull/1033
* feat: expose daemon artifact inventory by @szdziedzic in https://github.com/callstack/agent-device/pull/1020
* feat: list daemon artifacts through proxy sessions by @thymikee in https://github.com/callstack/agent-device/pull/1027
* fix: capture ios device logs with devicectl console by @thymikee in https://github.com/callstack/agent-device/pull/1026
## New Contributors
* @szdziedzic made their first contribution in https://github.com/callstack/agent-device/pull/1020
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.18.2...v0.18.3
v0.18.2
## What's Changed
* refactor: collapse public Platform ios/macos into apple (#979) by @thymikee in https://github.com/callstack/agent-device/pull/1002
* fix: project doctor output platform to the public leaf after the Platform collapse by @thymikee in https://github.com/callstack/agent-device/pull/1004
* test: surface-wide guard that no command response emits the internal apple platform by @thymikee in https://github.com/callstack/agent-device/pull/1005
* docs: retire plans/perfect-shape.md — roadmap complete by @thymikee in https://github.com/callstack/agent-device/pull/1003
* fix: pin agent-cdp 1.6.1 by @thymikee in https://github.com/callstack/agent-device/pull/1006
* feat: route recording + provider platform gates through PlatformPlugin facets by @thymikee in https://github.com/callstack/agent-device/pull/1007
* docs: require provider-integration + coverage verification for platform/response changes by @thymikee in https://github.com/callstack/agent-device/pull/1008
* feat: surface appleOs discriminant on public device output by @thymikee in https://github.com/callstack/agent-device/pull/1009
* perf: cut iOS open --relaunch from 11s to 2.85s by @thymikee in https://github.com/callstack/agent-device/pull/1010
* fix: reduce iOS runner keepalive log noise by @thymikee in https://github.com/callstack/agent-device/pull/1017
* perf: overlap iOS runner prewarm, seed booted-memo, hand runners off across daemon restarts by @thymikee in https://github.com/callstack/agent-device/pull/1011
* fix: stop retaining iOS runner for scoped and leased closes by @thymikee in https://github.com/callstack/agent-device/pull/1021
* fix: clarify clean-xcuitest output by @thymikee in https://github.com/callstack/agent-device/pull/1018
* feat: add opt-in exec command diagnostics by @thymikee in https://github.com/callstack/agent-device/pull/1019
* fix: surface open timing in debug diagnostics by @thymikee in https://github.com/callstack/agent-device/pull/1023
* fix: bound retained iOS runner lifetime with an idle stop by @thymikee in https://github.com/callstack/agent-device/pull/1025
* perf: collapse iOS simulator relaunch into one simctl launch call by @thymikee in https://github.com/callstack/agent-device/pull/1024
* fix(aws-device-farm): send requested platform in WebDriver capabilities by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1028
* fix(cloud-webdriver): extend remote lease TTL for cloud provider connections by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1029
* fix(cloud-webdriver): stop artifacts command from allocating a new provider session by @devin-ai-integration[bot] in https://github.com/callstack/agent-device/pull/1030
## New Contributors
* @devin-ai-integration[bot] made their first contribution in https://github.com/callstack/agent-device/pull/1028
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.18.1...v0.18.2
v0.18.1
## What's Changed
* refactor: type-safe recording backends + exhaustive capability gating by @thymikee in https://github.com/callstack/agent-device/pull/894
* perf: reduce Apple runner build overhead by @thymikee in https://github.com/callstack/agent-device/pull/898
* refactor: derive platform allow-lists from the canonical device tuples by @thymikee in https://github.com/callstack/agent-device/pull/895
* feat: add AppleOS discriminant to the device model (additive) by @thymikee in https://github.com/callstack/agent-device/pull/896
* refactor: validate JSON-RPC at the MCP/HTTP boundary by @thymikee in https://github.com/callstack/agent-device/pull/897
* refactor: derive replay metadata platforms from the canonical selectors by @thymikee in https://github.com/callstack/agent-device/pull/899
* refactor: remove shallow re-export modules and a dead branch by @thymikee in https://github.com/callstack/agent-device/pull/901
* refactor: collapse duplicated batch-step validation to one schema by @thymikee in https://github.com/callstack/agent-device/pull/902
* refactor: extract shared Android instrumentation-helper by @thymikee in https://github.com/callstack/agent-device/pull/903
* refactor: dedup daemon handler capability/session/recordAction boilerplate by @thymikee in https://github.com/callstack/agent-device/pull/904
* docs: ADR 0008 (command descriptor) + ADR 0009 (Apple consolidation) by @thymikee in https://github.com/callstack/agent-device/pull/905
* feat: command-descriptor registry (additive, parity-tested) — Phase 1 step 1 by @thymikee in https://github.com/callstack/agent-device/pull/906
* feat: build daemon command registry from descriptors, delete the hand table — Phase 1 step 2 by @thymikee in https://github.com/callstack/agent-device/pull/907
* feat: build capability matrix from descriptors, delete the hand table — Phase 1 step 3 by @thymikee in https://github.com/callstack/agent-device/pull/908
* feat: build batch allowlist from descriptors, delete the hand list — Phase 1 step 4 by @thymikee in https://github.com/callstack/agent-device/pull/909
* feat: registry-driven exhaustive command dispatch — Phase 1 step 5 by @thymikee in https://github.com/callstack/agent-device/pull/910
* feat: additive CommandResult type spine — Phase 1 step 6 by @thymikee in https://github.com/callstack/agent-device/pull/911
* feat: derive the batch command union from the as-const registry (simplify #909) — Phase 1 step 7 by @thymikee in https://github.com/callstack/agent-device/pull/912
* feat: PlatformDescriptor registry deriving the capability bucket — Phase 3 step 1 by @thymikee in https://github.com/callstack/agent-device/pull/914
* feat: typed command results, batch 1 (Phase 2 typed-results) by @thymikee in https://github.com/callstack/agent-device/pull/913
* docs: add cloud agents video by @thymikee in https://github.com/callstack/agent-device/pull/915
* refactor: consolidate apple/mobile platform family-groupings via shared predicates — Phase 3 by @thymikee in https://github.com/callstack/agent-device/pull/921
* feat: opt-in agent-cost wallClockMs behind --cost — Phase 4 slice 1 by @thymikee in https://github.com/callstack/agent-device/pull/922
* feat: infer install target from artifact by @thymikee in https://github.com/callstack/agent-device/pull/923
* perf: speed up iOS simulator screenshots by @thymikee in https://github.com/callstack/agent-device/pull/918
* feat: opt-in agent-cost runnerRoundTrips — Phase 4 slice 2 by @thymikee in https://github.com/callstack/agent-device/pull/925
* feat: expose opt-in agent-cost over MCP via includeCost — Phase 4 slice 2 by @thymikee in https://github.com/callstack/agent-device/pull/924
* feat: add opt-in agent-cost nodeCount signal — Phase 4 slice 3 by @thymikee in https://github.com/callstack/agent-device/pull/926
* perf: reuse Apple runner cache across version bumps by @thymikee in https://github.com/callstack/agent-device/pull/900
* perf: reduce iOS simulator screenshot overhead by @thymikee in https://github.com/callstack/agent-device/pull/927
* refactor: extract screenshot-diff domain out of utils — Phase 5 slice 1 by @thymikee in https://github.com/callstack/agent-device/pull/928
* feat: support resumable proxy uploads by @thymikee in https://github.com/callstack/agent-device/pull/919
* refactor: break snapshot.ts snapshot-quality.ts type cycle — Phase 5 prep by @thymikee in https://github.com/callstack/agent-device/pull/931
* refactor: seed src/kernel with snapshot.ts type module — Phase 5 slice 2 by @thymikee in https://github.com/callstack/agent-device/pull/932
* feat: typed command results, batch 2 (home/back/rotate/app-switcher) — Phase 2 by @thymikee in https://github.com/callstack/agent-device/pull/934
* feat: typed command results, batch 3 (clipboard, appstate) — Phase 2 by @thymikee in https://github.com/callstack/agent-device/pull/937
* refactor: add provider device runtime foundation by @thymikee in https://github.com/callstack/agent-device/pull/933
* feat: typed command results, batch 4 (keyboard) — Phase 2 by @thymikee in https://github.com/callstack/agent-device/pull/938
* feat: typed errors — supportedOn + retriable signals — Phase 2 by @thymikee in https://github.com/callstack/agent-device/pull/939
* feat: add replay test reporters by @thymikee in https://github.com/callstack/agent-device/pull/936
* fix: clean up maestro test reporter output by @thymikee in https://github.com/callstack/agent-device/pull/935
* feat: per-command MCP outputSchema — Phase 4 by @thymikee in https://github.com/callstack/agent-device/pull/941
* refactor: move errors/redaction/device into src/kernel — Phase 5 slice 3 by @thymikee in https://github.com/callstack/agent-device/pull/940
* fix: repoint MCP output-schemas import to kernel/device (unbreak main) by @thymikee in https://github.com/callstack/agent-device/pull/943
* feat: leveled response views + --level knob with snapshot digest — Phase 4 by @thymikee in https://github.com/callstack/agent-device/pull/942
* refactor: delete WaitCommandResult/AlertCommandResult mirror types — Phase 2c by @thymikee in https://github.com/callstack/agent-device/pull/946
* refactor: extract metro/ folder — Phase 5 by @thymikee in https://github.com/callstack/agent-device/pull/947
* feat: expose responseLevel over MCP — Phase 4 by @thymikee in https://github.com/callstack/agent-device/pull/944
* feat: screenshot digest response-view — Phase 4 by @thymikee in https://github.com/callstack/agent-device/pull/945
* refactor: move contracts.ts into src/kernel — Phase 5 by @thymikee in https://github.com/callstack/agent-device/pull/950
* refactor: extract remote/ folder — Phase 5 by @thymikee in https://github.com/callstack/agent-device/pull/951
* chore: exclude helper readmes from package by @thymikee in https://github.com/callstack/agent-device/pull/954
* refactor: extract snapshot/ folder — Phase 5 by @thymikee in https://github.com/callstack/agent-device/pull/953
* feat: find/get digest response-views + batch-step elision — Phase 4 by @thymikee in https://github.com/callstack/agent-device/pull/955
* refactor: absorb CLI parser into cli/parser/ — Phase 5 by @thymikee in https://github.com/callstack/agent-device/pull/958
* fix: avoid unsafe iOS keyboard dismissal by @thymikee in https://github.com/callstack/agent-device/pull/957
* refactor: PlatformPlugin registry foundation (step a) — Phase 3 by @thymikee in https://github.com/callstack/agent-device/pull/956
* refactor: extract client/ folder — Phase 5 by @thymikee in https://github.com/callstack/agent-device/pull/960
* chore: prune public package exports by @thymikee in https://github.com/callstack/agent-device/pull/961
* refactor: split daemon client driver into daemon/client/ — Phase 5 by @thymikee in https://github.com/callstack/agent-device/pull/962
* refactor: route capability bucket through PlatformPlugin + pin supports() closures (Phase 3 step b) by @thymikee in https://github.com/callstack/agent-device/pull/965
* fix: extend iOS physical install timeout by @thymikee in https://github.com/callstack/agent-device/pull/964
* ci: automate iOS runner request-count gate for the Apple runner unwind (Phase 3 step c prep) by @thymikee in https://github.com/callstack/agent-device/pull/966
* fix: respect prepare timeout for runner health checks by @thymikee in https://github.com/callstack/agent-device/pull/967
* feat: support live replay test reporters by @thymikee in https://github.com/callstack/agent-device/pull/959
* refactor: consolidate Apple platform internals by @thymikee in https://github.com/callstack/agent-device/pull/968
* docs: fix stale platforms/ios paths after Apple consolidation (#968) + remaining-work plan by @thymikee in https://github.com/callstack/agent-device/pull/969
* fix: restore runnerRoundTrips agent-cost field dropped in #968 by @thymikee in https://github.com/callstack/agent-device/pull/970
* docs: distinguish removed request-count CI gate from restored cost.runnerRoundTrips (Phase 3 plan) by @thymikee in https://github.com/callstack/agent-device/pull/971
* docs: retire phase3-platform-plugin-progress.md; track remaining work in issues (#972) by @thymikee in https://github.com/callstack/agent-device/pull/982
* test: relocate Apple engine unit tests into platforms/apple/core (#980) by @thymikee in https://github.com/callstack/agent-device/pull/983
* feat: enforce import-direction DAG (Phase-5 layering lint) by @thymikee in https://github.com/callstack/agent-device/pull/984
* refactor: split daemon server runtime into daemon/server/ — Phase 5 by @thymikee in https://github.com/callstack/agent-device/pull/985
* refactor: consolidate public SDK entry barrels into src/sdk/ — Phase 5 by @thymikee in https://github.com/callstack/agent-device/pull/986
* fix: exempt sdk/ public barrels from R3 platforms-seam — unblock red main by @thymikee in https://github.com/callstack/agent-device/pull/987
* test: relocate the 2 deferred Apple runner/recording tests (closes #980) by @thymikee in https://github.com/callstack/agent-device/pull/988
* feat: gate watchOS as an explicit unsupported sentinel (closes #977) by @thymikee in https://github.com/callstack/agent-device/pull/990
* feat: route daemon app-log backend through PlatformPlugin appLog facet (#974) by @thymikee in https://github.com/callstack/agent-device/pull/991
* refactor(apple): promote tvOS to an explicit Apple-OS leaf (#976) by @thymikee in https://github.com/callstack/agent-device/pull/992
* refactor: relocate Apple supports()/unsupportedHint() closures onto the plugin — Phase 3 b.2 (#973) by @thymikee in https://github.com/callstack/agent-device/pull/993
* feat: add hosted WebDriver provider support by @thymikee in https://github.com/callstack/agent-device/pull/948
* feat: add cross-platform audio probe by @thymikee in https://github.com/callstack/agent-device/pull/880
* refactor(daemon): route perf support gate through PlatformPlugin perf facet (#974) by @thymikee in https://github.com/callstack/agent-device/pull/995
* feat: add doctor command by @thymikee in https://github.com/callstack/agent-device/pull/883
* refactor: rename ios-runner -> apple-runner (#981) by @thymikee in https://github.com/callstack/agent-device/pull/996
* refactor: per-AppleOS capability table (Phase 3 d.5) by @thymikee in https://github.com/callstack/agent-device/pull/997
* fix: trim root type exports by @thymikee in https://github.com/callstack/agent-device/pull/999
* refactor: relocate Apple plugin + interactor + interactions under platforms/apple (#975) by @thymikee in https://github.com/callstack/agent-device/pull/1001
* feat: polish replay test progress reporter by @thymikee in https://github.com/callstack/agent-device/pull/998
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.18.0...v0.18.1
v0.18.0
## What's Changed
* docs: clarify agent-device help entrypoint by @thymikee in https://github.com/callstack/agent-device/pull/884
* feat: support cdp remote bridge sessions by @thymikee in https://github.com/callstack/agent-device/pull/878
* refactor: tighten daemon output helpers by @thymikee in https://github.com/callstack/agent-device/pull/892
* refactor: model recording backends by @thymikee in https://github.com/callstack/agent-device/pull/893
* feat: expose web screen recording by @thymikee in https://github.com/callstack/agent-device/pull/891
* feat: add integrated device leasing by @thymikee in https://github.com/callstack/agent-device/pull/890
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.17.10...v0.18.0
v0.17.10
## What's Changed
* docs: configure agent skill conventions by @thymikee in https://github.com/callstack/agent-device/pull/871
* fix: avoid copying pnpm node_modules into worktrees by @thymikee in https://github.com/callstack/agent-device/pull/872
* docs: clarify agent-device QA mental model by @thymikee in https://github.com/callstack/agent-device/pull/875
* test: migrate Android recording sizing coverage by @thymikee in https://github.com/callstack/agent-device/pull/876
* fix: refine Apple provider pressure reporting by @thymikee in https://github.com/callstack/agent-device/pull/877
* test: migrate test app to expo dev client by @thymikee in https://github.com/callstack/agent-device/pull/881
* fix: clarify proxy runner ownership by @thymikee in https://github.com/callstack/agent-device/pull/882
* feat: add cdp command agent-cdp passthrough by @thymikee in https://github.com/callstack/agent-device/pull/873
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.17.9...v0.17.10
v0.17.9
## What's Changed
* refactor: share daemon HTTP contract helpers by @thymikee in https://github.com/callstack/agent-device/pull/846
* fix: validate batch steps through command contracts by @thymikee in https://github.com/callstack/agent-device/pull/848
* refactor: deepen runner command traits by @thymikee in https://github.com/callstack/agent-device/pull/847
* chore: add worktree include config by @thymikee in https://github.com/callstack/agent-device/pull/853
* refactor: centralize command family facets by @thymikee in https://github.com/callstack/agent-device/pull/849
* docs: add README articles and videos by @thymikee in https://github.com/callstack/agent-device/pull/855
* docs: add selector capture reliability contract by @thymikee in https://github.com/callstack/agent-device/pull/858
* refactor: migrate command families to facets by @thymikee in https://github.com/callstack/agent-device/pull/854
* test: guard Maestro swipe stabilization flag by @thymikee in https://github.com/callstack/agent-device/pull/860
* refactor: unify selector capture runtime by @thymikee in https://github.com/callstack/agent-device/pull/857
* refactor: extract daemon selector capture runtime by @thymikee in https://github.com/callstack/agent-device/pull/859
* fix: clean up Android snapshot helper sessions by @thymikee in https://github.com/callstack/agent-device/pull/862
* fix: add web viewport control and screenshot aliases by @thymikee in https://github.com/callstack/agent-device/pull/865
* fix: recover Android snapshots from system-only helper output by @thymikee in https://github.com/callstack/agent-device/pull/861
* fix: use desktop scroll events on macOS by @thymikee in https://github.com/callstack/agent-device/pull/863
* fix: honor scroll duration across platform plumbing by @thymikee in https://github.com/callstack/agent-device/pull/866
* fix: resolve web find locators by @thymikee in https://github.com/callstack/agent-device/pull/870
* fix: enable ios runner prepare in sandboxed environments by @thymikee in https://github.com/callstack/agent-device/pull/869
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.17.8...v0.17.9
v0.17.8
## What's Changed
* fix: speed up web snapshots by @thymikee in https://github.com/callstack/agent-device/pull/842
* ci: fix iOS simulator boot timeout by @thymikee in https://github.com/callstack/agent-device/pull/845
* fix: use native web ref interactions by @thymikee in https://github.com/callstack/agent-device/pull/843
* feat: add agent-device proxy command by @thymikee in https://github.com/callstack/agent-device/pull/844
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.17.7...v0.17.8
v0.17.7
## What's Changed
* feat: add web platform vocabulary by @thymikee in https://github.com/callstack/agent-device/pull/824
* feat: add semantic web provider seam by @thymikee in https://github.com/callstack/agent-device/pull/825
* test: cover web provider scenario by @thymikee in https://github.com/callstack/agent-device/pull/827
* fix: align web snapshot and capability support by @thymikee in https://github.com/callstack/agent-device/pull/828
* fix: clean daemon-owned ios runner leases by @thymikee in https://github.com/callstack/agent-device/pull/829
* feat: bridge web provider to agent-browser by @thymikee in https://github.com/callstack/agent-device/pull/826
* feat(recording): align quality and max-size controls by @ryanda9910 in https://github.com/callstack/agent-device/pull/816
* feat: manage web backend setup by @thymikee in https://github.com/callstack/agent-device/pull/833
* fix: preserve web backend setup hint by @thymikee in https://github.com/callstack/agent-device/pull/835
* chore: remove test-only dead exports by @thymikee in https://github.com/callstack/agent-device/pull/836
* test: add live web platform smoke by @thymikee in https://github.com/callstack/agent-device/pull/832
* docs: document minimal web support by @thymikee in https://github.com/callstack/agent-device/pull/831
* docs: mention web in README tagline by @thymikee in https://github.com/callstack/agent-device/pull/837
* test: improve SkillGym guidance coverage by @thymikee in https://github.com/callstack/agent-device/pull/839
* feat: expose web network dump through agent-browser by @thymikee in https://github.com/callstack/agent-device/pull/838
* docs: document multi-worktree Metro workflow by @thymikee in https://github.com/callstack/agent-device/pull/841
* docs: simplify CLI help flag scoping by @thymikee in https://github.com/callstack/agent-device/pull/840
## New Contributors
* @ryanda9910 made their first contribution in https://github.com/callstack/agent-device/pull/816
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.17.6...v0.17.7
v0.17.6
## What's Changed
* perf: optimize Rslib startup build by @thymikee in https://github.com/callstack/agent-device/pull/803
* feat(ios): support external xctest runner artifact by @hannojg in https://github.com/callstack/agent-device/pull/806
* fix: classify external xctest runner flags by @thymikee in https://github.com/callstack/agent-device/pull/810
* fix(ios): add no-op XCTest runner startup mode by @hannojg in https://github.com/callstack/agent-device/pull/807
* fix: attribute Maestro iOS runner setup failures by @thymikee in https://github.com/callstack/agent-device/pull/809
* feat: improve maestro test reporter by @thymikee in https://github.com/callstack/agent-device/pull/811
## New Contributors
* @hannojg made their first contribution in https://github.com/callstack/agent-device/pull/806
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.17.5...v0.17.6
v0.17.5
## What's Changed
* fix: rotate synthesized iOS taps into native screen space by @ysamlan in https://github.com/callstack/agent-device/pull/804
* fix: stabilize Android Maestro replay interactions by @thymikee in https://github.com/callstack/agent-device/pull/805
## New Contributors
* @ysamlan made their first contribution in https://github.com/callstack/agent-device/pull/804
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.17.4...v0.17.5
v0.17.4
## What's Changed
* fix: tighten iOS runner crash classification by @thymikee in https://github.com/callstack/agent-device/pull/797
* fix: stabilize iOS runner gestures by @thymikee in https://github.com/callstack/agent-device/pull/800
* fix: detect disabled Developer Tools mode for iOS runner by @knchst in https://github.com/callstack/agent-device/pull/792
* fix: report snapshot timing diagnostics by @pupuking723 in https://github.com/callstack/agent-device/pull/798
* fix: align Maestro test discovery order by @thymikee in https://github.com/callstack/agent-device/pull/801
* fix: stabilize Android Maestro replay reliability by @thymikee in https://github.com/callstack/agent-device/pull/799
* fix: match Maestro directory test order by @thymikee in https://github.com/callstack/agent-device/pull/802
## New Contributors
* @knchst made their first contribution in https://github.com/callstack/agent-device/pull/792
* @pupuking723 made their first contribution in https://github.com/callstack/agent-device/pull/798
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.17.3...v0.17.4
v0.17.1
## What's Changed
* fix: stabilize Maestro replay on iOS by @thymikee in https://github.com/callstack/agent-device/pull/713
* feat: record replay test videos by @thymikee in https://github.com/callstack/agent-device/pull/712
* refactor: deepen runner disposal by @thymikee in https://github.com/callstack/agent-device/pull/714
* refactor: deepen replay test attempt module by @thymikee in https://github.com/callstack/agent-device/pull/715
* fix: use XCTest drag for iOS swipes by @thymikee in https://github.com/callstack/agent-device/pull/716
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.17.0...v0.17.1
v0.17.0
## What's Changed
* fix: keep iOS runner hot across app closes by @thymikee in https://github.com/callstack/agent-device/pull/700
* fix: stabilize iOS runner navigation taps by @thymikee in https://github.com/callstack/agent-device/pull/702
* fix: scope runner diagnostics to sessions by @thymikee in https://github.com/callstack/agent-device/pull/704
* feat: add perf metrics and frames commands by @thymikee in https://github.com/callstack/agent-device/pull/703
* fix: harden iOS replay runner prewarm by @thymikee in https://github.com/callstack/agent-device/pull/705
* fix: recover depth-limited iOS snapshots after AX failures by @thymikee in https://github.com/callstack/agent-device/pull/706
* feat: add replay test sharding by @thymikee in https://github.com/callstack/agent-device/pull/707
* fix: decode escaped selector values by @thymikee in https://github.com/callstack/agent-device/pull/711
* fix: harden covered snapshot targets by @thymikee in https://github.com/callstack/agent-device/pull/708
* fix: resolve Maestro taps from regular snapshots by @thymikee in https://github.com/callstack/agent-device/pull/709
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.16.14...v0.17.0
v0.16.14
## What's Changed
* docs: update docs router dependency by @thymikee in https://github.com/callstack/agent-device/pull/691
* fix: retry iOS runner prepare launch by @thymikee in https://github.com/callstack/agent-device/pull/692
* refactor: centralize daemon command registry by @thymikee in https://github.com/callstack/agent-device/pull/693
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.16.13...v0.16.14
v0.16.13
## What's Changed
* fix: stabilize Maestro post-gesture snapshots by @thymikee in https://github.com/callstack/agent-device/pull/681
* refactor: consolidate android gesture backend selection by @thymikee in https://github.com/callstack/agent-device/pull/689
* feat: cache iOS runner artifacts during prepare by @thymikee in https://github.com/callstack/agent-device/pull/688
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.16.12...v0.16.13
v0.16.12
## What's Changed
* fix: align iOS runner cache target metadata by @thymikee in https://github.com/callstack/agent-device/pull/682
* docs: update public documentation links by @thymikee in https://github.com/callstack/agent-device/pull/684
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.16.11...v0.16.12
v0.16.11
## What's Changed
* docs: clarify physical device signing help by @thymikee in https://github.com/callstack/agent-device/pull/672
* fix: filter covered Android snapshot surfaces by @thymikee in https://github.com/callstack/agent-device/pull/675
* feat: add iOS runner prepare command by @thymikee in https://github.com/callstack/agent-device/pull/673
* fix: improve session ownership and recovery guidance by @thymikee in https://github.com/callstack/agent-device/pull/674
* fix: allow fresh session device binding by @thymikee in https://github.com/callstack/agent-device/pull/677
* perf: speed up iOS swipes and harden runner cache by @thymikee in https://github.com/callstack/agent-device/pull/676
* fix: restore snapshot request timeout by @thymikee in https://github.com/callstack/agent-device/pull/680
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.16.10...v0.16.11
v0.16.10
## What's Changed
* fix: bound iOS simulator app termination by @thymikee in https://github.com/callstack/agent-device/pull/654
* chore: update Glama MCP metadata by @thymikee in https://github.com/callstack/agent-device/pull/655
* fix: stabilize android perf harness setup by @thymikee in https://github.com/callstack/agent-device/pull/657
* refactor(ios): gesture-response factory + performGesture wrapper by @thymikee in https://github.com/callstack/agent-device/pull/659
* refactor: add iOS runner lifecycle protocol by @thymikee in https://github.com/callstack/agent-device/pull/658
* refactor(ios): safely(tag:default:) wrapper for the catch-log-and-default band-aid by @thymikee in https://github.com/callstack/agent-device/pull/660
* perf: recover iOS runner responses by status by @thymikee in https://github.com/callstack/agent-device/pull/661
* docs(ios): performGesture idleTimeout guardrail + swipe/mouseClick rationale by @thymikee in https://github.com/callstack/agent-device/pull/664
* fix: keep iOS runner status transport visible by @thymikee in https://github.com/callstack/agent-device/pull/663
* fix: tune iOS runner response retention by @thymikee in https://github.com/callstack/agent-device/pull/665
* fix: reduce iOS runner invalidation after status recovery by @thymikee in https://github.com/callstack/agent-device/pull/666
* perf: adapt ios runner uptime preflight by @thymikee in https://github.com/callstack/agent-device/pull/662
* perf: avoid Android hierarchy probe for scroll by @thymikee in https://github.com/callstack/agent-device/pull/671
**Full Changelog**: https://github.com/callstack/agent-device/compare/v0.16.9...v0.16.10
v0.16.9
## What's Changed
* fix: dismiss RN overlays in Maestro compat by @thymikee in https://github.com/callstackincubator/agent-device/pull/650
* fix: improve maestro test output by @thymikee in https://github.com/callstackincubator/agent-device/pull/652
* refactor(ios): extract the text-entry engine into RunnerTests+TextEntry.swift by @thymikee in https://github.com/callstackincubator/agent-device/pull/651
* fix: align Maestro assertVisible timeout by @thymikee in https://github.com/callstackincubator/agent-device/pull/653
**Full Changelog**: https://github.com/callstackincubator/agent-device/compare/v0.16.8...v0.16.9
v0.16.8
## What's Changed
* feat: e2e command perf benchmark harness + nightly CI by @thymikee in https://github.com/callstackincubator/agent-device/pull/630
* perf(ios): make get text ~80x faster for non-editable elements by @thymikee in https://github.com/callstackincubator/agent-device/pull/632
* perf+fix(ios): faster text entry (readiness + typed-query field resolve) + fix fill mis-navigation by @thymikee in https://github.com/callstackincubator/agent-device/pull/633
* fix(ios): drive gesture pinch via two-finger synthesis (#629) by @thymikee in https://github.com/callstackincubator/agent-device/pull/634
* fix: improve iOS selector reads and Maestro reliability by @thymikee in https://github.com/callstackincubator/agent-device/pull/636
* fix: preserve iOS AX snapshot failures by @thymikee in https://github.com/callstackincubator/agent-device/pull/639
* fix: clean up recording stop and snapshot traversal by @thymikee in https://github.com/callstackincubator/agent-device/pull/640
* fix: retry no-op maestro taps by @thymikee in https://github.com/callstackincubator/agent-device/pull/644
* refactor(ios): single CommandTraits table for runner command classification by @thymikee in https://github.com/callstackincubator/agent-device/pull/642
* fix: improve maestro test output by @thymikee in https://github.com/callstackincubator/agent-device/pull/647
* fix: harden React Native overlay dismissal by @thymikee in https://github.com/callstackincubator/agent-device/pull/641
* fix: normalize maestro loading ellipsis by @thymikee in https://github.com/callstackincubator/agent-device/pull/648
* fix(ios): unify multi-touch gestures on two-finger synthesis + hinted unsupported errors by @thymikee in https://github.com/callstackincubator/agent-device/pull/645
* fix: resolve test-app dependabot alerts by @thymikee in https://github.com/callstackincubator/agent-device/pull/649
**Full Changelog**: https://github.com/callstackincubator/agent-device/compare/v0.16.7...v0.16.8
暂无评论...