Releases: igorzheludkov/react-native-ai-devtools
v1.10.11
Fixes
-
Network capture no longer double-counts on RN 0.85. That backend (new arch, Hermes, Bridgeless) enables the CDP Network domain but never acknowledges
Network.enable, so CDP support went undetected and every request was captured twice (CDP + JS interceptor). Support is now detected from the firstNetwork.requestWillBeSent, restoring correct dedup. -
SDK network/console buffer stays live across
reload_app. When the in-appreact-native-ai-devtools-sdkwas the source,get_network_requests/get_logsbriefly fell back to the duplicate-prone CDP/interceptor buffer after a reload (the JS context is recreated before the SDK'sinit()re-runs).reload_appnow waits for the SDK to re-initialize before returning, a fast re-probe re-detects the SDK within a few hundred ms (covering shake / Metrorreloads), and hysteresis prevents a single stray probe from flipping detection off. -
send_feedbackscope clarified to target the ExecBro tooling itself rather than the app under test.
v1.10.10
get_screen_state — one-call orientation for AI agents
New MCP tool get_screen_state: the currently focused screen (route name, navigation stack, params), overlay-grouped tappable elements, and inputs — in a single compact summary designed for agents to orient after every tap or navigation. get_pressable_elements is soft-deprecated in its favor.
Highlights
- Route context:
📍 Currently focused screen: "Checkout" [navigation stack: Tabs > Cart > Checkout]+ route params - Overlay-aware grouping by fiber ancestry: bottom-sheet content is listed under the sheet; root pressables covered by the overlay appear in a
🚫 Blockedsection (visible for context, marked unreachable) — gorhom full-screen backdrops no longer swallow the underlying screen - Custom component names as JSX tags (
<OrderStepRow />,<CheckBox />) — directly greppable in the app codebase - Icon semantics: icon-only buttons get hints like
SvgChevronBackward — possibly back button,possibly checkbox(word-boundary matching, no substring false positives) - TextInput detection with placeholder-based labels (
<BottomSheetTextInput /> "name@example.com" [input]) - Nearby text for unlabeled checkboxes/radios (row-sibling matching):
near "Skip shipping address verification." - onPress handler hints: named handlers (
onPress=startProcessing()) and prop-route fallback via function identity (onPress→onBack); Hermes bytecode junk filtered out - Mixed-text collection:
"Create 2 digital items"instead of just"Create"for nested Text elements - Screenshots enriched with the same screen state (
ios_screenshot/android_screenshot): route + overlay-grouped pressables converted to image pixels, replacing the flat pressables list when an RN app is connected
Also
get_pressable_elementsgains the icon hints, mixed-text, and improved nearby-text matching (shared walker logic)- Pressables sorted visually (top-to-bottom) instead of mount order
- Frame bounds on every pressable line
v1.10.9
fix(pressables): fix pressable element detection walker
v1.10.8
What's Changed
- perf(license): License validation is no longer pre-loaded on server boot. It now runs lazily on first real tool use, so a bare MCP server boot that never invokes a tool doesn't hit the backend — keeping backend reads/writes proportional to active sessions.
- docs(feedback): Added an end-of-session experience-report prompt and wired it to the
send_feedbacktool, so agents submit reports as GitHub issues instead of leaving an unsent Markdown file. README and the feedback usage guide updated.
Full Changelog: v1.10.7...v1.10.8
v1.10.7
What's Changed
- Free & uncapped local product: removed the usage-limit gate so the local product is free and unlimited (open-core).
- Lower cost: removed the OCR pre-warm probe that triggered paid Vision over-spend on
tap. - Cleanup: removed vestigial OCR timeout-recovery dead code; gitignored
.claude/scheduled_tasks.lock.
Full Changelog: v1.10.6...v1.10.7
v1.10.6
Official build attestation
Official npm builds are now stamped with a secret build token at publish time, so our telemetry backend can reliably distinguish official releases from source forks.
- Telemetry payload carries a build-token field (inert placeholder in source; real token injected into the published build via CI).
- New `scripts/inject-build-token.mjs` stamps the compiled output between build and publish.
- Release workflow runs the injection step before `npm publish`.
No user-facing API changes. Telemetry behavior and opt-out are unchanged — see PRIVACY.md.
v1.10.5
Scroll-bug diagnostics
Three targeted improvements that surface a common class of layout/scroll bugs in one tool call instead of requiring manual frame-diffing or repeated probing.
get_screen_layout — overflow flags
Each node whose frame extends past its parent is now flagged inline with ⚠ overflows parent by Npt (side), plus a top-level [overflows] summary block sorted largest-first. Surfaces clipped UI, hidden modals, and sheet-vs-content size mismatches immediately.
swipe burst verification — typed kind
Burst analysis now returns a kind discriminator: "settled_elsewhere" | "snap_back" | "missed". Snap-back (content moved during drag then reverted) correctly reads as meaningful: false with a diagnostic message pointing at contentSize vs layoutSize — no longer collapses three distinct failure modes into one boolean.
inspect_component — scroll block
For ScrollView/FlatList/SectionList (or anything with onScroll), the response now includes a scroll block with layoutWidth/Height, contentWidth/Height, contentOffset, isScrollable, isAtTop, isAtBottom, plus scrollEnabled/bounces/horizontal. Turns "why isn't this scrolling?" into a one-line lookup.
v1.10.4
fix(telemetry): suppress noisy auto-reconnect events and attribute originating tool
- Skip 'not_needed' and pre-session_id auto_reconnect events that dominated telemetry with no signal
- Thread originatingToolName through executeInApp call sites so reconnect events are attributable
- Suppress reconnect attempts on first-ever 'no_apps' so users see actionable scan_metro hint
v1.10.3
Fixes
- focused-input: extend the "no focused TextInput" reason with explicit "tap the field first" guidance so agents recover instead of looping on the error.
- inspect_at_point: collapse the dispatch → wait → resolve flow into a single
awaitPromisecall. The two-call design lost its globals when Fast Refresh or CDP reconnects landed between calls (~13 events / 2 days observed). - device targeting: route
deviceId/udidthroughresolveAndroidDeviceId/resolveIosUdidso screenshots, installs, launches, key/long-press, input, and bundle-error fallbacks accept adb serials, simulator/emulator names, or RN deviceName substrings — matching the resolver used bytap/swipe.
v1.10.2
Fixes
- resolver: Match device names across punctuation drift —
SM_A356Nnow resolves toSM-A356N - 15 - API 35, andgetConnectedAppByDevicealso matches by simulator UDID / adb serial (e.g.emulator-5554). - tap: Raise coordinate strategy timeout from 3s to 8s; on dense iOS screens the strategy was finishing just past the cap while 20+ seconds of the overall budget were still unused.
Features
- config: Allow
EXECBRO_API_URLenv var to override the API base URL (precedesconfig.json).
Docs
- Reframe the README intro around the runtime-bridge framing and the end-to-end build/debug/verify workflow; correct the SDK claim (optional, improves log/network capture).