rnxsim 0.1.368 → 0.1.370

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 (256) hide show
  1. package/cli/auth.ts +2 -1
  2. package/cli/bin.ts +283 -273
  3. package/cli/commands/app-fonts.ts +3 -2
  4. package/cli/commands/assert.ts +8 -7
  5. package/cli/commands/auth.ts +2 -1
  6. package/cli/commands/box/checkout-plane.ts +49 -16
  7. package/cli/commands/compat.ts +93 -4
  8. package/cli/commands/config.ts +2 -1
  9. package/cli/commands/control.ts +37 -33
  10. package/cli/commands/daemon.ts +22 -21
  11. package/cli/commands/debug.ts +17 -15
  12. package/cli/commands/detect.ts +11 -7
  13. package/cli/commands/detox.ts +5 -4
  14. package/cli/commands/device.ts +6 -5
  15. package/cli/commands/electron.ts +6 -5
  16. package/cli/commands/flow.ts +12 -11
  17. package/cli/commands/inspect/find.ts +2 -1
  18. package/cli/commands/inspect/keyboard.ts +2 -1
  19. package/cli/commands/inspect/sleep.ts +2 -1
  20. package/cli/commands/inspect/wait-event.ts +4 -3
  21. package/cli/commands/inspect/wait-idle.ts +2 -1
  22. package/cli/commands/inspect/wait-ready.ts +3 -2
  23. package/cli/commands/inspect/wait-selector.ts +4 -3
  24. package/cli/commands/inspect/wait.ts +2 -1
  25. package/cli/commands/inspect.ts +82 -80
  26. package/cli/commands/install-desktop.ts +5 -4
  27. package/cli/commands/login.ts +3 -2
  28. package/cli/commands/mode.ts +2 -1
  29. package/cli/commands/record.ts +38 -37
  30. package/cli/commands/runtime.ts +9 -8
  31. package/cli/commands/screenshot-layers.ts +4 -3
  32. package/cli/commands/screenshot-mode.ts +2 -1
  33. package/cli/commands/screenshot.ts +8 -7
  34. package/cli/commands/screenshots-capture.ts +2 -1
  35. package/cli/commands/serve.ts +5 -4
  36. package/cli/commands/shell-boolean-mode.ts +2 -1
  37. package/cli/commands/skills.ts +11 -10
  38. package/cli/commands/telemetry.ts +2 -1
  39. package/cli/commands/three-mode.ts +2 -1
  40. package/cli/commands/timeline.ts +4 -3
  41. package/cli/commands/upload.ts +14 -13
  42. package/cli/commands/what-happened.ts +2 -1
  43. package/cli/recording-access.ts +6 -5
  44. package/cli/run-rnx.ts +140 -0
  45. package/dist-cli/bin.js +6 -6
  46. package/dist-cli/chunks/{agent-GXCQMYV4.js → agent-3R4424LW.js} +2 -2
  47. package/dist-cli/chunks/{agent-wrapper-Y3PQAL6I.js → agent-wrapper-4PPWZWSY.js} +2 -2
  48. package/dist-cli/chunks/app-fonts-KYXB6CXQ.js +4 -0
  49. package/dist-cli/chunks/{assert-BSRQBRH7.js → assert-7EZOWGYQ.js} +11 -11
  50. package/dist-cli/chunks/auth-L7M36H6C.js +12 -0
  51. package/dist-cli/chunks/{beta-R4IZ5SWO.js → beta-FKAF6YWJ.js} +2 -2
  52. package/dist-cli/chunks/{box-2NQYYY3B.js → box-5Y5VBMHV.js} +62 -62
  53. package/dist-cli/chunks/{camera-ER66WWAX.js → camera-XHF2RPFG.js} +2 -2
  54. package/dist-cli/chunks/{chunk-UBH2BWCY.js → chunk-2FOGXVOK.js} +2 -2
  55. package/dist-cli/chunks/{chunk-7B22IPSC.js → chunk-3BG6UCQY.js} +2 -2
  56. package/dist-cli/chunks/{chunk-IXRVFQMT.js → chunk-3SOPYG7S.js} +2 -2
  57. package/dist-cli/chunks/{chunk-7V3S2DY2.js → chunk-3UXXYJVD.js} +1 -1
  58. package/dist-cli/chunks/{chunk-3MPFC3DS.js → chunk-5BR33NAZ.js} +1 -1
  59. package/dist-cli/chunks/{chunk-BWJOLJOK.js → chunk-5RKRVS5A.js} +2 -2
  60. package/dist-cli/chunks/{chunk-WVVAYLWZ.js → chunk-64JAEJ6N.js} +1 -1
  61. package/dist-cli/chunks/{chunk-GXHCJRKE.js → chunk-6A6L3VJR.js} +2 -2
  62. package/dist-cli/chunks/chunk-6GPS7U4X.js +74 -0
  63. package/dist-cli/chunks/{chunk-JHYXRORU.js → chunk-6S5LJV2O.js} +2 -2
  64. package/dist-cli/chunks/{chunk-TOE5O6JE.js → chunk-6W4HIWC7.js} +2 -2
  65. package/dist-cli/chunks/{chunk-ESVUVW3R.js → chunk-72S5FCBY.js} +2 -2
  66. package/dist-cli/chunks/{chunk-TC6DNQL6.js → chunk-7C7TJYZ3.js} +2 -2
  67. package/dist-cli/chunks/{chunk-M7COA4BE.js → chunk-AALKIAUZ.js} +1 -1
  68. package/dist-cli/chunks/{chunk-CKNNO6ZG.js → chunk-ARMXC3C3.js} +25 -25
  69. package/dist-cli/chunks/chunk-AVJBT5LF.js +4 -0
  70. package/dist-cli/chunks/chunk-BMIJZNKD.js +28 -0
  71. package/dist-cli/chunks/{chunk-FSPZY4AI.js → chunk-C7BA5CCM.js} +2 -2
  72. package/dist-cli/chunks/{chunk-EHA65UVJ.js → chunk-CMVRTZ5G.js} +2 -2
  73. package/dist-cli/chunks/chunk-D24EOJ4C.js +24 -0
  74. package/dist-cli/chunks/{chunk-3XMEIZEV.js → chunk-D2GZASRV.js} +1 -1
  75. package/dist-cli/chunks/{chunk-3S2J6IVC.js → chunk-DHYTRCIP.js} +2 -2
  76. package/dist-cli/chunks/{chunk-QMVBWZH2.js → chunk-DMHSD6YJ.js} +2 -2
  77. package/dist-cli/chunks/{chunk-NGWUGNPV.js → chunk-DUXHYPBP.js} +2 -2
  78. package/dist-cli/chunks/{chunk-4FLQYRGN.js → chunk-DXV37CJN.js} +1 -1
  79. package/dist-cli/chunks/{chunk-T2MGLXY5.js → chunk-EOIBLKZO.js} +2 -2
  80. package/dist-cli/chunks/{chunk-PNBQBBG5.js → chunk-EQ3OE2AV.js} +1 -1
  81. package/dist-cli/chunks/{chunk-WFAFAGMG.js → chunk-EWSWOWXK.js} +2 -2
  82. package/dist-cli/chunks/{chunk-HKQXGCQT.js → chunk-FA75F34Z.js} +1 -1
  83. package/dist-cli/chunks/{chunk-NERY6HGZ.js → chunk-FK4JSTZ3.js} +2 -2
  84. package/dist-cli/chunks/{chunk-NPSPWMBO.js → chunk-GJRLPJQL.js} +2 -2
  85. package/dist-cli/chunks/{chunk-TPIPKXJL.js → chunk-GRO74J2X.js} +1 -1
  86. package/dist-cli/chunks/chunk-H5X5FJ63.js +99 -0
  87. package/dist-cli/chunks/chunk-HEKHLQ3B.js +497 -0
  88. package/dist-cli/chunks/chunk-HQQTS2CB.js +30 -0
  89. package/dist-cli/chunks/{chunk-Q65KH25G.js → chunk-I52NT6VG.js} +1 -1
  90. package/dist-cli/chunks/{chunk-AUPJX4KI.js → chunk-IDLFVRPN.js} +1 -1
  91. package/dist-cli/chunks/{chunk-LAKWOJ5Y.js → chunk-JZLDHPB7.js} +2 -2
  92. package/dist-cli/chunks/{chunk-WJQB6AXZ.js → chunk-LIMWG54N.js} +1 -1
  93. package/dist-cli/chunks/{chunk-TE645QCO.js → chunk-LUOHRBJG.js} +1 -1
  94. package/dist-cli/chunks/{chunk-DJSPNOF6.js → chunk-LXPHL6FO.js} +2 -2
  95. package/dist-cli/chunks/{chunk-ECXDCED5.js → chunk-MDCY532E.js} +2 -2
  96. package/dist-cli/chunks/{chunk-4VA2ISWX.js → chunk-NJMU5BN6.js} +1 -1
  97. package/dist-cli/chunks/{chunk-RRALQ4WM.js → chunk-NR2V2ONN.js} +2 -2
  98. package/dist-cli/chunks/{chunk-SHMLYTNH.js → chunk-NTC46LSA.js} +2 -2
  99. package/dist-cli/chunks/{chunk-X5MXQB3L.js → chunk-O6QLKSAM.js} +10 -10
  100. package/dist-cli/chunks/{chunk-LPAOOJIW.js → chunk-OJZHECGH.js} +1 -1
  101. package/dist-cli/chunks/chunk-OTFTMGAL.js +7 -0
  102. package/dist-cli/chunks/{chunk-QKOY7UW5.js → chunk-PAUEZO6F.js} +2 -2
  103. package/dist-cli/chunks/{chunk-WXRDFUR7.js → chunk-PIZXOXBL.js} +2 -2
  104. package/dist-cli/chunks/{chunk-WF2CRNYF.js → chunk-PNOENVMJ.js} +1 -1
  105. package/dist-cli/chunks/{chunk-FDAFSRQE.js → chunk-Q4MRJ6PO.js} +2 -2
  106. package/dist-cli/chunks/{chunk-SSUPPM6K.js → chunk-RRX52O37.js} +1 -1
  107. package/dist-cli/chunks/{chunk-E6XYIIJK.js → chunk-U63T6LIQ.js} +1 -1
  108. package/dist-cli/chunks/{chunk-OZJMWTGA.js → chunk-UFVAAWGZ.js} +1 -1
  109. package/dist-cli/chunks/{chunk-GS5VUDCF.js → chunk-VVQCZ42C.js} +1 -1
  110. package/dist-cli/chunks/{chunk-MCO7V4VN.js → chunk-WFQHT4QD.js} +2 -2
  111. package/dist-cli/chunks/{chunk-JFGW75UL.js → chunk-WPV4H5S4.js} +2 -2
  112. package/dist-cli/chunks/{chunk-OXCDE3DD.js → chunk-X6WQ4YWE.js} +1 -1
  113. package/dist-cli/chunks/{chunk-FVODUDPS.js → chunk-YIZGNT7A.js} +1 -1
  114. package/dist-cli/chunks/{chunk-MGOAQHMO.js → chunk-Z2VBSNFI.js} +2 -2
  115. package/dist-cli/chunks/{chunk-GFWUIGGY.js → chunk-Z3DENGXW.js} +2 -2
  116. package/dist-cli/chunks/{cleanup-WHGLBAJ2.js → cleanup-MXMMJ7JW.js} +2 -2
  117. package/dist-cli/chunks/cli-version-MLS55UTY.js +4 -0
  118. package/dist-cli/chunks/compat-E6KE5KDI.js +23 -0
  119. package/dist-cli/chunks/config-QSLLVZDS.js +13 -0
  120. package/dist-cli/chunks/{connect-N4FV3DDV.js → connect-QE4VU6GB.js} +2 -2
  121. package/dist-cli/chunks/control-XD5F6K5T.js +4 -0
  122. package/dist-cli/chunks/daemon-UN5SE2JO.js +4 -0
  123. package/dist-cli/chunks/{debug-AHEK43AJ.js → debug-5FG3MBJS.js} +20 -20
  124. package/dist-cli/chunks/desktop-5EZX7NX5.js +31 -0
  125. package/dist-cli/chunks/detox-WJGQP5TM.js +52 -0
  126. package/dist-cli/chunks/device-D7LKCAMS.js +18 -0
  127. package/dist-cli/chunks/{diagnose-WDP3CVIX.js → diagnose-A3W6ZTGA.js} +2 -2
  128. package/dist-cli/chunks/{disk-cleanup-JRT5MKFW.js → disk-cleanup-BDRHX5ZG.js} +2 -2
  129. package/dist-cli/chunks/{do-chain-7FDMO56C.js → do-chain-RUJNRPPF.js} +2 -2
  130. package/dist-cli/chunks/drivers-3NJ5RL6X.js +4 -0
  131. package/dist-cli/chunks/{env-YIBOMB24.js → env-U67SQVTV.js} +2 -2
  132. package/dist-cli/chunks/{film-R3EQADMG.js → film-XC6UAQ3V.js} +3 -3
  133. package/dist-cli/chunks/flow-FHZZD3P6.js +4 -0
  134. package/dist-cli/chunks/help-BYYDUSXF.js +4 -0
  135. package/dist-cli/chunks/{hidden-runtime-alias-6M4UERRQ.js → hidden-runtime-alias-7S2TNZXG.js} +2 -2
  136. package/dist-cli/chunks/{home-paths-QJNOHZJO.js → home-paths-LMO5LB4F.js} +2 -2
  137. package/dist-cli/chunks/inspect-RQCTWDCC.js +4 -0
  138. package/dist-cli/chunks/install-desktop-GOWXCQUE.js +4 -0
  139. package/dist-cli/chunks/login-JIU42S4C.js +26 -0
  140. package/dist-cli/chunks/{logout-VNJX2IEW.js → logout-JTAWQXZO.js} +2 -2
  141. package/dist-cli/chunks/{maestro-SQS2OS2D.js → maestro-TYBQYOGB.js} +3 -3
  142. package/dist-cli/chunks/{maestro-generate-GWVPISG5.js → maestro-generate-YLAGWVKE.js} +3 -3
  143. package/dist-cli/chunks/mode-DV24ZRZ6.js +26 -0
  144. package/dist-cli/chunks/{optional-demo-registry-L3LRBQHG.js → optional-demo-registry-JZH66VIM.js} +2 -2
  145. package/dist-cli/chunks/{perf-XLPC4UKR.js → perf-LXXJ4EAX.js} +2 -2
  146. package/dist-cli/chunks/{permissions-QRHWVMDP.js → permissions-KAOVZUPW.js} +2 -2
  147. package/dist-cli/chunks/{platform-F47URZNB.js → platform-KW35446W.js} +3 -3
  148. package/dist-cli/chunks/privacy-MIFE72CG.js +4 -0
  149. package/dist-cli/chunks/record-EK3ETFHZ.js +72 -0
  150. package/dist-cli/chunks/report-issue-NW5PCAZF.js +29 -0
  151. package/dist-cli/chunks/reset-RZ4O5AFJ.js +4 -0
  152. package/dist-cli/chunks/resolve-target-7R5BNYMM.js +4 -0
  153. package/dist-cli/chunks/runtime-MZHLSRS6.js +4 -0
  154. package/dist-cli/chunks/{screenshot-command-RK7IJHVK.js → screenshot-command-TQSPTFT2.js} +11 -11
  155. package/dist-cli/chunks/screenshot-layers-IZP3L3AQ.js +20 -0
  156. package/dist-cli/chunks/screenshots-capture-K7LJOVAE.js +42 -0
  157. package/dist-cli/chunks/{serve-UBXNGLNP.js → serve-MMX4WXXG.js} +18 -18
  158. package/dist-cli/chunks/setup-YFP3KEQZ.js +4 -0
  159. package/dist-cli/chunks/{sim-client-VTKFEDJX.js → sim-client-KLAYIFOC.js} +2 -2
  160. package/dist-cli/chunks/skills-N4D3POIS.js +50 -0
  161. package/dist-cli/chunks/{state-273XJPUE.js → state-ES6TFQZF.js} +2 -2
  162. package/dist-cli/chunks/{storage-RTDFWIY7.js → storage-52DR5V2C.js} +2 -2
  163. package/dist-cli/chunks/store-HOL45WCI.js +4 -0
  164. package/dist-cli/chunks/telemetry-BV6OTYPF.js +4 -0
  165. package/dist-cli/chunks/timeline-NRVNB5JR.js +24 -0
  166. package/dist-cli/chunks/{upgrade-R74NVHKG.js → upgrade-LNED5YQ2.js} +2 -2
  167. package/dist-cli/chunks/upload-RXKHFIBU.js +4 -0
  168. package/dist-cli/chunks/{version-RTFCYQZ7.js → version-VEF2DYGG.js} +2 -2
  169. package/dist-cli/chunks/{web-35SSKBRU.js → web-CGDE6S73.js} +2 -2
  170. package/dist-cli/chunks/welcome-FT2AMUWW.js +5 -0
  171. package/dist-cli/chunks/what-happened-FSIDWL32.js +25 -0
  172. package/dist-cli/chunks/{ws-bridge-JXQUAWFA.js → ws-bridge-QXFQLRE7.js} +2 -2
  173. package/dist-lib/agent-daemon-client.cjs +1 -1
  174. package/dist-lib/agent-events.cjs +1 -1
  175. package/dist-lib/agent-identity.cjs +1 -1
  176. package/dist-lib/agent-sessions.cjs +1 -1
  177. package/dist-lib/attached-projects.cjs +1 -1
  178. package/dist-lib/auth/shared-session.cjs +1 -1
  179. package/dist-lib/backend-origin.cjs +1 -1
  180. package/dist-lib/beta.cjs +1 -1
  181. package/dist-lib/beta.mjs +1 -1
  182. package/dist-lib/bridge-constants.cjs +1 -1
  183. package/dist-lib/bridge-contract-input.cjs +1 -1
  184. package/dist-lib/bridge-contract-input.mjs +1 -1
  185. package/dist-lib/bridge-contract.cjs +1 -1
  186. package/dist-lib/bridge-contract.mjs +1 -1
  187. package/dist-lib/cli-constants.cjs +1 -1
  188. package/dist-lib/config.cjs +1 -1
  189. package/dist-lib/detox/index.cjs +1 -1
  190. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  191. package/dist-lib/home-paths.cjs +1 -1
  192. package/dist-lib/host/bridge-host.cjs +1 -1
  193. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  194. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  195. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  196. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  197. package/dist-lib/host/websocket-proxy.cjs +1 -1
  198. package/dist-lib/index.cjs +1 -1
  199. package/dist-lib/jump-to-source-babel.cjs +1 -1
  200. package/dist-lib/menu.cjs +1 -1
  201. package/dist-lib/menu.mjs +1 -1
  202. package/dist-lib/metro-production-bundle.cjs +1 -1
  203. package/dist-lib/metro-production-bundle.mjs +1 -1
  204. package/dist-lib/metro.cjs +1 -1
  205. package/dist-lib/profiles.cjs +1 -1
  206. package/dist-lib/public-brand.cjs +1 -1
  207. package/dist-lib/react-native-host-modules.cjs +2 -1
  208. package/dist-lib/react-native-host-modules.mjs +2 -1
  209. package/dist-lib/render-mode.cjs +1 -1
  210. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  211. package/dist-lib/sdk.cjs +1 -1
  212. package/dist-lib/sdk.mjs +1 -1
  213. package/dist-lib/skills.cjs +560 -48
  214. package/dist-lib/vite.cjs +1 -1
  215. package/package.json +1 -1
  216. package/src/react-native-host-modules.ts +1 -0
  217. package/dist-cli/chunks/app-fonts-MDD3W4VN.js +0 -4
  218. package/dist-cli/chunks/auth-SLPHDPCF.js +0 -12
  219. package/dist-cli/chunks/chunk-2YK5J2D2.js +0 -24
  220. package/dist-cli/chunks/chunk-42TLK75A.js +0 -497
  221. package/dist-cli/chunks/chunk-57LITN73.js +0 -7
  222. package/dist-cli/chunks/chunk-T4ZZ26A2.js +0 -28
  223. package/dist-cli/chunks/chunk-UXROQPIN.js +0 -30
  224. package/dist-cli/chunks/chunk-YSHJ3LMQ.js +0 -74
  225. package/dist-cli/chunks/chunk-YYPTSF6W.js +0 -99
  226. package/dist-cli/chunks/cli-version-DMXIXBIM.js +0 -4
  227. package/dist-cli/chunks/compat-MGBKGYGQ.js +0 -20
  228. package/dist-cli/chunks/config-TRDOMP4T.js +0 -13
  229. package/dist-cli/chunks/control-5GRBZVYK.js +0 -4
  230. package/dist-cli/chunks/daemon-MBT5E3ZC.js +0 -4
  231. package/dist-cli/chunks/desktop-LDRIXOVV.js +0 -31
  232. package/dist-cli/chunks/detox-6HAKYISO.js +0 -52
  233. package/dist-cli/chunks/device-QM3S7OVU.js +0 -18
  234. package/dist-cli/chunks/drivers-AJL2EVXH.js +0 -4
  235. package/dist-cli/chunks/flow-BDAA6BWL.js +0 -4
  236. package/dist-cli/chunks/help-5EJD6LJF.js +0 -4
  237. package/dist-cli/chunks/inspect-S3LR3R2A.js +0 -4
  238. package/dist-cli/chunks/install-desktop-GXE6K7BJ.js +0 -4
  239. package/dist-cli/chunks/login-ISWDW4WU.js +0 -26
  240. package/dist-cli/chunks/mode-3URDGBZB.js +0 -26
  241. package/dist-cli/chunks/privacy-BF23T67T.js +0 -4
  242. package/dist-cli/chunks/record-2DN3OUE5.js +0 -72
  243. package/dist-cli/chunks/report-issue-D3BQPSLU.js +0 -29
  244. package/dist-cli/chunks/reset-T5CNZ7D3.js +0 -4
  245. package/dist-cli/chunks/resolve-target-KAAS274S.js +0 -4
  246. package/dist-cli/chunks/runtime-AQJDBR3X.js +0 -4
  247. package/dist-cli/chunks/screenshot-layers-DP2QKSMN.js +0 -20
  248. package/dist-cli/chunks/screenshots-capture-MA7P3FUT.js +0 -42
  249. package/dist-cli/chunks/setup-GH7OW4GC.js +0 -4
  250. package/dist-cli/chunks/skills-HPK25R4B.js +0 -50
  251. package/dist-cli/chunks/store-DLKNNM4L.js +0 -4
  252. package/dist-cli/chunks/telemetry-7CWDXEOO.js +0 -4
  253. package/dist-cli/chunks/timeline-IF2PGK7C.js +0 -24
  254. package/dist-cli/chunks/upload-3JFFVCZ4.js +0 -4
  255. package/dist-cli/chunks/welcome-N5V352SE.js +0 -5
  256. package/dist-cli/chunks/what-happened-WXTP6EPR.js +0 -25
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.368 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.370 | (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;
@@ -1190,16 +1190,487 @@ var init_react_native_webview_coverage = __esm({
1190
1190
  }
1191
1191
  });
