sootsim 0.1.38 → 0.1.40

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.
Files changed (139) hide show
  1. package/dist-cli/bin.js +16 -15
  2. package/dist-cli/chunks/{agent-CGQWOOOL.js → agent-3F5PO4NL.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-M6P53GJ2.js → agent-wrapper-LVUUZRWL.js} +2 -2
  4. package/dist-cli/chunks/{assert-O7N2SYJZ.js → assert-4WMVS3WU.js} +2 -2
  5. package/dist-cli/chunks/auto-bootstrap-Q4A3PTF5.js +2 -0
  6. package/dist-cli/chunks/beta-CLLKUB5X.js +2 -0
  7. package/dist-cli/chunks/{chunk-PFRPXFSL.js → chunk-4IAKB3C4.js} +6 -6
  8. package/dist-cli/chunks/chunk-4L45Q3YX.js +5 -0
  9. package/dist-cli/chunks/{chunk-BEY2QVU5.js → chunk-553OZX4H.js} +2 -2
  10. package/dist-cli/chunks/{chunk-IKVIHHWE.js → chunk-5GK4YX7O.js} +1 -1
  11. package/dist-cli/chunks/{runtime-GFWS3QLZ.js → chunk-5IAIIX7B.js} +3 -3
  12. package/dist-cli/chunks/{chunk-NSZBULGG.js → chunk-6X5NQJT7.js} +3 -3
  13. package/dist-cli/chunks/{chunk-H6CG42HE.js → chunk-6XI4VHIL.js} +2 -2
  14. package/dist-cli/chunks/{chunk-HNAGYNWN.js → chunk-BZED27B2.js} +2 -2
  15. package/dist-cli/chunks/{chunk-JJVZMGRM.js → chunk-CAJ247SC.js} +2 -2
  16. package/dist-cli/chunks/{chunk-E473YTRQ.js → chunk-CCZHRBXJ.js} +1 -1
  17. package/dist-cli/chunks/{chunk-FXY5FWVY.js → chunk-D2ZMP7G4.js} +2 -2
  18. package/dist-cli/chunks/{chunk-CHMHTTI7.js → chunk-D4Z7MWQY.js} +2 -2
  19. package/dist-cli/chunks/{chunk-VIEK76DX.js → chunk-DEBXVPIE.js} +1 -1
  20. package/dist-cli/chunks/{chunk-FCOCFEBU.js → chunk-DHJIXXWG.js} +2 -2
  21. package/dist-cli/chunks/chunk-DPZDTJVQ.js +1 -0
  22. package/dist-cli/chunks/{chunk-IE2WYVJF.js → chunk-DSTHAISO.js} +1 -1
  23. package/dist-cli/chunks/{chunk-G23GIRBM.js → chunk-EOWN4ZFJ.js} +1 -1
  24. package/dist-cli/chunks/chunk-FFR7EA4U.js +1 -0
  25. package/dist-cli/chunks/chunk-FNIL6BYS.js +108 -0
  26. package/dist-cli/chunks/chunk-I7KXFJDK.js +1 -0
  27. package/dist-cli/chunks/{chunk-B4VH67D3.js → chunk-J6BPROH4.js} +1 -1
  28. package/dist-cli/chunks/{chunk-LNRBXCUI.js → chunk-KGVH3YAG.js} +2 -2
  29. package/dist-cli/chunks/{chunk-MTPWS4JK.js → chunk-KVOMVYG6.js} +4 -4
  30. package/dist-cli/chunks/{chunk-VVUEWU2P.js → chunk-LCES5ZJI.js} +2 -2
  31. package/dist-cli/chunks/{chunk-ARH3T5NK.js → chunk-LXR5EI74.js} +2 -2
  32. package/dist-cli/chunks/{chunk-P722XCFT.js → chunk-MLCBIX7O.js} +2 -2
  33. package/dist-cli/chunks/{chunk-P32FCOS3.js → chunk-OV5TY7M3.js} +2 -2
  34. package/dist-cli/chunks/chunk-PKB6IEGM.js +2 -0
  35. package/dist-cli/chunks/chunk-PNGBWMQH.js +17 -0
  36. package/dist-cli/chunks/{chunk-SKNHJDYO.js → chunk-QMBYRPRK.js} +1 -1
  37. package/dist-cli/chunks/{chunk-UD5ILFN5.js → chunk-QUULF2II.js} +2 -2
  38. package/dist-cli/chunks/chunk-S4PJMUC7.js +2 -0
  39. package/dist-cli/chunks/{chunk-5XI3AB4I.js → chunk-TK2IPNHL.js} +2 -2
  40. package/dist-cli/chunks/chunk-U3JD6X75.js +4 -0
  41. package/dist-cli/chunks/{chunk-67K3WAEZ.js → chunk-W2XRHDQQ.js} +2 -2
  42. package/dist-cli/chunks/{chunk-T442FYM5.js → chunk-WPS3TIOB.js} +1 -1
  43. package/dist-cli/chunks/{chunk-Z2PBRNJP.js → chunk-WQXG4I5N.js} +2 -2
  44. package/dist-cli/chunks/{chunk-QI4VLQ3A.js → chunk-WZE6T3GT.js} +1 -1
  45. package/dist-cli/chunks/chunk-XWXFUFB2.js +1 -0
  46. package/dist-cli/chunks/{chunk-ZEVZN3S4.js → chunk-Y5CFIRLN.js} +2 -2
  47. package/dist-cli/chunks/{chunk-2ABGQIW7.js → chunk-Y66CDFAT.js} +1 -1
  48. package/dist-cli/chunks/chunk-YJMXGTP4.js +2 -0
  49. package/dist-cli/chunks/{chunk-6UJXRT7F.js → chunk-YKEBL6GE.js} +1 -1
  50. package/dist-cli/chunks/{chunk-5HNZO5AI.js → chunk-Z3I2I4IO.js} +3 -3
  51. package/dist-cli/chunks/{compat-DNQWSPFQ.js → compat-NBFWHK5S.js} +2 -2
  52. package/dist-cli/chunks/{config-ABR5BGUO.js → config-JEDQ3NHA.js} +2 -2
  53. package/dist-cli/chunks/control-IMWZVYC3.js +2 -0
  54. package/dist-cli/chunks/{cpu-profile-Y5YDH6X2.js → cpu-profile-MQPUSRHG.js} +2 -2
  55. package/dist-cli/chunks/{daemon-2Z4DAJT6.js → daemon-HOL7J3BI.js} +2 -2
  56. package/dist-cli/chunks/{debug-R36UPOJP.js → debug-LNVMIWD6.js} +20 -20
  57. package/dist-cli/chunks/demo-app-registry-4RFMJ4FM.js +2 -0
  58. package/dist-cli/chunks/{detox-FQJWEWLT.js → detox-EEZPH3DZ.js} +2 -2
  59. package/dist-cli/chunks/{device-SXKLDZEC.js → device-GVLYQI7X.js} +2 -2
  60. package/dist-cli/chunks/{diagnose-M7RKNI2H.js → diagnose-JQ7DPTSL.js} +2 -2
  61. package/dist-cli/chunks/drivers-JUW6JBWH.js +2 -0
  62. package/dist-cli/chunks/{electron-YUAKGT4H.js → electron-UDV6K3IH.js} +3 -3
  63. package/dist-cli/chunks/flow-JOW23WNH.js +2 -0
  64. package/dist-cli/chunks/{hints-SDD7L3VS.js → hints-46PJLATZ.js} +2 -2
  65. package/dist-cli/chunks/{home-paths-QMCX2227.js → home-paths-XD7AOYU7.js} +2 -2
  66. package/dist-cli/chunks/inspect-EDIKZ6O2.js +993 -0
  67. package/dist-cli/chunks/install-CCC3IF5S.js +2 -0
  68. package/dist-cli/chunks/{install-desktop-EKMYRDQH.js → install-desktop-CX6ATQTR.js} +3 -3
  69. package/dist-cli/chunks/{keys-ODG3TDUP.js → keys-CXQIYEVW.js} +2 -2
  70. package/dist-cli/chunks/{launch-7HUL745I.js → launch-DCFRKVD3.js} +3 -3
  71. package/dist-cli/chunks/{login-BJKQMJYT.js → login-HCIZL5GT.js} +4 -4
  72. package/dist-cli/chunks/{logout-7NG3KGJD.js → logout-7X2YHJY3.js} +2 -2
  73. package/dist-cli/chunks/{maestro-VFEUWV3Q.js → maestro-TY622MIW.js} +2 -2
  74. package/dist-cli/chunks/{preview-WZ6XNOBC.js → preview-DYI6ESOK.js} +2 -2
  75. package/dist-cli/chunks/{profile-DXFEZOHB.js → profile-7SXJEJTG.js} +2 -2
  76. package/dist-cli/chunks/{react-QP7PL5CZ.js → react-VGSDY766.js} +2 -2
  77. package/dist-cli/chunks/{record-AFE25EMH.js → record-7JX2SMVP.js} +2 -2
  78. package/dist-cli/chunks/runtime-FTOQD7QK.js +2 -0
  79. package/dist-cli/chunks/runtime-delivery-PWLODFCY.js +2 -0
  80. package/dist-cli/chunks/{screenshot-U6VFOVFW.js → screenshot-PTKY4UU4.js} +2 -2
  81. package/dist-cli/chunks/{screenshot-mode-HNGV3AFC.js → screenshot-mode-HSV7VY4G.js} +2 -2
  82. package/dist-cli/chunks/{screenshots-GYMRDUJR.js → screenshots-VY7VAGSV.js} +2 -2
  83. package/dist-cli/chunks/server-EDB3EK4K.js +35 -0
  84. package/dist-cli/chunks/setup-repo-S2GFZR7F.js +2 -0
  85. package/dist-cli/chunks/{skills-FT76ZVAV.js → skills-KEPQLCMR.js} +2 -2
  86. package/dist-cli/chunks/start-5CJTBNRM.js +23 -0
  87. package/dist-cli/chunks/store-SCRULNVS.js +2 -0
  88. package/dist-cli/chunks/telemetry-RC3OT67I.js +2 -0
  89. package/dist-cli/chunks/{test-AJPY2Q6W.js → test-REKHGKFE.js} +3 -3
  90. package/dist-cli/chunks/{three-mode-JZZVOMTG.js → three-mode-FZYHB4ZQ.js} +2 -2
  91. package/dist-cli/chunks/{timeline-GTSCF5P6.js → timeline-CWZAY52K.js} +2 -2
  92. package/dist-cli/chunks/upgrade-AIUJEF5F.js +4 -0
  93. package/dist-cli/chunks/upload-UDA5ITTE.js +2 -0
  94. package/dist-cli/chunks/what-happened-JSQQVQGE.js +15 -0
  95. package/dist-cli/chunks/{whoami-FOIMN6UC.js → whoami-5WUUPIRN.js} +2 -2
  96. package/dist-lib/agent-daemon-client.cjs +1 -1
  97. package/dist-lib/agent-events.cjs +1 -1
  98. package/dist-lib/agent-sessions.cjs +1 -1
  99. package/dist-lib/attached-projects.cjs +1 -1
  100. package/dist-lib/auth/shared-session.cjs +1 -1
  101. package/dist-lib/backend-origin.cjs +1 -1
  102. package/dist-lib/bridge-constants.cjs +1 -1
  103. package/dist-lib/cli-constants.cjs +1 -1
  104. package/dist-lib/config.cjs +1 -1
  105. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  106. package/dist-lib/home-paths.cjs +1 -1
  107. package/dist-lib/host/bridge-host.cjs +121 -83
  108. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  109. package/dist-lib/index.cjs +1 -1
  110. package/dist-lib/metro.cjs +1 -1
  111. package/dist-lib/profiles.cjs +1 -1
  112. package/dist-lib/render-mode.cjs +1 -1
  113. package/dist-lib/vite-base.cjs +147 -90
  114. package/dist-lib/vite.cjs +1 -1
  115. package/package.json +1 -1
  116. package/dist-cli/chunks/auto-bootstrap-DF4KYGPS.js +0 -2
  117. package/dist-cli/chunks/beta-AK25X3AU.js +0 -2
  118. package/dist-cli/chunks/chunk-23YMXBQ2.js +0 -1
  119. package/dist-cli/chunks/chunk-CB4PUMI2.js +0 -1
  120. package/dist-cli/chunks/chunk-FRE5TY3C.js +0 -1
  121. package/dist-cli/chunks/chunk-FX3PPKSJ.js +0 -2
  122. package/dist-cli/chunks/chunk-G62Q2MQI.js +0 -1
  123. package/dist-cli/chunks/chunk-GWQUPWVO.js +0 -2
  124. package/dist-cli/chunks/chunk-NKYTISAN.js +0 -4
  125. package/dist-cli/chunks/chunk-QD22CQLH.js +0 -5
  126. package/dist-cli/chunks/chunk-TR554AIH.js +0 -17
  127. package/dist-cli/chunks/control-DEHRU4XZ.js +0 -2
  128. package/dist-cli/chunks/demo-app-registry-DMMWYL7G.js +0 -2
  129. package/dist-cli/chunks/drivers-NSCX5CRA.js +0 -2
  130. package/dist-cli/chunks/flow-UQSRNEZD.js +0 -2
  131. package/dist-cli/chunks/inspect-6FPPW7GS.js +0 -1101
  132. package/dist-cli/chunks/install-TTH3PM3B.js +0 -2
  133. package/dist-cli/chunks/server-3Q22YYM6.js +0 -35
  134. package/dist-cli/chunks/setup-repo-NNDWIGZR.js +0 -2
  135. package/dist-cli/chunks/start-N573LFCF.js +0 -23
  136. package/dist-cli/chunks/store-6NTDGLPH.js +0 -2
  137. package/dist-cli/chunks/telemetry-SNZBIRGL.js +0 -2
  138. package/dist-cli/chunks/upload-UHTVCGGR.js +0 -2
  139. package/dist-cli/chunks/what-happened-N3AQ6I7O.js +0 -15
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.38 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{g as w,i as g,j as l}from"./chunk-ZEVZN3S4.js";var p="sootsim:settings",m=["errorReporting","colorScheme","a11yMode","a11yDepth","screenshotCanvas","screenshotBackground","screenshotText","screenshotPose","screenshotDynamicSize","agentProvider","onboardingComplete","betaConsentVersion","detailedTelemetry"];function S(){if(typeof window>"u")return null;let e=window.sootsimElectron;return e&&typeof e=="object"?e:null}function u(e){let t={};for(let n of m){if(!(n in e))continue;let r=e[n],o=g[n];o.validate&&!o.validate(r)||o.options&&!o.options.includes(r)||(t[n]=r)}return t}function h(e){let t={};for(let n of m)t[n]=e[n];return t}function C(){if(typeof localStorage>"u")return{};try{let e=localStorage.getItem(p);return e?u(JSON.parse(e)):{}}catch{return{}}}function P(e){if(!(typeof localStorage>"u"))try{localStorage.setItem(p,JSON.stringify(h(e)))}catch{}}function _(){let t=S()?.sharedConfig?.settings;return!t||typeof t!="object"?{}:u(t)}function V(e){let t=S();if(t?.writeSharedConfig)try{t.writeSharedConfig({settings:h(e)})}catch{}}function v(){if(typeof window>"u")return null;let e=window.__sootsimSharedConfig;return e&&typeof e=="object"?e:null}function E(){let e=v()?.settings;return!e||typeof e!="object"?{}:u(e)}function D(e){if(!v())return;let t={settings:h(e)};try{if(globalThis.__sootsimBridgeRequest?.writeSharedConfig?.(t))return}catch{}if(!(typeof fetch>"u"))try{fetch("/__sootsim/shared-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:!0}).catch(()=>{})}catch{}}function b(){let e=C(),t=E(),n=_();return{...e,...t,...n}}function k(e){P(e),V(e),D(e)}function R(e){if(typeof window>"u")return()=>{};let t=i=>{if(!(i.key!==p||i.newValue==null))try{e(u(JSON.parse(i.newValue)))}catch{}};window.addEventListener("storage",t);let n=S(),r;n?.onSharedConfigChanged&&(r=n.onSharedConfigChanged(i=>{let d=i?.settings;!d||typeof d!="object"||e(u(d))}));let c=globalThis.__sootsimBridgeRequest?.subscribeSharedConfig?.(i=>{let d=i?.settings;!d||typeof d!="object"||e(u(d))});return()=>{window.removeEventListener("storage",t),r?.(),c?.()}}var K=l(),s={...K,...b()},f=[],a=null;function y(){for(let e of f)e();k(s)}R(e=>{let t={...s},n=!1;for(let[r,o]of Object.entries(e)){let c=r;t[c]!==o&&(t[c]=o,n=!0)}if(n){s=t,a=null;for(let r of f)r()}});var I={get(e){return s[e]},set(e,t){let n=g[e];n.validate&&!n.validate(t)||n.options&&!n.options.includes(t)||s[e]!==t&&(s={...s,[e]:t},e==="deviceModel"&&(a=null),y())},getAll(){return s},apply(e){let t=!1,n={...s};for(let[r,o]of Object.entries(e)){if(o===void 0)continue;let c=r,i=g[c];i&&(i.validate&&!i.validate(o)||i.options&&!i.options.includes(o)||n[c]!==o&&(n[c]=o,t=!0))}t&&(s=n,a=null,y())},reset(){s=l(),a=null,y()},subscribe(e){return f.push(e),()=>{f=f.filter(t=>t!==e)}},getDeviceSpec(){return a||(a=w(s.deviceModel)),a},getA11yMode(){return s.a11yMode},setA11yMode(e){this.set("a11yMode",e)},getInspectMode(){return s.inspectMode},setInspectMode(e){this.set("inspectMode",e)}};export{I as a};
@@ -1,4 +0,0 @@
1
- /*! sootsim v0.1.38 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{A as R,C as y,i as p,r as w,t as x,y as v,z as d}from"./chunk-6UJXRT7F.js";import{spawn as I}from"child_process";import M from"crypto";import s from"fs";import l from"path";import{Readable as C}from"stream";import{pipeline as N}from"stream/promises";var E="https://sootbean.com",k="SOOTSIM_CDN_ORIGIN",D="SOOTSIM_RUNTIME_CHANNEL";function S(){try{let e=JSON.parse(s.readFileSync(x(),"utf8"));return e&&typeof e=="object"?e:{}}catch{return{}}}function h(e){let n=S();return(e||process.env[k]||n.cdnOrigin||E).replace(/\/+$/,"")}function $(e){let n=S();return e||process.env[D]||n.runtimeChannel||"stable"}function T(e){let n=new URL(`${h(e)}/runtimes/manifest.json`);return n.searchParams.set("t",String(Date.now())),n.toString()}function V(e,n){return`${h(n)}/runtimes/sootsim-runtime-${e}.tar.gz`}async function b(e){let n=T(e),r=await fetch(n,{headers:{Accept:"application/json"}});if(!r.ok)throw new Error(`manifest fetch failed: ${r.status} ${r.statusText} (${n})`);return await r.json()}function P(e,n={}){let r=$(n.channel),t=n.version||e.channels[r]?.latest;if(!t)throw new Error(`no version specified and channel '${r}' has no latest entry in the manifest`);let i=e.versions[t];if(!i)throw new Error(`version ${t} not found in manifest; available: ${Object.keys(e.versions).slice(-10).join(", ")||"(none)"}`);return{version:t,channel:r,entry:i}}async function _(e={}){v();let n=h(e.cdnOrigin),r=await b(n),{version:t,channel:i,entry:a}=P(r,e),o=p(t),c=e.setActive!==!1;if(!e.force&&s.existsSync(l.join(o,"index.html")))return c&&R(t),{version:t,channel:i,cdnOrigin:n,runtimeDir:o,installed:!1,activated:c,manifest:r};let g=a.tarball||V(t,n),m=l.join(w(),`sootsim-runtime-${t}.tar.gz`);process.stderr.write(`sootsim: downloading runtime ${t}\u2026
3
- `),await U(g,m),process.stderr.write(`sootsim: extracting runtime ${t}\u2026
4
- `);let f=await j(m);if(f!==a.sha256)throw s.rmSync(m,{force:!0}),new Error(`sha256 mismatch for runtime ${t}: expected ${a.sha256}, actual ${f}`);let u=l.join(l.dirname(o),`.installing-${t}-${process.pid}`);s.rmSync(u,{recursive:!0,force:!0}),s.mkdirSync(u,{recursive:!0});try{if(await A(m,u),!s.existsSync(l.join(u,"index.html")))throw new Error(`extracted tarball for runtime ${t} is missing index.html`);s.rmSync(o,{recursive:!0,force:!0}),s.renameSync(u,o)}catch(O){throw s.rmSync(u,{recursive:!0,force:!0}),O}return c&&R(t),{version:t,channel:i,cdnOrigin:n,runtimeDir:o,installed:!0,activated:c,manifest:r}}async function q(e={}){v();let n=h(e.cdnOrigin),r=$(e.channel),t=await b(n),i=t.channels[r]?.latest;if(!i)return{checked:!0,updated:!1,reason:`channel '${r}' has no latest runtime`,activeVersion:d()};if(!t.versions[i])return{checked:!0,updated:!1,reason:`manifest is missing version ${i}`,activeVersion:d(),latestVersion:i};let o=d(),c=o?p(o):null,g=c?s.existsSync(l.join(c,"index.html")):!1;if(!(!o||!g||y(i,o)>0))return{checked:!0,updated:!1,reason:"active runtime is current",activeVersion:o,latestVersion:i};let f=await _({version:i,channel:r,cdnOrigin:n,setActive:!1});return{checked:!0,updated:!0,activeVersion:i,latestVersion:i,install:f}}async function U(e,n){let r=await fetch(e);if(!r.ok||!r.body)throw new Error(`download failed: ${r.status} ${r.statusText} (${e})`);s.mkdirSync(l.dirname(n),{recursive:!0});let t=`${n}.partial`;try{await N(C.fromWeb(r.body),s.createWriteStream(t)),s.renameSync(t,n)}catch(i){try{s.unlinkSync(t)}catch{}throw i}}function j(e){return new Promise((n,r)=>{let t=M.createHash("sha256"),i=s.createReadStream(e);i.on("data",a=>t.update(a)),i.on("error",r),i.on("end",()=>n(t.digest("hex")))})}function A(e,n){return new Promise((r,t)=>{let i=I("tar",["-xzf",e,"-C",n],{stdio:["ignore","inherit","inherit"]});i.on("error",t),i.on("exit",a=>{a===0?r():t(new Error(`tar exited with code ${a}`))})})}export{E as a,h as b,b as c,_ as d,q as e};
@@ -1,5 +0,0 @@
1
- /*! sootsim v0.1.38 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as y,c as C}from"./chunk-E473YTRQ.js";import{a as x}from"./chunk-VVUEWU2P.js";import{exec as D}from"child_process";import _ from"http";import T from"net";import{promisify as A}from"util";var P=A(D),k=250,E=120;function R(e,r=E){return new Promise(s=>{let t=new T.Socket,o=!1,i=a=>{o||(o=!0,t.destroy(),s(a))};t.setTimeout(r),t.once("connect",()=>i(!0)),t.once("timeout",()=>i(!1)),t.once("error",()=>i(!1)),t.connect(e,"localhost")})}function h(e,r,s="GET",t=k,o={}){return new Promise(i=>{let a=_.request({hostname:"localhost",port:e,path:r,method:s,timeout:t,headers:o},n=>{let c="";n.on("data",l=>c+=l.toString());let u=(()=>{let l=n.headers["content-type"];if(typeof l=="string")return l;if(Array.isArray(l))return l[0]})();n.on("end",()=>i({statusCode:n.statusCode||0,body:c,contentType:u}))});a.on("error",()=>i(null)),a.setTimeout(t,()=>{a.destroy(),i(null)}),a.end()})}var M=[8081,8082,8083,8084,8085,8086,3e3,3001,19e3].map(e=>({port:e,pid:0}));function S(e,r){return!(e<=0||e>=2e4||r.has(e)||e>=5170&&e<=5200)}async function L(e=[]){let r=new Set(e);try{let{stdout:s}=await P("lsof -iTCP -sTCP:LISTEN -P -n 2>/dev/null | grep -E '^(node|bun)'",{encoding:"utf8",timeout:2e3});if(s.trim()){let t=new Map;for(let o of s.trim().split(`
3
- `)){let i=o.trim().split(/\s+/);if(i.length<9)continue;let a=Number(i[1]),c=i[8].match(/:(\d+)$/);if(!c)continue;let u=Number(c[1]);S(u,r)&&(t.has(u)||t.set(u,a))}if(t.size>0)return[...t.entries()].map(([o,i])=>({port:o,pid:i}))}}catch{}try{let{stdout:s}=await P(`ss -tlnp 2>/dev/null | grep -E '"(node|bun)"'`,{encoding:"utf8",timeout:2e3});if(s.trim()){let t=new Map;for(let o of s.trim().split(`
4
- `)){let i=o.match(/:(\d+)\s/),a=o.match(/pid=(\d+)/);if(!i)continue;let n=Number(i[1]),c=a?Number(a[1]):0;S(n,r)&&(t.has(n)||t.set(n,c))}if(t.size>0)return[...t.entries()].map(([o,i])=>({port:o,pid:i}))}}catch{}return M.filter(s=>S(s.port,r))}var v=new Map;async function N(e){if(e<=0)return null;let r=v.get(e);if(r)return r;try{let{stdout:s}=await P(`lsof -p ${e} -a -d cwd -Fn 2>/dev/null`,{encoding:"utf8",timeout:1500});for(let t of s.split(`
5
- `))if(t.startsWith("n")&&t.length>1){let o=t.slice(1).trim();if(o)return v.set(e,o),o}}catch{}return null}function $(e,r){return{port:e,framework:r,bundleUrl:m(e,`http://localhost:${e}/index.bundle?platform=ios&dev=true&hot=true&minify=false`),hmrUrl:`ws://localhost:${e}/hot`,lastSeen:Date.now()}}function m(e,r){let s=x.find(o=>o.preferredPort===e),t=s?.runtimeConfig?y(r,s.runtimeConfig):r;return C(t)}function I(e){return e.includes("/node_modules/one/metro-entry.bundle")}function O(e){try{let r=JSON.parse(e);return r&&typeof r=="object"?r:null}catch{return null}}function w(e,r,s){if(!r)return e;try{let t=JSON.parse(r.body),o=t?.extra?.expoClient||t?.extra||{};o.name&&(e.projectName=o.name),o.ios?.bundleIdentifier&&(e.bundleId=o.ios.bundleIdentifier),e.framework==="metro"&&o.sdkVersion&&(e.framework="expo");let i=t?.launchAsset?.url;i&&!e.patched&&!I(e.bundleUrl)&&(e.bundleUrl=m(e.port,i));let a=o.iconUrl||o.ios?.iconUrl||o.icon||o.ios?.icon;if(a)if(e.iconPath=a,s)if(a.startsWith("http"))e.iconUrl=s(a);else{let n=a.replace(/^\.\//,"");e.iconUrl=s(`http://localhost:${e.port}/assets/${n}`)}else e.iconUrl=a.startsWith("http")?a:`http://localhost:${e.port}/assets/${a.replace(/^\.\//,"")}`}catch{}return e}var d=new Set,f=new Set,b=new Set;async function j(e,r){if(!await R(e))return null;let s="/node_modules/one/metro-entry.bundle?platform=ios&dev=true",[t,o,i,a,n]=await Promise.all([d.has(e)?Promise.resolve(null):h(e,"/__soot/"),h(e,"/status"),h(e,s,"HEAD"),b.has(e)?Promise.resolve(null):h(e,"/","GET",k,{"expo-platform":"ios"}),f.has(e)?Promise.resolve(null):h(e,"/_expo/status")]);n&&n.statusCode===200?f.delete(e):f.has(e)||f.add(e);let c=a?O(a.body):null,u=typeof c?.launchAsset?.url=="string"?c.launchAsset.url:null,l=c?.extra?.expoClient||c?.extra||{};if(c&&(u||typeof l.name=="string")){d.add(e);let p=u||`http://localhost:${e}/index.bundle?platform=ios&dev=true&hot=true&minify=false`,U=p.includes("/one/metro-entry.bundle")?"one":"expo";return w({port:e,framework:U,bundleUrl:m(e,p),hmrUrl:`ws://localhost:${e}/hot`,lastSeen:Date.now()},a,r)}return i&&i.statusCode>0&&i.statusCode<400&&/application\/javascript/i.test(i.contentType||"")?(d.add(e),b.add(e),w({port:e,framework:"one",bundleUrl:m(e,`http://localhost:${e}${s}&minify=false`),hmrUrl:`ws://localhost:${e}/hot`,lastSeen:Date.now()},a,r)):o&&o.body.includes("packager-status:running")?(d.add(e),w($(e,n&&n.statusCode===200?"expo":"metro"),a,r)):t&&t.statusCode===200&&t.body.includes("sootsim-patched")?(d.delete(e),w({port:e,framework:"one",bundleUrl:m(e,`http://localhost:${e}/__soot/bundle.js`),hmrUrl:`ws://localhost:${e}/hot`,lastSeen:Date.now(),patched:!0},a,r)):(d.add(e),null)}function H(e){let r=e.projectName?.trim().toLowerCase();return!!(r==="soot"||r==="sootsim"||e.bundleId?.trim().toLowerCase()?.startsWith("dev.soot"))}var g=new Map,B=3e4,G=1500;function W(e){return!e||e.framework==="metro"||e.framework==="unknown"}function z(e){return e?m(e.port,e.bundleUrl)===e.bundleUrl:!0}function F(e,r,s=Date.now()){if(r===0||e.pid!==r||!z(e.result))return!1;let t=s-e.cachedAt;return!(e.result===null&&t>=B||W(e.result)&&t>=G)}async function Z(e={}){let r=await L(e.excludePorts),s=new Set(r.map(n=>n.port));for(let n of[...g.keys()])s.has(n)||g.delete(n);for(let n of[...d])s.has(n)||d.delete(n);for(let n of[...f])s.has(n)||f.delete(n);for(let n of[...b])s.has(n)||b.delete(n);let t=[],o=[];for(let{port:n,pid:c}of r){let u=g.get(n);if(u&&F(u,c)){u.result&&t.push(u.result);continue}u&&u.pid!==c&&(d.delete(n),f.delete(n),b.delete(n)),o.push({port:n,pid:c})}o.length>0&&(await Promise.all(o.map(c=>j(c.port,e.buildIconProxyUrl)))).forEach((c,u)=>{let{port:l,pid:p}=o[u];p!==0&&g.set(l,{pid:p,result:c,cachedAt:Date.now()}),c&&t.push(c)});let i=new Map;for(let{port:n,pid:c}of r)c>0&&i.set(n,c);await Promise.all(t.map(async n=>{let c=i.get(n.port);if(!c)return;n.pid=c;let u=await N(c);u&&(n.cwd=u)}));let a=new Set(i.values());for(let n of[...v.keys()])a.has(n)||v.delete(n);return t.filter(n=>!H(n))}export{Z as a};
@@ -1,17 +0,0 @@
1
- /*! sootsim v0.1.38 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as T,c as P,e as v}from"./chunk-2ABGQIW7.js";import{E as B,F as k}from"./chunk-6UJXRT7F.js";import{WebSocket as I}from"ws";function C(){let e=B();return e&&k(e)?e.bridgePort:7668}var h=class extends Error{lock;constructor(t,s){super(t),this.name="BridgeSimLockedError",this.lock=s}};function x(e){return e==="flag"?"via --sim":e==="saved"?"saved via `sootsim use`":"primary fallback \u2014 no sim pinned"}function $(e,t={}){let s=new Set,c=t.port??C(),l=t.commandTimeoutMs??15e3,d,u="none",p=new Set(t.stripBooleanFlags??[]),g=new Set(t.stripValueFlags??[]);for(let i=0;i<e.length;i++){let a=e[i];if(a==="--port"||a==="-p"){s.add(i),i+1<e.length&&(s.add(i+1),c=Number(e[i+1])),i++;continue}if(a.startsWith("--port=")){s.add(i),c=Number(a.slice(7));continue}if(a==="--timeout"){s.add(i),i+1<e.length&&(s.add(i+1),l=Number(e[i+1])),i++;continue}if(a==="--sim"){s.add(i),i+1<e.length&&(s.add(i+1),d=e[i+1]?.trim()||void 0,u="flag"),i++;continue}if(p.has(a)){s.add(i);continue}g.has(a)&&(s.add(i),i+1<e.length&&s.add(i+1),i++)}if(!d){let i=P();i&&(d=i.trim()||void 0,u="saved")}return{positional:e.filter((i,a)=>!s.has(a)),wsPort:c,simId:d,simIdSource:u,commandTimeoutMs:l}}function O(e,t={}){let s=1,c=t.commandTimeoutMs??15e3,l=new Map,d=new I(`ws://localhost:${e}`),u=t.simId?{key:`sim:${t.simId}`,source:"explicit-sim-id",stable:!0}:T(),p=new Promise((n,r)=>{d.on("open",()=>{try{d.send(JSON.stringify({type:"bridge:hello",id:0,cliIdentityKey:u.key,cliIdentitySource:u.source,cliLabel:t.cliLabel}))}catch{}n()}),d.on("error",o=>r(new Error(`could not connect to ws://localhost:${e}: ${o.message}`)))}),g=!1,i=!1;function a(n,r){if(i||process.env.SOOTSIM_QUIET_TARGET_NOTICE==="1"||n.startsWith("bridge:")||n==="focus"||n==="close")return;i=!0;let o=r??"primary",m=x(r?t.simIdSource:"none");process.stderr.write(` \u2192 ${o} (${m})
3
- `)}return d.on("message",n=>{let r;try{r=JSON.parse(n.toString())}catch{return}if(r.id===0)return;let o=l.get(r.id);o&&(l.delete(r.id),r.i>0&&!g&&(g=!0,process.stderr.write(`
4
- \u26A0 ${r.i} other CLI identity/identities are driving this sim
5
- taps, scrolls, and keyboard input from multiple agents will collide on
6
- the same screen state (this is not a bridge throughput limit).
7
- use \`sootsim open --new\` for an isolated sim per agent.
8
-
9
- `)),r.error?r.o?o.reject(new h(r.error,r.o)):o.reject(new Error(r.error)):o.resolve(r.result))}),d.on("close",(n,r)=>{let o=r?.toString()||"connection closed";for(let[m,y]of l)l.delete(m),y.reject(new Error(`sim disconnected: ${o} (code ${n})`))}),{async send(n){let r=async o=>{await p;let m=s++;return new Promise((y,w)=>{let S=setTimeout(()=>{l.delete(m),w(new Error(`command timed out after ${Math.round(c/1e3)}s`))},c);l.set(m,{resolve:b=>{clearTimeout(S),y(b)},reject:b=>{clearTimeout(S),w(b)}});let f={...n,id:m};f.simId===void 0&&o&&(f.simId=o),a(n.type??"",f.simId),d.send(JSON.stringify(f))})};try{return await r(t.simId)}catch(o){let m=o instanceof Error?o.message:String(o);if(t.fallbackOnMissingSimId&&t.simId&&n.simId===void 0&&m===`no sim connected with id ${t.simId}`)return v(),process.stderr.write(` \u26A0 saved sim ${t.simId} is gone \u2014 falling back to primary
10
- pin a sim with: sootsim use <sim>
11
- `),i=!1,r(void 0);throw o}},async listSims(){let n=await this.send({type:"bridge:list-sims"});return Array.isArray(n)?n:[]},async openUrl(n,r={}){return this.send({type:"bridge:open",url:n,newWindow:r.newWindow===!0})},async focusSim(n){return this.send({type:"focus",simId:n})},async closeSim(n){return this.send({type:"close",simId:n})},async claim(n,r={}){return await this.send({type:"bridge:claim",simId:n,force:r.force===!0})},close(){try{d.readyState===I.OPEN&&d.send(JSON.stringify({type:"bridge:bye",id:0}))}catch{}d.close();let n=setTimeout(()=>{d.readyState!==I.CLOSED&&d.terminate()},250)}}}function F(e){return O(e.wsPort,{commandTimeoutMs:e.commandTimeoutMs,simId:e.simId,fallbackOnMissingSimId:e.simIdSource==="saved",simIdSource:e.simIdSource})}async function N(e){try{return await e.send({type:"evaluate",code:"document.hidden"})===!0?(process.stderr.write(`
12
- \u26A0 target sim is hidden (document.hidden = true)
13
- animations and rAF callbacks are throttled \u2014 coordinates may be wrong
14
- and launch/transition animations will not complete.
15
- bring the sim to the foreground or use: sootsim debug eval "window.focus()"
16
-
17
- `),{hidden:!0,warned:!0}):{hidden:!1,warned:!1}}catch{return{hidden:!1,warned:!1}}}async function R(e,t,s={}){let c={type:"evaluate",code:t};return s.acquireLock&&(c.acquireLock=!0),e.send(c)}async function _(e,t,...s){return e.send({type:"call",path:t,args:s})}async function D(e,t,...s){return e.send({type:"call",path:t,args:s,acquireLock:!0})}export{C as a,h as b,$ as c,O as d,F as e,N as f,R as g,_ as h,D as i};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.38 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{c as a,d as b,e as c,f as d,g as e,h as f,i as g,j as h,k as i,l as j,m as k,n as l,o as m}from"./chunk-CHMHTTI7.js";import"./chunk-E473YTRQ.js";import"./chunk-SKNHJDYO.js";import"./chunk-JJVZMGRM.js";import"./chunk-QI4VLQ3A.js";import"./chunk-5XI3AB4I.js";import"./chunk-FRE5TY3C.js";import"./chunk-FX3PPKSJ.js";import"./chunk-G23GIRBM.js";import"./chunk-TR554AIH.js";import"./chunk-2ABGQIW7.js";import"./chunk-23YMXBQ2.js";import"./chunk-6UJXRT7F.js";import"./chunk-VIEK76DX.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.38 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-VVUEWU2P.js";import"./chunk-VIEK76DX.js";export{a as APPS};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.38 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import"./chunk-G62Q2MQI.js";import{a,b,c,d,e,f,g,h,i}from"./chunk-JJVZMGRM.js";import"./chunk-QI4VLQ3A.js";import"./chunk-5XI3AB4I.js";import"./chunk-FRE5TY3C.js";import"./chunk-G23GIRBM.js";import"./chunk-6UJXRT7F.js";import"./chunk-VIEK76DX.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.38 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-NSZBULGG.js";import"./chunk-QD22CQLH.js";import"./chunk-H6CG42HE.js";import"./chunk-CB4PUMI2.js";import"./chunk-FCOCFEBU.js";import"./chunk-LNRBXCUI.js";import"./chunk-CHMHTTI7.js";import"./chunk-E473YTRQ.js";import"./chunk-SKNHJDYO.js";import"./chunk-JJVZMGRM.js";import"./chunk-QI4VLQ3A.js";import"./chunk-5XI3AB4I.js";import"./chunk-VVUEWU2P.js";import"./chunk-ARH3T5NK.js";import"./chunk-UD5ILFN5.js";import"./chunk-FRE5TY3C.js";import"./chunk-Z2PBRNJP.js";import"./chunk-FX3PPKSJ.js";import"./chunk-GWQUPWVO.js";import"./chunk-ZEVZN3S4.js";import"./chunk-67K3WAEZ.js";import"./chunk-BEY2QVU5.js";import"./chunk-G23GIRBM.js";import"./chunk-TR554AIH.js";import"./chunk-2ABGQIW7.js";import"./chunk-23YMXBQ2.js";import"./chunk-6UJXRT7F.js";import"./chunk-VIEK76DX.js";export{b as discoverSootsimUrl,a as parseFlowFile,d as runFlow,c as runFlowPlayback};