rnxsim 0.1.460 → 0.1.462
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 +43 -14
- package/cli/drivers/playwright-sim-host.ts +16 -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 +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 +31 -7
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
|
@@ -784,6 +784,11 @@ export class SootSimBridgeFlowRunner {
|
|
|
784
784
|
text: node.text || null,
|
|
785
785
|
absolutePosition: node.absolutePosition,
|
|
786
786
|
layout: node.layout,
|
|
787
|
+
// the engine's authoritative answer to "is this painted": layout
|
|
788
|
+
// bounds minus clipping and minus every frontward sibling, overlay
|
|
789
|
+
// and portal that fully covers it. visibility assertions read this,
|
|
790
|
+
// never the raw layout box.
|
|
791
|
+
visibleFrame: node.visibleFrame || null,
|
|
787
792
|
isTextInput: !!node.isTextInput,
|
|
788
793
|
}
|
|
789
794
|
})()`)
|
|
@@ -861,6 +866,8 @@ export class SootSimBridgeFlowRunner {
|
|
|
861
866
|
text: node.text || null,
|
|
862
867
|
absolutePosition: node.absolutePosition,
|
|
863
868
|
layout: node.layout,
|
|
869
|
+
// authoritative visibility, as in findElement above.
|
|
870
|
+
visibleFrame: node.visibleFrame || null,
|
|
864
871
|
isTextInput: !!node.isTextInput,
|
|
865
872
|
}
|
|
866
873
|
})()`)
|
|
@@ -1170,13 +1177,15 @@ export class SootSimBridgeFlowRunner {
|
|
|
1170
1177
|
}
|
|
1171
1178
|
await sleep(200)
|
|
1172
1179
|
}
|
|
1173
|
-
//
|
|
1174
|
-
//
|
|
1175
|
-
//
|
|
1176
|
-
//
|
|
1180
|
+
// report the geometry rather than a guess at the cause. a zero visibleFrame
|
|
1181
|
+
// says the node paints nothing; it cannot on its own separate scrolled-away
|
|
1182
|
+
// from painted-over, so print the frame and let the reader judge. a missing
|
|
1183
|
+
// node stays clearly distinct from a found one. the diff is one bridge call.
|
|
1177
1184
|
const found = await this.findElement(opts)
|
|
1185
|
+
const frame = found?.visibleFrame
|
|
1178
1186
|
const detail = found
|
|
1179
|
-
? ` (matched node at y=${Math.round(found.absolutePosition.y)} h=${Math.round(found.layout.height)}
|
|
1187
|
+
? ` (matched node at y=${Math.round(found.absolutePosition.y)} h=${Math.round(found.layout.height)}, ` +
|
|
1188
|
+
`visibleFrame ${JSON.stringify(frame ?? null)})`
|
|
1180
1189
|
: ' (no matching node in tree)'
|
|
1181
1190
|
throw new Error(`assertVisible: ${JSON.stringify(opts)} not visible${detail}`)
|
|
1182
1191
|
}
|
|
@@ -1192,13 +1201,32 @@ export class SootSimBridgeFlowRunner {
|
|
|
1192
1201
|
}
|
|
1193
1202
|
}
|
|
1194
1203
|
|
|
1204
|
+
// visibility is the engine's call, not a layout-bounds guess. the old test
|
|
1205
|
+
// here was a vertical band (`y + height > 0 && y < SCREEN_H`), so a node
|
|
1206
|
+
// sealed under an opaque overlay, pushed off the left or right edge, or
|
|
1207
|
+
// clipped to nothing by an ancestor all read as visible — a demo flow could
|
|
1208
|
+
// assert a button that no finger could reach. visibleFrame already carries
|
|
1209
|
+
// the clipped, occlusion-subtracted rect, and tap-target refuses a covered
|
|
1210
|
+
// node on the same basis, so assertions and taps now agree.
|
|
1195
1211
|
private async isElementVisible(opts: { id?: string; text?: string }) {
|
|
1196
1212
|
const element = await this.findElement(opts)
|
|
1197
|
-
return
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1213
|
+
if (!element) return false
|
|
1214
|
+
const frame = element.visibleFrame
|
|
1215
|
+
const usable =
|
|
1216
|
+
!!frame &&
|
|
1217
|
+
Number.isFinite(frame.width) &&
|
|
1218
|
+
Number.isFinite(frame.height) &&
|
|
1219
|
+
Number.isFinite(frame.area)
|
|
1220
|
+
if (!usable) {
|
|
1221
|
+
// absent or non-numeric geometry is unknown visibility, never "hidden".
|
|
1222
|
+
// returning false here would quietly hand assertNotVisible a pass it did
|
|
1223
|
+
// not earn, which is the same shape of false green this change removes.
|
|
1224
|
+
throw new Error(
|
|
1225
|
+
`authoritative visibility unavailable for ${JSON.stringify(opts)}: the engine ` +
|
|
1226
|
+
`returned visibleFrame ${JSON.stringify(frame ?? null)}`,
|
|
1227
|
+
)
|
|
1228
|
+
}
|
|
1229
|
+
return frame.width > 0 && frame.height > 0 && frame.area > 0
|
|
1202
1230
|
}
|
|
1203
1231
|
|
|
1204
1232
|
async inputText(text: string) {
|
|
@@ -2189,18 +2217,19 @@ export class SootSimBridgeFlowRunner {
|
|
|
2189
2217
|
}
|
|
2190
2218
|
|
|
2191
2219
|
// evaluate a `when:` predicate. returns true if the step should run.
|
|
2220
|
+
// `visible:` and `notVisible:` answer the same question assertVisible does,
|
|
2221
|
+
// so they read the engine's visibleFrame too. resolving them by mere presence
|
|
2222
|
+
// in the tree let a guarded step fire on a node painted over by an overlay.
|
|
2192
2223
|
private async evaluateWhen(when: NonNullable<MaestroStep['when']>): Promise<boolean> {
|
|
2193
2224
|
if (when.visible !== undefined) {
|
|
2194
2225
|
const opts =
|
|
2195
2226
|
typeof when.visible === 'string' ? { text: when.visible } : when.visible
|
|
2196
|
-
|
|
2197
|
-
return !!el
|
|
2227
|
+
return this.isElementVisible(opts)
|
|
2198
2228
|
}
|
|
2199
2229
|
if (when.notVisible !== undefined) {
|
|
2200
2230
|
const opts =
|
|
2201
2231
|
typeof when.notVisible === 'string' ? { text: when.notVisible } : when.notVisible
|
|
2202
|
-
|
|
2203
|
-
return !el
|
|
2232
|
+
return !(await this.isElementVisible(opts))
|
|
2204
2233
|
}
|
|
2205
2234
|
if (when.platform !== undefined) {
|
|
2206
2235
|
// rnx emulates iOS — match against the context's platform the way
|
|
@@ -2,6 +2,10 @@ import {
|
|
|
2
2
|
readBrowserCompositeCaptureRequest,
|
|
3
3
|
resolveBrowserCompositeCdpClip,
|
|
4
4
|
} from '../../../sootsim-engine/src/capture/browser-composite'
|
|
5
|
+
import {
|
|
6
|
+
createBrowserPointerDispatcher,
|
|
7
|
+
readBrowserPointerRequest,
|
|
8
|
+
} from '../../../sootsim-engine/src/render-worker/browser-pointer'
|
|
5
9
|
// the detached browser host, as CJS source.
|
|
6
10
|
//
|
|
7
11
|
// it resolves playwright from the absolute path the driver hands it, launches
|
|
@@ -70,6 +74,8 @@ const { existsSync, mkdtempSync, readdirSync, rmSync, unlinkSync } = require('fs
|
|
|
70
74
|
const { execSync } = require('child_process');
|
|
71
75
|
const { tmpdir } = require('os');
|
|
72
76
|
const { join } = require('path');
|
|
77
|
+
const readBrowserPointerRequest = ${readBrowserPointerRequest.toString()};
|
|
78
|
+
const createBrowserPointerDispatcher = ${createBrowserPointerDispatcher.toString()};
|
|
73
79
|
const readBrowserCompositeCaptureRequest = ${readBrowserCompositeCaptureRequest.toString()};
|
|
74
80
|
const resolveBrowserCompositeCdpClip = ${resolveBrowserCompositeCdpClip.toString()};
|
|
75
81
|
// chrome tree reaper — playwright's browser.close() and even SIGKILLing the
|
|
@@ -428,6 +434,16 @@ const cleanupProfile = () => {
|
|
|
428
434
|
await context.exposeBinding('__sootsimHostClose', async () => {
|
|
429
435
|
await shutdown(0);
|
|
430
436
|
});
|
|
437
|
+
const pointerHosts = new WeakMap();
|
|
438
|
+
await context.exposeBinding('__sootsimHostPointer', async (source, value) => {
|
|
439
|
+
let pending = pointerHosts.get(source.page);
|
|
440
|
+
if (!pending) {
|
|
441
|
+
pending = source.page.context().newCDPSession(source.page).then(session =>
|
|
442
|
+
createBrowserPointerDispatcher((method, params) => session.send(method, params)));
|
|
443
|
+
pointerHosts.set(source.page, pending);
|
|
444
|
+
}
|
|
445
|
+
await (await pending)(value);
|
|
446
|
+
});
|
|
431
447
|
await context.exposeBinding('__sootsimHostCapture', async (source, value) => {
|
|
432
448
|
const request = readBrowserCompositeCaptureRequest(value);
|
|
433
449
|
const session = await source.page.context().newCDPSession(source.page);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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.462 | (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;
|
|
@@ -35952,6 +35952,11 @@ var init_bridge_flow_runner = __esm({
|
|
|
35952
35952
|
text: node.text || null,
|
|
35953
35953
|
absolutePosition: node.absolutePosition,
|
|
35954
35954
|
layout: node.layout,
|
|
35955
|
+
// the engine's authoritative answer to "is this painted": layout
|
|
35956
|
+
// bounds minus clipping and minus every frontward sibling, overlay
|
|
35957
|
+
// and portal that fully covers it. visibility assertions read this,
|
|
35958
|
+
// never the raw layout box.
|
|
35959
|
+
visibleFrame: node.visibleFrame || null,
|
|
35955
35960
|
isTextInput: !!node.isTextInput,
|
|
35956
35961
|
}
|
|
35957
35962
|
})()`);
|
|
@@ -36024,6 +36029,8 @@ var init_bridge_flow_runner = __esm({
|
|
|
36024
36029
|
text: node.text || null,
|
|
36025
36030
|
absolutePosition: node.absolutePosition,
|
|
36026
36031
|
layout: node.layout,
|
|
36032
|
+
// authoritative visibility, as in findElement above.
|
|
36033
|
+
visibleFrame: node.visibleFrame || null,
|
|
36027
36034
|
isTextInput: !!node.isTextInput,
|
|
36028
36035
|
}
|
|
36029
36036
|
})()`);
|
|
@@ -36244,7 +36251,8 @@ var init_bridge_flow_runner = __esm({
|
|
|
36244
36251
|
await sleep3(200);
|
|
36245
36252
|
}
|
|
36246
36253
|
const found = await this.findElement(opts);
|
|
36247
|
-
const
|
|
36254
|
+
const frame = found?.visibleFrame;
|
|
36255
|
+
const detail = found ? ` (matched node at y=${Math.round(found.absolutePosition.y)} h=${Math.round(found.layout.height)}, visibleFrame ${JSON.stringify(frame ?? null)})` : " (no matching node in tree)";
|
|
36248
36256
|
throw new Error(`assertVisible: ${JSON.stringify(opts)} not visible${detail}`);
|
|
36249
36257
|
}
|
|
36250
36258
|
async assertNotVisible(target) {
|
|
@@ -36255,9 +36263,24 @@ var init_bridge_flow_runner = __esm({
|
|
|
36255
36263
|
throw new Error(`assertNotVisible: ${JSON.stringify(opts)} IS visible${where}`);
|
|
36256
36264
|
}
|
|
36257
36265
|
}
|
|
36266
|
+
// visibility is the engine's call, not a layout-bounds guess. the old test
|
|
36267
|
+
// here was a vertical band (`y + height > 0 && y < SCREEN_H`), so a node
|
|
36268
|
+
// sealed under an opaque overlay, pushed off the left or right edge, or
|
|
36269
|
+
// clipped to nothing by an ancestor all read as visible — a demo flow could
|
|
36270
|
+
// assert a button that no finger could reach. visibleFrame already carries
|
|
36271
|
+
// the clipped, occlusion-subtracted rect, and tap-target refuses a covered
|
|
36272
|
+
// node on the same basis, so assertions and taps now agree.
|
|
36258
36273
|
async isElementVisible(opts) {
|
|
36259
36274
|
const element = await this.findElement(opts);
|
|
36260
|
-
|
|
36275
|
+
if (!element) return false;
|
|
36276
|
+
const frame = element.visibleFrame;
|
|
36277
|
+
const usable = !!frame && Number.isFinite(frame.width) && Number.isFinite(frame.height) && Number.isFinite(frame.area);
|
|
36278
|
+
if (!usable) {
|
|
36279
|
+
throw new Error(
|
|
36280
|
+
`authoritative visibility unavailable for ${JSON.stringify(opts)}: the engine returned visibleFrame ${JSON.stringify(frame ?? null)}`
|
|
36281
|
+
);
|
|
36282
|
+
}
|
|
36283
|
+
return frame.width > 0 && frame.height > 0 && frame.area > 0;
|
|
36261
36284
|
}
|
|
36262
36285
|
async inputText(text) {
|
|
36263
36286
|
if (!await this.waitForFocusedTextInput()) {
|
|
@@ -37040,16 +37063,17 @@ var init_bridge_flow_runner = __esm({
|
|
|
37040
37063
|
this.firstLaunchDone = true;
|
|
37041
37064
|
}
|
|
37042
37065
|
// evaluate a `when:` predicate. returns true if the step should run.
|
|
37066
|
+
// `visible:` and `notVisible:` answer the same question assertVisible does,
|
|
37067
|
+
// so they read the engine's visibleFrame too. resolving them by mere presence
|
|
37068
|
+
// in the tree let a guarded step fire on a node painted over by an overlay.
|
|
37043
37069
|
async evaluateWhen(when) {
|
|
37044
37070
|
if (when.visible !== void 0) {
|
|
37045
37071
|
const opts = typeof when.visible === "string" ? { text: when.visible } : when.visible;
|
|
37046
|
-
|
|
37047
|
-
return !!el;
|
|
37072
|
+
return this.isElementVisible(opts);
|
|
37048
37073
|
}
|
|
37049
37074
|
if (when.notVisible !== void 0) {
|
|
37050
37075
|
const opts = typeof when.notVisible === "string" ? { text: when.notVisible } : when.notVisible;
|
|
37051
|
-
|
|
37052
|
-
return !el;
|
|
37076
|
+
return !await this.isElementVisible(opts);
|
|
37053
37077
|
}
|
|
37054
37078
|
if (when.platform !== void 0) {
|
|
37055
37079
|
return when.platform.toLowerCase() === this.js.maestro.platform.toLowerCase();
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! rnx v0.1.
|
|
1
|
+
/*! rnx v0.1.462 | (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;
|