rnxsim 0.1.480 → 0.1.482

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 (56) hide show
  1. package/cli/commands/detox.ts +5 -6
  2. package/detox/expectations.ts +2 -2
  3. package/detox/index.ts +22 -0
  4. package/dist-lib/agent-daemon-client.cjs +1 -1
  5. package/dist-lib/agent-events.cjs +1 -1
  6. package/dist-lib/agent-identity.cjs +1 -1
  7. package/dist-lib/agent-sessions.cjs +1 -1
  8. package/dist-lib/attached-projects.cjs +1 -1
  9. package/dist-lib/auth/shared-session.cjs +1 -1
  10. package/dist-lib/backend-origin.cjs +1 -1
  11. package/dist-lib/beta.cjs +1 -1
  12. package/dist-lib/beta.mjs +1 -1
  13. package/dist-lib/bridge-constants.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.cjs +1 -1
  15. package/dist-lib/bridge-contract-input.mjs +1 -1
  16. package/dist-lib/bridge-contract.cjs +1 -1
  17. package/dist-lib/bridge-contract.mjs +1 -1
  18. package/dist-lib/capture-contract.cjs +1 -1
  19. package/dist-lib/capture-contract.mjs +1 -1
  20. package/dist-lib/cli-constants.cjs +1 -1
  21. package/dist-lib/cloud-contract.cjs +1 -1
  22. package/dist-lib/cloud-contract.mjs +1 -1
  23. package/dist-lib/cloud.cjs +1 -1
  24. package/dist-lib/cloud.mjs +1 -1
  25. package/dist-lib/config.cjs +1 -1
  26. package/dist-lib/detox/index.cjs +87 -3
  27. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  28. package/dist-lib/home-paths.cjs +1 -1
  29. package/dist-lib/host/bridge-host.cjs +2 -2
  30. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  31. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  32. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  33. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  34. package/dist-lib/host/websocket-proxy.cjs +1 -1
  35. package/dist-lib/index.cjs +1 -1
  36. package/dist-lib/jump-to-source-babel.cjs +1 -1
  37. package/dist-lib/jump-to-source-native.cjs +1 -1
  38. package/dist-lib/menu.cjs +1 -1
  39. package/dist-lib/menu.mjs +1 -1
  40. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  41. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  42. package/dist-lib/metro-production-bundle.cjs +1 -1
  43. package/dist-lib/metro-production-bundle.mjs +1 -1
  44. package/dist-lib/metro.cjs +1 -1
  45. package/dist-lib/profiles.cjs +1 -1
  46. package/dist-lib/public-brand.cjs +1 -1
  47. package/dist-lib/react-native-host-modules.cjs +1 -1
  48. package/dist-lib/react-native-host-modules.mjs +1 -1
  49. package/dist-lib/render-mode.cjs +1 -1
  50. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  51. package/dist-lib/sdk.cjs +1 -1
  52. package/dist-lib/sdk.mjs +1 -1
  53. package/dist-lib/skills.cjs +29 -11
  54. package/dist-lib/vite.cjs +1 -1
  55. package/package.json +1 -1
  56. package/src/vite-plugin.ts +1 -0
@@ -215,12 +215,11 @@ export async function runDetox(args: string[], opts: RunDetoxOpts = {}): Promise
215
215
  console.log(` port: ${port}${headed ? ' (headed)' : ''}`)
216
216
  if (localConfig) console.log(` config: ${localConfig}`)
217
217
 
218
- // proof capture retains several full-resolution frames while jest tears its
219
- // browser down. node 24.16.0's maglev collector can crash in
220
- // ClearStaleLeftTrimmedPointerVisitor after every assertion has passed.
221
- // the conformance lane pins that exact node runtime, so disable only its
222
- // unstable optimization tier. normal user detox runs keep their own node
223
- // defaults and still resolve jest through npx.
218
+ // proof capture runs under the repo's pinned node runtime. its v8 collector
219
+ // can crash in ClearStaleLeftTrimmedPointerVisitor before jest reports a
220
+ // result or after a passing line. keep the existing proof-only no-maglev
221
+ // mode while that upstream runtime fault is investigated. normal user detox
222
+ // runs retain their node defaults and resolve jest through npx.
224
223
  const proofCapture =
225
224
  process.env.CONFORMANCE_PROOF === '1' || !!process.env.CONFORMANCE_PROOF_DIR
226
225
  const command = proofCapture ? 'node' : 'npx'
@@ -169,7 +169,7 @@ class SootSimExpectation {
169
169
  throw new Error(`element not found for toHaveText: ${JSON.stringify(this.matcher)}`)
170
170
  }
171
171
  const actualText = node.text || ''
172
- const matches = actualText === expectedText || actualText.includes(expectedText)
172
+ const matches = actualText === expectedText
173
173
 
