rnxsim 0.1.369 → 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 (253) 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 +45 -16
  7. package/cli/commands/config.ts +2 -1
  8. package/cli/commands/control.ts +37 -33
  9. package/cli/commands/daemon.ts +22 -21
  10. package/cli/commands/debug.ts +17 -15
  11. package/cli/commands/detox.ts +5 -4
  12. package/cli/commands/device.ts +6 -5
  13. package/cli/commands/electron.ts +6 -5
  14. package/cli/commands/flow.ts +12 -11
  15. package/cli/commands/inspect/find.ts +2 -1
  16. package/cli/commands/inspect/keyboard.ts +2 -1
  17. package/cli/commands/inspect/sleep.ts +2 -1
  18. package/cli/commands/inspect/wait-event.ts +4 -3
  19. package/cli/commands/inspect/wait-idle.ts +2 -1
  20. package/cli/commands/inspect/wait-ready.ts +3 -2
  21. package/cli/commands/inspect/wait-selector.ts +4 -3
  22. package/cli/commands/inspect/wait.ts +2 -1
  23. package/cli/commands/inspect.ts +82 -80
  24. package/cli/commands/install-desktop.ts +5 -4
  25. package/cli/commands/login.ts +3 -2
  26. package/cli/commands/mode.ts +2 -1
  27. package/cli/commands/record.ts +38 -37
  28. package/cli/commands/runtime.ts +9 -8
  29. package/cli/commands/screenshot-layers.ts +4 -3
  30. package/cli/commands/screenshot-mode.ts +2 -1
  31. package/cli/commands/screenshot.ts +8 -7
  32. package/cli/commands/screenshots-capture.ts +2 -1
  33. package/cli/commands/serve.ts +5 -4
  34. package/cli/commands/shell-boolean-mode.ts +2 -1
  35. package/cli/commands/skills.ts +11 -10
  36. package/cli/commands/telemetry.ts +2 -1
  37. package/cli/commands/three-mode.ts +2 -1
  38. package/cli/commands/timeline.ts +4 -3
  39. package/cli/commands/upload.ts +14 -13
  40. package/cli/commands/what-happened.ts +2 -1
  41. package/cli/recording-access.ts +6 -5
  42. package/cli/run-rnx.ts +140 -0
  43. package/dist-cli/bin.js +6 -6
  44. package/dist-cli/chunks/{agent-OUUFWDLF.js → agent-3R4424LW.js} +2 -2
  45. package/dist-cli/chunks/{agent-wrapper-7BE7DR4R.js → agent-wrapper-4PPWZWSY.js} +2 -2
  46. package/dist-cli/chunks/app-fonts-KYXB6CXQ.js +4 -0
  47. package/dist-cli/chunks/{assert-I3CMRNS7.js → assert-7EZOWGYQ.js} +11 -11
  48. package/dist-cli/chunks/auth-L7M36H6C.js +12 -0
  49. package/dist-cli/chunks/{beta-BHSKY4K4.js → beta-FKAF6YWJ.js} +2 -2
  50. package/dist-cli/chunks/{box-3CVWXVTT.js → box-5Y5VBMHV.js} +342 -342
  51. package/dist-cli/chunks/{camera-MNK73TYV.js → camera-XHF2RPFG.js} +2 -2
  52. package/dist-cli/chunks/{chunk-NPVEBXU3.js → chunk-2FOGXVOK.js} +2 -2
  53. package/dist-cli/chunks/{chunk-UDXQCEJU.js → chunk-3BG6UCQY.js} +2 -2
  54. package/dist-cli/chunks/{chunk-V7I4CTAX.js → chunk-3SOPYG7S.js} +2 -2
  55. package/dist-cli/chunks/{chunk-QE5MC4V3.js → chunk-3UXXYJVD.js} +1 -1
  56. package/dist-cli/chunks/{chunk-EKAEEWC2.js → chunk-5BR33NAZ.js} +1 -1
  57. package/dist-cli/chunks/{chunk-FGGESBWD.js → chunk-5RKRVS5A.js} +2 -2
  58. package/dist-cli/chunks/{chunk-MXWME7ET.js → chunk-64JAEJ6N.js} +1 -1
  59. package/dist-cli/chunks/{chunk-AKJYEX54.js → chunk-6A6L3VJR.js} +2 -2
  60. package/dist-cli/chunks/chunk-6GPS7U4X.js +74 -0
  61. package/dist-cli/chunks/{chunk-OROUEG22.js → chunk-6S5LJV2O.js} +2 -2
  62. package/dist-cli/chunks/{chunk-ZW6JXEVX.js → chunk-6W4HIWC7.js} +2 -2
  63. package/dist-cli/chunks/{chunk-6BMM6OCW.js → chunk-72S5FCBY.js} +2 -2
  64. package/dist-cli/chunks/{chunk-TBK5UXW2.js → chunk-7C7TJYZ3.js} +2 -2
  65. package/dist-cli/chunks/{chunk-D6MGELKZ.js → chunk-AALKIAUZ.js} +1 -1
  66. package/dist-cli/chunks/{chunk-WUR4FXWT.js → chunk-ARMXC3C3.js} +25 -25
  67. package/dist-cli/chunks/chunk-AVJBT5LF.js +4 -0
  68. package/dist-cli/chunks/chunk-BMIJZNKD.js +28 -0
  69. package/dist-cli/chunks/{chunk-N5KDDGV6.js → chunk-C7BA5CCM.js} +2 -2
  70. package/dist-cli/chunks/{chunk-F4OTMARL.js → chunk-CMVRTZ5G.js} +2 -2
  71. package/dist-cli/chunks/chunk-D24EOJ4C.js +24 -0
  72. package/dist-cli/chunks/{chunk-A56GQVNF.js → chunk-D2GZASRV.js} +1 -1
  73. package/dist-cli/chunks/{chunk-IYPMULI7.js → chunk-DHYTRCIP.js} +2 -2
  74. package/dist-cli/chunks/{chunk-X3PEDNLV.js → chunk-DMHSD6YJ.js} +2 -2
  75. package/dist-cli/chunks/{chunk-YPBDPVLR.js → chunk-DUXHYPBP.js} +2 -2
  76. package/dist-cli/chunks/{chunk-4SCVGBOX.js → chunk-DXV37CJN.js} +1 -1
  77. package/dist-cli/chunks/{chunk-H2GB2PLY.js → chunk-EOIBLKZO.js} +2 -2
  78. package/dist-cli/chunks/{chunk-UQJY6O72.js → chunk-EQ3OE2AV.js} +1 -1
  79. package/dist-cli/chunks/{chunk-3454VMHD.js → chunk-EWSWOWXK.js} +2 -2
  80. package/dist-cli/chunks/{chunk-FHRG772G.js → chunk-FA75F34Z.js} +1 -1
  81. package/dist-cli/chunks/{chunk-LU3AHE6T.js → chunk-FK4JSTZ3.js} +2 -2
  82. package/dist-cli/chunks/{chunk-AJJCYLBC.js → chunk-GJRLPJQL.js} +2 -2
  83. package/dist-cli/chunks/{chunk-WGE2P25F.js → chunk-GRO74J2X.js} +1 -1
  84. package/dist-cli/chunks/chunk-H5X5FJ63.js +99 -0
  85. package/dist-cli/chunks/chunk-HEKHLQ3B.js +497 -0
  86. package/dist-cli/chunks/chunk-HQQTS2CB.js +30 -0
  87. package/dist-cli/chunks/{chunk-DKSZZABN.js → chunk-I52NT6VG.js} +1 -1
  88. package/dist-cli/chunks/{chunk-A72MIIJI.js → chunk-IDLFVRPN.js} +1 -1
  89. package/dist-cli/chunks/{chunk-6F3WOWFC.js → chunk-JZLDHPB7.js} +2 -2
  90. package/dist-cli/chunks/{chunk-ZNNE5MAV.js → chunk-LIMWG54N.js} +1 -1
  91. package/dist-cli/chunks/{chunk-TTUZ5MCK.js → chunk-LUOHRBJG.js} +1 -1
  92. package/dist-cli/chunks/{chunk-B5NW4TT3.js → chunk-LXPHL6FO.js} +2 -2
  93. package/dist-cli/chunks/{chunk-TAC4CEIX.js → chunk-MDCY532E.js} +2 -2
  94. package/dist-cli/chunks/{chunk-45X3D6CI.js → chunk-NJMU5BN6.js} +1 -1
  95. package/dist-cli/chunks/{chunk-2APXX4RN.js → chunk-NR2V2ONN.js} +2 -2
  96. package/dist-cli/chunks/{chunk-JH5KE2OI.js → chunk-NTC46LSA.js} +2 -2
  97. package/dist-cli/chunks/{chunk-RV76U3EI.js → chunk-O6QLKSAM.js} +10 -10
  98. package/dist-cli/chunks/{chunk-ZEF57HQO.js → chunk-OJZHECGH.js} +1 -1
  99. package/dist-cli/chunks/chunk-OTFTMGAL.js +7 -0
  100. package/dist-cli/chunks/{chunk-RYGQ6LZN.js → chunk-PAUEZO6F.js} +2 -2
  101. package/dist-cli/chunks/{chunk-CCI3DZKE.js → chunk-PIZXOXBL.js} +2 -2
  102. package/dist-cli/chunks/{chunk-JLOOLA47.js → chunk-PNOENVMJ.js} +1 -1
  103. package/dist-cli/chunks/{chunk-YLNSLMQM.js → chunk-Q4MRJ6PO.js} +2 -2
  104. package/dist-cli/chunks/{chunk-5QFJFASW.js → chunk-RRX52O37.js} +1 -1
  105. package/dist-cli/chunks/{chunk-FBMNYSSW.js → chunk-U63T6LIQ.js} +1 -1
  106. package/dist-cli/chunks/{chunk-2PVVIPQS.js → chunk-UFVAAWGZ.js} +1 -1
  107. package/dist-cli/chunks/{chunk-CZ2HCNRK.js → chunk-VVQCZ42C.js} +1 -1
  108. package/dist-cli/chunks/{chunk-USHV3QFZ.js → chunk-WFQHT4QD.js} +2 -2
  109. package/dist-cli/chunks/{chunk-DCPDMF27.js → chunk-WPV4H5S4.js} +2 -2
  110. package/dist-cli/chunks/{chunk-SSBZA5VZ.js → chunk-X6WQ4YWE.js} +1 -1
  111. package/dist-cli/chunks/{chunk-VGJLCFSC.js → chunk-YIZGNT7A.js} +1 -1
  112. package/dist-cli/chunks/{chunk-JXARZBWS.js → chunk-Z2VBSNFI.js} +1 -1
  113. package/dist-cli/chunks/{chunk-4G4VCT2M.js → chunk-Z3DENGXW.js} +2 -2
  114. package/dist-cli/chunks/{cleanup-H4XFRMZV.js → cleanup-MXMMJ7JW.js} +2 -2
  115. package/dist-cli/chunks/cli-version-MLS55UTY.js +4 -0
  116. package/dist-cli/chunks/{compat-NKGYERLN.js → compat-E6KE5KDI.js} +2 -2
  117. package/dist-cli/chunks/config-QSLLVZDS.js +13 -0
  118. package/dist-cli/chunks/{connect-WWWAVVCF.js → connect-QE4VU6GB.js} +2 -2
  119. package/dist-cli/chunks/control-XD5F6K5T.js +4 -0
  120. package/dist-cli/chunks/daemon-UN5SE2JO.js +4 -0
  121. package/dist-cli/chunks/{debug-RO6GLDIM.js → debug-5FG3MBJS.js} +20 -20
  122. package/dist-cli/chunks/desktop-5EZX7NX5.js +31 -0
  123. package/dist-cli/chunks/detox-WJGQP5TM.js +52 -0
  124. package/dist-cli/chunks/device-D7LKCAMS.js +18 -0
  125. package/dist-cli/chunks/{diagnose-HDRTUPDO.js → diagnose-A3W6ZTGA.js} +2 -2
  126. package/dist-cli/chunks/{disk-cleanup-QP2NYN43.js → disk-cleanup-BDRHX5ZG.js} +2 -2
  127. package/dist-cli/chunks/{do-chain-6LP6SV5J.js → do-chain-RUJNRPPF.js} +2 -2
  128. package/dist-cli/chunks/drivers-3NJ5RL6X.js +4 -0
  129. package/dist-cli/chunks/{env-4XD5D2G6.js → env-U67SQVTV.js} +2 -2
  130. package/dist-cli/chunks/{film-I5SIXLS5.js → film-XC6UAQ3V.js} +3 -3
  131. package/dist-cli/chunks/flow-FHZZD3P6.js +4 -0
  132. package/dist-cli/chunks/help-BYYDUSXF.js +4 -0
  133. package/dist-cli/chunks/{hidden-runtime-alias-LJV2S4M2.js → hidden-runtime-alias-7S2TNZXG.js} +2 -2
  134. package/dist-cli/chunks/{home-paths-RFI2QRC3.js → home-paths-LMO5LB4F.js} +2 -2
  135. package/dist-cli/chunks/inspect-RQCTWDCC.js +4 -0
  136. package/dist-cli/chunks/install-desktop-GOWXCQUE.js +4 -0
  137. package/dist-cli/chunks/login-JIU42S4C.js +26 -0
  138. package/dist-cli/chunks/{logout-DKXZZ6HU.js → logout-JTAWQXZO.js} +2 -2
  139. package/dist-cli/chunks/{maestro-WKGVVWRA.js → maestro-TYBQYOGB.js} +3 -3
  140. package/dist-cli/chunks/{maestro-generate-KCK6RK2C.js → maestro-generate-YLAGWVKE.js} +3 -3
  141. package/dist-cli/chunks/mode-DV24ZRZ6.js +26 -0
  142. package/dist-cli/chunks/{optional-demo-registry-EUSKBIPP.js → optional-demo-registry-JZH66VIM.js} +2 -2
  143. package/dist-cli/chunks/{perf-IMZMA5MT.js → perf-LXXJ4EAX.js} +2 -2
  144. package/dist-cli/chunks/{permissions-SLWXTLH6.js → permissions-KAOVZUPW.js} +2 -2
  145. package/dist-cli/chunks/{platform-HQ735LAE.js → platform-KW35446W.js} +3 -3
  146. package/dist-cli/chunks/privacy-MIFE72CG.js +4 -0
  147. package/dist-cli/chunks/record-EK3ETFHZ.js +72 -0
  148. package/dist-cli/chunks/report-issue-NW5PCAZF.js +29 -0
  149. package/dist-cli/chunks/reset-RZ4O5AFJ.js +4 -0
  150. package/dist-cli/chunks/resolve-target-7R5BNYMM.js +4 -0
  151. package/dist-cli/chunks/runtime-MZHLSRS6.js +4 -0
  152. package/dist-cli/chunks/{screenshot-command-HAJB5FHK.js → screenshot-command-TQSPTFT2.js} +11 -11
  153. package/dist-cli/chunks/screenshot-layers-IZP3L3AQ.js +20 -0
  154. package/dist-cli/chunks/screenshots-capture-K7LJOVAE.js +42 -0
  155. package/dist-cli/chunks/{serve-TM46TKFW.js → serve-MMX4WXXG.js} +18 -18
  156. package/dist-cli/chunks/setup-YFP3KEQZ.js +4 -0
  157. package/dist-cli/chunks/{sim-client-LQUZSO45.js → sim-client-KLAYIFOC.js} +2 -2
  158. package/dist-cli/chunks/skills-N4D3POIS.js +50 -0
  159. package/dist-cli/chunks/{state-RUVM4Z4S.js → state-ES6TFQZF.js} +2 -2
  160. package/dist-cli/chunks/{storage-GQ33UTYN.js → storage-52DR5V2C.js} +2 -2
  161. package/dist-cli/chunks/store-HOL45WCI.js +4 -0
  162. package/dist-cli/chunks/telemetry-BV6OTYPF.js +4 -0
  163. package/dist-cli/chunks/timeline-NRVNB5JR.js +24 -0
  164. package/dist-cli/chunks/{upgrade-AZDZLUIT.js → upgrade-LNED5YQ2.js} +2 -2
  165. package/dist-cli/chunks/upload-RXKHFIBU.js +4 -0
  166. package/dist-cli/chunks/{version-N3ALB75G.js → version-VEF2DYGG.js} +2 -2
  167. package/dist-cli/chunks/{web-XPHFZATA.js → web-CGDE6S73.js} +2 -2
  168. package/dist-cli/chunks/welcome-FT2AMUWW.js +5 -0
  169. package/dist-cli/chunks/what-happened-FSIDWL32.js +25 -0
  170. package/dist-cli/chunks/{ws-bridge-RUXOYOU6.js → ws-bridge-QXFQLRE7.js} +2 -2
  171. package/dist-lib/agent-daemon-client.cjs +1 -1
  172. package/dist-lib/agent-events.cjs +1 -1
  173. package/dist-lib/agent-identity.cjs +1 -1
  174. package/dist-lib/agent-sessions.cjs +1 -1
  175. package/dist-lib/attached-projects.cjs +1 -1
  176. package/dist-lib/auth/shared-session.cjs +1 -1
  177. package/dist-lib/backend-origin.cjs +1 -1
  178. package/dist-lib/beta.cjs +1 -1
  179. package/dist-lib/beta.mjs +1 -1
  180. package/dist-lib/bridge-constants.cjs +1 -1
  181. package/dist-lib/bridge-contract-input.cjs +1 -1
  182. package/dist-lib/bridge-contract-input.mjs +1 -1
  183. package/dist-lib/bridge-contract.cjs +1 -1
  184. package/dist-lib/bridge-contract.mjs +1 -1
  185. package/dist-lib/cli-constants.cjs +1 -1
  186. package/dist-lib/config.cjs +1 -1
  187. package/dist-lib/detox/index.cjs +1 -1
  188. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  189. package/dist-lib/home-paths.cjs +1 -1
  190. package/dist-lib/host/bridge-host.cjs +1 -1
  191. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  192. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  193. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  194. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  195. package/dist-lib/host/websocket-proxy.cjs +1 -1
  196. package/dist-lib/index.cjs +1 -1
  197. package/dist-lib/jump-to-source-babel.cjs +1 -1
  198. package/dist-lib/menu.cjs +1 -1
  199. package/dist-lib/menu.mjs +1 -1
  200. package/dist-lib/metro-production-bundle.cjs +1 -1
  201. package/dist-lib/metro-production-bundle.mjs +1 -1
  202. package/dist-lib/metro.cjs +1 -1
  203. package/dist-lib/profiles.cjs +1 -1
  204. package/dist-lib/public-brand.cjs +1 -1
  205. package/dist-lib/react-native-host-modules.cjs +2 -1
  206. package/dist-lib/react-native-host-modules.mjs +2 -1
  207. package/dist-lib/render-mode.cjs +1 -1
  208. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  209. package/dist-lib/sdk.cjs +1 -1
  210. package/dist-lib/sdk.mjs +1 -1
  211. package/dist-lib/skills.cjs +79 -47
  212. package/dist-lib/vite.cjs +1 -1
  213. package/package.json +1 -1
  214. package/src/react-native-host-modules.ts +1 -0
  215. package/dist-cli/chunks/app-fonts-66V7TL26.js +0 -4
  216. package/dist-cli/chunks/auth-3FMWUVJH.js +0 -12
  217. package/dist-cli/chunks/chunk-3NLB5LCN.js +0 -28
  218. package/dist-cli/chunks/chunk-5RWUFIZW.js +0 -24
  219. package/dist-cli/chunks/chunk-COXCR6UU.js +0 -7
  220. package/dist-cli/chunks/chunk-ROISJKH3.js +0 -99
  221. package/dist-cli/chunks/chunk-SUHAD6N2.js +0 -30
  222. package/dist-cli/chunks/chunk-TIB3CTRX.js +0 -497
  223. package/dist-cli/chunks/chunk-YFZLDFZK.js +0 -74
  224. package/dist-cli/chunks/cli-version-MJWLDXBW.js +0 -4
  225. package/dist-cli/chunks/config-WK7467KI.js +0 -13
  226. package/dist-cli/chunks/control-ESI7IZNN.js +0 -4
  227. package/dist-cli/chunks/daemon-UCLO27YP.js +0 -4
  228. package/dist-cli/chunks/desktop-FF34Z5X4.js +0 -31
  229. package/dist-cli/chunks/detox-Q3CWY5UX.js +0 -52
  230. package/dist-cli/chunks/device-WN4ZWLES.js +0 -18
  231. package/dist-cli/chunks/drivers-OR2JPAXD.js +0 -4
  232. package/dist-cli/chunks/flow-4GWW5DYT.js +0 -4
  233. package/dist-cli/chunks/help-MIIWOT3C.js +0 -4
  234. package/dist-cli/chunks/inspect-3ZGNJENJ.js +0 -4
  235. package/dist-cli/chunks/install-desktop-BYOJVTLS.js +0 -4
  236. package/dist-cli/chunks/login-GNIFSAFE.js +0 -26
  237. package/dist-cli/chunks/mode-YVMX7OJY.js +0 -26
  238. package/dist-cli/chunks/privacy-EDC7PF7G.js +0 -4
  239. package/dist-cli/chunks/record-N4KTTVDI.js +0 -72
  240. package/dist-cli/chunks/report-issue-PP752HAD.js +0 -29
  241. package/dist-cli/chunks/reset-DRMKGVP4.js +0 -4
  242. package/dist-cli/chunks/resolve-target-7WWI32R3.js +0 -4
  243. package/dist-cli/chunks/runtime-EKJV2ZVI.js +0 -4
  244. package/dist-cli/chunks/screenshot-layers-GOCJVM2G.js +0 -20
  245. package/dist-cli/chunks/screenshots-capture-YYJLYA3V.js +0 -42
  246. package/dist-cli/chunks/setup-FVPVIYE4.js +0 -4
  247. package/dist-cli/chunks/skills-V5TE57FN.js +0 -50
  248. package/dist-cli/chunks/store-IKNBDDKM.js +0 -4
  249. package/dist-cli/chunks/telemetry-2ZVU6WLK.js +0 -4
  250. package/dist-cli/chunks/timeline-LP7DMJYT.js +0 -24
  251. package/dist-cli/chunks/upload-DFQK2Q7X.js +0 -4
  252. package/dist-cli/chunks/welcome-2NFYLWLJ.js +0 -5
  253. package/dist-cli/chunks/what-happened-EJ5PHKT7.js +0 -25
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.369 | (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;
@@ -24182,6 +24182,30 @@ var init_open_url2 = __esm({
24182
24182
  }
24183
24183
  });
