rnxsim 0.1.365 → 0.1.367
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 +14 -0
- package/cli/bin.ts +18 -0
- package/cli/bridge-flow-runner.ts +16 -153
- package/cli/commands/assert.ts +1 -1
- package/cli/commands/box/checkout-plane.ts +126 -0
- package/cli/commands/box/rnx-command.ts +68 -0
- package/cli/commands/box.ts +200 -0
- package/cli/commands/control.ts +15 -76
- package/cli/commands/detox.ts +18 -1
- package/cli/commands/do-chain.ts +412 -0
- package/cli/commands/flow.ts +2 -11
- package/cli/commands/inspect/core.ts +302 -725
- package/cli/commands/inspect/describe.ts +3 -76
- package/cli/commands/inspect/find.ts +3 -6
- package/cli/commands/inspect/get-layout.ts +14 -1
- package/cli/commands/inspect/resolve-target.ts +41 -47
- package/cli/commands/inspect/shared.ts +28 -123
- package/cli/commands/inspect/tree.ts +6 -15
- package/cli/commands/inspect/wait-ready.ts +2 -2
- package/cli/commands/inspect/wait-selector.ts +4 -8
- package/cli/commands/inspect.ts +23 -17
- package/cli/commands/install-desktop.ts +44 -7
- package/cli/commands/maestro-generate.ts +0 -2
- package/cli/commands/platform.ts +68 -0
- package/cli/commands/state.ts +5 -2
- package/cli/outbound-endpoints.ts +6 -1
- package/cli/parse-args.ts +13 -2
- package/cli/ws-bridge.ts +30 -2
- package/detox/index.ts +37 -18
- package/dist-cli/bin.js +5 -5
- package/dist-cli/chunks/{agent-BVMNQFKF.js → agent-EKKIAKP5.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-B6YFXGC3.js → agent-wrapper-MHLQUGA6.js} +2 -2
- package/dist-cli/chunks/{app-fonts-MEI6R6XR.js → app-fonts-HN6ADRTQ.js} +2 -2
- package/dist-cli/chunks/{assert-JGHI53HV.js → assert-IMR6QCN6.js} +3 -3
- package/dist-cli/chunks/{auth-STEOXUS7.js → auth-27LPMQNH.js} +2 -2
- package/dist-cli/chunks/{beta-HT3FLS5T.js → beta-6RXBB5AI.js} +2 -2
- package/dist-cli/chunks/box-DORLF3GP.js +1709 -0
- package/dist-cli/chunks/{camera-ZCLFSLON.js → camera-2G7JZ5DL.js} +2 -2
- package/dist-cli/chunks/{chunk-RI3NS77J.js → chunk-3QZJLNYY.js} +1 -1
- package/dist-cli/chunks/{chunk-FHWZPUGC.js → chunk-3VBVEDDA.js} +1 -1
- package/dist-cli/chunks/{chunk-EAFKG5R3.js → chunk-4BWGLTKU.js} +2 -2
- package/dist-cli/chunks/chunk-4XSNO374.js +423 -0
- package/dist-cli/chunks/{chunk-GZEUDDAW.js → chunk-5DGMFUZG.js} +2 -2
- package/dist-cli/chunks/{chunk-TKCGP3DD.js → chunk-6DBS5EGX.js} +2 -2
- package/dist-cli/chunks/{chunk-HIDS3PYC.js → chunk-6SO6I3D5.js} +2 -2
- package/dist-cli/chunks/chunk-75EFOPXE.js +32 -0
- package/dist-cli/chunks/{chunk-FIXRGPUT.js → chunk-A5AJFVOF.js} +1 -1
- package/dist-cli/chunks/{chunk-2SFMW5K6.js → chunk-AM2ODYAN.js} +1 -1
- package/dist-cli/chunks/{chunk-BGRGP3QR.js → chunk-AVOROGA3.js} +1 -1
- package/dist-cli/chunks/chunk-AXMMLO7D.js +130 -0
- package/dist-cli/chunks/{chunk-XXNPISER.js → chunk-BSEXEYNX.js} +2 -2
- package/dist-cli/chunks/{chunk-67ATAITF.js → chunk-CM6ZKZW7.js} +2 -2
- package/dist-cli/chunks/{chunk-MR3YPNUI.js → chunk-DNVABCEC.js} +2 -2
- package/dist-cli/chunks/{chunk-5AS7S6HY.js → chunk-E33A4AIR.js} +2 -2
- package/dist-cli/chunks/{chunk-DBJZUCFP.js → chunk-EFMOXYDD.js} +2 -2
- package/dist-cli/chunks/{chunk-ZTWUNK45.js → chunk-EV4P5UBP.js} +2 -2
- package/dist-cli/chunks/{chunk-EVBQDQVY.js → chunk-G5IUIGGC.js} +1 -1
- package/dist-cli/chunks/chunk-GMLOCV3E.js +312 -0
- package/dist-cli/chunks/{chunk-DQFOHIRF.js → chunk-GRN2FHVW.js} +1 -1
- package/dist-cli/chunks/{chunk-CYIE65QN.js → chunk-HFFXPUEP.js} +1 -1
- package/dist-cli/chunks/chunk-HG6T4OOR.js +4 -0
- package/dist-cli/chunks/{chunk-GK7PGYFH.js → chunk-HNT2OXPZ.js} +1 -1
- package/dist-cli/chunks/chunk-IPEURNLI.js +24 -0
- package/dist-cli/chunks/chunk-IR44SFBA.js +5 -0
- package/dist-cli/chunks/chunk-JMSLXZFW.js +4 -0
- package/dist-cli/chunks/{chunk-WGNDJARS.js → chunk-JPXQKLNH.js} +1 -1
- package/dist-cli/chunks/chunk-K3EC6JDE.js +4 -0
- package/dist-cli/chunks/chunk-KHX65HAU.js +4 -0
- package/dist-cli/chunks/{chunk-MACI34ST.js → chunk-LWOVKHRC.js} +2 -2
- package/dist-cli/chunks/{chunk-QIQL7Y5V.js → chunk-MQN5DWTI.js} +2 -2
- package/dist-cli/chunks/{chunk-5VHWQGGF.js → chunk-N3BXQEUF.js} +1 -1
- package/dist-cli/chunks/{chunk-O2ORLK6W.js → chunk-N5OSV26B.js} +2 -2
- package/dist-cli/chunks/chunk-PHNURIH3.js +4 -0
- package/dist-cli/chunks/{chunk-JRPU5TFI.js → chunk-PP2KNVXP.js} +3 -3
- package/dist-cli/chunks/{chunk-UR345KM3.js → chunk-PROKNJVY.js} +2 -2
- package/dist-cli/chunks/chunk-QXLLY4IM.js +7 -0
- package/dist-cli/chunks/{chunk-2CXHDTQ5.js → chunk-RNQTOGM7.js} +1 -1
- package/dist-cli/chunks/{chunk-M5KJCLUW.js → chunk-RPNKKVBN.js} +27 -27
- package/dist-cli/chunks/{chunk-EFXNSJ55.js → chunk-RSNLI2NH.js} +2 -2
- package/dist-cli/chunks/{chunk-25BTVHK2.js → chunk-RZGHV2WI.js} +2 -2
- package/dist-cli/chunks/chunk-SGGL3AFV.js +497 -0
- package/dist-cli/chunks/chunk-SH5ETJKG.js +4 -0
- package/dist-cli/chunks/{chunk-MRNW4GVL.js → chunk-T6J4YP56.js} +2 -2
- package/dist-cli/chunks/{chunk-R4FQZXJC.js → chunk-TWUE7WF5.js} +2 -2
- package/dist-cli/chunks/{chunk-X5ZOZVHC.js → chunk-U44VEQRN.js} +1 -1
- package/dist-cli/chunks/{chunk-XRO5WQXP.js → chunk-URLVQHC3.js} +1 -1
- package/dist-cli/chunks/{chunk-JAFF4RAU.js → chunk-VANZFTUE.js} +1 -1
- package/dist-cli/chunks/{chunk-6BAF6GFS.js → chunk-VB2YBH46.js} +1 -1
- package/dist-cli/chunks/{chunk-O6P4N2JD.js → chunk-VFU2SJ7M.js} +2 -2
- package/dist-cli/chunks/{chunk-XPOTXF5Q.js → chunk-VUBJ6FXU.js} +15 -15
- package/dist-cli/chunks/{chunk-XR4KID25.js → chunk-W5PATILQ.js} +2 -2
- package/dist-cli/chunks/chunk-WI5V4TYG.js +38 -0
- package/dist-cli/chunks/{chunk-NEH4T67X.js → chunk-XTRHQAOV.js} +2 -2
- package/dist-cli/chunks/chunk-XWUTJLBM.js +27 -0
- package/dist-cli/chunks/{chunk-TULWPOAY.js → chunk-XYRUQQUR.js} +2 -2
- package/dist-cli/chunks/chunk-YBFB3RM7.js +4 -0
- package/dist-cli/chunks/chunk-YGQVQ2VG.js +4 -0
- package/dist-cli/chunks/{chunk-J66US2OZ.js → chunk-YINACV32.js} +1 -1
- package/dist-cli/chunks/chunk-YV7ERO2V.js +5 -0
- package/dist-cli/chunks/{cleanup-G4TEYVKY.js → cleanup-GVFHQ3KH.js} +2 -2
- package/dist-cli/chunks/cli-version-DPX5MA2M.js +4 -0
- package/dist-cli/chunks/{compat-EZ5NP32J.js → compat-AYRTXYAM.js} +2 -2
- package/dist-cli/chunks/{config-27M2DGCS.js → config-K7LOOV62.js} +2 -2
- package/dist-cli/chunks/connect-H3CNY4IO.js +4 -0
- package/dist-cli/chunks/control-SMHZ2CF5.js +4 -0
- package/dist-cli/chunks/daemon-TEZUNI73.js +4 -0
- package/dist-cli/chunks/{debug-EXU3D7PC.js → debug-ELGHG57T.js} +3 -3
- package/dist-cli/chunks/{desktop-SHHPZAWQ.js → desktop-4G7FK3MP.js} +3 -3
- package/dist-cli/chunks/detox-JKXGEJIZ.js +52 -0
- package/dist-cli/chunks/{device-4NI26HG6.js → device-IV3AR6KG.js} +2 -2
- package/dist-cli/chunks/{diagnose-P4SFXH6J.js → diagnose-3ERGF7EW.js} +2 -2
- package/dist-cli/chunks/{disk-cleanup-BUAKWYMY.js → disk-cleanup-ALFEVZ4B.js} +2 -2
- package/dist-cli/chunks/do-chain-K2B4OHM7.js +5 -0
- package/dist-cli/chunks/drivers-KJYXA3M3.js +4 -0
- package/dist-cli/chunks/env-2KF6IYZE.js +4 -0
- package/dist-cli/chunks/{film-Y2BAQINB.js → film-UQXJFAD5.js} +3 -3
- package/dist-cli/chunks/flow-ASTUH56E.js +4 -0
- package/dist-cli/chunks/help-SNNYFELA.js +4 -0
- package/dist-cli/chunks/{hidden-runtime-alias-U2MAY2XV.js → hidden-runtime-alias-VJCWCFVO.js} +2 -2
- package/dist-cli/chunks/{home-paths-PAJMZCOS.js → home-paths-EGUZZ6J6.js} +2 -2
- package/dist-cli/chunks/inspect-XANAADQT.js +4 -0
- package/dist-cli/chunks/install-desktop-JKQA7UY6.js +4 -0
- package/dist-cli/chunks/{login-D53XKBEO.js → login-6KQGD7HK.js} +2 -2
- package/dist-cli/chunks/{logout-HZQKLNUJ.js → logout-2FCOVLBC.js} +2 -2
- package/dist-cli/chunks/{maestro-XSS2KX6L.js → maestro-HPSSEVJD.js} +3 -3
- package/dist-cli/chunks/{maestro-generate-DNDQX3JQ.js → maestro-generate-KQQ6JHMR.js} +5 -5
- package/dist-cli/chunks/{mode-LEVGOKI3.js → mode-SH7KRZET.js} +2 -2
- package/dist-cli/chunks/{optional-demo-registry-2XZIJNDG.js → optional-demo-registry-NAMCAVFX.js} +2 -2
- package/dist-cli/chunks/{perf-OKMAXDLB.js → perf-LWKAHXUL.js} +2 -2
- package/dist-cli/chunks/{permissions-VG5TBUTN.js → permissions-EZTKWTXV.js} +2 -2
- package/dist-cli/chunks/platform-KSOJIVN5.js +6 -0
- package/dist-cli/chunks/privacy-EJULWP7L.js +4 -0
- package/dist-cli/chunks/{record-BQYGZOMV.js → record-2IC7BAQN.js} +3 -3
- package/dist-cli/chunks/{report-issue-HCPZESWE.js → report-issue-MMX6HOQO.js} +2 -2
- package/dist-cli/chunks/reset-PKFZA4NC.js +4 -0
- package/dist-cli/chunks/resolve-target-AFKU3BRE.js +4 -0
- package/dist-cli/chunks/runtime-XHWWPOIN.js +4 -0
- package/dist-cli/chunks/{screenshot-command-DWEYPJE7.js → screenshot-command-JYUXDVSA.js} +3 -3
- package/dist-cli/chunks/{screenshot-layers-5GMBXLO7.js → screenshot-layers-OGRY6AA3.js} +2 -2
- package/dist-cli/chunks/{screenshots-capture-5KCI7IZD.js → screenshots-capture-QHDN65XS.js} +2 -2
- package/dist-cli/chunks/{serve-QNKTA2HR.js → serve-W4BKAG4J.js} +3 -3
- package/dist-cli/chunks/setup-WJPMPSAC.js +4 -0
- package/dist-cli/chunks/sim-client-UOQGFBPO.js +4 -0
- package/dist-cli/chunks/{skills-DOEALD3X.js → skills-OPPXOD63.js} +2 -2
- package/dist-cli/chunks/state-TDAN7BOM.js +14 -0
- package/dist-cli/chunks/{storage-E7WUWN3E.js → storage-CFB2YGLY.js} +2 -2
- package/dist-cli/chunks/store-4TEED4ZU.js +4 -0
- package/dist-cli/chunks/telemetry-S6N7CV6G.js +4 -0
- package/dist-cli/chunks/{timeline-IKNUGQ2A.js → timeline-ASOOVP4C.js} +2 -2
- package/dist-cli/chunks/{upgrade-VS3OKXE2.js → upgrade-6MVJISHG.js} +2 -2
- package/dist-cli/chunks/upload-CBNIRFEW.js +4 -0
- package/dist-cli/chunks/{version-F4XHNTBZ.js → version-5GS7CWRL.js} +2 -2
- package/dist-cli/chunks/{web-F72724QL.js → web-QRRMYMV4.js} +2 -2
- package/dist-cli/chunks/welcome-33FXMAMB.js +5 -0
- package/dist-cli/chunks/{what-happened-APK7YKOV.js → what-happened-GAZJGKXX.js} +2 -2
- package/dist-cli/chunks/ws-bridge-DIXUAPLQ.js +4 -0
- 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 +336 -0
- package/dist-lib/bridge-contract-input.mjs +303 -0
- package/dist-lib/bridge-contract.cjs +29 -1
- package/dist-lib/bridge-contract.mjs +19 -0
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +35 -19
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +5 -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 +244 -594
- 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 +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +303 -657
- package/dist-lib/sdk.mjs +301 -652
- package/dist-lib/skills.cjs +256 -339
- package/dist-lib/vite.cjs +1 -1
- package/package.json +10 -1
- package/skills/contrast/SKILL.md +3 -0
- package/skills/rnx-debug/SKILL.md +8 -0
- package/skills/rnx-test/SKILL.md +21 -0
- package/src/app-url.ts +40 -0
- package/src/bridge-contract-input.ts +359 -0
- package/src/bridge-contract.ts +121 -1
- package/src/host/bridge-host.ts +7 -12
- package/src/index.ts +7 -0
- package/src/sim-client.ts +24 -9
- package/dist-cli/chunks/chunk-2JFZ5Z7Q.js +0 -4
- package/dist-cli/chunks/chunk-4WFN4DFR.js +0 -5
- package/dist-cli/chunks/chunk-52ES4API.js +0 -38
- package/dist-cli/chunks/chunk-622E4JET.js +0 -767
- package/dist-cli/chunks/chunk-EFL2ASZO.js +0 -124
- package/dist-cli/chunks/chunk-IWPS3EKJ.js +0 -15
- package/dist-cli/chunks/chunk-MCHKBFUL.js +0 -4
- package/dist-cli/chunks/chunk-OSZ5HZSI.js +0 -24
- package/dist-cli/chunks/chunk-W3UIDI3W.js +0 -5
- package/dist-cli/chunks/chunk-XKRUNS7A.js +0 -32
- package/dist-cli/chunks/chunk-YE3M3YD4.js +0 -944
- package/dist-cli/chunks/chunk-ZCP4CRP6.js +0 -4
- package/dist-cli/chunks/chunk-ZGD7GZRI.js +0 -4
- package/dist-cli/chunks/chunk-ZGH5U4AJ.js +0 -27
- package/dist-cli/chunks/cli-version-ZM3PVKQ5.js +0 -4
- package/dist-cli/chunks/control-4QR43FXV.js +0 -4
- package/dist-cli/chunks/daemon-2U4CJ6AT.js +0 -4
- package/dist-cli/chunks/detox-RQ6FFSBS.js +0 -52
- package/dist-cli/chunks/drivers-OVCUPQTM.js +0 -4
- package/dist-cli/chunks/flow-ELTLKKZ3.js +0 -4
- package/dist-cli/chunks/help-CDEZAG2L.js +0 -4
- package/dist-cli/chunks/inspect-VVQRPJLS.js +0 -4
- package/dist-cli/chunks/install-desktop-YXSRKR35.js +0 -4
- package/dist-cli/chunks/privacy-MNRHREME.js +0 -4
- package/dist-cli/chunks/reset-R4E4W4YI.js +0 -4
- package/dist-cli/chunks/runtime-XRQZ7W34.js +0 -4
- package/dist-cli/chunks/setup-RNMM5GO5.js +0 -4
- package/dist-cli/chunks/state-3HH2IHIF.js +0 -14
- package/dist-cli/chunks/store-HUPZUCFG.js +0 -4
- package/dist-cli/chunks/telemetry-IJ53XR2Y.js +0 -4
- package/dist-cli/chunks/upload-A57NAAHF.js +0 -4
- package/dist-cli/chunks/welcome-B72RRMBW.js +0 -5
package/src/host/bridge-host.ts
CHANGED
|
@@ -54,6 +54,7 @@ import {
|
|
|
54
54
|
isReplacementModuleRequestUrl,
|
|
55
55
|
} from './replacement-module-handler.ts'
|
|
56
56
|
import { handleWebSocketProxyUpgrade } from './websocket-proxy.ts'
|
|
57
|
+
import type { WsCommand } from '../bridge-contract.ts'
|
|
57
58
|
|
|
58
59
|
const SOOTSIM_CROSS_ORIGIN_EMBEDDER_POLICY = 'require-corp'
|
|
59
60
|
|
|
@@ -92,17 +93,7 @@ export interface BridgeLockInfo {
|
|
|
92
93
|
expiresInMs: number
|
|
93
94
|
}
|
|
94
95
|
|
|
95
|
-
export
|
|
96
|
-
id: number
|
|
97
|
-
type: 'evaluate' | 'screenshot' | 'tap' | 'keyboard' | 'tree' | 'focus' | 'close'
|
|
98
|
-
code?: string
|
|
99
|
-
x?: number
|
|
100
|
-
y?: number
|
|
101
|
-
action?: string
|
|
102
|
-
text?: string
|
|
103
|
-
depth?: number
|
|
104
|
-
simId?: string
|
|
105
|
-
}
|
|
96
|
+
export type BridgeSimCommand = Omit<WsCommand, 'id'> & { id: number }
|
|
106
97
|
|
|
107
98
|
interface BridgeSimRegistrationMessage {
|
|
108
99
|
type: 'bridge:register'
|
|
@@ -173,7 +164,7 @@ interface BridgeCliLease {
|
|
|
173
164
|
}
|
|
174
165
|
|
|
175
166
|
// interactive commands change app state and must respect the lease.
|
|
176
|
-
// observational/lifecycle commands (evaluate/tree/screenshot/focus/call/close)
|
|
167
|
+
// observational/lifecycle commands (evaluate/tree/query/resolve/screenshot/focus/call/close)
|
|
177
168
|
// pass through without taking or checking a lease so cleanup never gets stuck
|
|
178
169
|
// behind a stale cli owner.
|
|
179
170
|
// `call` used to acquire a lease too, but most call paths are queries
|
|
@@ -2555,6 +2546,10 @@ export class SootSimBridgeHost {
|
|
|
2555
2546
|
return msg?.action === 'type' ? 'typed text' : 'used keyboard'
|
|
2556
2547
|
case 'tree':
|
|
2557
2548
|
return 'dumped tree'
|
|
2549
|
+
case 'query':
|
|
2550
|
+
return 'queried semantic tree'
|
|
2551
|
+
case 'resolve':
|
|
2552
|
+
return 'resolved semantic selector'
|
|
2558
2553
|
case 'focus':
|
|
2559
2554
|
return 'focused sim'
|
|
2560
2555
|
case 'close':
|
package/src/index.ts
CHANGED
|
@@ -27,6 +27,13 @@ export type {
|
|
|
27
27
|
ResetResult,
|
|
28
28
|
SimStateOptions,
|
|
29
29
|
SimStateResult,
|
|
30
|
+
SimSemanticGeometry,
|
|
31
|
+
SimSemanticNode,
|
|
32
|
+
SimSemanticQuery,
|
|
33
|
+
SimSemanticQueryResult,
|
|
34
|
+
SimSemanticResolveResult,
|
|
35
|
+
SimSemanticResolveSelector,
|
|
36
|
+
SimSemanticSelector,
|
|
30
37
|
} from './bridge-contract'
|
|
31
38
|
|
|
32
39
|
export { rnxPlugin } from './vite-plugin-one'
|
package/src/sim-client.ts
CHANGED
|
@@ -47,6 +47,7 @@ import {
|
|
|
47
47
|
waitForSootsimIdle,
|
|
48
48
|
type WaitForSootsimIdleResult,
|
|
49
49
|
} from '../cli/commands/inspect/settling'
|
|
50
|
+
import { openAppUrl } from './app-url'
|
|
50
51
|
import type { BridgeClaimResult, BridgeSimInfo, WsBridge } from '../cli/ws-bridge'
|
|
51
52
|
import type {
|
|
52
53
|
PerformOptions,
|
|
@@ -54,6 +55,9 @@ import type {
|
|
|
54
55
|
PerformStep,
|
|
55
56
|
ResetOptions,
|
|
56
57
|
ResetResult,
|
|
58
|
+
SimSemanticNode,
|
|
59
|
+
SimSemanticResolveResult,
|
|
60
|
+
SimSemanticResolveSelector,
|
|
57
61
|
SimStateOptions,
|
|
58
62
|
SimStateResult,
|
|
59
63
|
} from './bridge-contract'
|
|
@@ -144,6 +148,11 @@ export interface SimScreenshot {
|
|
|
144
148
|
bytes: Uint8Array
|
|
145
149
|
}
|
|
146
150
|
|
|
151
|
+
export interface SimScreenshotOptions {
|
|
152
|
+
layers?: 'full' | 'tenant' | 'shell'
|
|
153
|
+
crop?: { x: number; y: number; w: number; h: number }
|
|
154
|
+
}
|
|
155
|
+
|
|
147
156
|
export interface SimClientOptions {
|
|
148
157
|
/** default per-command bridge timeout. */
|
|
149
158
|
commandTimeoutMs?: number
|
|
@@ -320,6 +329,11 @@ export class SimClient implements WsBridge, InspectBridge {
|
|
|
320
329
|
)
|
|
321
330
|
}
|
|
322
331
|
|
|
332
|
+
/** dispatch a route or app URL through React Native Linking in this guest. */
|
|
333
|
+
openUrl(target: string): Promise<string> {
|
|
334
|
+
return openAppUrl(this, target)
|
|
335
|
+
}
|
|
336
|
+
|
|
323
337
|
/**
|
|
324
338
|
* block until the guest app has mounted and painted real content.
|
|
325
339
|
* throws SimReadyTimeoutError (with the last probe status) on timeout.
|
|
@@ -375,12 +389,18 @@ export class SimClient implements WsBridge, InspectBridge {
|
|
|
375
389
|
return result ? [result as InteractiveNode] : []
|
|
376
390
|
}
|
|
377
391
|
|
|
378
|
-
async tree(depth = 5): Promise<
|
|
392
|
+
async tree(depth = 5): Promise<SimSemanticNode[]> {
|
|
379
393
|
const { tree } = await inspectTree(this, depth)
|
|
380
|
-
return tree
|
|
394
|
+
return Array.isArray(tree) ? tree : []
|
|
381
395
|
}
|
|
382
396
|
|
|
383
|
-
|
|
397
|
+
resolve(
|
|
398
|
+
selector: SimSemanticResolveSelector,
|
|
399
|
+
): Promise<SimSemanticResolveResult | null> {
|
|
400
|
+
return this.send({ type: 'resolve', selector })
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
/** compact visible semantic tree, formatted as the CLI prints it. */
|
|
384
404
|
describe(opts: { filter?: string; verbose?: boolean } = {}): Promise<DescribeResult> {
|
|
385
405
|
return inspectDescribe(this, {
|
|
386
406
|
describe: true,
|
|
@@ -421,12 +441,7 @@ export class SimClient implements WsBridge, InspectBridge {
|
|
|
421
441
|
return url
|
|
422
442
|
}
|
|
423
443
|
|
|
424
|
-
async screenshot(
|
|
425
|
-
opts: {
|
|
426
|
-
layers?: 'full' | 'tenant' | 'shell'
|
|
427
|
-
crop?: { x: number; y: number; w: number; h: number }
|
|
428
|
-
} = {},
|
|
429
|
-
): Promise<SimScreenshot> {
|
|
444
|
+
async screenshot(opts: SimScreenshotOptions = {}): Promise<SimScreenshot> {
|
|
430
445
|
const result = await this.send({
|
|
431
446
|
type: 'screenshot',
|
|
432
447
|
...(opts.layers ? { layers: opts.layers } : {}),
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
/*! rnx v0.1.365 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import { createRequire as __sootsimCreateRequire } from 'node:module'
|
|
3
|
-
var require = __sootsimCreateRequire(import.meta.url)
|
|
4
|
-
var m={"--help":{type:"boolean",short:"-h"},"--version":{type:"boolean",short:"-V"},"--verbose":{type:"boolean",short:"-v"},"--port":{type:"number",short:"-p"},"--device":{type:"string",short:"-d"},"--theme":{type:"string",short:"-t"},"--headless":{type:"boolean"},"--driver":{type:"string"},"--sim":{type:"string"},"--session":{type:"string"},"--tab":{type:"string"}},p=new Set(["list","describe","find","get","do","wait","network","logs","shell"]),b=new Set(["do","get","wait","shell","debug"]),d=new Set(["detox","maestro","record","film","storage","permissions","perf","screenshot","state","reset","camera","mode","debug","timeline","what-happened","shell","assert","device","open","list","use","claim","close","compat","report-issue","desktop","login","logout","auth","setup","serve","daemon","runtime","upgrade","version","skill","config","cleanup","app-fonts","agent-wrapper","agent",...p]);function u(c){let n=c.slice(2),e={command:null,commandArgs:[],globalFlags:{},help:!1,version:!1,verbose:!1},s=0;for(;s<n.length;){let o=n[s];if(o==="--"){e.commandArgs.push(...n.slice(s+1));break}let i=Object.entries(m).find(([a,r])=>a===o||r.short===o);if(i){let[a,r]=i,l=a.replace(/^--/,"");if(r.type==="boolean")e.globalFlags[l]=!0,s++;else{let t=n[s+1];if(t===void 0||t.startsWith("-")){console.error(` warning: ${o} requires a value`),s++;continue}if(r.type==="number"){let g=Number(t);if(Number.isNaN(g)){console.error(` warning: ${o} requires a number, got "${t}"`),s+=2;continue}e.globalFlags[l]=g}else e.globalFlags[l]=t;s+=2}continue}if(!e.command&&!o.startsWith("-")){let a=o.indexOf("-");if(a>0){let r=o.slice(0,a),l=o.slice(a+1);if(b.has(r)&&l.length>0){e.command=r;let t=n.slice(s+1);e.commandArgs=[l,...t[0]==="--"?t.slice(1):t];break}}if(d.has(o)){e.command=o;let r=n.slice(s+1);e.commandArgs=r[0]==="--"?r.slice(1):r;break}e.commandArgs=n.slice(s);break}e.commandArgs.push(o),s++}return e.help=!!e.globalFlags.help,e.version=!!e.globalFlags.version,e.verbose=!!e.globalFlags.verbose,e}export{p as a,u as b};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/*! rnx v0.1.365 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import { createRequire as __sootsimCreateRequire } from 'node:module'
|
|
3
|
-
var require = __sootsimCreateRequire(import.meta.url)
|
|
4
|
-
import{l as n}from"./chunk-W3UIDI3W.js";var i=[];for(let[t,e]of Object.entries(n))e.cliFlag&&i.push({name:`--${e.cliFlag}`,short:e.cliFlagShort?`-${e.cliFlagShort}`:void 0,key:t,type:e.type==="enum"?"string":e.type,description:e.description,options:e.options,default:e.default});var a=i;function g(){let t=[];for(let e of a){let s=e.short?`${e.short}, ${e.name}`:` ${e.name}`,o=e.options?` [${e.options.join("|")}]`:"",r=e.default!==void 0?` (default: ${e.default})`:"";t.push(` ${s.padEnd(24)}${e.description}${o}${r}`)}return t.join(`
|
|
5
|
-
`)}export{g as a};
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/*! rnx v0.1.365 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import { createRequire as __sootsimCreateRequire } from 'node:module'
|
|
3
|
-
var require = __sootsimCreateRequire(import.meta.url)
|
|
4
|
-
import{I,m as E,n as P,p as y,u as F,w as N}from"./chunk-622E4JET.js";import{r as h,v as B,w as A}from"./chunk-ZGH5U4AJ.js";var k={timeoutMs:1800,settleMs:48,startWindowMs:64};function w(e){return new Promise(t=>setTimeout(t,e))}function z(e){return e.includes("--json")}function K(e){process.stdout.write(`${JSON.stringify(e??null,null,2)}
|
|
5
|
-
`)}function Q(e){process.stderr.write(`${e}
|
|
6
|
-
`)}function b(e,t=Date.now()){let r=new Date(e),n=`${S(r.getHours())}:${S(r.getMinutes())}:${S(r.getSeconds())}`,s=t-e;if(s<0)return n;let o=Math.round(s/1e3);return o<60?`${n} +${o}s`:o<3600?`${n} +${Math.round(o/60)}m`:o<86400?`${n} +${Math.round(o/3600)}h`:`${n} +${Math.round(o/86400)}d`}function S(e){return e<10?`0${e}`:String(e)}async function O(e,t,...r){return B(e,`__sootsimTest.${t}`,...r)}async function j(e,t,...r){return A(e,`SootSim.bridges.mainShell.${t}`,...r)}async function X(e,t={}){try{let r=await O(e,"waitForScreenTransitions",k);if(!t.verbose||!r?.started)return;if(r.timedOut){console.log(` screen transition still active after ${r.waitedMs}ms; continuing`);return}r.waitedMs>0&&console.log(` waited ${r.waitedMs}ms for screen transition settle`)}catch{}}async function Z(e,t,r,...n){let s=Date.now()+Math.max(0,r);for(;;)try{return await j(e,t,...n)}catch(o){if(!I(o)||Date.now()>=s)throw o;await w(50)}}async function ee(e,t,r,n={}){let s=n.attempts??30,o=n.intervalMs??500,l=n.minNodeCount??10;for(let i=0;i<s;i++){let u=h(e,{commandTimeoutMs:t,simId:r,simIdSource:n.simIdSource});try{let c=await u.send({type:"evaluate",code:"(async () => (await window.__sootsimTest?.getNodeCount()) || 0)()"});if(typeof c=="number"&&c>l)return{bridge:u,count:c}}catch{}u.close(),await w(o)}return null}async function te(e,t,r,n={}){let s=n.timeoutMs??8e3,o=n.intervalMs??250,l=Date.now()+s;for(;Date.now()<l;){let i=h(e,{commandTimeoutMs:t,simId:r,simIdSource:n.simIdSource});try{return await i.send({type:"evaluate",code:"1"}),i}catch{i.close()}await w(o)}return null}async function ne(e,t={}){let r=t.timeoutMs??1e4,n=t.errorGraceMs??3e3,s=t.pollIntervalMs??200,o=Date.now(),l=o+r,i=-1,u=o,c=null,d=!1,m={ready:!1,source:"timeout",elapsedMs:0,nodes:0,targets:0,liveFrameActive:!1,liveFrameChannels:0,liveFramePublishes:0,flag:void 0,loadingText:"",externalReady:null,externalStatus:"",externalError:"",errors:0};for(;Date.now()<l;){try{let a=await e.send({type:"evaluate",code:E}),g=Date.now()-o,f=Number(a?.nodes)||0,$=Number(a?.targets)||0,C=a?.liveFrameActive===!0,W=Number(a?.liveFrameChannels)||0,q=Number(a?.liveFramePublishes)||0,x=Number(a?.errors)||0,T=a?.flag===!0,p=a?.externalReady,M=typeof a?.loadingText=="string"?a.loadingText.trim():"",D=typeof a?.externalStatus=="string"?a.externalStatus.trim():"",R=typeof a?.externalError=="string"?a.externalError.trim():"",v=typeof a?.externalError=="string"&&R.length>0;if(c=p,d=v,f!==i&&(i=f,u=g),m={ready:!1,source:"timeout",elapsedMs:g,nodes:f,targets:$,liveFrameActive:C,liveFrameChannels:W,liveFramePublishes:q,flag:a?.flag,loadingText:M,externalReady:typeof p=="boolean"?p:null,externalStatus:D,externalError:R,errors:x},T&&p!==!1&&!v&&!M&&y({liveFrameActive:C,nodes:f,targets:$})&&g-u>=P)return{...m,ready:!0,source:"flag"};if(g>=n&&x>0&&!T)return{...m,ready:!1,source:"error-bail"}}catch{}await w(s)}return c!==!1&&!d&&!m.loadingText&&y(m)?{...m,ready:!0,source:"nodes-fallback"}:{...m,ready:!1,source:"timeout",elapsedMs:Date.now()-o}}function H(e){let t=e.displayUrl||e.url;return e.status!=null?`${e.method} ${t} -> ${e.status}${e.statusText?` ${e.statusText}`:""}`:e.error?`${e.method} ${t} -> ${e.error}`:`${e.method} ${t}`}async function _(e,t,...r){return e.send({type:"call",path:`__sootsimTest.${t}`,args:r})}async function L(e,t={}){let r=await e.send({type:"evaluate",code:N});if(!r||typeof r!="object")return;let n=Math.max(0,Number(r.errors)||0),s=Math.max(0,Number(r.warnings)||0);if(n===0&&s===0)return;let o=[];if(n>0&&o.push(`${n} console error${n===1?"":"s"}`),s>0&&o.push(`${s} console warning${s===1?"":"s"}`),console.log(`
|
|
7
|
-
console: ${o.join(", ")}`),t.errorsCommand&&console.log(` inspect: ${t.errorsCommand}`),s>0&&t.warningsCommand&&console.log(` inspect: ${t.warningsCommand}`),!t.includeTail||n===0)return;let l=await F(e,5);if(!(!Array.isArray(l)||l.length===0)){console.log(`
|
|
8
|
-
recent console errors:
|
|
9
|
-
`);for(let i of l){let u=b(i.timestamp),c=Array.isArray(i.args)?i.args.map(d=>typeof d=="object"?JSON.stringify(d):String(d)).join(" "):String(i);console.log(` [${u}] ${c}`)}}}async function G(e,t={}){let r=await _(e,"getRequestCounts");if(!r||typeof r!="object")return;let n=Math.max(0,Number(r.failed)||0);if(n===0||(console.log(`
|
|
10
|
-
network: ${n} failed request${n===1?"":"s"}`),t.requestsCommand&&console.log(` inspect: ${t.requestsCommand}`),!t.includeTail))return;let s=await _(e,"getFailedRequests",5);if(!(!Array.isArray(s)||s.length===0)){console.log(`
|
|
11
|
-
recent failed requests:
|
|
12
|
-
`);for(let o of s){let l=b(o.timestamp);console.log(` [${l}] ${H(o)}`),o.responseBody?console.log(` ${o.responseBody}`):o.error&&console.log(` ${o.error}`)}}}async function J(e){let t=await e.send({type:"evaluate",code:`(async () => {
|
|
13
|
-
const test = window.__sootsimTest
|
|
14
|
-
const mainShell = window.SootSim?.bridges?.mainShell
|
|
15
|
-
let shell = null
|
|
16
|
-
try {
|
|
17
|
-
shell = typeof mainShell?.getState === 'function' ? await mainShell.getState() : null
|
|
18
|
-
} catch {}
|
|
19
|
-
let nodeCount = 0
|
|
20
|
-
try {
|
|
21
|
-
nodeCount = typeof test?.getNodeCount === 'function' ? await test.getNodeCount() : 0
|
|
22
|
-
} catch {}
|
|
23
|
-
return {
|
|
24
|
-
url: window.location.href,
|
|
25
|
-
simId: window.__sootsimSimId || null,
|
|
26
|
-
nodeCount,
|
|
27
|
-
mode: window.__sootsimRenderHost ? 'render-worker' : 'main-thread',
|
|
28
|
-
shell: shell
|
|
29
|
-
? {
|
|
30
|
-
state: shell.state || null,
|
|
31
|
-
activeApp: shell.activeApp || null,
|
|
32
|
-
showSwitcher: !!shell.showSwitcher,
|
|
33
|
-
switcherPhase: shell.switcherPhase || null,
|
|
34
|
-
}
|
|
35
|
-
: null,
|
|
36
|
-
}
|
|
37
|
-
})()`});if(!t||typeof t!="object")return;console.log(`
|
|
38
|
-
state:`),t.simId&&console.log(` sim: ${t.simId}`),t.url&&console.log(` url: ${t.url}`),t.mode&&console.log(` mode: ${t.mode}`);let r=Number(t.nodeCount)||0;console.log(` nodes: ${r}${r>10?" (ready)":" (not ready)"}`);let n=t.shell;if(n&&typeof n=="object"){let s=[n.state?`state=${n.state}`:null,n.activeApp?`app=${n.activeApp}`:null,n.showSwitcher?"switcher=open":null,n.switcherPhase?`phase=${n.switcherPhase}`:null].filter(Boolean);s.length>0&&console.log(` shell: ${s.join(" ")}`)}}async function ae(e,t={}){try{await J(e)}catch{}try{await L(e,{includeTail:!0,errorsCommand:t.errorsCommand,warningsCommand:t.warningsCommand})}catch{}try{await G(e,{includeTail:!0,requestsCommand:t.requestsCommand})}catch{}}export{w as a,z as b,K as c,Q as d,b as e,O as f,X as g,Z as h,ee as i,te as j,ne as k,J as l,ae as m};
|