rnxsim 0.1.468 → 0.1.470

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (54) hide show
  1. package/cli/commands/inspect/actions.ts +34 -19
  2. package/cli/commands/inspect.ts +21 -0
  3. package/dist-lib/agent-daemon-client.cjs +1 -1
  4. package/dist-lib/agent-events.cjs +1 -1
  5. package/dist-lib/agent-identity.cjs +1 -1
  6. package/dist-lib/agent-sessions.cjs +1 -1
  7. package/dist-lib/attached-projects.cjs +1 -1
  8. package/dist-lib/auth/shared-session.cjs +1 -1
  9. package/dist-lib/backend-origin.cjs +1 -1
  10. package/dist-lib/beta.cjs +1 -1
  11. package/dist-lib/beta.mjs +1 -1
  12. package/dist-lib/bridge-constants.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.mjs +1 -1
  15. package/dist-lib/bridge-contract.cjs +1 -1
  16. package/dist-lib/bridge-contract.mjs +1 -1
  17. package/dist-lib/capture-contract.cjs +1 -1
  18. package/dist-lib/capture-contract.mjs +1 -1
  19. package/dist-lib/cli-constants.cjs +1 -1
  20. package/dist-lib/cloud-contract.cjs +1 -1
  21. package/dist-lib/cloud-contract.mjs +1 -1
  22. package/dist-lib/cloud.cjs +1 -1
  23. package/dist-lib/cloud.mjs +1 -1
  24. package/dist-lib/config.cjs +1 -1
  25. package/dist-lib/detox/index.cjs +1 -1
  26. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  27. package/dist-lib/home-paths.cjs +1 -1
  28. package/dist-lib/host/bridge-host.cjs +1 -1
  29. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  30. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  31. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  32. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  33. package/dist-lib/host/websocket-proxy.cjs +1 -1
  34. package/dist-lib/index.cjs +12 -9
  35. package/dist-lib/jump-to-source-babel.cjs +1 -1
  36. package/dist-lib/jump-to-source-native.cjs +1 -1
  37. package/dist-lib/menu.cjs +1 -1
  38. package/dist-lib/menu.mjs +1 -1
  39. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  40. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  41. package/dist-lib/metro-production-bundle.cjs +1 -1
  42. package/dist-lib/metro-production-bundle.mjs +1 -1
  43. package/dist-lib/metro.cjs +1 -1
  44. package/dist-lib/profiles.cjs +1 -1
  45. package/dist-lib/public-brand.cjs +1 -1
  46. package/dist-lib/react-native-host-modules.cjs +1 -1
  47. package/dist-lib/react-native-host-modules.mjs +1 -1
  48. package/dist-lib/render-mode.cjs +1 -1
  49. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  50. package/dist-lib/sdk.cjs +12 -9
  51. package/dist-lib/sdk.mjs +12 -9
  52. package/dist-lib/skills.cjs +1 -1
  53. package/dist-lib/vite.cjs +1 -1
  54. package/package.json +1 -1
