sootsim 0.1.169 → 0.1.170
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/README.md +66 -63
- package/detox/index.ts +3 -3
- package/dist-cli/bin.js +3 -3
- package/dist-cli/chunks/agent-3C2BKQKX.js +46 -0
- package/dist-cli/chunks/{agent-wrapper-Y5FQA3RL.js → agent-wrapper-OIKCYOXZ.js} +2 -2
- package/dist-cli/chunks/{app-fonts-FYVA4XV6.js → app-fonts-25O32NAP.js} +2 -2
- package/dist-cli/chunks/{assert-U64QBDM2.js → assert-ONEP4NQU.js} +2 -2
- package/dist-cli/chunks/beta-4E5USTEI.js +2 -0
- package/dist-cli/chunks/{camera-3GXBVIAM.js → camera-RORW4MAA.js} +2 -2
- package/dist-cli/chunks/{chunk-5C6BR24W.js → chunk-25RFZ6WP.js} +6 -6
- package/dist-cli/chunks/chunk-35GMFXVJ.js +2 -0
- package/dist-cli/chunks/{chunk-GLRFKYDV.js → chunk-3TM7DHWE.js} +2 -2
- package/dist-cli/chunks/{chunk-4F3BBP7B.js → chunk-4XVY5TUF.js} +2 -2
- package/dist-cli/chunks/{chunk-LZEL2RU3.js → chunk-5ZHUPPS5.js} +1 -1
- package/dist-cli/chunks/{chunk-GC4THE6K.js → chunk-6FAEORJ2.js} +2 -2
- package/dist-cli/chunks/{chunk-G2ZFDIPK.js → chunk-6TSXXN2W.js} +4 -4
- package/dist-cli/chunks/chunk-AJF3QF4K.js +1 -0
- package/dist-cli/chunks/{chunk-FIDPRJYH.js → chunk-AUCNBB6Q.js} +2 -2
- package/dist-cli/chunks/{chunk-SIB6I72P.js → chunk-BP3EGFER.js} +2 -2
- package/dist-cli/chunks/{chunk-OGLWXPVG.js → chunk-DAXME77O.js} +3 -3
- package/dist-cli/chunks/chunk-DGJTEFE7.js +13 -0
- package/dist-cli/chunks/chunk-DIRDEKRW.js +23 -0
- package/dist-cli/chunks/{chunk-3L4NRJ6C.js → chunk-DKTC53HV.js} +1 -1
- package/dist-cli/chunks/{chunk-KUUFY6FC.js → chunk-DWXC25XG.js} +1 -1
- package/dist-cli/chunks/{chunk-CR6DOLUD.js → chunk-E3FKMY5E.js} +1 -1
- package/dist-cli/chunks/chunk-ER4GBJRY.js +2 -0
- package/dist-cli/chunks/chunk-EX6V4ZV6.js +6 -0
- package/dist-cli/chunks/{chunk-VMYMPL6H.js → chunk-GQH3PD3W.js} +5 -5
- package/dist-cli/chunks/{chunk-MVOHANJG.js → chunk-GST4YSBO.js} +4 -4
- package/dist-cli/chunks/{chunk-BIWJE7CB.js → chunk-I4RV5I6V.js} +1 -1
- package/dist-cli/chunks/{chunk-Y6IDAARY.js → chunk-I5WXVKR6.js} +1 -1
- package/dist-cli/chunks/{chunk-HC72ILJK.js → chunk-IO7KAVFK.js} +2 -2
- package/dist-cli/chunks/{chunk-XEH4QGWB.js → chunk-LMX7UB5T.js} +2 -2
- package/dist-cli/chunks/{chunk-YADWU7OZ.js → chunk-N4YCSOCR.js} +2 -2
- package/dist-cli/chunks/{chunk-IODOTOOP.js → chunk-NI3L4A65.js} +2 -2
- package/dist-cli/chunks/{chunk-IACEJQIO.js → chunk-ODGEH6OW.js} +2 -2
- package/dist-cli/chunks/{chunk-DNA6VS6M.js → chunk-Q4NDYO2U.js} +1 -1
- package/dist-cli/chunks/{chunk-PV6MBKKE.js → chunk-QPRF3UYX.js} +2 -2
- package/dist-cli/chunks/{chunk-M2TMFGZH.js → chunk-QXJMXSQP.js} +1 -1
- package/dist-cli/chunks/chunk-RLKSLUNR.js +2 -0
- package/dist-cli/chunks/{chunk-WZG3YVJR.js → chunk-S244IT4W.js} +1 -1
- package/dist-cli/chunks/chunk-SDHOM6ZG.js +62 -0
- package/dist-cli/chunks/{chunk-B7BMSU7H.js → chunk-TXKOJ3P5.js} +1 -1
- package/dist-cli/chunks/{chunk-IBEMMV5E.js → chunk-UDMJSFSH.js} +8 -8
- package/dist-cli/chunks/{chunk-DQZEN256.js → chunk-ULV4PWN4.js} +1 -1
- package/dist-cli/chunks/{chunk-2TYEWVS4.js → chunk-V4HTQPMA.js} +1 -1
- package/dist-cli/chunks/chunk-VATHADSI.js +2 -0
- package/dist-cli/chunks/{chunk-5Q7IHJ7K.js → chunk-VUOCUCJ2.js} +2 -2
- package/dist-cli/chunks/{chunk-JDGLBW64.js → chunk-WN7R4GL4.js} +1 -1
- package/dist-cli/chunks/chunk-XOTJD6PU.js +118 -0
- package/dist-cli/chunks/chunk-XUNPVF5K.js +1 -0
- package/dist-cli/chunks/{chunk-KZIXAYN5.js → chunk-YMFSRCHL.js} +4 -4
- package/dist-cli/chunks/{chunk-X2HNVXNM.js → chunk-YV74D4MG.js} +2 -2
- package/dist-cli/chunks/{chunk-SNX3M4XD.js → chunk-YVTWSC5Y.js} +3 -3
- package/dist-cli/chunks/cli-version-EKKWCHRX.js +2 -0
- package/dist-cli/chunks/{compat-ORRWNXVT.js → compat-ZVZM5TML.js} +3 -3
- package/dist-cli/chunks/control-TWINYHMY.js +2 -0
- package/dist-cli/chunks/{cpu-profile-6PRSBZ2F.js → cpu-profile-RWGQTWLP.js} +2 -2
- package/dist-cli/chunks/daemon-AOSMNBD4.js +2 -0
- package/dist-cli/chunks/{debug-Q3J2X4WW.js → debug-R7PL3MHF.js} +5 -5
- package/dist-cli/chunks/{detox-DN57GMMJ.js → detox-UIJMKIGQ.js} +2 -2
- package/dist-cli/chunks/{device-IL5TPYGU.js → device-7SRVX2PU.js} +2 -2
- package/dist-cli/chunks/{diagnose-BW6QWP4F.js → diagnose-OXAKLLZT.js} +2 -2
- package/dist-cli/chunks/drivers-BPPG22VP.js +2 -0
- package/dist-cli/chunks/{electron-DGMSXQWG.js → electron-CTCH4VOL.js} +3 -3
- package/dist-cli/chunks/flow-KA2WCWDL.js +2 -0
- package/dist-cli/chunks/help-XBQIK2XY.js +2 -0
- package/dist-cli/chunks/{hints-TK3EHB4U.js → hints-P3ZIAP3Z.js} +2 -2
- package/dist-cli/chunks/home-paths-ZSCTLOYE.js +2 -0
- package/dist-cli/chunks/{inspect-NFWFGU4B.js → inspect-2ABU5WET.js} +24 -24
- package/dist-cli/chunks/{install-desktop-GB3JKSNX.js → install-desktop-4NOQ3YY4.js} +3 -3
- package/dist-cli/chunks/{keys-RAAHRIFH.js → keys-RPVEUNUC.js} +2 -2
- package/dist-cli/chunks/{login-KQ37GHDE.js → login-6D6DXBO3.js} +4 -4
- package/dist-cli/chunks/{logout-63SH2Y25.js → logout-T5OSWDTJ.js} +2 -2
- package/dist-cli/chunks/{maestro-24BT3MML.js → maestro-MKCHEOKA.js} +2 -2
- package/dist-cli/chunks/optional-demo-registry-EYD2K3QH.js +2 -0
- package/dist-cli/chunks/{preview-KQAOVN6R.js → preview-S52ZNGN2.js} +2 -2
- package/dist-cli/chunks/{profile-AN2B4NJT.js → profile-IG5F3LTL.js} +2 -2
- package/dist-cli/chunks/{react-ATGV35B4.js → react-275HCOFC.js} +2 -2
- package/dist-cli/chunks/{record-36662T3R.js → record-YT63SUHO.js} +4 -4
- package/dist-cli/chunks/runtime-WYZMDZAK.js +2 -0
- package/dist-cli/chunks/{screenshot-K4N5MPAT.js → screenshot-5AZ4MY3A.js} +4 -4
- package/dist-cli/chunks/{screenshot-mode-4QOJDLSH.js → screenshot-mode-4S4EX2XJ.js} +2 -2
- package/dist-cli/chunks/{screenshots-TB35YMSR.js → screenshots-UUJNZSG7.js} +2 -2
- package/dist-cli/chunks/{screenshots-capture-W6X33BZ4.js → screenshots-capture-I66JD3AD.js} +2 -2
- package/dist-cli/chunks/{server-L2PKDJZ2.js → serve-O46Q4WAD.js} +18 -17
- package/dist-cli/chunks/setup-C44N54O7.js +77 -0
- package/dist-cli/chunks/skills-PPVS4XOQ.js +40 -0
- package/dist-cli/chunks/{slides-TORKO36P.js → slides-ZWSZJZUY.js} +2 -2
- package/dist-cli/chunks/store-3SLGP5O3.js +2 -0
- package/dist-cli/chunks/telemetry-2XLLWARK.js +2 -0
- package/dist-cli/chunks/{test-5VCENVW3.js → test-362G4M5A.js} +3 -3
- package/dist-cli/chunks/{three-mode-ZVS2DSX6.js → three-mode-JNVTM2UT.js} +2 -2
- package/dist-cli/chunks/{timeline-TNC5OWLF.js → timeline-VKC6ULRK.js} +2 -2
- package/dist-cli/chunks/{upgrade-E7IO6A7Z.js → upgrade-SJPX4SPA.js} +2 -2
- package/dist-cli/chunks/upload-MXOBV6RT.js +2 -0
- package/dist-cli/chunks/version-4Z7AFNH3.js +4 -0
- package/dist-cli/chunks/web-WB2I2AWL.js +2 -0
- package/dist-cli/chunks/{what-happened-RMHZ7DGX.js → what-happened-KQCWMQJT.js} +3 -3
- package/dist-cli/chunks/{whoami-D53ANHR5.js → whoami-K76PXAD4.js} +2 -2
- package/dist-lib/agent-daemon-client.cjs +4 -5
- 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 +3 -6
- package/dist-lib/beta.mjs +3 -5
- 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 +4 -4
- package/dist-lib/dev-bundle-resolution.cjs +2 -9
- package/dist-lib/home-paths.cjs +59 -1
- package/dist-lib/host/bridge-host.cjs +67 -5
- 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 +2 -2
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro.cjs +2 -2
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +5 -4
- package/dist-lib/sdk.cjs +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +124 -8
- package/dist-lib/vite.cjs +2 -2
- package/package.json +2 -1
- package/scripts/dev-server-scanner.ts +3 -4
- package/scripts/postinstall.cjs +2 -2
- package/scripts/preuninstall.cjs +5 -7
- package/skills/soot.md +178 -0
- package/skills/sootsim-debug.md +384 -0
- package/skills/sootsim-setup.md +96 -0
- package/skills/sootsim-test.md +292 -0
- package/skills/sootsim-visual.md +122 -0
- package/src/agent-daemon-client.ts +4 -14
- package/src/beta.ts +3 -5
- package/src/dev-bundle-resolution.ts +1 -14
- package/src/home-paths.ts +77 -2
- package/src/host/agent-host.ts +1 -1
- package/src/host/bridge-host.ts +65 -6
- package/src/metro-plugin.ts +1 -1
- package/src/runtime-assets.ts +1 -1
- package/src/vite-plugin.ts +1 -0
- package/dist-cli/chunks/agent-V3GVCRPL.js +0 -46
- package/dist-cli/chunks/auto-bootstrap-YXDP3WKH.js +0 -2
- package/dist-cli/chunks/beta-FGSMZWLP.js +0 -2
- package/dist-cli/chunks/chunk-2IFWVIKM.js +0 -2
- package/dist-cli/chunks/chunk-3T36XLP3.js +0 -119
- package/dist-cli/chunks/chunk-5KY7TQ42.js +0 -5
- package/dist-cli/chunks/chunk-BQOMDL4K.js +0 -1
- package/dist-cli/chunks/chunk-FHMPJZKM.js +0 -7
- package/dist-cli/chunks/chunk-GQAWFQNN.js +0 -23
- package/dist-cli/chunks/chunk-HJTKKF7M.js +0 -13
- package/dist-cli/chunks/chunk-K4JAWKOY.js +0 -1
- package/dist-cli/chunks/chunk-NXGQS7IR.js +0 -2
- package/dist-cli/chunks/chunk-R2INPDGW.js +0 -1
- package/dist-cli/chunks/chunk-SLL5SZN4.js +0 -2
- package/dist-cli/chunks/chunk-XM66K64H.js +0 -79
- package/dist-cli/chunks/cli-version-3L6FFDIX.js +0 -2
- package/dist-cli/chunks/config-5IB6ONJ2.js +0 -45
- package/dist-cli/chunks/control-BM4V27OB.js +0 -2
- package/dist-cli/chunks/daemon-62MZT4G4.js +0 -67
- package/dist-cli/chunks/drivers-V6QDFZQD.js +0 -2
- package/dist-cli/chunks/flow-VBM6TU32.js +0 -2
- package/dist-cli/chunks/help-XWKNL743.js +0 -2
- package/dist-cli/chunks/home-paths-G23H3RO6.js +0 -2
- package/dist-cli/chunks/install-5YL7FITA.js +0 -2
- package/dist-cli/chunks/launch-DYFE4CAD.js +0 -16
- package/dist-cli/chunks/optional-demo-registry-JJXPB3UD.js +0 -2
- package/dist-cli/chunks/runtime-NRMC3U3D.js +0 -2
- package/dist-cli/chunks/runtime-delivery-RO6CTYPQ.js +0 -2
- package/dist-cli/chunks/setup-repo-AK6QOUE7.js +0 -2
- package/dist-cli/chunks/skills-KDSOWUOE.js +0 -10
- package/dist-cli/chunks/start-GH2AOUX6.js +0 -23
- package/dist-cli/chunks/store-JHW65VGQ.js +0 -2
- package/dist-cli/chunks/telemetry-SZLRXJXW.js +0 -2
- package/dist-cli/chunks/upload-KKEWETA5.js +0 -2
- package/dist-cli/chunks/version-37OD33SE.js +0 -4
- package/dist-cli/chunks/web-4JVMIBTB.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{C as
|
|
1
|
+
/*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{C as N,D as F,E as y,P as T,Q as b,R as S}from"./chunk-Q4NDYO2U.js";import{c as A,e as _}from"./chunk-DIRDEKRW.js";import"./chunk-ULV4PWN4.js";import{b as k}from"./chunk-DWXC25XG.js";import"./chunk-EX6V4ZV6.js";import"./chunk-WN7R4GL4.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
|
|
3
3
|
sootsim what-happened \u2014 show recent events from the semantic timeline
|
|
4
4
|
|
|
5
5
|
usage:
|
|
@@ -15,7 +15,7 @@ usage:
|
|
|
15
15
|
|
|
16
16
|
note: by default react-commit, layout, and scroll events are hidden as
|
|
17
17
|
noise \u2014 pass --noisy or include them in --kinds to see them.
|
|
18
|
-
`),process.exit(0));let s=n.includes("--summary"),l=n.includes("--flow"),i=n.includes("--all"),r=n.includes("--json"),u=n.includes("--no-advance"),v=n.includes("--noisy"),{since:a}=O(n),{kinds:d}=B(n),{limit:C}=D(n),g=k(),$={limit:C??200,...d&&d.length?{kinds:d}:{},...a!==void 0?{since:a}:i?{}:{sinceCursor:g}},h=
|
|
18
|
+
`),process.exit(0));let s=n.includes("--summary"),l=n.includes("--flow"),i=n.includes("--all"),r=n.includes("--json"),u=n.includes("--no-advance"),v=n.includes("--noisy"),{since:a}=O(n),{kinds:d}=B(n),{limit:C}=D(n),g=k(),$={limit:C??200,...d&&d.length?{kinds:d}:{},...a!==void 0?{since:a}:i?{}:{sinceCursor:g}},h=_(e);try{if(s){let c=await N(h,$);if(r)console.log(JSON.stringify(c));else{let m=i?"all time":a!==void 0?`last ${((Date.now()-a)/1e3).toFixed(1)}s`:"since last call";console.log(` ${m}: ${T(c)}`)}!u&&!i&&c.lastAt&&await y(h,g,c.lastAt);return}let o=await F(h,$),E=Array.isArray(d)&&d.some(c=>b.has(c)),I=!v&&!E,f=0;if(I){let c=o.events.filter(m=>b.has(m.kind)?(f+=1,!1):!0);o.events=c}if(r)console.log(JSON.stringify(l?x(o.events):o,null,2));else{if(o.events.length===0)f>0?console.log(` no non-noise events (${f} react-commit/layout/scroll hidden)`):console.log(i?" no events recorded":a!==void 0?" no events in window":" no new events since last call");else if(l){let c=o.events[0]?.t??null,m=x(o.events),w=i?`\u2500\u2500\u2500 ${o.events.length} event(s) total \u2014 flow view \u2500\u2500\u2500`:a!==void 0?`\u2500\u2500\u2500 ${o.events.length} event(s) in last ${((Date.now()-a)/1e3).toFixed(1)}s \u2014 flow view \u2500\u2500\u2500`:`\u2500\u2500\u2500 ${o.events.length} event(s) since last call \u2014 flow view \u2500\u2500\u2500`;console.log(` ${w}`);for(let p of m){console.log(`
|
|
19
19
|
\u2500\u2500 ${p.label} (${p.events.length} event${p.events.length===1?"":"s"}) \u2500\u2500`);for(let M of p.events)console.log(S(M,c))}}else{let c=o.events[0]?.t??null,m=i?`\u2500\u2500\u2500 ${o.events.length} event(s) total \u2500\u2500\u2500`:a!==void 0?`\u2500\u2500\u2500 ${o.events.length} event(s) in last ${((Date.now()-a)/1e3).toFixed(1)}s \u2500\u2500\u2500`:`\u2500\u2500\u2500 ${o.events.length} event(s) since last call \u2500\u2500\u2500`;console.log(` ${m}`);for(let w of o.events)console.log(S(w,c))}f>0&&o.events.length>0&&process.stderr.write(`
|
|
20
20
|
${f} high-frequency event(s) hidden (react-commit/layout/scroll)
|
|
21
21
|
rerun with --noisy or --kinds react-commit,layout,scroll to include them
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{d as i}from"./chunk-
|
|
1
|
+
/*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{d as i}from"./chunk-BP3EGFER.js";import{d as n}from"./chunk-QPRF3UYX.js";import"./chunk-EX6V4ZV6.js";import"./chunk-WN7R4GL4.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.170 | (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;
|
|
@@ -397,14 +397,13 @@ async function ensureDaemonRunning(opts = {}) {
|
|
|
397
397
|
return { alreadyRunning: true };
|
|
398
398
|
}
|
|
399
399
|
if (shouldSkipPersistentDaemon()) {
|
|
400
|
-
const why = isDevWorkstation() ? `this is a dev workstation (IS_TAMAGUI_DEV=1)` : `this is a dev checkout`;
|
|
401
400
|
throw new AgentDaemonError(
|
|
402
|
-
`no sootsim bridge on port ${port}
|
|
401
|
+
`no sootsim bridge on port ${port}. run \`sootsim setup\` to install the background daemon, or \`sootsim serve\` in another shell.`,
|
|
403
402
|
"DEV_HOST_REFUSED"
|
|
404
403
|
);
|
|
405
404
|
}
|
|
406
405
|
const { cmd, prefixArgs } = resolveSootsimInvocation();
|
|
407
|
-
const args = [...prefixArgs, "
|
|
406
|
+
const args = [...prefixArgs, "serve", "--quiet"];
|
|
408
407
|
if (port !== DEFAULT_SOOTSIM_BRIDGE_PORT) {
|
|
409
408
|
args.push("--port", String(port));
|
|
410
409
|
}
|
|
@@ -421,7 +420,7 @@ async function ensureDaemonRunning(opts = {}) {
|
|
|
421
420
|
await new Promise((r) => setTimeout(r, 100));
|
|
422
421
|
}
|
|
423
422
|
throw new AgentDaemonError(
|
|
424
|
-
`spawned sootsim daemon on port ${port} but it did not come up in time. run \`sootsim
|
|
423
|
+
`spawned sootsim daemon on port ${port} but it did not come up in time. run \`sootsim serve\` manually to diagnose.`,
|
|
425
424
|
"SPAWN_TIMEOUT"
|
|
426
425
|
);
|
|
427
426
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.170 | (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.170 | (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.170 | (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.170 | (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.170 | (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.170 | (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;
|
|
@@ -25,20 +25,17 @@ __export(beta_exports, {
|
|
|
25
25
|
BETA_ASK_HEADLINE: () => BETA_ASK_HEADLINE,
|
|
26
26
|
BETA_LABEL: () => BETA_LABEL,
|
|
27
27
|
BETA_TAGLINE: () => BETA_TAGLINE,
|
|
28
|
-
BETA_VERSION_TARGET: () => BETA_VERSION_TARGET,
|
|
29
28
|
IS_BETA: () => IS_BETA
|
|
30
29
|
});
|
|
31
30
|
module.exports = __toCommonJS(beta_exports);
|
|
32
31
|
var IS_BETA = true;
|
|
33
|
-
var BETA_VERSION_TARGET = "1.0.0";
|
|
34
32
|
var BETA_LABEL = "public beta";
|
|
35
|
-
var BETA_TAGLINE =
|
|
36
|
-
var BETA_ASK_HEADLINE = "
|
|
33
|
+
var BETA_TAGLINE = BETA_LABEL;
|
|
34
|
+
var BETA_ASK_HEADLINE = "we send anonymous error and dependency data while you use it";
|
|
37
35
|
// Annotate the CommonJS export names for ESM import in node:
|
|
38
36
|
0 && (module.exports = {
|
|
39
37
|
BETA_ASK_HEADLINE,
|
|
40
38
|
BETA_LABEL,
|
|
41
39
|
BETA_TAGLINE,
|
|
42
|
-
BETA_VERSION_TARGET,
|
|
43
40
|
IS_BETA
|
|
44
41
|
});
|
package/dist-lib/beta.mjs
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// src/beta.ts
|
|
4
4
|
var IS_BETA = true;
|
|
5
|
-
var BETA_VERSION_TARGET = "1.0.0";
|
|
6
5
|
var BETA_LABEL = "public beta";
|
|
7
|
-
var BETA_TAGLINE =
|
|
8
|
-
var BETA_ASK_HEADLINE = "
|
|
6
|
+
var BETA_TAGLINE = BETA_LABEL;
|
|
7
|
+
var BETA_ASK_HEADLINE = "we send anonymous error and dependency data while you use it";
|
|
9
8
|
export {
|
|
10
9
|
BETA_ASK_HEADLINE,
|
|
11
10
|
BETA_LABEL,
|
|
12
11
|
BETA_TAGLINE,
|
|
13
|
-
BETA_VERSION_TARGET,
|
|
14
12
|
IS_BETA
|
|
15
13
|
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.170 | (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.170 | (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.170 | (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.170 | (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;
|
|
@@ -905,7 +905,7 @@ async function waitForSootsimShellReady(page, timeout = 3e4) {
|
|
|
905
905
|
});
|
|
906
906
|
if (transitionResult?.timedOut === true) {
|
|
907
907
|
throw new Error(
|
|
908
|
-
`sootsim launch transitions timed out: ${JSON.stringify(transitionResult)}`
|
|
908
|
+
`sootsim app launch transitions timed out: ${JSON.stringify(transitionResult)}`
|
|
909
909
|
);
|
|
910
910
|
}
|
|
911
911
|
}
|
|
@@ -1625,7 +1625,7 @@ var device = {
|
|
|
1625
1625
|
},
|
|
1626
1626
|
// record the SootSim canvas via the engine's headless recorder
|
|
1627
1627
|
// (window.__sootsimRecorder — @sootsim/plugin-recording). this is the
|
|
1628
|
-
// SAME code path `
|
|
1628
|
+
// SAME code path `sootsim record video` drives, NOT the rail-button
|
|
1629
1629
|
// path (SootSim.bridges.startRecording wires the dialog state machine
|
|
1630
1630
|
// and never stashes the resulting blob into __sootsimRecorder.lastBlob,
|
|
1631
1631
|
// which is what getBlobBase64 streams from).
|
|
@@ -1655,7 +1655,7 @@ var device = {
|
|
|
1655
1655
|
}
|
|
1656
1656
|
},
|
|
1657
1657
|
// stop the headless recorder, stream the resulting blob in chunks (same
|
|
1658
|
-
// protocol as `
|
|
1658
|
+
// protocol as `sootsim record`), and write the webm to outPath.
|
|
1659
1659
|
async stopAndSaveBridgeRecording(outPath) {
|
|
1660
1660
|
const page = getPage();
|
|
1661
1661
|
const stopResult = await page.evaluate(async () => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.170 | (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;
|
|
@@ -193,14 +193,7 @@ async function resolveConnectionInput(input) {
|
|
|
193
193
|
const port2 = parseInt(trimmed, 10);
|
|
194
194
|
const resolved = await probePortBundle(port2);
|
|
195
195
|
if (resolved) return resolved;
|
|
196
|
-
|
|
197
|
-
for (let offset = 1; offset <= SHIFT_WINDOW; offset++) {
|
|
198
|
-
const shifted = await probePortBundle(port2 + offset);
|
|
199
|
-
if (shifted) return shifted;
|
|
200
|
-
}
|
|
201
|
-
throw buildUnresolvedTargetError(
|
|
202
|
-
`localhost:${port2} (also scanned +1..+${SHIFT_WINDOW})`
|
|
203
|
-
);
|
|
196
|
+
throw buildUnresolvedTargetError(`localhost:${port2}`);
|
|
204
197
|
}
|
|
205
198
|
const bundleUrl = trimmed.startsWith("http") ? trimmed : `http://${trimmed}`;
|
|
206
199
|
let parsed;
|
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.170 | (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;
|
|
@@ -36,6 +36,7 @@ __export(home_paths_exports, {
|
|
|
36
36
|
CONFIG_FILE: () => CONFIG_FILE,
|
|
37
37
|
DAEMON_HEARTBEAT_STALE_MS: () => DAEMON_HEARTBEAT_STALE_MS,
|
|
38
38
|
DAEMON_LOCKFILE: () => DAEMON_LOCKFILE,
|
|
39
|
+
DEV_BRIDGE_LOCKFILE: () => DEV_BRIDGE_LOCKFILE,
|
|
39
40
|
SOOTSIM_HOME_ENV: () => SOOTSIM_HOME_ENV,
|
|
40
41
|
activeRuntimeDir: () => activeRuntimeDir,
|
|
41
42
|
activeRuntimeFile: () => activeRuntimeFile,
|
|
@@ -47,26 +48,31 @@ __export(home_paths_exports, {
|
|
|
47
48
|
daemonAppDir: () => daemonAppDir,
|
|
48
49
|
daemonAppLauncherPath: () => daemonAppLauncherPath,
|
|
49
50
|
daemonLockfilePath: () => daemonLockfilePath,
|
|
51
|
+
devBridgeLockfilePath: () => devBridgeLockfilePath,
|
|
50
52
|
electronDir: () => electronDir,
|
|
51
53
|
electronUserDataDir: () => electronUserDataDir,
|
|
52
54
|
electronVersionDir: () => electronVersionDir,
|
|
53
55
|
ensureSootsimHome: () => ensureSootsimHome,
|
|
54
56
|
isDaemonLockfileFresh: () => isDaemonLockfileFresh,
|
|
57
|
+
isDevBridgeLockfileFresh: () => isDevBridgeLockfileFresh,
|
|
55
58
|
isDevWorkstation: () => isDevWorkstation,
|
|
56
59
|
isSootsimDevCheckout: () => isSootsimDevCheckout,
|
|
57
60
|
listInstalledRuntimes: () => listInstalledRuntimes,
|
|
58
61
|
profilesDir: () => profilesDir,
|
|
59
62
|
readActiveRuntime: () => readActiveRuntime,
|
|
60
63
|
readDaemonLockfile: () => readDaemonLockfile,
|
|
64
|
+
readDevBridgeLockfile: () => readDevBridgeLockfile,
|
|
61
65
|
readSharedConfig: () => readSharedConfig,
|
|
62
66
|
readTelemetryEnabled: () => readTelemetryEnabled,
|
|
63
67
|
removeDaemonLockfile: () => removeDaemonLockfile,
|
|
68
|
+
removeDevBridgeLockfile: () => removeDevBridgeLockfile,
|
|
64
69
|
runtimeDir: () => runtimeDir,
|
|
65
70
|
runtimesDir: () => runtimesDir,
|
|
66
71
|
shouldSkipPersistentDaemon: () => shouldSkipPersistentDaemon,
|
|
67
72
|
sootsimHomeDir: () => sootsimHomeDir,
|
|
68
73
|
writeActiveRuntime: () => writeActiveRuntime,
|
|
69
74
|
writeDaemonLockfile: () => writeDaemonLockfile,
|
|
75
|
+
writeDevBridgeLockfile: () => writeDevBridgeLockfile,
|
|
70
76
|
writeSharedConfig: () => writeSharedConfig,
|
|
71
77
|
writeTelemetryEnabled: () => writeTelemetryEnabled
|
|
72
78
|
});
|
|
@@ -77,6 +83,7 @@ var import_node_path = __toESM(require("node:path"), 1);
|
|
|
77
83
|
var SOOTSIM_HOME_ENV = "SOOTSIM_HOME";
|
|
78
84
|
var ACTIVE_RUNTIME_FILE = "active";
|
|
79
85
|
var DAEMON_LOCKFILE = "daemon.json";
|
|
86
|
+
var DEV_BRIDGE_LOCKFILE = "dev-bridge.json";
|
|
80
87
|
var CONFIG_FILE = "config.json";
|
|
81
88
|
var DAEMON_HEARTBEAT_STALE_MS = 3e4;
|
|
82
89
|
function sootsimHomeDir() {
|
|
@@ -141,6 +148,9 @@ function cacheDir() {
|
|
|
141
148
|
function daemonLockfilePath() {
|
|
142
149
|
return import_node_path.default.join(sootsimHomeDir(), DAEMON_LOCKFILE);
|
|
143
150
|
}
|
|
151
|
+
function devBridgeLockfilePath() {
|
|
152
|
+
return import_node_path.default.join(sootsimHomeDir(), DEV_BRIDGE_LOCKFILE);
|
|
153
|
+
}
|
|
144
154
|
function configFilePath() {
|
|
145
155
|
return import_node_path.default.join(sootsimHomeDir(), CONFIG_FILE);
|
|
146
156
|
}
|
|
@@ -253,6 +263,25 @@ function readDaemonLockfile() {
|
|
|
253
263
|
return null;
|
|
254
264
|
}
|
|
255
265
|
}
|
|
266
|
+
function readDevBridgeLockfile() {
|
|
267
|
+
try {
|
|
268
|
+
const fd = import_node_fs.default.openSync(devBridgeLockfilePath(), "r");
|
|
269
|
+
try {
|
|
270
|
+
const buf = Buffer.alloc(DAEMON_LOCKFILE_MAX_BYTES);
|
|
271
|
+
const bytesRead = import_node_fs.default.readSync(fd, buf, 0, DAEMON_LOCKFILE_MAX_BYTES, 0);
|
|
272
|
+
const raw = buf.subarray(0, bytesRead).toString("utf8");
|
|
273
|
+
const parsed = JSON.parse(raw);
|
|
274
|
+
if (parsed && parsed.schema === 1 && parsed.source === "vite-dev" && typeof parsed.pid === "number" && typeof parsed.bridgePort === "number" && typeof parsed.runtimePort === "number" && typeof parsed.cwd === "string" && typeof parsed.startedAt === "number" && typeof parsed.heartbeatAt === "number") {
|
|
275
|
+
return parsed;
|
|
276
|
+
}
|
|
277
|
+
return null;
|
|
278
|
+
} finally {
|
|
279
|
+
import_node_fs.default.closeSync(fd);
|
|
280
|
+
}
|
|
281
|
+
} catch {
|
|
282
|
+
return null;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
256
285
|
function isDaemonLockfileFresh(lock, now = Date.now()) {
|
|
257
286
|
if (!lock) return false;
|
|
258
287
|
if (now - lock.heartbeatAt > DAEMON_HEARTBEAT_STALE_MS) return false;
|
|
@@ -263,6 +292,16 @@ function isDaemonLockfileFresh(lock, now = Date.now()) {
|
|
|
263
292
|
return false;
|
|
264
293
|
}
|
|
265
294
|
}
|
|
295
|
+
function isDevBridgeLockfileFresh(lock, now = Date.now()) {
|
|
296
|
+
if (!lock) return false;
|
|
297
|
+
if (now - lock.heartbeatAt > DAEMON_HEARTBEAT_STALE_MS) return false;
|
|
298
|
+
try {
|
|
299
|
+
process.kill(lock.pid, 0);
|
|
300
|
+
return true;
|
|
301
|
+
} catch {
|
|
302
|
+
return false;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
266
305
|
function writeDaemonLockfile(data) {
|
|
267
306
|
ensureSootsimHome();
|
|
268
307
|
const tmp = `${daemonLockfilePath()}.tmp`;
|
|
@@ -270,6 +309,13 @@ function writeDaemonLockfile(data) {
|
|
|
270
309
|
`, "utf8");
|
|
271
310
|
import_node_fs.default.renameSync(tmp, daemonLockfilePath());
|
|
272
311
|
}
|
|
312
|
+
function writeDevBridgeLockfile(data) {
|
|
313
|
+
ensureSootsimHome();
|
|
314
|
+
const tmp = `${devBridgeLockfilePath()}.tmp`;
|
|
315
|
+
import_node_fs.default.writeFileSync(tmp, `${JSON.stringify(data, null, 2)}
|
|
316
|
+
`, "utf8");
|
|
317
|
+
import_node_fs.default.renameSync(tmp, devBridgeLockfilePath());
|
|
318
|
+
}
|
|
273
319
|
function claimDaemonLockfile(data) {
|
|
274
320
|
ensureSootsimHome();
|
|
275
321
|
const existing = readDaemonLockfile();
|
|
@@ -285,12 +331,19 @@ function removeDaemonLockfile() {
|
|
|
285
331
|
} catch {
|
|
286
332
|
}
|
|
287
333
|
}
|
|
334
|
+
function removeDevBridgeLockfile() {
|
|
335
|
+
try {
|
|
336
|
+
import_node_fs.default.unlinkSync(devBridgeLockfilePath());
|
|
337
|
+
} catch {
|
|
338
|
+
}
|
|
339
|
+
}
|
|
288
340
|
// Annotate the CommonJS export names for ESM import in node:
|
|
289
341
|
0 && (module.exports = {
|
|
290
342
|
ACTIVE_RUNTIME_FILE,
|
|
291
343
|
CONFIG_FILE,
|
|
292
344
|
DAEMON_HEARTBEAT_STALE_MS,
|
|
293
345
|
DAEMON_LOCKFILE,
|
|
346
|
+
DEV_BRIDGE_LOCKFILE,
|
|
294
347
|
SOOTSIM_HOME_ENV,
|
|
295
348
|
activeRuntimeDir,
|
|
296
349
|
activeRuntimeFile,
|
|
@@ -302,26 +355,31 @@ function removeDaemonLockfile() {
|
|
|
302
355
|
daemonAppDir,
|
|
303
356
|
daemonAppLauncherPath,
|
|
304
357
|
daemonLockfilePath,
|
|
358
|
+
devBridgeLockfilePath,
|
|
305
359
|
electronDir,
|
|
306
360
|
electronUserDataDir,
|
|
307
361
|
electronVersionDir,
|
|
308
362
|
ensureSootsimHome,
|
|
309
363
|
isDaemonLockfileFresh,
|
|
364
|
+
isDevBridgeLockfileFresh,
|
|
310
365
|
isDevWorkstation,
|
|
311
366
|
isSootsimDevCheckout,
|
|
312
367
|
listInstalledRuntimes,
|
|
313
368
|
profilesDir,
|
|
314
369
|
readActiveRuntime,
|
|
315
370
|
readDaemonLockfile,
|
|
371
|
+
readDevBridgeLockfile,
|
|
316
372
|
readSharedConfig,
|
|
317
373
|
readTelemetryEnabled,
|
|
318
374
|
removeDaemonLockfile,
|
|
375
|
+
removeDevBridgeLockfile,
|
|
319
376
|
runtimeDir,
|
|
320
377
|
runtimesDir,
|
|
321
378
|
shouldSkipPersistentDaemon,
|
|
322
379
|
sootsimHomeDir,
|
|
323
380
|
writeActiveRuntime,
|
|
324
381
|
writeDaemonLockfile,
|
|
382
|
+
writeDevBridgeLockfile,
|
|
325
383
|
writeSharedConfig,
|
|
326
384
|
writeTelemetryEnabled
|
|
327
385
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.170 | (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;
|
|
@@ -421,10 +421,8 @@ async function probePort(port, buildIconProxyUrl) {
|
|
|
421
421
|
return null;
|
|
422
422
|
}
|
|
423
423
|
function isSootSelfServer(server) {
|
|
424
|
-
const projectName = server.projectName?.trim().toLowerCase();
|
|
425
|
-
if (projectName === "soot" || projectName === "sootsim") return true;
|
|
426
424
|
const bundleId = server.bundleId?.trim().toLowerCase();
|
|
427
|
-
if (bundleId?.startsWith("dev.
|
|
425
|
+
if (bundleId?.startsWith("dev.sootsim.")) return true;
|
|
428
426
|
return false;
|
|
429
427
|
}
|
|
430
428
|
var portCache = /* @__PURE__ */ new Map();
|
|
@@ -545,6 +543,7 @@ var import_node_path = __toESM(require("node:path"), 1);
|
|
|
545
543
|
var SOOTSIM_HOME_ENV = "SOOTSIM_HOME";
|
|
546
544
|
var ACTIVE_RUNTIME_FILE = "active";
|
|
547
545
|
var DAEMON_LOCKFILE = "daemon.json";
|
|
546
|
+
var DEV_BRIDGE_LOCKFILE = "dev-bridge.json";
|
|
548
547
|
var CONFIG_FILE = "config.json";
|
|
549
548
|
var DAEMON_HEARTBEAT_STALE_MS = 3e4;
|
|
550
549
|
function sootsimHomeDir() {
|
|
@@ -576,6 +575,9 @@ function cacheDir() {
|
|
|
576
575
|
function daemonLockfilePath() {
|
|
577
576
|
return import_node_path.default.join(sootsimHomeDir(), DAEMON_LOCKFILE);
|
|
578
577
|
}
|
|
578
|
+
function devBridgeLockfilePath() {
|
|
579
|
+
return import_node_path.default.join(sootsimHomeDir(), DEV_BRIDGE_LOCKFILE);
|
|
580
|
+
}
|
|
579
581
|
function configFilePath() {
|
|
580
582
|
return import_node_path.default.join(sootsimHomeDir(), CONFIG_FILE);
|
|
581
583
|
}
|
|
@@ -699,6 +701,13 @@ function writeDaemonLockfile(data) {
|
|
|
699
701
|
`, "utf8");
|
|
700
702
|
import_node_fs2.default.renameSync(tmp, daemonLockfilePath());
|
|
701
703
|
}
|
|
704
|
+
function writeDevBridgeLockfile(data) {
|
|
705
|
+
ensureSootsimHome();
|
|
706
|
+
const tmp = `${devBridgeLockfilePath()}.tmp`;
|
|
707
|
+
import_node_fs2.default.writeFileSync(tmp, `${JSON.stringify(data, null, 2)}
|
|
708
|
+
`, "utf8");
|
|
709
|
+
import_node_fs2.default.renameSync(tmp, devBridgeLockfilePath());
|
|
710
|
+
}
|
|
702
711
|
function claimDaemonLockfile(data) {
|
|
703
712
|
ensureSootsimHome();
|
|
704
713
|
const existing = readDaemonLockfile();
|
|
@@ -714,6 +723,12 @@ function removeDaemonLockfile() {
|
|
|
714
723
|
} catch {
|
|
715
724
|
}
|
|
716
725
|
}
|
|
726
|
+
function removeDevBridgeLockfile() {
|
|
727
|
+
try {
|
|
728
|
+
import_node_fs2.default.unlinkSync(devBridgeLockfilePath());
|
|
729
|
+
} catch {
|
|
730
|
+
}
|
|
731
|
+
}
|
|
717
732
|
|
|
718
733
|
// src/runtime-delivery.ts
|
|
719
734
|
var import_child_process2 = require("child_process");
|
|
@@ -2806,10 +2821,12 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
|
|
|
2806
2821
|
maxConcurrentAutomationSims;
|
|
2807
2822
|
automationSimActiveGraceMs;
|
|
2808
2823
|
shouldWriteLockfile;
|
|
2824
|
+
shouldWriteDevLockfile;
|
|
2809
2825
|
sootbeanOrigin = null;
|
|
2810
2826
|
effectivePort = 0;
|
|
2811
2827
|
startedAt = 0;
|
|
2812
2828
|
heartbeatTimer = null;
|
|
2829
|
+
devHeartbeatTimer = null;
|
|
2813
2830
|
// ws-level heartbeat: sims that hang up uncleanly (page navigated, network
|
|
2814
2831
|
// dropped, sim crashed) leave their server-side WebSocket sitting "open"
|
|
2815
2832
|
// forever. ping every WS_HEARTBEAT_INTERVAL_MS; if the previous round's
|
|
@@ -2836,6 +2853,7 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
|
|
|
2836
2853
|
this.preferredPort = opts.port || DEFAULT_SOOTSIM_BRIDGE_PORT;
|
|
2837
2854
|
this.port = this.preferredPort;
|
|
2838
2855
|
this.shouldWriteLockfile = opts.writeLockfile === true;
|
|
2856
|
+
this.shouldWriteDevLockfile = opts.writeDevLockfile === true;
|
|
2839
2857
|
this.portFallbackCount = Math.max(1, opts.portFallbackCount ?? 10);
|
|
2840
2858
|
this.openUrlHandler = opts.openUrl;
|
|
2841
2859
|
this.agentHost = new AgentHost({ getExcludePorts: opts.agentScanExcludes });
|
|
@@ -3353,7 +3371,7 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
|
|
|
3353
3371
|
});
|
|
3354
3372
|
});
|
|
3355
3373
|
}
|
|
3356
|
-
/** after a successful bind: start the cli idle sweep, write the daemon
|
|
3374
|
+
/** after a successful bind: start the cli idle sweep, write the daemon/dev
|
|
3357
3375
|
* lockfile (if this host owns it), seed the agent host, kick off the
|
|
3358
3376
|
* heartbeat loop. idempotent across rebinds because close() tears down
|
|
3359
3377
|
* every timer and the lockfile. */
|
|
@@ -3395,6 +3413,23 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
|
|
|
3395
3413
|
this.heartbeatTimer.unref();
|
|
3396
3414
|
this.startRuntimeUpdater();
|
|
3397
3415
|
}
|
|
3416
|
+
if (this.shouldWriteDevLockfile) {
|
|
3417
|
+
try {
|
|
3418
|
+
this.writeDevLockfileSnapshot();
|
|
3419
|
+
} catch (err) {
|
|
3420
|
+
process.stderr.write(
|
|
3421
|
+
`ws bridge failed to write dev bridge lockfile: ${String(err)}
|
|
3422
|
+
`
|
|
3423
|
+
);
|
|
3424
|
+
}
|
|
3425
|
+
this.devHeartbeatTimer = setInterval(() => {
|
|
3426
|
+
try {
|
|
3427
|
+
this.writeDevLockfileSnapshot();
|
|
3428
|
+
} catch {
|
|
3429
|
+
}
|
|
3430
|
+
}, DAEMON_HEARTBEAT_INTERVAL_MS);
|
|
3431
|
+
this.devHeartbeatTimer.unref();
|
|
3432
|
+
}
|
|
3398
3433
|
void this.agentHost.seedOnBoot();
|
|
3399
3434
|
}
|
|
3400
3435
|
bootstrapping = true;
|
|
@@ -3412,9 +3447,25 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
|
|
|
3412
3447
|
bootstrapping: this.bootstrapping
|
|
3413
3448
|
};
|
|
3414
3449
|
}
|
|
3450
|
+
buildDevLockfileSnapshot() {
|
|
3451
|
+
return {
|
|
3452
|
+
schema: 1,
|
|
3453
|
+
pid: process.pid,
|
|
3454
|
+
platform: process.platform,
|
|
3455
|
+
bridgePort: this.effectivePort,
|
|
3456
|
+
runtimePort: this.effectivePort,
|
|
3457
|
+
cwd: process.cwd(),
|
|
3458
|
+
startedAt: this.startedAt,
|
|
3459
|
+
heartbeatAt: Date.now(),
|
|
3460
|
+
source: "vite-dev"
|
|
3461
|
+
};
|
|
3462
|
+
}
|
|
3415
3463
|
writeLockfileSnapshot() {
|
|
3416
3464
|
writeDaemonLockfile(this.buildLockfileSnapshot());
|
|
3417
3465
|
}
|
|
3466
|
+
writeDevLockfileSnapshot() {
|
|
3467
|
+
writeDevBridgeLockfile(this.buildDevLockfileSnapshot());
|
|
3468
|
+
}
|
|
3418
3469
|
refreshActiveRuntime() {
|
|
3419
3470
|
this.activeRuntimeVersion = readActiveRuntime();
|
|
3420
3471
|
this.activeRuntimeDirPath = activeRuntimeDir();
|
|
@@ -3650,6 +3701,7 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
|
|
|
3650
3701
|
bridgePort: this.effectivePort,
|
|
3651
3702
|
runtimePort: this.effectivePort,
|
|
3652
3703
|
activeRuntime: this.activeRuntimeVersion,
|
|
3704
|
+
bridgeSource: this.shouldWriteDevLockfile ? "vite-dev" : this.shouldWriteLockfile ? "daemon" : "embedded",
|
|
3653
3705
|
startedAt: this.startedAt,
|
|
3654
3706
|
uptimeMs: this.startedAt > 0 ? Date.now() - this.startedAt : 0
|
|
3655
3707
|
})
|
|
@@ -4031,6 +4083,10 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
|
|
|
4031
4083
|
clearInterval(this.heartbeatTimer);
|
|
4032
4084
|
this.heartbeatTimer = null;
|
|
4033
4085
|
}
|
|
4086
|
+
if (this.devHeartbeatTimer) {
|
|
4087
|
+
clearInterval(this.devHeartbeatTimer);
|
|
4088
|
+
this.devHeartbeatTimer = null;
|
|
4089
|
+
}
|
|
4034
4090
|
if (this.wsHeartbeatTimer) {
|
|
4035
4091
|
clearInterval(this.wsHeartbeatTimer);
|
|
4036
4092
|
this.wsHeartbeatTimer = null;
|
|
@@ -4045,6 +4101,12 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
|
|
|
4045
4101
|
} catch {
|
|
4046
4102
|
}
|
|
4047
4103
|
}
|
|
4104
|
+
if (this.shouldWriteDevLockfile) {
|
|
4105
|
+
try {
|
|
4106
|
+
removeDevBridgeLockfile();
|
|
4107
|
+
} catch {
|
|
4108
|
+
}
|
|
4109
|
+
}
|
|
4048
4110
|
this.effectivePort = 0;
|
|
4049
4111
|
this.startedAt = 0;
|
|
4050
4112
|
this.agentHost.close();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.170 | (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.170 | (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.170 | (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.170 | (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.170 | (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;
|
|
@@ -78,7 +78,7 @@ function readActiveRuntime() {
|
|
|
78
78
|
var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
|
|
79
79
|
|
|
80
80
|
// src/runtime-assets.ts
|
|
81
|
-
var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[sootsim] no engine runtime installed \u2014 run `sootsim setup
|
|
81
|
+
var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[sootsim] no engine runtime installed \u2014 run `sootsim setup`, or `sootsim runtime install`";
|
|
82
82
|
var MIME_TYPES = {
|
|
83
83
|
".js": "application/javascript",
|
|
84
84
|
".mjs": "application/javascript",
|
package/dist-lib/menu.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/menu.mjs
CHANGED
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.170 | (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;
|
|
@@ -74,7 +74,7 @@ function readActiveRuntime() {
|
|
|
74
74
|
var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
|
|
75
75
|
|
|
76
76
|
// src/runtime-assets.ts
|
|
77
|
-
var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[sootsim] no engine runtime installed \u2014 run `sootsim setup
|
|
77
|
+
var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[sootsim] no engine runtime installed \u2014 run `sootsim setup`, or `sootsim runtime install`";
|
|
78
78
|
var MIME_TYPES = {
|
|
79
79
|
".js": "application/javascript",
|
|
80
80
|
".mjs": "application/javascript",
|