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
@@ -1,4 +1,4 @@
1
- // rnxsim camera drives the host-owned camera source. fixture video uses the
1
+ // rnx camera drives the host-owned camera source. fixture video uses the
2
2
  // same hidden video, canvas frame pump, ImageBitmap transfer, and
3
3
  // BarcodeDetector loop as a real device camera. `do scan` remains the narrow
4
4
  // synthetic special case for callers that have a payload string but no media.
@@ -22,13 +22,13 @@ const VIDEO_EXTENSIONS = new Set(['.m4v', '.mov', '.mp4', '.webm'])
22
22
 
23
23
  function printHelp() {
24
24
  console.log(`
25
- rnxsim camera — control the simulator camera source
25
+ rnx camera — control the simulator camera source
26
26
 
27
27
  usage:
28
- rnxsim camera play <file> [--loop] [--rate <number>]
29
- rnxsim camera stop
30
- rnxsim camera status [--json]
31
- rnxsim do scan <text> [--format <web-format>]
28
+ rnx camera play <file> [--loop] [--rate <number>]
29
+ rnx camera stop
30
+ rnx camera status [--json]
31
+ rnx do scan <text> [--format <web-format>]
32
32
 
33
33
  subcommands:
34
34
  play <file> replace the active camera source with a local video fixture
@@ -45,11 +45,11 @@ options:
45
45
  --port <p> WS bridge port (default: 7668)
46
46
 
47
47
  examples:
48
- rnxsim camera play ./fixtures/qr.mp4 --loop
49
- rnxsim camera play ./fixtures/document.webm --rate 2
50
- rnxsim camera status
51
- rnxsim camera stop
52
- rnxsim do scan "https://example.com" --format qr_code
48
+ rnx camera play ./fixtures/qr.mp4 --loop
49
+ rnx camera play ./fixtures/document.webm --rate 2
50
+ rnx camera status
51
+ rnx camera stop
52
+ rnx do scan "https://example.com" --format qr_code
53
53
  `)
54
54
  }
55
55
 