174
174
  if (this.negated) {
175
175
  if (matches) {
@@ -380,7 +380,7 @@ class SootSimWaitForChain {
380
380
  `waitFor toHaveText: element not found: ${JSON.stringify(this.matcher)}`,
381
381
  )
382
382
  const actual = node.text || ''
383
- const matches = actual === expectedText || actual.includes(expectedText)
383
+ const matches = actual === expectedText
384
384
  if (this._negated ? matches : !matches) {
385
385
  throw new Error(
386
386
  `waitFor toHaveText: expected "${expectedText}" but got "${actual}" ${JSON.stringify(this.matcher)}`,
package/detox/index.ts CHANGED
@@ -6,6 +6,10 @@ import * as fs from 'fs'
6
6
  import * as path from 'path'
7
7
  import { chromium } from 'playwright'
8
8
  import { launchReapedChromeScoped } from '../../../scripts/lib/reap-browser'
9
+ import {
10
+ readBrowserCompositeCaptureRequest,
11
+ resolveBrowserCompositeCdpClip,
12
+ } from '../../sootsim-engine/src/capture/browser-composite'
9
13
  import { pollUntil } from '../src/poll-until'
10
14
  import {
11
15
  createExpect,
@@ -1359,6 +1363,24 @@ export const device = {
1359
1363
  }
1360
1364
  }
1361
1365
  _context = await _browser.newContext(contextOpts)
1366
+ await _context.exposeBinding('__sootsimHostCapture', async (source, value) => {
1367
+ const request = readBrowserCompositeCaptureRequest(value)
1368
+ const session = await source.page.context().newCDPSession(source.page)
1369
+ try {
1370
+ const result = await session.send('Page.captureScreenshot', {
1371
+ format: 'png',
1372
+ fromSurface: true,
1373
+ captureBeyondViewport: true,
1374
+ clip: resolveBrowserCompositeCdpClip(
1375
+ request,
1376
+ await session.send('Page.getLayoutMetrics'),
1377
+ ),
1378
+ })
1379
+ return 'data:image/png;base64,' + result.data
1380
+ } finally {
1381
+ await session.detach()
1382
+ }
1383
+ })
1362
1384
  _page = await _context.newPage()
1363
1385
  contextIdentity = ++nextContextIdentity
1364
1386
  }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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;
@@ -756,6 +756,72 @@ async function launchReapedChromeScoped(launch, opts = {}, rendererTarget, polic
756
756
  );
757
757
  }
758
758
 
759
+ // ../sootsim-engine/src/capture/browser-composite.ts
760
+ function resolveBrowserCompositeCdpClip(request, metrics) {
761
+ if (!metrics || typeof metrics !== "object") {
762
+ throw new Error("browser composite capture requires CDP layout metrics");
763
+ }
764
+ const physical = Reflect.get(metrics, "layoutViewport");
765
+ const css = Reflect.get(metrics, "cssLayoutViewport");
766
+ if (!physical || typeof physical !== "object" || !css || typeof css !== "object") {
767
+ throw new Error("browser composite capture requires physical and CSS viewports");
768
+ }
769
+ const physicalWidth = Reflect.get(physical, "clientWidth");
770
+ const cssWidth = Reflect.get(css, "clientWidth");
771
+ if (typeof physicalWidth !== "number" || !Number.isFinite(physicalWidth) || physicalWidth <= 0 || typeof cssWidth !== "number" || !Number.isFinite(cssWidth) || cssWidth <= 0) {
772
+ throw new Error("browser composite capture requires positive viewport widths");
773
+ }
774
+ const devicePixelRatio = physicalWidth / cssWidth;
775
+ const padding = 1;
776
+ return {
777
+ x: request.rect.x - padding,
778
+ y: request.rect.y - padding,
779
+ width: request.rect.width + padding * 2,
780
+ height: request.rect.height + padding * 2,
781
+ scale: request.outputWidth / request.rect.width / devicePixelRatio
782
+ };
783
+ }
784
+ function readBrowserCompositeCaptureRequest(value) {
785
+ if (!value || typeof value !== "object") {
786
+ throw new Error("browser composite capture request must be an object");
787
+ }
788
+ const rect = Reflect.get(value, "rect");
789
+ if (!rect || typeof rect !== "object") {
790
+ throw new Error("browser composite capture request requires a rect");
791
+ }
792
+ const request = {
793
+ rect: {
794
+ x: Reflect.get(rect, "x"),
795
+ y: Reflect.get(rect, "y"),
796
+ width: Reflect.get(rect, "width"),
797
+ height: Reflect.get(rect, "height")
798
+ },
799
+ outputWidth: Reflect.get(value, "outputWidth"),
800
+ outputHeight: Reflect.get(value, "outputHeight")
801
+ };
802
+ const positions = [request.rect.x, request.rect.y];
803
+ const dimensions = [
804
+ request.rect.width,
805
+ request.rect.height,
806
+ request.outputWidth,
807
+ request.outputHeight
808
+ ];
809
+ if (positions.some((number) => typeof number !== "number" || !Number.isFinite(number))) {
810
+ throw new Error("browser composite capture request positions must be finite");
811
+ }
812
+ if (dimensions.some(
813
+ (number) => typeof number !== "number" || !Number.isFinite(number) || number <= 0
814
+ ) || !Number.isInteger(request.outputWidth) || !Number.isInteger(request.outputHeight)) {
815
+ throw new Error("browser composite capture request dimensions must be positive");
816
+ }
817
+ const scaleX = request.outputWidth / request.rect.width;
818
+ const scaleY = request.outputHeight / request.rect.height;
819
+ if (Math.abs(scaleX - scaleY) > 1e-3) {
820
+ throw new Error("browser composite capture output scale must be uniform");
821
+ }
822
+ return request;
823
+ }
824
+
759
825
  // src/poll-until.ts
760
826
  async function pollUntil(read, ready, options) {
761
827
  if (!Number.isFinite(options.timeoutMs) || options.timeoutMs <= 0) {
@@ -1302,7 +1368,7 @@ var SootSimExpectation = class _SootSimExpectation {
1302
1368
  throw new Error(`element not found for toHaveText: ${JSON.stringify(this.matcher)}`);
1303
1369
  }
1304
1370
  const actualText = node.text || "";
1305
- const matches = actualText === expectedText || actualText.includes(expectedText);
1371
+ const matches = actualText === expectedText;
1306
1372
  if (this.negated) {
1307
1373
  if (matches) {
1308
1374
  throw new Error(
@@ -1488,7 +1554,7 @@ var SootSimWaitForChain = class {
1488
1554
  `waitFor toHaveText: element not found: ${JSON.stringify(this.matcher)}`
1489
1555
  );
1490
1556
  const actual = node.text || "";
1491
- const matches = actual === expectedText || actual.includes(expectedText);
1557
+ const matches = actual === expectedText;
1492
1558
  if (this._negated ? matches : !matches) {
1493
1559
  throw new Error(
1494
1560
  `waitFor toHaveText: expected "${expectedText}" but got "${actual}" ${JSON.stringify(this.matcher)}`
@@ -2777,6 +2843,24 @@ var device = {
2777
2843
  };
2778
2844
  }
2779
2845
  _context = await _browser.newContext(contextOpts);
2846
+ await _context.exposeBinding("__sootsimHostCapture", async (source, value) => {
2847
+ const request = readBrowserCompositeCaptureRequest(value);
2848
+ const session = await source.page.context().newCDPSession(source.page);
2849
+ try {
2850
+ const result = await session.send("Page.captureScreenshot", {
2851
+ format: "png",
2852
+ fromSurface: true,
2853
+ captureBeyondViewport: true,
2854
+ clip: resolveBrowserCompositeCdpClip(
2855
+ request,
2856
+ await session.send("Page.getLayoutMetrics")
2857
+ )
2858
+ });
2859
+ return "data:image/png;base64," + result.data;
2860
+ } finally {
2861
+ await session.detach();
2862
+ }
2863
+ });
2780
2864
  _page = await _context.newPage();
2781
2865
  contextIdentity = ++nextContextIdentity;
2782
2866
  }
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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;
@@ -2995,7 +2995,7 @@ function isHermesBytecodeText(source) {
2995
2995
  const second = source.charCodeAt(1);
2996
2996
  const third = source.charCodeAt(2);
2997
2997
  const fourth = source.charCodeAt(3);
2998
- return (first === 198 || first === 65533) && second === 31 && (third === 188 || third === 65533) && fourth === 3 || source.includes("\0") && !source.includes("__d(");
2998
+ return (first === 198 || first === 65533) && second === 31 && (third === 188 || third === 65533) && fourth === 3;
2999
2999
  }
3000
3000
  async function fingerprintBlindMetroBundle(source) {
3001
3001
  if (isHermesBytecodeText(source)) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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;
@@ -3697,13 +3697,13 @@ var init_capability_outcomes2 = __esm({
3697
3697
  assessed: 0
3698
3698
  },
3699
3699
  ios: {
3700
- passedWeight: 180,
3700
+ passedWeight: 179,
3701
3701
  failedWeight: 0,
3702
- unassessedWeight: 1027,
3702
+ unassessedWeight: 1028,
3703
3703
  totalWeight: 1207,
3704
- assessedWeight: 180,
3704
+ assessedWeight: 179,
3705
3705
  compatibility: 1,
3706
- assessed: 0.1491300745650373
3706
+ assessed: 0.14830157415078707
3707
3707
  }
3708
3708
  },
3709
3709
  usage: {
@@ -3717,13 +3717,13 @@ var init_capability_outcomes2 = __esm({
3717
3717
  assessed: 0
3718
3718
  },
3719
3719
  ios: {
3720
- passedWeight: 8422,
3720
+ passedWeight: 8420,
3721
3721
  failedWeight: 0,
3722
- unassessedWeight: 24028,
3722
+ unassessedWeight: 24030,
3723
3723
  totalWeight: 32450,
3724
- assessedWeight: 8422,
3724
+ assessedWeight: 8420,
3725
3725
  compatibility: 1,
3726
- assessed: 0.259537750385208
3726
+ assessed: 0.25947611710323576
3727
3727
  }
3728
3728
  }
3729
3729
  },
@@ -4369,7 +4369,10 @@ var init_capability_outcomes2 = __esm({
4369
4369
  }
4370
4370
  },
4371
4371
  capturedAt: "2026-09-08T06:14:31.559Z",
4372
- receipts: ["retained-essentials-react-native-screens-r22458-20260908"],
4372
+ receipts: [
4373
+ "retained-essentials-react-native-screens-r22458-20260908",
4374
+ "screens-sheets-paired-clean-p40993"
4375
+ ],
4373
4376
  sourceCommit: "ea3eb82eeea6f6925ae708b7028cb577ad37f36a"
4374
4377
  },
4375
4378
  unmatchedReferenceCount: 0,
@@ -5463,6 +5466,8 @@ var init_supported_native_packages = __esm({
5463
5466
  // seam
5464
5467
  "react-native-safe-area-context",
5465
5468
  // preset+visual-proof+coverage
5469
+ "react-native-screen-choreography",
5470
+ // preset+seam+coverage
5466
5471
  "react-native-screen-corner-radius",
5467
5472
  // seam+coverage
5468
5473
  "react-native-screens",
@@ -6689,6 +6694,19 @@ var init_registry = __esm({
6689
6694
  }
6690
6695
  ]
6691
6696
  },
6697
+ "react-native-screen-choreography": {
6698
+ category: "Animation",
6699
+ stubType: "native",
6700
+ versions: [
6701
+ {
6702
+ range: ">=0.5.0 <0.6.0",
6703
+ coverage: 0.95,
6704
+ note: "native-seam only: the published provider, navigation adapters, shared-element registry, transition recipes, measurement, Reanimated worklets, and react-native-teleport ownership all run unchanged; rnx supplies the ScreenChoreographyView host and ScreenChoreographyPreparation TurboModule used by version 0.5's presentation and two-frame layout handshakes",
6705
+ working: "ChoreographyProvider, ChoreographyScreen, SharedElement and SharedElement.Target, React Navigation and Expo Router adapters, forward and interactive transitions, native preparation with mounted-descendant checks, tag-recycling rejection, positive finite geometry validation, 0.5-point stability tolerance, two stable frame samples, cancellation, and the 500ms native deadline; overlay presentation acknowledgement after a rendered frame and a two-frame dismissal grace period",
6706
+ missing: "native teardown freezes the final overlay into a bitmap for two frames; rnx keeps the live overlay subtree visible for those two frames because the canvas host has no synchronous subtree snapshot API"
6707
+ }
6708
+ ]
6709
+ },
6692
6710
  "react-native-launch-arguments": {
6693
6711
  category: "Device & Platform",
6694
6712
  stubType: "native",
@@ -27072,7 +27090,7 @@ function isHermesBytecodeText(source) {
27072
27090
  const second = source.charCodeAt(1);
27073
27091
  const third = source.charCodeAt(2);
27074
27092
  const fourth = source.charCodeAt(3);
27075
- return (first === 198 || first === 65533) && second === 31 && (third === 188 || third === 65533) && fourth === 3 || source.includes("\0") && !source.includes("__d(");
27093
+ return (first === 198 || first === 65533) && second === 31 && (third === 188 || third === 65533) && fourth === 3;
27076
27094
  }
27077
27095
  async function fingerprintBlindMetroBundle(source) {
27078
27096
  if (isHermesBytecodeText(source)) {
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.480 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.482 | (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.480",
3
+ "version": "0.1.482",
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",
@@ -505,6 +505,7 @@ const ENGINE_WORKER_BOOT_CLOSURES: WorkerBootClosure[] = [
505
505
  // when adding font work here, or both caps take the parser again.
506
506
  { entry: 'src/render-worker/shell-worker-entry.ts', maxBytes: 3_260_000 },
507
507
  { entry: 'src/render-worker/compositor-worker-entry.ts', maxBytes: 1_080_000 },
508
+ { entry: 'src/render-worker/compositor-worker-ganesh-entry.ts', maxBytes: 1_820_000 },
508
509
  ]
509
510
 
510
511
  export function workerBootChunkPlugin(closures: WorkerBootClosure[]): Plugin {