rnxsim 0.1.334 → 0.1.336

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 (272) hide show
  1. package/README.md +104 -76
  2. package/cli/auth.ts +2 -2
  3. package/cli/bin.ts +7 -3
  4. package/cli/bridge-flow-runner.ts +2 -2
  5. package/cli/commands/agent-wrapper.ts +1 -1
  6. package/cli/commands/agent.ts +12 -12
  7. package/cli/commands/app-fonts.ts +1 -1
  8. package/cli/commands/assert.ts +7 -7
  9. package/cli/commands/auth.ts +4 -4
  10. package/cli/commands/camera.ts +13 -13
  11. package/cli/commands/cleanup.ts +6 -6
  12. package/cli/commands/compat.ts +4 -4
  13. package/cli/commands/config.ts +2 -2
  14. package/cli/commands/control.ts +37 -43
  15. package/cli/commands/cpu-profile.ts +2 -2
  16. package/cli/commands/daemon-mac-app.ts +2 -2
  17. package/cli/commands/daemon.ts +12 -12
  18. package/cli/commands/debug.ts +22 -22
  19. package/cli/commands/desktop.ts +3 -3
  20. package/cli/commands/detox.ts +17 -17
  21. package/cli/commands/device.ts +9 -9
  22. package/cli/commands/diagnose.ts +11 -11
  23. package/cli/commands/electron.ts +7 -7
  24. package/cli/commands/film.ts +6 -6
  25. package/cli/commands/inspect/core.ts +6 -7
  26. package/cli/commands/inspect/find.ts +2 -2
  27. package/cli/commands/inspect.ts +36 -36
  28. package/cli/commands/install-desktop.ts +8 -8
  29. package/cli/commands/login.ts +6 -6
  30. package/cli/commands/maestro-generate.ts +2 -2
  31. package/cli/commands/maestro.ts +23 -23
  32. package/cli/commands/mode.ts +4 -4
  33. package/cli/commands/no-bridge-hint.ts +9 -9
  34. package/cli/commands/perf.ts +11 -11
  35. package/cli/commands/permissions.ts +5 -5
  36. package/cli/commands/profile.ts +11 -11
  37. package/cli/commands/react.ts +15 -15
  38. package/cli/commands/record.ts +15 -15
  39. package/cli/commands/report-issue.ts +2 -2
  40. package/cli/commands/reset.ts +2 -2
  41. package/cli/commands/runtime.ts +18 -18
  42. package/cli/commands/screenshot-mode.ts +5 -5
  43. package/cli/commands/screenshot.ts +12 -12
  44. package/cli/commands/screenshots-capture.ts +7 -7
  45. package/cli/commands/screenshots.ts +6 -6
  46. package/cli/commands/serve.ts +6 -6
  47. package/cli/commands/setup.ts +13 -15
  48. package/cli/commands/skills.ts +14 -14
  49. package/cli/commands/slides.ts +19 -23
  50. package/cli/commands/state.ts +2 -2
  51. package/cli/commands/storage.ts +3 -3
  52. package/cli/commands/telemetry.ts +1 -1
  53. package/cli/commands/three-mode.ts +16 -16
  54. package/cli/commands/timeline.ts +4 -4
  55. package/cli/commands/upgrade.ts +1 -1
  56. package/cli/commands/upload.ts +11 -11
  57. package/cli/commands/version.ts +3 -5
  58. package/cli/commands/what-happened.ts +11 -11
  59. package/cli/drivers/electron.ts +3 -3
  60. package/cli/hints.ts +8 -8
  61. package/cli/recording-access.ts +1 -1
  62. package/cli/ws-bridge.ts +5 -5
  63. package/dist-cli/bin.js +5 -5
  64. package/dist-cli/chunks/{agent-XB27DMQ6.js → agent-PZLF36FY.js} +14 -14
  65. package/dist-cli/chunks/{agent-wrapper-B3HNORTW.js → agent-wrapper-6TA43SJ2.js} +3 -3
  66. package/dist-cli/chunks/app-fonts-MTZTCJUY.js +4 -0
  67. package/dist-cli/chunks/{assert-6CUEOSSO.js → assert-2CVO2TYX.js} +12 -12
  68. package/dist-cli/chunks/auth-LKXFRFOT.js +12 -0
  69. package/dist-cli/chunks/{beta-H5SAI4RD.js → beta-OATC5IPA.js} +2 -2
  70. package/dist-cli/chunks/camera-VX65VO5N.js +33 -0
  71. package/dist-cli/chunks/{chunk-R3JUSXCG.js → chunk-262YA5CJ.js} +2 -2
  72. package/dist-cli/chunks/{chunk-2W7J4B3D.js → chunk-2J4OBR7W.js} +18 -18
  73. package/dist-cli/chunks/{chunk-GO7WTRY4.js → chunk-2PFDFGOG.js} +1 -1
  74. package/dist-cli/chunks/{chunk-BH3NYOFU.js → chunk-2Q6S7X5O.js} +4 -4
  75. package/dist-cli/chunks/{chunk-JZFZ7NGF.js → chunk-2VOFUIKQ.js} +9 -9
  76. package/dist-cli/chunks/chunk-3QCSDI3B.js +5 -0
  77. package/dist-cli/chunks/{chunk-IZITFEO5.js → chunk-4532OPNZ.js} +3 -3
  78. package/dist-cli/chunks/{chunk-S5Q2TACY.js → chunk-5YCVNKD7.js} +23 -23
  79. package/dist-cli/chunks/{chunk-R5KHC7VZ.js → chunk-6ALTVOXE.js} +6 -6
  80. package/dist-cli/chunks/chunk-6TN3YWA6.js +124 -0
  81. package/dist-cli/chunks/{chunk-KSJTW5ZW.js → chunk-7FHAHI5V.js} +2 -2
  82. package/dist-cli/chunks/{chunk-TKTAVBKB.js → chunk-7PMNRG53.js} +4 -4
  83. package/dist-cli/chunks/{chunk-752UYKC6.js → chunk-ARFQOYRO.js} +1 -1
  84. package/dist-cli/chunks/chunk-BHXQ7MUW.js +5 -0
  85. package/dist-cli/chunks/{chunk-HMZS7LD4.js → chunk-BIZE6NBI.js} +1 -1
  86. package/dist-cli/chunks/{chunk-INV6BZQY.js → chunk-BOZARB6P.js} +2 -2
  87. package/dist-cli/chunks/chunk-BVGUTE2T.js +74 -0
  88. package/dist-cli/chunks/{chunk-K2NYE3XT.js → chunk-BYOFHYKS.js} +1 -1
  89. package/dist-cli/chunks/{chunk-TLAYQHXB.js → chunk-DMD24WAG.js} +1 -1
  90. package/dist-cli/chunks/{chunk-PSVQUW3M.js → chunk-EAPHUH2R.js} +2 -2
  91. package/dist-cli/chunks/{chunk-ELFSL6AX.js → chunk-FMWEQNK2.js} +2 -2
  92. package/dist-cli/chunks/{chunk-OJJUPWLY.js → chunk-FWGDP2J4.js} +2 -2
  93. package/dist-cli/chunks/{chunk-VCBH7RDB.js → chunk-G3FVXFPF.js} +2 -2
  94. package/dist-cli/chunks/{chunk-U5JW25P3.js → chunk-GI3GZ54J.js} +1 -1
  95. package/dist-cli/chunks/{chunk-AH7KCTAP.js → chunk-HDHHEWEA.js} +2 -2
  96. package/dist-cli/chunks/{chunk-G2UNJ4TN.js → chunk-JIWE66VU.js} +1 -1
  97. package/dist-cli/chunks/{chunk-7HXPSUI6.js → chunk-KDRDDPNN.js} +1 -1
  98. package/dist-cli/chunks/{chunk-ANO5CHPQ.js → chunk-KPL344LX.js} +2 -2
  99. package/dist-cli/chunks/{chunk-3OGSYYLZ.js → chunk-M2OWBYUG.js} +1 -1
  100. package/dist-cli/chunks/{chunk-7D2P57SZ.js → chunk-M2XGXP7G.js} +1 -1
  101. package/dist-cli/chunks/{chunk-KV653SVK.js → chunk-MARPC3GM.js} +2 -2
  102. package/dist-cli/chunks/{chunk-ZYWOBHVL.js → chunk-MQES3MTN.js} +2 -2
  103. package/dist-cli/chunks/{chunk-ZVBWTXV6.js → chunk-NDLRQH7U.js} +5 -5
  104. package/dist-cli/chunks/{chunk-DECDURI3.js → chunk-NJMBQLAU.js} +2 -2
  105. package/dist-cli/chunks/{chunk-X6LGVNYE.js → chunk-NL2HXO7U.js} +1 -1
  106. package/dist-cli/chunks/{chunk-XCI6HRMH.js → chunk-NVPZLIMW.js} +1 -1
  107. package/dist-cli/chunks/{chunk-CYXIDSTO.js → chunk-NWVH2X7F.js} +2 -2
  108. package/dist-cli/chunks/{chunk-PFOKFWHU.js → chunk-OUAYBJ4G.js} +2 -2
  109. package/dist-cli/chunks/{chunk-WJJYIBVW.js → chunk-OXRDTNVL.js} +2 -2
  110. package/dist-cli/chunks/{chunk-Q2KHHFU3.js → chunk-QIVOOERS.js} +2 -2
  111. package/dist-cli/chunks/{chunk-WXUWD5JK.js → chunk-RZ2PXHA7.js} +11 -11
  112. package/dist-cli/chunks/{chunk-32AHRTE2.js → chunk-S33NCWJV.js} +2 -2
  113. package/dist-cli/chunks/{chunk-YX7RESF2.js → chunk-STMCT3G3.js} +2 -2
  114. package/dist-cli/chunks/{chunk-25BPBDWK.js → chunk-SV6NVD7P.js} +1 -1
  115. package/dist-cli/chunks/{chunk-62GN45A4.js → chunk-TA4GBBGC.js} +2 -2
  116. package/dist-cli/chunks/{chunk-MCX66YUZ.js → chunk-TV457FWW.js} +2 -2
  117. package/dist-cli/chunks/chunk-UB3JHBDW.js +4 -0
  118. package/dist-cli/chunks/{chunk-CLJ5KDZQ.js → chunk-UU2KMAIA.js} +1 -1
  119. package/dist-cli/chunks/chunk-UZCNKUSS.js +15 -0
  120. package/dist-cli/chunks/{chunk-R7XQX7CV.js → chunk-V4OZDPTA.js} +1 -1
  121. package/dist-cli/chunks/{chunk-UBZ7VUVM.js → chunk-WBTT5WIO.js} +1 -1
  122. package/dist-cli/chunks/chunk-YYBC6VB2.js +30 -0
  123. package/dist-cli/chunks/{chunk-PPTUVZET.js → chunk-ZI6YQKD6.js} +2 -2
  124. package/dist-cli/chunks/{cleanup-L5RZFZHK.js → cleanup-ZC5OVBIM.js} +10 -10
  125. package/dist-cli/chunks/cli-version-NOYHDN6P.js +4 -0
  126. package/dist-cli/chunks/{compat-6UV3RZBK.js → compat-BS2E7XDD.js} +9 -9
  127. package/dist-cli/chunks/{config-PCDG3T44.js → config-VDCDUYMZ.js} +5 -5
  128. package/dist-cli/chunks/{control-3F5UWGSP.js → control-IKS3CUP4.js} +2 -2
  129. package/dist-cli/chunks/daemon-MM3C4O2B.js +4 -0
  130. package/dist-cli/chunks/{debug-U3AW3DE7.js → debug-BKMZ5SRR.js} +17 -17
  131. package/dist-cli/chunks/desktop-FZQHSNF7.js +31 -0
  132. package/dist-cli/chunks/detox-52AM3DKY.js +52 -0
  133. package/dist-cli/chunks/{device-Z7QIRPK3.js → device-7FL5Y542.js} +11 -11
  134. package/dist-cli/chunks/{diagnose-XTLKRGK4.js → diagnose-YT4BKJ7I.js} +12 -12
  135. package/dist-cli/chunks/{disk-cleanup-EGA7FHY2.js → disk-cleanup-O6ICYLAC.js} +2 -2
  136. package/dist-cli/chunks/drivers-YY3YRD2L.js +4 -0
  137. package/dist-cli/chunks/{film-VCD3LX7E.js → film-7YBOFSOZ.js} +9 -9
  138. package/dist-cli/chunks/flow-I4PVS52A.js +4 -0
  139. package/dist-cli/chunks/help-35ESSWJH.js +4 -0
  140. package/dist-cli/chunks/{hidden-runtime-alias-WIG4O25J.js → hidden-runtime-alias-M3UFKZB6.js} +2 -2
  141. package/dist-cli/chunks/{home-paths-35K3WNLQ.js → home-paths-VW7G7LVZ.js} +2 -2
  142. package/dist-cli/chunks/inspect-PCJ6C2BN.js +4 -0
  143. package/dist-cli/chunks/install-desktop-NGQWMGQO.js +4 -0
  144. package/dist-cli/chunks/{login-JMQOKJS4.js → login-5VAHTGHC.js} +6 -6
  145. package/dist-cli/chunks/{logout-SBZ42HSW.js → logout-CXZFNMYF.js} +2 -2
  146. package/dist-cli/chunks/{maestro-3ZOPLMLN.js → maestro-THMBR6L3.js} +25 -25
  147. package/dist-cli/chunks/{maestro-generate-UZ75KHE6.js → maestro-generate-R73J53KE.js} +3 -3
  148. package/dist-cli/chunks/mode-5RJYFW76.js +26 -0
  149. package/dist-cli/chunks/{optional-demo-registry-B5RN64RF.js → optional-demo-registry-U7SCVX5U.js} +2 -2
  150. package/dist-cli/chunks/{perf-HDAR6QCJ.js → perf-AW6LG6FW.js} +28 -28
  151. package/dist-cli/chunks/permissions-6JWNMXYT.js +13 -0
  152. package/dist-cli/chunks/record-LLPM3BJT.js +72 -0
  153. package/dist-cli/chunks/{report-issue-45ECETI7.js → report-issue-YO2NAMJS.js} +4 -4
  154. package/dist-cli/chunks/reset-5LDPRL3W.js +4 -0
  155. package/dist-cli/chunks/runtime-IAICY2UL.js +4 -0
  156. package/dist-cli/chunks/{screenshot-command-ZTTTH5DS.js → screenshot-command-X7ECU2SK.js} +34 -34
  157. package/dist-cli/chunks/{screenshot-layers-NBYY3W7W.js → screenshot-layers-E7GLIOHG.js} +2 -2
  158. package/dist-cli/chunks/{screenshots-capture-EPPIKH5Q.js → screenshots-capture-TKR2YV6U.js} +11 -11
  159. package/dist-cli/chunks/{serve-4I2GY23Q.js → serve-HFNYO3YS.js} +16 -16
  160. package/dist-cli/chunks/setup-2HQHROP3.js +32 -0
  161. package/dist-cli/chunks/{skills-FBQ52ZMO.js → skills-PFCCKOPW.js} +16 -16
  162. package/dist-cli/chunks/{state-LQEZWXEX.js → state-NOCC6IGB.js} +5 -5
  163. package/dist-cli/chunks/storage-4SYN4ZWP.js +37 -0
  164. package/dist-cli/chunks/store-7QDSVAZ4.js +4 -0
  165. package/dist-cli/chunks/telemetry-LGTXJEJC.js +4 -0
  166. package/dist-cli/chunks/{timeline-3AIKN2SF.js → timeline-E2SFUV76.js} +6 -6
  167. package/dist-cli/chunks/{upgrade-HYPCBXGF.js → upgrade-KD76JQCK.js} +2 -2
  168. package/dist-cli/chunks/upload-FI2TS5S7.js +4 -0
  169. package/dist-cli/chunks/version-B23A4BFH.js +6 -0
  170. package/dist-cli/chunks/{web-Q6TI7YFH.js → web-6OAWYV5Z.js} +2 -2
  171. package/dist-cli/chunks/{what-happened-4PNRFBVS.js → what-happened-IYXUFM72.js} +16 -16
  172. package/dist-lib/agent-daemon-client.cjs +5 -5
  173. package/dist-lib/agent-events.cjs +1 -1
  174. package/dist-lib/agent-identity.cjs +1 -1
  175. package/dist-lib/agent-sessions.cjs +4 -4
  176. package/dist-lib/attached-projects.cjs +1 -1
  177. package/dist-lib/auth/shared-session.cjs +1 -1
  178. package/dist-lib/backend-origin.cjs +1 -1
  179. package/dist-lib/beta.cjs +1 -1
  180. package/dist-lib/beta.mjs +1 -1
  181. package/dist-lib/bridge-constants.cjs +1 -1
  182. package/dist-lib/bridge-contract.cjs +1 -1
  183. package/dist-lib/cli-constants.cjs +1 -1
  184. package/dist-lib/config.cjs +1 -1
  185. package/dist-lib/detox/index.cjs +1 -1
  186. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  187. package/dist-lib/home-paths.cjs +1 -1
  188. package/dist-lib/host/bridge-host.cjs +7 -7
  189. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  190. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  191. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  192. package/dist-lib/host/websocket-proxy.cjs +1 -1
  193. package/dist-lib/index.cjs +248 -98
  194. package/dist-lib/jump-to-source-babel.cjs +1 -1
  195. package/dist-lib/menu.cjs +2 -2
  196. package/dist-lib/menu.mjs +2 -2
  197. package/dist-lib/metro-host-modules/react-dom.js +6 -0
  198. package/dist-lib/metro-host-modules/react-native-web.js +6 -0
  199. package/dist-lib/metro-host-modules/react-native.js +6 -0
  200. package/dist-lib/metro-host-modules/react.js +6 -0
  201. package/dist-lib/metro-host-modules/react__jsx-dev-runtime.js +6 -0
  202. package/dist-lib/metro-host-modules/react__jsx-runtime.js +6 -0
  203. package/dist-lib/metro-production-bundle.cjs +72 -0
  204. package/dist-lib/metro-production-bundle.mjs +44 -0
  205. package/dist-lib/metro.cjs +152 -8
  206. package/dist-lib/profiles.cjs +1 -1
  207. package/dist-lib/public-brand.cjs +2 -2
  208. package/dist-lib/react-native-host-modules.cjs +50 -0
  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 +6 -7
  212. package/dist-lib/sdk.mjs +6 -7
  213. package/dist-lib/skills.cjs +71 -77
  214. package/dist-lib/vite.cjs +104 -85
  215. package/package.json +15 -2
  216. package/scripts/preuninstall.cjs +1 -1
  217. package/skills/contrast/SKILL.md +67 -75
  218. package/skills/rnx-debug/SKILL.md +84 -84
  219. package/skills/rnx-perf/SKILL.md +8 -8
  220. package/skills/rnx-setup/SKILL.md +54 -54
  221. package/skills/rnx-test/SKILL.md +35 -35
  222. package/skills/rnx-visual/SKILL.md +18 -18
  223. package/src/agent-daemon-client.ts +2 -2
  224. package/src/agent-sessions.ts +2 -2
  225. package/src/connect.ts +6 -6
  226. package/src/disk-cleanup.ts +1 -1
  227. package/src/home-paths.ts +1 -1
  228. package/src/host/bridge-host.ts +6 -6
  229. package/src/index.ts +1 -1
  230. package/src/metro-host-modules/react-dom.js +6 -0
  231. package/src/metro-host-modules/react-native-web.js +6 -0
  232. package/src/metro-host-modules/react-native.js +6 -0
  233. package/src/metro-host-modules/react.js +6 -0
  234. package/src/metro-host-modules/react__jsx-dev-runtime.js +6 -0
  235. package/src/metro-host-modules/react__jsx-runtime.js +6 -0
  236. package/src/metro-plugin.ts +249 -10
  237. package/src/metro-production-bundle.ts +51 -0
  238. package/src/public-brand.ts +1 -1
  239. package/src/react-native-host-modules.ts +25 -0
  240. package/src/runtime-assets.ts +1 -1
  241. package/src/sim-client.ts +1 -1
  242. package/src/vite-plugin-one.ts +171 -145
  243. package/dist-cli/chunks/app-fonts-R3Z7ZW4A.js +0 -4
  244. package/dist-cli/chunks/auth-LAGALWLO.js +0 -12
  245. package/dist-cli/chunks/camera-QN6WUAYK.js +0 -33
  246. package/dist-cli/chunks/chunk-2A4XQAO5.js +0 -5
  247. package/dist-cli/chunks/chunk-CFRBWE4I.js +0 -124
  248. package/dist-cli/chunks/chunk-FSS73GUP.js +0 -4
  249. package/dist-cli/chunks/chunk-KKLCABLJ.js +0 -15
  250. package/dist-cli/chunks/chunk-L4JC72JR.js +0 -5
  251. package/dist-cli/chunks/chunk-LGO27KAL.js +0 -30
  252. package/dist-cli/chunks/chunk-ZS3IA2TO.js +0 -74
  253. package/dist-cli/chunks/cli-version-YLZLS2WD.js +0 -4
  254. package/dist-cli/chunks/daemon-7KWRXNTD.js +0 -4
  255. package/dist-cli/chunks/desktop-NXZL7FFL.js +0 -31
  256. package/dist-cli/chunks/detox-ZVCZR6RI.js +0 -52
  257. package/dist-cli/chunks/drivers-NCRG3DPA.js +0 -4
  258. package/dist-cli/chunks/flow-XTAZ54NO.js +0 -4
  259. package/dist-cli/chunks/help-HXJS23VT.js +0 -4
  260. package/dist-cli/chunks/inspect-FGQNWT3J.js +0 -4
  261. package/dist-cli/chunks/install-desktop-PRZH7KML.js +0 -4
  262. package/dist-cli/chunks/mode-PUJBFJV2.js +0 -26
  263. package/dist-cli/chunks/permissions-FG2BLOZH.js +0 -13
  264. package/dist-cli/chunks/record-2733FYSQ.js +0 -72
  265. package/dist-cli/chunks/reset-7RTBJQT7.js +0 -4
  266. package/dist-cli/chunks/runtime-FWAZCY6A.js +0 -4
  267. package/dist-cli/chunks/setup-FAQDSB56.js +0 -32
  268. package/dist-cli/chunks/storage-6CRLZNEX.js +0 -37
  269. package/dist-cli/chunks/store-PNV6NRDU.js +0 -4
  270. package/dist-cli/chunks/telemetry-ZS6SFANV.js +0 -4
  271. package/dist-cli/chunks/upload-EMRR47KT.js +0 -4
  272. package/dist-cli/chunks/version-P4NCNAW7.js +0 -6
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.334 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.336 | (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;
@@ -33,11 +33,14 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
33
33
  var vite_plugin_one_exports = {};
34
34
  __export(vite_plugin_one_exports, {
35
35
  default: () => vite_plugin_one_default,
36
+ rnxPlugin: () => rnxPlugin,
36
37
  sootsimPlugin: () => sootsimPlugin
37
38
  });
38
39
  module.exports = __toCommonJS(vite_plugin_one_exports);
40
+ var import_child_process = require("child_process");
39
41
  var import_fs2 = __toESM(require("fs"), 1);
40
42
  var import_path2 = __toESM(require("path"), 1);
43
+ var import_url2 = require("url");
41
44
 
42
45
  // src/bridge-constants.ts
43
46
  var DEFAULT_SOOTSIM_BRIDGE_PORT = 7668;
@@ -118,7 +121,7 @@ function isValidRuntimeVersion(value) {
118
121
  }
119
122
 
120
123
  // src/runtime-assets.ts
121
- var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[rnx] no engine runtime installed \u2014 run `rnxsim setup`, or `rnxsim runtime install`";
124
+ var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[rnx] no engine runtime installed \u2014 run `rnx setup`, or `rnx runtime install`";
122
125
  var _monorepoRootCache;
123
126
  function findMonorepoRoot() {
124
127
  if (_monorepoRootCache !== void 0) return _monorepoRootCache;
@@ -254,105 +257,121 @@ function serveRuntimeFile(req, res, fullPath) {
254
257
  }
255
258
 
256
259
  // src/vite-plugin-one.ts
257
- function sootsimPlugin(options = {}) {
258
- if (options.enabled === false) return [];
260
+ function rnxPlugin(options = {}) {
259
261
  const prefix = options.prefix || "/__soot";
260
- return [
261
- {
262
- name: "sootsim-one",
263
- configureServer(server) {
264
- const bundleUrl = options.bundleUrl || "/node_modules/one/metro-entry.bundle?platform=ios&dev=true&minify=false";
265
- const buildShellHtml = (runtimeRoot) => {
266
- const html = import_fs2.default.readFileSync(import_path2.default.join(runtimeRoot, "index.html"), "utf8");
267
- const lock = readDaemonLockfile();
268
- const bridgePort = lock && isDaemonLockfileFresh(lock) && lock.bridgePort > 0 ? lock.bridgePort : DEFAULT_SOOTSIM_BRIDGE_PORT;
269
- const inject = `<script>(function(){var u=new URL(location.href);if(!u.searchParams.has('bundle'))u.searchParams.set('bundle',${JSON.stringify(bundleUrl)});window.__sootsimBridgePort=${bridgePort};history.replaceState(null,'','${prefix}/'+u.search)})()</script>`;
270
- return html.replace("</head>", inject + "</head>");
262
+ return {
263
+ name: "sootsim-one",
264
+ configureServer(server) {
265
+ if (options.enabled === false) return;
266
+ const bundleUrl = options.bundleUrl || "/node_modules/one/metro-entry.bundle?platform=ios&dev=true&minify=false";
267
+ const buildShellHtml = (runtimeRoot) => {
268
+ const html = import_fs2.default.readFileSync(import_path2.default.join(runtimeRoot, "index.html"), "utf8");
269
+ const lock = readDaemonLockfile();
270
+ const bridgePort = lock && isDaemonLockfileFresh(lock) && lock.bridgePort > 0 ? lock.bridgePort : DEFAULT_SOOTSIM_BRIDGE_PORT;
271
+ const inject = `<script>(function(){var u=new URL(location.href);if(!u.searchParams.has('bundle'))u.searchParams.set('bundle',${JSON.stringify(bundleUrl)});window.__sootsimBridgePort=${bridgePort};history.replaceState(null,'','${prefix}/'+u.search)})()</script>`;
272
+ return html.replace("</head>", inject + "</head>");
273
+ };
274
+ server.middlewares.use((req, res, next) => {
275
+ const origWriteHead = res.writeHead.bind(res);
276
+ res.writeHead = function(statusCode, ...args) {
277
+ const setCookie = res.getHeader("set-cookie");
278
+ if (setCookie) {
279
+ const value = Array.isArray(setCookie) ? setCookie.join(", ") : String(setCookie);
280
+ res.setHeader("x-sootsim-set-cookie", value);
281
+ res.setHeader("access-control-expose-headers", "x-sootsim-set-cookie");
282
+ }
283
+ return origWriteHead(
284
+ statusCode,
285
+ ...args
286
+ );
271
287
  };
272
- server.middlewares.use((req, res, next) => {
273
- const origWriteHead = res.writeHead.bind(res);
274
- res.writeHead = function(statusCode, ...args) {
275
- const setCookie = res.getHeader("set-cookie");
276
- if (setCookie) {
277
- const value = Array.isArray(setCookie) ? setCookie.join(", ") : String(setCookie);
278
- res.setHeader("x-sootsim-set-cookie", value);
279
- res.setHeader("access-control-expose-headers", "x-sootsim-set-cookie");
288
+ next();
289
+ });
290
+ server.middlewares.use((req, res, next) => {
291
+ if ((req.url || "").split("?")[0] !== "/__server-scan") return next();
292
+ const scanPort = server.config.server.port || 8081;
293
+ const absoluteBundleUrl = bundleUrl.startsWith("http") ? bundleUrl : `http://localhost:${scanPort}${bundleUrl}`;
294
+ res.setHeader("content-type", "application/json");
295
+ res.end(
296
+ JSON.stringify([
297
+ {
298
+ port: scanPort,
299
+ framework: "one",
300
+ bundleUrl: absoluteBundleUrl,
301
+ lastSeen: Date.now()
280
302
  }
281
- return origWriteHead(
282
- statusCode,
283
- ...args
284
- );
285
- };
303
+ ])
304
+ );
305
+ });
306
+ server.middlewares.use((req, res, next) => {
307
+ const url = req.url || "";
308
+ const pathname = url.split("?")[0];
309
+ const runtimeRoot = resolveRuntimeRootForRequestHost(req.headers.host);
310
+ if (!runtimeRoot) {
311
+ if (pathname === prefix || pathname === prefix + "/" || pathname.startsWith(prefix + "/")) {
312
+ res.statusCode = 500;
313
+ res.end(SOOTSIM_RUNTIME_MISSING_MESSAGE);
314
+ return;
315
+ }
286
316
  next();
287
- });
288
- server.middlewares.use((req, res, next) => {
289
- if ((req.url || "").split("?")[0] !== "/__server-scan") return next();
290
- const scanPort = server.config.server.port || 8081;
291
- const absoluteBundleUrl = bundleUrl.startsWith("http") ? bundleUrl : `http://localhost:${scanPort}${bundleUrl}`;
292
- res.setHeader("content-type", "application/json");
293
- res.end(
294
- JSON.stringify([
295
- {
296
- port: scanPort,
297
- framework: "one",
298
- bundleUrl: absoluteBundleUrl,
299
- lastSeen: Date.now()
300
- }
301
- ])
302
- );
303
- });
304
- server.middlewares.use((req, res, next) => {
305
- const url = req.url || "";
306
- const pathname = url.split("?")[0];
307
- const runtimeRoot = resolveRuntimeRootForRequestHost(req.headers.host);
308
- if (!runtimeRoot) {
309
- if (pathname === prefix || pathname === prefix + "/" || pathname.startsWith(prefix + "/")) {
310
- res.statusCode = 500;
311
- res.end(SOOTSIM_RUNTIME_MISSING_MESSAGE);
312
- return;
313
- }
314
- next();
317
+ return;
318
+ }
319
+ if (isRootRuntimeAssetPath(pathname)) {
320
+ const fullPath = resolveRuntimeFilePath(runtimeRoot, pathname);
321
+ if (fullPath) {
322
+ serveRuntimeFile(req, res, fullPath);
315
323
  return;
316
324
  }
317
- if (isRootRuntimeAssetPath(pathname)) {
318
- const fullPath = resolveRuntimeFilePath(runtimeRoot, pathname);
319
- if (fullPath) {
320
- serveRuntimeFile(req, res, fullPath);
321
- return;
322
- }
325
+ }
326
+ if (pathname === prefix || pathname === prefix + "/") {
327
+ res.setHeader("content-type", "text/html");
328
+ res.end(buildShellHtml(runtimeRoot));
329
+ return;
330
+ }
331
+ if (pathname.startsWith(prefix + "/")) {
332
+ const fullPath = resolveRuntimeFilePath(
333
+ runtimeRoot,
334
+ pathname.slice(prefix.length)
335
+ );
336
+ if (fullPath) {
337
+ serveRuntimeFile(req, res, fullPath);
338
+ return;
323
339
  }
324
- if (pathname === prefix || pathname === prefix + "/") {
340
+ const ext = import_path2.default.extname(pathname);
341
+ if (!ext) {
325
342
  res.setHeader("content-type", "text/html");
326
343
  res.end(buildShellHtml(runtimeRoot));
327
344
  return;
328
345
  }
329
- if (pathname.startsWith(prefix + "/")) {
330
- const fullPath = resolveRuntimeFilePath(
331
- runtimeRoot,
332
- pathname.slice(prefix.length)
333
- );
334
- if (fullPath) {
335
- serveRuntimeFile(req, res, fullPath);
336
- return;
337
- }
338
- const ext = import_path2.default.extname(pathname);
339
- if (!ext) {
340
- res.setHeader("content-type", "text/html");
341
- res.end(buildShellHtml(runtimeRoot));
342
- return;
343
- }
344
- }
345
- next();
346
+ }
347
+ next();
348
+ });
349
+ const port = server.config.server.port || 8081;
350
+ const sootsimUrl = `http://localhost:${port}${prefix}/`;
351
+ console.log(`[rnx] serving at ${sootsimUrl}`);
352
+ if (options.open && !process.env.CI && !process.env.SOOTSIM_NO_OPEN) {
353
+ server.httpServer?.once("listening", () => {
354
+ const packageRoot = import_path2.default.resolve(
355
+ import_path2.default.dirname((0, import_url2.fileURLToPath)(__sootsim_import_meta_url)),
356
+ ".."
357
+ );
358
+ const binPath = import_path2.default.join(packageRoot, "dist-cli", "bin.js");
359
+ const openPort = server.config.server.port || port;
360
+ console.log(`[rnx] opening simulator for :${openPort}`);
361
+ (0, import_child_process.spawn)(process.execPath, [binPath, "open", String(openPort)], {
362
+ detached: true,
363
+ stdio: "ignore",
364
+ windowsHide: true
365
+ }).unref();
346
366
  });
347
- const port = server.config.server.port || 8081;
348
- const sootsimUrl = `http://localhost:${port}${prefix}/`;
349
- console.log(`[rnx] serving at ${sootsimUrl}`);
350
367
  }
351
368
  }
352
- ];
369
+ };
353
370
  }
354
- var vite_plugin_one_default = sootsimPlugin;
371
+ var sootsimPlugin = rnxPlugin;
372
+ var vite_plugin_one_default = rnxPlugin;
355
373
  // Annotate the CommonJS export names for ESM import in node:
356
374
  0 && (module.exports = {
375
+ rnxPlugin,
357
376
  sootsimPlugin
358
377
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "rnxsim",
3
- "version": "0.1.334",
4
- "description": "rnxsim CLI, Vite and Metro plugins, and agent skills for driving React Native apps in the browser.",
3
+ "version": "0.1.336",
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",
7
7
  "repository": {
@@ -37,6 +37,18 @@
37
37
  "source": "./src/metro-plugin.ts",
38
38
  "default": "./dist-lib/metro.cjs"
39
39
  },
40
+ "./metro-production-bundle": {
41
+ "types": "./src/metro-production-bundle.ts",
42
+ "source": "./src/metro-production-bundle.ts",
43
+ "import": "./dist-lib/metro-production-bundle.mjs",
44
+ "default": "./dist-lib/metro-production-bundle.cjs"
45
+ },
46
+ "./react-native-host-modules": {
47
+ "types": "./src/react-native-host-modules.ts",
48
+ "source": "./src/react-native-host-modules.ts",
49
+ "bun": "./src/react-native-host-modules.ts",
50
+ "default": "./dist-lib/react-native-host-modules.cjs"
51
+ },
40
52
  "./jump-to-source-babel": {
41
53
  "source": "./src/jump-to-source-babel.ts",
42
54
  "default": "./dist-lib/jump-to-source-babel.cjs"
@@ -154,6 +166,7 @@
154
166
  "./package.json": "./package.json"
155
167
  },
156
168
  "bin": {
169
+ "rnx": "dist-cli/bin.js",
157
170
  "rnxsim": "dist-cli/bin.js"
158
171
  },
159
172
  "files": [
@@ -44,7 +44,7 @@ if (!pkgDir.includes(`${path.sep}node_modules${path.sep}`)) {
44
44
  const isRoot = typeof process.getuid === 'function' && process.getuid() === 0
45
45
  if (isRoot && process.env.SUDO_USER) {
46
46
  console.log(
47
- 'rnx: preuninstall skipped under sudo — run `rnxsim daemon uninstall` ' +
47
+ 'rnx: preuninstall skipped under sudo — run `rnx daemon uninstall` ' +
48
48
  'as your user first to remove ~/.sootsim and the bridge daemon',
49
49
  )
50
50
  process.exit(0)
@@ -14,65 +14,65 @@ overview of all available skills and CLI commands in this repo.
14
14
 
15
15
  ## rnx CLI commands
16
16
 
17
- the `rnxsim` CLI is the operational surface for booting shells, driving
17
+ the `rnx` CLI is the operational surface for booting shells, driving
18
18
  automation, inspecting the render tree, and managing sims.
19
19
 
20
20
  | command | description |
21
21
  | --- | --- |
22
- | `rnxsim maestro` | author, generate, and run Maestro YAML flows against rnx |
23
- | `rnxsim detox` | run existing Detox suites against rnx on headless Chromium |
24
- | `rnxsim cleanup` | inspect and reclaim local rnx disk usage |
25
- | `rnxsim record` | capture the live sim as webm/mp4/gif, or sample N png frames (--frames) |
26
- | `rnxsim film` | record a flow on the flat canvas, replay it on the 3d device stage under a camera cinematic, save a clip |
27
- | `rnxsim storage` | manage guest app storage and launch profiles |
28
- | `rnxsim permissions` | inspect and change simulated operating-system permissions |
29
- | `rnxsim perf` | CPU, React render, shell frame, and scroll-layer profiling |
30
- | `rnxsim describe` | curated human-readable UI summary (default inspection tool) |
31
- | `rnxsim find` | locate nodes by text / testID / role / type / predicate |
32
- | `rnxsim assert` | run any read verb and convert its output into an exit code |
33
- | `rnxsim screenshot` | capture PNGs and manage App Store screenshot assets |
34
- | `rnxsim get` | read runtime state (tree, a11y, layout, url, count, errors, …) |
35
- | `rnxsim do` | drive the app (tap, type, scroll, swipe, key, reload, …) |
36
- | `rnxsim wait` | block until the runtime reaches a known state |
37
- | `rnxsim shell` | drive shell state and simulator chrome |
38
- | `rnxsim mode` | toggle screenshot and 3D display modes |
39
- | `rnxsim device` | inspect or change the live device preset for a sim |
40
- | `rnxsim network` | inspect live network traffic from the running rnx worker |
41
- | `rnxsim logs` | inspect live console output from the running rnx worker |
42
- | `rnxsim debug` | drive __sootsimDebug: channels, snapshots, and inspectors |
43
- | `rnxsim what-happened` | show recent semantic events: toasts, keyboards, screens, alerts, fetches, errors |
44
- | `rnxsim timeline` | control the semantic event timeline (enable opt-in kinds, clear, dump) |
45
- | `rnxsim open` | load a target into the current sim or open a new one |
46
- | `rnxsim list` | list connected sims or available launch drivers |
47
- | `rnxsim use` | select a connected sim |
48
- | `rnxsim skill` | install and inspect bundled rnx agent skills |
49
- | `rnxsim claim` | take an exclusive lease on a sim |
50
- | `rnxsim agent` | attached projects + local agent sessions (codex/claude) |
51
- | `rnxsim close` | close a connected sim |
52
- | `rnxsim setup` | check local setup and install the recommended bridge daemon |
53
- | `rnxsim compat` | check package compatibility |
54
- | `rnxsim report-issue` | send an explicitly approved compatibility report |
55
- | `rnxsim desktop` | launch or install the desktop companion |
56
- | `rnxsim daemon` | manage the optional background bridge service |
57
- | `rnxsim version` | show the CLI + engine runtime versions you are running |
58
- | `rnxsim upgrade` | update the rnxsim CLI and engine runtime to the latest |
59
- | `rnxsim serve` | run the rnx bridge in the foreground |
60
- | `rnxsim runtime` | manage engine runtimes under ~/.sootsim/runtimes/ |
61
- | `rnxsim auth` | inspect active CLI auth |
62
- | `rnxsim login` | sign in for preview uploads |
63
- | `rnxsim logout` | clear the local desktop auth session |
64
- | `rnxsim config` | manage local CLI preferences |
22
+ | `rnx maestro` | author, generate, and run Maestro YAML flows against rnx |
23
+ | `rnx detox` | run existing Detox suites against rnx on headless Chromium |
24
+ | `rnx cleanup` | inspect and reclaim local rnx disk usage |
25
+ | `rnx record` | capture the live sim as webm/mp4/gif, or sample N png frames (--frames) |
26
+ | `rnx film` | record a flow on the flat canvas, replay it on the 3d device stage under a camera cinematic, save a clip |
27
+ | `rnx storage` | manage guest app storage and launch profiles |
28
+ | `rnx permissions` | inspect and change simulated operating-system permissions |
29
+ | `rnx perf` | CPU, React render, shell frame, and scroll-layer profiling |
30
+ | `rnx describe` | curated human-readable UI summary (default inspection tool) |
31
+ | `rnx find` | locate nodes by text / testID / role / type / predicate |
32
+ | `rnx assert` | run any read verb and convert its output into an exit code |
33
+ | `rnx screenshot` | capture PNGs and manage App Store screenshot assets |
34
+ | `rnx get` | read runtime state (tree, a11y, layout, url, count, errors, …) |
35
+ | `rnx do` | drive the app (tap, type, scroll, swipe, key, reload, …) |
36
+ | `rnx wait` | block until the runtime reaches a known state |
37
+ | `rnx shell` | drive shell state and simulator chrome |
38
+ | `rnx mode` | toggle screenshot and 3D display modes |
39
+ | `rnx device` | inspect or change the live device preset for a sim |
40
+ | `rnx network` | inspect live network traffic from the running rnx worker |
41
+ | `rnx logs` | inspect live console output from the running rnx worker |
42
+ | `rnx debug` | drive __sootsimDebug: channels, snapshots, and inspectors |
43
+ | `rnx what-happened` | show recent semantic events: toasts, keyboards, screens, alerts, fetches, errors |
44
+ | `rnx timeline` | control the semantic event timeline (enable opt-in kinds, clear, dump) |
45
+ | `rnx open` | load a target into the current sim or open a new one |
46
+ | `rnx list` | list connected sims or available launch drivers |
47
+ | `rnx use` | select a connected sim |
48
+ | `rnx skill` | install and inspect bundled rnx agent skills |
49
+ | `rnx claim` | take an exclusive lease on a sim |
50
+ | `rnx agent` | attached projects + local agent sessions (codex/claude) |
51
+ | `rnx close` | close a connected sim |
52
+ | `rnx setup` | check local setup and install the recommended bridge daemon |
53
+ | `rnx compat` | check package compatibility |
54
+ | `rnx report-issue` | send an explicitly approved compatibility report |
55
+ | `rnx desktop` | launch or install the desktop companion |
56
+ | `rnx daemon` | manage the optional background bridge service |
57
+ | `rnx version` | show the CLI + engine runtime versions you are running |
58
+ | `rnx upgrade` | update the rnx CLI and engine runtime to the latest |
59
+ | `rnx serve` | run the rnx bridge in the foreground |
60
+ | `rnx runtime` | manage engine runtimes under ~/.sootsim/runtimes/ |
61
+ | `rnx auth` | inspect active CLI auth |
62
+ | `rnx login` | sign in for preview uploads |
63
+ | `rnx logout` | clear the local desktop auth session |
64
+ | `rnx config` | manage local CLI preferences |
65
65
 
66
66
  ### runtime verb groups
67
67
 
68
68
  every runtime verb is organized under one of these grouping prefixes.
69
- run `rnxsim --help` to see the full list under each group.
69
+ run `rnx --help` to see the full list under each group.
70
70
 
71
- - `rnxsim describe` — summarize the current UI
72
- - `rnxsim find <...>` — unified finder (bare text, --testid, --role, --type, --pressable, --visible)
73
- - `rnxsim get <noun>` — read runtime state (tree, a11y, url, count, errors, warnings, requests, globals, layout, node)
74
- - `rnxsim do <action>` — drive the app (tap, tap-text, tap-id, type, type-into, key, dismiss, scroll, drag, swipe, pinch, reload, shell, sleep, settle, wait)
75
- - `rnxsim debug <tool>` — instrumentation (state, js, eval, perf, sample-color, enable/disable channels, snapshots, diff, record, recent)
71
+ - `rnx describe` — summarize the current UI
72
+ - `rnx find <...>` — unified finder (bare text, --testid, --role, --type, --pressable, --visible)
73
+ - `rnx get <noun>` — read runtime state (tree, a11y, url, count, errors, warnings, requests, globals, layout, node)
74
+ - `rnx do <action>` — drive the app (tap, tap-text, tap-id, type, type-into, key, dismiss, scroll, drag, swipe, pinch, reload, shell, sleep, settle, wait)
75
+ - `rnx debug <tool>` — instrumentation (state, js, eval, perf, sample-color, enable/disable channels, snapshots, diff, record, recent)
76
76
 
77
77
  ### global flags
78
78
 
@@ -90,9 +90,9 @@ skills for working with the rnx native preview engine:
90
90
 
91
91
  | skill | description |
92
92
  | --- | --- |
93
- | `/rnx-debug` | Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under rnx. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the rnxsim CLI debug tooling first, not screenshots or ad-hoc logging. |
93
+ | `/rnx-debug` | Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under rnx. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the rnx CLI debug tooling first, not screenshots or ad-hoc logging. |
94
94
  | `/rnx-perf` | Optimize rnx engine and app performance — scroll jank, dropped frames, slow animation, idle CPU, memory growth, and "smooth normally but laggy under load" (video calls, busy machines). Covers measuring on the right thread with the right browser, proving each perf tier actually engages via its counters, a CPU-contention test harness, and the map of existing perf machinery so you improve it instead of reinventing it. For general app debugging load /rnx-debug first. |
95
- | `/rnx-setup` | Get rnx connected to your React Native app — from `rnxsim setup` to a driveable sim |
95
+ | `/rnx-setup` | Get rnx connected to your React Native app — from `rnx setup` to a driveable sim |
96
96
  | `/rnx-test` | Run automated tests against your React Native app under rnx with Maestro YAML or Detox/Jest |
97
97
  | `/rnx-visual` | Pixel-level rendering comparison between rnx and native iOS — fonts, gradients, shadows, image fidelity |
98
98
 
@@ -117,8 +117,8 @@ commands in your own `sleep` or chain `do settle` "just to be safe"**.
117
117
 
118
118
  what this means:
119
119
 
120
- - `rnxsim do tap-id login` then `rnxsim find "Welcome"` Just Works™.
121
- - you only need `rnxsim do settle <seconds>` or `rnxsim wait idle
120
+ - `rnx do tap-id login` then `rnx find "Welcome"` Just Works™.
121
+ - you only need `rnx do settle <seconds>` or `rnx wait idle
122
122
  --max-ms <N>` when the CLI explicitly prints
123
123
  `⚠ auto-wait timed out after Nms — next command may see mid-animation
124
124
  state`, or when the transition you care about lasts longer than ~400 ms
@@ -136,35 +136,27 @@ what this means:
136
136
 
137
137
  ```sh
138
138
  bun dev # start everything
139
- rnxsim dev -- pnpm dev # wrap a bundler
140
- rnxsim open 8081 # load an app
141
- rnxsim describe # inspect the UI tree
139
+ rnx dev -- pnpm dev # wrap a bundler
140
+ rnx open 8081 # load an app
141
+ rnx describe # inspect the UI tree
142
142
  ```
143
143
 
144
144
  ### debugging
145
145
 
146
146
  ```sh
147
- rnxsim get errors 5 # recent console errors
148
- rnxsim get requests 5 # recent failed requests
149
- rnxsim debug snapshot before # capture state
150
- rnxsim debug diff before after # compare snapshots
151
- rnxsim debug state shell # runtime state dump
152
- ```
153
-
154
- ### testing
155
-
156
- ```sh
157
- rnxsim maestro test .maestro/ # run Maestro YAML flows
158
- rnxsim maestro generate "login" # generate and run a Maestro flow
159
- rnxsim detox # run Detox/Jest suites
147
+ rnx get errors 5 # recent console errors
148
+ rnx get requests 5 # recent failed requests
149
+ rnx debug snapshot before # capture state
150
+ rnx debug diff before after # compare snapshots
151
+ rnx debug state shell # runtime state dump
160
152
  ```
161
153
 
162
154
  ### inspection
163
155
 
164
156
  ```sh
165
- rnxsim describe # visible elements
166
- rnxsim find "Sign in" # find by text
167
- rnxsim find --testid loginButton # find by testID
168
- rnxsim do tap-text "Submit" # tap by text
169
- rnxsim do type "hello" # type text
157
+ rnx describe # visible elements
158
+ rnx find "Sign in" # find by text
159
+ rnx find --testid loginButton # find by testID
160
+ rnx do tap-text "Submit" # tap by text
161
+ rnx do type "hello" # type text
170
162
  ```