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