Skip to content

v2.0.0

Choose a tag to compare

@igorzheludkov igorzheludkov released this 31 Jul 20:20
· 235 commits to main since this release

Major release. 14 tools removed, 2 added (70 → 58) — the removals are breaking for any agent, skill, or workflow that calls them.

Breaking: tools removed

android_get_screen_size · android_install_app · clear_bundle_errors · clear_flowpoints · clear_focused_input · get_flowpoints · get_inspector_selection · get_network_stats · ios_install_app · list_android_devices · list_ios_simulators · toggle_element_inspector · verify_flow · wait_for_flowpoint

Several were folded into neighbouring tools; the rest were retired as low-value. Pin ^1.11 if you depend on them.

New tools

  • navigate — drive the app's router and verify it actually moved. Expo Router takes paths, React Navigation takes route names; the response reports which resolved. Unknown route names are rejected before dispatch with nearest-match suggestions, because a wrong destination otherwise changes nothing, throws nothing, and warns only to LogBox — so the old hand-written form reported a no-op as success. changed: false (settled, didn't move) is kept distinct from indeterminate: true (no settled reading).
  • app_request — issue HTTP from inside the app as the logged-in user, through its real network stack, TLS trust and proxy config. auth: "auto" resolves the bearer token in-app — from redux, or from the app's most recent captured request — so no credential enters the conversation. Warns explicitly when no token was found rather than silently sending unauthenticated.

execute_in_app

  • Pre-resolved context. state/store, apollo/cache()/deref(), router, summary() and a working require() are now in scope. Store resolution was the largest failure cause for the redux tools; resolution is multi-strategy (Metro module registry → fiber walk → known globals → SDK registry) and each binding is null when unavailable.
  • require() now works, resolved through Metro's module registry — previously it was rejected outright, the second-largest failure class.
  • Results are bounded structurally instead of clipped mid-string. Arrays and objects are elided with count-preserving markers, so the shape and real lengths survive and the next read can be targeted. A 1.6 MB RTK Query slice returns as 177 characters that still name every section. Values already under budget are returned byte-identical.
  • Slow promises are no longer discarded. A promise that outlives the poll budget returns a handle; execute_in_app({collect: "<handle>"}) retrieves the settled value.
  • Cycle-safe serialisation, and async-function syntax is now detected per device rather than assumed supported.

Fixes

  • scan_metro scans ports 8081–8090 instead of [8081, 8082, 19000–19002]. The old list had a hole: a third Metro on 8083 was invisible to a default scan while the scan still reported success.