rnxsim 0.1.529 → 0.1.531
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 +28 -2
- package/cli/commands/agent-wrapper.ts +4 -1
- package/cli/commands/flow.ts +56 -2
- package/cli/commands/maestro.ts +11 -1
- package/cli/commands/platform.ts +19 -18
- package/cli/flow-live-status.ts +65 -8
- 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 +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +1 -1
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/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 +1 -1
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +27 -4
- package/dist-lib/swift-submit.cjs +1 -1
- package/dist-lib/swift-submit.mjs +1 -1
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
|
@@ -2258,6 +2258,7 @@ export class SootSimBridgeFlowRunner {
|
|
|
2258
2258
|
}
|
|
2259
2259
|
|
|
2260
2260
|
async runStep(rawStepInput: MaestroStep | string, stepIndex: number) {
|
|
2261
|
+
await this.liveStatus?.waitWhilePaused()
|
|
2261
2262
|
// maestro allows several commands in BARE-STRING form (`- back`,
|
|
2262
2263
|
// `- hideKeyboard`, `- waitForAnimationToEnd`, `- scrollUp`, …). yaml parses
|
|
2263
2264
|
// those to a plain string, so normalize to the `{ verb: true }` object form
|
|
@@ -2384,7 +2385,14 @@ export class SootSimBridgeFlowRunner {
|
|
|
2384
2385
|
step.waitFor
|
|
2385
2386
|
)
|
|
2386
2387
|
if (this.stepDelay > 0 && !isAssertion) {
|
|
2387
|
-
|
|
2388
|
+
const chunkMs = 50
|
|
2389
|
+
let elapsed = 0
|
|
2390
|
+
while (elapsed < this.stepDelay) {
|
|
2391
|
+
await this.liveStatus?.waitWhilePaused()
|
|
2392
|
+
const toSleep = Math.min(chunkMs, this.stepDelay - elapsed)
|
|
2393
|
+
await sleep(toSleep)
|
|
2394
|
+
elapsed += toSleep
|
|
2395
|
+
}
|
|
2388
2396
|
}
|
|
2389
2397
|
this.recordFlowTraceStep({
|
|
2390
2398
|
stepIndex,
|
|
@@ -2621,7 +2629,12 @@ export class SootSimBridgeFlowRunner {
|
|
|
2621
2629
|
// runFlowPlayback; absent for programmatic callers.
|
|
2622
2630
|
liveStatus: FlowLiveStatusReporter | null = null
|
|
2623
2631
|
|
|
2624
|
-
|
|
2632
|
+
resetFlowState() {
|
|
2633
|
+
this.flowTraceSteps = []
|
|
2634
|
+
this.lastFailedStep = null
|
|
2635
|
+
}
|
|
2636
|
+
|
|
2637
|
+
extractFlowBody(steps: MaestroStep[]) {
|
|
2625
2638
|
// maestro `onFlowStart` / `onFlowComplete` lifecycle hooks: if any step
|
|
2626
2639
|
// in the array is a sole-key entry whose key is one of these names and
|
|
2627
2640
|
// whose value is a list of sub-steps, pull them out and run them as
|
|
@@ -2649,7 +2662,11 @@ export class SootSimBridgeFlowRunner {
|
|
|
2649
2662
|
}
|
|
2650
2663
|
body.push(step)
|
|
2651
2664
|
}
|
|
2665
|
+
return { onStart, onComplete, body }
|
|
2666
|
+
}
|
|
2652
2667
|
|
|
2668
|
+
async planFlow(steps: MaestroStep[], options: { dryRun?: boolean } = {}) {
|
|
2669
|
+
const { body } = this.extractFlowBody(steps)
|
|
2653
2670
|
if (this.liveStatus) {
|
|
2654
2671
|
await this.liveStatus.plan(
|
|
2655
2672
|
body.map((rawStep, index) => {
|
|
@@ -2660,8 +2677,17 @@ export class SootSimBridgeFlowRunner {
|
|
|
2660
2677
|
const name = Object.keys(step).find((k) => k !== 'when') ?? Object.keys(step)[0]
|
|
2661
2678
|
return { index, name, target: this.flowStepTargetLabel(step, name) }
|
|
2662
2679
|
}),
|
|
2680
|
+
options,
|
|
2663
2681
|
)
|
|
2664
2682
|
}
|
|
2683
|
+
}
|
|
2684
|
+
|
|
2685
|
+
async runFlow(steps: MaestroStep[], options: { skipPlan?: boolean } = {}) {
|
|
2686
|
+
const { onStart, onComplete, body } = this.extractFlowBody(steps)
|
|
2687
|
+
|
|
2688
|
+
if (!options.skipPlan && this.liveStatus) {
|
|
2689
|
+
await this.planFlow(steps)
|
|
2690
|
+
}
|
|
2665
2691
|
|
|
2666
2692
|
if (onStart.length > 0) {
|
|
2667
2693
|
console.log(`[flow] onFlowStart (${onStart.length} steps)`)
|
|
@@ -47,7 +47,10 @@ 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
|
-
|
|
50
|
+
// long-horizon callers (the one-take film) raise it through the env; the
|
|
51
|
+
// take's stack launch sets SOOTSIM_AGENT_EFFORT, never the repo.
|
|
52
|
+
const AGENT_REASONING_EFFORT =
|
|
53
|
+
process.env.SOOTSIM_AGENT_EFFORT?.trim() || ('low' as const)
|
|
51
54
|
const CODEX_READY_TIMEOUT_MS = 5_000
|
|
52
55
|
const CODEX_THREAD_SETUP_TIMEOUT_MS = 10_000
|
|
53
56
|
|
package/cli/commands/flow.ts
CHANGED
|
@@ -58,6 +58,8 @@ const FLOW_BOOLEAN_FLAGS = [
|
|
|
58
58
|
'--proof',
|
|
59
59
|
'--no-shell',
|
|
60
60
|
'--shell-only',
|
|
61
|
+
'--dry-run',
|
|
62
|
+
'--no-run',
|
|
61
63
|
]
|
|
62
64
|
|
|
63
65
|
const FLOW_VALUE_FLAGS = [
|
|
@@ -210,12 +212,14 @@ rnx maestro — author and run Maestro YAML flows
|
|
|
210
212
|
|
|
211
213
|
usage:
|
|
212
214
|
rnx maestro test <flow.yaml> [options]
|
|
215
|
+
rnx maestro load <flow.yaml> [options]
|
|
213
216
|
rnx maestro start
|
|
214
217
|
rnx maestro keep
|
|
215
218
|
rnx maestro end [--output <path>] [--validate] [--video]
|
|
216
219
|
rnx maestro validate <path>
|
|
217
220
|
|
|
218
221
|
options:
|
|
222
|
+
--dry-run, --no-run load flow into the runner idle without executing steps
|
|
219
223
|
--record record a webm artifact while the flow runs
|
|
220
224
|
--profile capture perf stats while the flow runs
|
|
221
225
|
--out <dir> output directory (default: /tmp/rnx-recordings)
|
|
@@ -665,6 +669,7 @@ flow extension:
|
|
|
665
669
|
let previewScreenshotPath: string | null = null
|
|
666
670
|
let failureBundleDir: string | null = null
|
|
667
671
|
let exitCode = 0
|
|
672
|
+
const dryRun = args.includes('--dry-run') || args.includes('--no-run')
|
|
668
673
|
const startsWithLaunchApp = !!steps[0]?.launchApp
|
|
669
674
|
try {
|
|
670
675
|
if (!startsWithLaunchApp) {
|
|
@@ -694,7 +699,21 @@ flow extension:
|
|
|
694
699
|
if (preview && !startsWithLaunchApp && !process.env.RNX_PREVIEW_RESET_DONE) {
|
|
695
700
|
await driver.launchApp({ clearState: true })
|
|
696
701
|
}
|
|
697
|
-
if (
|
|
702
|
+
if (dryRun) {
|
|
703
|
+
await driver.planFlow(steps, { dryRun: true })
|
|
704
|
+
console.log(
|
|
705
|
+
`[flow] flow loaded (${steps.length} steps) — waiting for play in test runner…`,
|
|
706
|
+
)
|
|
707
|
+
await driver.liveStatus?.waitForStart()
|
|
708
|
+
console.log('[flow] starting flow playback…')
|
|
709
|
+
if (record) {
|
|
710
|
+
if (startsWithLaunchApp) {
|
|
711
|
+
driver.prepareRecording()
|
|
712
|
+
} else {
|
|
713
|
+
await driver.startRecording()
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
} else if (record) {
|
|
698
717
|
if (startsWithLaunchApp) {
|
|
699
718
|
driver.prepareRecording()
|
|
700
719
|
} else {
|
|
@@ -723,7 +742,7 @@ flow extension:
|
|
|
723
742
|
)
|
|
724
743
|
}
|
|
725
744
|
}
|
|
726
|
-
await driver.runFlow(steps)
|
|
745
|
+
await driver.runFlow(steps, { skipPlan: dryRun })
|
|
727
746
|
if (profile) {
|
|
728
747
|
profileResult = await driver.stopProfile()
|
|
729
748
|
}
|
|
@@ -923,6 +942,41 @@ flow extension:
|
|
|
923
942
|
}
|
|
924
943
|
}
|
|
925
944
|
|
|
945
|
+
if (dryRun) {
|
|
946
|
+
console.log('[flow] run completed — waiting for reset or new action in test runner…')
|
|
947
|
+
while (true) {
|
|
948
|
+
const action = await driver.liveStatus?.waitForResetOrRerun()
|
|
949
|
+
if (action === 'reset') {
|
|
950
|
+
console.log('[flow] reset requested from devtools — resetting runner state')
|
|
951
|
+
driver.resetFlowState()
|
|
952
|
+
await driver.planFlow(steps, { dryRun: true })
|
|
953
|
+
console.log('[flow] flow reloaded — waiting for play in test runner…')
|
|
954
|
+
await driver.liveStatus?.waitForStart()
|
|
955
|
+
console.log('[flow] re-running flow playback…')
|
|
956
|
+
try {
|
|
957
|
+
await driver.runFlow(steps, { skipPlan: true })
|
|
958
|
+
await driver.liveStatus?.end('passed')
|
|
959
|
+
console.log('\n + completed replay successfully\n')
|
|
960
|
+
} catch (replayErr: any) {
|
|
961
|
+
console.error(`\n x failed replay: ${replayErr?.message || replayErr}\n`)
|
|
962
|
+
await driver.liveStatus?.end('failed')
|
|
963
|
+
}
|
|
964
|
+
} else if (action === 'start') {
|
|
965
|
+
console.log('[flow] play requested from devtools — re-running flow playback…')
|
|
966
|
+
try {
|
|
967
|
+
await driver.runFlow(steps, { skipPlan: true })
|
|
968
|
+
await driver.liveStatus?.end('passed')
|
|
969
|
+
console.log('\n + completed replay successfully\n')
|
|
970
|
+
} catch (replayErr: any) {
|
|
971
|
+
console.error(`\n x failed replay: ${replayErr?.message || replayErr}\n`)
|
|
972
|
+
await driver.liveStatus?.end('failed')
|
|
973
|
+
}
|
|
974
|
+
} else {
|
|
975
|
+
break
|
|
976
|
+
}
|
|
977
|
+
}
|
|
978
|
+
}
|
|
979
|
+
|
|
926
980
|
lastFlowTraceSteps = driver.getFlowTraceSteps()
|
|
927
981
|
|
|
928
982
|
bridge.close()
|
package/cli/commands/maestro.ts
CHANGED
|
@@ -38,6 +38,7 @@ rnx maestro — author and run Maestro YAML flows against rnx
|
|
|
38
38
|
usage:
|
|
39
39
|
rnx maestro # discover .maestro/ or maestro/ in cwd, run all
|
|
40
40
|
rnx maestro test <flow-or-dir> # mirrors "maestro test"
|
|
41
|
+
rnx maestro load <flow> # load flow into runner without running (--dry-run)
|
|
41
42
|
rnx maestro test .maestro/ # every *.yaml / *.yml in a directory
|
|
42
43
|
rnx maestro generate "<goal>" # generate, run, and upload a Maestro flow
|
|
43
44
|
rnx maestro start|keep|end # author a flow from live CLI actions
|
|
@@ -46,6 +47,7 @@ usage:
|
|
|
46
47
|
rnx maestro --list-compat # print supported/unsupported verbs
|
|
47
48
|
|
|
48
49
|
options:
|
|
50
|
+
--dry-run, --no-run load flow into runner idle without auto-running
|
|
49
51
|
--env KEY=VALUE set env vars for \${KEY} interpolation (repeatable)
|
|
50
52
|
--continuous accepted for maestro cli compat; rnx runs the flow once
|
|
51
53
|
--format <fmt> accepted for maestro cli compat (not used)
|
|
@@ -316,7 +318,15 @@ export async function runMaestro(
|
|
|
316
318
|
remaining = hoistLeadingSimFlag(remaining)
|
|
317
319
|
|
|
318
320
|
const cwd = process.cwd()
|
|
319
|
-
|
|
321
|
+
let sub = remaining[0]
|
|
322
|
+
|
|
323
|
+
if (sub === 'load') {
|
|
324
|
+
remaining[0] = 'test'
|
|
325
|
+
sub = 'test'
|
|
326
|
+
if (!remaining.includes('--dry-run') && !remaining.includes('--no-run')) {
|
|
327
|
+
remaining.push('--dry-run')
|
|
328
|
+
}
|
|
329
|
+
}
|
|
320
330
|
|
|
321
331
|
if (sub === 'init') {
|
|
322
332
|
return runInit(cwd)
|
package/cli/commands/platform.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
// (this machine, a local box, or the `rnx remote` namespace). this file resolves
|
|
5
5
|
// the device and hands the rest to the normal open path.
|
|
6
6
|
|
|
7
|
+
import { createHash } from 'node:crypto'
|
|
7
8
|
import {
|
|
8
9
|
DEFAULT_DEVICE_BY_PLATFORM,
|
|
9
10
|
devices,
|
|
@@ -353,8 +354,15 @@ async function runRemoteCreate(
|
|
|
353
354
|
/**
|
|
354
355
|
* `rnx ios --remote` and `rnx android --remote` — the app runs in a micro box.
|
|
355
356
|
*
|
|
356
|
-
* the
|
|
357
|
-
*
|
|
357
|
+
* the bundle is prepared by the box plane's own producer, the one `rnx box
|
|
358
|
+
* create --bundle` uses: assets embedded, nothing minified and no module
|
|
359
|
+
* identity rewritten. the nano producer's artifact is built for the nano
|
|
360
|
+
* runner, which imports it as a module; a box page evaluates the bytes with
|
|
361
|
+
* `(0, eval)` as Script in global scope, and a minified artifact reaches it
|
|
362
|
+
* with no react instance for the reconciler to bind to. there is no size cap
|
|
363
|
+
* either way: the box holds the bundle in parts, so the single-message ceiling
|
|
364
|
+
* a nano upload answers to does not apply.
|
|
365
|
+
*
|
|
358
366
|
* a box created from the already-built app boots it in its own page, and this
|
|
359
367
|
* opens the bare shell watch url minted from the box's display grant — the same
|
|
360
368
|
* /sootsim/#remoteEngine fragment the nano service mints, pointed at the box.
|
|
@@ -367,7 +375,7 @@ async function runRemoteBox(
|
|
|
367
375
|
const command = `${platform} --remote`
|
|
368
376
|
const input = remoteInputFromArgs(args, platform)
|
|
369
377
|
const [
|
|
370
|
-
{ closeCloudBox, closeCloudSession,
|
|
378
|
+
{ closeCloudBox, closeCloudSession, produceCloudBoxArtifact, requestBoxWatchUrl },
|
|
371
379
|
box,
|
|
372
380
|
{ cloudBoxConnectUrl, ensureCloudBoxBrowser, readCloudBoxSession },
|
|
373
381
|
{ authHeaderOrExit, cloudAccountIdOrExit },
|
|
@@ -386,9 +394,11 @@ async function runRemoteBox(
|
|
|
386
394
|
import('../cloud-session'),
|
|
387
395
|
])
|
|
388
396
|
const { openInBrowser } = box
|
|
389
|
-
|
|
390
|
-
//
|
|
391
|
-
|
|
397
|
+
const artifact = await produceCloudBoxArtifact(input.bundlePath)
|
|
398
|
+
// the session records which bundle a box already holds, so reattaching can
|
|
399
|
+
// tell the same app from a rebuilt one. the box producer returns no digest
|
|
400
|
+
// of its own, so take it here over the bytes that actually crossed.
|
|
401
|
+
const artifactSha256 = createHash('sha256').update(artifact.bytes).digest('hex')
|
|
392
402
|
const endpoint = box.cloudBoxEndpoint(args, command)
|
|
393
403
|
if (!endpoint) return 1
|
|
394
404
|
|
|
@@ -399,7 +409,7 @@ async function runRemoteBox(
|
|
|
399
409
|
existingSession.apiOrigin === endpoint &&
|
|
400
410
|
existingSession.platform === platform &&
|
|
401
411
|
existingSession.device === selectedDevice &&
|
|
402
|
-
existingSession.artifact?.sha256 ===
|
|
412
|
+
existingSession.artifact?.sha256 === artifactSha256
|
|
403
413
|
) {
|
|
404
414
|
const live = await readCloudBoxSession({
|
|
405
415
|
endpoint: existingSession.apiOrigin,
|
|
@@ -456,7 +466,6 @@ async function runRemoteBox(
|
|
|
456
466
|
connectUrl: cloudBoxConnectUrl(endpoint, created.id),
|
|
457
467
|
accessToken: created.accessToken ?? '',
|
|
458
468
|
})
|
|
459
|
-
const produced = artifact.receipt
|
|
460
469
|
const session = createCloudBoxSession({
|
|
461
470
|
boxId: created.id,
|
|
462
471
|
boxToken: created.accessToken ?? '',
|
|
@@ -464,7 +473,7 @@ async function runRemoteBox(
|
|
|
464
473
|
platform,
|
|
465
474
|
device: selectedDevice,
|
|
466
475
|
artifact: {
|
|
467
|
-
sha256:
|
|
476
|
+
sha256: artifactSha256,
|
|
468
477
|
bytes: artifact.bytes.length,
|
|
469
478
|
},
|
|
470
479
|
})
|
|
@@ -478,15 +487,7 @@ async function runRemoteBox(
|
|
|
478
487
|
console.log(` box: ${created.id} (${artifact.bytes.length} bytes)`)
|
|
479
488
|
console.log(` platform: ${platform}`)
|
|
480
489
|
if (selectedDevice) console.log(` device: ${selectedDevice}`)
|
|
481
|
-
console.log(
|
|
482
|
-
` source bundle: sha256:${produced.source.sha256} (${produced.source.bytes} bytes)`,
|
|
483
|
-
)
|
|
484
|
-
console.log(
|
|
485
|
-
` normalized modules: ${produced.modules}; javascript ${produced.javascript.sourceBytes} -> ${produced.javascript.minifiedBytes} bytes`,
|
|
486
|
-
)
|
|
487
|
-
console.log(
|
|
488
|
-
` embedded assets: ${produced.assets.descriptors} descriptors, ${produced.assets.variants} scales, ${produced.assets.bytes} bytes (${produced.assets.encodedBytes} encoded)`,
|
|
489
|
-
)
|
|
490
|
+
console.log(` artifact: sha256:${artifactSha256}`)
|
|
490
491
|
// the dest directory was chosen by resolving this bundle's descriptors
|
|
491
492
|
// against it, so say which one won rather than leaving it invisible.
|
|
492
493
|
if (artifact.assetsDirectory) console.log(` asset dest: ${artifact.assetsDirectory}`)
|
package/cli/flow-live-status.ts
CHANGED
|
@@ -44,17 +44,21 @@ export class FlowLiveStatusReporter {
|
|
|
44
44
|
private getSimId?: () => string | undefined,
|
|
45
45
|
) {}
|
|
46
46
|
|
|
47
|
-
private async send(
|
|
47
|
+
private async send(
|
|
48
|
+
payload: Record<string, unknown>,
|
|
49
|
+
simId: string | undefined,
|
|
50
|
+
): Promise<unknown> {
|
|
48
51
|
const reply: unknown = await this.bridge.send({
|
|
49
52
|
type: 'flowStatus',
|
|
50
53
|
simId,
|
|
51
54
|
status: { runId: this.runId, flowName: this.flowName, ...payload },
|
|
52
55
|
})
|
|
53
56
|
this.paused = replyPaused(reply)
|
|
57
|
+
return reply
|
|
54
58
|
}
|
|
55
59
|
|
|
56
|
-
private async push(payload: Record<string, unknown>): Promise<
|
|
57
|
-
if (this.disabled) return
|
|
60
|
+
private async push(payload: Record<string, unknown>): Promise<unknown> {
|
|
61
|
+
if (this.disabled) return undefined
|
|
58
62
|
try {
|
|
59
63
|
const simId = this.getSimId?.()
|
|
60
64
|
if (
|
|
@@ -77,19 +81,68 @@ export class FlowLiveStatusReporter {
|
|
|
77
81
|
}
|
|
78
82
|
}
|
|
79
83
|
this.lastSimId = simId
|
|
80
|
-
await this.send(payload, simId)
|
|
84
|
+
return await this.send(payload, simId)
|
|
81
85
|
} catch (error) {
|
|
82
86
|
this.disabled = true
|
|
83
87
|
console.log(
|
|
84
88
|
`[flow] live status unavailable (${error instanceof Error ? error.message.slice(0, 120) : error}) — continuing without the devtools rail`,
|
|
85
89
|
)
|
|
90
|
+
return undefined
|
|
86
91
|
}
|
|
87
92
|
}
|
|
88
93
|
|
|
89
|
-
async plan(steps: PlanStep[]): Promise<void> {
|
|
94
|
+
async plan(steps: PlanStep[], options: { dryRun?: boolean } = {}): Promise<void> {
|
|
90
95
|
this.plannedSteps = steps.map((step) => ({ ...step }))
|
|
91
96
|
this.completedSteps.clear()
|
|
92
|
-
await this.push({
|
|
97
|
+
await this.push({
|
|
98
|
+
phase: 'plan',
|
|
99
|
+
state: options.dryRun ? 'idle' : 'running',
|
|
100
|
+
dryRun: options.dryRun,
|
|
101
|
+
steps,
|
|
102
|
+
source: this.flowSource,
|
|
103
|
+
})
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
async waitForStart(): Promise<void> {
|
|
107
|
+
if (this.disabled) return
|
|
108
|
+
while (!this.disabled) {
|
|
109
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
110
|
+
const reply = await this.push({ phase: 'heartbeat', state: 'idle' })
|
|
111
|
+
if (
|
|
112
|
+
reply &&
|
|
113
|
+
typeof reply === 'object' &&
|
|
114
|
+
'control' in reply &&
|
|
115
|
+
typeof (reply as { control?: unknown }).control === 'object'
|
|
116
|
+
) {
|
|
117
|
+
const ctrl = (reply as { control: { start?: boolean } }).control
|
|
118
|
+
if (ctrl?.start === true) {
|
|
119
|
+
return
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
async waitForResetOrRerun(): Promise<'reset' | 'start' | 'exit'> {
|
|
126
|
+
if (this.disabled) return 'exit'
|
|
127
|
+
while (!this.disabled) {
|
|
128
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
129
|
+
const reply = await this.push({ phase: 'heartbeat' })
|
|
130
|
+
if (
|
|
131
|
+
reply &&
|
|
132
|
+
typeof reply === 'object' &&
|
|
133
|
+
'control' in reply &&
|
|
134
|
+
typeof (reply as { control?: unknown }).control === 'object'
|
|
135
|
+
) {
|
|
136
|
+
const ctrl = (reply as { control: { reset?: boolean; start?: boolean } }).control
|
|
137
|
+
if (ctrl?.reset === true) {
|
|
138
|
+
return 'reset'
|
|
139
|
+
}
|
|
140
|
+
if (ctrl?.start === true) {
|
|
141
|
+
return 'start'
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return 'exit'
|
|
93
146
|
}
|
|
94
147
|
|
|
95
148
|
async step(
|
|
@@ -114,10 +167,14 @@ export class FlowLiveStatusReporter {
|
|
|
114
167
|
// steps only, so a pause never interrupts a step mid-gesture.
|
|
115
168
|
async waitWhilePaused(): Promise<void> {
|
|
116
169
|
if (this.disabled) return
|
|
117
|
-
|
|
170
|
+
const reply = await this.push({ phase: 'heartbeat' })
|
|
171
|
+
if (replyPaused(reply)) {
|
|
172
|
+
this.paused = true
|
|
173
|
+
}
|
|
174
|
+
while (this.paused && !this.disabled) {
|
|
118
175
|
console.log('[flow] paused from devtools — waiting…')
|
|
119
176
|
while (this.paused && !this.disabled) {
|
|
120
|
-
await new Promise((resolve) => setTimeout(resolve,
|
|
177
|
+
await new Promise((resolve) => setTimeout(resolve, 200))
|
|
121
178
|
await this.push({ phase: 'heartbeat', state: 'paused' })
|
|
122
179
|
}
|
|
123
180
|
if (!this.disabled) console.log('[flow] resumed')
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (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.531 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/host/fetch-proxy-overrides.ts
|
|
4
4
|
var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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.531 | (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/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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.531 | (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.531 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/menu.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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/menu.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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.531 | (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/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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.531 | (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.531 | (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/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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.531 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/sdk.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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/sdk.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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;
|
|
@@ -38266,6 +38266,7 @@ var init_bridge_flow_runner = __esm({
|
|
|
38266
38266
|
return !!(value && typeof value === "object" && "optional" in value && value.optional);
|
|
38267
38267
|
}
|
|
38268
38268
|
async runStep(rawStepInput, stepIndex) {
|
|
38269
|
+
await this.liveStatus?.waitWhilePaused();
|
|
38269
38270
|
const rawStep = typeof rawStepInput === "string" ? normalizeBareStringStep(rawStepInput) : rawStepInput;
|
|
38270
38271
|
const stepName = Object.keys(rawStep).find((k) => k !== "when") || Object.keys(rawStep)[0];
|
|
38271
38272
|
console.log(`[flow] step ${stepIndex + 1}: ${stepName}`);
|
|
@@ -38356,7 +38357,14 @@ var init_bridge_flow_runner = __esm({
|
|
|
38356
38357
|
}
|
|
38357
38358
|
const isAssertion = !!(step.assertVisible || step.assertNotVisible || step.extendedWaitUntil || step.waitFor);
|
|
38358
38359
|
if (this.stepDelay > 0 && !isAssertion) {
|
|
38359
|
-
|
|
38360
|
+
const chunkMs = 50;
|
|
38361
|
+
let elapsed = 0;
|
|
38362
|
+
while (elapsed < this.stepDelay) {
|
|
38363
|
+
await this.liveStatus?.waitWhilePaused();
|
|
38364
|
+
const toSleep = Math.min(chunkMs, this.stepDelay - elapsed);
|
|
38365
|
+
await sleep3(toSleep);
|
|
38366
|
+
elapsed += toSleep;
|
|
38367
|
+
}
|
|
38360
38368
|
}
|
|
38361
38369
|
this.recordFlowTraceStep({
|
|
38362
38370
|
stepIndex,
|
|
@@ -38562,7 +38570,11 @@ var init_bridge_flow_runner = __esm({
|
|
|
38562
38570
|
// live progress reporter (shell devtools "test" tab). attached by
|
|
38563
38571
|
// runFlowPlayback; absent for programmatic callers.
|
|
38564
38572
|
liveStatus = null;
|
|
38565
|
-
|
|
38573
|
+
resetFlowState() {
|
|
38574
|
+
this.flowTraceSteps = [];
|
|
38575
|
+
this.lastFailedStep = null;
|
|
38576
|
+
}
|
|
38577
|
+
extractFlowBody(steps) {
|
|
38566
38578
|
const onStart = [];
|
|
38567
38579
|
const onComplete = [];
|
|
38568
38580
|
const body = [];
|
|
@@ -38578,15 +38590,26 @@ var init_bridge_flow_runner = __esm({
|
|
|
38578
38590
|
}
|
|
38579
38591
|
body.push(step);
|
|
38580
38592
|
}
|
|
38593
|
+
return { onStart, onComplete, body };
|
|
38594
|
+
}
|
|
38595
|
+
async planFlow(steps, options = {}) {
|
|
38596
|
+
const { body } = this.extractFlowBody(steps);
|
|
38581
38597
|
if (this.liveStatus) {
|
|
38582
38598
|
await this.liveStatus.plan(
|
|
38583
38599
|
body.map((rawStep, index) => {
|
|
38584
38600
|
const step = typeof rawStep === "string" ? normalizeBareStringStep(rawStep) : rawStep;
|
|
38585
38601
|
const name2 = Object.keys(step).find((k) => k !== "when") ?? Object.keys(step)[0];
|
|
38586
38602
|
return { index, name: name2, target: this.flowStepTargetLabel(step, name2) };
|
|
38587
|
-
})
|
|
38603
|
+
}),
|
|
38604
|
+
options
|
|
38588
38605
|
);
|
|
38589
38606
|
}
|
|
38607
|
+
}
|
|
38608
|
+
async runFlow(steps, options = {}) {
|
|
38609
|
+
const { onStart, onComplete, body } = this.extractFlowBody(steps);
|
|
38610
|
+
if (!options.skipPlan && this.liveStatus) {
|
|
38611
|
+
await this.planFlow(steps);
|
|
38612
|
+
}
|
|
38590
38613
|
if (onStart.length > 0) {
|
|
38591
38614
|
console.log(`[flow] onFlowStart (${onStart.length} steps)`);
|
|
38592
38615
|
for (let i = 0; i < onStart.length; i++) {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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/swift.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.531 | (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;
|