@@ -126,7 +126,7 @@ export async function runCamera(
126
126
  if (subcommand === 'scan') {
127
127
  const text = positional[1]
128
128
  if (!text) {
129
- console.error(' usage: rnxsim do scan <text>')
129
+ console.error(' usage: rnx do scan <text>')
130
130
  return 1
131
131
  }
132
132
  const formatFlag = args.indexOf('--format')
@@ -164,7 +164,7 @@ export async function runCamera(
164
164
  if (subcommand === 'play') {
165
165
  const input = positional[1]
166
166
  if (!input) {
167
- console.error(' usage: rnxsim camera play <file> [--loop] [--rate <number>]')
167
+ console.error(' usage: rnx camera play <file> [--loop] [--rate <number>]')
168
168
  return 1
169
169
  }
170
170
  const sourcePath = path.resolve(input)
@@ -35,13 +35,13 @@ function summarize(entries: SootsimCleanupEntry[]): string[] {
35
35
 
36
36
  function printHelp(): void {
37
37
  console.log(`
38
- rnxsim cleanup — inspect and reclaim local rnx disk usage
38
+ rnx cleanup — inspect and reclaim local rnx disk usage
39
39
 
40
40
  usage:
41
- rnxsim cleanup
42
- rnxsim cleanup --apply
43
- rnxsim cleanup --aggressive
44
- rnxsim cleanup --apply --aggressive
41
+ rnx cleanup
42
+ rnx cleanup --apply
43
+ rnx cleanup --aggressive
44
+ rnx cleanup --apply --aggressive
45
45
 
46
46
  The default is a read-only preview. --apply removes downloaded runtime archives,
47
47
  old runtimes outside a two-version rollback window, and disposable browser
@@ -151,7 +151,7 @@ export async function runCleanup(args: string[]): Promise<number> {
151
151
  console.log(` reclaimable now: ${formatSootsimBytes(plan.reclaimableBytes)}`)
152
152
  if (!apply) {
153
153
  console.log(
154
- ` preview only — run \`rnxsim cleanup --apply${
154
+ ` preview only — run \`rnx cleanup --apply${
155
155
  aggressive ? ' --aggressive' : ''
156
156
  }\` to remove these items`,
157
157
  )
@@ -19,12 +19,12 @@ interface PackageManifest {
19
19
  export async function runCompat(args: string[]): Promise<void> {
20
20
  if (args.includes('--help') || args.includes('-h')) {
21
21
  console.log(`
22
- rnxsim compat — check package compatibility
22
+ rnx compat — check package compatibility
23
23
 
24
24
  usage:
25
- rnxsim compat [package-name]
26
- rnxsim compat --json
27
- rnxsim compat --brief
25
+ rnx compat [package-name]
26
+ rnx compat --json
27
+ rnx compat --brief
28
28
 
29
29
  flags:
30
30
  --json machine-readable output
@@ -2,10 +2,10 @@ import { runTelemetry } from './telemetry'
2
2
 
3
3
  function printHelp(): void {
4
4
  console.log(`
5
- rnxsim config — manage local CLI preferences
5
+ rnx config — manage local CLI preferences
6
6
 
7
7
  usage:
8
- rnxsim config telemetry [on|off|status]
8
+ rnx config telemetry [on|off|status]
9
9
 
10
10
  environment:
11
11
  SOOTSIM_HINTS=off suppress CLI hints
@@ -201,7 +201,7 @@ export async function ensureBridgeForOpen(
201
201
  }
202
202
  if (lock && isDaemonLockfileFresh(lock)) {
203
203
  throw new Error(
204
- `rnx bridge lockfile is fresh (port ${lock.bridgePort}) but the bridge is not reachable. run \`rnxsim daemon restart\` or \`rnxsim daemon uninstall\`.`,
204
+ `rnx bridge lockfile is fresh (port ${lock.bridgePort}) but the bridge is not reachable. run \`rnx daemon restart\` or \`rnx daemon uninstall\`.`,
205
205
  )
206
206
  }
207
207
 
@@ -499,18 +499,18 @@ function parseOpenRuntimeConfig(args: string[]): SootSimConfig | undefined {
499
499
  if (args[i] === '--replace') {
500
500
  const raw = args[i + 1]
501
501
  if (!raw) {
502
- console.error(' rnxsim open: --replace expects <module>=<file>')
502
+ console.error(' rnx open: --replace expects <module>=<file>')
503
503
  process.exit(1)
504
504
  }
505
505
  const eqIndex = raw.indexOf('=')
506
506
  if (eqIndex <= 0 || eqIndex === raw.length - 1) {
507
- console.error(' rnxsim open: --replace expects <module>=<file>')
507
+ console.error(' rnx open: --replace expects <module>=<file>')
508
508
  process.exit(1)
509
509
  }
510
510
  const moduleName = raw.slice(0, eqIndex).trim()
511
511
  const filePath = normalizeReplacementPath(raw.slice(eqIndex + 1).trim())
512
512
  if (!fs.existsSync(filePath)) {
513
- console.error(` rnxsim open: replacement file not found: ${filePath}`)
513
+ console.error(` rnx open: replacement file not found: ${filePath}`)
514
514
  process.exit(1)
515
515
  }
516
516
  modules[moduleName] = { file: filePath }
@@ -524,7 +524,7 @@ function parseOpenRuntimeConfig(args: string[]): SootSimConfig | undefined {
524
524
  const raw = args[i + 1]
525
525
  const eqIndex = raw ? raw.indexOf('=') : -1
526
526
  if (!raw || eqIndex <= 0 || eqIndex === raw.length - 1) {
527
- console.error(' rnxsim open: --remap expects <host:port>=<host:port>')
527
+ console.error(' rnx open: --remap expects <host:port>=<host:port>')
528
528
  process.exit(1)
529
529
  }
530
530
  remap[raw.slice(0, eqIndex).trim()] = raw.slice(eqIndex + 1).trim()
@@ -1302,7 +1302,7 @@ async function maybeDescribeAfterOpen(wsPort: number, simId: string, args: strin
1302
1302
  console.log(
1303
1303
  ` app still loading: ${reason} (nodes: ${readyProbe.nodes}, targets: ${readyProbe.targets})`,
1304
1304
  )
1305
- console.log(' before interacting, run: rnxsim wait ready --max-ms 120000')
1305
+ console.log(' before interacting, run: rnx wait ready --max-ms 120000')
1306
1306
  }
1307
1307
  }
1308
1308
  const dumpOpts = { describe: true, verbose: false, filter: '' }
@@ -1387,8 +1387,8 @@ export async function runLinkCommand(args: string[], opts: ControlCommandOptions
1387
1387
  commandTimeoutMs: opts.timeoutMs,
1388
1388
  })
1389
1389
  if (parsed.positional.length !== 1) {
1390
- console.error(' rnxsim open: expected exactly one <url-or-route>')
1391
- console.error(' examples: rnxsim open /settings | rnxsim open myapp://settings')
1390
+ console.error(' rnx open: expected exactly one <url-or-route>')
1391
+ console.error(' examples: rnx open /settings | rnx open myapp://settings')
1392
1392
  process.exit(1)
1393
1393
  }
1394
1394
 
@@ -1396,7 +1396,7 @@ export async function runLinkCommand(args: string[], opts: ControlCommandOptions
1396
1396
  try {
1397
1397
  target = normalizeDeepLinkTarget(parsed.positional[0] ?? '')
1398
1398
  } catch (err) {
1399
- console.error(` rnxsim open: ${err instanceof Error ? err.message : String(err)}`)
1399
+ console.error(` rnx open: ${err instanceof Error ? err.message : String(err)}`)
1400
1400
  process.exit(1)
1401
1401
  }
1402
1402
 
@@ -1417,9 +1417,9 @@ export async function runLinkCommand(args: string[], opts: ControlCommandOptions
1417
1417
  } catch (err) {
1418
1418
  console.error(` link failed: ${err instanceof Error ? err.message : String(err)}`)
1419
1419
  await printBridgeFailureDiagnostics(bridge, {
1420
- errorsCommand: `rnxsim get errors 5${simHint}`,
1421
- warningsCommand: `rnxsim get warnings 5${simHint}`,
1422
- requestsCommand: `rnxsim get requests 5${simHint}`,
1420
+ errorsCommand: `rnx get errors 5${simHint}`,
1421
+ warningsCommand: `rnx get warnings 5${simHint}`,
1422
+ requestsCommand: `rnx get requests 5${simHint}`,
1423
1423
  })
1424
1424
  process.exit(1)
1425
1425
  } finally {
@@ -1458,12 +1458,12 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1458
1458
  const cdpPort = cdpPortArg ? Number(cdpPortArg) : undefined
1459
1459
  if (cdpPortArg && (!Number.isFinite(cdpPort) || cdpPort! <= 0)) {
1460
1460
  console.error(
1461
- ` rnxsim open: --cdp-port must be a positive port number, got "${cdpPortArg}"`,
1461
+ ` rnx open: --cdp-port must be a positive port number, got "${cdpPortArg}"`,
1462
1462
  )
1463
1463
  process.exit(1)
1464
1464
  }
1465
1465
  if (requestedProfileId && ephemeralProfile) {
1466
- console.error(' rnxsim open: --profile cannot be combined with --ephemeral')
1466
+ console.error(' rnx open: --profile cannot be combined with --ephemeral')
1467
1467
  process.exit(1)
1468
1468
  }
1469
1469
  const profileId = requestedProfileId ? ensureProfile(requestedProfileId).id : undefined
@@ -1471,7 +1471,7 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1471
1471
  const commandConfig = parseOpenRuntimeConfig(args)
1472
1472
  if (openInNewSim && parsed.simIdSource === 'flag') {
1473
1473
  console.error(
1474
- ' rnxsim open: --new, --profile, and --ephemeral cannot be combined with --sim',
1474
+ ' rnx open: --new, --profile, and --ephemeral cannot be combined with --sim',
1475
1475
  )
1476
1476
  process.exit(1)
1477
1477
  }
@@ -1480,7 +1480,7 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1480
1480
  if (shouldOpenAsDeepLink(target)) {
1481
1481
  if (openInNewSim) {
1482
1482
  console.error(
1483
- ' rnxsim open: deep links target the current app; remove --new, --profile, or --ephemeral',
1483
+ ' rnx open: deep links target the current app; remove --new, --profile, or --ephemeral',
1484
1484
  )
1485
1485
  process.exit(1)
1486
1486
  }
@@ -1500,7 +1500,7 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1500
1500
  }
1501
1501
  })()
1502
1502
  console.log(
1503
- ' that’s an rnxsim preview/build link — a full player page, not a driveable sim.',
1503
+ ' that’s an rnx preview/build link — a full player page, not a driveable sim.',
1504
1504
  )
1505
1505
  console.log(' opening it in your browser for viewing…')
1506
1506
  try {
@@ -1514,8 +1514,8 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1514
1514
  }
1515
1515
  console.log(
1516
1516
  isLocal
1517
- ? ' to drive it under the CLI, point `rnxsim open` at the app’s dev port instead (e.g. `rnxsim open 8081`).'
1518
- : ' the CLI can’t drive a remote preview (the engine only attaches to the local bridge from localhost). to drive the app, run it locally and `rnxsim open <port>`.',
1517
+ ? ' to drive it under the CLI, point `rnx open` at the app’s dev port instead (e.g. `rnx open 8081`).'
1518
+ : ' the CLI can’t 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>`.',
1519
1519
  )
1520
1520
  return
1521
1521
  }
@@ -1554,9 +1554,7 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1554
1554
  // native desktop surface. neither path opens the user's browser profile.
1555
1555
  const requestedDriverId = args.find((_, i) => args[i - 1] === '--driver') || ''
1556
1556
  if (requestedDriverId && !isDriverId(requestedDriverId)) {
1557
- console.error(
1558
- ` unknown driver "${requestedDriverId}" — run \`rnxsim list --drivers\``,
1559
- )
1557
+ console.error(` unknown driver "${requestedDriverId}" — run \`rnx list --drivers\``)
1560
1558
  process.exit(1)
1561
1559
  }
1562
1560
  const driverId: DriverId = isDriverId(requestedDriverId)
@@ -1564,7 +1562,7 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1564
1562
  : 'playwright'
1565
1563
  const driverHeadless = resolveDriverHeadless(args, driverId)
1566
1564
  if (cdpPort && driverId !== 'playwright') {
1567
- console.error(' rnxsim open: --cdp-port is only honored by the playwright driver')
1565
+ console.error(' rnx open: --cdp-port is only honored by the playwright driver')
1568
1566
  process.exit(1)
1569
1567
  }
1570
1568
 
@@ -1578,7 +1576,7 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1578
1576
  const hotFlag = args.includes('--hot')
1579
1577
  const noHmrFlag = args.includes('--no-hmr')
1580
1578
  if (hotFlag && noHmrFlag) {
1581
- console.error(' rnxsim open: --hot and --no-hmr cannot be combined')
1579
+ console.error(' rnx open: --hot and --no-hmr cannot be combined')
1582
1580
  process.exit(1)
1583
1581
  }
1584
1582
  const hotMode = hotFlag ? true : noHmrFlag ? false : requestedDriverId !== 'playwright'
@@ -1589,7 +1587,7 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1589
1587
  // shell last persisted, which silently skews browser comparisons.
1590
1588
  const deviceArg = args.find((_, i) => args[i - 1] === '--device')
1591
1589
  if (deviceArg && !(deviceArg in devices)) {
1592
- console.error(` rnxsim open: unknown device "${deviceArg}"`)
1590
+ console.error(` rnx open: unknown device "${deviceArg}"`)
1593
1591
  console.error(` known devices: ${listSelectableDeviceModels().join(', ')}`)
1594
1592
  process.exit(1)
1595
1593
  }
@@ -1602,9 +1600,7 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1602
1600
  const viewportArg = args.find((_, i) => args[i - 1] === '--viewport')
1603
1601
  const viewportMatch = viewportArg ? /^(\d+)x(\d+)$/.exec(viewportArg) : null
1604
1602
  if (viewportArg && !viewportMatch) {
1605
- console.error(
1606
- ` rnxsim open: --viewport must be <width>x<height>, got "${viewportArg}"`,
1607
- )
1603
+ console.error(` rnx open: --viewport must be <width>x<height>, got "${viewportArg}"`)
1608
1604
  process.exit(1)
1609
1605
  }
1610
1606
  const explicitViewport = viewportMatch
@@ -1719,9 +1715,9 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1719
1715
  ` open failed: ${err instanceof Error ? err.message : String(err)}`,
1720
1716
  )
1721
1717
  await printBridgeFailureDiagnostics(bridge, {
1722
- errorsCommand: `rnxsim get errors 5${simHint}`,
1723
- warningsCommand: `rnxsim get warnings 5${simHint}`,
1724
- requestsCommand: `rnxsim get requests 5${simHint}`,
1718
+ errorsCommand: `rnx get errors 5${simHint}`,
1719
+ warningsCommand: `rnx get warnings 5${simHint}`,
1720
+ requestsCommand: `rnx get requests 5${simHint}`,
1725
1721
  })
1726
1722
  process.exit(1)
1727
1723
  }
@@ -1774,7 +1770,7 @@ export async function runOpenCommand(args: string[], opts: ControlCommandOptions
1774
1770
 
1775
1771
  const driver = getDriver(driverId)
1776
1772
  if (!driver) {
1777
- console.error(` unknown driver "${driverId}" — run \`rnxsim list --drivers\``)
1773
+ console.error(` unknown driver "${driverId}" — run \`rnx list --drivers\``)
1778
1774
  process.exit(1)
1779
1775
  }
1780
1776
  const connectWait = resolveDriverConnectWaitOptions()
@@ -1860,7 +1856,7 @@ async function runUseLikeCommand(args: string[], opts: ControlCommandOptions = {
1860
1856
  console.error(
1861
1857
  ` refused: ${target.id} is locked by the active user (${secs}s) — that's a live human tab`,
1862
1858
  )
1863
- console.error(` run \`rnxsim open --new\` for a fresh investigation sim`)
1859
+ console.error(` run \`rnx open --new\` for a fresh investigation sim`)
1864
1860
  process.exit(1)
1865
1861
  }
1866
1862
  if (!force) {
@@ -1871,7 +1867,7 @@ async function runUseLikeCommand(args: string[], opts: ControlCommandOptions = {
1871
1867
  ` refused: ${target.id} is leased by ${target.lockedBy} (${secs}s)`,
1872
1868
  )
1873
1869
  console.error(
1874
- ` \`sootsim use ${target.id} --force\` to take it, or \`rnxsim open --new\` for a fresh sim`,
1870
+ ` \`sootsim use ${target.id} --force\` to take it, or \`rnx open --new\` for a fresh sim`,
1875
1871
  )
1876
1872
  process.exit(1)
1877
1873
  }
@@ -1882,9 +1878,9 @@ async function runUseLikeCommand(args: string[], opts: ControlCommandOptions = {
1882
1878
  } catch (err) {
1883
1879
  console.error(` use failed: ${err instanceof Error ? err.message : String(err)}`)
1884
1880
  await printBridgeFailureDiagnostics(bridge, {
1885
- errorsCommand: `rnxsim get errors 5${simHint}`,
1886
- warningsCommand: `rnxsim get warnings 5${simHint}`,
1887
- requestsCommand: `rnxsim get requests 5${simHint}`,
1881
+ errorsCommand: `rnx get errors 5${simHint}`,
1882
+ warningsCommand: `rnx get warnings 5${simHint}`,
1883
+ requestsCommand: `rnx get requests 5${simHint}`,
1888
1884
  })
1889
1885
  process.exit(1)
1890
1886
  }
@@ -1930,9 +1926,7 @@ export async function runClaimCommand(args: string[], opts: ControlCommandOption
1930
1926
  if (err instanceof BridgeSimLockedError) {
1931
1927
  const secs = Math.max(0, Math.round(err.lock.expiresInMs / 1000))
1932
1928
  console.error(` claim failed: locked by ${err.lock.by} for ${secs}s more`)
1933
- console.error(
1934
- ` use --force to take it, or \`rnxsim open --new\` for a fresh sim`,
1935
- )
1929
+ console.error(` use --force to take it, or \`rnx open --new\` for a fresh sim`)
1936
1930
  process.exit(1)
1937
1931
  }
1938
1932
  console.error(` claim failed: ${err instanceof Error ? err.message : String(err)}`)
@@ -2147,9 +2141,9 @@ export async function runCloseCommand(args: string[], opts: ControlCommandOption
2147
2141
  } catch (err) {
2148
2142
  console.error(` close failed: ${err instanceof Error ? err.message : String(err)}`)
2149
2143
  await printBridgeFailureDiagnostics(bridge, {
2150
- errorsCommand: `rnxsim get errors 5${simHint}`,
2151
- warningsCommand: `rnxsim get warnings 5${simHint}`,
2152
- requestsCommand: `rnxsim get requests 5${simHint}`,
2144
+ errorsCommand: `rnx get errors 5${simHint}`,
2145
+ warningsCommand: `rnx get warnings 5${simHint}`,
2146
+ requestsCommand: `rnx get requests 5${simHint}`,
2153
2147
  })
2154
2148
  process.exit(1)
2155
2149
  }
@@ -214,9 +214,9 @@ function printNoCdp(cdpPort: number) {
214
214
  console.error(' so you can scroll/navigate while profiling):')
215
215
  console.error('')
216
216
  console.error(
217
- ` rnxsim open <metro-port> --new --driver playwright --cdp-port ${cdpPort}`,
217
+ ` rnx open <metro-port> --new --driver playwright --cdp-port ${cdpPort}`,
218
218
  )
219
- console.error(` rnxsim perf cpu --cdp-port ${cdpPort} --match <metro-port>`)
219
+ console.error(` rnx perf cpu --cdp-port ${cdpPort} --match <metro-port>`)
220
220
  console.error('')
221
221
  console.error(' or launch a standalone CDP Chrome (not bridge-driveable):')
222
222
  console.error('')
@@ -142,8 +142,8 @@ function renderLauncherScript(
142
142
  const stdout = shellSingleQuote(logDir.stdout)
143
143
  const stderr = shellSingleQuote(logDir.stderr)
144
144
  return `#!/bin/sh
145
- # SootSim Daemon launcher — auto-generated by 'rnxsim setup'.
146
- # launchd spawns this; we exec the real rnxsim invocation in place so
145
+ # SootSim Daemon launcher — auto-generated by 'rnx setup'.
146
+ # launchd spawns this; we exec the real rnx invocation in place so
147
147
  # launchd tracks the daemon process, not the shell wrapper.
148
148
  #
149
149
  # stdout: ${logDir.stdout}
@@ -329,7 +329,7 @@ export async function daemonInstall({ port, force }: { port: number; force: bool
329
329
  const path = macPlistPath()
330
330
  if (existsSync(path) && !force) {
331
331
  console.log(` already installed at ${path}`)
332
- console.log(` pass --force to overwrite, or use 'rnxsim daemon restart' to reload`)
332
+ console.log(` pass --force to overwrite, or use 'rnx daemon restart' to reload`)
333
333
  return
334
334
  }
335
335
  mkdirSync(dirname(path), { recursive: true })
@@ -379,7 +379,7 @@ export async function daemonInstall({ port, force }: { port: number; force: bool
379
379
  throw new Error(
380
380
  `launchctl bootstrap failed: ${attempt.reason}` +
381
381
  (first !== attempt.reason ? ` (initial: ${first})` : '') +
382
- ` — try \`rnxsim daemon uninstall\` then retry, or reboot if launchd state is stuck.`,
382
+ ` — try \`rnx daemon uninstall\` then retry, or reboot if launchd state is stuck.`,
383
383
  )
384
384
  }
385
385
  }
@@ -420,7 +420,7 @@ export async function daemonInstall({ port, force }: { port: number; force: bool
420
420
  const path = linuxUnitPath()
421
421
  if (existsSync(path) && !force) {
422
422
  console.log(` already installed at ${path}`)
423
- console.log(` pass --force to overwrite, or use 'rnxsim daemon restart' to reload`)
423
+ console.log(` pass --force to overwrite, or use 'rnx daemon restart' to reload`)
424
424
  return
425
425
  }
426
426
  mkdirSync(dirname(path), { recursive: true })
@@ -444,7 +444,7 @@ export async function daemonInstall({ port, force }: { port: number; force: bool
444
444
  const msg = (enable.stderr || enable.stdout || '').trim()
445
445
  throw new Error(
446
446
  `systemctl enable --now failed${msg ? `: ${msg}` : ''}` +
447
- ` — try \`rnxsim daemon uninstall\` then retry.`,
447
+ ` — try \`rnx daemon uninstall\` then retry.`,
448
448
  )
449
449
  }
450
450
  const isActive = spawnSync('systemctl', ['--user', 'is-active', SERVICE_NAME_LINUX], {
@@ -492,7 +492,7 @@ export async function daemonInstall({ port, force }: { port: number; force: bool
492
492
  }
493
493
 
494
494
  console.error(` background daemon is not supported on ${process.platform}`)
495
- console.error(` run 'rnxsim serve' in a persistent shell instead`)
495
+ console.error(` run 'rnx serve' in a persistent shell instead`)
496
496
  process.exit(1)
497
497
  }
498
498
 
@@ -629,8 +629,8 @@ function printBridgeLiveness() {
629
629
  }
630
630
  console.log(
631
631
  lock
632
- ? ' bridge: NOT responding — stale lockfile; check `rnxsim daemon logs`'
633
- : ' bridge: NOT responding — no lockfile; check `rnxsim daemon logs`',
632
+ ? ' bridge: NOT responding — stale lockfile; check `rnx daemon logs`'
633
+ : ' bridge: NOT responding — no lockfile; check `rnx daemon logs`',
634
634
  )
635
635
  }
636
636
 
@@ -681,7 +681,7 @@ async function daemonRestart() {
681
681
  if (process.platform === 'darwin') {
682
682
  const path = macPlistPath()
683
683
  if (!existsSync(path)) {
684
- console.error(' daemon not registered — run `rnxsim setup`')
684
+ console.error(' daemon not registered — run `rnx setup`')
685
685
  process.exit(1)
686
686
  }
687
687
  const res = spawnSync(
@@ -699,7 +699,7 @@ async function daemonRestart() {
699
699
  if (process.platform === 'linux') {
700
700
  const path = linuxUnitPath()
701
701
  if (!existsSync(path)) {
702
- console.error(' daemon not registered — run `rnxsim setup`')
702
+ console.error(' daemon not registered — run `rnx setup`')
703
703
  process.exit(1)
704
704
  }
705
705
  const res = spawnSync('systemctl', ['--user', 'restart', SERVICE_NAME_LINUX], {
@@ -721,7 +721,7 @@ async function daemonStart() {
721
721
  if (process.platform === 'darwin') {
722
722
  const path = macPlistPath()
723
723
  if (!existsSync(path)) {
724
- console.error(' daemon not registered — run `rnxsim setup`')
724
+ console.error(' daemon not registered — run `rnx setup`')
725
725
  process.exit(1)
726
726
  }
727
727
  const res = spawnSync(
@@ -739,7 +739,7 @@ async function daemonStart() {
739
739
  if (process.platform === 'linux') {
740
740
  const path = linuxUnitPath()
741
741
  if (!existsSync(path)) {
742
- console.error(' daemon not registered — run `rnxsim setup`')
742
+ console.error(' daemon not registered — run `rnx setup`')
743
743
  process.exit(1)
744
744
  }
745
745
  const res = spawnSync('systemctl', ['--user', 'start', SERVICE_NAME_LINUX], {
@@ -814,7 +814,7 @@ async function daemonLogs(rest: string[]) {
814
814
  const present = [out, err].filter((p) => existsSync(p))
815
815
  if (present.length === 0) {
816
816
  console.error(
817
- ` no daemon logs yet at ${LOG_DIR} — run \`rnxsim setup\` to install the daemon`,
817
+ ` no daemon logs yet at ${LOG_DIR} — run \`rnx setup\` to install the daemon`,
818
818
  )
819
819
  process.exit(1)
820
820
  }
@@ -57,10 +57,10 @@ const SHELL_TRACE_HOOK_GLOBAL = '__sootsimDebugAnimation'
57
57
 
58
58
  function printHelp() {
59
59
  console.log(`
60
- rnxsim debug — drive __sootsimDebug from the terminal
60
+ rnx debug — drive __sootsimDebug from the terminal
61
61
 
62
62
  usage:
63
- rnxsim debug <subcommand> [args]
63
+ rnx debug <subcommand> [args]
64
64
 
65
65
  subcommands:
66
66
  enable <channels> turn on one or more debug channels
@@ -122,16 +122,16 @@ options:
122
122
  --json compact JSON output for pipelines
123
123
 
124
124
  examples:
125
- rnxsim debug enable sheets,portals
126
- rnxsim debug snapshot before
127
- rnxsim debug snapshot after
128
- rnxsim debug diff before after
129
- rnxsim debug image-audit per-image source pixels per device pixel
130
- rnxsim debug find sheets | jq '.[] | select(.translateY != null)'
131
- rnxsim debug trace shell on 240
132
- rnxsim debug trace shell 120
133
- rnxsim debug trace anim on 3 240
134
- rnxsim debug trace anim 3 60
125
+ rnx debug enable sheets,portals
126
+ rnx debug snapshot before
127
+ rnx debug snapshot after
128
+ rnx debug diff before after
129
+ rnx debug image-audit per-image source pixels per device pixel
130
+ rnx debug find sheets | jq '.[] | select(.translateY != null)'
131
+ rnx debug trace shell on 240
132
+ rnx debug trace shell 120
133
+ rnx debug trace anim on 3 240
134
+ rnx debug trace anim 3 60
135
135
  `)
136
136
  }
137
137
 
@@ -436,7 +436,7 @@ export async function runDebug(args: string[], opts: DebugOptions) {
436
436
  const channels = parseChannelList(rest[0])
437
437
  if (channels.length === 0) {
438
438
  console.error(
439
- ` usage: rnxsim debug enable <channel[,channel,...]>\n known: ${KNOWN_CHANNELS.join(', ')}`,
439
+ ` usage: rnx debug enable <channel[,channel,...]>\n known: ${KNOWN_CHANNELS.join(', ')}`,
440
440
  )
441
441
  process.exit(1)
442
442
  }
@@ -455,7 +455,7 @@ export async function runDebug(args: string[], opts: DebugOptions) {
455
455
  case 'toggle': {
456
456
  const channel = rest[0]
457
457
  if (!channel) {
458
- console.error(' usage: rnxsim debug toggle <channel>')
458
+ console.error(' usage: rnx debug toggle <channel>')
459
459
  process.exit(1)
460
460
  }
461
461
  const result = await call(
@@ -515,7 +515,7 @@ export async function runDebug(args: string[], opts: DebugOptions) {
515
515
  const a = rest[0]
516
516
  const b = rest[1]
517
517
  if (!a || !b) {
518
- console.error(' usage: rnxsim debug diff <labelA> <labelB>')
518
+ console.error(' usage: rnx debug diff <labelA> <labelB>')
519
519
  process.exit(1)
520
520
  }
521
521
  // Maps don't serialize — project added/removed/changed arrays only
@@ -577,7 +577,7 @@ export async function runDebug(args: string[], opts: DebugOptions) {
577
577
  const result = await inspectDebugFind(bridge, target)
578
578
  console.log(fmt(result, pretty))
579
579
  } else {
580
- console.error(' usage: rnxsim debug find <sheets|portals|boundaries>')
580
+ console.error(' usage: rnx debug find <sheets|portals|boundaries>')
581
581
  process.exit(1)
582
582
  }
583
583
  break
@@ -594,7 +594,7 @@ export async function runDebug(args: string[], opts: DebugOptions) {
594
594
  const sub = rest[1]
595
595
  if (!sub || sub === '--help' || sub === '-h') {
596
596
  console.error(
597
- ' usage: rnxsim debug trace anim <on|off|status|clear|<id>> [id|limit]',
597
+ ' usage: rnx debug trace anim <on|off|status|clear|<id>> [id|limit]',
598
598
  )
599
599
  process.exit(1)
600
600
  }
@@ -641,7 +641,7 @@ export async function runDebug(args: string[], opts: DebugOptions) {
641
641
  break
642
642
  }
643
643
  if (traceTarget !== 'shell') {
644
- console.error(' usage: rnxsim debug trace <shell|anim> [args]')
644
+ console.error(' usage: rnx debug trace <shell|anim> [args]')
645
645
  process.exit(1)
646
646
  }
647
647
  if (!traceCommand || /^[0-9]+$/.test(traceCommand)) {
@@ -672,7 +672,7 @@ export async function runDebug(args: string[], opts: DebugOptions) {
672
672
  break
673
673
  }
674
674
  console.error(
675
- ' usage: rnxsim debug trace shell [on [limit]|off|status|clear|recentLimit]',
675
+ ' usage: rnx debug trace shell [on [limit]|off|status|clear|recentLimit]',
676
676
  )
677
677
  process.exit(1)
678
678
  }
@@ -707,9 +707,9 @@ export async function runDebug(args: string[], opts: DebugOptions) {
707
707
  } catch (err: any) {
708
708
  console.error(` debug failed: ${err.message}`)
709
709
  await printBridgeFailureDiagnostics(bridge, {
710
- errorsCommand: `rnxsim get errors 5${simHint}`,
711
- warningsCommand: `rnxsim get warnings 5${simHint}`,
712
- requestsCommand: `rnxsim get requests 5${simHint}`,
710
+ errorsCommand: `rnx get errors 5${simHint}`,
711
+ warningsCommand: `rnx get warnings 5${simHint}`,
712
+ requestsCommand: `rnx get requests 5${simHint}`,
713
713
  })
714
714
  process.exit(1)
715
715
  } finally {
@@ -8,11 +8,11 @@ interface DesktopOptions {
8
8
 
9
9
  function printHelp(): void {
10
10
  console.log(`
11
- rnxsim desktop — launch or install the desktop companion
11
+ rnx desktop — launch or install the desktop companion
12
12
 
13
13
  usage:
14
- rnxsim desktop [options]
15
- rnxsim desktop install [options]
14
+ rnx desktop [options]
15
+ rnx desktop install [options]
16
16
 
17
17
  options:
18
18
  --port <number> connect to a running dev server on this port