rnxsim 0.1.442 → 0.1.444

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 (73) hide show
  1. package/cli/bin.ts +3 -1
  2. package/cli/cloud-client.ts +153 -17
  3. package/cli/cloud-dispatch.ts +15 -0
  4. package/cli/cloud-session.ts +69 -17
  5. package/cli/commands/box/bundle-plane.ts +71 -0
  6. package/cli/commands/box.ts +274 -115
  7. package/cli/commands/control.ts +1 -137
  8. package/cli/commands/flow.ts +1 -1
  9. package/cli/commands/inspect/list.ts +119 -2
  10. package/cli/commands/inspect.ts +3 -2
  11. package/cli/commands/platform.ts +95 -12
  12. package/cli/commands/reset.ts +7 -3
  13. package/cli/commands/state.ts +7 -3
  14. package/cli/flow-export.ts +55 -0
  15. package/cli/flow-session.ts +0 -47
  16. package/cli/outbound-endpoints.ts +7 -0
  17. package/cli/rnx-in-process.ts +98 -0
  18. package/cli/ws-bridge.ts +30 -0
  19. package/detox/jest-setup-after-env.cjs +4 -0
  20. package/detox/record-block-execution.cjs +78 -0
  21. package/dist-lib/agent-daemon-client.cjs +1 -1
  22. package/dist-lib/agent-events.cjs +1 -1
  23. package/dist-lib/agent-identity.cjs +1 -1
  24. package/dist-lib/agent-sessions.cjs +1 -1
  25. package/dist-lib/attached-projects.cjs +1 -1
  26. package/dist-lib/auth/shared-session.cjs +1 -1
  27. package/dist-lib/backend-origin.cjs +1 -1
  28. package/dist-lib/beta.cjs +1 -1
  29. package/dist-lib/beta.mjs +1 -1
  30. package/dist-lib/bridge-constants.cjs +1 -1
  31. package/dist-lib/bridge-contract-input.cjs +1 -1
  32. package/dist-lib/bridge-contract-input.mjs +1 -1
  33. package/dist-lib/bridge-contract.cjs +1 -1
  34. package/dist-lib/bridge-contract.mjs +1 -1
  35. package/dist-lib/capture-contract.cjs +1 -1
  36. package/dist-lib/capture-contract.mjs +1 -1
  37. package/dist-lib/cli-constants.cjs +1 -1
  38. package/dist-lib/cloud-contract.cjs +1 -1
  39. package/dist-lib/cloud-contract.mjs +1 -1
  40. package/dist-lib/cloud.cjs +1 -1
  41. package/dist-lib/cloud.mjs +1 -1
  42. package/dist-lib/config.cjs +1 -1
  43. package/dist-lib/detox/index.cjs +69 -14
  44. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  45. package/dist-lib/home-paths.cjs +17 -1
  46. package/dist-lib/host/bridge-host.cjs +43 -32
  47. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  48. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  49. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  50. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  51. package/dist-lib/host/websocket-proxy.cjs +1 -1
  52. package/dist-lib/index.cjs +1 -3
  53. package/dist-lib/jump-to-source-babel.cjs +1 -1
  54. package/dist-lib/menu.cjs +10 -19
  55. package/dist-lib/menu.mjs +10 -19
  56. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  57. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  58. package/dist-lib/metro-production-bundle.cjs +1 -1
  59. package/dist-lib/metro-production-bundle.mjs +1 -1
  60. package/dist-lib/metro.cjs +1 -1
  61. package/dist-lib/profiles.cjs +1 -1
  62. package/dist-lib/public-brand.cjs +1 -1
  63. package/dist-lib/react-native-host-modules.cjs +1 -1
  64. package/dist-lib/react-native-host-modules.mjs +1 -1
  65. package/dist-lib/render-mode.cjs +1 -1
  66. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  67. package/dist-lib/sdk.cjs +1 -1
  68. package/dist-lib/sdk.mjs +1 -1
  69. package/dist-lib/skills.cjs +586 -269
  70. package/dist-lib/vite.cjs +1 -1
  71. package/package.json +8 -1
  72. package/src/home-paths.ts +31 -1
  73. package/src/menu.ts +8 -17
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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;
@@ -2462,67 +2462,67 @@ var init_stub_manifest = __esm({
2462
2462
  specifier: "react-native/Libraries/Pressability/usePressability",
2463
2463
  stubFile: "rn-libraries/usePressability.ts",
2464
2464
  runtimeTier: "core",
2465
- buildResolvers: ["vite"]
2465
+ buildResolvers: ["vite", "dep-prebundle"]
2466
2466
  },
2467
2467
  pressability: {
2468
2468
  specifier: "react-native/Libraries/Pressability/Pressability",
2469
2469
  stubFile: "rn-libraries/Pressability.ts",
2470
2470
  runtimeTier: "core",
2471
- buildResolvers: ["vite"]
2471
+ buildResolvers: ["vite", "dep-prebundle"]
2472
2472
  },
2473
2473
  pressabilityDebug: {
2474
2474
  specifier: "react-native/Libraries/Pressability/PressabilityDebug",
2475
2475
  stubFile: "rn-libraries/PressabilityDebug.ts",
2476
2476
  runtimeTier: "core",
2477
- buildResolvers: ["vite"]
2477
+ buildResolvers: ["vite", "dep-prebundle"]
2478
2478
  },
2479
2479
  reactFabric: {
2480
2480
  specifier: "react-native/Libraries/Renderer/shims/ReactFabric",
2481
2481
  stubFile: "rn-libraries/ReactFabric.ts",
2482
2482
  runtimeTier: "core",
2483
- buildResolvers: ["vite"]
2483
+ buildResolvers: ["vite", "dep-prebundle"]
2484
2484
  },
2485
2485
  reactNativeRenderer: {
2486
2486
  specifier: "react-native/Libraries/Renderer/shims/ReactNative",
2487
2487
  stubFile: "rn-libraries/ReactNative.ts",
2488
2488
  runtimeTier: "core",
2489
- buildResolvers: ["vite"]
2489
+ buildResolvers: ["vite", "dep-prebundle"]
2490
2490
  },
2491
2491
  reactNativeViewConfigRegistry: {
2492
2492
  specifier: "react-native/Libraries/Renderer/shims/ReactNativeViewConfigRegistry",
2493
2493
  stubFile: "rn-libraries/ReactNativeViewConfigRegistry.ts",
2494
2494
  runtimeTier: "core",
2495
- buildResolvers: ["vite"]
2495
+ buildResolvers: ["vite", "dep-prebundle"]
2496
2496
  },
2497
2497
  appContainer: {
2498
2498
  specifier: "react-native/Libraries/ReactNative/AppContainer",
2499
2499
  stubFile: "rn-libraries/AppContainer.ts",
2500
2500
  runtimeTier: "core",
2501
- buildResolvers: ["vite"]
2501
+ buildResolvers: ["vite", "dep-prebundle"]
2502
2502
  },
2503
2503
  appRegistry: {
2504
2504
  specifier: "react-native/Libraries/ReactNative/AppRegistry",
2505
2505
  stubFile: "rn-libraries/AppRegistry.ts",
2506
2506
  runtimeTier: "core",
2507
- buildResolvers: ["vite"]
2507
+ buildResolvers: ["vite", "dep-prebundle"]
2508
2508
  },
2509
2509
  rendererImplementation: {
2510
2510
  specifier: "react-native/Libraries/ReactNative/RendererImplementation",
2511
2511
  stubFile: "rn-libraries/RendererImplementation.ts",
2512
2512
  runtimeTier: "core",
2513
- buildResolvers: ["vite"]
2513
+ buildResolvers: ["vite", "dep-prebundle"]
2514
2514
  },
2515
2515
  rendererProxy: {
2516
2516
  specifier: "react-native/Libraries/ReactNative/RendererProxy",
2517
2517
  stubFile: "rn-libraries/RendererProxy.ts",
2518
2518
  runtimeTier: "core",
2519
- buildResolvers: ["vite"]
2519
+ buildResolvers: ["vite", "dep-prebundle"]
2520
2520
  },
2521
2521
  getDevServer: {
2522
2522
  specifier: "react-native/Libraries/Core/Devtools/getDevServer",
2523
2523
  stubFile: "rn-libraries/getDevServer.ts",
2524
2524
  runtimeTier: "core",
2525
- buildResolvers: ["vite"]
2525
+ buildResolvers: ["vite", "dep-prebundle"]
2526
2526
  },
2527
2527
  codegenNativeCommands: {
2528
2528
  specifier: "react-native/Libraries/Utilities/codegenNativeCommands",
@@ -2540,19 +2540,19 @@ var init_stub_manifest = __esm({
2540
2540
  specifier: "react-native/Libraries/Image/resolveAssetSource",
2541
2541
  stubFile: "rn-libraries/resolveAssetSource.ts",
2542
2542
  runtimeTier: "core",
2543
- buildResolvers: ["vite"]
2543
+ buildResolvers: ["vite", "dep-prebundle"]
2544
2544
  },
2545
2545
  viewConfigIgnore: {
2546
2546
  specifier: "react-native/Libraries/NativeComponent/ViewConfigIgnore",
2547
2547
  stubFile: "rn-libraries/ViewConfigIgnore.ts",
2548
2548
  runtimeTier: "core",
2549
- buildResolvers: ["vite"]
2549
+ buildResolvers: ["vite", "dep-prebundle"]
2550
2550
  },
2551
2551
  nativeComponentRegistry: {
2552
2552
  specifier: "react-native/Libraries/NativeComponent/NativeComponentRegistry",
2553
2553
  stubFile: "rn-libraries/NativeComponentRegistry.ts",
2554
2554
  runtimeTier: "core",
2555
- buildResolvers: ["vite"]
2555
+ buildResolvers: ["vite", "dep-prebundle"]
2556
2556
  },
2557
2557
  // RN TurboModule spec for SourceCode. third-party libraries import
2558
2558
  // this directly to read `scriptURL`; without the deep-path stub the
@@ -2562,19 +2562,19 @@ var init_stub_manifest = __esm({
2562
2562
  specifier: "react-native/src/private/specs/modules/NativeSourceCode",
2563
2563
  stubFile: "rn-libraries/NativeSourceCode.ts",
2564
2564
  runtimeTier: "core",
2565
- buildResolvers: ["vite"]
2565
+ buildResolvers: ["vite", "dep-prebundle"]
2566
2566
  },
2567
2567
  nativeSourceCodeDeprecated: {
2568
2568
  specifier: "react-native/src/private/specs_DEPRECATED/modules/NativeSourceCode",
2569
2569
  stubFile: "rn-libraries/NativeSourceCode.ts",
2570
2570
  runtimeTier: "core",
2571
- buildResolvers: ["vite"]
2571
+ buildResolvers: ["vite", "dep-prebundle"]
2572
2572
  },
2573
2573
  nativeSourceCodeLibraries: {
2574
2574
  specifier: "react-native/Libraries/NativeModules/specs/NativeSourceCode",
2575
2575
  stubFile: "rn-libraries/NativeSourceCode.ts",
2576
2576
  runtimeTier: "core",
2577
- buildResolvers: ["vite"]
2577
+ buildResolvers: ["vite", "dep-prebundle"]
2578
2578
  },
2579
2579
  // RN TurboModule spec for the Android StatusBar. libraries import it
2580
2580
  // directly and `Object.assign` over its default export; the shim namespace
@@ -2583,13 +2583,13 @@ var init_stub_manifest = __esm({
2583
2583
  specifier: "react-native/Libraries/Components/StatusBar/NativeStatusBarManagerAndroid",
2584
2584
  stubFile: "rn-libraries/NativeStatusBarManagerAndroid.ts",
2585
2585
  runtimeTier: "core",
2586
- buildResolvers: ["vite"]
2586
+ buildResolvers: ["vite", "dep-prebundle"]
2587
2587
  },
2588
2588
  nativeStatusBarManagerAndroidDeprecated: {
2589
2589
  specifier: "react-native/src/private/specs_DEPRECATED/modules/NativeStatusBarManagerAndroid",
2590
2590
  stubFile: "rn-libraries/NativeStatusBarManagerAndroid.ts",
2591
2591
  runtimeTier: "core",
2592
- buildResolvers: ["vite"]
2592
+ buildResolvers: ["vite", "dep-prebundle"]
2593
2593
  }
2594
2594
  };
2595
2595
  }
@@ -3442,6 +3442,7 @@ function normalizeCloudOrigin(source) {
3442
3442
  function createCloudSession(input) {
3443
3443
  const session = {
3444
3444
  version: CLOUD_SESSION_VERSION,
3445
+ service: "sim",
3445
3446
  boxId: input.boxId.trim(),
3446
3447
  boxToken: input.boxToken,
3447
3448
  simId: input.simId.trim(),
@@ -3459,7 +3460,7 @@ var init_cloud_session = __esm({
3459
3460
  "cli/cloud-session.ts"() {
3460
3461
  "use strict";
3461
3462
  init_backend_origin();
3462
- CLOUD_SESSION_VERSION = 2;
3463
+ CLOUD_SESSION_VERSION = 3;
3463
3464
  MAX_ENCODED_SESSION_BYTES = 32 * 1024;
3464
3465
  RNX_SHELL_UPDATE_PREFIX = "__RNX_SHELL_UPDATE_V1__";
3465
3466
  RNX_SHELL_UPDATE_SET_PREFIX = `${RNX_SHELL_UPDATE_PREFIX}set:`;
@@ -3705,7 +3706,8 @@ function distinctByContent(directory, options) {
3705
3706
  return [...byContent.values()];
3706
3707
  }
3707
3708
  function placeMetroDescriptor(listing, descriptor) {
3708
- const perScale = descriptor.scales.map(
3709
+ const scales = [...new Set(descriptor.scales)];
3710
+ const perScale = scales.map(
3709
3711
  (scale) => distinctByContent(
3710
3712
  listing.directory,
3711
3713
  resolveMetroIosAssetDestFiles(listing.files, descriptor, scale)
@@ -3713,7 +3715,7 @@ function placeMetroDescriptor(listing, descriptor) {
3713
3715
  );
3714
3716
  const files = /* @__PURE__ */ new Map();
3715
3717
  const ambiguous = [];
3716
- descriptor.scales.forEach((scale, index) => {
3718
+ scales.forEach((scale, index) => {
3717
3719
  const options = perScale[index] ?? [];
3718
3720
  if (options.length === 1 && options[0]) files.set(scale, options[0]);
3719
3721
  else if (options.length > 1) ambiguous.push(...options);
@@ -3721,6 +3723,7 @@ function placeMetroDescriptor(listing, descriptor) {
3721
3723
  if (perScale.length === 0 || perScale.some((options) => options.length === 0)) {
3722
3724
  return { files, ambiguous, verified: false, mismatched: false };
3723
3725
  }
3726
+ const fileHashes = !descriptor.fileUris && descriptor.fileHashes?.length === descriptor.scales.length ? descriptor.fileHashes : null;
3724
3727
  for (const combination of placementCombinations(perScale)) {
3725
3728
  let bytes;
3726
3729
  try {
@@ -3730,14 +3733,23 @@ function placeMetroDescriptor(listing, descriptor) {
3730
3733
  } catch {
3731
3734
  continue;
3732
3735
  }
3733
- if (metroDescriptorHash(bytes) !== descriptor.hash) continue;
3736
+ const identical = fileHashes ? bytes.every((file, index) => {
3737
+ const digest = (0, import_node_crypto5.createHash)("md5").update(file).digest("hex");
3738
+ return descriptor.scales.some(
3739
+ (scale, declared) => scale === scales[index] && fileHashes[declared] === digest
3740
+ );
3741
+ }) : scales.length === descriptor.scales.length && metroDescriptorHash(bytes) === descriptor.hash;
3742
+ if (!identical) continue;
3734
3743
  const chosen = /* @__PURE__ */ new Map();
3735
- descriptor.scales.forEach((scale, index) => {
3744
+ scales.forEach((scale, index) => {
3736
3745
  const relative2 = combination[index];
3737
3746
  if (relative2) chosen.set(scale, relative2);
3738
3747
  });
3739
3748
  return { files: chosen, ambiguous: [], verified: true, mismatched: false };
3740
3749
  }
3750
+ if (!fileHashes && scales.length !== descriptor.scales.length) {
3751
+ return { files, ambiguous, verified: false, mismatched: false };
3752
+ }
3741
3753
  return { files, ambiguous, verified: false, mismatched: true };
3742
3754
  }
3743
3755
  function unverifiedFileKey(dest) {
@@ -3850,7 +3862,7 @@ async function inferCloudModuleIdentity(source) {
3850
3862
  );
3851
3863
  }
3852
3864
  }
3853
- async function produceCloudArtifact(bundlePath, assetsPath) {
3865
+ async function produceCloudArtifact(bundlePath, assetsPath, maxBytes = MAX_RNX_CLOUD_BUNDLE_BYTES) {
3854
3866
  const source = await loadBundleSource(bundlePath);
3855
3867
  const descriptors = extractAssetDescriptors(source);
3856
3868
  const search = assetsPath ? explicitMetroAssetDest((0, import_node_path15.resolve)(assetsPath), descriptors) : descriptors.length > 0 && !isRemoteBundleInput(bundlePath) ? searchMetroAssetDest(bundlePath, descriptors) : { dest: null, searched: [], truncated: false };
@@ -3907,9 +3919,9 @@ async function produceCloudArtifact(bundlePath, assetsPath) {
3907
3919
  });
3908
3920
  const bytes = Buffer.from(artifact.code, "utf8");
3909
3921
  const assets = artifact.receipt.assets;
3910
- if (bytes.length > MAX_RNX_CLOUD_BUNDLE_BYTES) {
3922
+ if (bytes.length > maxBytes) {
3911
3923
  throw new Error(
3912
- `${REMOTE_COMMAND} artifact is ${bytes.length} bytes and exceeds the ${MAX_RNX_CLOUD_BUNDLE_BYTES}-byte limit. Embedded assets weigh ${assets.bytes} bytes on disk, and base64 embedding costs about a third on top of that, so the practical asset budget is roughly 15 MB.${largestEmbeddedAssets(assets.sizes, 10)}`
3924
+ `${REMOTE_COMMAND} artifact is ${bytes.length} bytes and exceeds the ${maxBytes}-byte limit. Embedded assets weigh ${assets.bytes} bytes on disk, and base64 embedding costs about a third on top of that, so the practical asset budget is roughly ${Math.round(maxBytes * 0.75 / 1e6)} MB.${largestEmbeddedAssets(assets.sizes, 10)}`
3913
3925
  );
3914
3926
  }
3915
3927
  const warnings = [];
@@ -3918,9 +3930,9 @@ async function produceCloudArtifact(bundlePath, assetsPath) {
3918
3930
  `${REMOTE_COMMAND} embedded a placeholder image for ${substituted.length} asset(s) no scale of which is in ${search.searched.join(", ") || "any asset dest directory"}: ${substituted.join(", ")}. Build the bundle with --assets-dest, or pass --assets <dir>, to ship the real images.`
3919
3931
  );
3920
3932
  }
3921
- if (bytes.length >= WARN_ARTIFACT_BYTES) {
3933
+ if (bytes.length >= Math.floor(maxBytes * 0.8)) {
3922
3934
  warnings.push(
3923
- `${REMOTE_COMMAND} artifact is ${bytes.length} bytes, ${Math.round(bytes.length / MAX_RNX_CLOUD_BUNDLE_BYTES * 100)}% of the ${MAX_RNX_CLOUD_BUNDLE_BYTES}-byte limit.${largestEmbeddedAssets(assets.sizes, 5)}`
3935
+ `${REMOTE_COMMAND} artifact is ${bytes.length} bytes, ${Math.round(bytes.length / maxBytes * 100)}% of the ${maxBytes}-byte limit.${largestEmbeddedAssets(assets.sizes, 5)}`
3924
3936
  );
3925
3937
  }
3926
3938
  return {
@@ -4023,7 +4035,7 @@ async function createCloudBox(options) {
4023
4035
  warnings: artifact.warnings
4024
4036
  };
4025
4037
  }
4026
- var import_node_crypto5, import_node_fs14, import_node_path15, DEFAULT_RNX_CLOUD_ORIGIN, MAX_RNX_CLOUD_BUNDLE_BYTES, REMOTE_COMMAND, WARN_ARTIFACT_BYTES, MAX_ASSET_DEST_FILES, ACCOUNT_CHOICE_REFUSALS, PROJECT_ONLY_DIRECTORIES, MAX_PLACEMENT_COMBINATIONS;
4038
+ var import_node_crypto5, import_node_fs14, import_node_path15, DEFAULT_RNX_CLOUD_ORIGIN, MAX_RNX_CLOUD_BUNDLE_BYTES, REMOTE_COMMAND, MAX_ASSET_DEST_FILES, ACCOUNT_CHOICE_REFUSALS, PROJECT_ONLY_DIRECTORIES, MAX_PLACEMENT_COMBINATIONS;
4027
4039
  var init_cloud_client = __esm({
4028
4040
  "cli/cloud-client.ts"() {
4029
4041
  "use strict";
@@ -4044,7 +4056,6 @@ var init_cloud_client = __esm({
4044
4056
  DEFAULT_RNX_CLOUD_ORIGIN = rnxPublicBrand.origin;
4045
4057
  MAX_RNX_CLOUD_BUNDLE_BYTES = RNX_CLOUD_MAX_ARTIFACT_BYTES;
4046
4058
  REMOTE_COMMAND = "rnx ios --remote";
4047
- WARN_ARTIFACT_BYTES = Math.floor(MAX_RNX_CLOUD_BUNDLE_BYTES * 0.8);
4048
4059
  MAX_ASSET_DEST_FILES = 25e3;
4049
4060
  ACCOUNT_CHOICE_REFUSALS = /* @__PURE__ */ new Set([
4050
4061
  "accountId is required",
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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;
@@ -590,8 +590,6 @@ var RNX_SHELL_UPDATE_UNSET = `${RNX_SHELL_UPDATE_PREFIX}unset`;
590
590
 
591
591
  // cli/cloud-client.ts
592
592
  var DEFAULT_RNX_CLOUD_ORIGIN = rnxPublicBrand.origin;
593
- var MAX_RNX_CLOUD_BUNDLE_BYTES = RNX_CLOUD_MAX_ARTIFACT_BYTES;
594
- var WARN_ARTIFACT_BYTES = Math.floor(MAX_RNX_CLOUD_BUNDLE_BYTES * 0.8);
595
593
 
596
594
  // cli/ws-bridge.ts
597
595
  function bridgeWsUrl(wsPort) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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;
@@ -178,6 +178,10 @@ function fileMenu(state, deviceChoices) {
178
178
  browserAccelerator: true,
179
179
  shortcutLabel: "start/stop recording",
180
180
  showInShortcutDocs: true
181
+ },
182
+ {
183
+ label: "Send to Box",
184
+ action: "send-to-box"
181
185
  }
182
186
  ]
183
187
  };
@@ -390,24 +394,11 @@ function windowMenu(state) {
390
394
  }))
391
395
  },
392
396
  {
393
- label: "Presentation",
394
- hiddenIn: "electron",
395
- items: [
396
- {
397
- label: "Real",
398
- type: "radio",
399
- checked: !state.wireframe,
400
- action: "set-presentation",
401
- actionPayload: "real"
402
- },
403
- {
404
- label: "Clean Wireframe",
405
- type: "radio",
406
- checked: state.wireframe,
407
- action: "set-presentation",
408
- actionPayload: "wireframe"
409
- }
410
- ]
397
+ label: "Wireframe",
398
+ type: "checkbox",
399
+ checked: state.wireframe,
400
+ action: "toggle-wireframe",
401
+ hiddenIn: "electron"
411
402
  },
412
403
  {
413
404
  label: "Screenshot",
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/public-brand.ts
4
4
  var name = "rnx";
@@ -140,6 +140,10 @@ function fileMenu(state, deviceChoices) {
140
140
  browserAccelerator: true,
141
141
  shortcutLabel: "start/stop recording",
142
142
  showInShortcutDocs: true
143
+ },
144
+ {
145
+ label: "Send to Box",
146
+ action: "send-to-box"
143
147
  }
144
148
  ]
145
149
  };
@@ -352,24 +356,11 @@ function windowMenu(state) {
352
356
  }))
353
357
  },
354
358
  {
355
- label: "Presentation",
356
- hiddenIn: "electron",
357
- items: [
358
- {
359
- label: "Real",
360
- type: "radio",
361
- checked: !state.wireframe,
362
- action: "set-presentation",
363
- actionPayload: "real"
364
- },
365
- {
366
- label: "Clean Wireframe",
367
- type: "radio",
368
- checked: state.wireframe,
369
- action: "set-presentation",
370
- actionPayload: "wireframe"
371
- }
372
- ]
359
+ label: "Wireframe",
360
+ type: "checkbox",
361
+ checked: state.wireframe,
362
+ action: "toggle-wireframe",
363
+ hiddenIn: "electron"
373
364
  },
374
365
  {
375
366
  label: "Screenshot",
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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.442 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.444 | (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);