1192
1192
 
1193
+ // ../compat/src/generated/supported-native-packages.ts
1194
+ var SUPPORTED_NATIVE_PACKAGE_NAMES;
1195
+ var init_supported_native_packages = __esm({
1196
+ "../compat/src/generated/supported-native-packages.ts"() {
1197
+ "use strict";
1198
+ SUPPORTED_NATIVE_PACKAGE_NAMES = [
1199
+ "@adobe/react-native-aepcore",
1200
+ // coverage
1201
+ "@aptabase/react-native",
1202
+ // coverage
1203
+ "@bitdrift/react-native",
1204
+ // coverage
1205
+ "@bsky.app/react-native-mmkv",
1206
+ // coverage
1207
+ "@bugfender/rn-bugfender",
1208
+ // coverage
1209
+ "@bugsnag/react-native",
1210
+ // coverage
1211
+ "@bugsnag/react-native-performance",
1212
+ // coverage
1213
+ "@d11/react-native-fast-image",
1214
+ // coverage
1215
+ "@datadog/mobile-react-native",
1216
+ // coverage
1217
+ "@dimaportenko/react-native-shadow-view",
1218
+ // coverage
1219
+ "@dr.pogodin/react-native-fs",
1220
+ // coverage
1221
+ "@expo/ui",
1222
+ // preset+coverage
1223
+ "@expo/ui/community/menu",
1224
+ // coverage
1225
+ "@fullstory/react-native",
1226
+ // coverage
1227
+ "@iterable/expo-plugin",
1228
+ // coverage
1229
+ "@mattermost/react-native-paste-input",
1230
+ // coverage
1231
+ "@mattermost/react-native-turbo-log",
1232
+ // coverage
1233
+ "@nandorojo/galeria",
1234
+ // preset+coverage
1235
+ "@notifee/react-native",
1236
+ // coverage
1237
+ "@op-engineering/op-sqlite",
1238
+ // coverage
1239
+ "@posthog/react-native-plugin",
1240
+ // preset+coverage
1241
+ "@react-native-async-storage/async-storage",
1242
+ // coverage
1243
+ "@react-native-community/checkbox",
1244
+ // coverage
1245
+ "@react-native-community/geolocation",
1246
+ // coverage
1247
+ "@react-native-community/image-editor",
1248
+ // coverage
1249
+ "@react-native-community/masked-view",
1250
+ // coverage
1251
+ "@react-native-community/netinfo",
1252
+ // coverage
1253
+ "@react-native-community/slider",
1254
+ // coverage
1255
+ "@react-native-documents/picker",
1256
+ // coverage
1257
+ "@react-native-firebase/analytics",
1258
+ // coverage
1259
+ "@react-native-firebase/app",
1260
+ // coverage
1261
+ "@react-native-firebase/crashlytics",
1262
+ // coverage
1263
+ "@react-native-firebase/perf",
1264
+ // coverage
1265
+ "@react-native-masked-view/masked-view",
1266
+ // preset+coverage
1267
+ "@react-native-menu/menu",
1268
+ // coverage
1269
+ "@rn-org/react-native-shortcuts",
1270
+ // coverage
1271
+ "@rocket.chat/mobile-crypto",
1272
+ // coverage
1273
+ "@rudderstack/rudder-integration-appcenter-react-native",
1274
+ // coverage
1275
+ "@rudderstack/rudder-sdk-react-native",
1276
+ // coverage
1277
+ "@segment/analytics-react-native",
1278
+ // coverage
1279
+ "@sentry/react-native",
1280
+ // coverage
1281
+ "@shopify/flash-list",
1282
+ // coverage
1283
+ "@shopify/react-native-performance",
1284
+ // coverage
1285
+ "@shopify/react-native-skia",
1286
+ // preset+coverage
1287
+ "@splicer97/react-native-mytracker",
1288
+ // coverage
1289
+ "@stripe/stripe-react-native",
1290
+ // coverage
1291
+ "@vxrn/native",
1292
+ // preset
1293
+ "@walletconnect/react-native-compat",
1294
+ // coverage
1295
+ "@wwdrew/expo-android-shared-preferences",
1296
+ // coverage
1297
+ "appcenter",
1298
+ // coverage
1299
+ "burnt",
1300
+ // preset+coverage
1301
+ "expo",
1302
+ // preset+coverage
1303
+ "expo-android-shared-preferences",
1304
+ // coverage
1305
+ "expo-apple-authentication",
1306
+ // preset
1307
+ "expo-application",
1308
+ // visual-proof+coverage
1309
+ "expo-asset",
1310
+ // preset+coverage
1311
+ "expo-audio",
1312
+ // coverage
1313
+ "expo-av",
1314
+ // coverage
1315
+ "expo-background-fetch",
1316
+ // visual-proof
1317
+ "expo-background-task",
1318
+ // visual-proof
1319
+ "expo-battery",
1320
+ // visual-proof+coverage
1321
+ "expo-blur",
1322
+ // preset+coverage
1323
+ "expo-brightness",
1324
+ // visual-proof
1325
+ "expo-calendar",
1326
+ // visual-proof
1327
+ "expo-camera",
1328
+ // coverage
1329
+ "expo-cellular",
1330
+ // visual-proof
1331
+ "expo-clipboard",
1332
+ // preset+coverage
1333
+ "expo-constants",
1334
+ // preset+visual-proof+coverage
1335
+ "expo-contacts",
1336
+ // visual-proof
1337
+ "expo-crypto",
1338
+ // preset+coverage
1339
+ "expo-dev-client",
1340
+ // coverage
1341
+ "expo-device",
1342
+ // coverage
1343
+ "expo-document-picker",
1344
+ // preset+coverage
1345
+ "expo-file-system",
1346
+ // coverage
1347
+ "expo-font",
1348
+ // preset+coverage
1349
+ "expo-gl",
1350
+ // preset+coverage
1351
+ "expo-glass-effect",
1352
+ // preset+coverage
1353
+ "expo-haptics",
1354
+ // preset+coverage
1355
+ "expo-ignore-battery-optimizations",
1356
+ // coverage
1357
+ "expo-image",
1358
+ // preset+visual-proof+coverage
1359
+ "expo-image-manipulator",
1360
+ // coverage
1361
+ "expo-image-picker",
1362
+ // preset+coverage
1363
+ "expo-insights",
1364
+ // coverage
1365
+ "expo-intent-launcher",
1366
+ // visual-proof
1367
+ "expo-keep-awake",
1368
+ // coverage
1369
+ "expo-linear-gradient",
1370
+ // preset+visual-proof+coverage
1371
+ "expo-linking",
1372
+ // preset+coverage
1373
+ "expo-local-authentication",
1374
+ // coverage
1375
+ "expo-localization",
1376
+ // coverage
1377
+ "expo-mail-composer",
1378
+ // visual-proof
1379
+ "expo-media-library",
1380
+ // coverage
1381
+ "expo-mesh-gradient",
1382
+ // coverage
1383
+ "expo-modules-core",
1384
+ // preset
1385
+ "expo-network",
1386
+ // preset+visual-proof+coverage
1387
+ "expo-notifications",
1388
+ // preset+coverage
1389
+ "expo-print",
1390
+ // visual-proof
1391
+ "expo-screen-capture",
1392
+ // visual-proof
1393
+ "expo-screen-corner-radius",
1394
+ // coverage
1395
+ "expo-screen-orientation",
1396
+ // visual-proof+coverage
1397
+ "expo-secure-store",
1398
+ // visual-proof+coverage
1399
+ "expo-sensors",
1400
+ // visual-proof
1401
+ "expo-sharing",
1402
+ // visual-proof
1403
+ "expo-sms",
1404
+ // visual-proof
1405
+ "expo-speech",
1406
+ // visual-proof
1407
+ "expo-speech-recognition",
1408
+ // preset
1409
+ "expo-splash-screen",
1410
+ // visual-proof+coverage
1411
+ "expo-sqlite",
1412
+ // preset+coverage
1413
+ "expo-store-review",
1414
+ // visual-proof+coverage
1415
+ "expo-symbols",
1416
+ // coverage
1417
+ "expo-system-ui",
1418
+ // coverage
1419
+ "expo-task-manager",
1420
+ // visual-proof+coverage
1421
+ "expo-testflight",
1422
+ // coverage
1423
+ "expo-tracking-transparency",
1424
+ // visual-proof+coverage
1425
+ "expo-updates",
1426
+ // preset+coverage
1427
+ "expo-video",
1428
+ // visual-proof
1429
+ "expo-video-thumbnails",
1430
+ // visual-proof
1431
+ "expo-web-browser",
1432
+ // preset
1433
+ "expo-winter-fetch",
1434
+ // coverage
1435
+ "expo-winter-formdata",
1436
+ // coverage
1437
+ "group-ib-fp",
1438
+ // coverage
1439
+ "gt-react-native",
1440
+ // coverage
1441
+ "jail-monkey",
1442
+ // coverage
1443
+ "lottie-react-native",
1444
+ // coverage
1445
+ "mixpanel-react-native",
1446
+ // coverage
1447
+ "newrelic-react-native-agent",
1448
+ // coverage
1449
+ "posthog-react-native",
1450
+ // preset+coverage
1451
+ "posthog-react-native-session-replay",
1452
+ // preset+coverage
1453
+ "react-native",
1454
+ // preset+visual-proof+coverage
1455
+ "react-native-actions-shortcuts",
1456
+ // coverage
1457
+ "react-native-adjust",
1458
+ // coverage
1459
+ "react-native-aes-crypto",
1460
+ // coverage
1461
+ "react-native-aes-gcm-crypto",
1462
+ // coverage
1463
+ "react-native-amplitude-analytics",
1464
+ // coverage
1465
+ "react-native-appsflyer",
1466
+ // coverage
1467
+ "react-native-audio-api",
1468
+ // coverage
1469
+ "react-native-background-timer",
1470
+ // coverage
1471
+ "react-native-blob-util",
1472
+ // coverage
1473
+ "react-native-blue-crypto",
1474
+ // coverage
1475
+ "react-native-bootsplash",
1476
+ // preset+coverage
1477
+ "react-native-bottom-tabs",
1478
+ // preset+visual-proof
1479
+ "react-native-branch",
1480
+ // coverage
1481
+ "react-native-config",
1482
+ // coverage
1483
+ "react-native-date-picker",
1484
+ // coverage
1485
+ "react-native-default-preference",
1486
+ // coverage
1487
+ "react-native-device-info",
1488
+ // coverage
1489
+ "react-native-edge-to-edge",
1490
+ // coverage
1491
+ "react-native-fast-image",
1492
+ // coverage
1493
+ "react-native-fast-secure-storage",
1494
+ // coverage
1495
+ "react-native-fast-trie",
1496
+ // coverage
1497
+ "react-native-fs",
1498
+ // coverage
1499
+ "react-native-gesture-handler",
1500
+ // preset+visual-proof+coverage
1501
+ "react-native-get-device-locale",
1502
+ // coverage
1503
+ "react-native-get-location",
1504
+ // coverage
1505
+ "react-native-get-random-values",
1506
+ // coverage
1507
+ "react-native-google-play-install-referrer",
1508
+ // coverage
1509
+ "react-native-gzip",
1510
+ // coverage
1511
+ "react-native-haptic-feedback",
1512
+ // coverage
1513
+ "react-native-headphone-detection",
1514
+ // coverage
1515
+ "react-native-idle-timer",
1516
+ // coverage
1517
+ "react-native-image-picker",
1518
+ // coverage
1519
+ "react-native-image-size",
1520
+ // coverage
1521
+ "react-native-in-app-review",
1522
+ // coverage
1523
+ "react-native-keep-awake",
1524
+ // coverage
1525
+ "react-native-key-command",
1526
+ // coverage
1527
+ "react-native-keyboard-controller",
1528
+ // preset+visual-proof
1529
+ "react-native-keychain",
1530
+ // coverage
1531
+ "react-native-keys",
1532
+ // coverage
1533
+ "react-native-launch-arguments",
1534
+ // coverage
1535
+ "react-native-linear-gradient",
1536
+ // coverage
1537
+ "react-native-localize",
1538
+ // coverage
1539
+ "react-native-maps",
1540
+ // preset+coverage
1541
+ "react-native-mixpanel",
1542
+ // coverage
1543
+ "react-native-mmkv",
1544
+ // preset+coverage
1545
+ "react-native-mmkv-storage",
1546
+ // coverage
1547
+ "react-native-nano-icons",
1548
+ // coverage
1549
+ "react-native-nitro-buffer",
1550
+ // coverage
1551
+ "react-native-nitro-text-decoder",
1552
+ // coverage
1553
+ "react-native-nitro-totp",
1554
+ // coverage
1555
+ "react-native-notification-badge",
1556
+ // coverage
1557
+ "react-native-pager-view",
1558
+ // preset+visual-proof
1559
+ "react-native-pdf",
1560
+ // coverage
1561
+ "react-native-permissions",
1562
+ // coverage
1563
+ "react-native-photo-manipulator",
1564
+ // coverage
1565
+ "react-native-purchases",
1566
+ // preset+coverage
1567
+ "react-native-pure-jwt",
1568
+ // coverage
1569
+ "react-native-quick-actions",
1570
+ // coverage
1571
+ "react-native-quick-base64",
1572
+ // coverage
1573
+ "react-native-quick-crypto",
1574
+ // coverage
1575
+ "react-native-randombytes",
1576
+ // coverage
1577
+ "react-native-reanimated",
1578
+ // preset+visual-proof+coverage
1579
+ "react-native-restart",
1580
+ // coverage
1581
+ "react-native-restart-newarch",
1582
+ // coverage
1583
+ "react-native-rsa-signer",
1584
+ // coverage
1585
+ "react-native-safe-area-context",
1586
+ // preset+visual-proof+coverage
1587
+ "react-native-screen-corner-radius",
1588
+ // coverage
1589
+ "react-native-screens",
1590
+ // preset+visual-proof+coverage
1591
+ "react-native-securerandom",
1592
+ // coverage
1593
+ "react-native-settings",
1594
+ // coverage
1595
+ "react-native-share",
1596
+ // coverage
1597
+ "react-native-shiki-engine",
1598
+ // coverage
1599
+ "react-native-simple-toast",
1600
+ // coverage
1601
+ "react-native-smart-splash-screen",
1602
+ // coverage
1603
+ "react-native-splash-screen",
1604
+ // coverage
1605
+ "react-native-svg",
1606
+ // preset+visual-proof
1607
+ "react-native-system-bars",
1608
+ // coverage
1609
+ "react-native-teleport",
1610
+ // preset+coverage
1611
+ "react-native-testfairy",
1612
+ // coverage
1613
+ "react-native-tiktok-business-sdk",
1614
+ // coverage
1615
+ "react-native-timezone",
1616
+ // coverage
1617
+ "react-native-turbo-haptics",
1618
+ // coverage
1619
+ "react-native-uitextview",
1620
+ // visual-proof+coverage
1621
+ "react-native-ulid-jsi",
1622
+ // coverage
1623
+ "react-native-ux-cam",
1624
+ // coverage
1625
+ "react-native-vector-icons",
1626
+ // coverage
1627
+ "react-native-version-info",
1628
+ // coverage
1629
+ "react-native-version-number",
1630
+ // coverage
1631
+ "react-native-video",
1632
+ // coverage
1633
+ "react-native-vision-camera",
1634
+ // coverage
1635
+ "react-native-webgpu",
1636
+ // preset
1637
+ "react-native-webp-format",
1638
+ // coverage
1639
+ "react-native-webview",
1640
+ // preset+visual-proof
1641
+ "react-native-worklets",
1642
+ // preset+coverage
1643
+ "react-native-xxhash",
1644
+ // coverage
1645
+ "rn-fetch-blob",
1646
+ // coverage
1647
+ "rollbar-react-native",
1648
+ // coverage
1649
+ "sift-react-native"
1650
+ // coverage
1651
+ ];
1652
+ }
1653
+ });
1654
+
1655
+ // ../compat/src/slug.ts
1656
+ var init_slug = __esm({
1657
+ "../compat/src/slug.ts"() {
1658
+ "use strict";
1659
+ }
1660
+ });
1661
+
1193
1662
  // ../compat/src/unsupported-packages.ts
