rnxsim 0.1.375 → 0.1.377

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 (295) hide show
  1. package/README.md +28 -25
  2. package/cli/app-config.ts +9 -12
  3. package/cli/app-fonts.ts +3 -3
  4. package/cli/app-project.ts +8 -8
  5. package/cli/auth.ts +7 -9
  6. package/cli/bin.ts +16 -31
  7. package/cli/bridge-flow-runner.ts +3 -3
  8. package/cli/browser-backend.ts +44 -0
  9. package/cli/command-contract.ts +221 -0
  10. package/cli/command-registry.ts +291 -0
  11. package/cli/commands/agent-wrapper.ts +2 -2
  12. package/cli/commands/app-fonts.ts +2 -2
  13. package/cli/commands/assert.ts +3 -3
  14. package/cli/commands/auth.ts +1 -1
  15. package/cli/commands/box/cloud-box.ts +1 -1
  16. package/cli/commands/box/plane-share.ts +2 -2
  17. package/cli/commands/box.ts +4 -6
  18. package/cli/commands/compat.ts +1 -1
  19. package/cli/commands/config.ts +2 -2
  20. package/cli/commands/control.ts +42 -28
  21. package/cli/commands/cpu-profile.ts +7 -7
  22. package/cli/commands/daemon-mac-app.ts +7 -7
  23. package/cli/commands/daemon.ts +10 -10
  24. package/cli/commands/debug.ts +11 -11
  25. package/cli/commands/detox.ts +13 -13
  26. package/cli/commands/diagnose.ts +6 -6
  27. package/cli/commands/do-chain.ts +1 -2
  28. package/cli/commands/electron.ts +1 -3
  29. package/cli/commands/film.ts +3 -3
  30. package/cli/commands/flow.ts +43 -43
  31. package/cli/commands/inspect/count.ts +1 -1
  32. package/cli/commands/inspect/describe.ts +1 -1
  33. package/cli/commands/inspect/env.ts +2 -2
  34. package/cli/commands/inspect/get-layout.ts +1 -1
  35. package/cli/commands/inspect/keyboard.ts +1 -1
  36. package/cli/commands/inspect/list.ts +1 -1
  37. package/cli/commands/inspect/memory.ts +1 -1
  38. package/cli/commands/inspect/resolve-target.ts +1 -1
  39. package/cli/commands/inspect/screens.ts +1 -1
  40. package/cli/commands/inspect/tree.ts +1 -1
  41. package/cli/commands/inspect/url.ts +1 -1
  42. package/cli/commands/inspect/wait-event.ts +5 -5
  43. package/cli/commands/inspect.ts +34 -34
  44. package/cli/commands/install-desktop.ts +3 -3
  45. package/cli/commands/login.ts +6 -6
  46. package/cli/commands/maestro-generate.ts +5 -5
  47. package/cli/commands/maestro.ts +5 -5
  48. package/cli/commands/profile.ts +1 -1
  49. package/cli/commands/record.ts +9 -9
  50. package/cli/commands/runtime.ts +18 -18
  51. package/cli/commands/screenshot-command.ts +1 -1
  52. package/cli/commands/screenshot-layers.ts +5 -5
  53. package/cli/commands/screenshot-mode.ts +1 -1
  54. package/cli/commands/screenshot.ts +8 -8
  55. package/cli/commands/screenshots-capture.ts +5 -5
  56. package/cli/commands/serve.ts +3 -3
  57. package/cli/commands/setup.ts +20 -12
  58. package/cli/commands/skills.ts +5 -5
  59. package/cli/commands/slides.ts +1 -1
  60. package/cli/commands/telemetry.ts +1 -1
  61. package/cli/commands/three-mode.ts +1 -1
  62. package/cli/commands/timeline.ts +8 -8
  63. package/cli/commands/upgrade.ts +116 -131
  64. package/cli/commands/upload.ts +12 -12
  65. package/cli/commands/version.ts +7 -7
  66. package/cli/commands/what-happened.ts +9 -9
  67. package/cli/current-sim.ts +3 -3
  68. package/cli/desktop-companion.ts +1 -1
  69. package/cli/drivers/playwright.ts +9 -9
  70. package/cli/drivers/registry.ts +1 -1
  71. package/cli/drivers/types.ts +1 -1
  72. package/cli/flow-file.ts +2 -2
  73. package/cli/flow-session.ts +1 -1
  74. package/cli/help-core.ts +136 -0
  75. package/cli/help.ts +17 -53
  76. package/cli/hints.ts +5 -5
  77. package/cli/inspect-notice-state.ts +1 -1
  78. package/cli/maestro-js.ts +1 -1
  79. package/cli/outbound-endpoints.ts +23 -5
  80. package/cli/parse-args.ts +19 -66
  81. package/cli/recording-access.ts +1 -1
  82. package/cli/registry.ts +1 -0
  83. package/cli/run-registry.ts +1 -1
  84. package/cli/run-rnx-core.ts +148 -0
  85. package/cli/run-rnx.ts +6 -9
  86. package/cli/runtime-notes.ts +3 -3
  87. package/cli/standalone.ts +4 -0
  88. package/cli/ws-bridge.ts +8 -8
  89. package/detox/config-loader.ts +2 -2
  90. package/detox/index.ts +8 -8
  91. package/detox/jest-preset.cjs +1 -1
  92. package/detox/navigation.ts +2 -2
  93. package/dist-lib/agent-daemon-client.cjs +5 -5
  94. package/dist-lib/agent-events.cjs +1 -1
  95. package/dist-lib/agent-identity.cjs +2 -2
  96. package/dist-lib/agent-sessions.cjs +10 -10
  97. package/dist-lib/attached-projects.cjs +6 -6
  98. package/dist-lib/auth/shared-session.cjs +6 -6
  99. package/dist-lib/backend-origin.cjs +1 -1
  100. package/dist-lib/beta.cjs +1 -1
  101. package/dist-lib/beta.mjs +1 -1
  102. package/dist-lib/bridge-constants.cjs +1 -1
  103. package/dist-lib/bridge-contract-input.cjs +1 -1
  104. package/dist-lib/bridge-contract-input.mjs +1 -1
  105. package/dist-lib/bridge-contract.cjs +1 -1
  106. package/dist-lib/bridge-contract.mjs +1 -1
  107. package/dist-lib/cli-constants.cjs +1 -1
  108. package/dist-lib/config.cjs +25 -25
  109. package/dist-lib/detox/index.cjs +9 -9
  110. package/dist-lib/detox/jest-preset.cjs +1 -1
  111. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  112. package/dist-lib/home-paths.cjs +29 -29
  113. package/dist-lib/host/bridge-host.cjs +274 -181
  114. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  115. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  116. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  117. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  118. package/dist-lib/host/websocket-proxy.cjs +1 -1
  119. package/dist-lib/index.cjs +14 -14
  120. package/dist-lib/jump-to-source-babel.cjs +1 -1
  121. package/dist-lib/menu.cjs +1 -1
  122. package/dist-lib/menu.mjs +1 -1
  123. package/dist-lib/metro-production-bundle.cjs +1 -1
  124. package/dist-lib/metro-production-bundle.mjs +1 -1
  125. package/dist-lib/metro.cjs +8 -8
  126. package/dist-lib/profiles.cjs +12 -12
  127. package/dist-lib/public-brand.cjs +1 -1
  128. package/dist-lib/react-native-host-modules.cjs +1 -1
  129. package/dist-lib/react-native-host-modules.mjs +1 -1
  130. package/dist-lib/render-mode.cjs +1 -1
  131. package/dist-lib/scripts/dev-server-scanner.cjs +25 -11
  132. package/dist-lib/sdk.cjs +1 -1
  133. package/dist-lib/sdk.mjs +1 -1
  134. package/dist-lib/skills.cjs +470 -322
  135. package/dist-lib/vite.cjs +9 -9
  136. package/package.json +4 -11
  137. package/scripts/dev-server-scanner.ts +25 -7
  138. package/scripts/optional-demo-registry.ts +1 -1
  139. package/skills/contrast/SKILL.md +3 -3
  140. package/skills/rnx-debug/SKILL.md +1 -1
  141. package/skills/rnx-test/SKILL.md +2 -2
  142. package/src/agent-identity.ts +1 -1
  143. package/src/agent-sessions.ts +7 -5
  144. package/src/cli-version.ts +12 -4
  145. package/src/config.ts +26 -28
  146. package/src/disk-cleanup.ts +11 -11
  147. package/src/home-paths.ts +28 -28
  148. package/src/host/bridge-host.ts +16 -16
  149. package/src/metro-plugin.ts +2 -2
  150. package/src/profiles.ts +2 -2
  151. package/src/runtime-assets.ts +7 -7
  152. package/src/runtime-delivery.ts +13 -13
  153. package/src/screenshots/orchestrate.ts +1 -1
  154. package/src/screenshots/schema.ts +2 -2
  155. package/src/skills/builtin/a11y-review.ts +2 -2
  156. package/src/skills/builtin/compat-check.ts +2 -2
  157. package/src/skills/builtin/maestro-test.ts +2 -2
  158. package/src/skills/builtin/perf-profile.ts +2 -2
  159. package/src/skills/builtin/screenshot-all.ts +2 -2
  160. package/src/skills/builtin/visual-diff.ts +2 -2
  161. package/src/skills/registry.ts +8 -8
  162. package/src/skills/types.ts +1 -1
  163. package/src/vite-plugin-one.ts +3 -3
  164. package/src/vite-plugin.ts +15 -2
  165. package/dist-cli/bin.js +0 -15
  166. package/dist-cli/chunks/agent-JJN7U6FR.js +0 -48
  167. package/dist-cli/chunks/agent-wrapper-AVVUJ3WF.js +0 -17
  168. package/dist-cli/chunks/app-fonts-QJ22CNAZ.js +0 -4
  169. package/dist-cli/chunks/assert-PZZKIY3K.js +0 -49
  170. package/dist-cli/chunks/auth-5AVDJO33.js +0 -12
  171. package/dist-cli/chunks/beta-PFRGP266.js +0 -4
  172. package/dist-cli/chunks/box-ILC2O7ZO.js +0 -1730
  173. package/dist-cli/chunks/camera-J3V62PP7.js +0 -33
  174. package/dist-cli/chunks/chunk-25KRGDZT.js +0 -4
  175. package/dist-cli/chunks/chunk-2BRBFLWA.js +0 -38
  176. package/dist-cli/chunks/chunk-2GXNAZHB.js +0 -74
  177. package/dist-cli/chunks/chunk-2IUMRRYV.js +0 -7
  178. package/dist-cli/chunks/chunk-4ALPWIMP.js +0 -10
  179. package/dist-cli/chunks/chunk-4CEZZKRY.js +0 -4
  180. package/dist-cli/chunks/chunk-4EUKOIAV.js +0 -4
  181. package/dist-cli/chunks/chunk-4IKE4YUS.js +0 -32
  182. package/dist-cli/chunks/chunk-4ZXR2M3D.js +0 -4
  183. package/dist-cli/chunks/chunk-5CGJFU27.js +0 -7
  184. package/dist-cli/chunks/chunk-5HHWECGT.js +0 -4
  185. package/dist-cli/chunks/chunk-5PZVYF42.js +0 -312
  186. package/dist-cli/chunks/chunk-7NCPUZ52.js +0 -27
  187. package/dist-cli/chunks/chunk-7OSIJCBR.js +0 -107
  188. package/dist-cli/chunks/chunk-AQ5TMOAI.js +0 -4
  189. package/dist-cli/chunks/chunk-BQCEI37V.js +0 -5
  190. package/dist-cli/chunks/chunk-C6B5FOP3.js +0 -4
  191. package/dist-cli/chunks/chunk-CCMZSHJB.js +0 -71
  192. package/dist-cli/chunks/chunk-CX7VCKAT.js +0 -14
  193. package/dist-cli/chunks/chunk-DQUPSAHE.js +0 -4
  194. package/dist-cli/chunks/chunk-DSD2UBZI.js +0 -4
  195. package/dist-cli/chunks/chunk-EWPAI4MO.js +0 -7
  196. package/dist-cli/chunks/chunk-EZXV6U2N.js +0 -497
  197. package/dist-cli/chunks/chunk-F5F7FIPM.js +0 -6
  198. package/dist-cli/chunks/chunk-FUTYK55H.js +0 -30
  199. package/dist-cli/chunks/chunk-FW6AN7I2.js +0 -3
  200. package/dist-cli/chunks/chunk-FZDRA7Z4.js +0 -4
  201. package/dist-cli/chunks/chunk-GDLE4NIV.js +0 -4
  202. package/dist-cli/chunks/chunk-GEX7RVHY.js +0 -5
  203. package/dist-cli/chunks/chunk-H4MYYOYJ.js +0 -5
  204. package/dist-cli/chunks/chunk-HEV7BAPE.js +0 -11
  205. package/dist-cli/chunks/chunk-HNDWYCND.js +0 -506
  206. package/dist-cli/chunks/chunk-HNPHODBD.js +0 -4
  207. package/dist-cli/chunks/chunk-HWDVC6YA.js +0 -11
  208. package/dist-cli/chunks/chunk-JOHJZUGG.js +0 -4
  209. package/dist-cli/chunks/chunk-JWUDT4QK.js +0 -5
  210. package/dist-cli/chunks/chunk-K7QQWKGE.js +0 -4
  211. package/dist-cli/chunks/chunk-LAOKTKT4.js +0 -4
  212. package/dist-cli/chunks/chunk-LD7I266X.js +0 -24
  213. package/dist-cli/chunks/chunk-LMHBU5LZ.js +0 -4
  214. package/dist-cli/chunks/chunk-LSOGXSDV.js +0 -535
  215. package/dist-cli/chunks/chunk-MP2GPO4T.js +0 -4
  216. package/dist-cli/chunks/chunk-MXJ2UWRV.js +0 -4
  217. package/dist-cli/chunks/chunk-OJNKRIZF.js +0 -15
  218. package/dist-cli/chunks/chunk-PBOWUNXO.js +0 -4
  219. package/dist-cli/chunks/chunk-PNRJFHX4.js +0 -4
  220. package/dist-cli/chunks/chunk-QJQOK34O.js +0 -28
  221. package/dist-cli/chunks/chunk-RLCQLMFF.js +0 -142
  222. package/dist-cli/chunks/chunk-S65CK3RI.js +0 -9
  223. package/dist-cli/chunks/chunk-SWBUNMQS.js +0 -4
  224. package/dist-cli/chunks/chunk-SXBFGGAM.js +0 -4
  225. package/dist-cli/chunks/chunk-T4ISWS5H.js +0 -4
  226. package/dist-cli/chunks/chunk-TPPVAA7Z.js +0 -5
  227. package/dist-cli/chunks/chunk-USM3P74H.js +0 -4
  228. package/dist-cli/chunks/chunk-V4EJJHF5.js +0 -4
  229. package/dist-cli/chunks/chunk-V7RGRZOL.js +0 -423
  230. package/dist-cli/chunks/chunk-XUBV77WH.js +0 -130
  231. package/dist-cli/chunks/chunk-XYSDYGKC.js +0 -4
  232. package/dist-cli/chunks/chunk-YNHRSDVG.js +0 -5
  233. package/dist-cli/chunks/chunk-YX52RJKO.js +0 -4
  234. package/dist-cli/chunks/chunk-Z5O5H4O7.js +0 -99
  235. package/dist-cli/chunks/chunk-Z6LOIW46.js +0 -7
  236. package/dist-cli/chunks/chunk-ZXFVBYJY.js +0 -5
  237. package/dist-cli/chunks/cleanup-KPUW4SFK.js +0 -25
  238. package/dist-cli/chunks/cli-version-APGT6GAT.js +0 -4
  239. package/dist-cli/chunks/compat-XXRFD2TW.js +0 -23
  240. package/dist-cli/chunks/config-DDMFDQ7F.js +0 -13
  241. package/dist-cli/chunks/connect-IPG47YXM.js +0 -4
  242. package/dist-cli/chunks/control-O22Z3UJ5.js +0 -4
  243. package/dist-cli/chunks/daemon-PADUIMJV.js +0 -4
  244. package/dist-cli/chunks/debug-MYIP46TM.js +0 -200
  245. package/dist-cli/chunks/desktop-ENFFBQAA.js +0 -31
  246. package/dist-cli/chunks/detox-J5WVK6OH.js +0 -52
  247. package/dist-cli/chunks/device-RAVQVL75.js +0 -18
  248. package/dist-cli/chunks/diagnose-PJMPXKJY.js +0 -43
  249. package/dist-cli/chunks/disk-cleanup-YLAY445J.js +0 -4
  250. package/dist-cli/chunks/do-chain-UBE7GIOU.js +0 -5
  251. package/dist-cli/chunks/drivers-ZFNX3T5Z.js +0 -4
  252. package/dist-cli/chunks/env-Y5XJSNRD.js +0 -4
  253. package/dist-cli/chunks/film-W3V6VURB.js +0 -74
  254. package/dist-cli/chunks/flow-VMLI7BYM.js +0 -4
  255. package/dist-cli/chunks/help-PKZCWHJJ.js +0 -4
  256. package/dist-cli/chunks/hidden-runtime-alias-S5DJ7EDF.js +0 -4
  257. package/dist-cli/chunks/home-paths-5O4IZPYV.js +0 -4
  258. package/dist-cli/chunks/inspect-LT4MXK37.js +0 -4
  259. package/dist-cli/chunks/install-desktop-EXCFMXFS.js +0 -4
  260. package/dist-cli/chunks/login-V6TZ54ZH.js +0 -26
  261. package/dist-cli/chunks/logout-SPMLFWYA.js +0 -4
  262. package/dist-cli/chunks/maestro-5ISTBAZE.js +0 -108
  263. package/dist-cli/chunks/maestro-generate-WUI64NHR.js +0 -36
  264. package/dist-cli/chunks/mode-QPNBYXUF.js +0 -26
  265. package/dist-cli/chunks/optional-demo-registry-CBSYF4CG.js +0 -4
  266. package/dist-cli/chunks/perf-T6N5PVYV.js +0 -48
  267. package/dist-cli/chunks/permissions-YZ7RRSZJ.js +0 -13
  268. package/dist-cli/chunks/platform-XDQAA72X.js +0 -6
  269. package/dist-cli/chunks/privacy-54FIGXLT.js +0 -4
  270. package/dist-cli/chunks/record-QGYXRUKP.js +0 -72
  271. package/dist-cli/chunks/report-issue-VUUTGX7V.js +0 -29
  272. package/dist-cli/chunks/reset-CGO52KBW.js +0 -4
  273. package/dist-cli/chunks/resolve-target-NNQCALDM.js +0 -4
  274. package/dist-cli/chunks/runtime-4EP6YJVL.js +0 -4
  275. package/dist-cli/chunks/screenshot-command-NZCMSJ4P.js +0 -159
  276. package/dist-cli/chunks/screenshot-layers-VMTQ6XIU.js +0 -20
  277. package/dist-cli/chunks/screenshots-capture-K3MWIDBK.js +0 -42
  278. package/dist-cli/chunks/serve-QJRIB2BV.js +0 -56
  279. package/dist-cli/chunks/setup-6XXEJQVF.js +0 -4
  280. package/dist-cli/chunks/sim-client-5YUVL45C.js +0 -4
  281. package/dist-cli/chunks/skills-T3CS7CXK.js +0 -50
  282. package/dist-cli/chunks/state-AJC3VK3G.js +0 -14
  283. package/dist-cli/chunks/storage-KVGZKC3Y.js +0 -37
  284. package/dist-cli/chunks/store-AWUMOQUH.js +0 -4
  285. package/dist-cli/chunks/telemetry-W5ZDGWK6.js +0 -4
  286. package/dist-cli/chunks/timeline-DXDCAZUA.js +0 -24
  287. package/dist-cli/chunks/upgrade-SRPTJACU.js +0 -7
  288. package/dist-cli/chunks/upload-ZDV4BFED.js +0 -4
  289. package/dist-cli/chunks/version-SOLPSBMG.js +0 -6
  290. package/dist-cli/chunks/web-RT75LD7A.js +0 -4
  291. package/dist-cli/chunks/welcome-IJ55EC7U.js +0 -5
  292. package/dist-cli/chunks/what-happened-CEIWJIWK.js +0 -25
  293. package/dist-cli/chunks/ws-bridge-YK5R3HOI.js +0 -4
  294. package/scripts/postinstall.cjs +0 -3
  295. package/scripts/preuninstall.cjs +0 -118
