sootsim 0.1.193 → 0.1.195
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/dist-cli/bin.js +3 -3
- package/dist-cli/chunks/{agent-USE53A6G.js → agent-2SXLGZU5.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-NNPLVD2D.js → agent-wrapper-Z4T2JLIQ.js} +2 -2
- package/dist-cli/chunks/{app-fonts-K6BJQ5PV.js → app-fonts-57M3WMLT.js} +2 -2
- package/dist-cli/chunks/{assert-OBYCJT6E.js → assert-ZDSDYXM7.js} +2 -2
- package/dist-cli/chunks/{auth-QAZ3NU2P.js → auth-GCFU3FPN.js} +2 -2
- package/dist-cli/chunks/beta-CDNCKSIR.js +2 -0
- package/dist-cli/chunks/{camera-ND7VAW2Z.js → camera-2Q6EQ755.js} +2 -2
- package/dist-cli/chunks/{chunk-TYYWETOW.js → chunk-2JCCEHF7.js} +2 -2
- package/dist-cli/chunks/{chunk-ZWFFRBAR.js → chunk-3DLZ4FJI.js} +2 -2
- package/dist-cli/chunks/{chunk-EYUZLNLC.js → chunk-3GQAHK2F.js} +1 -1
- package/dist-cli/chunks/{chunk-PSP2WT3K.js → chunk-3NHEXDE7.js} +1 -1
- package/dist-cli/chunks/{chunk-RHKQEMHY.js → chunk-45AKDBKD.js} +2 -2
- package/dist-cli/chunks/{chunk-JFURKF6W.js → chunk-4BQRULZH.js} +2 -2
- package/dist-cli/chunks/{chunk-R62P6SPR.js → chunk-6ILXMJDK.js} +2 -2
- package/dist-cli/chunks/{chunk-UG44WJ5U.js → chunk-6OI4P6BP.js} +2 -2
- package/dist-cli/chunks/chunk-6S62XK5C.js +567 -0
- package/dist-cli/chunks/{chunk-3HBRJVSY.js → chunk-7C7XLYIL.js} +1 -1
- package/dist-cli/chunks/{chunk-3FZ2YUUP.js → chunk-7WC5DXPG.js} +2 -2
- package/dist-cli/chunks/{chunk-EBRAQH3D.js → chunk-ASTS6QOH.js} +3 -3
- package/dist-cli/chunks/{chunk-3RKAEUTW.js → chunk-BWGZZ7OI.js} +2 -2
- package/dist-cli/chunks/chunk-CUD7JMPE.js +1 -0
- package/dist-cli/chunks/{chunk-WT4SBY54.js → chunk-DOL4V4TD.js} +5 -5
- package/dist-cli/chunks/{chunk-ZUV7FVK5.js → chunk-FLSYVUEL.js} +2 -2
- package/dist-cli/chunks/{chunk-2OCQ4XLZ.js → chunk-G4HILTME.js} +2 -2
- package/dist-cli/chunks/{chunk-OOGJDQMT.js → chunk-GIR3RNE5.js} +1 -1
- package/dist-cli/chunks/{chunk-ICI5UOHJ.js → chunk-IDLAKJER.js} +1 -1
- package/dist-cli/chunks/{chunk-VGICXM2C.js → chunk-L5M7ZXRO.js} +2 -2
- package/dist-cli/chunks/{chunk-7LAHDYZ3.js → chunk-MRJ3JET4.js} +1 -1
- package/dist-cli/chunks/{chunk-I25N6TF4.js → chunk-NOW2AR67.js} +2 -2
- package/dist-cli/chunks/{chunk-QS73KI7T.js → chunk-O3V7G75W.js} +4 -4
- package/dist-cli/chunks/{chunk-U2QSYQUZ.js → chunk-O6X4PUVA.js} +1 -1
- package/dist-cli/chunks/chunk-PEGAQ2RB.js +119 -0
- package/dist-cli/chunks/chunk-PWAK5OIK.js +92 -0
- package/dist-cli/chunks/{chunk-2H5WTYZB.js → chunk-QK3UIAL2.js} +1 -1
- package/dist-cli/chunks/chunk-QOX33I2E.js +1 -0
- package/dist-cli/chunks/{chunk-6WL7GBOW.js → chunk-RZDJVRQK.js} +1 -1
- package/dist-cli/chunks/{chunk-HNBFCX26.js → chunk-RZNXUNAQ.js} +2 -2
- package/dist-cli/chunks/{chunk-2YZKJ3ZJ.js → chunk-TK26HLN4.js} +1 -1
- package/dist-cli/chunks/{chunk-XX5ABTZE.js → chunk-UQWWFIQV.js} +1 -1
- package/dist-cli/chunks/{chunk-KNPIQNLB.js → chunk-URIOQ3LY.js} +2 -2
- package/dist-cli/chunks/{chunk-ZMYHC2GZ.js → chunk-VAOV6LVA.js} +1 -1
- package/dist-cli/chunks/{chunk-HRH5AL5T.js → chunk-VBOZBE6C.js} +2 -2
- package/dist-cli/chunks/{chunk-73RUAURY.js → chunk-VIIC2RBU.js} +2 -2
- package/dist-cli/chunks/{chunk-UPP423YA.js → chunk-W6EAK5V4.js} +2 -2
- package/dist-cli/chunks/{chunk-HFKXGD6F.js → chunk-YBUKWQUZ.js} +1 -1
- package/dist-cli/chunks/{chunk-32JBVYL5.js → chunk-YBXS3LTW.js} +1 -1
- package/dist-cli/chunks/{chunk-XNCFZ4UT.js → chunk-Z6KDOLRX.js} +1 -1
- package/dist-cli/chunks/{chunk-3HZLGWTB.js → chunk-ZL42H3QC.js} +3 -3
- package/dist-cli/chunks/cli-version-EODTZL3G.js +2 -0
- package/dist-cli/chunks/{compat-FFXRTXLA.js → compat-PEEDQENJ.js} +3 -3
- package/dist-cli/chunks/{config-DSWOQ6FW.js → config-JWIRARHW.js} +2 -2
- package/dist-cli/chunks/{control-CWME7T7P.js → control-XMVJJY74.js} +2 -2
- package/dist-cli/chunks/daemon-XR2776R7.js +2 -0
- package/dist-cli/chunks/{debug-4TEW5NVC.js → debug-QF2FBVFJ.js} +3 -3
- package/dist-cli/chunks/{desktop-UTUIQSY5.js → desktop-36PJJOCB.js} +3 -3
- package/dist-cli/chunks/{detox-QKN3QWEU.js → detox-JM4GGPPI.js} +2 -2
- package/dist-cli/chunks/{device-FIUY3FPI.js → device-P7T54KCN.js} +2 -2
- package/dist-cli/chunks/{diagnose-2SB3E6PB.js → diagnose-HANGNVID.js} +2 -2
- package/dist-cli/chunks/drivers-GHTDMDZW.js +2 -0
- package/dist-cli/chunks/flow-67W54GMT.js +2 -0
- package/dist-cli/chunks/help-LB25BJRD.js +2 -0
- package/dist-cli/chunks/{home-paths-KMZQH425.js → home-paths-AY5QCPZF.js} +2 -2
- package/dist-cli/chunks/inspect-J6NIQIMB.js +2 -0
- package/dist-cli/chunks/install-desktop-KHSH4TYV.js +2 -0
- package/dist-cli/chunks/{login-PYS2PAFC.js → login-D5PAGSQD.js} +4 -4
- package/dist-cli/chunks/{logout-IUYFHCSL.js → logout-2XUENTSF.js} +2 -2
- package/dist-cli/chunks/{maestro-PXDF2QPV.js → maestro-I3BADRUJ.js} +2 -2
- package/dist-cli/chunks/mode-2AFNVIGA.js +95 -0
- package/dist-cli/chunks/optional-demo-registry-NAGQDKQZ.js +2 -0
- package/dist-cli/chunks/{perf-6TPVXFHZ.js → perf-QMAJYMCS.js} +2 -2
- package/dist-cli/chunks/{record-BGGZBLUP.js → record-CCEP74H3.js} +3 -3
- package/dist-cli/chunks/runtime-XCOCSQKQ.js +2 -0
- package/dist-cli/chunks/{screenshot-command-UIF7HN7F.js → screenshot-command-BPU63ULB.js} +3 -3
- package/dist-cli/chunks/{serve-AGSFVT5G.js → serve-MP76K2DW.js} +2 -2
- package/dist-cli/chunks/{setup-4CZ54EJ6.js → setup-ULDPNTVP.js} +3 -3
- package/dist-cli/chunks/{skills-VYTEBBCP.js → skills-AXDG2VZT.js} +2 -2
- package/dist-cli/chunks/{storage-ZXVK3T5Y.js → storage-RFJVSCSD.js} +2 -2
- package/dist-cli/chunks/store-H7XRYXSL.js +2 -0
- package/dist-cli/chunks/telemetry-T2H7BPRZ.js +2 -0
- package/dist-cli/chunks/{test-JOX7MZ67.js → test-PF2RVRU4.js} +5 -5
- package/dist-cli/chunks/{timeline-M4FXQUII.js → timeline-PYHL57AY.js} +2 -2
- package/dist-cli/chunks/{upgrade-WS4EUZ5H.js → upgrade-PFPXP7I5.js} +2 -2
- package/dist-cli/chunks/upload-7IDVWZ4C.js +2 -0
- package/dist-cli/chunks/{version-UCCC26QU.js → version-L4UPIIQX.js} +2 -2
- package/dist-cli/chunks/{web-OP75SZAL.js → web-N2IRGHFP.js} +2 -2
- package/dist-cli/chunks/{what-happened-IED7SETG.js → what-happened-IFLDGKFC.js} +2 -2
- 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/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +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/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/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +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 +3 -1
- package/dist-lib/sdk.mjs +3 -1
- package/dist-lib/skills.cjs +129 -13
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/skills/soot/SKILL.md +3 -3
- package/skills/sootsim-debug/SKILL.md +1 -1
- package/skills/sootsim-test/SKILL.md +1 -1
- package/dist-cli/chunks/beta-XH6NPFJL.js +0 -2
- package/dist-cli/chunks/chunk-2G4WS3NS.js +0 -119
- package/dist-cli/chunks/chunk-BQSG37WI.js +0 -87
- package/dist-cli/chunks/chunk-ODWHC4OS.js +0 -1
- package/dist-cli/chunks/chunk-VA6U55D3.js +0 -1
- package/dist-cli/chunks/chunk-WS4H3OTZ.js +0 -565
- package/dist-cli/chunks/cli-version-NE74BKVQ.js +0 -2
- package/dist-cli/chunks/daemon-ZCLZ7Q2G.js +0 -2
- package/dist-cli/chunks/drivers-ZMTRO2H7.js +0 -2
- package/dist-cli/chunks/flow-YUB6NHPN.js +0 -2
- package/dist-cli/chunks/help-2RQGMWFZ.js +0 -2
- package/dist-cli/chunks/inspect-XIR5LHB4.js +0 -2
- package/dist-cli/chunks/install-desktop-RQ6PDFCW.js +0 -2
- package/dist-cli/chunks/mode-D2UYKUXM.js +0 -99
- package/dist-cli/chunks/optional-demo-registry-DINFQX6N.js +0 -2
- package/dist-cli/chunks/runtime-7DFYO5OG.js +0 -2
- package/dist-cli/chunks/store-A5FTY6OM.js +0 -2
- package/dist-cli/chunks/telemetry-C2D5VTOD.js +0 -2
- package/dist-cli/chunks/upload-QIGILLTV.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-
|
|
1
|
+
/*! sootsim v0.1.195 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-O3V7G75W.js";import{g as A,i as _}from"./chunk-7WC5DXPG.js";import"./chunk-RZDJVRQK.js";import{b as k}from"./chunk-VAOV6LVA.js";import"./chunk-YBXS3LTW.js";import"./chunk-GIR3RNE5.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
|
|
3
3
|
sootsim what-happened \u2014 show recent events from the semantic timeline
|
|
4
4
|
|
|
5
5
|
usage:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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;
|
|
@@ -1302,6 +1302,8 @@ function formatTimelinePayload(kind, d) {
|
|
|
1302
1302
|
return `${d.phase ?? "?"}${d.heightPx ? ` h=${d.heightPx}` : ""}${d.mode ? ` ${d.mode}` : ""}`;
|
|
1303
1303
|
case "screen":
|
|
1304
1304
|
return `${d.phase ?? "?"} ${d.name ?? d.activeName ?? ""}`;
|
|
1305
|
+
case "flow-step":
|
|
1306
|
+
return `${d.status ?? "?"} ${d.stepName ?? "step"}${d.durationMs ? ` ${d.durationMs}ms` : ""}`;
|
|
1305
1307
|
case "route":
|
|
1306
1308
|
return `${d.phase ?? "?"} ${d.path ?? d.pathname ?? ""}`;
|
|
1307
1309
|
case "alert":
|
package/dist-lib/sdk.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// cli/commands/inspect/core.ts
|
|
4
4
|
function resolveMaxMsFlag(args, fallbackMs) {
|
|
@@ -1212,6 +1212,8 @@ function formatTimelinePayload(kind, d) {
|
|
|
1212
1212
|
return `${d.phase ?? "?"}${d.heightPx ? ` h=${d.heightPx}` : ""}${d.mode ? ` ${d.mode}` : ""}`;
|
|
1213
1213
|
case "screen":
|
|
1214
1214
|
return `${d.phase ?? "?"} ${d.name ?? d.activeName ?? ""}`;
|
|
1215
|
+
case "flow-step":
|
|
1216
|
+
return `${d.status ?? "?"} ${d.stepName ?? "step"}${d.durationMs ? ` ${d.durationMs}ms` : ""}`;
|
|
1215
1217
|
case "route":
|
|
1216
1218
|
return `${d.phase ?? "?"} ${d.path ?? d.pathname ?? ""}`;
|
|
1217
1219
|
case "alert":
|
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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;
|
|
@@ -16940,6 +16940,8 @@ var init_bridge_flow_runner = __esm({
|
|
|
16940
16940
|
recordingStartedAtMs = null;
|
|
16941
16941
|
lastRecordingStartedAtMs = null;
|
|
16942
16942
|
lastRecordingDurationMs = null;
|
|
16943
|
+
lastRecordingFrameStats = null;
|
|
16944
|
+
flowTraceSteps = [];
|
|
16943
16945
|
lastVisualSettledAtMs = 0;
|
|
16944
16946
|
simRouteHint = null;
|
|
16945
16947
|
// set by runStep when a step throws — lets the outer flow command
|
|
@@ -17075,10 +17077,12 @@ var init_bridge_flow_runner = __esm({
|
|
|
17075
17077
|
throw new Error("recording output directory not configured");
|
|
17076
17078
|
}
|
|
17077
17079
|
if (!this.recordingAccessChecked) {
|
|
17078
|
-
|
|
17079
|
-
|
|
17080
|
-
|
|
17081
|
-
|
|
17080
|
+
if (this.opts.requireRecordingEntitlement) {
|
|
17081
|
+
await ensureCliRecordingEntitlement("flow --video", {
|
|
17082
|
+
originOverride: this.opts.billingOriginOverride,
|
|
17083
|
+
allowGitHubAuth: this.opts.allowGitHubRecording
|
|
17084
|
+
});
|
|
17085
|
+
}
|
|
17082
17086
|
this.recordingAccessChecked = true;
|
|
17083
17087
|
}
|
|
17084
17088
|
const startedAt = Date.now();
|
|
@@ -17093,7 +17097,7 @@ var init_bridge_flow_runner = __esm({
|
|
|
17093
17097
|
throw new Error(result?.error || "recording unavailable on this page");
|
|
17094
17098
|
}
|
|
17095
17099
|
if (!this.recordingStartedAtMs) {
|
|
17096
|
-
this.recordingStartedAtMs = startedAt;
|
|
17100
|
+
this.recordingStartedAtMs = typeof result.startedAtMs === "number" && Number.isFinite(result.startedAtMs) ? result.startedAtMs : startedAt;
|
|
17097
17101
|
}
|
|
17098
17102
|
}
|
|
17099
17103
|
async startRecording() {
|
|
@@ -17109,6 +17113,45 @@ var init_bridge_flow_runner = __esm({
|
|
|
17109
17113
|
getLastRecordingStartedAtMs() {
|
|
17110
17114
|
return this.lastRecordingStartedAtMs;
|
|
17111
17115
|
}
|
|
17116
|
+
getLastRecordingFrameStats() {
|
|
17117
|
+
return this.lastRecordingFrameStats;
|
|
17118
|
+
}
|
|
17119
|
+
getFlowTraceSteps() {
|
|
17120
|
+
return [...this.flowTraceSteps];
|
|
17121
|
+
}
|
|
17122
|
+
flowStepTargetLabel(step, stepName) {
|
|
17123
|
+
if (stepName === "inputText" || stepName === "runScript" || stepName === "evalScript") {
|
|
17124
|
+
return void 0;
|
|
17125
|
+
}
|
|
17126
|
+
const value = step[stepName];
|
|
17127
|
+
if (typeof value === "string") return value.slice(0, 80);
|
|
17128
|
+
if (typeof value === "number" || typeof value === "boolean") return String(value);
|
|
17129
|
+
if (!value || typeof value !== "object") return void 0;
|
|
17130
|
+
const record = value;
|
|
17131
|
+
const direct = record.id ?? record.text ?? record.name ?? record.path;
|
|
17132
|
+
if (typeof direct === "string" && direct) return direct.slice(0, 80);
|
|
17133
|
+
if (record.point && typeof record.point === "string") return record.point.slice(0, 80);
|
|
17134
|
+
if (typeof record.x === "number" && typeof record.y === "number") {
|
|
17135
|
+
return `${Math.round(record.x)}, ${Math.round(record.y)}`;
|
|
17136
|
+
}
|
|
17137
|
+
return void 0;
|
|
17138
|
+
}
|
|
17139
|
+
recordFlowTraceStep(args) {
|
|
17140
|
+
const endedAtMs = Date.now();
|
|
17141
|
+
const entry = {
|
|
17142
|
+
stepIndex: args.stepIndex,
|
|
17143
|
+
stepName: args.stepName,
|
|
17144
|
+
...args.targetLabel ? { targetLabel: args.targetLabel } : {},
|
|
17145
|
+
startedAtMs: args.startedAtMs,
|
|
17146
|
+
endedAtMs,
|
|
17147
|
+
durationMs: Math.max(0, endedAtMs - args.startedAtMs),
|
|
17148
|
+
status: args.status
|
|
17149
|
+
};
|
|
17150
|
+
if (args.error != null) {
|
|
17151
|
+
entry.error = args.error instanceof Error ? args.error.message : String(args.error);
|
|
17152
|
+
}
|
|
17153
|
+
this.flowTraceSteps.push(entry);
|
|
17154
|
+
}
|
|
17112
17155
|
async stopRecording() {
|
|
17113
17156
|
if (!this.recordingEnabled || !this.opts.recordingOutputDir) return null;
|
|
17114
17157
|
this.recordingEnabled = false;
|
|
@@ -17116,10 +17159,12 @@ var init_bridge_flow_runner = __esm({
|
|
|
17116
17159
|
const stopped = await this.evaluate(`window.__sootsimRecorder.stop()`);
|
|
17117
17160
|
if (!stopped?.ok) {
|
|
17118
17161
|
this.recordingStartedAtMs = null;
|
|
17162
|
+
this.lastRecordingFrameStats = null;
|
|
17119
17163
|
throw new Error(stopped?.error || "recording stop failed");
|
|
17120
17164
|
}
|
|
17121
17165
|
this.lastRecordingStartedAtMs = this.recordingStartedAtMs;
|
|
17122
17166
|
this.lastRecordingDurationMs = this.recordingStartedAtMs ? Math.max(1, stoppedAt - this.recordingStartedAtMs) : null;
|
|
17167
|
+
this.lastRecordingFrameStats = stopped.frameStats ?? null;
|
|
17123
17168
|
this.recordingStartedAtMs = null;
|
|
17124
17169
|
const chunks = [];
|
|
17125
17170
|
let offset = 0;
|
|
@@ -18036,10 +18081,18 @@ var init_bridge_flow_runner = __esm({
|
|
|
18036
18081
|
if (!this.firstLaunchDone && !wantsClear) {
|
|
18037
18082
|
this.firstLaunchDone = true;
|
|
18038
18083
|
if (wantsResetRuntime) {
|
|
18039
|
-
|
|
18084
|
+
const startingShellState = await getShellState(this.bridge).catch(() => null);
|
|
18085
|
+
const shouldReturnHome = startingShellState?.state === "home" && startingShellState.activeApp == null;
|
|
18040
18086
|
await this.softReloadGuestApp(false);
|
|
18041
|
-
await this.launchShellAppFromHomeIfNeeded(opts);
|
|
18042
18087
|
await this.waitForTree(12e4);
|
|
18088
|
+
if (shouldReturnHome) {
|
|
18089
|
+
await callShellCommandWhenReady(this.bridge, "goHome", 1e3);
|
|
18090
|
+
await this.waitForShellHome(1e3);
|
|
18091
|
+
}
|
|
18092
|
+
await this.launchShellAppFromHomeIfNeeded(
|
|
18093
|
+
opts,
|
|
18094
|
+
shouldReturnHome ? { ...startingShellState ?? {}, state: "home", activeApp: null } : null
|
|
18095
|
+
);
|
|
18043
18096
|
} else {
|
|
18044
18097
|
await this.launchShellAppFromHomeIfNeeded(opts);
|
|
18045
18098
|
}
|
|
@@ -18112,12 +18165,26 @@ var init_bridge_flow_runner = __esm({
|
|
|
18112
18165
|
await sleep2(16);
|
|
18113
18166
|
}
|
|
18114
18167
|
}
|
|
18115
|
-
async
|
|
18168
|
+
async waitForShellHome(timeoutMs) {
|
|
18169
|
+
const deadline = Date.now() + timeoutMs;
|
|
18170
|
+
while (Date.now() < deadline) {
|
|
18171
|
+
const state = await getShellState(this.bridge).catch(() => null);
|
|
18172
|
+
if (state?.state === "home" && state.activeApp == null && state.showSwitcher === false) {
|
|
18173
|
+
return;
|
|
18174
|
+
}
|
|
18175
|
+
await sleep2(16);
|
|
18176
|
+
}
|
|
18177
|
+
}
|
|
18178
|
+
async launchShellAppFromHomeIfNeeded(opts, knownHomeState) {
|
|
18116
18179
|
let state = null;
|
|
18117
|
-
|
|
18118
|
-
state =
|
|
18119
|
-
}
|
|
18120
|
-
|
|
18180
|
+
if (knownHomeState) {
|
|
18181
|
+
state = knownHomeState;
|
|
18182
|
+
} else {
|
|
18183
|
+
try {
|
|
18184
|
+
state = await getShellState(this.bridge);
|
|
18185
|
+
} catch {
|
|
18186
|
+
return false;
|
|
18187
|
+
}
|
|
18121
18188
|
}
|
|
18122
18189
|
if (state?.state !== "home" || state.activeApp != null) return false;
|
|
18123
18190
|
const appId = this.resolveShellLaunchAppId(opts, state);
|
|
@@ -18264,14 +18331,25 @@ var init_bridge_flow_runner = __esm({
|
|
|
18264
18331
|
const rawStep = typeof rawStepInput === "string" ? normalizeBareStringStep(rawStepInput) : rawStepInput;
|
|
18265
18332
|
const stepName = Object.keys(rawStep).find((k) => k !== "when") || Object.keys(rawStep)[0];
|
|
18266
18333
|
console.log(`[flow] step ${stepIndex + 1}: ${stepName}`);
|
|
18334
|
+
const startedAtMs = Date.now();
|
|
18335
|
+
let targetLabel = this.flowStepTargetLabel(rawStep, stepName);
|
|
18267
18336
|
let step;
|
|
18268
18337
|
try {
|
|
18269
18338
|
step = this.js.interpolateStep(rawStep);
|
|
18339
|
+
targetLabel = this.flowStepTargetLabel(step, stepName) ?? targetLabel;
|
|
18270
18340
|
} catch (error) {
|
|
18271
18341
|
if (this.isOptional(rawStep)) {
|
|
18272
18342
|
console.log(
|
|
18273
18343
|
`[flow] (optional, skipped: ${error.message.slice(0, 80)})`
|
|
18274
18344
|
);
|
|
18345
|
+
this.recordFlowTraceStep({
|
|
18346
|
+
stepIndex,
|
|
18347
|
+
stepName,
|
|
18348
|
+
targetLabel,
|
|
18349
|
+
startedAtMs,
|
|
18350
|
+
status: "skipped",
|
|
18351
|
+
error
|
|
18352
|
+
});
|
|
18275
18353
|
return;
|
|
18276
18354
|
}
|
|
18277
18355
|
this.lastFailedStep = {
|
|
@@ -18279,12 +18357,27 @@ var init_bridge_flow_runner = __esm({
|
|
|
18279
18357
|
kind: stepName,
|
|
18280
18358
|
target: rawStep[stepName]
|
|
18281
18359
|
};
|
|
18360
|
+
this.recordFlowTraceStep({
|
|
18361
|
+
stepIndex,
|
|
18362
|
+
stepName,
|
|
18363
|
+
targetLabel,
|
|
18364
|
+
startedAtMs,
|
|
18365
|
+
status: "failure",
|
|
18366
|
+
error
|
|
18367
|
+
});
|
|
18282
18368
|
throw error;
|
|
18283
18369
|
}
|
|
18284
18370
|
if (step.when) {
|
|
18285
18371
|
const shouldRun = await this.evaluateWhen(step.when);
|
|
18286
18372
|
if (!shouldRun) {
|
|
18287
18373
|
console.log(`[flow] (when: predicate false, skipped)`);
|
|
18374
|
+
this.recordFlowTraceStep({
|
|
18375
|
+
stepIndex,
|
|
18376
|
+
stepName,
|
|
18377
|
+
targetLabel,
|
|
18378
|
+
startedAtMs,
|
|
18379
|
+
status: "skipped"
|
|
18380
|
+
});
|
|
18288
18381
|
return;
|
|
18289
18382
|
}
|
|
18290
18383
|
}
|
|
@@ -18317,11 +18410,26 @@ var init_bridge_flow_runner = __esm({
|
|
|
18317
18410
|
if (this.stepDelay > 0 && !isAssertion) {
|
|
18318
18411
|
await sleep2(this.stepDelay);
|
|
18319
18412
|
}
|
|
18413
|
+
this.recordFlowTraceStep({
|
|
18414
|
+
stepIndex,
|
|
18415
|
+
stepName,
|
|
18416
|
+
targetLabel,
|
|
18417
|
+
startedAtMs,
|
|
18418
|
+
status: "success"
|
|
18419
|
+
});
|
|
18320
18420
|
} catch (error) {
|
|
18321
18421
|
if (this.isOptional(step)) {
|
|
18322
18422
|
console.log(
|
|
18323
18423
|
`[flow] (optional, skipped: ${error.message.slice(0, 80)})`
|
|
18324
18424
|
);
|
|
18425
|
+
this.recordFlowTraceStep({
|
|
18426
|
+
stepIndex,
|
|
18427
|
+
stepName,
|
|
18428
|
+
targetLabel,
|
|
18429
|
+
startedAtMs,
|
|
18430
|
+
status: "skipped",
|
|
18431
|
+
error
|
|
18432
|
+
});
|
|
18325
18433
|
return;
|
|
18326
18434
|
}
|
|
18327
18435
|
this.lastFailedStep = {
|
|
@@ -18329,6 +18437,14 @@ var init_bridge_flow_runner = __esm({
|
|
|
18329
18437
|
kind: stepName,
|
|
18330
18438
|
target: step[stepName]
|
|
18331
18439
|
};
|
|
18440
|
+
this.recordFlowTraceStep({
|
|
18441
|
+
stepIndex,
|
|
18442
|
+
stepName,
|
|
18443
|
+
targetLabel,
|
|
18444
|
+
startedAtMs,
|
|
18445
|
+
status: "failure",
|
|
18446
|
+
error
|
|
18447
|
+
});
|
|
18332
18448
|
throw error;
|
|
18333
18449
|
}
|
|
18334
18450
|
}
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.195 | (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/package.json
CHANGED
package/skills/soot/SKILL.md
CHANGED
|
@@ -111,8 +111,8 @@ commands in your own `sleep` or chain `do settle` "just to be safe"**.
|
|
|
111
111
|
`type-into`, `key`, `key-sequence`, `keycode`, `drag`, `swipe`,
|
|
112
112
|
`long-press`, `touch`, `gesture`, `pinch`, `scroll`, `shell`)
|
|
113
113
|
the CLI polls the layout hash until it is stable for two consecutive
|
|
114
|
-
frames. budget: **
|
|
115
|
-
harness),
|
|
114
|
+
frames. budget: **400 ms for agents** (`SOOTSIM_AGENT=1`, set by the
|
|
115
|
+
harness), 200 ms for humans.
|
|
116
116
|
|
|
117
117
|
what this means:
|
|
118
118
|
|
|
@@ -120,7 +120,7 @@ what this means:
|
|
|
120
120
|
- you only need `sootsim do settle <seconds>` or `sootsim wait idle
|
|
121
121
|
--max-ms <N>` when the CLI explicitly prints
|
|
122
122
|
`⚠ auto-wait timed out after Nms — next command may see mid-animation
|
|
123
|
-
state`, or when the transition you care about lasts longer than ~
|
|
123
|
+
state`, or when the transition you care about lasts longer than ~400 ms
|
|
124
124
|
(full stack navigation, crossfades, video load).
|
|
125
125
|
- opt-out: `--no-wait` on a single command, `SOOTSIM_NO_AUTO_WAIT=1`
|
|
126
126
|
for a whole lane.
|
|
@@ -114,7 +114,7 @@ need a manual wait when:
|
|
|
114
114
|
1. the CLI explicitly printed `⚠ auto-wait timed out after Nms — next
|
|
115
115
|
command may see mid-animation state` *and* your next read depends on
|
|
116
116
|
the animation finishing.
|
|
117
|
-
2. the transition is longer than ~
|
|
117
|
+
2. the transition is longer than ~400 ms (full stack navigation,
|
|
118
118
|
crossfades, video first-frame, network-backed render).
|
|
119
119
|
3. you want `--strict` settle, which also requires animation flags to
|
|
120
120
|
clear — only safe for apps with no perpetual background animation
|
|
@@ -118,7 +118,7 @@ drag is backed by the same primitives that auto-wait for transitions on
|
|
|
118
118
|
the way in and layout stability on the way out. you rarely need
|
|
119
119
|
explicit waits; when you do, `waitForAnimationToEnd: true` maps to the
|
|
120
120
|
CLI's `wait idle` with a generous budget. use it before any
|
|
121
|
-
`assertVisible` that depends on a transition longer than ~
|
|
121
|
+
`assertVisible` that depends on a transition longer than ~400 ms.
|
|
122
122
|
|
|
123
123
|
generating a starter flow by crawling the app:
|
|
124
124
|
|