1194
1663
  function getUnsupportedNativePackage(name2) {
1195
1664
  const entry = UNSUPPORTED_NATIVE_PACKAGES[name2];
1196
1665
  if (!entry) return null;
1197
1666
  return { name: name2, status: "unsupported", note: entry.note, recovery: entry.recovery };
1198
1667
  }
1199
- var UNSUPPORTED_NATIVE_PACKAGE_NOTE, UNSUPPORTED_NATIVE_PACKAGES, UNSUPPORTABLE;
1668
+ var UNSUPPORTED_NATIVE_PACKAGE_NOTE, UNSUPPORTED_NATIVE_PACKAGES, UNSUPPORTABLE, SUPPORTED;
1200
1669
  var init_unsupported_packages = __esm({
1201
1670
  "../compat/src/unsupported-packages.ts"() {
1202
1671
  "use strict";
1672
+ init_supported_native_packages();
1673
+ init_slug();
1203
1674
  UNSUPPORTED_NATIVE_PACKAGE_NOTE = "requires native SDK";
1204
1675
  UNSUPPORTED_NATIVE_PACKAGES = {
1205
1676
  // the pre-v6 umbrella package. modern firebase is the scoped set, and
@@ -1217,9 +1688,18 @@ var init_unsupported_packages = __esm({
1217
1688
  "react-native-in-app-purchase": {
1218
1689
  note: "store billing runs entirely in StoreKit and Play Billing, which have no browser equivalent",
1219
1690
  recovery: "Use react-native-purchases for a full sandbox catalog, or react-native-iap if you only need the connection lifecycle."
1691
+ },
1692
+ // not a package refusal at all — a routing framework refusal. expo-router
1693
+ // owns the entry point, the bundler config, the navigation tree and the app
1694
+ // shell, so it is not something a seam can back. a Contrast app is already
1695
+ // routed by One, which has the same file-based semantics.
1696
+ "expo-router": {
1697
+ note: "it is a whole routing framework that owns the app entry point, the bundler config and the navigation tree, so no native seam can back it",
1698
+ recovery: "Contrast apps route with One, which has the same file-based routing: put screens in app/, and use Link, Stack, Tabs and useRouter from one."
1220
1699
  }
1221
1700
  };
1222
1701
  UNSUPPORTABLE = new Set(Object.keys(UNSUPPORTED_NATIVE_PACKAGES));
1702
+ SUPPORTED = new Set(SUPPORTED_NATIVE_PACKAGE_NAMES);
1223
1703
  }
1224
1704
  });
1225
1705
 
@@ -23702,6 +24182,30 @@ var init_open_url2 = __esm({
23702
24182
  }
23703
24183
  });
23704
24184
 
24185
+ // cli/run-rnx.ts
24186
+ function rethrowIfExit(error) {
24187
+ if (error instanceof RnxExit) throw error;
24188
+ }
24189
+ function rnxExit(code) {
24190
+ throw new RnxExit(code);
24191
+ }
24192
+ var import_node_async_hooks, RnxExit, sinks;
24193
+ var init_run_rnx = __esm({
24194
+ "cli/run-rnx.ts"() {
24195
+ "use strict";
24196
+ import_node_async_hooks = require("node:async_hooks");
24197
+ RnxExit = class extends Error {
24198
+ code;
24199
+ constructor(code) {
24200
+ super(`rnx exited with code ${code}`);
24201
+ this.name = "RnxExit";
24202
+ this.code = code;
24203
+ }
24204
+ };
24205
+ sinks = new import_node_async_hooks.AsyncLocalStorage();
24206
+ }
24207
+ });
24208
+
23705
24209
  // cli/commands/inspect/env.ts
23706
24210
  function isAgentEnv() {
23707
24211
  if (process.env.SOOTSIM_AGENT === "0") return false;
@@ -23805,7 +24309,7 @@ async function runRuntime(args, opts = {}) {
23805
24309
  default:
23806
24310
  console.error(` unknown runtime subcommand: ${sub}`);
23807
24311
  printHelp();
23808
- process.exit(1);
24312
+ rnxExit(1);
23809
24313
  }
23810
24314
  }
23811
24315
  function printHelp() {
@@ -23862,7 +24366,7 @@ async function runtimeInstall(args, opts) {
23862
24366
  return result;
23863
24367
  } catch (err) {
23864
24368
  console.error(` ${describeError(err)}`);
23865
- process.exit(1);
24369
+ rnxExit(1);
23866
24370
  }
23867
24371
  }
23868
24372
  async function activateVersion(version) {
@@ -23953,14 +24457,14 @@ async function runtimeUse(args) {
23953
24457
  const version = args[0];
23954
24458
  if (!version) {
23955
24459
  console.error(` usage: rnx runtime use <version>`);
23956
- process.exit(1);
24460
+ rnxExit(1);
23957
24461
  }
23958
24462
  const installed2 = sootsimRuntime.listInstalled();
23959
24463
  if (!installed2.includes(version)) {
23960
24464
  console.error(` version ${version} is not installed`);
23961
24465
  console.error(` installed: ${installed2.join(", ") || "(none)"}`);
23962
24466
  console.error(` run \`rnx runtime install ${version}\` first`);
23963
- process.exit(1);
24467
+ rnxExit(1);
23964
24468
  }
23965
24469
  await activateVersion(version);
23966
24470
  }
@@ -23968,7 +24472,7 @@ async function runtimeRemove(args) {
23968
24472
  const version = args[0];
23969
24473
  if (!version) {
23970
24474
  console.error(` usage: rnx runtime remove <version>`);
23971
- process.exit(1);
24475
+ rnxExit(1);
23972
24476
  }
23973
24477
  const active = readActiveRuntime();
23974
24478
  if (active === version) {
@@ -23976,11 +24480,11 @@ async function runtimeRemove(args) {
23976
24480
  console.error(
23977
24481
  ` switch with \`rnx runtime use <other>\` first, or install another version`
23978
24482
  );
23979
- process.exit(1);
24483
+ rnxExit(1);
23980
24484
  }
23981
24485
  if (readLiveRuntimeVersions().includes(version)) {
23982
24486
  console.error(` cannot remove runtime ${version} while a project is using it`);
23983
- process.exit(1);
24487
+ rnxExit(1);
23984
24488
  }
23985
24489
  const dir = runtimeDir(version);
23986
24490
  if (!import_fs8.default.existsSync(dir)) {
@@ -24001,7 +24505,7 @@ async function runtimeWhich() {
24001
24505
  async function runtimeNotes(args) {
24002
24506
  if (args.length > 0) {
24003
24507
  console.error(` usage: rnx runtime notes`);
24004
- process.exit(1);
24508
+ rnxExit(1);
24005
24509
  }
24006
24510
  const { config } = await resolveSootSimAppConfig();
24007
24511
  const version = config?.runtimeVersion ?? readActiveRuntime();
@@ -24052,6 +24556,7 @@ var init_runtime = __esm({
24052
24556
  init_home_paths();
24053
24557
  init_runtime_delivery();
24054
24558
  init_app_config();
24559
+ init_run_rnx();
24055
24560
  init_runtime_notes();
24056
24561
  init_ws_bridge();
24057
24562
  }
@@ -24343,18 +24848,18 @@ function parseOpenRuntimeConfig(args) {
24343
24848
  const raw = args[i + 1];
24344
24849
  if (!raw) {
24345
24850
  console.error(" rnx open: --replace expects <module>=<file>");
24346
- process.exit(1);
24851
+ rnxExit(1);
24347
24852
  }
24348
24853
  const eqIndex = raw.indexOf("=");
24349
24854
  if (eqIndex <= 0 || eqIndex === raw.length - 1) {
24350
24855
  console.error(" rnx open: --replace expects <module>=<file>");
24351
- process.exit(1);
24856
+ rnxExit(1);
24352
24857
  }
24353
24858
  const moduleName = raw.slice(0, eqIndex).trim();
24354
24859
  const filePath = normalizeReplacementPath(raw.slice(eqIndex + 1).trim());
24355
24860
  if (!import_node_fs13.default.existsSync(filePath)) {
24356
24861
  console.error(` rnx open: replacement file not found: ${filePath}`);
24357
- process.exit(1);
24862
+ rnxExit(1);
24358
24863
  }
24359
24864
  modules[moduleName] = { file: filePath };
24360
24865
  i++;
@@ -24365,7 +24870,7 @@ function parseOpenRuntimeConfig(args) {
24365
24870
  const eqIndex = raw ? raw.indexOf("=") : -1;
24366
24871
  if (!raw || eqIndex <= 0 || eqIndex === raw.length - 1) {
24367
24872
  console.error(" rnx open: --remap expects <host:port>=<host:port>");
24368
- process.exit(1);
24873
+ rnxExit(1);
24369
24874
  }
24370
24875
  remap[raw.slice(0, eqIndex).trim()] = raw.slice(eqIndex + 1).trim();
24371
24876
  i++;
@@ -24958,7 +25463,7 @@ async function runLinkCommand(args, opts = {}) {
24958
25463
  if (parsed.positional.length !== 1) {
24959
25464
  console.error(" rnx open: expected exactly one <url-or-route>");
24960
25465
  console.error(" examples: rnx open /settings | rnx open myapp://settings");
24961
- process.exit(1);
25466
+ rnxExit(1);
24962
25467
  }
24963
25468
  const bridge = createBridgeFromParsed(parsed);
24964
25469
  const simHint = parsed.simId ? ` --sim ${parsed.simId}` : "";
@@ -24972,7 +25477,7 @@ async function runLinkCommand(args, opts = {}) {
24972
25477
  warningsCommand: `rnx get warnings 5${simHint}`,
24973
25478
  requestsCommand: `rnx get requests 5${simHint}`
24974
25479
  });
24975
- process.exit(1);
25480
+ rnxExit(1);
24976
25481
  } finally {
24977
25482
  bridge.close();
24978
25483
  }
@@ -25010,11 +25515,11 @@ async function runOpenCommand(args, opts = {}) {
25010
25515
  console.error(
25011
25516
  ` rnx open: --cdp-port must be a positive port number, got "${cdpPortArg}"`
25012
25517
  );
25013
- process.exit(1);
25518
+ rnxExit(1);
25014
25519
  }
25015
25520
  if (requestedProfileId && ephemeralProfile) {
25016
25521
  console.error(" rnx open: --profile cannot be combined with --ephemeral");
25017
- process.exit(1);
25522
+ rnxExit(1);
25018
25523
  }
25019
25524
  const profileId = requestedProfileId ? ensureProfile(requestedProfileId).id : void 0;
25020
25525
  const openInNewSim = args.includes("--new") || !!profileId || ephemeralProfile;
@@ -25023,7 +25528,7 @@ async function runOpenCommand(args, opts = {}) {
25023
25528
  console.error(
25024
25529
  " rnx open: --new, --profile, and --ephemeral cannot be combined with --sim"
25025
25530
  );
25026
- process.exit(1);
25531
+ rnxExit(1);
25027
25532
  }
25028
25533
  const target = parsed.positional[0] || "";
25029
25534
  if (isAppDeepLinkTarget(target)) {
@@ -25031,7 +25536,7 @@ async function runOpenCommand(args, opts = {}) {
25031
25536
  console.error(
25032
25537
  " rnx open: deep links target the current app; remove --new, --profile, or --ephemeral"
25033
25538
  );
25034
- process.exit(1);
25539
+ rnxExit(1);
25035
25540
  }
25036
25541
  await runLinkCommand(args, opts);
25037
25542
  return;
@@ -25055,7 +25560,7 @@ async function runOpenCommand(args, opts = {}) {
25055
25560
  ` could not launch a browser: ${err instanceof Error ? err.message : String(err)}`
25056
25561
  );
25057
25562
  console.error(` open it yourself: ${target}`);
25058
- process.exit(1);
25563
+ rnxExit(1);
25059
25564
  }
25060
25565
  console.log(
25061
25566
  isLocal ? " to drive it under the CLI, point `rnx open` at the app\u2019s dev port instead (e.g. `rnx open 8081`)." : " the CLI can\u2019t drive a remote preview (the engine only attaches to the local bridge from localhost). to drive the app, run it locally and `rnx open <port>`."
@@ -25085,33 +25590,33 @@ async function runOpenCommand(args, opts = {}) {
25085
25590
  const requestedDriverId = args.find((_, i) => args[i - 1] === "--driver") || "";
25086
25591
  if (requestedDriverId && !isDriverId(requestedDriverId)) {
25087
25592
  console.error(` unknown driver "${requestedDriverId}" \u2014 run \`rnx list --drivers\``);
25088
- process.exit(1);
25593
+ rnxExit(1);
25089
25594
  }
25090
25595
  const driverId = isDriverId(requestedDriverId) ? requestedDriverId : process.env.CI === "1" || process.env.CI === "true" || process.env.GITHUB_ACTIONS === "true" || isAgentEnv() || !process.stdin.isTTY ? "playwright" : readSimulatorDriverPreference() || "playwright";
25091
25596
  const driverHeadless = resolveDriverHeadless(args, driverId);
25092
25597
  if (cdpPort && driverId !== "playwright") {
25093
25598
  console.error(" rnx open: --cdp-port is only honored by the playwright driver");
25094
- process.exit(1);
25599
+ rnxExit(1);
25095
25600
  }
25096
25601
  const hotFlag = args.includes("--hot");
25097
25602
  const noHmrFlag = args.includes("--no-hmr");
25098
25603
  if (hotFlag && noHmrFlag) {
25099
25604
  console.error(" rnx open: --hot and --no-hmr cannot be combined");
25100
- process.exit(1);
25605
+ rnxExit(1);
25101
25606
  }
25102
25607
  const hotMode = hotFlag ? true : noHmrFlag ? false : driverId !== "playwright";
25103
25608
  const deviceArg = args.find((_, i) => args[i - 1] === "--device");
25104
25609
  if (deviceArg && !(deviceArg in import_settings.devices)) {
25105
25610
  console.error(` rnx open: unknown device "${deviceArg}"`);
25106
25611
  console.error(` known devices: ${(0, import_settings.listSelectableDeviceModels)().join(", ")}`);
25107
- process.exit(1);
25612
+ rnxExit(1);
25108
25613
  }
25109
25614
  const deviceSpec = deviceArg ? import_settings.devices[deviceArg] : void 0;
25110
25615
  const viewportArg = args.find((_, i) => args[i - 1] === "--viewport");
25111
25616
  const viewportMatch = viewportArg ? /^(\d+)x(\d+)$/.exec(viewportArg) : null;
25112
25617
  if (viewportArg && !viewportMatch) {
25113
25618
  console.error(` rnx open: --viewport must be <width>x<height>, got "${viewportArg}"`);
25114
- process.exit(1);
25619
+ rnxExit(1);
25115
25620
  }
25116
25621
  const explicitViewport = viewportMatch ? { width: Number(viewportMatch[1]), height: Number(viewportMatch[2]) } : void 0;
25117
25622
  const buildShellUrlOpts = {
@@ -25204,7 +25709,7 @@ async function runOpenCommand(args, opts = {}) {
25204
25709
  warningsCommand: `rnx get warnings 5${simHint}`,
25205
25710
  requestsCommand: `rnx get requests 5${simHint}`
25206
25711
  });
25207
- process.exit(1);
25712
+ rnxExit(1);
25208
25713
  }
25209
25714
  if (!fallBackToNewSim && targetSim) {
25210
25715
  await sleep2(1500);
@@ -25215,7 +25720,7 @@ async function runOpenCommand(args, opts = {}) {
25215
25720
  );
25216
25721
  if (!ready) {
25217
25722
  console.error(" timed out waiting for current sim to load target");
25218
- process.exit(1);
25723
+ rnxExit(1);
25219
25724
  }
25220
25725
  ready.bridge.close();
25221
25726
  saveCurrentSimId(targetSim.id);
@@ -25241,13 +25746,13 @@ async function runOpenCommand(args, opts = {}) {
25241
25746
  console.error(
25242
25747
  " could not resolve a stable owning process; refusing unsupervised sim host"
25243
25748
  );
25244
- process.exit(1);
25749
+ rnxExit(1);
25245
25750
  }
25246
25751
  const simMatchesToken = (sim) => sim.url?.includes(`inspectOpen=${token}`) ?? false;
25247
25752
  const driver = getDriver(driverId);
25248
25753
  if (!driver) {
25249
25754
  console.error(` unknown driver "${driverId}" \u2014 run \`rnx list --drivers\``);
25250
- process.exit(1);
25755
+ rnxExit(1);
25251
25756
  }
25252
25757
  const connectWait = resolveDriverConnectWaitOptions();
25253
25758
  const result = await driver.launch({
@@ -25267,7 +25772,7 @@ async function runOpenCommand(args, opts = {}) {
25267
25772
  });
25268
25773
  if (!result.launched) {
25269
25774
  console.error(` ${driver.name} driver: ${result.message}`);
25270
- process.exit(1);
25775
+ rnxExit(1);
25271
25776
  }
25272
25777
  const outcome = await waitForSimMatchOrHostExit(
25273
25778
  parsed.wsPort,
@@ -25279,7 +25784,7 @@ async function runOpenCommand(args, opts = {}) {
25279
25784
  if (outcome.kind === "host-exit") {
25280
25785
  printDriverDiagnosticLogTail(result);
25281
25786
  console.error(` ${driver.name} host crashed \u2014 sim is no longer attached`);
25282
- process.exit(1);
25787
+ rnxExit(1);
25283
25788
  }
25284
25789
  if (outcome.kind === "timeout") {
25285
25790
  if (result.pid) {
@@ -25293,7 +25798,7 @@ async function runOpenCommand(args, opts = {}) {
25293
25798
  console.error(
25294
25799
  ` timed out after ${connectWait.timeoutMs}ms waiting for opened sim to connect`
25295
25800
  );
25296
- process.exit(1);
25801
+ rnxExit(1);
25297
25802
  }
25298
25803
  const match = outcome.sim;
25299
25804
  saveCurrentSimId(match.id);
@@ -25322,7 +25827,7 @@ async function runUseLikeCommand(args, opts = {}) {
25322
25827
  ` refused: ${target.id} is locked by the active user (${secs}s) \u2014 that's a live human tab`
25323
25828
  );
25324
25829
  console.error(` run \`rnx open --new\` for a fresh investigation sim`);
25325
- process.exit(1);
25830
+ rnxExit(1);
25326
25831
  }
25327
25832
  if (!force) {
25328
25833
  console.error(
@@ -25331,20 +25836,21 @@ async function runUseLikeCommand(args, opts = {}) {
25331
25836
  console.error(
25332
25837
  ` \`sootsim use ${target.id} --force\` to take it, or \`rnx open --new\` for a fresh sim`
25333
25838
  );
25334
- process.exit(1);
25839
+ rnxExit(1);
25335
25840
  }
25336
25841
  }
25337
25842
  await bridge.focusSim(target.id);
25338
25843
  saveCurrentSimId(target.id);
25339
25844
  console.log(` using: ${target.id}`);
25340
25845
  } catch (err) {
25846
+ rethrowIfExit(err);
25341
25847
  console.error(` use failed: ${err instanceof Error ? err.message : String(err)}`);
25342
25848
  await printBridgeFailureDiagnostics(bridge, {
25343
25849
  errorsCommand: `rnx get errors 5${simHint}`,
25344
25850
  warningsCommand: `rnx get warnings 5${simHint}`,
25345
25851
  requestsCommand: `rnx get requests 5${simHint}`
25346
25852
  });
25347
- process.exit(1);
25853
+ rnxExit(1);
25348
25854
  }
25349
25855
  } finally {
25350
25856
  bridge.close();
@@ -25382,10 +25888,10 @@ async function runClaimCommand(args, opts = {}) {
25382
25888
  const secs = Math.max(0, Math.round(err.lock.expiresInMs / 1e3));
25383
25889
  console.error(` claim failed: locked by ${err.lock.by} for ${secs}s more`);
25384
25890
  console.error(` use --force to take it, or \`rnx open --new\` for a fresh sim`);
25385
- process.exit(1);
25891
+ rnxExit(1);
25386
25892
  }
25387
25893
  console.error(` claim failed: ${err instanceof Error ? err.message : String(err)}`);
25388
- process.exit(1);
25894
+ rnxExit(1);
25389
25895
  }
25390
25896
  } finally {
25391
25897
  bridge.close();
@@ -25492,7 +25998,7 @@ async function runCloseCommand(args, opts = {}) {
25492
25998
  console.error(
25493
25999
  ` close failed: keep sim ${plan.missingExplicitKeepId} is not connected; not closing other sims`
25494
26000
  );
25495
- process.exit(1);
26001
+ rnxExit(1);
25496
26002
  }
25497
26003
  if (plan.targets.length === 0) {
25498
26004
  console.log(
@@ -25516,11 +26022,12 @@ async function runCloseCommand(args, opts = {}) {
25516
26022
  console.log(summary);
25517
26023
  if (result.remaining.length > 0) {
25518
26024
  console.error(` close failed: still connected: ${result.remaining.join(", ")}`);
25519
- process.exit(1);
26025
+ rnxExit(1);
25520
26026
  }
25521
26027
  } catch (err) {
26028
+ rethrowIfExit(err);
25522
26029
  console.error(` close failed: ${err instanceof Error ? err.message : String(err)}`);
25523
- process.exit(1);
26030
+ rnxExit(1);
25524
26031
  } finally {
25525
26032
  bridge.close();
25526
26033
  }
@@ -25542,7 +26049,7 @@ async function runCloseCommand(args, opts = {}) {
25542
26049
  if (!closed) {
25543
26050
  await terminatePlaywrightHostsForSims(sims, [target.id]);
25544
26051
  console.error(` close failed: ${target.id} is still connected`);
25545
- process.exit(1);
26052
+ rnxExit(1);
25546
26053
  }
25547
26054
  await terminatePlaywrightHostsForSims(sims, [target.id]);
25548
26055
  if (readCurrentSimId() === target.id) {
@@ -25551,13 +26058,14 @@ async function runCloseCommand(args, opts = {}) {
25551
26058
  }
25552
26059
  console.log(` closed: ${target.id}`);
25553
26060
  } catch (err) {
26061
+ rethrowIfExit(err);
25554
26062
  console.error(` close failed: ${err instanceof Error ? err.message : String(err)}`);
25555
26063
  await printBridgeFailureDiagnostics(bridge, {
25556
26064
  errorsCommand: `rnx get errors 5${simHint}`,
25557
26065
  warningsCommand: `rnx get warnings 5${simHint}`,
25558
26066
  requestsCommand: `rnx get requests 5${simHint}`
25559
26067
  });
25560
- process.exit(1);
26068
+ rnxExit(1);
25561
26069
  }
25562
26070
  } finally {
25563
26071
  bridge.close();
@@ -25593,6 +26101,7 @@ var init_control = __esm({
25593
26101
  init_current_sim();
25594
26102
  init_registry2();
25595
26103
  init_open_url2();
26104
+ init_run_rnx();
25596
26105
  init_ws_bridge();
25597
26106
  init_core();
25598
26107
  init_env();
@@ -26577,6 +27086,7 @@ var init_auth = __esm({
26577
27086
  "cli/auth.ts"() {
26578
27087
  "use strict";
26579
27088
  init_shared_session();
27089
+ init_run_rnx();
26580
27090
  GITHUB_TOKEN_PREFIXES = ["ghs_", "ghp_", "gho_", "ghu_", "github_pat_"];
26581
27091
  }
26582
27092
  });
@@ -26609,6 +27119,7 @@ var init_upload = __esm({
26609
27119
  init_auth();
26610
27120
  init_open_url2();
26611
27121
  init_run_registry();
27122
+ init_run_rnx();
26612
27123
  init_ws_bridge();
26613
27124
  REMOTE_DEFAULT_ORIGIN = process.env.SOOTSIM_UPLOAD_ORIGIN || "https://contrast.dev";
26614
27125
  REMOTE_DEFAULT_PUBLIC_PREVIEW_ORIGIN = process.env.SOOTSIM_PREVIEW_ORIGIN || rnxPublicBrand.origin;
@@ -26640,7 +27151,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
26640
27151
 
26641
27152
  `
26642
27153
  );
26643
- process.exit(1);
27154
+ rnxExit(1);
26644
27155
  }
26645
27156
  if (auth.kind === "github" && opts.allowGitHubAuth) return;
26646
27157
  const billingOrigin = await billingOriginFor(auth, opts.originOverride);
@@ -26657,7 +27168,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
26657
27168
 
26658
27169
  `
26659
27170
  );
26660
- process.exit(1);
27171
+ rnxExit(1);
26661
27172
  }
26662
27173
  if (res.status === 401) {
26663
27174
  process.stderr.write(
@@ -26667,7 +27178,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
26667
27178
 
26668
27179
  `
26669
27180
  );
26670
- process.exit(1);
27181
+ rnxExit(1);
26671
27182
  }
26672
27183
  if (!res.ok) {
26673
27184
  const text = await res.text().catch(() => "");
@@ -26678,7 +27189,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
26678
27189
 
26679
27190
  `
26680
27191
  );
26681
- process.exit(1);
27192
+ rnxExit(1);
26682
27193
  }
26683
27194
  const data = await res.json();
26684
27195
  if (data.entitlements?.desktopRecording === true) return;
@@ -26691,7 +27202,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
26691
27202
 
26692
27203
  `
26693
27204
  );
26694
- process.exit(1);
27205
+ rnxExit(1);
26695
27206
  }
26696
27207
  var init_recording_access = __esm({
26697
27208
  "cli/recording-access.ts"() {
@@ -26699,6 +27210,7 @@ var init_recording_access = __esm({
26699
27210
  init_shared_session();
26700
27211
  init_auth();
26701
27212
  init_upload();
27213
+ init_run_rnx();
26702
27214
  }
26703
27215
  });
26704
27216