sootsim 0.1.133 → 0.1.135
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/detox/gestures.ts +2 -2
- package/detox/index.ts +211 -9
- package/dist-cli/bin.js +3 -3
- package/dist-cli/chunks/{agent-HUV6ZDVC.js → agent-EV3LMTI2.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-DWQ4YJ2L.js → agent-wrapper-GOUAYJWS.js} +2 -2
- package/dist-cli/chunks/{app-fonts-KZU5WKNH.js → app-fonts-7ZGCVBWL.js} +2 -2
- package/dist-cli/chunks/{assert-O6MCNH6B.js → assert-CZPAVBXB.js} +2 -2
- package/dist-cli/chunks/auto-bootstrap-PRFJ44RD.js +2 -0
- package/dist-cli/chunks/beta-HNHNY7GJ.js +2 -0
- package/dist-cli/chunks/chunk-2RQ5M6MJ.js +13 -0
- package/dist-cli/chunks/{chunk-A34CFM2J.js → chunk-2VUPH4SQ.js} +1 -1
- package/dist-cli/chunks/{chunk-Q3GCZEPC.js → chunk-45Z6VTEC.js} +1 -1
- package/dist-cli/chunks/{chunk-KUTTVAMM.js → chunk-4PJFJ77U.js} +1 -1
- package/dist-cli/chunks/{chunk-HSNSCKU6.js → chunk-56LSJ5RZ.js} +2 -2
- package/dist-cli/chunks/{chunk-KFN2YKGC.js → chunk-5HFMOWG3.js} +1 -1
- package/dist-cli/chunks/{chunk-KHC77NFP.js → chunk-5JSVHUKF.js} +3 -3
- package/dist-cli/chunks/{chunk-XEGM2NRW.js → chunk-5PB5X45Q.js} +2 -2
- package/dist-cli/chunks/{chunk-THJDQ2EB.js → chunk-7TWZYT4A.js} +1 -1
- package/dist-cli/chunks/{chunk-R4PCQVBM.js → chunk-7WF23EDW.js} +2 -2
- package/dist-cli/chunks/{chunk-GCNZ32Y7.js → chunk-AQ6QT2DY.js} +2 -2
- package/dist-cli/chunks/{chunk-FJRIG6HG.js → chunk-ASXKBNRL.js} +2 -2
- package/dist-cli/chunks/{chunk-GMHBZDQA.js → chunk-CLO4G4ZK.js} +1 -1
- package/dist-cli/chunks/{chunk-2NV5VDY3.js → chunk-CYELNMX7.js} +2 -2
- package/dist-cli/chunks/{chunk-IMG7XQRR.js → chunk-DNF7AILW.js} +2 -2
- package/dist-cli/chunks/{chunk-2OST4PMS.js → chunk-EKZJFBGU.js} +2 -2
- package/dist-cli/chunks/{chunk-LK6Y3IGB.js → chunk-G7W4URXX.js} +2 -2
- package/dist-cli/chunks/{chunk-4CQXBMKU.js → chunk-GBBGAIOO.js} +1 -1
- package/dist-cli/chunks/chunk-GGLJLJ7P.js +1 -0
- package/dist-cli/chunks/{chunk-VO3QIOCT.js → chunk-IJU5JVF2.js} +1 -1
- package/dist-cli/chunks/{chunk-G4OBKVUY.js → chunk-MLNENEA4.js} +1 -1
- package/dist-cli/chunks/{chunk-7BCTUWOM.js → chunk-MLVYS3AE.js} +2 -2
- package/dist-cli/chunks/{chunk-YZVZA6IX.js → chunk-OC5UQFLJ.js} +1 -1
- package/dist-cli/chunks/{chunk-SKF4RZDK.js → chunk-OODLGJLZ.js} +2 -2
- package/dist-cli/chunks/{chunk-PZSY7LCJ.js → chunk-PVWYEMAR.js} +1 -1
- package/dist-cli/chunks/{chunk-AKIYNT56.js → chunk-PWRO2WPW.js} +1 -1
- package/dist-cli/chunks/{chunk-GDHDUANQ.js → chunk-QDGNAEBR.js} +2 -2
- package/dist-cli/chunks/{chunk-VZB6MROZ.js → chunk-QDRAULAC.js} +2 -2
- package/dist-cli/chunks/{chunk-RPQCGJI7.js → chunk-QLXTTGJD.js} +2 -2
- package/dist-cli/chunks/{chunk-BHPSNVNR.js → chunk-QMUNA6VQ.js} +3 -3
- package/dist-cli/chunks/{chunk-UJBMEBQF.js → chunk-S5ZKCSJZ.js} +1 -1
- package/dist-cli/chunks/chunk-TVCTN2EF.js +2 -0
- package/dist-cli/chunks/{chunk-BC357P2N.js → chunk-TXDUBB6W.js} +2 -2
- package/dist-cli/chunks/{chunk-MTXMNE75.js → chunk-U6TZCGUB.js} +1 -1
- package/dist-cli/chunks/{chunk-YL3KKAZR.js → chunk-UM7EEN26.js} +1 -1
- package/dist-cli/chunks/{chunk-OO3C2GYN.js → chunk-UNM45I7B.js} +2 -2
- package/dist-cli/chunks/{chunk-FXB2ETM3.js → chunk-UOBTAOWL.js} +2 -2
- package/dist-cli/chunks/chunk-VH4VPAMR.js +1 -0
- package/dist-cli/chunks/{chunk-HEOJB2Q7.js → chunk-XAVQLMY7.js} +2 -2
- package/dist-cli/chunks/{chunk-TTCMDOP6.js → chunk-XMZJQZFB.js} +2 -2
- package/dist-cli/chunks/{chunk-QGPM7UTZ.js → chunk-XOK53FNY.js} +1 -1
- package/dist-cli/chunks/{chunk-DYNVMRON.js → chunk-YQM3RWNV.js} +2 -2
- package/dist-cli/chunks/{chunk-ROINTL2P.js → chunk-Z5WZKI7J.js} +2 -2
- package/dist-cli/chunks/chunk-ZANDDBFJ.js +1 -0
- package/dist-cli/chunks/{chunk-NNRWRRI5.js → chunk-ZFDBEITH.js} +3 -3
- package/dist-cli/chunks/cli-version-EOI7UVCS.js +2 -0
- package/dist-cli/chunks/{compat-3BWLNHPY.js → compat-DZRWNMC2.js} +3 -3
- package/dist-cli/chunks/{config-H7YEVE5J.js → config-JNO26BKX.js} +2 -2
- package/dist-cli/chunks/{control-ZFU3T2LE.js → control-GWQ44GVR.js} +2 -2
- package/dist-cli/chunks/{cpu-profile-XYCDA5GM.js → cpu-profile-2VSK3E45.js} +2 -2
- package/dist-cli/chunks/{daemon-TBN5MRVC.js → daemon-QMFDDXFF.js} +2 -2
- package/dist-cli/chunks/{debug-2WAJZ4C7.js → debug-Q3K4TXLC.js} +3 -3
- package/dist-cli/chunks/demo-app-registry-LDTURANL.js +2 -0
- package/dist-cli/chunks/{detox-JLJPKRA3.js → detox-TX4AUV2W.js} +2 -2
- package/dist-cli/chunks/{device-WPWC2KSY.js → device-E5RRT67Y.js} +2 -2
- package/dist-cli/chunks/{diagnose-PYBIEZFD.js → diagnose-CGHRCXKF.js} +2 -2
- package/dist-cli/chunks/drivers-WF5OT6EA.js +2 -0
- package/dist-cli/chunks/{electron-ZW7YMV37.js → electron-YSY7HZBI.js} +3 -3
- package/dist-cli/chunks/flow-PV4WV3DZ.js +2 -0
- package/dist-cli/chunks/help-RZ2M7P7U.js +2 -0
- package/dist-cli/chunks/{hints-3YQNXM27.js → hints-V7M7GKXL.js} +2 -2
- package/dist-cli/chunks/{home-paths-SBGRHOZC.js → home-paths-KYTBCLPQ.js} +2 -2
- package/dist-cli/chunks/{inspect-YXTS4PR6.js → inspect-ZUYLUCRJ.js} +3 -3
- package/dist-cli/chunks/install-XLJ4CJUN.js +2 -0
- package/dist-cli/chunks/{install-desktop-27SPMPUV.js → install-desktop-HKLVDL7Q.js} +3 -3
- package/dist-cli/chunks/{keys-Y7OJXBGI.js → keys-QJDWORM5.js} +2 -2
- package/dist-cli/chunks/{launch-OUG2GFLO.js → launch-CBIYGOV7.js} +3 -3
- package/dist-cli/chunks/{login-XXJQHPWA.js → login-II2EWFHY.js} +4 -4
- package/dist-cli/chunks/{logout-FHJ26UTW.js → logout-E52753SB.js} +2 -2
- package/dist-cli/chunks/{maestro-P4ZVR2I4.js → maestro-DUIODHYF.js} +2 -2
- package/dist-cli/chunks/{preview-6ONBLQBI.js → preview-LSVZXF7S.js} +2 -2
- package/dist-cli/chunks/{profile-LQOEBIPK.js → profile-2LUO56EX.js} +2 -2
- package/dist-cli/chunks/{react-R4KJVWDA.js → react-KPNHGOQ3.js} +2 -2
- package/dist-cli/chunks/{record-OBJJDTFN.js → record-LLNZNJSY.js} +2 -2
- package/dist-cli/chunks/runtime-B3RQF5NL.js +2 -0
- package/dist-cli/chunks/{runtime-delivery-LEU6ABXJ.js → runtime-delivery-A2PZCEPU.js} +2 -2
- package/dist-cli/chunks/{screenshot-AKU27ZTJ.js → screenshot-OEIH2ETO.js} +2 -2
- package/dist-cli/chunks/{screenshot-mode-XPJM2SRF.js → screenshot-mode-3TDLGZPT.js} +2 -2
- package/dist-cli/chunks/{screenshots-SJY4LH2Q.js → screenshots-GCJW22B5.js} +2 -2
- package/dist-cli/chunks/{server-2SSM3BKA.js → server-CBH2UYLT.js} +3 -3
- package/dist-cli/chunks/setup-repo-U7XMVCQA.js +2 -0
- package/dist-cli/chunks/{skills-C7ZVO6AF.js → skills-DVPCRUUO.js} +2 -2
- package/dist-cli/chunks/{start-5BFFCFOT.js → start-2T5QRVL2.js} +4 -4
- package/dist-cli/chunks/store-WIQ4ZE4Z.js +2 -0
- package/dist-cli/chunks/telemetry-2XPV6PVU.js +2 -0
- package/dist-cli/chunks/{test-5YTOB2K7.js → test-ZGUHV3XE.js} +3 -3
- package/dist-cli/chunks/{three-mode-ZTVDFRRN.js → three-mode-3BUTKBTR.js} +2 -2
- package/dist-cli/chunks/{timeline-ZSHW5COY.js → timeline-WS2FXPG2.js} +2 -2
- package/dist-cli/chunks/{upgrade-DU2VLCLD.js → upgrade-FFTCNLCI.js} +2 -2
- package/dist-cli/chunks/upload-JQMTDQMQ.js +2 -0
- package/dist-cli/chunks/{version-G7MFHWDO.js → version-OQOFXNMZ.js} +2 -2
- package/dist-cli/chunks/web-Y2ZMUXP4.js +2 -0
- package/dist-cli/chunks/{what-happened-ZYPPAPQM.js → what-happened-5A2RUC6V.js} +2 -2
- package/dist-cli/chunks/{whoami-U4JDM3X4.js → whoami-ZVM5A34Z.js} +2 -2
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.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 +169 -11
- package/dist-lib/dev-bundle-resolution.cjs +30 -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/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/demo-app-registry.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 +5 -5
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/src/dev-bundle-resolution.ts +64 -0
- package/dist-cli/chunks/auto-bootstrap-LTOQSXRM.js +0 -2
- package/dist-cli/chunks/beta-Y2OJHTRQ.js +0 -2
- package/dist-cli/chunks/chunk-7SYFZZK3.js +0 -2
- package/dist-cli/chunks/chunk-AEYD4ODQ.js +0 -1
- package/dist-cli/chunks/chunk-D3OLBBEO.js +0 -1
- package/dist-cli/chunks/chunk-ESQVUOW2.js +0 -13
- package/dist-cli/chunks/chunk-YP4W6KI5.js +0 -1
- package/dist-cli/chunks/cli-version-RQJHNNYX.js +0 -2
- package/dist-cli/chunks/demo-app-registry-JXOXYWFT.js +0 -2
- package/dist-cli/chunks/drivers-XPCQOVAR.js +0 -2
- package/dist-cli/chunks/flow-SWXVIYST.js +0 -2
- package/dist-cli/chunks/help-HAITGXVU.js +0 -2
- package/dist-cli/chunks/install-VFUIM3QH.js +0 -2
- package/dist-cli/chunks/runtime-6JVXVZ4K.js +0 -2
- package/dist-cli/chunks/setup-repo-X6WRLPI5.js +0 -2
- package/dist-cli/chunks/store-5FCKCDEL.js +0 -2
- package/dist-cli/chunks/telemetry-N6DCFUGB.js +0 -2
- package/dist-cli/chunks/upload-QLV4POAH.js +0 -2
- package/dist-cli/chunks/web-66TKNXN5.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{B as T,C as A,D as y,O as _,P as b,Q as S}from"./chunk-
|
|
1
|
+
/*! sootsim v0.1.135 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{B as T,C as A,D as y,O as _,P as b,Q as S}from"./chunk-PVWYEMAR.js";import{c as N,e as F}from"./chunk-EKZJFBGU.js";import{b as k}from"./chunk-7TWZYT4A.js";import"./chunk-XOK53FNY.js";import"./chunk-UM7EEN26.js";import"./chunk-45Z6VTEC.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=N(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,2 +1,2 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{d as i}from"./chunk-
|
|
1
|
+
/*! sootsim v0.1.135 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{d as i}from"./chunk-7WF23EDW.js";import{d as n}from"./chunk-5PB5X45Q.js";import"./chunk-UM7EEN26.js";import"./chunk-45Z6VTEC.js";async function u(){let o=i();if(o||(console.log(" not signed in"),console.log(" set SOOTSIM_API_KEY=sk_sootsim_\u2026 or run `sootsim login`"),process.exit(1)),o.kind==="api-key"){let r=`${o.secret.slice(0,14)}\u2026`,t=o.source==="env"?"SOOTSIM_API_KEY env var":"saved key (~/.config/sootsim/credentials.json)";console.log(` api key ${r}`),console.log(` source: ${t}`);return}if(o.kind==="github"){console.log(` github token (${o.source})`),console.log(` repo: ${o.repoId}`);return}let e=await n(),s=e?.user;console.log(` ${s?.email||s?.name||s?.id||"signed in"}`),console.log(` origin: ${e?.origin??o.origin}`),e?.updatedAt&&console.log(` updated: ${e.updatedAt}`)}export{u as runWhoami};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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;
|
|
@@ -218,7 +218,7 @@ async function dragScrollNode(page, node, pixels, direction) {
|
|
|
218
218
|
}
|
|
219
219
|
const startPage = await sootsimToPage(page, startSootX, startSootY);
|
|
220
220
|
const endPage = await sootsimToPage(page, endSootX, endSootY);
|
|
221
|
-
const steps =
|
|
221
|
+
const steps = Math.max(16, Math.ceil(pixels / 8));
|
|
222
222
|
await page.mouse.move(startPage.x, startPage.y);
|
|
223
223
|
await page.mouse.down();
|
|
224
224
|
await page.waitForTimeout(20);
|
|
@@ -226,7 +226,7 @@ async function dragScrollNode(page, node, pixels, direction) {
|
|
|
226
226
|
const dy = (endPage.y - startPage.y) / steps;
|
|
227
227
|
for (let i = 1; i <= steps; i++) {
|
|
228
228
|
await page.mouse.move(startPage.x + dx * i, startPage.y + dy * i);
|
|
229
|
-
await page.waitForTimeout(
|
|
229
|
+
await page.waitForTimeout(24);
|
|
230
230
|
}
|
|
231
231
|
await page.mouse.up();
|
|
232
232
|
await page.waitForTimeout(180);
|
|
@@ -821,6 +821,145 @@ async function waitForSootsimTree(page, timeout = 3e4) {
|
|
|
821
821
|
throw await describeSootsimBridgeFailure(page, error);
|
|
822
822
|
}
|
|
823
823
|
}
|
|
824
|
+
async function waitForSootsimSurfaceMetrics(page, timeout = 3e4) {
|
|
825
|
+
const deadline = Date.now() + timeout;
|
|
826
|
+
let lastSnapshot = null;
|
|
827
|
+
while (Date.now() < deadline) {
|
|
828
|
+
lastSnapshot = await page.evaluate(async () => {
|
|
829
|
+
const metricsWindow = (value) => {
|
|
830
|
+
if (!value || typeof value !== "object") return null;
|
|
831
|
+
const windowValue = value.window;
|
|
832
|
+
if (!windowValue || typeof windowValue !== "object") return null;
|
|
833
|
+
return windowValue;
|
|
834
|
+
};
|
|
835
|
+
const snapshot = await window.__sootsimTest?.getSurfaceMetricsSnapshot?.();
|
|
836
|
+
const windowMetrics = metricsWindow(snapshot);
|
|
837
|
+
const width = windowMetrics?.width;
|
|
838
|
+
const height = windowMetrics?.height;
|
|
839
|
+
if (typeof width === "number" && typeof height === "number" && width > 0 && height > 0) {
|
|
840
|
+
return { ready: true };
|
|
841
|
+
}
|
|
842
|
+
return { ready: false, snapshot };
|
|
843
|
+
});
|
|
844
|
+
if (lastSnapshot && typeof lastSnapshot === "object" && lastSnapshot.ready) {
|
|
845
|
+
return;
|
|
846
|
+
}
|
|
847
|
+
await page.waitForTimeout(50);
|
|
848
|
+
}
|
|
849
|
+
throw new Error(
|
|
850
|
+
`timed out waiting for sootsim surface metrics: ${JSON.stringify(lastSnapshot)}`
|
|
851
|
+
);
|
|
852
|
+
}
|
|
853
|
+
async function waitForSootsimShellReady(page, timeout = 3e4) {
|
|
854
|
+
try {
|
|
855
|
+
await page.evaluate(async (timeoutMs) => {
|
|
856
|
+
const start = Date.now();
|
|
857
|
+
const deadline = start + timeoutMs;
|
|
858
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
859
|
+
const remaining = () => Math.max(1, deadline - Date.now());
|
|
860
|
+
const withTimeout = async (label, promise) => {
|
|
861
|
+
let timer = null;
|
|
862
|
+
try {
|
|
863
|
+
await Promise.race([
|
|
864
|
+
promise,
|
|
865
|
+
new Promise((_, reject) => {
|
|
866
|
+
timer = setTimeout(
|
|
867
|
+
() => reject(new Error(`${label} timed out after ${timeoutMs}ms`)),
|
|
868
|
+
remaining()
|
|
869
|
+
);
|
|
870
|
+
})
|
|
871
|
+
]);
|
|
872
|
+
} finally {
|
|
873
|
+
if (timer) clearTimeout(timer);
|
|
874
|
+
}
|
|
875
|
+
};
|
|
876
|
+
const isTenantOnly = new URL(window.location.href).searchParams.get("renderMode") === "tenant-only";
|
|
877
|
+
let shellHost = null;
|
|
878
|
+
while (Date.now() < deadline) {
|
|
879
|
+
const candidate = window.SootSim?.bridges?.shellHost;
|
|
880
|
+
if (candidate || isTenantOnly) {
|
|
881
|
+
shellHost = candidate ?? null;
|
|
882
|
+
break;
|
|
883
|
+
}
|
|
884
|
+
await sleep(25);
|
|
885
|
+
}
|
|
886
|
+
if (!shellHost) {
|
|
887
|
+
if (isTenantOnly) return;
|
|
888
|
+
throw new Error(`sootsim shell host unavailable after ${timeoutMs}ms`);
|
|
889
|
+
}
|
|
890
|
+
if (shellHost.ready && typeof shellHost.ready.then === "function") {
|
|
891
|
+
await withTimeout("sootsim shell ready", shellHost.ready);
|
|
892
|
+
}
|
|
893
|
+
if (shellHost.firstContentPainted && typeof shellHost.firstContentPainted.then === "function") {
|
|
894
|
+
await withTimeout(
|
|
895
|
+
"sootsim shell first content paint",
|
|
896
|
+
shellHost.firstContentPainted
|
|
897
|
+
);
|
|
898
|
+
}
|
|
899
|
+
const waitForScreenTransitions = window.__sootsimTest?.waitForScreenTransitions;
|
|
900
|
+
if (typeof waitForScreenTransitions === "function") {
|
|
901
|
+
const transitionResult = await waitForScreenTransitions({
|
|
902
|
+
timeoutMs: Math.min(remaining(), 3e3),
|
|
903
|
+
settleMs: 64,
|
|
904
|
+
startWindowMs: 700
|
|
905
|
+
});
|
|
906
|
+
if (transitionResult?.timedOut === true) {
|
|
907
|
+
throw new Error(
|
|
908
|
+
`sootsim launch transitions timed out: ${JSON.stringify(transitionResult)}`
|
|
909
|
+
);
|
|
910
|
+
}
|
|
911
|
+
}
|
|
912
|
+
}, timeout);
|
|
913
|
+
} catch (error) {
|
|
914
|
+
throw await describeSootsimBridgeFailure(page, error);
|
|
915
|
+
}
|
|
916
|
+
}
|
|
917
|
+
async function waitForSootsimWorkletsIdle(page, timeout = 3e3) {
|
|
918
|
+
const result = await page.evaluate(
|
|
919
|
+
async ({ timeout: timeout2 }) => {
|
|
920
|
+
const getPeerStats = window.__sootsimTest?.getPeerStats;
|
|
921
|
+
if (typeof getPeerStats !== "function") {
|
|
922
|
+
return { settled: true, skipped: true };
|
|
923
|
+
}
|
|
924
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
925
|
+
const readStats = () => Promise.race([
|
|
926
|
+
getPeerStats(false),
|
|
927
|
+
new Promise((resolve) => setTimeout(() => resolve(null), 250))
|
|
928
|
+
]);
|
|
929
|
+
const start = Date.now();
|
|
930
|
+
const deadline = start + timeout2;
|
|
931
|
+
const requiredStableMs = 120;
|
|
932
|
+
let stableSince = null;
|
|
933
|
+
let lastPending = 0;
|
|
934
|
+
await sleep(0);
|
|
935
|
+
while (Date.now() < deadline) {
|
|
936
|
+
const stats = await readStats();
|
|
937
|
+
const pending = stats && typeof stats === "object" && typeof stats.pendingRunWorklets === "number" ? stats.pendingRunWorklets : 0;
|
|
938
|
+
lastPending = pending;
|
|
939
|
+
if (pending === 0) {
|
|
940
|
+
stableSince ??= Date.now();
|
|
941
|
+
if (Date.now() - stableSince >= requiredStableMs) {
|
|
942
|
+
return { settled: true, elapsed: Date.now() - start, pending };
|
|
943
|
+
}
|
|
944
|
+
} else {
|
|
945
|
+
stableSince = null;
|
|
946
|
+
}
|
|
947
|
+
await sleep(25);
|
|
948
|
+
}
|
|
949
|
+
return {
|
|
950
|
+
settled: false,
|
|
951
|
+
elapsed: Date.now() - start,
|
|
952
|
+
pending: lastPending
|
|
953
|
+
};
|
|
954
|
+
},
|
|
955
|
+
{ timeout }
|
|
956
|
+
);
|
|
957
|
+
if (!result?.settled) {
|
|
958
|
+
throw new Error(
|
|
959
|
+
`sootsim worklet runtime did not settle after ${result?.elapsed ?? timeout}ms (pending=${result?.pending ?? "unknown"})`
|
|
960
|
+
);
|
|
961
|
+
}
|
|
962
|
+
}
|
|
824
963
|
async function closeContext() {
|
|
825
964
|
const context = _context;
|
|
826
965
|
_context = null;
|
|
@@ -960,13 +1099,16 @@ function getNodeCenter(nodeInfo) {
|
|
|
960
1099
|
}
|
|
961
1100
|
async function getDefaultTapPoint(page, nodeInfo) {
|
|
962
1101
|
const center = getNodeCenter(nodeInfo);
|
|
963
|
-
const viewport = await readSootsimInteractiveViewport(page);
|
|
964
1102
|
const frame = nodeInfo.visibleFrame ?? {
|
|
965
1103
|
x: nodeInfo.absolutePosition?.x ?? nodeInfo.layout?.x ?? 0,
|
|
966
1104
|
y: nodeInfo.absolutePosition?.y ?? nodeInfo.layout?.y ?? 0,
|
|
967
1105
|
width: nodeInfo.layout?.width ?? 0,
|
|
968
1106
|
height: nodeInfo.layout?.height ?? 0
|
|
969
1107
|
};
|
|
1108
|
+
const fullFrameTolerance = 0.5;
|
|
1109
|
+
const fullyVisible = typeof nodeInfo.absolutePosition?.x === "number" && typeof nodeInfo.absolutePosition?.y === "number" && typeof nodeInfo.layout?.width === "number" && typeof nodeInfo.layout?.height === "number" && Math.abs(frame.x - nodeInfo.absolutePosition.x) <= fullFrameTolerance && Math.abs(frame.y - nodeInfo.absolutePosition.y) <= fullFrameTolerance && frame.width >= nodeInfo.layout.width - fullFrameTolerance && frame.height >= nodeInfo.layout.height - fullFrameTolerance;
|
|
1110
|
+
if (fullyVisible) return center;
|
|
1111
|
+
const viewport = await readSootsimInteractiveViewport(page);
|
|
970
1112
|
const left = Math.max(0, frame.x);
|
|
971
1113
|
const top = Math.max(0, frame.y);
|
|
972
1114
|
const right = Math.min(viewport.width, frame.x + frame.width);
|
|
@@ -1103,6 +1245,7 @@ function createSootElement(matcher) {
|
|
|
1103
1245
|
_matcher: matcher,
|
|
1104
1246
|
async tap(point) {
|
|
1105
1247
|
const page = getPage();
|
|
1248
|
+
await waitForSootsimWorkletsIdle(page, 3e3);
|
|
1106
1249
|
const node = await findNodeByMatcher(matcher);
|
|
1107
1250
|
if (!node) throw new Error(`element not found for tap: ${JSON.stringify(matcher)}`);
|
|
1108
1251
|
const defaultPoint = point ? null : await getDefaultTapPoint(page, node);
|
|
@@ -1152,11 +1295,19 @@ function createSootElement(matcher) {
|
|
|
1152
1295
|
if (!node)
|
|
1153
1296
|
throw new Error(`element not found for longPress: ${JSON.stringify(matcher)}`);
|
|
1154
1297
|
const center = getNodeCenter(node);
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1159
|
-
|
|
1298
|
+
await page.evaluate(
|
|
1299
|
+
async ({ duration: duration2, x, y }) => {
|
|
1300
|
+
const longPress = window.SootSim?.bridges?.interact?.longPress;
|
|
1301
|
+
if (typeof longPress !== "function") {
|
|
1302
|
+
throw new Error("sootsim longPress bridge is not installed");
|
|
1303
|
+
}
|
|
1304
|
+
const hit = await longPress(x, y, duration2);
|
|
1305
|
+
if (!hit) {
|
|
1306
|
+
throw new Error(`sootsim longPress missed at ${x},${y}`);
|
|
1307
|
+
}
|
|
1308
|
+
},
|
|
1309
|
+
{ duration, x: center.x, y: center.y }
|
|
1310
|
+
);
|
|
1160
1311
|
await page.waitForTimeout(50);
|
|
1161
1312
|
},
|
|
1162
1313
|
async longPressAndDrag(duration, normalizedStartX, normalizedStartY, targetElement, normalizedEndX, normalizedEndY, speed = "fast", holdDuration = 0) {
|
|
@@ -1429,15 +1580,19 @@ var device = {
|
|
|
1429
1580
|
device._currentUrl = url;
|
|
1430
1581
|
await _page.goto(url, { waitUntil: "load", timeout: 3e4 });
|
|
1431
1582
|
await waitForSootsimTree(_page, 3e4);
|
|
1583
|
+
await waitForSootsimSurfaceMetrics(_page, 3e4);
|
|
1584
|
+
await waitForSootsimShellReady(_page, 3e4);
|
|
1585
|
+
await waitForSootsimWorkletsIdle(_page, 3e3);
|
|
1432
1586
|
device._lastReadyAtMs = Date.now();
|
|
1433
|
-
await _page.waitForTimeout(500);
|
|
1434
1587
|
},
|
|
1435
1588
|
_lastReadyAtMs: 0,
|
|
1436
1589
|
async reloadReactNative() {
|
|
1437
1590
|
const page = getPage();
|
|
1438
1591
|
await page.reload({ waitUntil: "load", timeout: 3e4 });
|
|
1439
1592
|
await waitForSootsimTree(page, 3e4);
|
|
1440
|
-
await page
|
|
1593
|
+
await waitForSootsimSurfaceMetrics(page, 3e4);
|
|
1594
|
+
await waitForSootsimShellReady(page, 3e4);
|
|
1595
|
+
await waitForSootsimWorkletsIdle(page, 3e3);
|
|
1441
1596
|
},
|
|
1442
1597
|
async terminateApp() {
|
|
1443
1598
|
await closeBrowser();
|
|
@@ -1450,6 +1605,9 @@ var device = {
|
|
|
1450
1605
|
const page = getPage();
|
|
1451
1606
|
await page.goto(url.url, { waitUntil: "load", timeout: 3e4 });
|
|
1452
1607
|
await waitForSootsimTree(page, 1e4);
|
|
1608
|
+
await waitForSootsimSurfaceMetrics(page, 1e4);
|
|
1609
|
+
await waitForSootsimShellReady(page, 1e4);
|
|
1610
|
+
await waitForSootsimWorkletsIdle(page, 3e3);
|
|
1453
1611
|
},
|
|
1454
1612
|
async takeScreenshot(name) {
|
|
1455
1613
|
return writeSootsimScreenshot(name);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.135 | (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;
|
|
@@ -108,8 +108,37 @@ function isBaseServerUrl(url) {
|
|
|
108
108
|
const path = url.pathname || "/";
|
|
109
109
|
return (path === "/" || path === "") && !url.search && !url.hash;
|
|
110
110
|
}
|
|
111
|
+
async function resolvePortViaServerScan(port) {
|
|
112
|
+
try {
|
|
113
|
+
const res = await fetch("/__server-scan", { cache: "no-store" });
|
|
114
|
+
if (!res.ok) return null;
|
|
115
|
+
if (!(res.headers.get("content-type") || "").toLowerCase().includes("json"))
|
|
116
|
+
return null;
|
|
117
|
+
const servers = await res.json();
|
|
118
|
+
if (!Array.isArray(servers)) return null;
|
|
119
|
+
const match = servers.find(
|
|
120
|
+
(s) => !!s && typeof s === "object" && s.port === port && typeof s.bundleUrl === "string"
|
|
121
|
+
);
|
|
122
|
+
if (!match) return null;
|
|
123
|
+
return {
|
|
124
|
+
bundleUrl: match.bundleUrl,
|
|
125
|
+
port,
|
|
126
|
+
framework: typeof match.framework === "string" ? match.framework : "unknown",
|
|
127
|
+
projectName: typeof match.projectName === "string" ? match.projectName : void 0
|
|
128
|
+
};
|
|
129
|
+
} catch {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
}
|
|
111
133
|
async function probeBaseUrlBundle(baseUrl, port) {
|
|
112
134
|
const normalizedBaseUrl = baseUrl.replace(/\/+$/, "");
|
|
135
|
+
try {
|
|
136
|
+
if (isLoopbackHost(new URL(normalizedBaseUrl).hostname)) {
|
|
137
|
+
const viaScan = await resolvePortViaServerScan(port);
|
|
138
|
+
if (viaScan) return viaScan;
|
|
139
|
+
}
|
|
140
|
+
} catch {
|
|
141
|
+
}
|
|
113
142
|
try {
|
|
114
143
|
const manifestRes = await fetchDevProbe(`${normalizedBaseUrl}/`, {
|
|
115
144
|
headers: { "expo-platform": "ios" }
|
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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.135 | (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
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.135 | (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;
|
|
@@ -117,8 +117,8 @@ var init_registry = __esm({
|
|
|
117
117
|
range: ">=4.0.0",
|
|
118
118
|
coverage: 0.87,
|
|
119
119
|
note: "screen container, stack, header config, search bar, navigation props",
|
|
120
|
-
working: "Screen, ScreenContainer, ScreenStack, Android modal/pageSheet push fallback, Android statusBarHidden/statusBarStyle/navigationBarHidden traits, push/pop slide, zoom/fade/fade_from_bottom transitions, edge swipe-back, parallax behind-screen, large title collapse, header (back button, inline/large title, custom left/center/right/search bar subviews, crossfade), useHeaderHeight, useTransitionProgress, FullWindowOverlay, SearchBar, Tabs.Host/Screen, lifecycle callbacks (onAppear/onDisappear/onWillAppear/onWillDisappear), onDismissed",
|
|
121
|
-
missing: "
|
|
120
|
+
working: "Screen, ScreenContainer, ScreenStack, enableFreeze/freezeEnabled with delayed React freeze, Android modal/pageSheet push fallback, Android statusBarHidden/statusBarStyle/navigationBarHidden traits, push/pop slide, zoom/fade/fade_from_bottom transitions, edge swipe-back, parallax behind-screen, large title collapse, header (back button, inline/large title, custom left/center/right/search bar subviews, crossfade), useHeaderHeight, useTransitionProgress, FullWindowOverlay, SearchBar, Tabs.Host/Screen, lifecycle callbacks (onAppear/onDisappear/onWillAppear/onWillDisappear), onDismissed",
|
|
121
|
+
missing: "statusBarColor/navigationBarColor/navigationBarTranslucent ignored, replaceAnimation differentiation, formSheet detent fidelity, integrated search bar placements"
|
|
122
122
|
}
|
|
123
123
|
]
|
|
124
124
|
},
|
|
@@ -3478,8 +3478,8 @@ var init_registry = __esm({
|
|
|
3478
3478
|
range: ">=6.0.0",
|
|
3479
3479
|
coverage: 0.9,
|
|
3480
3480
|
note: "pure JS wrapper around react-native-screens (stubbed); push/pop, header, modals, large titles all flow through screens stub",
|
|
3481
|
-
working: "createNativeStackNavigator, Screen, Group, Navigator, header config (title, back button, large title, search bar, custom left/right), Android modal/pageSheet push fallback, modal/formSheet/pageSheet presentation, push/pop animations, gesture-driven back, useHeaderHeight",
|
|
3482
|
-
missing: "fidelity bound by react-native-screens stub \u2014 formSheet detent fidelity, search bar placements
|
|
3481
|
+
working: "createNativeStackNavigator, Screen, Group, Navigator, header config (title, back button, large title, search bar, custom left/right), Android modal/pageSheet push fallback, modal/formSheet/pageSheet presentation, push/pop animations, gesture-driven back, freezeOnBlur via react-native-screens, useHeaderHeight",
|
|
3482
|
+
missing: "fidelity bound by react-native-screens stub \u2014 formSheet detent fidelity, search bar placements"
|
|
3483
3483
|
}
|
|
3484
3484
|
]
|
|
3485
3485
|
},
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.135 | (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
|
@@ -63,12 +63,76 @@ function isBaseServerUrl(url: URL) {
|
|
|
63
63
|
return (path === '/' || path === '') && !url.search && !url.hash
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
+
// resolve a loopback dev-server port through the SAME server-side scanner the
|
|
67
|
+
// dev-server list uses (`/__server-scan`), so an explicit port (`/rn/<port>`, a
|
|
68
|
+
// typed port) gets the EXACT manifest `launchAsset.url` the list resolves —
|
|
69
|
+
// byte-identical, one resolver.
|
|
70
|
+
//
|
|
71
|
+
// why this exists: in a browser/worker the direct manifest probe below is
|
|
72
|
+
// cross-origin (shell on :5173, dev server on :<port>), and a dev server
|
|
73
|
+
// answers a cross-origin `GET /` with its SSR HTML, not the expo manifest. so
|
|
74
|
+
// the manifest branch silently fails (`.json()` throws on HTML) and the probe
|
|
75
|
+
// falls back to a generic `/index.bundle` — a DIFFERENT metro entry point than
|
|
76
|
+
// the manifest's `metro-entry.bundle`, which makes metro build the same app
|
|
77
|
+
// twice. the scanner runs server-side (same-origin node fetch, sends the
|
|
78
|
+
// expo-platform header) and reads `launchAsset.url` correctly.
|
|
79
|
+
//
|
|
80
|
+
// env-agnostic by design: it just attempts `/__server-scan` and lets the result
|
|
81
|
+
// decide. in the tenant worker (which has no `location`) the patched fetch
|
|
82
|
+
// resolves the relative path to the shell origin and returns the scan json. in a
|
|
83
|
+
// node/bun CLI a relative-URL fetch with no base throws → null → the direct probe
|
|
84
|
+
// runs (correct there, since node can read the cross-origin manifest). in prod
|
|
85
|
+
// the path SPA-falls-back to HTML → the json content-type guard returns null →
|
|
86
|
+
// direct probe. so there is exactly one resolver per environment, no env sniff.
|
|
87
|
+
async function resolvePortViaServerScan(port: number): Promise<ResolvedDevBundle | null> {
|
|
88
|
+
try {
|
|
89
|
+
const res = await fetch('/__server-scan', { cache: 'no-store' })
|
|
90
|
+
if (!res.ok) return null
|
|
91
|
+
if (!(res.headers.get('content-type') || '').toLowerCase().includes('json'))
|
|
92
|
+
return null
|
|
93
|
+
const servers: unknown = await res.json()
|
|
94
|
+
if (!Array.isArray(servers)) return null
|
|
95
|
+
const match = servers.find(
|
|
96
|
+
(
|
|
97
|
+
s,
|
|
98
|
+
): s is {
|
|
99
|
+
port: number
|
|
100
|
+
bundleUrl: string
|
|
101
|
+
framework?: string
|
|
102
|
+
projectName?: string
|
|
103
|
+
} =>
|
|
104
|
+
!!s &&
|
|
105
|
+
typeof s === 'object' &&
|
|
106
|
+
(s as { port?: unknown }).port === port &&
|
|
107
|
+
typeof (s as { bundleUrl?: unknown }).bundleUrl === 'string',
|
|
108
|
+
)
|
|
109
|
+
if (!match) return null
|
|
110
|
+
return {
|
|
111
|
+
bundleUrl: match.bundleUrl,
|
|
112
|
+
port,
|
|
113
|
+
framework: typeof match.framework === 'string' ? match.framework : 'unknown',
|
|
114
|
+
projectName: typeof match.projectName === 'string' ? match.projectName : undefined,
|
|
115
|
+
}
|
|
116
|
+
} catch {
|
|
117
|
+
return null
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
66
121
|
async function probeBaseUrlBundle(
|
|
67
122
|
baseUrl: string,
|
|
68
123
|
port: number,
|
|
69
124
|
): Promise<ResolvedDevBundle | null> {
|
|
70
125
|
const normalizedBaseUrl = baseUrl.replace(/\/+$/, '')
|
|
71
126
|
|
|
127
|
+
// browser/worker loopback targets resolve through the server-side scanner so
|
|
128
|
+
// they match the dev-server list exactly — see resolvePortViaServerScan.
|
|
129
|
+
try {
|
|
130
|
+
if (isLoopbackHost(new URL(normalizedBaseUrl).hostname)) {
|
|
131
|
+
const viaScan = await resolvePortViaServerScan(port)
|
|
132
|
+
if (viaScan) return viaScan
|
|
133
|
+
}
|
|
134
|
+
} catch {}
|
|
135
|
+
|
|
72
136
|
try {
|
|
73
137
|
const manifestRes = await fetchDevProbe(`${normalizedBaseUrl}/`, {
|
|
74
138
|
headers: { 'expo-platform': 'ios' },
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.133 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a,b,c,d}from"./chunk-NNRWRRI5.js";import"./chunk-2OST4PMS.js";import"./chunk-THJDQ2EB.js";import"./chunk-QGPM7UTZ.js";import"./chunk-YL3KKAZR.js";import"./chunk-Q3GCZEPC.js";export{c as ensureDaemonRunning,a as ensureRuntimeInstalled,d as ensureSootsimReady,b as resolveBootstrapPort};
|