24184
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
+
24185
24209
  // cli/commands/inspect/env.ts
24186
24210
  function isAgentEnv() {
24187
24211
  if (process.env.SOOTSIM_AGENT === "0") return false;
@@ -24285,7 +24309,7 @@ async function runRuntime(args, opts = {}) {
24285
24309
  default:
24286
24310
  console.error(` unknown runtime subcommand: ${sub}`);
24287
24311
  printHelp();
24288
- process.exit(1);
24312
+ rnxExit(1);
24289
24313
  }
24290
24314
  }
24291
24315
  function printHelp() {
@@ -24342,7 +24366,7 @@ async function runtimeInstall(args, opts) {
24342
24366
  return result;
24343
24367
  } catch (err) {
24344
24368
  console.error(` ${describeError(err)}`);
24345
- process.exit(1);
24369
+ rnxExit(1);
24346
24370
  }
24347
24371
  }
24348
24372
  async function activateVersion(version) {
@@ -24433,14 +24457,14 @@ async function runtimeUse(args) {
24433
24457
  const version = args[0];
24434
24458
  if (!version) {
24435
24459
  console.error(` usage: rnx runtime use <version>`);
24436
- process.exit(1);
24460
+ rnxExit(1);
24437
24461
  }
24438
24462
  const installed2 = sootsimRuntime.listInstalled();
24439
24463
  if (!installed2.includes(version)) {
24440
24464
  console.error(` version ${version} is not installed`);
24441
24465
  console.error(` installed: ${installed2.join(", ") || "(none)"}`);
24442
24466
  console.error(` run \`rnx runtime install ${version}\` first`);
24443
- process.exit(1);
24467
+ rnxExit(1);
24444
24468
  }
24445
24469
  await activateVersion(version);
24446
24470
  }
@@ -24448,7 +24472,7 @@ async function runtimeRemove(args) {
24448
24472
  const version = args[0];
24449
24473
  if (!version) {
24450
24474
  console.error(` usage: rnx runtime remove <version>`);
24451
- process.exit(1);
24475
+ rnxExit(1);
24452
24476
  }
24453
24477
  const active = readActiveRuntime();
24454
24478
  if (active === version) {
@@ -24456,11 +24480,11 @@ async function runtimeRemove(args) {
24456
24480
  console.error(
24457
24481
  ` switch with \`rnx runtime use <other>\` first, or install another version`
24458
24482
  );
24459
- process.exit(1);
24483
+ rnxExit(1);
24460
24484
  }
24461
24485
  if (readLiveRuntimeVersions().includes(version)) {
24462
24486
  console.error(` cannot remove runtime ${version} while a project is using it`);
24463
- process.exit(1);
24487
+ rnxExit(1);
24464
24488
  }
24465
24489
  const dir = runtimeDir(version);
24466
24490
  if (!import_fs8.default.existsSync(dir)) {
@@ -24481,7 +24505,7 @@ async function runtimeWhich() {
24481
24505
  async function runtimeNotes(args) {
24482
24506
  if (args.length > 0) {
24483
24507
  console.error(` usage: rnx runtime notes`);
24484
- process.exit(1);
24508
+ rnxExit(1);
24485
24509
  }
24486
24510
  const { config } = await resolveSootSimAppConfig();
24487
24511
  const version = config?.runtimeVersion ?? readActiveRuntime();
@@ -24532,6 +24556,7 @@ var init_runtime = __esm({
24532
24556
  init_home_paths();
24533
24557
  init_runtime_delivery();
24534
24558
  init_app_config();
24559
+ init_run_rnx();
24535
24560
  init_runtime_notes();
24536
24561
  init_ws_bridge();
24537
24562
  }
@@ -24823,18 +24848,18 @@ function parseOpenRuntimeConfig(args) {
24823
24848
  const raw = args[i + 1];
24824
24849
  if (!raw) {
24825
24850
  console.error(" rnx open: --replace expects <module>=<file>");
24826
- process.exit(1);
24851
+ rnxExit(1);
24827
24852
  }
24828
24853
  const eqIndex = raw.indexOf("=");
24829
24854
  if (eqIndex <= 0 || eqIndex === raw.length - 1) {
24830
24855
  console.error(" rnx open: --replace expects <module>=<file>");
24831
- process.exit(1);
24856
+ rnxExit(1);
24832
24857
  }
24833
24858
  const moduleName = raw.slice(0, eqIndex).trim();
24834
24859
  const filePath = normalizeReplacementPath(raw.slice(eqIndex + 1).trim());
24835
24860
  if (!import_node_fs13.default.existsSync(filePath)) {
24836
24861
  console.error(` rnx open: replacement file not found: ${filePath}`);
24837
- process.exit(1);
24862
+ rnxExit(1);
24838
24863
  }
24839
24864
  modules[moduleName] = { file: filePath };
24840
24865
  i++;
@@ -24845,7 +24870,7 @@ function parseOpenRuntimeConfig(args) {
24845
24870
  const eqIndex = raw ? raw.indexOf("=") : -1;
24846
24871
  if (!raw || eqIndex <= 0 || eqIndex === raw.length - 1) {
24847
24872
  console.error(" rnx open: --remap expects <host:port>=<host:port>");
24848
- process.exit(1);
24873
+ rnxExit(1);
24849
24874
  }
24850
24875
  remap[raw.slice(0, eqIndex).trim()] = raw.slice(eqIndex + 1).trim();
24851
24876
  i++;
@@ -25438,7 +25463,7 @@ async function runLinkCommand(args, opts = {}) {
25438
25463
  if (parsed.positional.length !== 1) {
25439
25464
  console.error(" rnx open: expected exactly one <url-or-route>");
25440
25465
  console.error(" examples: rnx open /settings | rnx open myapp://settings");
25441
- process.exit(1);
25466
+ rnxExit(1);
25442
25467
  }
25443
25468
  const bridge = createBridgeFromParsed(parsed);
25444
25469
  const simHint = parsed.simId ? ` --sim ${parsed.simId}` : "";
@@ -25452,7 +25477,7 @@ async function runLinkCommand(args, opts = {}) {
25452
25477
  warningsCommand: `rnx get warnings 5${simHint}`,
25453
25478
  requestsCommand: `rnx get requests 5${simHint}`
25454
25479
  });
25455
- process.exit(1);
25480
+ rnxExit(1);
25456
25481
  } finally {
25457
25482
  bridge.close();
25458
25483
  }
@@ -25490,11 +25515,11 @@ async function runOpenCommand(args, opts = {}) {
25490
25515
  console.error(
25491
25516
  ` rnx open: --cdp-port must be a positive port number, got "${cdpPortArg}"`
25492
25517
  );
25493
- process.exit(1);
25518
+ rnxExit(1);
25494
25519
  }
25495
25520
  if (requestedProfileId && ephemeralProfile) {
25496
25521
  console.error(" rnx open: --profile cannot be combined with --ephemeral");
25497
- process.exit(1);
25522
+ rnxExit(1);
25498
25523
  }
25499
25524
  const profileId = requestedProfileId ? ensureProfile(requestedProfileId).id : void 0;
25500
25525
  const openInNewSim = args.includes("--new") || !!profileId || ephemeralProfile;
@@ -25503,7 +25528,7 @@ async function runOpenCommand(args, opts = {}) {
25503
25528
  console.error(
25504
25529
  " rnx open: --new, --profile, and --ephemeral cannot be combined with --sim"
25505
25530
  );
25506
- process.exit(1);
25531
+ rnxExit(1);
25507
25532
  }
25508
25533
  const target = parsed.positional[0] || "";
25509
25534
  if (isAppDeepLinkTarget(target)) {
@@ -25511,7 +25536,7 @@ async function runOpenCommand(args, opts = {}) {
25511
25536
  console.error(
25512
25537
  " rnx open: deep links target the current app; remove --new, --profile, or --ephemeral"
25513
25538
  );
25514
- process.exit(1);
25539
+ rnxExit(1);
25515
25540
  }
25516
25541
  await runLinkCommand(args, opts);
25517
25542
  return;
@@ -25535,7 +25560,7 @@ async function runOpenCommand(args, opts = {}) {
25535
25560
  ` could not launch a browser: ${err instanceof Error ? err.message : String(err)}`
25536
25561
  );
25537
25562
  console.error(` open it yourself: ${target}`);
25538
- process.exit(1);
25563
+ rnxExit(1);
25539
25564
  }
25540
25565
  console.log(
25541
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>`."
@@ -25565,33 +25590,33 @@ async function runOpenCommand(args, opts = {}) {
25565
25590
  const requestedDriverId = args.find((_, i) => args[i - 1] === "--driver") || "";
25566
25591
  if (requestedDriverId && !isDriverId(requestedDriverId)) {
25567
25592
  console.error(` unknown driver "${requestedDriverId}" \u2014 run \`rnx list --drivers\``);
25568
- process.exit(1);
25593
+ rnxExit(1);
25569
25594
  }
25570
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";
25571
25596
  const driverHeadless = resolveDriverHeadless(args, driverId);
25572
25597
  if (cdpPort && driverId !== "playwright") {
25573
25598
  console.error(" rnx open: --cdp-port is only honored by the playwright driver");
25574
- process.exit(1);
25599
+ rnxExit(1);
25575
25600
  }
25576
25601
  const hotFlag = args.includes("--hot");
25577
25602
  const noHmrFlag = args.includes("--no-hmr");
25578
25603
  if (hotFlag && noHmrFlag) {
25579
25604
  console.error(" rnx open: --hot and --no-hmr cannot be combined");
25580
- process.exit(1);
25605
+ rnxExit(1);
25581
25606
  }
25582
25607
  const hotMode = hotFlag ? true : noHmrFlag ? false : driverId !== "playwright";
25583
25608
  const deviceArg = args.find((_, i) => args[i - 1] === "--device");
25584
25609
  if (deviceArg && !(deviceArg in import_settings.devices)) {
25585
25610
  console.error(` rnx open: unknown device "${deviceArg}"`);
25586
25611
  console.error(` known devices: ${(0, import_settings.listSelectableDeviceModels)().join(", ")}`);
25587
- process.exit(1);
25612
+ rnxExit(1);
25588
25613
  }
25589
25614
  const deviceSpec = deviceArg ? import_settings.devices[deviceArg] : void 0;
25590
25615
  const viewportArg = args.find((_, i) => args[i - 1] === "--viewport");
25591
25616
  const viewportMatch = viewportArg ? /^(\d+)x(\d+)$/.exec(viewportArg) : null;
25592
25617
  if (viewportArg && !viewportMatch) {
25593
25618
  console.error(` rnx open: --viewport must be <width>x<height>, got "${viewportArg}"`);
25594
- process.exit(1);
25619
+ rnxExit(1);
25595
25620
  }
25596
25621
  const explicitViewport = viewportMatch ? { width: Number(viewportMatch[1]), height: Number(viewportMatch[2]) } : void 0;
25597
25622
  const buildShellUrlOpts = {
@@ -25684,7 +25709,7 @@ async function runOpenCommand(args, opts = {}) {
25684
25709
  warningsCommand: `rnx get warnings 5${simHint}`,
25685
25710
  requestsCommand: `rnx get requests 5${simHint}`
25686
25711
  });
25687
- process.exit(1);
25712
+ rnxExit(1);
25688
25713
  }
25689
25714
  if (!fallBackToNewSim && targetSim) {
25690
25715
  await sleep2(1500);
@@ -25695,7 +25720,7 @@ async function runOpenCommand(args, opts = {}) {
25695
25720
  );
25696
25721
  if (!ready) {
25697
25722
  console.error(" timed out waiting for current sim to load target");
25698
- process.exit(1);
25723
+ rnxExit(1);
25699
25724
  }
25700
25725
  ready.bridge.close();
25701
25726
  saveCurrentSimId(targetSim.id);
@@ -25721,13 +25746,13 @@ async function runOpenCommand(args, opts = {}) {
25721
25746
  console.error(
25722
25747
  " could not resolve a stable owning process; refusing unsupervised sim host"
25723
25748
  );
25724
- process.exit(1);
25749
+ rnxExit(1);
25725
25750
  }
25726
25751
  const simMatchesToken = (sim) => sim.url?.includes(`inspectOpen=${token}`) ?? false;
25727
25752
  const driver = getDriver(driverId);
25728
25753
  if (!driver) {
25729
25754
  console.error(` unknown driver "${driverId}" \u2014 run \`rnx list --drivers\``);
25730
- process.exit(1);
25755
+ rnxExit(1);
25731
25756
  }
25732
25757
  const connectWait = resolveDriverConnectWaitOptions();
25733
25758
  const result = await driver.launch({
@@ -25747,7 +25772,7 @@ async function runOpenCommand(args, opts = {}) {
25747
25772
  });
25748
25773
  if (!result.launched) {
25749
25774
  console.error(` ${driver.name} driver: ${result.message}`);
25750
- process.exit(1);
25775
+ rnxExit(1);
25751
25776
  }
25752
25777
  const outcome = await waitForSimMatchOrHostExit(
25753
25778
  parsed.wsPort,
@@ -25759,7 +25784,7 @@ async function runOpenCommand(args, opts = {}) {
25759
25784
  if (outcome.kind === "host-exit") {
25760
25785
  printDriverDiagnosticLogTail(result);
25761
25786
  console.error(` ${driver.name} host crashed \u2014 sim is no longer attached`);
25762
- process.exit(1);
25787
+ rnxExit(1);
25763
25788
  }
25764
25789
  if (outcome.kind === "timeout") {
25765
25790
  if (result.pid) {
@@ -25773,7 +25798,7 @@ async function runOpenCommand(args, opts = {}) {
25773
25798
  console.error(
25774
25799
  ` timed out after ${connectWait.timeoutMs}ms waiting for opened sim to connect`
25775
25800
  );
25776
- process.exit(1);
25801
+ rnxExit(1);
25777
25802
  }
25778
25803
  const match = outcome.sim;
25779
25804
  saveCurrentSimId(match.id);
@@ -25802,7 +25827,7 @@ async function runUseLikeCommand(args, opts = {}) {
25802
25827
  ` refused: ${target.id} is locked by the active user (${secs}s) \u2014 that's a live human tab`
25803
25828
  );
25804
25829
  console.error(` run \`rnx open --new\` for a fresh investigation sim`);
25805
- process.exit(1);
25830
+ rnxExit(1);
25806
25831
  }
25807
25832
  if (!force) {
25808
25833
  console.error(
@@ -25811,20 +25836,21 @@ async function runUseLikeCommand(args, opts = {}) {
25811
25836
  console.error(
25812
25837
  ` \`sootsim use ${target.id} --force\` to take it, or \`rnx open --new\` for a fresh sim`
25813
25838
  );
25814
- process.exit(1);
25839
+ rnxExit(1);
25815
25840
  }
25816
25841
  }
25817
25842
  await bridge.focusSim(target.id);
25818
25843
  saveCurrentSimId(target.id);
25819
25844
  console.log(` using: ${target.id}`);
25820
25845
  } catch (err) {
25846
+ rethrowIfExit(err);
25821
25847
  console.error(` use failed: ${err instanceof Error ? err.message : String(err)}`);
25822
25848
  await printBridgeFailureDiagnostics(bridge, {
25823
25849
  errorsCommand: `rnx get errors 5${simHint}`,
25824
25850
  warningsCommand: `rnx get warnings 5${simHint}`,
25825
25851
  requestsCommand: `rnx get requests 5${simHint}`
25826
25852
  });
25827
- process.exit(1);
25853
+ rnxExit(1);
25828
25854
  }
25829
25855
  } finally {
25830
25856
  bridge.close();
@@ -25862,10 +25888,10 @@ async function runClaimCommand(args, opts = {}) {
25862
25888
  const secs = Math.max(0, Math.round(err.lock.expiresInMs / 1e3));
25863
25889
  console.error(` claim failed: locked by ${err.lock.by} for ${secs}s more`);
25864
25890
  console.error(` use --force to take it, or \`rnx open --new\` for a fresh sim`);
25865
- process.exit(1);
25891
+ rnxExit(1);
25866
25892
  }
25867
25893
  console.error(` claim failed: ${err instanceof Error ? err.message : String(err)}`);
25868
- process.exit(1);
25894
+ rnxExit(1);
25869
25895
  }
25870
25896
  } finally {
25871
25897
  bridge.close();
@@ -25972,7 +25998,7 @@ async function runCloseCommand(args, opts = {}) {
25972
25998
  console.error(
25973
25999
  ` close failed: keep sim ${plan.missingExplicitKeepId} is not connected; not closing other sims`
25974
26000
  );
25975
- process.exit(1);
26001
+ rnxExit(1);
25976
26002
  }
25977
26003
  if (plan.targets.length === 0) {
25978
26004
  console.log(
@@ -25996,11 +26022,12 @@ async function runCloseCommand(args, opts = {}) {
25996
26022
  console.log(summary);
25997
26023
  if (result.remaining.length > 0) {
25998
26024
  console.error(` close failed: still connected: ${result.remaining.join(", ")}`);
25999
- process.exit(1);
26025
+ rnxExit(1);
26000
26026
  }
26001
26027
  } catch (err) {
26028
+ rethrowIfExit(err);
26002
26029
  console.error(` close failed: ${err instanceof Error ? err.message : String(err)}`);
26003
- process.exit(1);
26030
+ rnxExit(1);
26004
26031
  } finally {
26005
26032
  bridge.close();
26006
26033
  }
@@ -26022,7 +26049,7 @@ async function runCloseCommand(args, opts = {}) {
26022
26049
  if (!closed) {
26023
26050
  await terminatePlaywrightHostsForSims(sims, [target.id]);
26024
26051
  console.error(` close failed: ${target.id} is still connected`);
26025
- process.exit(1);
26052
+ rnxExit(1);
26026
26053
  }
26027
26054
  await terminatePlaywrightHostsForSims(sims, [target.id]);
26028
26055
  if (readCurrentSimId() === target.id) {
@@ -26031,13 +26058,14 @@ async function runCloseCommand(args, opts = {}) {
26031
26058
  }
26032
26059
  console.log(` closed: ${target.id}`);
26033
26060
  } catch (err) {
26061
+ rethrowIfExit(err);
26034
26062
  console.error(` close failed: ${err instanceof Error ? err.message : String(err)}`);
26035
26063
  await printBridgeFailureDiagnostics(bridge, {
26036
26064
  errorsCommand: `rnx get errors 5${simHint}`,
26037
26065
  warningsCommand: `rnx get warnings 5${simHint}`,
26038
26066
  requestsCommand: `rnx get requests 5${simHint}`
26039
26067
  });
26040
- process.exit(1);
26068
+ rnxExit(1);
26041
26069
  }
26042
26070
  } finally {
26043
26071
  bridge.close();
@@ -26073,6 +26101,7 @@ var init_control = __esm({
26073
26101
  init_current_sim();
26074
26102
  init_registry2();
26075
26103
  init_open_url2();
26104
+ init_run_rnx();
26076
26105
  init_ws_bridge();
26077
26106
  init_core();
26078
26107
  init_env();
@@ -27057,6 +27086,7 @@ var init_auth = __esm({
27057
27086
  "cli/auth.ts"() {
27058
27087
  "use strict";
27059
27088
  init_shared_session();
27089
+ init_run_rnx();
27060
27090
  GITHUB_TOKEN_PREFIXES = ["ghs_", "ghp_", "gho_", "ghu_", "github_pat_"];
27061
27091
  }
27062
27092
  });
@@ -27089,6 +27119,7 @@ var init_upload = __esm({
27089
27119
  init_auth();
27090
27120
  init_open_url2();
27091
27121
  init_run_registry();
27122
+ init_run_rnx();
27092
27123
  init_ws_bridge();
27093
27124
  REMOTE_DEFAULT_ORIGIN = process.env.SOOTSIM_UPLOAD_ORIGIN || "https://contrast.dev";
27094
27125
  REMOTE_DEFAULT_PUBLIC_PREVIEW_ORIGIN = process.env.SOOTSIM_PREVIEW_ORIGIN || rnxPublicBrand.origin;
@@ -27120,7 +27151,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
27120
27151
 
27121
27152
  `
27122
27153
  );
27123
- process.exit(1);
27154
+ rnxExit(1);
27124
27155
  }
27125
27156
  if (auth.kind === "github" && opts.allowGitHubAuth) return;
27126
27157
  const billingOrigin = await billingOriginFor(auth, opts.originOverride);
@@ -27137,7 +27168,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
27137
27168
 
27138
27169
  `
27139
27170
  );
27140
- process.exit(1);
27171
+ rnxExit(1);
27141
27172
  }
27142
27173
  if (res.status === 401) {
27143
27174
  process.stderr.write(
@@ -27147,7 +27178,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
27147
27178
 
27148
27179
  `
27149
27180
  );
27150
- process.exit(1);
27181
+ rnxExit(1);
27151
27182
  }
27152
27183
  if (!res.ok) {
27153
27184
  const text = await res.text().catch(() => "");
@@ -27158,7 +27189,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
27158
27189
 
27159
27190
  `
27160
27191
  );
27161
- process.exit(1);
27192
+ rnxExit(1);
27162
27193
  }
27163
27194
  const data = await res.json();
27164
27195
  if (data.entitlements?.desktopRecording === true) return;
@@ -27171,7 +27202,7 @@ async function ensureCliRecordingEntitlement(commandLabel, opts = {}) {
27171
27202
 
27172
27203
  `
27173
27204
  );
27174
- process.exit(1);
27205
+ rnxExit(1);
27175
27206
  }
27176
27207
  var init_recording_access = __esm({
27177
27208
  "cli/recording-access.ts"() {
@@ -27179,6 +27210,7 @@ var init_recording_access = __esm({
27179
27210
  init_shared_session();
27180
27211
  init_auth();
27181
27212
  init_upload();
27213
+ init_run_rnx();
27182
27214
  }
27183
27215
  });
27184
27216
 
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.369 | (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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rnxsim",
3
- "version": "0.1.369",
3
+ "version": "0.1.370",
4
4
  "description": "rnx CLI, Vite and Metro plugins, and agent skills for driving React Native apps in the browser.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -11,6 +11,7 @@ export const REACT_NATIVE_PASSTHROUGH_SPECIFIERS: readonly string[] = [
11
11
  'react-native/Libraries/StyleSheet',
12
12
  'react-native/Libraries/Utilities/differ',
13
13
  'react-native/Libraries/Utilities/stringifySafe',
14
+ 'react-native/src/private/assets/AssetRegistry',
14
15
  'react-native/src/private/featureflags',
15
16
  'react-native/Libraries/TurboModule/TurboModuleRegistry',
16
17
  'react-native/Libraries/Utilities/Platform',
@@ -1,4 +0,0 @@
1
- /*! rnx v0.1.369 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{p}from"./chunk-UDXQCEJU.js";import"./chunk-JLOOLA47.js";import"./chunk-UQJY6O72.js";import"./chunk-DKSZZABN.js";import{existsSync as h,mkdirSync as d,readFileSync as y,writeFileSync as g}from"node:fs";import{join as m}from"node:path";import{gzipSync as w}from"node:zlib";function f(t,e){let o=t.indexOf(`--${e}`);if(o!==-1&&o+1<t.length)return t[o+1];let r=t.find(i=>i.startsWith(`--${e}=`));return r?r.slice(e.length+3):void 0}async function x(t){let e=f(t,"wire")||"",o=f(t,"out-dir"),r=f(t,"manifest");if((!o||!r)&&(console.error(" usage: rnx app-fonts stage --wire <wire> --out-dir <dir> --manifest <path>"),process.exit(1)),!e.trim()){console.log("no app fonts declared \u2014 nothing to stage");return}d(o,{recursive:!0});let i=await p(e,{onStaged:({url:n,byteLength:s})=>console.log(` staged app font: ${n} (${(s/1024).toFixed(1)} KiB)`),onError:(n,s)=>console.error(` warning: failed to fetch app font ${n}: ${s instanceof Error?s.message:s}`)}),a=[];for(let n of i){let s=w(n.bytes);g(m(o,n.urlhash),s),a.push({url:n.url,urlhash:n.urlhash,contentType:n.contentType,encoding:"gzip",sizeBytes:s.length,rawBytes:n.bytes.byteLength})}let c=[];if(h(r))try{let n=JSON.parse(y(r,"utf8"));Array.isArray(n)&&(c=n)}catch{}let u=new Set(c.map(n=>n.urlhash)),l=[...c,...a.filter(n=>!u.has(n.urlhash))];g(r,JSON.stringify(l)),console.log(`staged ${a.length} app font(s); manifest now has ${l.length} file(s)`)}async function E(t){let e=t[0];if(e==="stage"){await x(t.slice(1));return}console.error(` unknown app-fonts subcommand: ${e??"(none)"}`),console.error(" available: stage"),process.exit(1)}export{E as runAppFonts};
@@ -1,12 +0,0 @@
1
- /*! rnx v0.1.369 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as r}from"./chunk-JH5KE2OI.js";import{d as t}from"./chunk-ZW6JXEVX.js";import"./chunk-FBMNYSSW.js";import"./chunk-DKSZZABN.js";function i(){console.log(`
5
- rnx auth \u2014 inspect CLI auth
6
-
7
- usage:
8
- rnx auth
9
-
10
- API keys are read from RNX_API_KEY, or SOOTSIM_API_KEY if that is unset.
11
- Use \`rnx login\` to sign in and \`rnx logout\` to clear the desktop session.
12
- `)}async function s(){let o=r();if(!o)return console.log(" not signed in"),console.log(" set RNX_API_KEY=sk_rnx_... or run `rnx login`"),1;if(o.kind==="api-key")return console.log(` api key ${o.secret.slice(0,14)}...`),console.log(` source: ${o.envName} env var`),0;if(o.kind==="github")return console.log(` github token (${o.source})`),console.log(` repo: ${o.repoId}`),0;let e=await t(o.origin),n=e?.user;return console.log(` ${n?.email||n?.name||n?.id||"signed in"}`),console.log(` origin: ${e?.origin??o.origin}`),e?.updatedAt&&console.log(` updated: ${e.updatedAt}`),0}async function c(o){if(o.includes("--help")||o.includes("-h")){i();return}let e=o.find(n=>!n.startsWith("-"));if(!e||e==="status"){process.exitCode=await s();return}console.error(` unknown auth command: ${e}`),i(),process.exit(1)}export{c as runAuth};
@@ -1,28 +0,0 @@
1
- /*! rnx v0.1.369 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{e as p}from"./chunk-ROISJKH3.js";import{a as c,b as l}from"./chunk-JH5KE2OI.js";import{a}from"./chunk-ZW6JXEVX.js";async function g(e,i){if(i)return i.replace(/\/$/,"");if(e.kind==="session"&&e.origin)return e.origin.replace(/\/$/,"");let r=a();return r?.origin?r.origin.replace(/\/$/,""):(await p()).replace(/\/$/,"")}async function x(e,i={}){let r=c();if(r||(process.stderr.write(`
5
- rnx ${e} needs auth before it can check recording access.
6
-
7
- pick one:
8
- \u2022 run \`rnx login\`
9
- \u2022 set RNX_API_KEY=sk_rnx_... (recommended for CI)
10
-
11
- `),process.exit(1)),r.kind==="github"&&i.allowGitHubAuth)return;let s=await g(r,i.originOverride),n;try{n=await fetch(`${s}/api/sootsim/billing/subscription`,{headers:{authorization:l(r)}})}catch(t){process.stderr.write(`
12
- rnx ${e} couldn't verify recording access.
13
- ${t instanceof Error?t.message:String(t)}
14
-
15
- `),process.exit(1)}if(n.status===401&&(process.stderr.write(`
16
- rnx ${e} couldn't verify recording access with the current auth against ${s}.
17
- sign in again for that origin, or provide a valid RNX_API_KEY.
18
-
19
- `),process.exit(1)),!n.ok){let t=await n.text().catch(()=>"");process.stderr.write(`
20
- rnx ${e} couldn't verify recording access (${n.status}).
21
- ${t||"unexpected billing response"}
22
-
23
- `),process.exit(1)}let o=await n.json();if(o.entitlements?.desktopRecording===!0)return;let u=o.plan??"free";process.stderr.write(`
24
- rnx ${e} recording requires Personal, Team, or an active trial.
25
- current plan: ${u}.
26
- free keeps basic 3d mode; the trial unlocks the full Personal surface.
27
-
28
- `),process.exit(1)}export{x as a};
@@ -1,24 +0,0 @@
1
- /*! rnx v0.1.369 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import { createRequire as __sootsimCreateRequire } from 'node:module'
3
- var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as v}from"./chunk-EKAEEWC2.js";import{a as P,b as y,c as $,d as k,e as x,h as E,i as O}from"./chunk-WGE2P25F.js";import{spawn as M,spawnSync as p}from"child_process";import{chmodSync as I,copyFileSync as L,createWriteStream as C,existsSync as g,mkdirSync as D,rmSync as u,statSync as R,unlinkSync as B}from"fs";import{tmpdir as F}from"os";import{dirname as N,join as f,resolve as A}from"path";var b="https://contrast.dev/api/electron-release";function W(){let n=process.arch;if(process.platform==="darwin"){let t=n==="arm64"?"mac-arm64":"mac-x64",r=`sootsim-latest-${t}.dmg`;return{platform:t,filename:r,url:`${b}/${r}`,install:q}}if(process.platform==="linux"){let t=n==="arm64"?"linux-arm64":"linux-x64",r=`sootsim-latest-${t}.AppImage`;return{platform:t,filename:r,url:`${b}/${r}`,install:z}}if(process.platform==="win32"){let t="sootsim-latest-win-x64.exe";return{platform:"win-x64",filename:t,url:`${b}/${t}`,install:H}}return null}async function Y({url:n,dest:t,onProgress:r}){let s=await fetch(n,{redirect:"follow"});if(!s.ok)throw new Error(`${s.status} ${s.statusText} (${n})`);let o=s.headers.get("content-length"),a=o?Number(o):null;if(!s.body)throw new Error(`empty response body (${n})`);D(N(t),{recursive:!0});let l=C(t),d=s.body.getReader(),c=0;try{for(;;){let{done:e,value:i}=await d.read();if(e)break;l.write(Buffer.from(i)),c+=i.byteLength,r?.(c,a)}}finally{await new Promise((e,i)=>{l.end(m=>m?i(m):e())})}}function _(n,t){let r=(n/1048576).toFixed(1);if(!t)return` ${r} MB`;let s=Math.min(100,Math.round(n/t*100)),o=(t/(1024*1024)).toFixed(1),a=24,l=Math.round(s/100*a);return` ${P("\u2588".repeat(l))+$("\u2591".repeat(a-l))} ${s}% ${r} / ${o} MB`}async function q(n){let t=p("hdiutil",["attach","-nobrowse","-readonly",n],{encoding:"utf8"});if(t.status!==0)throw new Error(`hdiutil attach failed: ${t.stderr||t.stdout}`.trim());let r=t.stdout.trim().split(`
5
- `),o=r[r.length-1].split(" ").pop()?.trim();if(!o||!g(o))throw new Error(`could not determine dmg mount point (output: ${t.stdout})`);let a=f(o,"rnx.app");if(!g(a))throw p("hdiutil",["detach","-force",o]),new Error(`rnx.app not found inside ${o}`);let l="/Applications",d=A(process.env.HOME||"","Applications"),c=l;try{let w=f(l,`.sootsim-write-probe-${process.pid}`);p("touch",[w]),g(w)?u(w,{force:!0}):c=d}catch{c=d}c===d&&D(c,{recursive:!0});let e=f(c,"rnx.app"),i=f(c,`.rnx-incoming-${process.pid}.app`);u(i,{recursive:!0,force:!0});let m=p("cp",["-R",a,i]);if(m.status!==0)throw p("hdiutil",["detach","-force",o]),u(i,{recursive:!0,force:!0}),new Error(`copy to ${c} failed: ${m.stderr?.toString()||""}`.trim());let S=p("hdiutil",["detach","-force",o]),h=f(c,`.rnx-previous-${process.pid}.app`);if(g(e)){let w=p("mv",[e,h]);if(w.status!==0)throw u(i,{recursive:!0,force:!0}),new Error(`could not replace ${e}: ${w.stderr?.toString()||""}`.trim())}let T=p("mv",[i,e]);if(T.status!==0)throw g(h)&&p("mv",[h,e]),u(i,{recursive:!0,force:!0}),new Error(`could not move into ${e}: ${T.stderr?.toString()||""}`.trim());return u(h,{recursive:!0,force:!0}),S.status!==0&&console.warn(` warning: failed to unmount ${o} (${S.stderr?.toString().trim()||"unknown error"})`),p("xattr",["-dr","com.apple.quarantine",e]),e}async function z(n){let t=A(process.env.HOME||"","Applications");D(t,{recursive:!0});let r=f(t,"rnx.AppImage");return g(r)&&u(r,{force:!0}),L(n,r),B(n),I(r,493),r}async function H(n){await new Promise((r,s)=>{let o=M("cmd",["/c","start",'""',"/wait",n],{stdio:"inherit"});o.once("error",s),o.once("exit",a=>{a===0?r():s(new Error(`installer exited with code ${a}`))})});let t=v();if(!t)throw new Error("the installer finished but the rnx application was not registered");return t.path}async function X(n){(n.includes("--help")||n.includes("-h"))&&(console.log(`
6
- rnx desktop install
7
-
8
- Download and install the optional rnx Desktop app.
9
- The CLI works without it. Choose Desktop when you want a dedicated native window.
10
-
11
- usage:
12
- rnx desktop install [options]
13
-
14
- options:
15
- -y, --yes skip confirmation and install immediately
16
- --force reinstall even if the companion is already present
17
-
18
- examples:
19
- rnx desktop install
20
- rnx desktop install --yes
21
- `),process.exit(0));let t=n.includes("--yes")||n.includes("-y")||process.env.SOOTSIM_NO_PROMPT==="1"||process.env.CI==="1"||!process.stdin.isTTY,r=n.includes("--force"),s=v();if(s&&!r){console.log(` ${k("\u2713")} Desktop app is already installed at ${s.path}`),console.log(` ${$("Pass --force to reinstall.")}`);return}let o=W();if(o||(console.error(` ${x("\xD7")} No desktop build is available for ${process.platform}/${process.arch}.`),console.error(" Supported: darwin-arm64, darwin-x64, linux-x64, linux-arm64, win32-x64"),process.exit(1)),console.log(` ${y("Desktop app")}`),console.log(` Platform ${o.platform}`),console.log(` Download ${o.url}`),console.log(),!t){if(!await O("Download and install now?",!0)){console.log(` ${$("Cancelled.")}`);return}console.log()}let a=f(F(),`sootsim-install-${Date.now()}`),l=f(a,o.filename),d=0;process.stdout.write(` Downloading ${o.filename}...
22
- `);try{await Y({url:o.url,dest:l,onProgress:(e,i)=>{let m=Date.now();m-d<100&&e<(i??1/0)||(d=m,process.stdout.isTTY&&process.stdout.write(`\r\x1B[2K${_(e,i)}`))}})}catch(e){u(a,{recursive:!0,force:!0});let i=e instanceof Error?e.message:String(e);console.error(`
23
- ${x("\xD7")} Download failed: ${i}`),console.error(` The ${o.platform} desktop build may not be published yet, or your`),console.error(" network blocked the request. Check your connection and try again later."),console.error(" The CLI and daemon work without the desktop app. Run `rnx --help`."),process.exit(1)}process.stdout.isTTY&&process.stdout.write(`
24
- `);let c=R(l).size;console.log(` ${k("\u2713")} Downloaded ${(c/(1024*1024)).toFixed(1)} MB`),console.log();try{let e=await E("Installing the desktop app",()=>o.install(l));console.log(` Installed at ${e}`),u(a,{recursive:!0,force:!0})}catch(e){console.error(` ${x("\xD7")} Install failed: ${e instanceof Error?e.message:String(e)}`),process.platform==="darwin"?(p("open",[l]),console.error(` Opened ${o.filename} \u2014 drag rnx to Applications to finish.`)):console.error(` Keeping the download at ${l} for manual installation.`),process.exit(1)}console.log(),console.log(` ${y("Ready")}`),console.log(" rnx desktop Launch the desktop app"),console.log(" rnx open <target> Open a demo or bundle in it")}export{X as a};