Repository navigation
v0.21.29
What's Changed
- ci(release): drop the stable approval gate and run nightlies once a day by @thymikee in #3621
- refactor(replay-port): own the replay backend contract in contracts by @thymikee in #3622
- fix(settle): arm the dismissal confirmation on the producer's presented-surface fact by @thymikee in #3570
- fix(lease): return a retried allocation's own lease and refuse an unbound renewed lease by @thymikee in #3619
- ci: cut runner load from drafts, re-pushes, and the mutation canary by @thymikee in #3624
- fix(build): resolve tsdown vendor alias with fileURLToPath by @kkkhs in #3629
- refactor(daemon): move wire request and response types out of the daemon package by @thymikee in #3616
- refactor(daemon): move CLI-shared daemon modules out of the daemon package and gate CLI reachability (R78) by @thymikee in #3625
- fix(android): open the macOS emulator window behind the focused app by @thymikee in #3617
- refactor(maestro): shape the replay backend as a create(host) plugin by @thymikee in #3623
- refactor(interaction): move the moving-target decision policy into the runtime gate by @thymikee in #3631
- refactor(daemon): add the single package entry and resolve its metadata consumers by @thymikee in #3633
- chore(gates): drop the daemon entry's over-ceiling approval now main carries it by @thymikee in #3653
- chore(interaction): remove retired readiness forwarding by @thymikee in #3637
- fix(android): refuse close when stop fences expire by @thymikee in #3562
- refactor(daemon): move the daemon-only transport tests into the package by @thymikee in #3638
- fix(interaction): preserve failed settle counters by @thymikee in #3640
- refactor(command-registry): name registry descriptor tests for the module they test by @thymikee in #3644
- refactor(replay): colocate eight package tests and drop four unused exports by @thymikee in #3647
- refactor(test): colocate sdk, remote and metro tests with their modules by @thymikee in #3646
- refactor(move): name the agent-device client tests for their module by @thymikee in #3649
- refactor(replay): move four daemon tests of replay-port code into replay-port by @thymikee in #3650
- refactor(contracts,selectors,device-selection): name tests for the module they test by @thymikee in #3651
- refactor(capture-kit): colocate fifteen tests with the modules they test by @thymikee in #3654
- refactor(move): colocate client and cli tests with their modules by @thymikee in #3655
- refactor(command-registry): move the wait-positionals test into the package by @thymikee in #3656
- refactor(platform-apple): colocate sixteen tests with the modules they test by @thymikee in #3657
- refactor(move): move the kernel errors tests into the kernel package by @thymikee in #3665
- refactor(contracts): move the android input ownership test beside its module by @thymikee in #3661
- refactor(move): move artifact guards to test/repo-guards by @thymikee in #3663
- refactor(apple): reduce SnapshotPresentedSurface to the element-type rule the runner runs by @thymikee in #3632
- refactor(tests): colocate platform-web, android, host-kit, kernel, webdriver and vega tests by @thymikee in #3648
- refactor(interaction): inline unavailable settle result type by @thymikee in #3676
- fix(limrun): attribute API-key traffic with the SDK userAgent option by @thymikee in #3679
- refactor(move): move the interaction-guarantee and command-doc guards to test/repo-guards by @thymikee in #3680
- refactor(platform-apple): split apps.test.ts by the module each test covers by @thymikee in #3671
- refactor(move): move the snapshot-diagnostics and gesture-plan tests into contracts by @thymikee in #3668
- refactor(platform-apple): stop exporting the runner test host by @thymikee in #3675
- refactor(daemon): require composed router capabilities by @thymikee in #3639
- fix(limrun): normalize variant iOS scalar attributes into snapshot text by @thymikee in #3641
- refactor(capture): require complete runtime snapshots by @thymikee in #3642
- chore(tooling): explicitly typecheck coverage verdicts by @thymikee in #3643
- feat(sdk): export isUnreadableCaptureContentError by @okwasniewski in #3664
- refactor(move): move the iOS presentation-once test into capture-kit by @thymikee in #3677
- refactor(move): move the Android capture-failure-reason test into platform-android by @thymikee in #3678
- refactor(daemon): relocate the server runtime tests by what they assert by @thymikee in #3652
- refactor(daemon): relocate the handler tests by what they assert by @thymikee in #3666
- refactor(daemon): relocate the session-lifecycle tests by what they assert by @thymikee in #3670
- refactor(daemon): relocate the interaction touch tests by what they assert by @thymikee in #3672
- refactor(layering): R83 forbids package exports that publish test support by @thymikee in #3645
- refactor(layering): R11 lets test support resolve private siblings through devDependencies by @thymikee in #3659
- refactor(test-kit): one named-export entry, and pin its shape in R83 by @thymikee in #3667
- refactor(layering): R84 requires each new unit test to be named for a module beside it by @thymikee in #3669
- docs: say where tests and fixtures live and which rules hold it by @thymikee in #3673
- fix(test): migrate the daemon stack's tests to complete runtime snapshots by @thymikee in #3684
- refactor(settings): declare settings once and admit them per setting by @thymikee in #3662
- chore(daemon): declare @agent-device/proxy as a devDependency by @thymikee in #3685
- build(typescript): move root project references into tsconfig.typecheck.json by @thymikee in #3688
- ci: fold six CI jobs into four with parallel and background steps; cancel superseded and closed-PR runs by @thymikee in #3658
- refactor(test-kit): host the target classification capture fixture by @thymikee in #3691
- refactor(test-kit): move the dispatch-disclosure harness out of contracts by @thymikee in #3690
- fix(ios): handle delayed launch confirmations without stopping XCTest by @thymikee in #3682
- refactor(test-kit): drop command-registry by making the replay-script generator a root fixture by @thymikee in #3687
- refactor(test-kit): drop the daemon-contracts dependency by @thymikee in #3686
- refactor(daemon-contracts): drop the registration and claims fixture exports by @thymikee in #3689
- feat(react-devtools): inspect React components and profile renders through the Metro inspector by @thymikee in #3613
- fix(record): start the touch overlay budget when record stop starts finalizing by @thymikee in #3697
- fix(record): record a remote client's default recording on the daemon host by @thymikee in #3696
- refactor(react-devtools): reuse CLI output and Metro session ownership by @thymikee in #3694
- refactor(daemon): relocate the find tests by what they assert by @thymikee in #3693
- refactor(daemon): relocate the settle, disclosure and capture tests by what they assert by @thymikee in #3698
- refactor(daemon): relocate the target-evidence tests by what they assert by @thymikee in #3700
- refactor(daemon): own the replay script source fixture where it is used by @thymikee in #3704
- test(daemon): fold the touch-forwarding command-surface fake into the touch fake by @thymikee in #3708
- refactor(test-kit): move the interaction-targeting node fixtures out of selectors by @thymikee in #3709
- refactor(react-native): collocate Metro, companion, and DevTools by @thymikee in #3706
- feat(tooling): simplify agent workflows and validation by @thymikee in #3705
- refactor(capture-kit): move screenshot-diff beside its pixel worker and overlays by @thymikee in #3710
- feat(settings): add Android mobile-data on|off by @mikolajadamowicz in #3636
- refactor(plugins): extract the provider plugins into a private package by @thymikee in #3712
- refactor(remote): extract src/remote into @agent-device/remote by @thymikee in #3711
- docs(fill): typed-input privacy stops at agent-device surfaces by @thymikee in #3719
- test(coverage): split gap rows into owed work and accepted limitations by @thymikee in #3717
- fix(runner): refuse an iOS coordinate fill whose point names no text input by @thymikee in #3718
- docs(adr): write the replay ADR and proposed ADRs in ASD-STE100 by @thymikee in #3730
- feat(apps): add standalone uninstall command by @mikolajadamowicz in #3720
- fix(ios): alert dismiss picks a listed decline, never a guessed one by @thymikee in #3715
- refactor(platform): colocate the HarmonyOS, Linux and web interactors behind lazy factory facades by @thymikee in #3713
- test: move root src tests off the daemon's testing exports by @thymikee in #3728
- fix(maestro): type inputText with a 75 ms per-character delay on Android by @airowe in #3725
- fix(find): refuse a focus match behind the visible keyboard (#2622) by @thymikee in #3727
- test(coverage): record Linux uninstall as an accepted limitation by @thymikee in #3740
- fix(scroll): refuse an unreadable capture before scroll top/bottom decides by @airowe in #3736
- fix(macos): attach to a running app instead of launching a duplicate on open by @thymikee in #3707
- feat(android): simulate an incoming call or SMS on an emulator by @mikolajadamowicz in #3724
- docs(agents): simplify review scope and follow-up rounds by @thymikee in #3741
- fix(android): ignore emulator log lines in -list-avds output by @airowe in #3743
- test: move the daemon-composition tests off the daemon's testing exports by @thymikee in #3742
- fix(apple): name an Xcode too old for its host macOS as a runner startup failure by @thymikee in #3739
- refactor(plugins): make the plugin framework provider-independent by @thymikee in #3722
- test: route test/ and scripts/ off the daemon's testing exports by @thymikee in #3733
- fix(daemon): answer a named missing session on the session, not the device by @thymikee in #3701
- feat(daemon): quiesce request that retires an idle daemon atomically by @thymikee in #3764
- feat(client): daemonLifecycle attach mode and ensureDaemon() by @thymikee in #3765
- feat(cli): ensure the daemon explicitly before attaching in the CLI and MCP by @thymikee in #3766
- fix(daemon): refuse leases for providers without a registered runtime by @thymikee in #3773
- fix(daemon-client): wait for an acknowledged quiesce instead of killing the daemon by @thymikee in #3780
- refactor(daemon): publish a single package entrypoint by @thymikee in #3781
- feat(plugins): plugin contract v2 and one provider registry by @thymikee in #3767
- feat(daemon): daemon status lists the registered provider plugins by @thymikee in #3768
- docs(plugins): document plugin contract v2, the inventory and ADR 0034 by @thymikee in #3769
- feat(provider-testmu): publish @agent-device/testmu on plugin contract v2 by @thymikee in #3770
- fix(ios-runner): stop wide sliders from wedging tree snapshots by @gwdp in #3776
- fix(daemon): scope a transient device claim to the session that holds it by @thymikee in #3714
- fix(daemon-client): document the drain timeout and tighten ensureDaemon follow-ups by @thymikee in #3783
- fix: align replay, SDK, and session boundaries with ADRs by @thymikee in #3762
- fix(daemon): retain cleanup locks and preserve healed snapshots by @thymikee in #3760
- docs(agents): write agent docs in ASD-STE100 and remove misleading docs by @thymikee in #3723
- fix(scroll): take edge hints from a same-rect scrollable ancestor by @airowe in #3784
- build(package): stop shipping Swift test sources by @thymikee in #3785
- test(ios): isolate smoke contracts and synchronize observable state by @thymikee in #3786
- fix(help): correct input and MCP descriptions, add a first-screen help gate by @thymikee in #3788
- fix(resources): point tenant isolation lease errors to leases.allocate by @mvanhorn in #3635
- feat(host): capture HostEnvironment once at entry points by @thymikee in #3763
- feat(daemon): the runtime owns its state and never the process by @thymikee in #3772
- docs(adr): write runtime and architecture ADRs in ASD-STE100 by @thymikee in #3731
- docs(adr): write ADRs 0001–0011 and 0013–0017 in ASD-STE100 by @thymikee in #3729
- fix(cli): refuse an empty numeric flag value instead of reading it as 0 by @RaphaelFakhri in #3793
- perf(android): avoid animation stalls in capture and viewport reads by @thymikee in #3790
- fix(apple): refuse captures whose window or panel identity is unknown by @thymikee in #3761
- fix(daemon): close startup and shutdown ownership gaps by @thymikee in #3795
- docs(adr): correct stale facts in the ADR set by @thymikee in #3796
- docs(adr): add the ADR format guide and the write route by @thymikee in #3799
- fix(daemon): replace fixed 15s startup kill with progress-aware startup budget by @thymikee in #3791
- chore(deps): update fallow to 3.34.0 by @thymikee in #3789
- chore: remove CHANGELOG.md again and gitignore it by @thymikee in #3803
- fix(ios): report the alert's own title and surface an unanswered launch confirmation by @thymikee in #3732
- test(ios): stabilize text clearing and snapshot budget regressions by @thymikee in #3802
- docs(adr): merge ADR 0003 into the ADR 0008 descriptor decision by @thymikee in #3810
- feat(android): add settings bluetooth on|off by @mikolajadamowicz in #3721
- fix(scroll): keep adb-backed Android directional swipes inside the resolved scrollable by @airowe in #3746
- chore: enforce file size limits with oxlint by @thymikee in #3804
- refactor(host): read every configuration value from an explicit host (#3794) by @thymikee in #3798
- refactor(contracts): move telephony input parsing out of device-rotation by @mikolajadamowicz in #3812
- ci: run iOS and macOS smoke on one Apple runner by @thymikee in #3809
- perf(ios): reduce capture probes and text entry waits by @thymikee in #3813
- fix(daemon): preserve recorded ownership through stop and cleanup by @thymikee in #3806
- fix(daemon): finalize every host-owned close through registration by @thymikee in #3797
- perf: reduce iOS input readiness and PNG encoding latency by @thymikee in #3820
- refactor(host): enter one runtime store once per daemon runtime (#3794) by @thymikee in #3818
- feat(limrun): serve iOS alert get/wait/accept/dismiss from tree capture by @thymikee in #3699
- test(ios): speed up fixtures and run native regressions nightly by @thymikee in #3824
- refactor(daemon): resolve configuration from the owning runtime host by @thymikee in #3826
- refactor(replay): pass runtime hosts through replay and device selection by @thymikee in #3827
- refactor(runtime): use owning hosts at process and adb boundaries by @thymikee in #3828
- refactor(commands): read command inputs and output from caller hosts by @thymikee in #3829
- chore(gates): confine process globals to declared entry points by @thymikee in #3823
- perf(android): reuse live helper for input and capture by @thymikee in #3811
- perf(android): bound target readiness and confirm moved clears by @thymikee in #3815
- feat(apple): admit two-finger gestures on physical iOS devices by @camchis in #3838
- docs(ios): record SpringBoard sessions as verified on a physical iPhone by @camchis in #3840
- perf(ci): overlap iOS simulator boot with the native build by @thymikee in #3836
- test(android): prepare the snapshot helper before landmark waits by @thymikee in #3834
- fix(sdk): scope released entries and deferred provider calls by @thymikee in #3833
- feat(android): hand rotation back to the sensor with orientation auto by @mikolajadamowicz in #3822
- fix(apple): key the toolchain fingerprint memo on the resolved xcode-select dir by @thymikee in #3726
- feat(scroll): support explicit budgets for long target searches by @thymikee in #3837
- feat(screenshot): support selector crops on CoreDevice iPhones by @camchis in #3839
- docs(adr): drop the withdrawn host allocator design from ADR 0021 by @thymikee in #3845
- fix(alert): align local Apple and Limrun button choices by @thymikee in #3825
- feat(sdk): start an embedded runtime from the main entry by @thymikee in #3843
- chore(diagnostics): trace Apple prepare phases and subprocess lifecycle by @thymikee in #3846
New Contributors
- @mikolajadamowicz made their first contribution in #3636
- @airowe made their first contribution in #3725
- @gwdp made their first contribution in #3776
- @RaphaelFakhri made their first contribution in #3793
- @camchis made their first contribution in #3838
Full Changelog: v0.21.28...v0.21.29