v2.9.0
Unified text entry
ios_input_text and android_input_text are gone — both were only ever "type into whatever the OS reports as focused", which is a mode of text entry, not a separate capability, and agents had to know the platform to pick one.
input_text now covers that path itself:
native:trueforces it — system dialogs, native onboarding, non-RN apps- it is applied automatically when no fiber tree is reachable at all, so an untargeted call on a non-RN screen just works
- targeted calls (
testID/component/textMatch) never fall back: a caller who named a field meant that field, and native mode cannot honour that
Fixes
- Fiber walks no longer report a mounted app as unmounted. A walk evaluated between a navigation and React's next commit found no roots and said so, while the same call a second later worked fine. Retried once, absorbed in one place rather than in each of the eight walkers.
tapstops letting OCR answer for a screen that isn't painted yet. Zero pressables and zero accessibility elements means the screen is not there. OCR cannot tell a half-painted screen from a settled one and returns a confident closest match — which is how a tap right after a reload hit the wrong thing and then succeeded unchanged on retry.get_screen_stateexcludes the LogBox banner, and says so. RN mounts LogBox above the app, so while a banner was up its own buttons were the only pressables returned on a screen full of real ones. The note is raised only when the banner actually contributed elements.get_refresh_statusrecords from the session's first evaluation, not from the first time it is called — it could previously only ever answerupdateCount: 0 · recorder just installed.get_logs({summary:true, level:"error"})honours the level. It was dropped, so the summary sampled the same info spam as an unfiltered call.search_networkdistinguishes "the pattern didn't match" from "nothing was captured" and only diagnoses the second.