sootsim 0.1.46 → 0.1.48
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-4SFE3DNP.js → agent-AX2IIGGA.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-BCXD55HW.js → agent-wrapper-CYIA4WBO.js} +2 -2
- package/dist-cli/chunks/{assert-ILRVN6CB.js → assert-WXUMY4WQ.js} +2 -2
- package/dist-cli/chunks/auto-bootstrap-SHBSE54I.js +2 -0
- package/dist-cli/chunks/beta-HUTLG7S5.js +2 -0
- package/dist-cli/chunks/chunk-2QAH2UO3.js +2 -0
- package/dist-cli/chunks/{chunk-WWEMLI77.js → chunk-2V4MZ2GA.js} +1 -1
- package/dist-cli/chunks/{chunk-Z7J6LG53.js → chunk-3CNCQHRS.js} +2 -2
- package/dist-cli/chunks/{chunk-SG7ICXM2.js → chunk-5TJ62H7F.js} +2 -2
- package/dist-cli/chunks/{chunk-OMPAUB4V.js → chunk-5TX3TMN5.js} +3 -3
- package/dist-cli/chunks/{chunk-X7P3CGPY.js → chunk-5ZDXHLTR.js} +3 -3
- package/dist-cli/chunks/chunk-77DLIFAS.js +2 -0
- package/dist-cli/chunks/{chunk-FCFKR7EM.js → chunk-7D357J2J.js} +2 -2
- package/dist-cli/chunks/{chunk-OZICEBUA.js → chunk-AHSGYL4N.js} +2 -2
- package/dist-cli/chunks/{chunk-MGEB3WEI.js → chunk-BLUM4WIT.js} +1 -1
- package/dist-cli/chunks/{chunk-OHI4DJSD.js → chunk-CUDHQVA5.js} +2 -2
- package/dist-cli/chunks/{chunk-DGAHFMAU.js → chunk-DMW52773.js} +2 -2
- package/dist-cli/chunks/chunk-EFKEXVQX.js +1 -0
- package/dist-cli/chunks/{chunk-Z6BJVYOU.js → chunk-FTMYUCDK.js} +1 -1
- package/dist-cli/chunks/chunk-G7F6XU5L.js +1 -0
- package/dist-cli/chunks/{chunk-H46ZLTT5.js → chunk-HDDGAW2M.js} +1 -1
- package/dist-cli/chunks/{chunk-GWOV6KFE.js → chunk-HFYLZ5KC.js} +1 -1
- package/dist-cli/chunks/{chunk-PEXPACO5.js → chunk-HHP64ICF.js} +1 -1
- package/dist-cli/chunks/chunk-INIDEXC4.js +66 -0
- package/dist-cli/chunks/chunk-ITMSXL4X.js +11 -0
- package/dist-cli/chunks/{chunk-KETYRULQ.js → chunk-JKDJWOSQ.js} +2 -2
- package/dist-cli/chunks/{chunk-4OPZYTVB.js → chunk-JNXNANRK.js} +1 -1
- package/dist-cli/chunks/{chunk-WD36PEEJ.js → chunk-JT6IVW3F.js} +2 -2
- package/dist-cli/chunks/{chunk-MJD6C3BG.js → chunk-JTLMW6K5.js} +2 -2
- package/dist-cli/chunks/{chunk-BVXZZOBA.js → chunk-KQV52OMN.js} +2 -2
- package/dist-cli/chunks/{chunk-FLJAN5PS.js → chunk-L7QWUG47.js} +2 -2
- package/dist-cli/chunks/chunk-LIXV3IFT.js +1 -0
- package/dist-cli/chunks/{chunk-7CZ5VL7E.js → chunk-LOLX4MOY.js} +1 -1
- package/dist-cli/chunks/{chunk-XU27QCRX.js → chunk-LWPLYZ6M.js} +1 -1
- package/dist-cli/chunks/{chunk-XT36ZR2H.js → chunk-MSCMYKPC.js} +1 -1
- package/dist-cli/chunks/{chunk-PRRVFNFG.js → chunk-NODGVLX3.js} +2 -2
- package/dist-cli/chunks/{chunk-K3I6VLF3.js → chunk-NTQIMLT6.js} +1 -1
- package/dist-cli/chunks/chunk-NXSQ5PG3.js +1 -0
- package/dist-cli/chunks/{chunk-XSJ4SU63.js → chunk-T2GQMNQU.js} +3 -3
- package/dist-cli/chunks/{chunk-PG6FUKZX.js → chunk-TZMGFGPI.js} +2 -2
- package/dist-cli/chunks/{chunk-M5HZVUQQ.js → chunk-UAVOHNUW.js} +1 -1
- package/dist-cli/chunks/{chunk-QXJR74QV.js → chunk-VOYMDSN6.js} +1 -1
- package/dist-cli/chunks/{chunk-XKNZR4BB.js → chunk-WQDITZHE.js} +2 -2
- package/dist-cli/chunks/{chunk-N7DDQ5ZB.js → chunk-X46E3R6L.js} +2 -2
- package/dist-cli/chunks/{chunk-S4OSFQIC.js → chunk-YX7WHJEC.js} +2 -2
- package/dist-cli/chunks/{chunk-WRNSX5RR.js → chunk-Z3OFWNVG.js} +2 -2
- package/dist-cli/chunks/{chunk-YZ7BSNJJ.js → chunk-Z4X6PVCT.js} +2 -2
- package/dist-cli/chunks/{chunk-MDSET24U.js → chunk-Z75LPOIA.js} +2 -2
- package/dist-cli/chunks/{chunk-W52DGZNV.js → chunk-ZVO4ABLX.js} +1 -1
- package/dist-cli/chunks/{compat-IC7P6QWF.js → compat-7Z7M6PD5.js} +3 -3
- package/dist-cli/chunks/{config-WVL2Y7UU.js → config-OSEZ3KWG.js} +2 -2
- package/dist-cli/chunks/control-BKBHXPZP.js +2 -0
- package/dist-cli/chunks/cpu-profile-OL2VPDCX.js +2 -0
- package/dist-cli/chunks/{daemon-TH7B22C4.js → daemon-G3ON7OHZ.js} +3 -3
- package/dist-cli/chunks/{debug-MN6RXRJO.js → debug-4ONAV32N.js} +3 -3
- package/dist-cli/chunks/demo-app-registry-RZ3S32T3.js +2 -0
- package/dist-cli/chunks/{detox-BUJ3IOIB.js → detox-W2RYM6BG.js} +3 -3
- package/dist-cli/chunks/{device-MUCGW2TT.js → device-T4VS4T3K.js} +2 -2
- package/dist-cli/chunks/{diagnose-5NADXMRL.js → diagnose-ZU7OZQ2A.js} +2 -2
- package/dist-cli/chunks/drivers-BM23IJSX.js +2 -0
- package/dist-cli/chunks/{electron-ON6434HQ.js → electron-YPZABLAA.js} +3 -3
- package/dist-cli/chunks/flow-6P474SWM.js +2 -0
- package/dist-cli/chunks/{hints-23C3BW62.js → hints-Z3UOKTIN.js} +2 -2
- package/dist-cli/chunks/{home-paths-DAI3XZLG.js → home-paths-UQUVRQ4U.js} +2 -2
- package/dist-cli/chunks/{inspect-UVS4UIJF.js → inspect-6E4HV34I.js} +3 -3
- package/dist-cli/chunks/install-55S5HGKP.js +2 -0
- package/dist-cli/chunks/{install-desktop-6BT3VL2C.js → install-desktop-676SA6NV.js} +3 -3
- package/dist-cli/chunks/{keys-4OT37H4C.js → keys-ZFI5OOFG.js} +2 -2
- package/dist-cli/chunks/{launch-2C3YGABQ.js → launch-VNV77QV6.js} +3 -3
- package/dist-cli/chunks/{login-NWY5ENAT.js → login-DP4UYZZZ.js} +4 -4
- package/dist-cli/chunks/{logout-6BHGSVMN.js → logout-QUVFZJN6.js} +2 -2
- package/dist-cli/chunks/{maestro-V7WIYUNE.js → maestro-Y26D3HN5.js} +15 -15
- package/dist-cli/chunks/{preview-H2ACZ26A.js → preview-JYFSFZ4J.js} +2 -2
- package/dist-cli/chunks/{profile-ZLDFCIZA.js → profile-UEL5Q6F6.js} +2 -2
- package/dist-cli/chunks/{react-PEM4I7YB.js → react-7FIMNUQ6.js} +2 -2
- package/dist-cli/chunks/{record-KVBDN3GC.js → record-7FXCSWQ4.js} +5 -5
- package/dist-cli/chunks/runtime-CNLDNL2W.js +2 -0
- package/dist-cli/chunks/{runtime-delivery-ECDTRILR.js → runtime-delivery-HKT3TDML.js} +2 -2
- package/dist-cli/chunks/screenshot-ZYXLM2YB.js +28 -0
- package/dist-cli/chunks/{screenshot-mode-DKPHJONC.js → screenshot-mode-CJ2G6CPK.js} +2 -2
- package/dist-cli/chunks/{screenshots-5UQ36N7Q.js → screenshots-DFKJAKBF.js} +2 -2
- package/dist-cli/chunks/{server-LADTO7OS.js → server-7IKLGAS3.js} +2 -2
- package/dist-cli/chunks/setup-repo-HMDFTMDA.js +2 -0
- package/dist-cli/chunks/{skills-FUN6M66H.js → skills-PQU7B22X.js} +2 -2
- package/dist-cli/chunks/{start-A6FDAXGU.js → start-VWUFFDUJ.js} +4 -4
- package/dist-cli/chunks/store-KZH4YGAS.js +2 -0
- package/dist-cli/chunks/telemetry-PBJ7ERBC.js +2 -0
- package/dist-cli/chunks/{test-HPXQTADO.js → test-TK7FINPS.js} +3 -3
- package/dist-cli/chunks/{three-mode-2APCW2N7.js → three-mode-RBLRHOPV.js} +2 -2
- package/dist-cli/chunks/{timeline-6D6V6LRX.js → timeline-HK3AO5R7.js} +2 -2
- package/dist-cli/chunks/{upgrade-KZIO3ZJH.js → upgrade-2LKSTHYL.js} +2 -2
- package/dist-cli/chunks/upload-LDVG27PU.js +2 -0
- package/dist-cli/chunks/{web-MR4EQWCC.js → web-MVMHXQAE.js} +2 -2
- package/dist-cli/chunks/{what-happened-FHQD42JV.js → what-happened-LXCQCYF3.js} +2 -2
- package/dist-cli/chunks/{whoami-GHNFMMK4.js → whoami-QIYDODGD.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/bridge-constants.cjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +2 -16
- 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/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/vite-base.cjs +1 -1
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/dist-cli/chunks/auto-bootstrap-A4ML6QTW.js +0 -2
- package/dist-cli/chunks/beta-34TOAZFI.js +0 -2
- package/dist-cli/chunks/chunk-KV7XS7WL.js +0 -1
- package/dist-cli/chunks/chunk-PAOOYAVI.js +0 -2
- package/dist-cli/chunks/chunk-PKVNCXQD.js +0 -66
- package/dist-cli/chunks/chunk-RSMU24BE.js +0 -1
- package/dist-cli/chunks/chunk-T4H37KU7.js +0 -2
- package/dist-cli/chunks/chunk-UH5PKJXT.js +0 -1
- package/dist-cli/chunks/chunk-VWJ4O366.js +0 -1
- package/dist-cli/chunks/chunk-ZM4JL3VP.js +0 -11
- package/dist-cli/chunks/control-7VDRDQXQ.js +0 -2
- package/dist-cli/chunks/cpu-profile-FJIMZKXF.js +0 -2
- package/dist-cli/chunks/demo-app-registry-ISNBFJTI.js +0 -2
- package/dist-cli/chunks/drivers-RXVSKXUD.js +0 -2
- package/dist-cli/chunks/flow-WI5MN76X.js +0 -2
- package/dist-cli/chunks/install-QKH2JQGE.js +0 -2
- package/dist-cli/chunks/runtime-LLWAHSVR.js +0 -2
- package/dist-cli/chunks/screenshot-PJEMMFQO.js +0 -28
- package/dist-cli/chunks/setup-repo-TXI7Q6F6.js +0 -2
- package/dist-cli/chunks/store-KTDAA7SP.js +0 -2
- package/dist-cli/chunks/telemetry-VPFS3BGR.js +0 -2
- package/dist-cli/chunks/upload-LDL3FZKD.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{E as F,r as S,s as k,t as g}from"./chunk-
|
|
1
|
+
/*! sootsim v0.1.48 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{E as F,r as S,s as k,t as g}from"./chunk-NTQIMLT6.js";import{c as b,e as y}from"./chunk-DMW52773.js";import{b as w}from"./chunk-2V4MZ2GA.js";import"./chunk-G7F6XU5L.js";import"./chunk-UAVOHNUW.js";import"./chunk-HFYLZ5KC.js";function M(t){let e=[];for(let n=0;n<t.length;n++)if(t[n]==="--since"&&n+1<t.length){e.push(n,n+1);let s=t[n+1].trim(),a=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(a){let l=Number(a[1]),u=a[2]??"ms",r=u==="s"?l*1e3:u==="m"?l*6e4:l;return{since:Date.now()-r,consumed:e}}let o=Number(s);if(Number.isFinite(o)&&o>1e12)return{since:o,consumed:e}}return{consumed:e}}function E(t){let e=[];for(let n=0;n<t.length;n++)if(t[n]==="--kinds"&&n+1<t.length)return e.push(n,n+1),{kinds:t[n+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:e};return{consumed:e}}function C(t){let e=[];for(let n=0;n<t.length;n++)if(t[n]==="--limit"&&n+1<t.length){e.push(n,n+1);let s=Number(t[n+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:e}}return{consumed:e}}function _(t,e){if(e===null)return new Date(t).toLocaleTimeString();let n=(t-e)/1e3;return`${n>=0?"+":""}${n.toFixed(2)}s`}function j(t,e){switch(t){case"app-launch":return e.phase==="launch"?`launch ${e.appName??e.toAppId??""}`:`dismiss ${e.appName??e.fromAppId??""} \u2192 ${e.toAppId??""}`;case"toast":return`"${e.text??""}"${e.durationMs?` (${e.durationMs}ms)`:""}`;case"keyboard":return`${e.phase??"?"}${e.heightPx?` h=${e.heightPx}`:""}${e.mode?` ${e.mode}`:""}`;case"screen":return`${e.phase??"?"} ${e.name??e.activeName??""}`;case"route":return`${e.phase??"?"} ${e.path??e.pathname??""}`;case"alert":case"actionsheet":case"picker":return`${e.phase??"?"} ${e.title??e.message??""}`;case"notification":return`${e.title??""}${e.body?` \u2014 ${e.body}`:""}`;case"fetch":return`${e.method??"GET"} ${e.url??""}${e.status?` -> ${e.status}`:""}`;case"console":return`${e.level??"log"}: ${(e.message??"").toString().slice(0,120)}`;case"shell":return`${e.event??e.type??e.phase??""}`;case"scroll":return`${e.phase??"?"} ${e.target??""}`;case"gesture":return`${e.phase??"?"} ${e.type??""}`;case"text-input":return`${e.phase??"?"}${e.value!==void 0?` "${String(e.value).slice(0,40)}"`:""}`;case"react-commit":{let n=e.slowest;return`${e.fiberCount??"?"} fibers ${e.durationMs??"?"}ms${n?.displayName?` \xB7 ${n.displayName} ${n.durationMs??"?"}ms`:""}`}case"reanimated":case"animation":return`${e.kind??""} ${e.target??""}${e.durationMs?` ${e.durationMs}ms`:""}`}}function N(t,e){let n=_(t.t,e).padStart(8),s=t.context.padEnd(6),a=`[${t.kind}]`.padEnd(15),o="",l=t.data;return l&&typeof l=="object"&&(o=j(t.kind,l)),` ${n} ${s} ${a} ${o}`}function T(t){let e=[],n={label:"initial state",events:[],startedAt:t[0]?.t??null};e.push(n);for(let s of t)if(n.events.push(s),s.kind==="screen"||s.kind==="route"){let a=s.data,o=a?.phase;if(!o||o==="enter"||o==="appear"||o==="active"){let l=a?.name||a?.activeName||a?.path||a?.pathname||s.kind;e.length===1&&n.events.length===1?n.label=`${s.kind}: ${l}`:(n={label:`${s.kind}: ${l}`,events:[],startedAt:s.t},e.push(n))}}return e}async function O(t,e){let n=b(t,{port:e.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow"],stripValueFlags:["--since","--kinds","--limit"]});(t.includes("--help")||t.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.48 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{d as i}from"./chunk-JKDJWOSQ.js";import{d as n}from"./chunk-Z3OFWNVG.js";import"./chunk-UAVOHNUW.js";import"./chunk-HFYLZ5KC.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.48 | (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.48 | (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.48 | (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.48 | (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.48 | (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.48 | (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.48 | (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.48 | (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.48 | (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.48 | (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;
|
|
@@ -23,7 +23,6 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
23
23
|
var dev_bundle_resolution_exports = {};
|
|
24
24
|
__export(dev_bundle_resolution_exports, {
|
|
25
25
|
DEFAULT_TEST_DRIVE_PORT: () => DEFAULT_TEST_DRIVE_PORT,
|
|
26
|
-
assumeDevBundleForPort: () => assumeDevBundleForPort,
|
|
27
26
|
inferManifestFramework: () => inferManifestFramework,
|
|
28
27
|
probePortBundle: () => probePortBundle,
|
|
29
28
|
resolveConnectionInput: () => resolveConnectionInput
|
|
@@ -40,7 +39,6 @@ function isLoopbackHost(hostname) {
|
|
|
40
39
|
}
|
|
41
40
|
|
|
42
41
|
// src/native-dev-bundle-url.ts
|
|
43
|
-
var ONE_BUNDLE_PATH = "/node_modules/one/metro-entry.bundle?platform=ios&dev=true&minify=false";
|
|
44
42
|
var METRO_BUNDLE_PATH = "/index.bundle?platform=ios&dev=true&hot=true&minify=false";
|
|
45
43
|
function isAbsoluteHttpUrl(url) {
|
|
46
44
|
return /^https?:\/\//i.test(url);
|
|
@@ -96,17 +94,6 @@ async function fetchDevProbe(targetUrl, init) {
|
|
|
96
94
|
}
|
|
97
95
|
return fetch(`/__fetch-proxy?url=${encodeURIComponent(targetUrl)}`, requestInit);
|
|
98
96
|
}
|
|
99
|
-
function assumeDevBundleForPort(port, options = {}) {
|
|
100
|
-
const framework = options.framework ?? "one";
|
|
101
|
-
const host = options.host ?? "localhost";
|
|
102
|
-
const protocol = options.protocol ?? "http:";
|
|
103
|
-
const bundlePath = framework === "metro" ? METRO_BUNDLE_PATH : ONE_BUNDLE_PATH;
|
|
104
|
-
return {
|
|
105
|
-
bundleUrl: `${buildBaseUrl(protocol, host, port)}${bundlePath}`,
|
|
106
|
-
port,
|
|
107
|
-
framework
|
|
108
|
-
};
|
|
109
|
-
}
|
|
110
97
|
function getDefaultPortForProtocol(protocol) {
|
|
111
98
|
return protocol === "https:" ? 443 : 80;
|
|
112
99
|
}
|
|
@@ -176,7 +163,7 @@ async function resolveConnectionInput(input) {
|
|
|
176
163
|
const protocol = parsed.protocol || "http:";
|
|
177
164
|
const port = parsed.port ? parseInt(parsed.port, 10) : getDefaultPortForProtocol(protocol);
|
|
178
165
|
const baseUrl = buildBaseUrl(protocol, parsed.hostname, port);
|
|
179
|
-
if (
|
|
166
|
+
if (isBaseServerUrl(parsed)) {
|
|
180
167
|
const resolved = await probeBaseUrlBundle(baseUrl, port);
|
|
181
168
|
if (resolved) return resolved;
|
|
182
169
|
throw buildUnresolvedTargetError(baseUrl);
|
|
@@ -186,7 +173,6 @@ async function resolveConnectionInput(input) {
|
|
|
186
173
|
// Annotate the CommonJS export names for ESM import in node:
|
|
187
174
|
0 && (module.exports = {
|
|
188
175
|
DEFAULT_TEST_DRIVE_PORT,
|
|
189
|
-
assumeDevBundleForPort,
|
|
190
176
|
inferManifestFramework,
|
|
191
177
|
probePortBundle,
|
|
192
178
|
resolveConnectionInput
|
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.48 | (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.48 | (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.48 | (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/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.48 | (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.48 | (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.48 | (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.48 | (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/vite-base.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.48 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.48 | (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
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a,b,c,d}from"./chunk-X7P3CGPY.js";import"./chunk-DGAHFMAU.js";import"./chunk-WWEMLI77.js";import"./chunk-VWJ4O366.js";import"./chunk-M5HZVUQQ.js";import"./chunk-GWOV6KFE.js";export{c as ensureDaemonRunning,a as ensureRuntimeInstalled,d as ensureSootsimReady,b as resolveBootstrapPort};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a as s}from"./chunk-WRNSX5RR.js";import{w as o}from"./chunk-M5HZVUQQ.js";function u(){let e=process.env.DO_NOT_TRACK;return e==="1"||e==="true"||!o()}function a(){if(u())return null;let e=process.env.SOOT_POSTHOG_API_KEY||process.env.VITE_POSTHOG_API_KEY||"";if(!e)return null;let t=process.env.SOOT_POSTHOG_HOST||process.env.VITE_POSTHOG_HOST||"https://us.i.posthog.com";return{apiKey:e,host:t.replace(/\/+$/,"")}}function c(e){return e?e.userId?e.userId:e.installationId!=null?`install:${e.installationId}`:e.repoId?`repo:${e.repoId}`:e.shareId?`share:${e.shareId}`:"anonymous-cli":"anonymous-cli"}function p(e){let t=e.identity??{},n={$lib:"soot-cli",source:t.source??"cli",...e.properties};return t.userId&&(n.userId=t.userId),t.repoId&&(n.repoId=t.repoId),t.installationId!=null&&(n.installationId=String(t.installationId)),t.shareId&&(n.shareId=t.shareId),t.plan&&(n.plan=t.plan),{event:e.event,distinct_id:c(t),properties:n,timestamp:new Date().toISOString()}}var r=[],l=!1;async function i(){if(r.length===0)return;let e=a();if(!e){r.length=0;return}let t=r.splice(0,r.length).map(p);try{await fetch(`${e.host}/batch/`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:e.apiKey,batch:t}),signal:AbortSignal.timeout(2e3)})}catch{}}function d(){l||(l=!0,process.on("beforeExit",()=>{i()}),process.on("exit",()=>{i()}))}function h(e){if(u())return;d();let t=null;try{t=s()?.user?.id??null}catch{t=null}r.push({...e,identity:{source:"cli",userId:t,...e.identity}})}async function g(){await i()}export{h as a,g as b};
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{d as Q,e as X}from"./chunk-KETYRULQ.js";import{d as J}from"./chunk-4OPZYTVB.js";import{c as q,e as Y,g as w}from"./chunk-DGAHFMAU.js";import{a as D,b}from"./chunk-PAOOYAVI.js";import{a as K}from"./chunk-WRNSX5RR.js";import{createHash as Te}from"crypto";import{readFileSync as te}from"fs";import{gzipSync as ne}from"zlib";function Z(e){let t=(e||"").toLowerCase().split(";")[0].trim();return t?!(t.startsWith("image/")||t.startsWith("video/")||t.startsWith("audio/")||t==="font/woff2"||t==="application/font-woff2"||t==="application/zip"||t==="application/gzip"):!0}function H(e,t){let r=new AbortController,s=setTimeout(()=>r.abort(new Error(`${t} timed out after ${e/1e3}s`)),e);return{signal:r.signal,cancel:()=>clearTimeout(s)}}async function be(e){let t=H(12e4,`PUT ${e.url}`),r;try{r=await fetch(e.url,{method:"PUT",headers:{"content-type":e.contentType},body:e.bytes,signal:t.signal})}finally{t.cancel()}if(!r.ok){let s=await r.text().catch(()=>"");throw new Error(`PUT ${r.status}: ${s.slice(0,200)}`)}}async function we(e,t=8,r){let s=0,o=0,a=e.length;await Promise.all(Array.from({length:Math.min(t,a)},async()=>{for(;s<a;){let u=e[s++];await be(u),o++,r?.(o,a)}}))}function ve(e,t,r,s){let o=[];o.push({url:e.bundle.putUrl,contentType:e.bundle.contentType,bytes:t});for(let a of e.files){let u=r.get(a.urlhash);u&&o.push({url:a.putUrl,contentType:a.contentType,bytes:u})}return e.events&&s?.eventsBytes&&o.push({url:e.events.putUrl,contentType:e.events.contentType,bytes:s.eventsBytes}),e.flowVideo&&s?.videoBytes&&o.push({url:e.flowVideo.putUrl,contentType:e.flowVideo.contentType,bytes:s.videoBytes}),e.storage&&s?.storageBytes&&o.push({url:e.storage.putUrl,contentType:e.storage.contentType,bytes:s.storageBytes}),o}function Be(e){return e.replace(/\/+$/,"")}var _=class extends Error{constructor(r,s,o){super(r);this.status=s;this.phase=o;this.name="PresignedUploadError"}};async function ee(e){let t=Be(e.originBase),r={"content-type":"application/json"};e.authHeader&&(r.authorization=e.authHeader),e.adminBypassToken&&(r["x-soot-admin-upload-bypass"]=e.adminBypassToken);let s=H(3e4,"init"),o;try{o=await fetch(`${t}/api/preview/upload/init`,{method:"POST",headers:r,body:JSON.stringify(e.initBody),signal:s.signal})}finally{s.cancel()}if(!o.ok){let B=await o.text().catch(()=>"");throw new _(`init failed: ${o.status} ${B.slice(0,200)}`,o.status,"init")}let a=await o.json(),u=ve(a,e.bundleBytes,e.filesByHash,e.extras);await we(u,e.concurrency??8,e.onPutProgress);let y=H(3e4,"finalize"),p;try{p=await fetch(`${t}/api/preview/upload/finalize`,{method:"POST",headers:r,body:JSON.stringify({token:a.token}),signal:y.signal})}finally{y.cancel()}if(!p.ok){let B=await p.text().catch(()=>"");throw new _(`finalize failed: ${p.status} ${B.slice(0,200)}`,p.status,"finalize")}let P=await p.json();return{init:a,finalize:P}}var ie=process.env.SOOTSIM_UPLOAD_ORIGIN||"https://sootbean.com",ae=process.env.SOOTSIM_PREVIEW_ORIGIN||"https://sootsim.com",M="http://localhost:3000";async function Ie(e){if(e)return e;if(process.env.SOOTSIM_UPLOAD_ORIGIN)return process.env.SOOTSIM_UPLOAD_ORIGIN;try{let t=await fetch(`${M}/api/preview/upload/init`,{method:"OPTIONS"});if(t.ok||t.status===204||t.status===405)return M}catch{}return ie}function v(e){return e.replace(/\/$/,"")}function Ue(e){try{let r=new URL(e).hostname.replace(/^\[|\]$/g,"").toLowerCase();return r==="localhost"||r.endsWith(".localhost")||r==="0.0.0.0"||r==="::1"||/^127(?:\.\d{1,3}){3}$/.test(r)}catch{return!1}}function Pe(e){try{let t=new URL(e).hostname.toLowerCase();return t==="sootbean.com"||t.endsWith(".sootbean.com")}catch{return!1}}function Se(e,t){return t?v(t):process.env.SOOTSIM_PREVIEW_ORIGIN?v(process.env.SOOTSIM_PREVIEW_ORIGIN):Ue(e)?v(e):Pe(e)?v(ae):v(e)}function xe(){console.log(`
|
|
3
|
-
sootsim upload \u2014 publish the current bundle as a /preview/<id> link
|
|
4
|
-
|
|
5
|
-
usage:
|
|
6
|
-
sootsim upload [--origin <url>] [--public-origin <url>] [--events <path>] [--sim <sim>] [--open] [--assets-only]
|
|
7
|
-
|
|
8
|
-
options:
|
|
9
|
-
--origin <url> upload target (default: auto)
|
|
10
|
-
prefers ${M} when available, otherwise
|
|
11
|
-
falls back to ${ie}
|
|
12
|
-
override with SOOTSIM_UPLOAD_ORIGIN env var
|
|
13
|
-
--public-origin <url>
|
|
14
|
-
public /preview link origin (default: ${ae}
|
|
15
|
-
for prod uploads, upload origin for localhost/custom origins).
|
|
16
|
-
override with SOOTSIM_PREVIEW_ORIGIN env var
|
|
17
|
-
--events <path> path to a gzipped events .jsonl.gz file to attach
|
|
18
|
-
--video <path> path to a webm/mp4/gif flow recording. embedded inline
|
|
19
|
-
in the pr sticky comment served at
|
|
20
|
-
/api/preview/flow-video?id=<share-id>
|
|
21
|
-
--video-duration-ms <ms>
|
|
22
|
-
duration hint for attached flow video
|
|
23
|
-
--sim <sim> target a specific sim (see: sootsim list)
|
|
24
|
-
--open open the resulting /preview/<id> url in the browser
|
|
25
|
-
--assets-only drop API/JSON/HTML records before upload; keep images,
|
|
26
|
-
fonts, css, js, and binary blobs. live-data demos hit
|
|
27
|
-
the real network at replay time instead of serving
|
|
28
|
-
recorded API snapshots
|
|
29
|
-
-h, --help
|
|
30
|
-
|
|
31
|
-
examples:
|
|
32
|
-
sootsim upload
|
|
33
|
-
sootsim upload --origin http://localhost:3000 --open
|
|
34
|
-
sootsim upload --events ./my-session.jsonl.gz
|
|
35
|
-
sootsim upload --video /tmp/soot-flow.webm
|
|
36
|
-
`)}function U(e,t){let r=e.findIndex(o=>o===t);if(r<0)return;let s=e[r+1];return e.splice(r,2),s}function re(e,t){let r=e.findIndex(s=>s===t);return r<0?!1:(e.splice(r,1),!0)}function se(e){let t=(e||"").toLowerCase().split(";")[0].trim();return t?!!(t.startsWith("image/")||t.startsWith("font/")||t.startsWith("video/")||t.startsWith("audio/")||t.startsWith("model/")||t==="text/css"||t==="application/javascript"||t==="text/javascript"||t==="application/wasm"||t==="application/font-woff"||t==="application/font-woff2"||t==="application/octet-stream"):!1}async function oe(e){let t=await fetch(e);if(!t.ok)throw new Error(`fetch ${e} -> ${t.status} ${t.statusText}`);return new Uint8Array(await t.arrayBuffer())}function Oe(e){return/\.bundle($|\?)/.test(e)||/\.js($|\?)/.test(e)?"application/javascript":/\.zip($|\?)/.test(e)?"application/zip":"application/javascript"}function Re(e){try{let t=new URL(e);return t.searchParams.get("lazy")==="true"?(t.searchParams.set("lazy","false"),t.toString()):e}catch{return e}}async function $e(e,t){let s=[];for(let o=0;o<t;o+=15e5){let a=Math.min(o+15e5,t),u=await w(e,`(window.__sootsimLastTransformedBundle?.text || "").slice(${o}, ${a})`);if(typeof u!="string")return null;s.push(u)}return s.join("")}async function Ge(e,t){(e.includes("--help")||e.includes("-h"))&&(xe(),process.exit(0));let r=[...e],s=await Ie(U(r,"--origin")),o=Se(s,U(r,"--public-origin")),a=U(r,"--events"),u=U(r,"--video"),y=U(r,"--video-duration-ms"),p=re(r,"--open"),P=re(r,"--assets-only"),B=q(r,{stripBooleanFlags:[],stripValueFlags:[]}),m=Y(B),l,C=[],g=[],z=null;try{if(l=await w(m,'(typeof window.__sootsimCaptureBundle === "function") ? window.__sootsimCaptureBundle() : null'),l?.bundleUrl){let n=new URL(l.bundleUrl).origin;C=(await w(m,`(window.__sootsimPreviewRecorder?.list?.(${JSON.stringify(n)}) || [])`)).filter(T=>{try{return!new URL(T.url).pathname.startsWith("/api/")}catch{return!0}});let i=await w(m,`(() => {
|
|
37
|
-
const rec = window.__sootsimPreviewRecorder
|
|
38
|
-
if (!rec?.list) return null
|
|
39
|
-
const all = rec.list()
|
|
40
|
-
const cross = all.filter((e) => {
|
|
41
|
-
try { return new URL(e.url).origin !== ${JSON.stringify(n)} } catch { return false }
|
|
42
|
-
})
|
|
43
|
-
return {
|
|
44
|
-
count: cross.length,
|
|
45
|
-
totalBytes: cross.reduce((n, e) => n + (e.size || 0), 0),
|
|
46
|
-
}
|
|
47
|
-
})()`);if(i&&i.count>0&&(console.log(` ${i.count} recorded cross-origin responses (${(i.totalBytes/1024).toFixed(1)} KiB)`),g=await w(m,`(() => {
|
|
48
|
-
const rec = window.__sootsimPreviewRecorder
|
|
49
|
-
if (!rec?.dump) return []
|
|
50
|
-
const bundleUrl = ${JSON.stringify(l.bundleUrl)}
|
|
51
|
-
return rec.dump().filter((r) => {
|
|
52
|
-
try {
|
|
53
|
-
const u = new URL(r.url)
|
|
54
|
-
if (u.origin !== ${JSON.stringify(n)}) return true
|
|
55
|
-
// bundle-origin api responses came from the rewritten
|
|
56
|
-
// /__app-api proxy at record time (re-keyed by the
|
|
57
|
-
// recorder's unwrap step). they need bodies attached the
|
|
58
|
-
// same way as cross-origin records \u2014 direct re-fetch from
|
|
59
|
-
// the dev server lacks the bundle's session cookies.
|
|
60
|
-
if (r.url !== bundleUrl && u.pathname.startsWith('/api/')) return true
|
|
61
|
-
return false
|
|
62
|
-
} catch { return false }
|
|
63
|
-
})
|
|
64
|
-
})()`),P)){let T=g.length;g=g.filter(I=>se(I.contentType));let F=i.totalBytes-g.reduce((I,$)=>I+($.size||0),0);console.log(` --assets-only: kept ${g.length}/${T} records (dropped ${(F/1024).toFixed(1)} KiB of API responses)`)}}l?.transformedBundle&&(z=await $e(m,l.transformedBundle.byteLength))}finally{m.close()}l||(console.error(" could not read bundle snapshot \u2014 is sootsim running and is the bundle loaded?"),process.exit(2)),l.bundleUrl||(console.error(` no ?bundle= URL on the current sootsim tab.
|
|
65
|
-
open the app you want to share first (e.g. sootsim open 8082), then run upload.`),process.exit(2));let c,A=!1;if(z!==null)c=new TextEncoder().encode(z),A=!0,console.log(` using post-transform bundle: ${(c.byteLength/1024).toFixed(1)} KiB`);else{let n=Re(l.bundleUrl);n!==l.bundleUrl&&console.log(" forcing lazy=false for self-contained bundle"),console.log(` capturing: ${n}`),c=await oe(n),console.log(` main bundle: ${(c.byteLength/1024).toFixed(1)} KiB`)}let S=C.filter(n=>n.url!==l.bundleUrl);P&&(S=S.filter(n=>se(n.contentType))),console.log(` fetching ${S.length} extra files\u2026`);let x=(await Promise.all(S.map(async n=>{try{let i=await oe(n.url);return{...n,bytes:i}}catch(i){return console.error(` warning: failed to re-fetch ${n.url}: ${i instanceof Error?i.message:i}`),null}}))).filter(n=>!!n),le=x.reduce((n,i)=>n+i.bytes.byteLength,0);console.log(` ${x.length} extra files: ${(le/1024).toFixed(1)} KiB`);let h;a&&(h=te(a));let f,O,N;if(u){if(f=te(u),O=u.endsWith(".mp4")?"video/mp4":u.endsWith(".gif")?"image/gif":"video/webm",y){let n=Number(y);(!Number.isFinite(n)||n<=0)&&(console.error(` invalid --video-duration-ms: ${y}`),await b(),process.exit(1)),N=Math.round(n)}console.log(` attaching flow video: ${(f.byteLength/1024).toFixed(1)} KiB (${O})`)}let d=Q(),ue=K();D({event:"preview_upload_started",identity:{userId:d?.kind==="session"?ue?.user?.id??null:null,repoId:d?.kind==="github"?d.repoId:null,installationId:d?.kind==="github"?d.installationId??null:null},properties:{origin:s,hasAuth:!!d,authMode:d?.kind??"none",bundleBytes:c.byteLength,isTransformed:A,extraFiles:x.length,recordedFetches:g.length,hasEvents:!!h,hasVideo:!!f}}),d||(console.error(" preview uploads need auth."),console.error(" set SOOTSIM_API_KEY=sk_sootsim_..., run `sootsim login`, or use the soot github runner."),await b(),process.exit(1));let de=X(d),ce=(()=>{try{return new URL(l.bundleUrl).origin}catch{return null}})(),W=(n,i,T,F,I,$,ye)=>{let V=Z($),me=V?ne(n):n;return{url:i,urlhash:T,method:F,bodyHash:I,contentType:$,responseHeaders:ye,bytes:me,encoding:V?"gzip":void 0}},E=[...x.map(n=>W(n.bytes,n.url,n.urlhash,"GET","-",n.contentType,n.responseHeaders)),...g.map(n=>W(Buffer.from(n.bodyBase64,"base64"),n.url,n.urlhash,n.method||"GET",n.bodyHash||"-",n.contentType,n.responseHeaders))],L=ne(c),pe=Te("sha256").update(c).digest("hex");console.log(` bundle raw=${(c.byteLength/1024).toFixed(1)} KiB gz=${(L.byteLength/1024).toFixed(1)} KiB`);let ge={contentHash:pe,bundleSizeBytes:c.byteLength,bundleContentType:Oe(l.bundleUrl),bundleEncoding:"gzip",bundleOrigin:ce,entry:l.entry,isTransformed:A,deviceSpec:l.deviceSpec,installationId:d.kind==="github"?d.installationId??void 0:void 0,repoId:d.kind==="github"?d.repoId:void 0,files:E.map(n=>({url:n.url,urlhash:n.urlhash,method:n.method,bodyHash:n.bodyHash,contentType:n.contentType,responseHeaders:n.responseHeaders,encoding:n.encoding,sizeBytes:n.bytes.byteLength})),events:h?{sizeBytes:h.byteLength}:void 0,flowVideo:f&&O?{sizeBytes:f.byteLength,contentType:O,durationMs:N}:void 0},j=new Map;for(let n of E)j.set(n.urlhash,n.bytes);let fe=Date.now(),R=L.byteLength;for(let n of E)R+=n.bytes.byteLength;h&&(R+=h.byteLength),f&&(R+=f.byteLength);let he=`${v(s)}/api/preview/upload/init`;console.log(` init: ${he}`);let k;try{let n=await ee({originBase:s,initBody:ge,bundleBytes:L,filesByHash:j,extras:{eventsBytes:h,videoBytes:f},authHeader:de,concurrency:16});k=n.finalize;let i=1+n.init.files.length+(n.init.events?1:0)+(n.init.flowVideo?1:0);console.log(` PUT ${i} objects in ${Date.now()-fe}ms (${(R/1024).toFixed(1)} KiB)`)}catch(n){let i=n;i.phase==="init"&&i.status===401&&(console.error(" preview upload requires a valid login."),console.error(" run `sootsim login` and retry."),i.message&&console.error(` ${i.message}`),await b(),process.exit(1)),console.error(` ${i.phase??"upload"} failed: ${i.message??String(n)}`),await b(),process.exit(1)}let G=`${o}${k.url}`;console.log(`
|
|
66
|
-
stored ${k.filesStored??0} extra files`),console.log(` preview: ${G}`),p&&await J(G),await b()}export{Ie as a,Se as b,Ge as c};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a as D,b as j,c as re}from"./chunk-OHI4DJSD.js";import{b as L}from"./chunk-PEXPACO5.js";import{g as ie}from"./chunk-FCFKR7EM.js";import{a as k,b as W}from"./chunk-XU27QCRX.js";import{c as se}from"./chunk-XKNZR4BB.js";import{d as oe}from"./chunk-4OPZYTVB.js";import{a as Z}from"./chunk-T4H37KU7.js";import{b as ne,c as x,d as y,e as P}from"./chunk-DGAHFMAU.js";import{c as I,d as g,e as E}from"./chunk-WWEMLI77.js";import{E as ee,F as te}from"./chunk-M5HZVUQQ.js";import xe from"node:fs";import Pe from"node:os";import Q from"node:path";function he(t){return t.replace(/^\[|\]$/g,"").toLowerCase()}function A(t){let o=he(t);return o==="localhost"||o.endsWith(".localhost")||o==="0.0.0.0"||o==="::1"||/^127(?:\.\d{1,3}){3}$/.test(o)}function ae(t){return new Error(`could not resolve a native bundle for ${t}. pass an explicit bundle URL or open Connect and choose the app there.`)}function we(t,o){return t?.includes("/one/metro-entry.bundle")?"one":typeof o=="string"&&o?"expo":"unknown"}function le(t,o,e){return`${t}//${o}:${e}`}function be(t){if(typeof window>"u")return!1;try{let o=new URL(t);return A(o.hostname)&&A(window.location.hostname)&&o.origin!==window.location.origin}catch{return!1}}async function ce(t,o){let e={...o,cache:o?.cache??"no-store"};return be(t)?fetch(`/__fetch-proxy?url=${encodeURIComponent(t)}`,e):fetch(t,e)}function ye(t){return t==="https:"?443:80}function Se(t){let o=t.pathname||"/";return(o==="/"||o==="")&&!t.search&&!t.hash}async function me(t,o){let e=t.replace(/\/+$/,"");try{let n=await ce(`${e}/`,{headers:{"expo-platform":"ios"}});if(n.ok){let r=await n.json(),i=r?.extra?.expoClient||r?.extra||{},s=typeof r?.launchAsset?.url=="string"?r.launchAsset.url:void 0;if(s||i.name)return{bundleUrl:re(s||`${e}${j}`),port:o,framework:we(s,i.sdkVersion),projectName:i.name}}}catch{}try{let n=await ce(`${e}/status`);if(n.ok&&(await n.text()).includes("packager-status:running"))return{bundleUrl:`${e}${j}`,port:o,framework:"metro"}}catch{}return null}async function $e(t){return me(le("http:","localhost",t),t)}async function G(t){let o=t.trim();if(/^\d+$/.test(o)){let a=parseInt(o,10),l=await $e(a);if(l)return l;throw ae(`localhost:${a}`)}let e=o.startsWith("http")?o:`http://${o}`,n;try{n=new URL(e)}catch{throw new Error(`could not parse "${t}". pass a dev-server port, a dev-server base URL, or a full bundle URL.`)}let r=n.protocol||"http:",i=n.port?parseInt(n.port,10):ye(r),s=le(r,n.hostname,i);if(A(n.hostname)&&Se(n)){let a=await me(s,i);if(a)return a;throw ae(s)}return{bundleUrl:n.toString(),port:i,framework:"unknown"}}function We(){console.error(" no sootsim desktop companion found."),console.error(""),console.error(" install the desktop app:"),console.error(" sootsim install-desktop"),console.error(""),console.error(" or wire sootsim into your own project so your dev server hosts the bridge:"),console.error(" sootsim setup-repo"),console.error("")}function de(t){let o=k();if(console.log(` note: no sootsim bridge detected on port ${t}`),o){console.log(" launch the installed companion with:"),console.log(" sootsim electron");return}console.log(""),console.log(" to get a bridge running, either:"),console.log(" sootsim install-desktop # download the electron app"),console.log(" sootsim setup-repo # wire sootsim into your own project")}function ve(t){console.error(""),console.error(` no sim is connected to the sootsim bridge on port ${t}.`),console.error(""),console.error(" start your app dev server, then open it in sootsim:"),console.error(" npx expo start --localhost --port 8081"),console.error(" sootsim open 8081"),console.error(""),console.error(" then inspect the live app:"),console.error(" sootsim describe")}async function Ge(t,o,e){let n=[];try{n=await t.listSims()}catch{}if(console.error(""),n.length===0){ve(o);return}console.error(` no sim with id "${e}" is connected to the bridge on port ${o}.`),console.error(""),console.error(" connected sims:");for(let r of n){let i=[r.isPrimary?"primary":null,r.readyState].filter(Boolean).join(", ");console.error(` ${r.id} (${i})`)}console.error(""),console.error(" pass a valid --sim id, or run `sootsim list` to see all sessions.")}var Ce={rn:"/rn",connectrn:"/rn","connect-rn":"/rn",clock:"/app/clock","native-ui":"/app/native-ui",tamagui:"/app/tamagui",settings:"/app/settings",photos:"/app/photos",camera:"/app/camera"};function C(t){return new Promise(o=>setTimeout(o,t))}function K(t){return t.trim()}function J(t){try{let o=new URL(t),e=o.pathname.replace(/\/+$/,"")||"/";return o.searchParams.has("open")||o.searchParams.has("port")||o.searchParams.has("bundle")||o.searchParams.has("demo")||o.pathname.includes("/sootsim/index.html")||e==="/sootsim"||o.pathname==="/__soot"||o.pathname==="/__soot/"||e==="/rn"||/^\/rn\/[^/]+$/i.test(e)||/^\/app\/[^/]+$/i.test(e)||e==="/__soot/rn"||/^\/__soot\/rn\/[^/]+$/i.test(e)||/^\/__soot\/app\/[^/]+$/i.test(e)}catch{return!1}}async function lt(t){let o=K(t);return(await G(o)).bundleUrl}function V(t){let o=t.replace(/\/+$/,"")||"/";return o==="/__soot"||o.startsWith("/__soot/")?"/__soot":""}function Ie(t,o){let e=K(t),n=new URL(o),r=V(n.pathname);return n.pathname=`${r}/rn`,n.searchParams.delete("bundle"),n.searchParams.delete("demo"),n.searchParams.delete("app"),n.searchParams.delete("open"),n.searchParams.delete("port"),/^\d+$/.test(e)?n.pathname=`${r}/rn/${e}`:(n.pathname=`${r}/rn`,n.searchParams.set("open",e)),n.toString()}function ke(t){let o=K(t);return/^\d+$/.test(o)||/^https?:\/\//i.test(o)?!0:/^(localhost|127\.0\.0\.1|\[::1\]|[^/]+\.localhost):\d+(?:\/.*)?$/i.test(o)}async function Te(t,o){let e=await G(t),n=new URL(o),r=V(n.pathname);return n.pathname=`${r}/rn`,n.searchParams.delete("open"),n.searchParams.delete("port"),n.searchParams.delete("demo"),n.searchParams.delete("app"),n.searchParams.set("bundle",e.bundleUrl),n.toString()}function Ue(t){return t.startsWith("~/")?Q.join(Pe.homedir(),t.slice(2)):Q.isAbsolute(t)?t:Q.resolve(process.cwd(),t)}function Me(t){let o={};for(let e=0;e<t.length;e++){if(t[e]!=="--replace")continue;let n=t[e+1];n||(console.error(" sootsim open: --replace expects <module>=<file>"),process.exit(1));let r=n.indexOf("=");(r<=0||r===n.length-1)&&(console.error(" sootsim open: --replace expects <module>=<file>"),process.exit(1));let i=n.slice(0,r).trim(),s=Ue(n.slice(r+1).trim());xe.existsSync(s)||(console.error(` sootsim open: replacement file not found: ${s}`),process.exit(1)),o[i]={file:s},e++}return Object.keys(o).length>0?{modules:o}:void 0}function pe(){let t=ee();return te(t)&&t.runtimePort>0?`http://localhost:${t.runtimePort}/`:Z}async function F(t,o=pe()){if(!t)return new URL(o).toString();if(J(t))return new URL(t).toString();let e=Ce[t.toLowerCase()];if(e){let n=new URL(o),r=V(n.pathname);return n.pathname=`${r}${e}`,n.toString()}return ke(t)?Te(t,o):Ie(t,o)}function ue(t,o){let e=t?.url||t?.origin||o;try{let n=new URL(e);return n.searchParams.delete("bundle"),n.searchParams.delete("demo"),n.searchParams.delete("app"),n.searchParams.delete("open"),n.searchParams.delete("port"),n.searchParams.delete("inspectOpen"),n.toString()}catch{return o}}async function Be(t,o,e){let n=new URL(await F(t,o));return n.searchParams.set("inspectOpen",e),n.toString()}async function Oe(t,o,e,n={}){let r=n.attempts??30,i=n.intervalMs??500,s=n.minNodeCount??10;for(let a=0;a<r;a++){let l=y(t,{commandTimeoutMs:o,simId:e,simIdSource:"flag"});try{let c=await l.send({type:"evaluate",code:"(async () => (await window.__sootsimTest?.getNodeCount()) || 0)()"});if(typeof c=="number"&&c>s)return{bridge:l,count:c}}catch{}l.close(),await C(i)}return null}function _e(t){if(!t)return null;try{let o=new URL(t);if(o.searchParams.has("bundle")){let e=o.searchParams.get("bundle")||"";try{let n=new URL(e),r=n.pathname.length>36?`...${n.pathname.slice(-36)}`:n.pathname;return`bundle ${n.host}${r}`}catch{return"bundle"}}return o.searchParams.has("port")?`connect :${o.searchParams.get("port")||""}`:o.searchParams.has("open")?`connect ${o.searchParams.get("open")||""}`:o.searchParams.has("demo")?`demo ${o.searchParams.get("demo")||"default"}`:o.pathname.includes("/sootsim/index.html")||o.pathname==="/sootsim/"||o.pathname==="/sootsim"?"embedded sootsim":null}catch{return null}}function Re(t,o){if(t.length===0){console.log(" no sims connected");return}console.log(` connected sims (${t.length}):
|
|
3
|
-
`);for(let e of t){let n=e.lockedBy&&e.lockExpiresAt?`locked by ${e.lockedBy} (${Math.max(0,Math.round((e.lockExpiresAt-Date.now())/1e3))}s)`:"",r=[e.isPrimary?"primary":"",e.id===o?"selected":"",e.readyState,e.attachedCliCount&&e.attachedCliCount>0?"in use":"",e.userFocused?"focused":"",n].filter(Boolean);console.log(` ${e.id}${r.length?` [${r.join(", ")}]`:""}`);let i=_e(e.url);if(i&&console.log(` loaded: ${i}`),e.url?console.log(` url: ${e.url}`):e.origin&&console.log(` origin: ${e.origin}`),e.title&&console.log(` title: ${e.title}`),console.log(` connected: ${new Date(e.connectedAt).toISOString()}`),e.lastActiveAt&&e.lastActiveAt>0){let s=Math.round((Date.now()-e.lastActiveAt)/1e3),a=s<60?`${s}s ago`:s<3600?`${Math.round(s/60)}m ago`:`${Math.round(s/3600)}h ago`;console.log(` last active: ${a}`)}}}async function N(t,o,e,n={}){let r=n.attempts??30,i=n.intervalMs??500;for(let s=0;s<r;s++){let a=y(t,{commandTimeoutMs:o});try{let c=(await a.listSims()).find(e);if(c)return c}catch{}finally{a.close()}await C(i)}return null}async function Ee(t,o,e,n={}){let r=n.attempts??20,i=n.intervalMs??250;for(let s=0;s<r;s++){let a=y(t,{commandTimeoutMs:o});try{let c=(await a.listSims()).find(f=>f.id===e);if(!c||c.readyState!=="open")return!0}catch{return!0}finally{a.close()}await C(i)}return!1}function M(t,o){if(o){let r=o.trim(),i=t.find(s=>s.id===r);if(!i)throw new Error(`no sim connected with id ${r}`);return i}let e=t.find(r=>r.isPrimary&&r.readyState==="open");if(e)return e;let n=t.find(r=>r.readyState==="open");if(n)return n;throw new Error("no sim connected")}function T(t,o,e){console.log(` ${e==="current sim"?"loaded":"opened"}: ${t} [${e}]`),console.log(` current sim: ${o.id}`),console.log(JSON.stringify({simId:o.id,url:o.url},null,2))}async function U(t,o,e){if(e.includes("--no-describe"))return;let n=process.env.SOOTSIM_QUIET_TARGET_NOTICE;process.env.SOOTSIM_QUIET_TARGET_NOTICE="1";try{await Le(t,o,{stableMs:150,maxMs:400});let r=y(t,{commandTimeoutMs:3e3,simId:o,cliLabel:"open --describe",simIdSource:"flag"});try{let s=`(async () => {
|
|
4
|
-
const t = window.__sootsimTest
|
|
5
|
-
const ms = window.SootSim?.bridges?.mainShell
|
|
6
|
-
if (!t) return null
|
|
7
|
-
let shell = null
|
|
8
|
-
try { shell = ms?.getState ? await ms.getState() : null } catch {}
|
|
9
|
-
const tree = await t.dumpTree(12, ${JSON.stringify({describe:!0,verbose:!1,filter:""})})
|
|
10
|
-
return { tree, shell }
|
|
11
|
-
})()`,a=await r.send({type:"evaluate",code:s});if(!a?.tree)return;if(console.log(""),a.shell?.state){let l=[`state=${a.shell.state}`,a.shell.activeApp?`app=${a.shell.activeApp}`:null].filter(Boolean);console.log(` shell: ${l.join(" ")}`)}console.log(a.tree)}finally{r.close()}}catch{}finally{n===void 0?delete process.env.SOOTSIM_QUIET_TARGET_NOTICE:process.env.SOOTSIM_QUIET_TARGET_NOTICE=n}}async function Le(t,o,e){let n=Date.now()+e.maxMs,r="(async () => (await window.__sootsimTest?.getNodeCount?.()) || 0)()",i=y(t,{commandTimeoutMs:2e3,simId:o,simIdSource:"flag"});try{let s=-1,a=0;for(;Date.now()<n;){let l=-1;try{let c=await i.send({type:"evaluate",code:r});typeof c=="number"&&(l=c)}catch{}if(l>=0&&l===s){if(Date.now()-a>=e.stableMs)return}else s=l,a=Date.now();await C(50)}}finally{i.close()}}async function mt(t,o={}){let e=x(t,{port:o.port,commandTimeoutMs:o.timeoutMs}),n=P(e);try{let r=await n.listSims();Re(r,e.simId)}finally{n.close()}}async function dt(t,o={}){let e=x(t,{port:o.port,commandTimeoutMs:o.timeoutMs,stripBooleanFlags:["--new","--headless","--ephemeral"],stripValueFlags:["--base-url","--replace","--driver","--profile"]}),n=t.find((m,d)=>t[d-1]==="--profile"),r=t.includes("--ephemeral");n&&r&&(console.error(" sootsim open: --profile cannot be combined with --ephemeral"),process.exit(1));let i=n?se(n).id:void 0,s=!!i||r,a=t.includes("--new")||s,l=Me(t);a&&e.simIdSource==="flag"&&(console.error(" sootsim open: --new, --profile, and --ephemeral cannot be combined with --sim"),process.exit(1));let c=e.positional[0]||"",f=t.find((m,d)=>t[d-1]==="--driver")||"",h=t.includes("--headless"),S=t.find((m,d)=>t[d-1]==="--base-url")||pe(),B=t.includes("--base-url"),$=I();if(!a&&(e.simIdSource==="flag"||e.simIdSource==="saved"&&!!$)){let m=P(e),d=e.simId?` --sim ${e.simId}`:"",u=!1;try{let p=null;try{let b=await m.listSims();if(e.simIdSource==="saved"?(p=b.find(v=>v.id===$&&v.readyState==="open")??null,p||E()):p=M(b,e.simId),!p)if(e.simIdSource==="saved")u=!0;else throw new Error("no sim connected");if(!u&&p){let v=B||J(c)?S:ue(p,S),R=await F(c,D(v,l));m.send({type:"evaluate",simId:p.id,code:`window.location.href = ${JSON.stringify(R)}`}).catch(()=>{})}}catch(b){console.error(` open failed: ${b instanceof Error?b.message:String(b)}`),await L(m,{errorsCommand:`sootsim get errors 5${d}`,warningsCommand:`sootsim get warnings 5${d}`,requestsCommand:`sootsim get requests 5${d}`}),process.exit(1)}if(!u&&p){await C(1500);let b=await Oe(e.wsPort,e.commandTimeoutMs,p.id);b||(console.error(" timed out waiting for current sim to load target"),process.exit(1)),b.bridge.close(),g(p.id);let v=B||J(c)?S:ue(p,S),R=await F(c,D(v,l));T(R,{...p,url:R},"current sim"),await U(e.wsPort,p.id,t);return}}finally{m.close()}}let X=D(S,l),ge=await F(c,X),Y=`cli-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,w=await Be(c,X,Y),H={newWindow:!0},O=m=>m.url?.includes(`inspectOpen=${Y}`)??!1;if(f){let m=ie(f);m||(console.error(` unknown driver "${f}" \u2014 run \`sootsim list --drivers\``),process.exit(1));let d=await m.launch({url:w,headless:h,newWindow:H.newWindow,profileId:i,ephemeralProfile:r});d.launched||(console.error(` ${m.name} driver: ${d.message}`),process.exit(1));let u=await N(e.wsPort,e.commandTimeoutMs,O,{attempts:60,intervalMs:500});u||(console.error(" timed out waiting for opened sim to connect"),process.exit(1)),g(u.id),T(w,u,`${m.name} driver`),await U(e.wsPort,u.id,t);return}if(s){let m=k();m||(console.error(" profiles require electron or playwright; install the desktop companion or use `--driver playwright`"),process.exit(1));try{(await W(w,m,{profileId:i,ephemeralProfile:r})).launched||(console.error(" desktop companion failed to start"),process.exit(1))}catch(u){console.error(` desktop companion failed: ${u instanceof Error?u.message:String(u)}`),process.exit(1)}let d=await N(e.wsPort,e.commandTimeoutMs,O,{attempts:40,intervalMs:500});d||(console.error(" timed out waiting for profiled sim to connect"),process.exit(1)),g(d.id),T(w,d,"desktop companion"),await U(e.wsPort,d.id,t);return}let z=!1,q=!1;try{let m=y(e.wsPort,{commandTimeoutMs:2e3});try{await m.listSims(),z=!0}finally{m.close()}}catch{}if(z)try{let m=y(e.wsPort,{commandTimeoutMs:3e3});try{await m.openUrl(w,H),q=!0}finally{m.close()}}catch{}if(!q){let m=k();if(m)try{if((await W(w,m)).launched){let u=await N(e.wsPort,e.commandTimeoutMs,O,{attempts:20,intervalMs:500});if(u){g(u.id),T(w,u,"desktop companion"),await U(e.wsPort,u.id,t);return}}}catch{}if(await oe(w,H),!z){console.log(` opened: ${ge}`),de(e.wsPort);return}}let _=await N(e.wsPort,e.commandTimeoutMs,O,{attempts:30,intervalMs:500});_||(console.error(" timed out waiting for opened sim to connect"),process.exit(1)),g(_.id),T(w,_,q?"bridge":"direct shell open"),await U(e.wsPort,_.id,t)}async function fe(t,o={}){let e=x(t,{port:o.port,commandTimeoutMs:o.timeoutMs}),n=P(e),r=e.simId?` --sim ${e.simId}`:"";try{try{let i=await n.listSims(),s=M(i,e.positional[0]||e.simId);await n.focusSim(s.id),g(s.id),console.log(` using: ${s.id}`)}catch(i){console.error(` use failed: ${i instanceof Error?i.message:String(i)}`),await L(n,{errorsCommand:`sootsim get errors 5${r}`,warningsCommand:`sootsim get warnings 5${r}`,requestsCommand:`sootsim get requests 5${r}`}),process.exit(1)}}finally{n.close()}}async function ut(t,o={}){await fe(t,o)}async function pt(t,o={}){await fe(t,o)}async function ft(t,o={}){let e=x(t,{port:o.port,commandTimeoutMs:o.timeoutMs,stripBooleanFlags:["--force"]}),n=t.includes("--force"),r=P(e);try{try{let i=await r.listSims(),s=M(i,e.positional[0]||e.simId),a=n&&s.lockedBy&&s.lockedByKind!=="user-active"?s.lockedBy:null,l=await r.claim(s.id,{force:n});g(s.id);let c=Math.max(0,Math.round((l.lockExpiresAt-Date.now())/1e3)),f=l.bootedCount>0?` (booted ${l.bootedCount})`:"";console.log(` claimed: ${l.simId} [${c}s]${f}`),a&&console.log(` took over from: ${a}`)}catch(i){if(i instanceof ne){let s=Math.max(0,Math.round(i.lock.expiresInMs/1e3));console.error(` claim failed: locked by ${i.lock.by} for ${s}s more`),console.error(" use --force to take it, or `sootsim open --new` for a fresh sim"),process.exit(1)}console.error(` claim failed: ${i instanceof Error?i.message:String(i)}`),process.exit(1)}}finally{r.close()}}async function De(t,o,e,n){if(n.length===0)return{closed:[],remaining:[]};await Promise.all(n.map(i=>t.closeSim(i).catch(()=>{})));let r=new Set(n);for(let i=0;i<40;i++){let s=[];try{let a=y(o,{commandTimeoutMs:e});try{s=(await a.listSims()).filter(c=>r.has(c.id)&&c.readyState==="open").map(c=>c.id)}finally{a.close()}}catch{s=[]}if(s.length===0)return{closed:[...r],remaining:[]};if(i===39)return{closed:[...r].filter(a=>!s.includes(a)),remaining:s};await C(250)}return{closed:[...r],remaining:[]}}async function gt(t,o={}){let e=x(t,{port:o.port,commandTimeoutMs:o.timeoutMs,stripBooleanFlags:["--all","--others"]}),n=P(e),r=e.simId?` --sim ${e.simId}`:"",i=t.includes("--all"),s=t.includes("--others");if(i||s){try{let a=await n.listSims(),l=a.filter($=>$.readyState==="open"),c=null;if(s)try{c=M(a,e.positional[0]||e.simId||I()||void 0).id}catch{c=null}let f=l.map($=>$.id).filter($=>$!==c);if(f.length===0){console.log(c?` nothing to close \u2014 only the kept sim ${c} is connected`:" nothing to close \u2014 no sims connected");return}let h=await De(n,e.wsPort,e.commandTimeoutMs,f),S=I();S&&h.closed.includes(S)&&(c?g(c):E());let B=` closed ${h.closed.length} sim(s)${c?` (kept ${c})`:""}`;console.log(B),h.remaining.length>0&&console.log(` still connected: ${h.remaining.join(", ")}`)}catch(a){console.error(` close failed: ${a instanceof Error?a.message:String(a)}`),process.exit(1)}finally{n.close()}return}try{try{let a=await n.listSims(),l=M(a,e.positional[0]||e.simId),c=a.find(h=>h.id!==l.id&&h.readyState==="open");if(await n.closeSim(l.id),!await Ee(e.wsPort,e.commandTimeoutMs,l.id)){console.log(` close requested: ${l.id} (still connected)`);return}I()===l.id&&(c?g(c.id):E()),console.log(` closed: ${l.id}`)}catch(a){console.error(` close failed: ${a instanceof Error?a.message:String(a)}`),await L(n,{errorsCommand:`sootsim get errors 5${r}`,warningsCommand:`sootsim get warnings 5${r}`,requestsCommand:`sootsim get requests 5${r}`}),process.exit(1)}}finally{n.close()}}export{We as a,ve as b,Ge as c,lt as d,pe as e,F as f,Be as g,_e as h,Re as i,N as j,mt as k,dt as l,ut as m,pt as n,ft as o,gt as p};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{d as a,e as b,f as c,g as d,h as e,i as f,j as g,k as h,l as i,m as j,n as k,o as l,p as m}from"./chunk-ZM4JL3VP.js";import"./chunk-OHI4DJSD.js";import"./chunk-PEXPACO5.js";import"./chunk-FCFKR7EM.js";import"./chunk-XU27QCRX.js";import"./chunk-XKNZR4BB.js";import"./chunk-KV7XS7WL.js";import"./chunk-4OPZYTVB.js";import"./chunk-T4H37KU7.js";import"./chunk-DGAHFMAU.js";import"./chunk-WWEMLI77.js";import"./chunk-VWJ4O366.js";import"./chunk-M5HZVUQQ.js";import"./chunk-GWOV6KFE.js";export{d as buildOpenUrl,c as buildShellUrl,f as printConnectedSims,a as resolveBundleTarget,b as resolveDefaultShellBaseUrl,l as runClaimCommand,m as runCloseCommand,k as runFocusCommand,h as runListCommand,i as runOpenCommand,j as runUseCommand,e as summarizeSimUrl,g as waitForSimMatch};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{c as I,e as N,i as S}from"./chunk-DGAHFMAU.js";import"./chunk-WWEMLI77.js";import"./chunk-VWJ4O366.js";import"./chunk-M5HZVUQQ.js";import"./chunk-GWOV6KFE.js";import{createWriteStream as k,mkdirSync as v,writeFileSync as C}from"fs";import{dirname as T,resolve as w}from"path";import{Readable as F}from"stream";import{pipeline as y}from"stream/promises";import{createGzip as x}from"zlib";async function U(o,m){let n=Number(b(o,"--duration")??"5");if(!Number.isFinite(n)||n<=0)return console.error(" --duration must be a positive number (seconds)"),1;let a=Number(b(o,"--sample-interval")??"10");if(!Number.isFinite(a)||a<=0)return console.error(" --sample-interval must be a positive number (milliseconds)"),1;let t=Number(b(o,"--max-buffer")??"100000");if(!Number.isFinite(t)||t<=0)return console.error(" --max-buffer must be a positive number"),1;let p=b(o,"--output")??b(o,"-o"),u=w(process.cwd(),p??"/tmp/sootsim.cpuprofile"),g=u.endsWith(".gz"),h=I(o,{port:m.port,stripValueFlags:["--duration","--output","-o","--sample-interval","--max-buffer"]}),c=N({...h,commandTimeoutMs:Math.max(3e4,(n+20)*1e3)});try{let l=await S(c,"SootSim.bridges.workerCpuProfileStart",{sampleInterval:a,maxBufferSize:t});if(!l?.started)return l?.error?.includes("cpu-profile-unsupported")?(console.error(" cpu-profile is currently unsupported."),console.error(" the JS Self-Profiler API cannot profile a dedicated worker, and"),console.error(" sootsim runs the guest app in the tenant worker. a CDP-based"),console.error(" profiler is required \u2014 tracked as the F28 follow-up.")):(console.error(" could not start tenant-worker profiler."),console.error(" is sootsim running? (try `bun sootsim list`)")),1;m.verbose&&console.error(` started: sampleInterval=${l.sampleInterval}ms buffer=${l.maxBufferSize}`),console.log(` recording for ${n}s\u2026`),await new Promise(r=>setTimeout(r,n*1e3));let s=await S(c,"SootSim.bridges.workerCpuProfileStop");if(!s||s.error||!s.trace)return console.error(` profile capture failed: ${s?.error??"no trace returned"}`),1;let P=B(s.trace),e=JSON.stringify(P);v(T(u),{recursive:!0}),g?await y(F.from([e]),x(),k(u)):C(u,e);let i=(Buffer.byteLength(e)/1024/1024).toFixed(2);return console.log(` samples: ${P.samples.length} (${i} MB uncompressed)`),console.log(` saved: ${u}`),console.log(" open in chrome devtools \u2192 Performance \u2192 Load profile to inspect."),0}catch(l){let s=l?.message??String(l);return console.error(` profile failed: ${s}`),/could not connect|ECONNREFUSED/i.test(s)&&console.error(" is sootsim running? (try `bun sootsim list`)"),1}finally{c.close()}}function B(o){let m=o.frames??[],n=o.resources??[],a=o.stacks??[],t=o.samples??[],p=1,u=[{id:p,callFrame:{functionName:"(root)",scriptId:"0",url:"",lineNumber:-1,columnNumber:-1},hitCount:0,children:[]}];for(let e=0;e<a.length;e++){let i=a[e],r=m[i.frameId]??{name:"(unknown)"},f=r.resource!==void 0?n[r.resource]??"":"";u.push({id:e+2,callFrame:{functionName:r.name||"(anonymous)",scriptId:r.resource!==void 0?String(r.resource):"0",url:f,lineNumber:typeof r.line=="number"?r.line-1:-1,columnNumber:typeof r.column=="number"?r.column-1:-1},hitCount:0,children:[]})}for(let e=0;e<a.length;e++){let i=a[e],r=e+2,f=i.parentId!==void 0?i.parentId+2:p,d=u[f-1];d&&!d.children.includes(r)&&d.children.push(r)}let g=[],h=[],c=t.length>0?t[0].timestamp:0,l=c;for(let e=0;e<t.length;e++){let i=t[e],r=i.stackId!==void 0?i.stackId+2:p;g.push(r);let f=u[r-1];f&&f.hitCount++;let d=e===0?0:i.timestamp-l;h.push(Math.max(0,Math.round(d*1e3))),l=i.timestamp}let s=Math.round(c*1e3),P=t.length>0?Math.round(t[t.length-1].timestamp*1e3):s;return{nodes:u,startTime:s,endTime:P,samples:g,timeDeltas:h}}function b(o,m){let n=o.indexOf(m);if(!(n<0||n===o.length-1))return o[n+1]}export{U as runCpuProfile};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import"./chunk-UH5PKJXT.js";import{a,b,c,d,e,f,g,h,i}from"./chunk-FCFKR7EM.js";import"./chunk-XU27QCRX.js";import"./chunk-XKNZR4BB.js";import"./chunk-KV7XS7WL.js";import"./chunk-4OPZYTVB.js";import"./chunk-M5HZVUQQ.js";import"./chunk-GWOV6KFE.js";export{e as ALL_DRIVERS,i as buildDriverListRows,a as chromiumDriver,b as electronDriver,f as getAllDrivers,g as getDriver,c as playwrightDriver,h as resolveDriver,d as systemDriver};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a,b,c,d}from"./chunk-XSJ4SU63.js";import"./chunk-OZICEBUA.js";import"./chunk-FLJAN5PS.js";import"./chunk-RSMU24BE.js";import"./chunk-Z7J6LG53.js";import"./chunk-SG7ICXM2.js";import"./chunk-ZM4JL3VP.js";import"./chunk-OHI4DJSD.js";import"./chunk-PEXPACO5.js";import"./chunk-FCFKR7EM.js";import"./chunk-XU27QCRX.js";import"./chunk-XKNZR4BB.js";import"./chunk-PG6FUKZX.js";import"./chunk-PKVNCXQD.js";import"./chunk-KETYRULQ.js";import"./chunk-KV7XS7WL.js";import"./chunk-4OPZYTVB.js";import"./chunk-MJD6C3BG.js";import"./chunk-T4H37KU7.js";import"./chunk-MDSET24U.js";import"./chunk-QXJR74QV.js";import"./chunk-DGAHFMAU.js";import"./chunk-WWEMLI77.js";import"./chunk-PAOOYAVI.js";import"./chunk-WRNSX5RR.js";import"./chunk-VWJ4O366.js";import"./chunk-M5HZVUQQ.js";import"./chunk-GWOV6KFE.js";export{b as discoverSootsimUrl,a as parseFlowFile,d as runFlow,c as runFlowPlayback};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a as o}from"./chunk-S4OSFQIC.js";import"./chunk-H46ZLTT5.js";import"./chunk-X7P3CGPY.js";import"./chunk-DGAHFMAU.js";import"./chunk-WWEMLI77.js";import"./chunk-PAOOYAVI.js";import"./chunk-WRNSX5RR.js";import"./chunk-VWJ4O366.js";import"./chunk-M5HZVUQQ.js";import"./chunk-GWOV6KFE.js";async function t(n){console.error(" note: `sootsim install` is now `sootsim setup-repo`. forwarding\u2026\n"),await o(n)}export{t as runInstall};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a}from"./chunk-OMPAUB4V.js";import"./chunk-DGAHFMAU.js";import"./chunk-WWEMLI77.js";import"./chunk-N7DDQ5ZB.js";import"./chunk-VWJ4O366.js";import"./chunk-M5HZVUQQ.js";import"./chunk-GWOV6KFE.js";export{a as runRuntime};
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a as v}from"./chunk-FLJAN5PS.js";import"./chunk-RSMU24BE.js";import{a as x}from"./chunk-7CZ5VL7E.js";import"./chunk-MJD6C3BG.js";import"./chunk-MDSET24U.js";import{f as m}from"./chunk-QXJR74QV.js";import{c as h,d as g,e as w,h as y}from"./chunk-DGAHFMAU.js";import"./chunk-WWEMLI77.js";import"./chunk-VWJ4O366.js";import"./chunk-M5HZVUQQ.js";import"./chunk-GWOV6KFE.js";import{mkdirSync as R,writeFileSync as S}from"fs";import{dirname as _,resolve as B}from"path";async function W(e,o){(e.includes("--help")||e.includes("-h"))&&(console.log(`
|
|
3
|
-
sootsim screenshot \u2014 capture the canvas as a PNG
|
|
4
|
-
|
|
5
|
-
usage:
|
|
6
|
-
sootsim screenshot [output] [options]
|
|
7
|
-
sootsim screenshot [options] --output <path>
|
|
8
|
-
|
|
9
|
-
options:
|
|
10
|
-
--output <path> output file path (default: /tmp/sootsim-inspect.png)
|
|
11
|
-
first positional arg works too: \`screenshot /tmp/x.png\`
|
|
12
|
-
--with-frame wrap the captured screen in a tight device frame
|
|
13
|
-
--no-frame capture the raw screen bitmap (default)
|
|
14
|
-
--no-shell exclude the simulated iOS chrome (status bar, keyboard,
|
|
15
|
-
toasts) \u2014 captures the tenant surfaces only
|
|
16
|
-
--shell-only capture only the shell chrome, no tenant content
|
|
17
|
-
--area x,y,w,h crop to a logical sootsim rect
|
|
18
|
-
--id <testID> crop to a node's bounding box
|
|
19
|
-
--text <text> crop to a node found by text content
|
|
20
|
-
--gallery crawl and capture multiple screens as HTML gallery
|
|
21
|
-
--themes capture light and dark variants
|
|
22
|
-
|
|
23
|
-
examples:
|
|
24
|
-
sootsim screenshot
|
|
25
|
-
sootsim screenshot --with-frame --output framed.png
|
|
26
|
-
sootsim screenshot --area 0,200,393,400 --output hero.png
|
|
27
|
-
sootsim screenshot --id loginButton --output button.png
|
|
28
|
-
`),process.exit(0));let t=G(e);if(t.length>0){for(let{flag:u,suggestion:p}of t)console.error(p?` unknown flag: ${u} (did you mean ${p}?)`:` unknown flag: ${u}`);console.error(" run `sootsim screenshot --help` for the list of supported flags"),process.exit(1)}let r=e.includes("--gallery"),a=e.includes("--themes"),n=M(e),l=L(e);if(r||a)return n&&(console.error(" --with-frame is not supported with --gallery / --themes"),process.exit(1)),b(e,o);n&&e.some(u=>u==="--area"||u==="--id"||u==="--text")&&(console.error(" --with-frame only supports full-screen capture for now"),console.error(" remove --area / --id / --text, or capture raw and compose later"),process.exit(1));let s=h(e,{port:o.port,stripBooleanFlags:["--with-frame","--no-frame","--no-shell","--shell-only"],stripValueFlags:["--output","--area","--id","--text"]}),i=$(e),c=await P(e);if(await O(s.wsPort)){await T(s,i,c,n,l);return}n&&(console.error(" --with-frame requires a running sootsim bridge"),console.error(" open the app in a live sim first, then rerun the command"),process.exit(1)),c&&(console.error(" --area / --id / --text require a running sootsim bridge"),console.error(" start one with `sootsim server`, `sootsim electron`, or your project dev server"),process.exit(1)),await b(e,o)}async function O(e){let o=g(e,{commandTimeoutMs:1e3});try{return await o.listSims(),!0}catch{return!1}finally{o.close()}}async function P(e){let o=e.find((a,n)=>e[n-1]==="--area");if(o){let a=o.split(",").map(c=>Number(c.trim()));if(a.length!==4||a.some(c=>!Number.isFinite(c)))throw new Error(`--area expects x,y,w,h (got "${o}")`);let[n,l,s,i]=a;return{x:n,y:l,w:s,h:i}}let t=e.find((a,n)=>e[n-1]==="--id"),r=e.find((a,n)=>e[n-1]==="--text");return t||r?{__matcher:{id:t,text:r}}:null}async function T(e,o,t,r,a){let n=w({...e,commandTimeoutMs:1e4});try{let l=t,s=t?.__matcher;if(s){let d=await n.send({type:"evaluate",code:x(s)});if(!d)throw new Error(s.id?`no node with id "${s.id}"`:`no node matching text "${s.text}"`);l=d}let i=l?{x:l.x,y:l.y,w:l.w,h:l.h}:void 0,c={type:"screenshot"};a&&(c.layers=a),i&&(c.crop=i);let u=(await n.send(c)).replace(/^data:image\/png;base64,/,"");i&&console.log(` area: x=${i.x} y=${i.y} w=${i.w} h=${i.h}`),a&&console.log(` layers: ${a}`);let p=B(process.cwd(),o||"/tmp/sootsim-inspect.png");R(_(p),{recursive:!0});let f=Buffer.from(u,"base64");if(r){let d=await k(n);if(!d)throw new Error("could not read current device model from the target sim");let A=await v(f,d);S(p,A),console.log(` frame: ${d}`)}else S(p,f);console.log(` saved: ${p}`)}finally{n.close()}}async function k(e){let o=await y(e,"SootSim.bridges.settings.get")??{deviceModel:null},t=typeof o.deviceModel=="string"?o.deviceModel:null;return!t||!(t in m)?null:t}function M(e){let o=!1;for(let t of e)t==="--with-frame"&&(o=!0),t==="--no-frame"&&(o=!1);return o}function L(e){if(e.includes("--shell-only"))return"shell";if(e.includes("--no-shell"))return"tenant"}var N=new Set(["--help","-h","--verbose","-v","--with-frame","--no-frame","--no-shell","--shell-only","--gallery","--themes"]),F=new Set(["--output","--area","--id","--text","--url","--port","--timeout","--sim"]),D={"--rect":"--area","--crop":"--area","--region":"--area","--bounds":"--area","--box":"--area","--xywh":"--area","--out":"--output","-o":"--output","--file":"--output","--path":"--output","--testid":"--id","--test-id":"--id","--test_id":"--id"};function G(e){let o=[];for(let t=0;t<e.length;t++){let r=e[t];if(r.startsWith("-")){if(F.has(r)){t++;continue}N.has(r)||o.push({flag:r,suggestion:D[r]})}}return o}function $(e){let o=e.find((t,r)=>e[r-1]==="--output");if(o)return o;for(let t=0;t<e.length;t++){let r=e[t];if(r.startsWith("-")){F.has(r)&&t++;continue}return r}}async function b(e,o){let t=$(e)||"sootsim-screenshot.png",r=e.includes("--gallery"),a=e.find((s,i)=>e[i-1]==="--url")||`http://localhost:${o.port||5173}`,{chromium:n}=await import("playwright"),l=await n.launch({headless:!0});try{if(r)console.log(" capturing gallery..."),console.log(" (gallery mode not yet implemented)");else{let s=await l.newPage({viewport:{width:500,height:900}});await s.goto(a,{waitUntil:"networkidle"}),await s.waitForTimeout(2e3);let i=B(process.cwd(),t);R(_(i),{recursive:!0}),await s.screenshot({path:i}),console.log(` saved: ${i}`),await s.close()}}catch(s){console.error(` screenshot failed: ${s.message}`),process.exit(1)}finally{await l.close()}}export{W as runScreenshot};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a}from"./chunk-S4OSFQIC.js";import"./chunk-H46ZLTT5.js";import"./chunk-X7P3CGPY.js";import"./chunk-DGAHFMAU.js";import"./chunk-WWEMLI77.js";import"./chunk-PAOOYAVI.js";import"./chunk-WRNSX5RR.js";import"./chunk-VWJ4O366.js";import"./chunk-M5HZVUQQ.js";import"./chunk-GWOV6KFE.js";export{a as runSetupRepo};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.46 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a,b,c}from"./chunk-PKVNCXQD.js";import"./chunk-KETYRULQ.js";import"./chunk-KV7XS7WL.js";import"./chunk-4OPZYTVB.js";import"./chunk-DGAHFMAU.js";import"./chunk-WWEMLI77.js";import"./chunk-PAOOYAVI.js";import"./chunk-WRNSX5RR.js";import"./chunk-VWJ4O366.js";import"./chunk-M5HZVUQQ.js";import"./chunk-GWOV6KFE.js";export{a as resolveDefaultUploadOrigin,b as resolvePublicPreviewOrigin,c as runUpload};
|