rnxsim 0.1.335 → 0.1.337
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/README.md +104 -76
- package/cli/auth.ts +2 -2
- package/cli/bin.ts +7 -3
- package/cli/bridge-flow-runner.ts +2 -2
- package/cli/commands/agent-wrapper.ts +1 -1
- package/cli/commands/agent.ts +12 -12
- package/cli/commands/app-fonts.ts +1 -1
- package/cli/commands/assert.ts +7 -7
- package/cli/commands/auth.ts +4 -4
- package/cli/commands/camera.ts +13 -13
- package/cli/commands/cleanup.ts +6 -6
- package/cli/commands/compat.ts +4 -4
- package/cli/commands/config.ts +2 -2
- package/cli/commands/control.ts +37 -43
- package/cli/commands/cpu-profile.ts +2 -2
- package/cli/commands/daemon-mac-app.ts +2 -2
- package/cli/commands/daemon.ts +12 -12
- package/cli/commands/debug.ts +22 -22
- package/cli/commands/desktop.ts +3 -3
- package/cli/commands/detox.ts +17 -17
- package/cli/commands/device.ts +9 -9
- package/cli/commands/diagnose.ts +11 -11
- package/cli/commands/electron.ts +7 -7
- package/cli/commands/film.ts +6 -6
- package/cli/commands/inspect/core.ts +6 -7
- package/cli/commands/inspect/find.ts +2 -2
- package/cli/commands/inspect.ts +36 -36
- package/cli/commands/install-desktop.ts +8 -8
- package/cli/commands/login.ts +6 -6
- package/cli/commands/maestro-generate.ts +2 -2
- package/cli/commands/maestro.ts +23 -23
- package/cli/commands/mode.ts +4 -4
- package/cli/commands/no-bridge-hint.ts +9 -9
- package/cli/commands/perf.ts +11 -11
- package/cli/commands/permissions.ts +5 -5
- package/cli/commands/profile.ts +11 -11
- package/cli/commands/react.ts +15 -15
- package/cli/commands/record.ts +15 -15
- package/cli/commands/report-issue.ts +2 -2
- package/cli/commands/reset.ts +2 -2
- package/cli/commands/runtime.ts +18 -18
- package/cli/commands/screenshot-mode.ts +5 -5
- package/cli/commands/screenshot.ts +12 -12
- package/cli/commands/screenshots-capture.ts +7 -7
- package/cli/commands/screenshots.ts +6 -6
- package/cli/commands/serve.ts +6 -6
- package/cli/commands/setup.ts +13 -15
- package/cli/commands/skills.ts +14 -14
- package/cli/commands/slides.ts +19 -23
- package/cli/commands/state.ts +2 -2
- package/cli/commands/storage.ts +3 -3
- package/cli/commands/telemetry.ts +1 -1
- package/cli/commands/three-mode.ts +16 -16
- package/cli/commands/timeline.ts +4 -4
- package/cli/commands/upgrade.ts +1 -1
- package/cli/commands/upload.ts +11 -11
- package/cli/commands/version.ts +3 -5
- package/cli/commands/what-happened.ts +11 -11
- package/cli/drivers/electron.ts +3 -3
- package/cli/hints.ts +8 -8
- package/cli/recording-access.ts +1 -1
- package/cli/ws-bridge.ts +5 -5
- package/dist-cli/bin.js +5 -5
- package/dist-cli/chunks/{agent-XSJMAFVA.js → agent-QQ3RJNRY.js} +14 -14
- package/dist-cli/chunks/{agent-wrapper-NFLJ5K64.js → agent-wrapper-M6SQSMRY.js} +3 -3
- package/dist-cli/chunks/app-fonts-F6NDV3XC.js +4 -0
- package/dist-cli/chunks/{assert-ILAXIYB5.js → assert-5VB3KQNK.js} +12 -12
- package/dist-cli/chunks/auth-PFXODKFN.js +12 -0
- package/dist-cli/chunks/{beta-TDR6UKJU.js → beta-WUWYHT4F.js} +2 -2
- package/dist-cli/chunks/camera-V3MMTKP7.js +33 -0
- package/dist-cli/chunks/{chunk-INBPUR4T.js → chunk-2ANFH72P.js} +11 -11
- package/dist-cli/chunks/chunk-2GIA5T6B.js +74 -0
- package/dist-cli/chunks/{chunk-GP6QEBZA.js → chunk-4FRSEZ7Z.js} +1 -1
- package/dist-cli/chunks/{chunk-USGOQ3YJ.js → chunk-4GXBZHNA.js} +2 -2
- package/dist-cli/chunks/{chunk-R3CMECGC.js → chunk-4HESY5E7.js} +4 -4
- package/dist-cli/chunks/{chunk-WKT7YM5Q.js → chunk-4VJEXQGD.js} +1 -1
- package/dist-cli/chunks/{chunk-FE6ZHPKD.js → chunk-5LJNNHZH.js} +1 -1
- package/dist-cli/chunks/{chunk-I2HQB5NN.js → chunk-5QXGSTYI.js} +2 -2
- package/dist-cli/chunks/{chunk-FJSHIWAM.js → chunk-5SHAOQHJ.js} +2 -2
- package/dist-cli/chunks/{chunk-CGZWLSYD.js → chunk-5UPRBMIG.js} +1 -1
- package/dist-cli/chunks/{chunk-ZTM2MKNI.js → chunk-5ZEFRPCC.js} +1 -1
- package/dist-cli/chunks/{chunk-RTD3CPDQ.js → chunk-6ART4XVJ.js} +23 -23
- package/dist-cli/chunks/{chunk-MTD6IAEA.js → chunk-6CAUT2LH.js} +1 -1
- package/dist-cli/chunks/{chunk-ZYHCWCMM.js → chunk-7ATIH7OU.js} +1 -1
- package/dist-cli/chunks/{chunk-RVUGKXJD.js → chunk-7Q4QKHMA.js} +1 -1
- package/dist-cli/chunks/{chunk-MTNIDSOA.js → chunk-ABK2V2PR.js} +1 -1
- package/dist-cli/chunks/{chunk-TL4DNDDY.js → chunk-B53ILAHI.js} +2 -2
- package/dist-cli/chunks/{chunk-POC3QTA6.js → chunk-BSSVLFZR.js} +2 -2
- package/dist-cli/chunks/chunk-BVOBXTPN.js +30 -0
- package/dist-cli/chunks/{chunk-4KC35DMK.js → chunk-CPDEUWL5.js} +2 -2
- package/dist-cli/chunks/{chunk-HNQLZZJA.js → chunk-DINU267S.js} +2 -2
- package/dist-cli/chunks/{chunk-DCDKJ4NC.js → chunk-DQQ4CZVC.js} +2 -2
- package/dist-cli/chunks/{chunk-JWAY6DIH.js → chunk-EDWN2HOO.js} +18 -18
- package/dist-cli/chunks/{chunk-3CS4EUMG.js → chunk-EWVG4A3B.js} +2 -2
- package/dist-cli/chunks/{chunk-RTEJXUXN.js → chunk-F3NKCQHM.js} +6 -6
- package/dist-cli/chunks/{chunk-M7CBQ5I4.js → chunk-GEAGFYKP.js} +1 -1
- package/dist-cli/chunks/chunk-GGNH44PZ.js +5 -0
- package/dist-cli/chunks/{chunk-YSUIYK6B.js → chunk-HAHJJJUC.js} +2 -2
- package/dist-cli/chunks/chunk-HPJ5EKIZ.js +4 -0
- package/dist-cli/chunks/{chunk-IN2PZBQD.js → chunk-IBTHGFKE.js} +2 -2
- package/dist-cli/chunks/{chunk-ZZWO6Y7X.js → chunk-J6BYRRZQ.js} +2 -2
- package/dist-cli/chunks/{chunk-6Y3PVPTF.js → chunk-JK4OZ2TQ.js} +5 -5
- package/dist-cli/chunks/{chunk-PO3TOAED.js → chunk-KGQAO25M.js} +2 -2
- package/dist-cli/chunks/{chunk-J7XFINJG.js → chunk-L6UUIQE7.js} +2 -2
- package/dist-cli/chunks/{chunk-35XNGT5C.js → chunk-LXYLCETR.js} +1 -1
- package/dist-cli/chunks/{chunk-JWK5WD44.js → chunk-LZAL3DMP.js} +2 -2
- package/dist-cli/chunks/{chunk-3ZDOPKHE.js → chunk-M43UU7UG.js} +4 -4
- package/dist-cli/chunks/{chunk-ROPHZJ6P.js → chunk-M4LGUVBM.js} +2 -2
- package/dist-cli/chunks/{chunk-RELRA5VW.js → chunk-NCG6C5AH.js} +2 -2
- package/dist-cli/chunks/{chunk-42KDXJUD.js → chunk-NR5TSR2Y.js} +2 -2
- package/dist-cli/chunks/{chunk-R2UL5VFY.js → chunk-OCPWXT73.js} +3 -3
- package/dist-cli/chunks/{chunk-VV4MXLFR.js → chunk-ODKS6JUJ.js} +1 -1
- package/dist-cli/chunks/{chunk-F33DUJGG.js → chunk-R2WBREGQ.js} +1 -1
- package/dist-cli/chunks/chunk-RKY3ZNTA.js +5 -0
- package/dist-cli/chunks/{chunk-MGGRL2Z2.js → chunk-SW7BHOMO.js} +9 -9
- package/dist-cli/chunks/{chunk-GVKISFQ3.js → chunk-TJTLXG3R.js} +1 -1
- package/dist-cli/chunks/chunk-TNI4PW75.js +124 -0
- package/dist-cli/chunks/{chunk-CL3PREIE.js → chunk-UWEDNDND.js} +2 -2
- package/dist-cli/chunks/{chunk-IV36DY6M.js → chunk-WRID5SBV.js} +1 -1
- package/dist-cli/chunks/{chunk-42ALI64M.js → chunk-WUYI3XJ5.js} +2 -2
- package/dist-cli/chunks/{chunk-6VN5ULGQ.js → chunk-X7MHCEGG.js} +2 -2
- package/dist-cli/chunks/chunk-XIQFYLWD.js +15 -0
- package/dist-cli/chunks/{chunk-LCVUJCRJ.js → chunk-ZUK5ZQU7.js} +1 -1
- package/dist-cli/chunks/{cleanup-X6ZRPFDV.js → cleanup-6WBS3MUO.js} +10 -10
- package/dist-cli/chunks/cli-version-HUQCDGMA.js +4 -0
- package/dist-cli/chunks/{compat-VRXJ5J56.js → compat-2WOPKJYK.js} +9 -9
- package/dist-cli/chunks/{config-LHPPE4EP.js → config-FPD7WUYB.js} +5 -5
- package/dist-cli/chunks/{control-TVTNGSSF.js → control-B3XNER7I.js} +2 -2
- package/dist-cli/chunks/daemon-T4D4X2P5.js +4 -0
- package/dist-cli/chunks/{debug-EUHBBPGM.js → debug-LKV5CEAV.js} +17 -17
- package/dist-cli/chunks/desktop-EMDPOYQT.js +31 -0
- package/dist-cli/chunks/detox-4J4UTZE7.js +52 -0
- package/dist-cli/chunks/{device-PONITUZJ.js → device-PMZ7RPXQ.js} +11 -11
- package/dist-cli/chunks/{diagnose-2PN4K4L2.js → diagnose-MLEP727D.js} +12 -12
- package/dist-cli/chunks/{disk-cleanup-U2PQLOEW.js → disk-cleanup-CVEDIPEE.js} +2 -2
- package/dist-cli/chunks/drivers-NTUKJEL6.js +4 -0
- package/dist-cli/chunks/{film-XGZCFTQL.js → film-4RNECABF.js} +9 -9
- package/dist-cli/chunks/flow-5IOCAHVO.js +4 -0
- package/dist-cli/chunks/help-NUJUYEWP.js +4 -0
- package/dist-cli/chunks/{hidden-runtime-alias-I4MYF5CO.js → hidden-runtime-alias-YIF25W4F.js} +2 -2
- package/dist-cli/chunks/{home-paths-YRAPZ5LE.js → home-paths-WNJCCCCZ.js} +2 -2
- package/dist-cli/chunks/inspect-MFEIYUCN.js +4 -0
- package/dist-cli/chunks/install-desktop-NB65KI4D.js +4 -0
- package/dist-cli/chunks/{login-ZMAIAQ6F.js → login-VEHHGN42.js} +6 -6
- package/dist-cli/chunks/{logout-UQZ5JBJU.js → logout-VE7PNXL2.js} +2 -2
- package/dist-cli/chunks/{maestro-BQYKDUC4.js → maestro-ZXHTDEOI.js} +25 -25
- package/dist-cli/chunks/{maestro-generate-VQYMMQJ5.js → maestro-generate-TK33E2Z6.js} +3 -3
- package/dist-cli/chunks/mode-ZDKJ56NT.js +26 -0
- package/dist-cli/chunks/{optional-demo-registry-DUWHCLGD.js → optional-demo-registry-GBZ3WVDW.js} +2 -2
- package/dist-cli/chunks/{perf-7RAU7WRZ.js → perf-JXNZOUKW.js} +28 -28
- package/dist-cli/chunks/permissions-WQ62PW7Y.js +13 -0
- package/dist-cli/chunks/record-4S3ZMDIO.js +72 -0
- package/dist-cli/chunks/{report-issue-P376KFFU.js → report-issue-KKBADTWO.js} +4 -4
- package/dist-cli/chunks/reset-H5XIISJE.js +4 -0
- package/dist-cli/chunks/runtime-FK7EEMWA.js +4 -0
- package/dist-cli/chunks/{screenshot-command-NE7BKTQ2.js → screenshot-command-42U5MVQL.js} +34 -34
- package/dist-cli/chunks/{screenshot-layers-UE4R64PZ.js → screenshot-layers-4G42AHOX.js} +2 -2
- package/dist-cli/chunks/{screenshots-capture-ULXPLXMC.js → screenshots-capture-HMQ2OO3I.js} +11 -11
- package/dist-cli/chunks/{serve-P7BT4XHR.js → serve-S4V5EDW2.js} +16 -16
- package/dist-cli/chunks/setup-T43V7GA6.js +32 -0
- package/dist-cli/chunks/{skills-NTRYKJSF.js → skills-O426K26J.js} +16 -16
- package/dist-cli/chunks/{state-4D5YAM47.js → state-ZEEPDKJG.js} +5 -5
- package/dist-cli/chunks/storage-4GQLOFGG.js +37 -0
- package/dist-cli/chunks/store-RFMSNWLJ.js +4 -0
- package/dist-cli/chunks/telemetry-NFAAPSMN.js +4 -0
- package/dist-cli/chunks/{timeline-GZNFGD3Q.js → timeline-ONCYX7KW.js} +6 -6
- package/dist-cli/chunks/{upgrade-A46D6PEY.js → upgrade-A36T52AM.js} +2 -2
- package/dist-cli/chunks/upload-36O32DII.js +4 -0
- package/dist-cli/chunks/version-67HA253N.js +6 -0
- package/dist-cli/chunks/{web-H2IXO5SC.js → web-PWXQHQIE.js} +2 -2
- package/dist-cli/chunks/{what-happened-Z7UII5GH.js → what-happened-WNXE622R.js} +16 -16
- package/dist-lib/agent-daemon-client.cjs +5 -5
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +4 -4
- 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.cjs +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 +7 -7
- 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/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +248 -98
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +2 -2
- package/dist-lib/menu.mjs +2 -2
- package/dist-lib/metro-host-modules/react-dom.js +6 -0
- package/dist-lib/metro-host-modules/react-native-web.js +6 -0
- package/dist-lib/metro-host-modules/react-native.js +6 -0
- package/dist-lib/metro-host-modules/react.js +6 -0
- package/dist-lib/metro-host-modules/react__jsx-dev-runtime.js +6 -0
- package/dist-lib/metro-host-modules/react__jsx-runtime.js +6 -0
- package/dist-lib/metro-production-bundle.cjs +72 -0
- package/dist-lib/metro-production-bundle.mjs +44 -0
- package/dist-lib/metro.cjs +152 -8
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +2 -2
- package/dist-lib/react-native-host-modules.cjs +50 -0
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +6 -7
- package/dist-lib/sdk.mjs +6 -7
- package/dist-lib/skills.cjs +71 -77
- package/dist-lib/vite.cjs +104 -85
- package/package.json +15 -2
- package/scripts/preuninstall.cjs +1 -1
- package/skills/contrast/SKILL.md +67 -75
- package/skills/rnx-debug/SKILL.md +84 -84
- package/skills/rnx-perf/SKILL.md +8 -8
- package/skills/rnx-setup/SKILL.md +54 -54
- package/skills/rnx-test/SKILL.md +35 -35
- package/skills/rnx-visual/SKILL.md +18 -18
- package/src/agent-daemon-client.ts +2 -2
- package/src/agent-sessions.ts +2 -2
- package/src/connect.ts +6 -6
- package/src/disk-cleanup.ts +1 -1
- package/src/home-paths.ts +1 -1
- package/src/host/bridge-host.ts +6 -6
- package/src/index.ts +1 -1
- package/src/metro-host-modules/react-dom.js +6 -0
- package/src/metro-host-modules/react-native-web.js +6 -0
- package/src/metro-host-modules/react-native.js +6 -0
- package/src/metro-host-modules/react.js +6 -0
- package/src/metro-host-modules/react__jsx-dev-runtime.js +6 -0
- package/src/metro-host-modules/react__jsx-runtime.js +6 -0
- package/src/metro-plugin.ts +249 -10
- package/src/metro-production-bundle.ts +51 -0
- package/src/public-brand.ts +1 -1
- package/src/react-native-host-modules.ts +25 -0
- package/src/runtime-assets.ts +1 -1
- package/src/sim-client.ts +1 -1
- package/src/vite-plugin-one.ts +171 -145
- package/dist-cli/chunks/app-fonts-L3UXFYVE.js +0 -4
- package/dist-cli/chunks/auth-ISX2EUQL.js +0 -12
- package/dist-cli/chunks/camera-4SWTNJUA.js +0 -33
- package/dist-cli/chunks/chunk-BRHZEZKN.js +0 -124
- package/dist-cli/chunks/chunk-EJPYPJWP.js +0 -5
- package/dist-cli/chunks/chunk-KWCD5MOK.js +0 -15
- package/dist-cli/chunks/chunk-MJ7QGY7Z.js +0 -4
- package/dist-cli/chunks/chunk-RSA4XWHN.js +0 -5
- package/dist-cli/chunks/chunk-S3EIOAWZ.js +0 -74
- package/dist-cli/chunks/chunk-TYANJQLO.js +0 -30
- package/dist-cli/chunks/cli-version-NZUSWKZR.js +0 -4
- package/dist-cli/chunks/daemon-XUEC47EC.js +0 -4
- package/dist-cli/chunks/desktop-LLHMP4A3.js +0 -31
- package/dist-cli/chunks/detox-QLNWLXA4.js +0 -52
- package/dist-cli/chunks/drivers-7IU37M2E.js +0 -4
- package/dist-cli/chunks/flow-NZZLR4BN.js +0 -4
- package/dist-cli/chunks/help-D7URIJRD.js +0 -4
- package/dist-cli/chunks/inspect-TJYWKY56.js +0 -4
- package/dist-cli/chunks/install-desktop-LD3W5RS7.js +0 -4
- package/dist-cli/chunks/mode-ZQ6H7KWM.js +0 -26
- package/dist-cli/chunks/permissions-DRZ3HCFL.js +0 -13
- package/dist-cli/chunks/record-J5JAYW4Y.js +0 -72
- package/dist-cli/chunks/reset-KXYRDEFU.js +0 -4
- package/dist-cli/chunks/runtime-66CEPOG6.js +0 -4
- package/dist-cli/chunks/setup-QO5KZAX3.js +0 -32
- package/dist-cli/chunks/storage-X2K2MDPX.js +0 -37
- package/dist-cli/chunks/store-TUJPIRTT.js +0 -4
- package/dist-cli/chunks/telemetry-CF5DVEKI.js +0 -4
- package/dist-cli/chunks/upload-UIQJIBEZ.js +0 -4
- package/dist-cli/chunks/version-CMBB3FXL.js +0 -6
package/cli/commands/maestro.ts
CHANGED
|
@@ -30,17 +30,17 @@ const MAESTRO_DIRS = ['.maestro', 'maestro']
|
|
|
30
30
|
|
|
31
31
|
function printHelp() {
|
|
32
32
|
console.log(`
|
|
33
|
-
|
|
33
|
+
rnx maestro — author and run Maestro YAML flows against rnx
|
|
34
34
|
|
|
35
35
|
usage:
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
36
|
+
rnx maestro # discover .maestro/ or maestro/ in cwd, run all
|
|
37
|
+
rnx maestro test <flow-or-dir> # mirrors "maestro test"
|
|
38
|
+
rnx maestro test .maestro/ # every *.yaml / *.yml in a directory
|
|
39
|
+
rnx maestro generate "<goal>" # generate, run, and upload a Maestro flow
|
|
40
|
+
rnx maestro start|keep|end # author a flow from live CLI actions
|
|
41
|
+
rnx maestro validate <flow> # validate a Maestro YAML file
|
|
42
|
+
rnx maestro init # scaffold .maestro/login.yaml
|
|
43
|
+
rnx maestro --list-compat # print supported/unsupported verbs
|
|
44
44
|
|
|
45
45
|
options:
|
|
46
46
|
--env KEY=VALUE set env vars for \${KEY} interpolation (repeatable)
|
|
@@ -58,19 +58,19 @@ options:
|
|
|
58
58
|
--slow <ms> delay between steps for natural pacing
|
|
59
59
|
|
|
60
60
|
examples:
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
61
|
+
rnx maestro test .maestro/login.yaml
|
|
62
|
+
rnx maestro test .maestro/
|
|
63
|
+
rnx maestro generate "log in and verify the welcome screen"
|
|
64
|
+
rnx maestro start
|
|
65
|
+
rnx maestro end --output .maestro/login.yaml --validate
|
|
66
|
+
rnx maestro --env USERNAME=alice test .maestro/login.yaml
|
|
67
|
+
rnx maestro init
|
|
68
68
|
`)
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
function printCompatMatrix() {
|
|
72
72
|
console.log(`
|
|
73
|
-
|
|
73
|
+
rnx maestro — compatibility matrix
|
|
74
74
|
|
|
75
75
|
supported verbs:
|
|
76
76
|
launchApp, stopApp, clearState, clearKeychain (warn-only),
|
|
@@ -246,8 +246,8 @@ async function runInit(cwd: string): Promise<number> {
|
|
|
246
246
|
console.error(` error: ${outPath} already exists`)
|
|
247
247
|
return 1
|
|
248
248
|
}
|
|
249
|
-
const starter = `#
|
|
250
|
-
# run:
|
|
249
|
+
const starter = `# rnx maestro starter flow — drop-in compatible with the maestro cli.
|
|
250
|
+
# run: rnx maestro test .maestro/login.yaml
|
|
251
251
|
appId: com.example.app
|
|
252
252
|
---
|
|
253
253
|
- launchApp
|
|
@@ -262,7 +262,7 @@ appId: com.example.app
|
|
|
262
262
|
`
|
|
263
263
|
fs.writeFileSync(outPath, starter, 'utf8')
|
|
264
264
|
console.log(` + wrote ${outPath}`)
|
|
265
|
-
console.log(` next:
|
|
265
|
+
console.log(` next: rnx maestro test .maestro/login.yaml`)
|
|
266
266
|
return 0
|
|
267
267
|
}
|
|
268
268
|
|
|
@@ -343,8 +343,8 @@ export async function runMaestro(
|
|
|
343
343
|
console.error(`
|
|
344
344
|
error: no maestro flows found.
|
|
345
345
|
expected one of: ${MAESTRO_DIRS.map((d) => `./${d}/`).join(', ')}
|
|
346
|
-
or pass a flow explicitly:
|
|
347
|
-
or scaffold a starter flow:
|
|
346
|
+
or pass a flow explicitly: rnx maestro test path/to/flow.yaml
|
|
347
|
+
or scaffold a starter flow: rnx maestro init
|
|
348
348
|
`)
|
|
349
349
|
return 1
|
|
350
350
|
}
|
|
@@ -368,7 +368,7 @@ export async function runMaestro(
|
|
|
368
368
|
}
|
|
369
369
|
|
|
370
370
|
console.log(`
|
|
371
|
-
|
|
371
|
+
rnx maestro — ${files.length} flow${files.length === 1 ? '' : 's'}
|
|
372
372
|
root: ${path.relative(cwd, target) || '.'}
|
|
373
373
|
`)
|
|
374
374
|
|
package/cli/commands/mode.ts
CHANGED
|
@@ -27,12 +27,12 @@ function withoutSubcommand(args: string[], index: number): string[] {
|
|
|
27
27
|
|
|
28
28
|
function printHelp(): void {
|
|
29
29
|
console.log(`
|
|
30
|
-
|
|
30
|
+
rnx mode — toggle live display modes
|
|
31
31
|
|
|
32
32
|
usage:
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
rnx mode screenshot [on|off|toggle]
|
|
34
|
+
rnx mode three [on|off|toggle]
|
|
35
|
+
rnx mode three configure [options]
|
|
36
36
|
`)
|
|
37
37
|
}
|
|
38
38
|
|
|
@@ -4,13 +4,13 @@ import { findDesktopCompanion } from '../desktop-companion'
|
|
|
4
4
|
import type { BridgeSimInfo } from '../ws-bridge'
|
|
5
5
|
|
|
6
6
|
export function printMissingCompanionHint() {
|
|
7
|
-
console.error(' no
|
|
7
|
+
console.error(' no rnx desktop companion found.')
|
|
8
8
|
console.error('')
|
|
9
9
|
console.error(' install the desktop app:')
|
|
10
|
-
console.error('
|
|
10
|
+
console.error(' rnx desktop install')
|
|
11
11
|
console.error('')
|
|
12
12
|
console.error(' or run setup to install the background daemon:')
|
|
13
|
-
console.error('
|
|
13
|
+
console.error(' rnx setup')
|
|
14
14
|
console.error('')
|
|
15
15
|
}
|
|
16
16
|
|
|
@@ -19,12 +19,12 @@ export function printMissingBridgeHint(port: number) {
|
|
|
19
19
|
console.log(` note: no rnx bridge detected on port ${port}`)
|
|
20
20
|
if (companion) {
|
|
21
21
|
console.log(` launch the installed companion with:`)
|
|
22
|
-
console.log(`
|
|
22
|
+
console.log(` rnx desktop`)
|
|
23
23
|
return
|
|
24
24
|
}
|
|
25
25
|
console.log('')
|
|
26
|
-
console.log(' run `
|
|
27
|
-
console.log(' or run `
|
|
26
|
+
console.log(' run `rnx setup` to install the background daemon,')
|
|
27
|
+
console.log(' or run `rnx serve` in another shell for a foreground bridge.')
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
export function printMissingSimHint(port: number) {
|
|
@@ -33,10 +33,10 @@ export function printMissingSimHint(port: number) {
|
|
|
33
33
|
console.error('')
|
|
34
34
|
console.error(' start your app dev server, then open it in rnx:')
|
|
35
35
|
console.error(' npx expo start --localhost --port 8081')
|
|
36
|
-
console.error('
|
|
36
|
+
console.error(' rnx open 8081')
|
|
37
37
|
console.error('')
|
|
38
38
|
console.error(' then inspect the live app:')
|
|
39
|
-
console.error('
|
|
39
|
+
console.error(' rnx describe')
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// printed when a command targeted a specific `--sim <id>` that the bridge
|
|
@@ -76,5 +76,5 @@ export async function printUnknownSimHint(
|
|
|
76
76
|
console.error(` ${sim.id} (${flags})`)
|
|
77
77
|
}
|
|
78
78
|
console.error('')
|
|
79
|
-
console.error(' pass a valid --sim id, or run `
|
|
79
|
+
console.error(' pass a valid --sim id, or run `rnx list` to see all sessions.')
|
|
80
80
|
}
|
package/cli/commands/perf.ts
CHANGED
|
@@ -28,21 +28,21 @@ function withoutSubcommand(args: string[], index: number): string[] {
|
|
|
28
28
|
|
|
29
29
|
function printHelp(): void {
|
|
30
30
|
console.log(`
|
|
31
|
-
|
|
31
|
+
rnx perf — performance profiling tools
|
|
32
32
|
|
|
33
33
|
usage:
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
rnx perf cpu [options]
|
|
35
|
+
rnx perf react <subcommand> [options]
|
|
36
|
+
rnx perf shell <start|stop|transition> [options]
|
|
37
|
+
rnx perf scroll <start|stop> [options]
|
|
38
38
|
|
|
39
39
|
examples:
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
40
|
+
rnx perf cpu --duration 5 --output /tmp/trace.cpuprofile
|
|
41
|
+
rnx perf react summary --limit 10
|
|
42
|
+
rnx perf shell start
|
|
43
|
+
rnx perf shell stop --json
|
|
44
|
+
rnx perf scroll start
|
|
45
|
+
rnx perf scroll stop --json
|
|
46
46
|
`)
|
|
47
47
|
}
|
|
48
48
|
|
|
@@ -51,13 +51,13 @@ const KINDS: readonly SystemPermissionKind[] = [
|
|
|
51
51
|
|
|
52
52
|
function printHelp(): void {
|
|
53
53
|
console.log(`
|
|
54
|
-
|
|
54
|
+
rnx permissions — inspect and change simulated operating-system permissions
|
|
55
55
|
|
|
56
56
|
usage:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
57
|
+
rnx permissions list [--json]
|
|
58
|
+
rnx permissions get <app-id> [--json]
|
|
59
|
+
rnx permissions set <app-id> <kind> <status> [--once] [--accuracy full|reduced] [--json]
|
|
60
|
+
rnx permissions reset <app-id> [kind] [--json]
|
|
61
61
|
`)
|
|
62
62
|
}
|
|
63
63
|
|
package/cli/commands/profile.ts
CHANGED
|
@@ -15,25 +15,25 @@ interface ProfileOptions {
|
|
|
15
15
|
|
|
16
16
|
function printHelp() {
|
|
17
17
|
console.log(`
|
|
18
|
-
|
|
18
|
+
rnx storage profile — manage isolated storage profiles
|
|
19
19
|
|
|
20
20
|
usage:
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
21
|
+
rnx storage profile list
|
|
22
|
+
rnx storage profile create <id>
|
|
23
|
+
rnx storage profile clear <id>
|
|
24
|
+
rnx storage profile delete <id>
|
|
25
25
|
|
|
26
26
|
profiles isolate cookies, localStorage, IndexedDB, cache, permissions, and
|
|
27
27
|
service workers in Electron and Playwright launches. Plain browser-tab launches
|
|
28
28
|
cannot honor profiles and will fail clearly if a profile is requested.
|
|
29
29
|
|
|
30
30
|
examples:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
31
|
+
rnx storage profile list
|
|
32
|
+
rnx storage profile create qa
|
|
33
|
+
rnx open 8081 --profile qa
|
|
34
|
+
rnx open 8081 --profile qa --driver playwright
|
|
35
|
+
rnx storage profile clear qa
|
|
36
|
+
rnx storage profile delete qa
|
|
37
37
|
`)
|
|
38
38
|
}
|
|
39
39
|
|
package/cli/commands/react.ts
CHANGED
|
@@ -36,16 +36,16 @@ interface TreeRow {
|
|
|
36
36
|
|
|
37
37
|
function printHelp() {
|
|
38
38
|
console.log(`
|
|
39
|
-
|
|
39
|
+
rnx perf react — inspect React component render cost in the tenant worker
|
|
40
40
|
|
|
41
41
|
usage:
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
rnx perf react profile start [--include-props] [--max-commits N]
|
|
43
|
+
rnx perf react profile stop
|
|
44
|
+
rnx perf react summary [--limit 10] [--json]
|
|
45
|
+
rnx perf react slow [--limit 5] [--json]
|
|
46
|
+
rnx perf react rerenders [--limit 5] [--json]
|
|
47
|
+
rnx perf react tree [--depth 3] [--find <name>] [--json]
|
|
48
|
+
rnx perf react why <fiber-id> [--json]
|
|
49
49
|
|
|
50
50
|
\`react summary\` is the demo-friendly shortcut: it runs both slow and
|
|
51
51
|
rerenders in one round-trip, prints them as a single table per side,
|
|
@@ -53,12 +53,12 @@ and surfaces the duration-zero warning prominently when the bundle is
|
|
|
53
53
|
running without React profiler timers.
|
|
54
54
|
|
|
55
55
|
examples:
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
56
|
+
rnx perf react profile start
|
|
57
|
+
rnx do tap-text Inbox
|
|
58
|
+
rnx perf react profile stop
|
|
59
|
+
rnx perf react summary --limit 10
|
|
60
|
+
rnx perf react slow --limit 10
|
|
61
|
+
rnx perf react rerenders --json
|
|
62
62
|
`)
|
|
63
63
|
}
|
|
64
64
|
|
|
@@ -332,7 +332,7 @@ export async function runReact(args: string[], opts: ReactOptions): Promise<numb
|
|
|
332
332
|
if (first === 'why') {
|
|
333
333
|
const fiberId = Number(second)
|
|
334
334
|
if (!Number.isFinite(fiberId) || fiberId <= 0) {
|
|
335
|
-
console.error(' usage:
|
|
335
|
+
console.error(' usage: rnx perf react why <fiber-id>')
|
|
336
336
|
return 1
|
|
337
337
|
}
|
|
338
338
|
const result = (await callInBridge(
|
package/cli/commands/record.ts
CHANGED
|
@@ -84,7 +84,7 @@ async function evalCaptureStep<T>(
|
|
|
84
84
|
` ${step} stalled — the render host did not finish within ` +
|
|
85
85
|
`${Math.round(timeoutMs / 1000)}s; it is likely contended or wedged.\n` +
|
|
86
86
|
` the capture lock auto-releases, so simply retry the recording.\n` +
|
|
87
|
-
` if it persists, recover the sim with \`
|
|
87
|
+
` if it persists, recover the sim with \`rnx close --sim <id>\`.`,
|
|
88
88
|
)
|
|
89
89
|
process.exit(1)
|
|
90
90
|
}
|
|
@@ -105,7 +105,7 @@ async function evalCaptureStep<T>(
|
|
|
105
105
|
` releasing. the lock self-heals in ~${Math.round(
|
|
106
106
|
(durationMs + 20_000) / 1000,
|
|
107
107
|
)}s — retry then, or recover now with\n` +
|
|
108
|
-
` \`
|
|
108
|
+
` \`rnx close --sim <id>\` and reopen the sim.`,
|
|
109
109
|
)
|
|
110
110
|
process.exit(1)
|
|
111
111
|
}
|
|
@@ -500,7 +500,7 @@ export async function runRecord(args: string[], opts: RecordOptions) {
|
|
|
500
500
|
console.error(
|
|
501
501
|
' a prior recording was abandoned and its capture is still\n' +
|
|
502
502
|
' releasing. retry in ~20s, or recover now with\n' +
|
|
503
|
-
' `
|
|
503
|
+
' `rnx close --sim <id>` then reopen the sim.',
|
|
504
504
|
)
|
|
505
505
|
}
|
|
506
506
|
process.exit(1)
|
|
@@ -561,7 +561,7 @@ async function probeSim(bridge: WsBridge, code: string): Promise<boolean> {
|
|
|
561
561
|
if (/^command timed out after \d+s$/.test(msg)) {
|
|
562
562
|
console.error(
|
|
563
563
|
' sim did not respond — it is connected to the bridge but has not\n' +
|
|
564
|
-
' loaded an app (or its page is unresponsive). run `
|
|
564
|
+
' loaded an app (or its page is unresponsive). run `rnx list`\n' +
|
|
565
565
|
' and target a sim with a loaded app via --sim <id>.',
|
|
566
566
|
)
|
|
567
567
|
process.exit(1)
|
|
@@ -743,7 +743,7 @@ async function recordStart(args: string[], opts: RecordOptions) {
|
|
|
743
743
|
const existing = readRecordingState()
|
|
744
744
|
if (existing) {
|
|
745
745
|
console.error(
|
|
746
|
-
` recording already in progress (started ${existing.startedAt}, sim ${existing.simId ?? '?'}). run \`
|
|
746
|
+
` recording already in progress (started ${existing.startedAt}, sim ${existing.simId ?? '?'}). run \`rnx record stop\` first, or \`rnx record cancel\` to discard.`,
|
|
747
747
|
)
|
|
748
748
|
process.exit(1)
|
|
749
749
|
}
|
|
@@ -771,7 +771,7 @@ async function recordStart(args: string[], opts: RecordOptions) {
|
|
|
771
771
|
const format = formatArg === 'mp4' ? 'mp4' : 'webm'
|
|
772
772
|
if (formatArg && format !== formatArg) {
|
|
773
773
|
console.error(
|
|
774
|
-
` record start only supports webm or mp4 (got: ${formatArg}). for gif/png use atomic mode:
|
|
774
|
+
` record start only supports webm or mp4 (got: ${formatArg}). for gif/png use atomic mode: rnx record --format ${formatArg} --duration <s>`,
|
|
775
775
|
)
|
|
776
776
|
process.exit(1)
|
|
777
777
|
}
|
|
@@ -854,11 +854,11 @@ async function recordStart(args: string[], opts: RecordOptions) {
|
|
|
854
854
|
})
|
|
855
855
|
if (mode === 'video') {
|
|
856
856
|
console.log(
|
|
857
|
-
` recording ${format} @ ${fps}fps${layers ? ` (${layers})` : ''} — run \`
|
|
857
|
+
` recording ${format} @ ${fps}fps${layers ? ` (${layers})` : ''} — run \`rnx record stop --output <path>\` when done`,
|
|
858
858
|
)
|
|
859
859
|
} else {
|
|
860
860
|
console.log(
|
|
861
|
-
` recording ${mode} — run \`
|
|
861
|
+
` recording ${mode} — run \`rnx record stop\` when done (add --open to launch the preview URL)`,
|
|
862
862
|
)
|
|
863
863
|
}
|
|
864
864
|
} finally {
|
|
@@ -870,7 +870,7 @@ async function recordPreludeStart(args: string[], opts: RecordOptions) {
|
|
|
870
870
|
const existing = readRecordingState()
|
|
871
871
|
if (existing) {
|
|
872
872
|
console.error(
|
|
873
|
-
` recording already in progress (started ${existing.startedAt}, sim ${existing.simId ?? '?'}). run \`
|
|
873
|
+
` recording already in progress (started ${existing.startedAt}, sim ${existing.simId ?? '?'}). run \`rnx record stop\` first, or \`rnx record cancel\` to discard.`,
|
|
874
874
|
)
|
|
875
875
|
process.exit(1)
|
|
876
876
|
}
|
|
@@ -910,7 +910,7 @@ async function recordPreludeStart(args: string[], opts: RecordOptions) {
|
|
|
910
910
|
process.exit(1)
|
|
911
911
|
}
|
|
912
912
|
console.log(
|
|
913
|
-
' recording preview prelude — run `
|
|
913
|
+
' recording preview prelude — run `rnx record start --mode combined` when the visible proof segment is ready',
|
|
914
914
|
)
|
|
915
915
|
} finally {
|
|
916
916
|
bridge.close()
|
|
@@ -1026,8 +1026,8 @@ async function recordStatus(args: string[], opts: RecordOptions) {
|
|
|
1026
1026
|
console.log(
|
|
1027
1027
|
' a recording preview prelude is active. hidden setup is being\n' +
|
|
1028
1028
|
' captured for the next live/combined preview recording. finish\n' +
|
|
1029
|
-
' it with `
|
|
1030
|
-
' with `
|
|
1029
|
+
' it with `rnx record start --mode combined`, or discard it\n' +
|
|
1030
|
+
' with `rnx record cancel`.',
|
|
1031
1031
|
)
|
|
1032
1032
|
return
|
|
1033
1033
|
}
|
|
@@ -1039,7 +1039,7 @@ async function recordStatus(args: string[], opts: RecordOptions) {
|
|
|
1039
1039
|
' (atomic `--mode video/gif/png` writes a local file from that\n' +
|
|
1040
1040
|
' process; live/combined upload to /preview/<id>). if the run was\n' +
|
|
1041
1041
|
' killed, the recording is abandoned and will NOT finish — reclaim\n' +
|
|
1042
|
-
' it now with `
|
|
1042
|
+
' it now with `rnx record cancel`, or it auto-reclaims when the\n' +
|
|
1043
1043
|
" abandoned capture's deadline lapses.",
|
|
1044
1044
|
)
|
|
1045
1045
|
} else {
|
|
@@ -1132,7 +1132,7 @@ async function recordCancel(args: string[], opts: RecordOptions) {
|
|
|
1132
1132
|
async function recordStop(args: string[], opts: RecordOptions) {
|
|
1133
1133
|
const state = readRecordingState()
|
|
1134
1134
|
if (!state) {
|
|
1135
|
-
console.error(' no recording in progress. start one with `
|
|
1135
|
+
console.error(' no recording in progress. start one with `rnx record start`.')
|
|
1136
1136
|
process.exit(1)
|
|
1137
1137
|
}
|
|
1138
1138
|
|
|
@@ -1307,7 +1307,7 @@ async function injectPreviewSessionAuth(
|
|
|
1307
1307
|
console.error(
|
|
1308
1308
|
' SootSim.bridges.setSession missing — this sim is running an engine\n' +
|
|
1309
1309
|
' build without CLI-injected preview auth. reload the sim or open a\n' +
|
|
1310
|
-
' fresh one (`
|
|
1310
|
+
' fresh one (`rnx open --new`); if it persists, update rnx.',
|
|
1311
1311
|
)
|
|
1312
1312
|
process.exit(1)
|
|
1313
1313
|
}
|
|
@@ -214,7 +214,7 @@ export async function runReportIssue(
|
|
|
214
214
|
} catch (error) {
|
|
215
215
|
dependencies.stderr(
|
|
216
216
|
` ${error instanceof Error ? error.message : String(error)}\n` +
|
|
217
|
-
` usage:
|
|
217
|
+
` usage: rnx report-issue [--app <dir>] [--dry-run] [--yes] "<description>"\n`,
|
|
218
218
|
)
|
|
219
219
|
return 1
|
|
220
220
|
}
|
|
@@ -237,7 +237,7 @@ export async function runReportIssue(
|
|
|
237
237
|
}
|
|
238
238
|
|
|
239
239
|
dependencies.stdout(
|
|
240
|
-
`\n
|
|
240
|
+
`\n rnx issue report preview\n\n` +
|
|
241
241
|
` description: ${payload.note}\n` +
|
|
242
242
|
` compatibility: ${compatibilitySummary(payload.bundle.compatibility)}\n` +
|
|
243
243
|
` environment: CLI ${payload.bundle.cliVersion}, runtime ${
|
package/cli/commands/reset.ts
CHANGED
|
@@ -15,10 +15,10 @@ function isResetResult(value: unknown): value is ResetResult {
|
|
|
15
15
|
|
|
16
16
|
function printHelp(): void {
|
|
17
17
|
console.log(`
|
|
18
|
-
|
|
18
|
+
rnx reset - clear the current guest app and relaunch it
|
|
19
19
|
|
|
20
20
|
usage:
|
|
21
|
-
|
|
21
|
+
rnx reset [--full] [--json] [--sim <id>]
|
|
22
22
|
|
|
23
23
|
options:
|
|
24
24
|
--full also clear keychain, user defaults, and permissions
|
package/cli/commands/runtime.ts
CHANGED
|
@@ -62,15 +62,15 @@ export async function runRuntime(args: string[], opts: RuntimeOptions = {}) {
|
|
|
62
62
|
|
|
63
63
|
function printHelp() {
|
|
64
64
|
console.log(`
|
|
65
|
-
|
|
65
|
+
rnx runtime — manage engine runtimes under ~/.sootsim/runtimes/
|
|
66
66
|
|
|
67
67
|
usage:
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
68
|
+
rnx runtime install [version] install a version (default: channel latest)
|
|
69
|
+
rnx runtime list show installed + available versions
|
|
70
|
+
rnx runtime use <version> switch active runtime
|
|
71
|
+
rnx runtime remove <version> delete an installed runtime
|
|
72
|
+
rnx runtime which print active runtime version
|
|
73
|
+
rnx runtime notes print repo or default engine release notes
|
|
74
74
|
|
|
75
75
|
flags:
|
|
76
76
|
--channel <name> channel to resolve 'latest' from (default: stable)
|
|
@@ -81,11 +81,11 @@ environment:
|
|
|
81
81
|
SOOTSIM_CDN_ORIGIN override the CDN base URL (default: ${DEFAULT_RUNTIME_CDN_ORIGIN})
|
|
82
82
|
|
|
83
83
|
examples:
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
84
|
+
rnx runtime install
|
|
85
|
+
rnx runtime install 1.2.3
|
|
86
|
+
rnx runtime install --channel beta
|
|
87
|
+
rnx runtime use 1.2.3
|
|
88
|
+
rnx runtime notes
|
|
89
89
|
`)
|
|
90
90
|
}
|
|
91
91
|
|
|
@@ -99,7 +99,7 @@ async function runtimeInstall(args: string[], opts: RuntimeOptions) {
|
|
|
99
99
|
|
|
100
100
|
ensureSootsimHome()
|
|
101
101
|
|
|
102
|
-
console.log(`
|
|
102
|
+
console.log(`rnx runtime install`)
|
|
103
103
|
console.log(` cdn: ${sootsimRuntime.resolveCdnOrigin()}`)
|
|
104
104
|
|
|
105
105
|
try {
|
|
@@ -233,14 +233,14 @@ async function runtimeList(_args: string[]) {
|
|
|
233
233
|
async function runtimeUse(args: string[]) {
|
|
234
234
|
const version = args[0]
|
|
235
235
|
if (!version) {
|
|
236
|
-
console.error(` usage:
|
|
236
|
+
console.error(` usage: rnx runtime use <version>`)
|
|
237
237
|
process.exit(1)
|
|
238
238
|
}
|
|
239
239
|
const installed = sootsimRuntime.listInstalled()
|
|
240
240
|
if (!installed.includes(version)) {
|
|
241
241
|
console.error(` version ${version} is not installed`)
|
|
242
242
|
console.error(` installed: ${installed.join(', ') || '(none)'}`)
|
|
243
|
-
console.error(` run \`
|
|
243
|
+
console.error(` run \`rnx runtime install ${version}\` first`)
|
|
244
244
|
process.exit(1)
|
|
245
245
|
}
|
|
246
246
|
await activateVersion(version)
|
|
@@ -251,14 +251,14 @@ async function runtimeUse(args: string[]) {
|
|
|
251
251
|
async function runtimeRemove(args: string[]) {
|
|
252
252
|
const version = args[0]
|
|
253
253
|
if (!version) {
|
|
254
|
-
console.error(` usage:
|
|
254
|
+
console.error(` usage: rnx runtime remove <version>`)
|
|
255
255
|
process.exit(1)
|
|
256
256
|
}
|
|
257
257
|
const active = readActiveRuntime()
|
|
258
258
|
if (active === version) {
|
|
259
259
|
console.error(` cannot remove active runtime ${version}`)
|
|
260
260
|
console.error(
|
|
261
|
-
` switch with \`
|
|
261
|
+
` switch with \`rnx runtime use <other>\` first, or install another version`,
|
|
262
262
|
)
|
|
263
263
|
process.exit(1)
|
|
264
264
|
}
|
|
@@ -290,7 +290,7 @@ async function runtimeWhich() {
|
|
|
290
290
|
|
|
291
291
|
async function runtimeNotes(args: string[]) {
|
|
292
292
|
if (args.length > 0) {
|
|
293
|
-
console.error(` usage:
|
|
293
|
+
console.error(` usage: rnx runtime notes`)
|
|
294
294
|
process.exit(1)
|
|
295
295
|
}
|
|
296
296
|
const { config } = await resolveSootSimAppConfig()
|
|
@@ -11,10 +11,10 @@ import { runShellBooleanMode, type ShellBooleanModeOptions } from './shell-boole
|
|
|
11
11
|
export async function runScreenshotMode(args: string[], opts: ShellBooleanModeOptions) {
|
|
12
12
|
if (args.includes('--help') || args.includes('-h')) {
|
|
13
13
|
console.log(`
|
|
14
|
-
|
|
14
|
+
rnx mode screenshot — toggle the screenshot-mode chrome overlay
|
|
15
15
|
|
|
16
16
|
usage:
|
|
17
|
-
|
|
17
|
+
rnx mode screenshot [on|off|toggle]
|
|
18
18
|
|
|
19
19
|
arguments:
|
|
20
20
|
on enable screenshot mode (enables showFrame if needed)
|
|
@@ -22,9 +22,9 @@ arguments:
|
|
|
22
22
|
toggle flip the current state (default)
|
|
23
23
|
|
|
24
24
|
examples:
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
rnx mode screenshot
|
|
26
|
+
rnx mode screenshot on
|
|
27
|
+
rnx mode screenshot off
|
|
28
28
|
`)
|
|
29
29
|
process.exit(0)
|
|
30
30
|
}
|
|
@@ -34,11 +34,11 @@ export async function runScreenshot(rawArgs: string[], opts: ScreenshotOptions)
|
|
|
34
34
|
const args = normalizeAliasFlags(rawArgs)
|
|
35
35
|
if (args.includes('--help') || args.includes('-h')) {
|
|
36
36
|
console.log(`
|
|
37
|
-
|
|
37
|
+
rnx screenshot — capture the canvas as a PNG
|
|
38
38
|
|
|
39
39
|
usage:
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
rnx screenshot [output] [options]
|
|
41
|
+
rnx screenshot [options] --output <path>
|
|
42
42
|
|
|
43
43
|
options:
|
|
44
44
|
--output <path> output file path (default: /tmp/sootsim-inspect.png)
|
|
@@ -58,11 +58,11 @@ options:
|
|
|
58
58
|
--themes capture light and dark variants
|
|
59
59
|
|
|
60
60
|
examples:
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
61
|
+
rnx screenshot
|
|
62
|
+
rnx screenshot --no-shell --output app.png
|
|
63
|
+
rnx screenshot --with-frame --output framed.png
|
|
64
|
+
rnx screenshot --area 0,200,393,400 --output hero.png
|
|
65
|
+
rnx screenshot --id loginButton --output button.png
|
|
66
66
|
`)
|
|
67
67
|
process.exit(0)
|
|
68
68
|
}
|
|
@@ -76,7 +76,7 @@ examples:
|
|
|
76
76
|
: ` unknown flag: ${flag}`,
|
|
77
77
|
)
|
|
78
78
|
}
|
|
79
|
-
console.error(' run `
|
|
79
|
+
console.error(' run `rnx screenshot --help` for the list of supported flags')
|
|
80
80
|
process.exit(1)
|
|
81
81
|
}
|
|
82
82
|
|
|
@@ -146,7 +146,7 @@ examples:
|
|
|
146
146
|
if (rect) {
|
|
147
147
|
console.error(' --area / --id / --text require a running rnx bridge')
|
|
148
148
|
console.error(
|
|
149
|
-
' start one with `
|
|
149
|
+
' start one with `rnx serve`, `rnx desktop`, or your project dev server',
|
|
150
150
|
)
|
|
151
151
|
process.exit(1)
|
|
152
152
|
}
|
|
@@ -216,7 +216,7 @@ async function captureViaBridge(
|
|
|
216
216
|
process.stderr.write(
|
|
217
217
|
' ⚠ screenshot will capture the LAST PAINTED canvas — likely stale.\n' +
|
|
218
218
|
' navigation/`shell` commands sent before this screenshot may not\n' +
|
|
219
|
-
' have repainted yet. focus the tab manually or `
|
|
219
|
+
' have repainted yet. focus the tab manually or `rnx --sim <id>`\n' +
|
|
220
220
|
' to target a visible sim before capturing.\n\n',
|
|
221
221
|
)
|
|
222
222
|
}
|
|
@@ -288,7 +288,7 @@ async function captureViaBridge(
|
|
|
288
288
|
// the sim may be alive but not painting (check `sootsim get errors`)
|
|
289
289
|
if (typeof dataUrl !== 'string' || dataUrl.length <= pngPrefix.length) {
|
|
290
290
|
throw new Error(
|
|
291
|
-
'screenshot capture returned no image data — the sim is connected but not painting; check `
|
|
291
|
+
'screenshot capture returned no image data — the sim is connected but not painting; check `rnx get errors`',
|
|
292
292
|
)
|
|
293
293
|
}
|
|
294
294
|
const base64 = dataUrl.replace(/^data:image\/png;base64,/, '')
|