@@ -13,9 +13,10 @@ import { isAppDeepLinkTarget, openAppUrl } from '../../src/app-url'
13
13
  import { isLoopbackHost } from '../../src/backend-origin'
14
14
  import { resolveSootsimShellBaseUrlForBridgePort } from '../../src/bridge-constants'
15
15
  import {
16
- applySootSimConfigToUrl,
17
- mergeSootSimConfig,
18
- type SootSimConfig,
16
+ applyRNXConfigToUrl,
17
+ mergeRNXConfig,
18
+ RNX_CONFIG_QUERY_PARAM,
19
+ type RNXConfig,
19
20
  } from '../../src/config'
20
21
  import {
21
22
  resolveConnectionInput,
@@ -36,8 +37,8 @@ import {
36
37
  resolveDevCheckoutRuntimeRoot,
37
38
  runtimeVersionHostname,
38
39
  } from '../../src/runtime-assets'
39
- import { sootsimRuntime } from '../../src/runtime-delivery'
40
- import { loadSootSimAppConfig } from '../app-config'
40
+ import { rnxRuntime } from '../../src/runtime-delivery'
41
+ import { loadRNXAppConfig } from '../app-config'
41
42
  import {
42
43
  type DiscoveredAppFontSpec,
43
44
  discoverNativeLinkedAppFonts,
@@ -74,7 +75,7 @@ import type { DriverId, DriverLaunchResult } from '../drivers/types'
74
75
  interface ControlCommandOptions {
75
76
  port?: number
76
77
  timeoutMs?: number
77
- runtimeConfig?: SootSimConfig
78
+ runtimeConfig?: RNXConfig
78
79
  }
79
80
 
80
81
  interface DriverConnectWaitOptions {
@@ -236,7 +237,7 @@ function assertExplicitBridgeLock(
236
237
  return
237
238
  }
238
239
  throw new Error(
239
- `${rnxPublicBrand.commandName} open: requested bridge port ${preferredPort}, but the active daemon owns port ${lock.bridgePort}. explicit --port never selects another bridge; stop that daemon or use an isolated SOOTSIM_HOME.`,
240
+ `${rnxPublicBrand.commandName} open: requested bridge port ${preferredPort}, but the active daemon owns port ${lock.bridgePort}. explicit --port never selects another bridge; stop that daemon or use an isolated RNX_HOME.`,
240
241
  )
241
242
  }
242
243
 
@@ -341,7 +342,7 @@ function buildShellPathOpenUrl(target: string, baseUrl: string): string {
341
342
  // SootSim share/preview/build links (e.g. https://sootsim.com/preview/<id>,
342
343
  // https://contrast.dev/build/<owner>/<repo>/<branch>) are full player pages
343
344
  // served by the Contrast app — NOT Metro bundles and NOT driveable shell sims.
344
- // passing one to `sootsim open` used to fall through to the bundle resolver,
345
+ // passing one to `rnx open` used to fall through to the bundle resolver,
345
346
  // which fetched the HTML page and choked with "Unexpected token '<'". two
346
347
  // hard reasons they can't become a CLI-driveable sim:
347
348
  // 1. the engine only attaches to the local CLI bridge from a localhost /
@@ -474,8 +475,8 @@ function normalizeReplacementPath(filePath: string): string {
474
475
  return path.resolve(process.cwd(), filePath)
475
476
  }
476
477
 
477
- function parseOpenRuntimeConfig(args: string[]): SootSimConfig | undefined {
478
- const modules: NonNullable<SootSimConfig['modules']> = {}
478
+ function parseOpenRuntimeConfig(args: string[]): RNXConfig | undefined {
479
+ const modules: NonNullable<RNXConfig['modules']> = {}
479
480
  const remap: Record<string, string> = {}
480
481
 
481
482
  for (let i = 0; i < args.length; i++) {
@@ -516,7 +517,7 @@ function parseOpenRuntimeConfig(args: string[]): SootSimConfig | undefined {
516
517
  }
517
518
  }
518
519
 
519
- const config: SootSimConfig = {}
520
+ const config: RNXConfig = {}
520
521
  if (Object.keys(modules).length > 0) config.modules = modules
521
522
  if (Object.keys(remap).length > 0) config.network = { remap }
522
523
  return config.modules || config.network ? config : undefined
@@ -533,7 +534,7 @@ async function resolveOpenAppProject(
533
534
  async function ensureConfiguredRuntime(version: string): Promise<void> {
534
535
  if (fs.existsSync(path.join(runtimeDir(version), 'index.html'))) return
535
536
  console.error(` installing configured engine runtime ${version}...`)
536
- const result = await sootsimRuntime.install({
537
+ const result = await rnxRuntime.install({
537
538
  version,
538
539
  setActive: false,
539
540
  protectVersions: readLiveRuntimeVersions(),
@@ -940,7 +941,7 @@ export function printConnectedSims(sims: BridgeSimInfo[], selectedId?: string) {
940
941
  }
941
942
 
942
943
  // classify which engine a sim is running so dev-vs-published is never ambiguous
943
- // to agents or humans reading `sootsim list`. dev shell serves local source on
944
+ // to agents or humans reading `rnx list`. dev shell serves local source on
944
945
  // :5173; the Contrast app embeds sootsim on :3000; the bridge/daemon and the
945
946
  // /__soot plugin serve the active runtime dir — which, inside a dev checkout, is
946
947
  // the fresh dev-stack build (resolveDevCheckoutRuntimeRoot mode boundary), not a
@@ -1194,7 +1195,7 @@ function resolveTargetSim(sims: BridgeSimInfo[], requestedId?: string): BridgeSi
1194
1195
  throw new Error('no sim connected')
1195
1196
  }
1196
1197
 
1197
- function printOpenedSim(
1198
+ export function printOpenedSim(
1198
1199
  openUrl: string,
1199
1200
  sim: BridgeSimInfo,
1200
1201
  mode:
@@ -1209,10 +1210,23 @@ function printOpenedSim(
1209
1210
  if (!value) return value
1210
1211
  try {
1211
1212
  const parsed = new URL(value)
1212
- if (parsed.searchParams.has('sootsimConfig')) {
1213
- parsed.searchParams.set('sootsimConfig', '[redacted]')
1214
- return parsed.toString()
1213
+ let changed = false
1214
+ if (parsed.searchParams.has(RNX_CONFIG_QUERY_PARAM)) {
1215
+ parsed.searchParams.set(RNX_CONFIG_QUERY_PARAM, '[redacted]')
1216
+ changed = true
1215
1217
  }
1218
+ const bundle = parsed.searchParams.get('bundle')
1219
+ if (bundle) {
1220
+ try {
1221
+ const parsedBundle = new URL(bundle)
1222
+ if (parsedBundle.searchParams.has(RNX_CONFIG_QUERY_PARAM)) {
1223
+ parsedBundle.searchParams.set(RNX_CONFIG_QUERY_PARAM, '[redacted]')
1224
+ parsed.searchParams.set('bundle', parsedBundle.toString())
1225
+ changed = true
1226
+ }
1227
+ } catch {}
1228
+ }
1229
+ if (changed) return parsed.toString()
1216
1230
  } catch {}
1217
1231
  return value
1218
1232
  })
@@ -1234,7 +1248,7 @@ function printOpenedSim(
1234
1248
  // bounded — a cold guest bundle takes 5-15s to fully route, so we don't
1235
1249
  // try to wait for that. instead: settle for a moment to let the first
1236
1250
  // paint land, then describe whatever's on screen. for cold loads that's
1237
- // a splash; the caller can `sootsim describe` again a second later. for
1251
+ // a splash; the caller can `rnx describe` again a second later. for
1238
1252
  // warm loads it's the real screen. guarded by --no-describe.
1239
1253
  async function maybeDescribeAfterOpen(wsPort: number, simId: string, args: string[]) {
1240
1254
  if (args.includes('--no-describe')) return
@@ -1244,7 +1258,7 @@ async function maybeDescribeAfterOpen(wsPort: number, simId: string, args: strin
1244
1258
  // brief settle, then dump the tree directly. don't go through
1245
1259
  // runDescribeSubcommand — its screen-transition wait can block for many
1246
1260
  // seconds on a still-routing guest app, which is exactly what we want
1247
- // to skip for the open-side describe. caller can `sootsim describe`
1261
+ // to skip for the open-side describe. caller can `rnx describe`
1248
1262
  // again later for post-routing state.
1249
1263
  await waitForTreeStable(wsPort, simId, { stableMs: 150, maxMs: 400 })
1250
1264
  const bridge = createBridge(wsPort, {
@@ -1467,10 +1481,10 @@ export async function runOpenCommand(
1467
1481
  ? await resolveConnectionInputForCli(target)
1468
1482
  : undefined
1469
1483
  const project = await resolveOpenAppProject(resolvedBundle)
1470
- const appConfig = await loadSootSimAppConfig(project)
1484
+ const appConfig = await loadRNXAppConfig(project)
1471
1485
  const configuredRuntimeVersion = appConfig?.runtimeVersion
1472
- const runtimeConfig = mergeSootSimConfig(
1473
- mergeSootSimConfig(
1486
+ const runtimeConfig = mergeRNXConfig(
1487
+ mergeRNXConfig(
1474
1488
  appConfig ? { ...appConfig, runtimeVersion: undefined } : undefined,
1475
1489
  opts.runtimeConfig,
1476
1490
  ),
@@ -1609,7 +1623,7 @@ export async function runOpenCommand(
1609
1623
  if (!targetSim && parsed.simIdSource !== 'flag') {
1610
1624
  targetShellUrl = await buildShellUrl(
1611
1625
  target,
1612
- applySootSimConfigToUrl(baseUrl, runtimeConfig),
1626
+ applyRNXConfigToUrl(baseUrl, runtimeConfig),
1613
1627
  buildShellUrlOpts,
1614
1628
  )
1615
1629
  const normalizedTarget = new URL(targetShellUrl)
@@ -1648,7 +1662,7 @@ export async function runOpenCommand(
1648
1662
  targetShellUrl ??
1649
1663
  (await buildShellUrl(
1650
1664
  target,
1651
- applySootSimConfigToUrl(resolvedBaseUrl, runtimeConfig),
1665
+ applyRNXConfigToUrl(resolvedBaseUrl, runtimeConfig),
1652
1666
  buildShellUrlOpts,
1653
1667
  ))
1654
1668
  bridge
@@ -1692,7 +1706,7 @@ export async function runOpenCommand(
1692
1706
  targetShellUrl ??
1693
1707
  (await buildShellUrl(
1694
1708
  target,
1695
- applySootSimConfigToUrl(resolvedBaseUrl, runtimeConfig),
1709
+ applyRNXConfigToUrl(resolvedBaseUrl, runtimeConfig),
1696
1710
  buildShellUrlOpts,
1697
1711
  ))
1698
1712
  printOpenedSim(shellUrl, { ...targetSim, url: shellUrl }, 'current sim', quiet)
@@ -1704,7 +1718,7 @@ export async function runOpenCommand(
1704
1718
  }
1705
1719
  }
1706
1720
 
1707
- const configuredBaseUrl = applySootSimConfigToUrl(baseUrl, runtimeConfig)
1721
+ const configuredBaseUrl = applyRNXConfigToUrl(baseUrl, runtimeConfig)
1708
1722
  const token = `cli-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`
1709
1723
  const openUrl = await buildOpenUrl(target, configuredBaseUrl, token, buildShellUrlOpts)
1710
1724
  const ownerPid = getStableOwnerPid()
@@ -1796,7 +1810,7 @@ async function runUseLikeCommand(args: string[], opts: ControlCommandOptions = {
1796
1810
  // `use`/`focus` retarget the CLI at a sim — silently grabbing one a
1797
1811
  // human is actively driving is the same footgun `claim` guards against,
1798
1812
  // so honor the lock here too (this command historically did not, which
1799
- // let `sootsim use <id>` steal the user's live tab).
1813
+ // let `rnx use <id>` steal the user's live tab).
1800
1814
  if (target.lockedBy && target.lockExpiresAt && target.lockExpiresAt > Date.now()) {
1801
1815
  const secs = Math.max(0, Math.round((target.lockExpiresAt - Date.now()) / 1000))
1802
1816
  if (target.lockedByKind === 'user-active') {
@@ -1817,7 +1831,7 @@ async function runUseLikeCommand(args: string[], opts: ControlCommandOptions = {
1817
1831
  ` refused: ${target.id} is leased by ${target.lockedBy} (${secs}s)`,
1818
1832
  )
1819
1833
  console.error(
1820
- ` \`sootsim use ${target.id} --force\` to take it, or \`rnx open --new\` for a fresh sim`,
1834
+ ` \`rnx use ${target.id} --force\` to take it, or \`rnx open --new\` for a fresh sim`,
1821
1835
  )
1822
1836
  rnxExit(1)
1823
1837
  }
@@ -1,4 +1,4 @@
1
- // sootsim perf cpu — capture a sampled CPU trace from the tenant worker.
1
+ // rnx perf cpu — capture a sampled CPU trace from the tenant worker.
2
2
  //
3
3
  // the JS Self-Profiler API (`new Profiler()`) cannot be constructed in a
4
4
  // dedicated-worker scope, and sootsim runs the guest app in the tenant worker,
@@ -15,8 +15,8 @@
15
15
  // it stays driveable over the WS bridge, so you can scroll/navigate while
16
16
  // profiling (the playwright driver passes --remote-debugging-port through):
17
17
  //
18
- // sootsim open <metro-port> --new --driver playwright --cdp-port 9222
19
- // sootsim perf cpu --cdp-port 9222 --match <metro-port> --duration 5
18
+ // rnx open <metro-port> --new --driver playwright --cdp-port 9222
19
+ // rnx perf cpu --cdp-port 9222 --match <metro-port> --duration 5
20
20
  //
21
21
  // (a standalone CDP Chrome also works for profiling a static page, but it
22
22
  // does NOT register on the bridge, so it can't be driven — see printNoCdp.)
@@ -109,13 +109,13 @@ export async function runCpuProfile(
109
109
  }
110
110
  const sampleInterval = Number(valueOf(args, '--sample-interval') ?? '0.1') // ms
111
111
  const cdpPort = Number(
112
- valueOf(args, '--cdp-port') ?? process.env.SOOTSIM_CDP_PORT ?? '9222',
112
+ valueOf(args, '--cdp-port') ?? process.env.RNX_CDP_PORT ?? '9222',
113
113
  )
114
114
  // optional substring filter to pick the right page when several sims share
115
115
  // the CDP browser (e.g. `--match 8089` or `--match /rn/8089`).
116
116
  const match = valueOf(args, '--match') ?? '/rn/'
117
117
  const outputArg = valueOf(args, '--output') ?? valueOf(args, '-o')
118
- const outputPath = resolve(process.cwd(), outputArg ?? '/tmp/sootsim.cpuprofile')
118
+ const outputPath = resolve(process.cwd(), outputArg ?? '/tmp/rnx.cpuprofile')
119
119
 
120
120
  // locate the page target on the CDP endpoint. NOTE: Chrome's DevTools HTTP
121
121
  // `/json` endpoints reject any Host header that isn't `localhost` (a
@@ -222,7 +222,7 @@ function printNoCdp(cdpPort: number) {
222
222
  console.error('')
223
223
  console.error(' "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \\')
224
224
  console.error(
225
- ` --remote-debugging-port=${cdpPort} --user-data-dir=/tmp/sootsim-cdp \\`,
225
+ ` --remote-debugging-port=${cdpPort} --user-data-dir=/tmp/rnx-cdp \\`,
226
226
  )
227
227
  console.error(' --no-sandbox --disable-gpu-sandbox \\')
228
228
  // never suggest swiftshader — software rendering pegs every core for the
@@ -231,7 +231,7 @@ function printNoCdp(cdpPort: number) {
231
231
  console.error(' --use-gl=angle --use-angle=metal \\')
232
232
  console.error(' "http://localhost:5173/rn/<metro-port>" &')
233
233
  console.error('')
234
- console.error(' override the port with --cdp-port or $SOOTSIM_CDP_PORT.')
234
+ console.error(' override the port with --cdp-port or $RNX_CDP_PORT.')
235
235
  }
236
236
 
237
237
  function shortUrl(url: string): string {
@@ -1,4 +1,4 @@
1
- // generate + ad-hoc sign the SootSim Daemon.app wrapper that the launchd
1
+ // generate + ad-hoc sign the RNX Daemon.app wrapper that the launchd
2
2
  // agent points its ProgramArguments at.
3
3
  //
4
4
  // why this exists: macOS Background Task Management (the "X wants to run in
@@ -7,11 +7,11 @@
7
7
  // pointed at bun directly the entry shows "software from Jarred Sumner"
8
8
  // because that's bun's code-signing identity. wrapping the real invocation
9
9
  // in an ad-hoc-signed `.app` lets BTM read CFBundleDisplayName from the
10
- // bundle Info.plist instead, so the entry reads "SootSim Daemon".
10
+ // bundle Info.plist instead, so the entry reads "RNX Daemon".
11
11
  //
12
12
  // the bundle is regenerated every time `daemonInstall` runs — it's tiny
13
13
  // (a plist + a shell launcher) and the launcher embeds a snapshot of the
14
- // invocation, so an `npm update -g sootsim` followed by `sootsim daemon
14
+ // invocation, so an `npm update -g sootsim` followed by `rnx daemon
15
15
  // install --force` is the documented upgrade path. there's no notarization
16
16
  // or Developer ID signing here yet; ad-hoc + hardened runtime is enough to
17
17
  // fix the attribution, and a real signed bundle (shipped via the runtime
@@ -27,7 +27,7 @@ import {
27
27
  } from '../../src/home-paths'
28
28
 
29
29
  const BUNDLE_IDENTIFIER = 'dev.sootsim.daemon'
30
- const BUNDLE_DISPLAY_NAME = 'SootSim Daemon'
30
+ const BUNDLE_DISPLAY_NAME = 'RNX Daemon'
31
31
  // kept in sync with package.json on release. exact value doesn't matter for
32
32
  // BTM display — macOS only reads it for "About this app" surfaces — so we
33
33
  // hardcode it rather than reach back into the package.json from a runtime
@@ -49,7 +49,7 @@ export interface DaemonAppPaths {
49
49
  launcherPath: string
50
50
  }
51
51
 
52
- /** rebuild ~/.sootsim/daemon-app/SootSim Daemon.app/ for the given invocation
52
+ /** rebuild ~/.rnx/daemon-app/RNX Daemon.app/ for the given invocation
53
53
  * and re-sign it ad-hoc. safe to call repeatedly; the directory is wiped
54
54
  * before write so stale state from earlier installs can't leak through. */
55
55
  export function ensureDaemonApp(
@@ -103,7 +103,7 @@ function renderInfoPlist(): string {
103
103
  <dict>
104
104
  <key>CFBundleDevelopmentRegion</key><string>en</string>
105
105
  <key>CFBundleDisplayName</key><string>${BUNDLE_DISPLAY_NAME}</string>
106
- <key>CFBundleExecutable</key><string>sootsim-daemon</string>
106
+ <key>CFBundleExecutable</key><string>rnx-daemon</string>
107
107
  <key>CFBundleIdentifier</key><string>${BUNDLE_IDENTIFIER}</string>
108
108
  <key>CFBundleInfoDictionaryVersion</key><string>6.0</string>
109
109
  <key>CFBundleName</key><string>${BUNDLE_DISPLAY_NAME}</string>
@@ -142,7 +142,7 @@ 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 generated by 'rnx daemon install'.
145
+ # rnx daemon launcher generated by 'rnx daemon install'.
146
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
  #
@@ -1,16 +1,16 @@
1
- // sootsim daemon — manage the persistent sootsim bridge daemon
1
+ // rnx daemon — manage the persistent sootsim bridge daemon
2
2
  //
3
- // wraps `sootsim serve` so it starts automatically on login and restarts if
3
+ // wraps `rnx serve` so it starts automatically on login and restarts if
4
4
  // it crashes. the agent is tied to whichever `sootsim` binary resolves at
5
- // registration time, so `npm update -g sootsim` + `sootsim daemon restart`
5
+ // registration time, so `npm update -g sootsim` + `rnx daemon restart`
6
6
  // picks up the upgrade without touching the plist/unit file.
7
7
  //
8
8
  // `daemonInstall` is shared by `rnx setup` and the explicit
9
- // `sootsim daemon install` machine-bootstrap path.
9
+ // `rnx daemon install` machine-bootstrap path.
10
10
  //
11
11
  // macOS: ~/Library/LaunchAgents/dev.sootsim.daemon.plist (launchd)
12
12
  // linux: ~/.config/systemd/user/sootsim-daemon.service (systemd --user)
13
- // win: not yet supported — use `sootsim serve` in a persistent shell.
13
+ // win: not yet supported — use `rnx serve` in a persistent shell.
14
14
  //
15
15
  // the macOS launchd Label is `dev.sootsim.daemon` (matching the .app
16
16
  // CFBundleIdentifier).
@@ -33,7 +33,7 @@ import {
33
33
  isDaemonLockfileFresh,
34
34
  readDaemonLockfile,
35
35
  shouldSkipPersistentDaemon,
36
- sootsimHomeDir,
36
+ rnxHomeDir,
37
37
  } from '../../src/home-paths'
38
38
  import { rnxPublicBrand } from '../../src/public-brand'
39
39
  import { printCommandHelp } from '../help'
@@ -511,7 +511,7 @@ export function teardownLegacyMacDaemonArtifacts(
511
511
 
512
512
  /** stop + disable + remove the persistent launchd / systemd registration
513
513
  * and its support files (mac .app bundle, log dir). does NOT touch user
514
- * data under ~/.sootsim. idempotent: each entry is checked before remove.
514
+ * data under ~/.rnx. idempotent: each entry is checked before remove.
515
515
  * exported for reuse by the npm preuninstall hook (scripts/preuninstall.cjs)
516
516
  * via the bundled CLI so a `npm rm -g sootsim` tears down the daemon before
517
517
  * the bin disappears. */
@@ -571,12 +571,12 @@ export function teardownDaemonService(): TeardownReport {
571
571
  return { removed, missing: true }
572
572
  }
573
573
 
574
- /** remove the user-data cache under ~/.sootsim (runtimes, electron support,
575
- * profiles, lockfile, config). idempotent. honors $SOOTSIM_HOME. exported
574
+ /** remove the user-data cache under ~/.rnx (runtimes, electron support,
575
+ * profiles, lockfile, config). idempotent. honors $RNX_HOME. exported
576
576
  * for reuse by the npm preuninstall hook. */
577
577
  export function teardownSootsimHome(): TeardownReport {
578
578
  const removed: string[] = []
579
- const home = sootsimHomeDir()
579
+ const home = rnxHomeDir()
580
580
  if (existsSync(home)) {
581
581
  rmSync(home, { recursive: true, force: true })
582
582
  removed.push(home)
@@ -1,20 +1,20 @@
1
- // sootsim debug — drive __sootsimDebug.* from the terminal
1
+ // rnx debug — drive __sootsimDebug.* from the terminal
2
2
  //
3
3
  // connects to a running sootsim instance via the WebSocket bridge and forwards
4
4
  // debug channel management, tree snapshots, and on-demand inspectors without
5
5
  // requiring a browser console.
6
6
  //
7
7
  // usage examples:
8
- // sootsim debug enable sheets,portals,onlayout
9
- // sootsim debug status
10
- // sootsim debug snapshot before
8
+ // rnx debug enable sheets,portals,onlayout
9
+ // rnx debug status
10
+ // rnx debug snapshot before
11
11
  // # ... tap something in the UI ...
12
- // sootsim debug snapshot after
13
- // sootsim debug diff before after
14
- // sootsim debug find sheets
15
- // sootsim debug find portals
16
- // sootsim debug recent portals
17
- // sootsim debug flags
12
+ // rnx debug snapshot after
13
+ // rnx debug diff before after
14
+ // rnx debug find sheets
15
+ // rnx debug find portals
16
+ // rnx debug recent portals
17
+ // rnx debug flags
18
18
  //
19
19
  // all commands print JSON by default so they pipe cleanly into jq.
20
20
 
@@ -320,7 +320,7 @@ function readNumberFlag(args: string[], flag: string): number | null {
320
320
 
321
321
  // enable the audit, force one real frame, then read and stop. the screenshot
322
322
  // request is what forces the frame: it runs the same publish-and-paint pass
323
- // `sootsim screenshot` does, so the rows describe pixels that were actually
323
+ // `rnx screenshot` does, so the rows describe pixels that were actually
324
324
  // produced rather than a tree walk's guess about them.
325
325
  async function runImageAudit(bridge: WsBridge): Promise<ImageAuditReportView> {
326
326
  await call(
@@ -45,7 +45,7 @@ rnx detox — run detox-style tests against an rnx shell
45
45
  usage:
46
46
  rnx detox [testFiles...] run all tests under e2e/, test/e2e/, or detox/
47
47
  rnx detox --config <path> use a specific jest config
48
- rnx detox init scaffold sootsim-detox.config.cjs + sample test
48
+ rnx detox init scaffold rnx-detox.config.cjs + sample test
49
49
  rnx detox --watch jest watch mode
50
50
  rnx detox --headed keep the rnx shell window visible
51
51
  rnx detox -t <pattern> pass a jest --testNamePattern
@@ -106,11 +106,11 @@ export async function runDetox(args: string[], opts: RunDetoxOpts = {}): Promise
106
106
  return []
107
107
  })
108
108
 
109
- // test dir discovery. external test suites set SOOTSIM_TEST_DIR; otherwise
109
+ // test dir discovery. external test suites set RNX_TEST_DIR; otherwise
110
110
  // we auto-detect the conventional locations.
111
111
  const detoxDirs = ['e2e', 'test/e2e', 'detox']
112
- let testDir: string | null = process.env.SOOTSIM_TEST_DIR
113
- ? resolve(process.cwd(), process.env.SOOTSIM_TEST_DIR)
112
+ let testDir: string | null = process.env.RNX_TEST_DIR
113
+ ? resolve(process.cwd(), process.env.RNX_TEST_DIR)
114
114
  : null
115
115
  if (!testDir) {
116
116
  for (const dir of detoxDirs) {
@@ -131,18 +131,18 @@ export async function runDetox(args: string[], opts: RunDetoxOpts = {}): Promise
131
131
 
132
132
  // auto-launch: make sure a sootsim shell is reachable before running jest.
133
133
  // Reuse the Maestro discovery path: scan local dev servers.
134
- // and `sootsim open` the first match.
134
+ // and `rnx open` the first match.
135
135
  if (!noLaunch) {
136
136
  await ensureShellRunning(port)
137
137
  }
138
138
 
139
139
  // build the jest command. prefer the user's config if they passed --config
140
- // or if a sootsim-detox.config.cjs exists in cwd. otherwise point at our
140
+ // or if a rnx-detox.config.cjs exists in cwd. otherwise point at our
141
141
  // preset directly via --preset-free inline config.
142
142
  const jestArgs: string[] = ['jest']
143
143
  const localConfig =
144
144
  configFlag ||
145
- firstExisting(['sootsim-detox.config.cjs', 'jest.config.cjs', 'jest.config.js'])
145
+ firstExisting(['rnx-detox.config.cjs', 'jest.config.cjs', 'jest.config.js'])
146
146
 
147
147
  let tempConfig: string | null = null
148
148
  if (localConfig) {
@@ -154,7 +154,7 @@ export async function runDetox(args: string[], opts: RunDetoxOpts = {}): Promise
154
154
  // scope roots + testMatch to the discovered test dir so jest doesn't
155
155
  // scan the entire repo (which causes haste collisions in monorepos).
156
156
  const presetPath = resolve(resolveDetoxDir(), 'jest-preset.cjs')
157
- tempConfig = join(tmpdir(), `sootsim-detox-${process.pid}.config.cjs`)
157
+ tempConfig = join(tmpdir(), `rnx-detox-${process.pid}.config.cjs`)
158
158
  const cfg = {
159
159
  rootDir: testDir,
160
160
  roots: ['<rootDir>'],
@@ -183,7 +183,7 @@ export async function runDetox(args: string[], opts: RunDetoxOpts = {}): Promise
183
183
  if (process.env.SOOTSIM_JEST_OUTPUT_FILE) {
184
184
  jestArgs.push('--outputFile', process.env.SOOTSIM_JEST_OUTPUT_FILE)
185
185
  } else if (wantsRegistration) {
186
- resultsFile = join(tmpdir(), `sootsim-detox-results-${process.pid}.json`)
186
+ resultsFile = join(tmpdir(), `rnx-detox-results-${process.pid}.json`)
187
187
  jestArgs.push('--json', '--outputFile', resultsFile)
188
188
  }
189
189
 
@@ -218,10 +218,10 @@ export async function runDetox(args: string[], opts: RunDetoxOpts = {}): Promise
218
218
  stdio: 'inherit',
219
219
  env: {
220
220
  ...process.env,
221
- SOOTSIM_TEST_DIR: testDir,
221
+ RNX_TEST_DIR: testDir,
222
222
  SOOTSIM_PORT: String(port),
223
223
  SOOTSIM_HEADED: headed ? '1' : '',
224
- SOOTSIM_URL: process.env.SOOTSIM_URL || `http://localhost:${port}`,
224
+ RNX_URL: process.env.RNX_URL || `http://localhost:${port}`,
225
225
  },
226
226
  })
227
227
 
@@ -355,7 +355,7 @@ async function ensureShellRunning(port: number): Promise<void> {
355
355
 
356
356
  function initDetoxProject(): void {
357
357
  const cwd = process.cwd()
358
- const configPath = resolve(cwd, 'sootsim-detox.config.cjs')
358
+ const configPath = resolve(cwd, 'rnx-detox.config.cjs')
359
359
  if (existsSync(configPath)) {
360
360
  console.log(` skip: ${configPath} already exists`)
361
361
  } else {
@@ -385,7 +385,7 @@ module.exports = {
385
385
  writeFileSync(
386
386
  samplePath,
387
387
  `// sample rnx detox test. resolve \`detox\` via the jest preset in
388
- // sootsim-detox.config.cjs — no extra imports required.
388
+ // rnx-detox.config.cjs — no extra imports required.
389
389
 
390
390
  import { by, device, element, expect, waitFor } from 'detox'
391
391
 
@@ -1,4 +1,4 @@
1
- // sootsim get diagnosis — composed read commands for "what just went wrong?"
1
+ // rnx get diagnosis — composed read commands for "what just went wrong?"
2
2
  //
3
3
  // the demo-friendly compact diagnostic surface called out in
4
4
  // plans/expensify-sootsim-agent-device-demo.md. one command, one round
@@ -6,12 +6,12 @@
6
6
  // sed/grep workflow in both speed and information density.
7
7
  //
8
8
  // usage:
9
- // sootsim get diagnosis [--since 90s] [--include react,network,console,screen,fetch,alert]
10
- // sootsim get diagnosis --json
9
+ // rnx get diagnosis [--since 90s] [--include react,network,console,screen,fetch,alert]
10
+ // rnx get diagnosis --json
11
11
  //
12
12
  // the output is grouped by source (timeline, network, react, console)
13
13
  // rather than chronological. for chronological order use
14
- // `sootsim what-happened` directly. `recent` is the only subcommand
14
+ // `rnx what-happened` directly. `recent` is the only subcommand
15
15
  // today; `diagnose <something-else>` may be added later (e.g. boot,
16
16
  // scrolling-jank, idle-burn).
17
17
  //
@@ -315,7 +315,7 @@ function formatNetworkRow(entry: NetworkEntry): string {
315
315
  const dur = entry.durationMs != null ? `${entry.durationMs.toFixed(0)}ms` : '...'
316
316
  const url = entry.displayUrl ?? entry.url
317
317
  // shorten long urls to 96 chars in the diagnose report — full
318
- // detail is one `sootsim network get <id>` away.
318
+ // detail is one `rnx network get <id>` away.
319
319
  const shortUrl = url.length > 96 ? `${url.slice(0, 92)}…` : url
320
320
  return ` ${status.padStart(3)} ${method} ${dur.padStart(7)} ${shortUrl} (${entry.id})`
321
321
  }
@@ -575,7 +575,7 @@ export async function runDiagnose(
575
575
  // a bridge call rejecting (most commonly "no sim connected") must not
576
576
  // escape as a raw stack trace with a 0 exit code — `get diagnosis` is the
577
577
  // "what just went wrong" command; failing it should read cleanly and
578
- // exit non-zero so `sootsim get diagnosis && …` chains behave.
578
+ // exit non-zero so `rnx get diagnosis && …` chains behave.
579
579
  const msg = err instanceof Error ? err.message : String(err)
580
580
  if (/no sim connected/i.test(msg)) {
581
581
  console.error(' no sim connected — open one first: rnx open <metroPort>')
@@ -318,8 +318,7 @@ export async function runDoChain(
318
318
  const { isAgentEnv } = envModule
319
319
  const { resolveTargetCoords } = targetModule
320
320
  const wantsJson = args.includes('--json')
321
- const skipSettle =
322
- args.includes('--no-wait') || process.env.SOOTSIM_NO_AUTO_WAIT === '1'
321
+ const skipSettle = args.includes('--no-wait') || process.env.RNX_NO_AUTO_WAIT === '1'
323
322
  const parsed = parseBridgeCliArgs(args, {
324
323
  port: opts.port,
325
324
  commandTimeoutMs: 30_000,
@@ -68,9 +68,7 @@ examples:
68
68
  if (!install) {
69
69
  printMissingCompanionHint()
70
70
  const canPrompt =
71
- process.stdin.isTTY &&
72
- process.env.CI !== '1' &&
73
- process.env.SOOTSIM_NO_PROMPT !== '1'
71
+ process.stdin.isTTY && process.env.CI !== '1' && process.env.RNX_NO_PROMPT !== '1'
74
72
  if (canPrompt && (await confirm('run rnx desktop install now?', true))) {
75
73
  console.log()
76
74
  const { runInstallDesktop } = await import('./install-desktop')
@@ -1,4 +1,4 @@
1
- // sootsim film — record a flow on the flat canvas, then re-play that
1
+ // rnx film — record a flow on the flat canvas, then re-play that
2
2
  // recording on the 3d device stage under a camera cinematic and capture the
3
3
  // stage as video.
4
4
  //
@@ -82,7 +82,7 @@ how it works:
82
82
 
83
83
  options:
84
84
  --out <path> output file (.webm, or .mp4 when ffmpeg is
85
- installed). default: ~/Desktop/sootsim-films/<flow>.webm
85
+ installed). default: ~/Desktop/rnx-films/<flow>.webm
86
86
  --script <id> camera script to animate during playback
87
87
  (default: hero-arc)
88
88
  --fps <n> stage capture framerate (default: 30)
@@ -116,7 +116,7 @@ examples:
116
116
  const flowName = flowPath.replace(/^.*\//, '').replace(/\.ya?ml$/, '')
117
117
  const outArg = flagValue(args, '--out')
118
118
  const outPath = resolve(
119
- outArg ?? join(homedir(), 'Desktop', 'sootsim-films', `${flowName}.webm`),
119
+ outArg ?? join(homedir(), 'Desktop', 'rnx-films', `${flowName}.webm`),
120
120
  )
121
121
  const wantsMp4 = extname(outPath).toLowerCase() === '.mp4'
122
122
  if (wantsMp4 && spawnSync('ffmpeg', ['-version']).status !== 0) {