rnxsim 0.1.505 → 0.1.507
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/bridge-flow-runner.ts +7 -2
- package/cli/commands/agent-wrapper.ts +7 -3
- package/cli/commands/control.ts +3 -3
- package/cli/commands/flow.ts +9 -12
- package/cli/commands/inspect.ts +2 -2
- package/cli/commands/platform.ts +2 -1
- package/cli/flow-live-status.ts +8 -2
- package/cli/ws-bridge.ts +28 -15
- package/detox/index.ts +24 -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 +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/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +24 -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 +142 -56
- 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 +18 -13
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.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 +36 -18
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +214 -87
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/scripts/dev-server-scanner.ts +37 -20
- package/src/screenshots/frame-compose.ts +71 -11
|
@@ -1324,7 +1324,12 @@ export class SootSimBridgeFlowRunner {
|
|
|
1324
1324
|
|
|
1325
1325
|
const deadline = Date.now() + 3000
|
|
1326
1326
|
while (Date.now() < deadline) {
|
|
1327
|
-
|
|
1327
|
+
// the host test bridge proxies the tenant, so isTextInputFocused
|
|
1328
|
+
// resolves a promise; reading it unawaited is always truthy.
|
|
1329
|
+
const state = await this.evaluate<{
|
|
1330
|
+
visible: boolean
|
|
1331
|
+
focused: boolean
|
|
1332
|
+
}>(`(async () => {
|
|
1328
1333
|
const keyboard =
|
|
1329
1334
|
window.__sootsimKeyboard ??
|
|
1330
1335
|
window.SootSim?.bridges?.keyboard ??
|
|
@@ -1332,7 +1337,7 @@ export class SootSimBridgeFlowRunner {
|
|
|
1332
1337
|
const test = window.__sootsimTest
|
|
1333
1338
|
return {
|
|
1334
1339
|
visible: !!keyboard?.isVisible?.(),
|
|
1335
|
-
focused: !!test?.isTextInputFocused?.(),
|
|
1340
|
+
focused: !!(await test?.isTextInputFocused?.()),
|
|
1336
1341
|
}
|
|
1337
1342
|
})()`)
|
|
1338
1343
|
if (!state?.visible && !state?.focused) {
|
|
@@ -46,7 +46,8 @@ const CODEX_THREAD_SANDBOX = 'danger-full-access'
|
|
|
46
46
|
const CODEX_TURN_SANDBOX_POLICY = { type: 'dangerFullAccess' } as const
|
|
47
47
|
const CODEX_MODEL = 'gpt-5.6-luna'
|
|
48
48
|
const CODEX_SERVICE_TIER = 'fast' as const
|
|
49
|
-
|
|
49
|
+
// prompt-bar turns are small targeted edits, so both providers think briefly.
|
|
50
|
+
const AGENT_REASONING_EFFORT = 'low' as const
|
|
50
51
|
const CODEX_READY_TIMEOUT_MS = 5_000
|
|
51
52
|
const CODEX_THREAD_SETUP_TIMEOUT_MS = 10_000
|
|
52
53
|
|
|
@@ -748,7 +749,7 @@ function buildCodexTurnRunner(deps: CodexTurnDeps): TurnRunner {
|
|
|
748
749
|
sandboxPolicy: CODEX_TURN_SANDBOX_POLICY,
|
|
749
750
|
model: CODEX_MODEL,
|
|
750
751
|
serviceTier: CODEX_SERVICE_TIER,
|
|
751
|
-
effort:
|
|
752
|
+
effort: AGENT_REASONING_EFFORT,
|
|
752
753
|
})) as { turn?: { id?: string } } | undefined
|
|
753
754
|
const actualTurnId = res?.turn?.id ?? latestTurnId
|
|
754
755
|
if (actualTurnId && actualTurnId !== pendingId) {
|
|
@@ -795,7 +796,8 @@ function buildCodexTurnRunner(deps: CodexTurnDeps): TurnRunner {
|
|
|
795
796
|
// --- claude per-turn spawn via --output-format stream-json ---
|
|
796
797
|
//
|
|
797
798
|
// each prompt spawns a fresh `claude --print --output-format stream-json
|
|
798
|
-
// --verbose --permission-mode bypassPermissions --session-id <uuid>`
|
|
799
|
+
// --verbose --permission-mode bypassPermissions --effort low --session-id <uuid>`
|
|
800
|
+
// process.
|
|
799
801
|
// stdout is a newline-delimited stream of well-typed objects; we translate
|
|
800
802
|
// them into our AgentEvent wire format. the deterministic session uuid means
|
|
801
803
|
// successive spawns all land in the same `~/.claude/projects/<cwd>/<uuid>.jsonl`
|
|
@@ -873,6 +875,8 @@ function buildClaudeTurnRunner(deps: ClaudeTurnDeps): TurnRunner {
|
|
|
873
875
|
'--verbose',
|
|
874
876
|
'--permission-mode',
|
|
875
877
|
'bypassPermissions',
|
|
878
|
+
'--effort',
|
|
879
|
+
AGENT_REASONING_EFFORT,
|
|
876
880
|
sessionFlag,
|
|
877
881
|
claudeSessionUuid,
|
|
878
882
|
text,
|
package/cli/commands/control.ts
CHANGED
|
@@ -1299,7 +1299,7 @@ export async function runLinkCommand(args: string[], opts: ControlCommandOptions
|
|
|
1299
1299
|
export async function runOpenCommand(
|
|
1300
1300
|
args: string[],
|
|
1301
1301
|
opts: ControlCommandOptions = {},
|
|
1302
|
-
): Promise<
|
|
1302
|
+
): Promise<{ simId: string; launched: boolean } | undefined> {
|
|
1303
1303
|
const parsed = parseBridgeCliArgs(args, {
|
|
1304
1304
|
port: opts.port,
|
|
1305
1305
|
commandTimeoutMs: opts.timeoutMs,
|
|
@@ -1678,7 +1678,7 @@ export async function runOpenCommand(
|
|
|
1678
1678
|
quiet,
|
|
1679
1679
|
)
|
|
1680
1680
|
await maybeDescribeAfterOpen(parsed.wsPort, targetSim.id, args)
|
|
1681
|
-
return
|
|
1681
|
+
return { simId: targetSim.id, launched: false }
|
|
1682
1682
|
}
|
|
1683
1683
|
} finally {
|
|
1684
1684
|
bridge.close()
|
|
@@ -1756,7 +1756,7 @@ export async function runOpenCommand(
|
|
|
1756
1756
|
signalDriverLaunchConnected(result)
|
|
1757
1757
|
printOpenedSim(openUrl, match, `${driver.name} driver`, quiet)
|
|
1758
1758
|
await maybeDescribeAfterOpen(parsed.wsPort, match.id, args)
|
|
1759
|
-
return
|
|
1759
|
+
return { simId: match.id, launched: true }
|
|
1760
1760
|
}
|
|
1761
1761
|
|
|
1762
1762
|
async function runUseLikeCommand(args: string[], opts: ControlCommandOptions = {}) {
|
package/cli/commands/flow.ts
CHANGED
|
@@ -541,22 +541,18 @@ flow extension:
|
|
|
541
541
|
openArgs.push('--headless')
|
|
542
542
|
}
|
|
543
543
|
if (proofMode) openArgs.push('--proof')
|
|
544
|
-
await runOpenCommand(openArgs, {
|
|
544
|
+
const opened = await runOpenCommand(openArgs, {
|
|
545
545
|
port: parsedBridgeArgs.wsPort,
|
|
546
546
|
timeoutMs: parsedBridgeArgs.commandTimeoutMs,
|
|
547
547
|
runtimeConfig: targetAppResolution.runtimeConfig,
|
|
548
548
|
})
|
|
549
|
-
// a flow that
|
|
550
|
-
//
|
|
551
|
-
//
|
|
552
|
-
//
|
|
553
|
-
//
|
|
554
|
-
|
|
555
|
-
closeFlowOwnedSimAfterRun
|
|
556
|
-
if (closeFlowOwnedSimAfterRun) {
|
|
557
|
-
const openedSimId = readCurrentSimId()
|
|
558
|
-
if (openedSimId) ownedSimIds.add(openedSimId)
|
|
559
|
-
}
|
|
549
|
+
// a flow that launched its own sim owns it, and owning it means closing it.
|
|
550
|
+
// the detached host's watchdog polls the *top* ancestor
|
|
551
|
+
// (getStableOwnerPid -> findTopAncestor), which is the shell, agent
|
|
552
|
+
// session, or runner daemon, not the run. that pid can live for days, so
|
|
553
|
+
// a launched sim nobody closes stays open and keeps its flow lock.
|
|
554
|
+
closeFlowOwnedSimAfterRun = opened?.launched === true || !!driverFlag
|
|
555
|
+
if (closeFlowOwnedSimAfterRun && opened) ownedSimIds.add(opened.simId)
|
|
560
556
|
}
|
|
561
557
|
|
|
562
558
|
const resolvedBridgeArgs = parseBridgeCliArgs(args, FLOW_BRIDGE_ARG_OPTIONS)
|
|
@@ -649,6 +645,7 @@ flow extension:
|
|
|
649
645
|
driver.liveStatus = new FlowLiveStatusReporter(
|
|
650
646
|
bridge,
|
|
651
647
|
path.basename(flowPath),
|
|
648
|
+
flowContent,
|
|
652
649
|
() => driver.simId,
|
|
653
650
|
)
|
|
654
651
|
// maestro default vars + flow-level `env:` frontmatter, defined into the
|
package/cli/commands/inspect.ts
CHANGED
|
@@ -1370,9 +1370,9 @@ export async function runInspect(args: string[], opts: InspectOptions) {
|
|
|
1370
1370
|
// console count merges the ws-bridge buffer + observability store (see
|
|
1371
1371
|
// MERGED_CONSOLE_COUNT_EVAL) so the proactive notice agrees with what
|
|
1372
1372
|
// `get errors` returns for forwarded render-worker failures.
|
|
1373
|
-
code: `(() => ({
|
|
1373
|
+
code: `(async () => ({
|
|
1374
1374
|
console: ${MERGED_CONSOLE_COUNT_EVAL},
|
|
1375
|
-
requests: window.__sootsimTest?.getRequestCounts?.() || null,
|
|
1375
|
+
requests: (await window.__sootsimTest?.getRequestCounts?.()) || null,
|
|
1376
1376
|
}))()`,
|
|
1377
1377
|
})
|
|
1378
1378
|
return (raw as SummaryCounts) || { console: null, requests: null }
|
package/cli/commands/platform.ts
CHANGED
|
@@ -294,7 +294,8 @@ export async function runPlatformCommand(
|
|
|
294
294
|
}
|
|
295
295
|
|
|
296
296
|
const { runOpenCommand } = await import('./control')
|
|
297
|
-
|
|
297
|
+
await runOpenCommand(args, { port: opts.port })
|
|
298
|
+
return 0
|
|
298
299
|
}
|
|
299
300
|
|
|
300
301
|
/** Runs the existing remote session path without changing the local platform commands. */
|
package/cli/flow-live-status.ts
CHANGED
|
@@ -40,6 +40,7 @@ export class FlowLiveStatusReporter {
|
|
|
40
40
|
constructor(
|
|
41
41
|
private bridge: WsBridge,
|
|
42
42
|
private flowName: string | null,
|
|
43
|
+
private flowSource: string,
|
|
43
44
|
private getSimId?: () => string | undefined,
|
|
44
45
|
) {}
|
|
45
46
|
|
|
@@ -63,7 +64,12 @@ export class FlowLiveStatusReporter {
|
|
|
63
64
|
payload.phase !== 'plan'
|
|
64
65
|
) {
|
|
65
66
|
await this.send(
|
|
66
|
-
{
|
|
67
|
+
{
|
|
68
|
+
phase: 'plan',
|
|
69
|
+
state: 'running',
|
|
70
|
+
steps: this.plannedSteps,
|
|
71
|
+
source: this.flowSource,
|
|
72
|
+
},
|
|
67
73
|
simId,
|
|
68
74
|
)
|
|
69
75
|
for (const step of this.completedSteps.values()) {
|
|
@@ -83,7 +89,7 @@ export class FlowLiveStatusReporter {
|
|
|
83
89
|
async plan(steps: PlanStep[]): Promise<void> {
|
|
84
90
|
this.plannedSteps = steps.map((step) => ({ ...step }))
|
|
85
91
|
this.completedSteps.clear()
|
|
86
|
-
await this.push({ phase: 'plan', state: 'running', steps })
|
|
92
|
+
await this.push({ phase: 'plan', state: 'running', steps, source: this.flowSource })
|
|
87
93
|
}
|
|
88
94
|
|
|
89
95
|
async step(
|
package/cli/ws-bridge.ts
CHANGED
|
@@ -616,25 +616,35 @@ export function createBridge(wsPort: number, opts: WsBridgeOptions = {}): WsBrid
|
|
|
616
616
|
|
|
617
617
|
let warnedAboutContention = false
|
|
618
618
|
let noticedTarget = false
|
|
619
|
-
// the browser host behind each target, learned while that
|
|
620
|
-
// connected. a reload changes the
|
|
621
|
-
|
|
619
|
+
// the browser host and connection behind each target, learned while that
|
|
620
|
+
// sim is still connected. a reload changes the connection, and sometimes the
|
|
621
|
+
// sim id, but not the host.
|
|
622
|
+
const lineageBySimId = new Map<string, { hostPid: number; connectedAt: number }>()
|
|
622
623
|
const lineageLookupBySimId = new Map<string, Promise<void>>()
|
|
623
624
|
|
|
624
625
|
// a reload retires the socket but keeps the browser host. the replacement
|
|
625
626
|
// can receive a new sim id or restore the prior one from session storage.
|
|
626
|
-
// the
|
|
627
|
+
// the unloading page's socket stays listed as open until its close lands, so
|
|
628
|
+
// only a connection newer than the known one is a replacement. the restored
|
|
629
|
+
// id is definitive; a new id must be the only newer same-host match.
|
|
627
630
|
function pickReloadedTarget(sims: unknown, retiredSimId: string): string | null {
|
|
628
|
-
const
|
|
629
|
-
if (
|
|
631
|
+
const lineage = lineageBySimId.get(retiredSimId)
|
|
632
|
+
if (!lineage) return null
|
|
630
633
|
const matches = (Array.isArray(sims) ? (sims as BridgeSimInfo[]) : []).filter(
|
|
631
|
-
(sim) =>
|
|
634
|
+
(sim) =>
|
|
635
|
+
sim.readyState === 'open' &&
|
|
636
|
+
sim.meta?.sootsimHostPid === lineage.hostPid &&
|
|
637
|
+
sim.connectedAt > lineage.connectedAt,
|
|
632
638
|
)
|
|
633
|
-
const
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
639
|
+
const successor =
|
|
640
|
+
matches.find((sim) => sim.id === retiredSimId) ??
|
|
641
|
+
(matches.length === 1 ? matches[0] : null)
|
|
642
|
+
if (!successor) return null
|
|
643
|
+
lineageBySimId.set(successor.id, {
|
|
644
|
+
hostPid: lineage.hostPid,
|
|
645
|
+
connectedAt: successor.connectedAt,
|
|
646
|
+
})
|
|
647
|
+
return successor.id
|
|
638
648
|
}
|
|
639
649
|
|
|
640
650
|
// print a one-line notice on first sim-scoped command so agents/users see
|
|
@@ -761,7 +771,7 @@ export function createBridge(wsPort: number, opts: WsBridgeOptions = {}): WsBrid
|
|
|
761
771
|
if (
|
|
762
772
|
targetedSimId &&
|
|
763
773
|
cmd.type !== 'bridge:list-sims' &&
|
|
764
|
-
!
|
|
774
|
+
!lineageBySimId.has(targetedSimId)
|
|
765
775
|
) {
|
|
766
776
|
let lookup = lineageLookupBySimId.get(targetedSimId)
|
|
767
777
|
if (!lookup) {
|
|
@@ -773,8 +783,11 @@ export function createBridge(wsPort: number, opts: WsBridgeOptions = {}): WsBrid
|
|
|
773
783
|
(sim) => sim.id === targetedSimId,
|
|
774
784
|
)
|
|
775
785
|
const hostPid = targeted?.meta?.sootsimHostPid
|
|
776
|
-
if (typeof hostPid === 'number') {
|
|
777
|
-
|
|
786
|
+
if (targeted && typeof hostPid === 'number') {
|
|
787
|
+
lineageBySimId.set(targetedSimId, {
|
|
788
|
+
hostPid,
|
|
789
|
+
connectedAt: targeted.connectedAt,
|
|
790
|
+
})
|
|
778
791
|
}
|
|
779
792
|
} catch {
|
|
780
793
|
// lineage enables fail-closed reload following, but a failed
|
package/detox/index.ts
CHANGED
|
@@ -2594,6 +2594,30 @@ export const device = {
|
|
|
2594
2594
|
}
|
|
2595
2595
|
},
|
|
2596
2596
|
|
|
2597
|
+
// window-point counterpart to element(...).longPress, for a target detox can
|
|
2598
|
+
// only address by coordinate (a native tab cell, a shell chrome control).
|
|
2599
|
+
async longPress(point: { x: number; y: number }, durationMs = 1000) {
|
|
2600
|
+
const page = getPage()
|
|
2601
|
+
const { x, y } = point
|
|
2602
|
+
await page.evaluate(
|
|
2603
|
+
async ({ x: px, y: py, ms }) => {
|
|
2604
|
+
const longPress = window.SootSim?.bridges?.interact?.longPress
|
|
2605
|
+
if (typeof longPress !== 'function') {
|
|
2606
|
+
throw new Error('sootsim longPress bridge is not installed')
|
|
2607
|
+
}
|
|
2608
|
+
const hit = await longPress(px, py, ms)
|
|
2609
|
+
if (!hit) {
|
|
2610
|
+
throw new Error(`sootsim longPress missed at ${px},${py}`)
|
|
2611
|
+
}
|
|
2612
|
+
},
|
|
2613
|
+
{ x, y, ms: durationMs },
|
|
2614
|
+
)
|
|
2615
|
+
await page.waitForTimeout(50)
|
|
2616
|
+
if (_synchronizationEnabled) {
|
|
2617
|
+
await waitForSootsimIdle(page)
|
|
2618
|
+
}
|
|
2619
|
+
},
|
|
2620
|
+
|
|
2597
2621
|
async sendToHome() {
|
|
2598
2622
|
const page = getPage()
|
|
2599
2623
|
_suspendedAppId = await page.evaluate(async () => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
package/dist-lib/beta.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
package/dist-lib/beta.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
package/dist-lib/cloud.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
package/dist-lib/cloud.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
4
4
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
package/dist-lib/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
package/dist-lib/detox/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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;
|
|
@@ -3702,6 +3702,29 @@ var device = {
|
|
|
3702
3702
|
await waitForSootsimIdle(page);
|
|
3703
3703
|
}
|
|
3704
3704
|
},
|
|
3705
|
+
// window-point counterpart to element(...).longPress, for a target detox can
|
|
3706
|
+
// only address by coordinate (a native tab cell, a shell chrome control).
|
|
3707
|
+
async longPress(point, durationMs = 1e3) {
|
|
3708
|
+
const page = getPage();
|
|
3709
|
+
const { x, y } = point;
|
|
3710
|
+
await page.evaluate(
|
|
3711
|
+
async ({ x: px, y: py, ms }) => {
|
|
3712
|
+
const longPress = window.SootSim?.bridges?.interact?.longPress;
|
|
3713
|
+
if (typeof longPress !== "function") {
|
|
3714
|
+
throw new Error("sootsim longPress bridge is not installed");
|
|
3715
|
+
}
|
|
3716
|
+
const hit = await longPress(px, py, ms);
|
|
3717
|
+
if (!hit) {
|
|
3718
|
+
throw new Error(`sootsim longPress missed at ${px},${py}`);
|
|
3719
|
+
}
|
|
3720
|
+
},
|
|
3721
|
+
{ x, y, ms: durationMs }
|
|
3722
|
+
);
|
|
3723
|
+
await page.waitForTimeout(50);
|
|
3724
|
+
if (_synchronizationEnabled) {
|
|
3725
|
+
await waitForSootsimIdle(page);
|
|
3726
|
+
}
|
|
3727
|
+
},
|
|
3705
3728
|
async sendToHome() {
|
|
3706
3729
|
const page = getPage();
|
|
3707
3730
|
_suspendedAppId = await page.evaluate(async () => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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 __defProp = Object.defineProperty;
|
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.507 | (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;
|