@@ -60,6 +60,11 @@ function viewportFromCapture(value: unknown): unknown {
60
60
 
61
61
  // the semantic tree has no covering root, so its first node is often a 64x64
62
62
  // icon. capture.tree.viewport is the device layout size on local and cloud.
63
+ //
64
+ // a whole screen capture is the only way to ask for it today, and it is not
65
+ // cheap: the headless runtime forces a full redraw of the tree before it walks
66
+ // it, which measured 3.9-5.5s on a real app in a cloud box against 120-290ms
67
+ // for every other command. that is why this runs on the failure path only.
63
68
  async function readScreen(bridge: InspectBridge): Promise<ScreenSize | null> {
64
69
  try {
65
70
  const viewport = viewportFromCapture(
@@ -73,15 +78,8 @@ async function readScreen(bridge: InspectBridge): Promise<ScreenSize | null> {
73
78
  }
74
79
  }
75
80
 
76
- function offscreenPayload(
77
- cx: number,
78
- cy: number,
79
- screen: ScreenSize | null,
80
- ): { offscreen: true; screen: ScreenSize } | Record<string, never> {
81
- if (!screen || (cx >= 0 && cy >= 0 && cx <= screen.width && cy <= screen.height)) {
82
- return {}
83
- }
84
- return { offscreen: true, screen }
81
+ function isOffscreen(cx: number, cy: number, screen: ScreenSize): boolean {
82
+ return !(cx >= 0 && cy >= 0 && cx <= screen.width && cy <= screen.height)
85
83
  }
86
84
 
87
85
  const DEFAULT_AGENT_TIMING: Required<TapTimingOptions> = {
@@ -182,13 +180,21 @@ export async function tapResolvedTarget(
182
180
 
183
181
  const deadline = Date.now() + timing.deadlineMs
184
182
  let lastOffscreenAt: string | null = null
185
- const screen = await readScreen(bridge)
183
+ // a cloud sim refuses a point outside its screen itself, and says so, so
184
+ // asking it for a capture first would buy nothing. every other plane still
185
+ // presses whatever the hit test finds at tree coordinates no finger can
186
+ // reach, so there the screen has to be read before dispatching.
187
+ const screen = bridge.plane === 'cloud' ? null : await readScreen(bridge)
186
188
  while (Date.now() <= deadline || attempts === 0) {
187
189
  attempts++
188
190
  const resolved = await args.resolve()
189
191
  const payload =
190
- resolved && typeof resolved.cx === 'number' && typeof resolved.cy === 'number'
191
- ? { ...resolved, ...offscreenPayload(resolved.cx, resolved.cy, screen) }
192
+ resolved &&
193
+ typeof resolved.cx === 'number' &&
194
+ typeof resolved.cy === 'number' &&
195
+ screen &&
196
+ isOffscreen(resolved.cx, resolved.cy, screen)
197
+ ? { ...resolved, offscreen: true, screen }
192
198
  : resolved
193
199
  lastPayload = payload
194
200
 
@@ -201,12 +207,9 @@ export async function tapResolvedTarget(
201
207
  }
202
208
 
203
209
  if (payload && typeof payload.cx === 'number' && typeof payload.cy === 'number') {
204
- // a real finger can only land within the device screen. when the
205
- // resolved center sits outside it (a virtualized row scrolled away),
206
- // don't dispatch the engine would "hit" tree coordinates no touch
207
- // could reach and the press would do nothing visible. report an honest
208
- // offscreen miss instead so drivers scroll first rather than getting
209
- // stuck trusting a phantom hit.
210
+ // don't dispatch a point outside the device screen: the press would do
211
+ // nothing a user could reproduce. report the offscreen miss instead so
212
+ // drivers scroll first rather than getting stuck trusting a phantom hit.
210
213
  if (payload.offscreen) {
211
214
  lastResult = {
212
215
  hit: false,
@@ -232,7 +235,19 @@ export async function tapResolvedTarget(
232
235
  payload.cy,
233
236
  requestedTarget,
234
237
  )
235
- lastResult = result
238
+ // a cloud sim reports the offscreen refusal itself, carrying the point
239
+ // and the screen in its diagnostics. give it the same shape the local
240
+ // check produces so there is one offscreen failure to report.
241
+ lastResult =
242
+ result?.reason === 'offscreen' && result.diagnostics
243
+ ? {
244
+ ...result,
245
+ hit: false,
246
+ x: result.diagnostics.point?.x ?? payload.cx,
247
+ y: result.diagnostics.point?.y ?? payload.cy,
248
+ screen: result.diagnostics.screen,
249
+ }
250
+ : result
236
251
  if (result?.requestedTargetMatched === false) {
237
252
  return { payload, result, attempts, failure: 'missed' }
238
253
  }
@@ -1291,6 +1291,27 @@ export async function runInspect(args: string[], opts: InspectOptions) {
1291
1291
  // interactive users get 200ms to stay snappy. logs on timeout so it's
1292
1292
  // obvious when the next CLI call may see mid-animation state.
1293
1293
  async function autoSettleAfterWrite(b: WsBridge): Promise<void> {
1294
+ // a cloud sim runs no browser page, so the idle probe's evaluate never
1295
+ // lands there. without this it settled nothing and the next read handed
1296
+ // out coordinates a sheet was still animating away from, which is how a
1297
+ // dialog button tap missed and the scrim under it answered the press.
1298
+ if (b.plane === 'cloud') {
1299
+ try {
1300
+ // a cloud settle drains the whole transition in the sim rather than
1301
+ // polling from here, so it gets a transport deadline, not the browser
1302
+ // path's poll cap: a full screen transition is seconds of cpu render.
1303
+ await b.send({ type: 'settle' }, { timeoutMs: 15_000 })
1304
+ } catch (error) {
1305
+ // the write itself already landed, so this never fails the command.
1306
+ // it does have to be said out loud: a swallowed settle looks exactly
1307
+ // like a settled sim to the next read, and that read then hands out
1308
+ // coordinates the screen is still animating away from.
1309
+ process.stderr.write(
1310
+ ` ⚠ auto-settle failed (${error instanceof Error ? error.message : String(error)}) — next command may see mid-animation state. use \`rnx do settle\` to retry.\n`,
1311
+ )
1312
+ }
1313
+ return
1314
+ }
1294
1315
  // budget is a CAP, not a fixed wait: waitForSootsimIdle drains any
1295
1316
  // screen transition then returns the instant layout is stable. longer
1296
1317
  // transitions should use an explicit `do settle` or `wait idle`.
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_MAX_MS = 5e3;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/bridge-contract.ts
4
4
  var SIM_LONG_PRESS_DEFAULT_MS = 500;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/capture-contract.ts
4
4
  var RNX_SCREEN_CAPTURE_VERSION = 1;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/cloud-contract.ts
4
4
  var RNX_CLOUD_MAX_ARTIFACT_BYTES = 20 * 1024 * 1024;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
4
  var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -2142,11 +2142,8 @@ async function readScreen(bridge) {
2142
2142
  return null;
2143
2143
  }
2144
2144
  }
2145
- function offscreenPayload(cx, cy, screen) {
2146
- if (!screen || cx >= 0 && cy >= 0 && cx <= screen.width && cy <= screen.height) {
2147
- return {};
2148
- }
2149
- return { offscreen: true, screen };
2145
+ function isOffscreen(cx, cy, screen) {
2146
+ return !(cx >= 0 && cy >= 0 && cx <= screen.width && cy <= screen.height);
2150
2147
  }
2151
2148
  var DEFAULT_AGENT_TIMING = {
2152
2149
  initialWaitMs: 3e3,
@@ -2209,11 +2206,11 @@ async function tapResolvedTarget(bridge, args) {
2209
2206
  }
2210
2207
  const deadline = Date.now() + timing.deadlineMs;
2211
2208
  let lastOffscreenAt = null;
2212
- const screen = await readScreen(bridge);
2209
+ const screen = bridge.plane === "cloud" ? null : await readScreen(bridge);
2213
2210
  while (Date.now() <= deadline || attempts === 0) {
2214
2211
  attempts++;
2215
2212
  const resolved = await args.resolve();
2216
- const payload = resolved && typeof resolved.cx === "number" && typeof resolved.cy === "number" ? { ...resolved, ...offscreenPayload(resolved.cx, resolved.cy, screen) } : resolved;
2213
+ const payload = resolved && typeof resolved.cx === "number" && typeof resolved.cy === "number" && screen && isOffscreen(resolved.cx, resolved.cy, screen) ? { ...resolved, offscreen: true, screen } : resolved;
2217
2214
  lastPayload = payload;
2218
2215
  if (payload?.error === "bridge-not-ready" || payload?.ambiguous || payload?.nthOutOfRange) {
2219
2216
  return { payload, result: null, attempts, failure: "special" };
@@ -2241,7 +2238,13 @@ async function tapResolvedTarget(bridge, args) {
2241
2238
  payload.cy,
2242
2239
  requestedTarget
2243
2240
  );
2244
- lastResult = result;
2241
+ lastResult = result?.reason === "offscreen" && result.diagnostics ? {
2242
+ ...result,
2243
+ hit: false,
2244
+ x: result.diagnostics.point?.x ?? payload.cx,
2245
+ y: result.diagnostics.point?.y ?? payload.cy,
2246
+ screen: result.diagnostics.screen
2247
+ } : result;
2245
2248
  if (result?.requestedTargetMatched === false) {
2246
2249
  return { payload, result, attempts, failure: "missed" };
2247
2250
  }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/public-brand.ts
4
4
  var name = "rnx";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-fingerprint-registry.ts
4
4
  var RNX_METRO_FINGERPRINT_SCHEMA_VERSION = 2;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-production-bundle.ts
4
4
  var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/react-native-host-modules.ts
4
4
  var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1560,11 +1560,8 @@ async function readScreen(bridge) {
1560
1560
  return null;
1561
1561
  }
1562
1562
  }
1563
- function offscreenPayload(cx, cy, screen) {
1564
- if (!screen || cx >= 0 && cy >= 0 && cx <= screen.width && cy <= screen.height) {
1565
- return {};
1566
- }
1567
- return { offscreen: true, screen };
1563
+ function isOffscreen(cx, cy, screen) {
1564
+ return !(cx >= 0 && cy >= 0 && cx <= screen.width && cy <= screen.height);
1568
1565
  }
1569
1566
  var DEFAULT_AGENT_TIMING = {
1570
1567
  initialWaitMs: 3e3,
@@ -1627,11 +1624,11 @@ async function tapResolvedTarget(bridge, args) {
1627
1624
  }
1628
1625
  const deadline = Date.now() + timing.deadlineMs;
1629
1626
  let lastOffscreenAt = null;
1630
- const screen = await readScreen(bridge);
1627
+ const screen = bridge.plane === "cloud" ? null : await readScreen(bridge);
1631
1628
  while (Date.now() <= deadline || attempts === 0) {
1632
1629
  attempts++;
1633
1630
  const resolved = await args.resolve();
1634
- const payload = resolved && typeof resolved.cx === "number" && typeof resolved.cy === "number" ? { ...resolved, ...offscreenPayload(resolved.cx, resolved.cy, screen) } : resolved;
1631
+ const payload = resolved && typeof resolved.cx === "number" && typeof resolved.cy === "number" && screen && isOffscreen(resolved.cx, resolved.cy, screen) ? { ...resolved, offscreen: true, screen } : resolved;
1635
1632
  lastPayload = payload;
1636
1633
  if (payload?.error === "bridge-not-ready" || payload?.ambiguous || payload?.nthOutOfRange) {
1637
1634
  return { payload, result: null, attempts, failure: "special" };
@@ -1659,7 +1656,13 @@ async function tapResolvedTarget(bridge, args) {
1659
1656
  payload.cy,
1660
1657
  requestedTarget
1661
1658
  );
1662
- lastResult = result;
1659
+ lastResult = result?.reason === "offscreen" && result.diagnostics ? {
1660
+ ...result,
1661
+ hit: false,
1662
+ x: result.diagnostics.point?.x ?? payload.cx,
1663
+ y: result.diagnostics.point?.y ?? payload.cy,
1664
+ screen: result.diagnostics.screen
1665
+ } : result;
1663
1666
  if (result?.requestedTargetMatched === false) {
1664
1667
  return { payload, result, attempts, failure: "missed" };
1665
1668
  }
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
@@ -1464,11 +1464,8 @@ async function readScreen(bridge) {
1464
1464
  return null;
1465
1465
  }
1466
1466
  }
1467
- function offscreenPayload(cx, cy, screen) {
1468
- if (!screen || cx >= 0 && cy >= 0 && cx <= screen.width && cy <= screen.height) {
1469
- return {};
1470
- }
1471
- return { offscreen: true, screen };
1467
+ function isOffscreen(cx, cy, screen) {
1468
+ return !(cx >= 0 && cy >= 0 && cx <= screen.width && cy <= screen.height);
1472
1469
  }
1473
1470
  var DEFAULT_AGENT_TIMING = {
1474
1471
  initialWaitMs: 3e3,
@@ -1531,11 +1528,11 @@ async function tapResolvedTarget(bridge, args) {
1531
1528
  }
1532
1529
  const deadline = Date.now() + timing.deadlineMs;
1533
1530
  let lastOffscreenAt = null;
1534
- const screen = await readScreen(bridge);
1531
+ const screen = bridge.plane === "cloud" ? null : await readScreen(bridge);
1535
1532
  while (Date.now() <= deadline || attempts === 0) {
1536
1533
  attempts++;
1537
1534
  const resolved = await args.resolve();
1538
- const payload = resolved && typeof resolved.cx === "number" && typeof resolved.cy === "number" ? { ...resolved, ...offscreenPayload(resolved.cx, resolved.cy, screen) } : resolved;
1535
+ const payload = resolved && typeof resolved.cx === "number" && typeof resolved.cy === "number" && screen && isOffscreen(resolved.cx, resolved.cy, screen) ? { ...resolved, offscreen: true, screen } : resolved;
1539
1536
  lastPayload = payload;
1540
1537
  if (payload?.error === "bridge-not-ready" || payload?.ambiguous || payload?.nthOutOfRange) {
1541
1538
  return { payload, result: null, attempts, failure: "special" };
@@ -1563,7 +1560,13 @@ async function tapResolvedTarget(bridge, args) {
1563
1560
  payload.cy,
1564
1561
  requestedTarget
1565
1562
  );
1566
- lastResult = result;
1563
+ lastResult = result?.reason === "offscreen" && result.diagnostics ? {
1564
+ ...result,
1565
+ hit: false,
1566
+ x: result.diagnostics.point?.x ?? payload.cx,
1567
+ y: result.diagnostics.point?.y ?? payload.cy,
1568
+ screen: result.diagnostics.screen
1569
+ } : result;
1567
1570
  if (result?.requestedTargetMatched === false) {
1568
1571
  return { payload, result, attempts, failure: "missed" };
1569
1572
  }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.468 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.470 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rnxsim",
3
- "version": "0.1.468",
3
+ "version": "0.1.470",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for rnx.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",