sootsim 0.1.96 → 0.1.98

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 (145) hide show
  1. package/dist-cli/bin.js +3 -3
  2. package/dist-cli/chunks/{agent-THLEIKJY.js → agent-AV7UQHGA.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-XWJ3NNXE.js → agent-wrapper-5W2PDZZX.js} +2 -2
  4. package/dist-cli/chunks/{assert-5EBBIN22.js → assert-QCTKI4I6.js} +2 -2
  5. package/dist-cli/chunks/auto-bootstrap-ZD2JO3X2.js +2 -0
  6. package/dist-cli/chunks/beta-LV2FJWCK.js +2 -0
  7. package/dist-cli/chunks/{chunk-ZMD7CG5X.js → chunk-36JO37LQ.js} +1 -1
  8. package/dist-cli/chunks/{chunk-KZQGDNXM.js → chunk-3QFEGZJA.js} +1 -1
  9. package/dist-cli/chunks/{chunk-BRRSNJH2.js → chunk-3RW36LEF.js} +2 -2
  10. package/dist-cli/chunks/chunk-4IZWBEOU.js +2 -0
  11. package/dist-cli/chunks/chunk-4QCN4DMR.js +1 -0
  12. package/dist-cli/chunks/{chunk-DEOWQAWI.js → chunk-55ZUACVB.js} +2 -2
  13. package/dist-cli/chunks/{chunk-OXULHPED.js → chunk-5GQR5BJ7.js} +2 -2
  14. package/dist-cli/chunks/{chunk-CFC2CUZH.js → chunk-5WAGGDFQ.js} +1 -1
  15. package/dist-cli/chunks/{chunk-KSYI5F5W.js → chunk-6UGXIH6X.js} +2 -2
  16. package/dist-cli/chunks/{chunk-CSWXAX5Z.js → chunk-BQR62XGM.js} +1 -1
  17. package/dist-cli/chunks/chunk-CBTPTUJA.js +1 -0
  18. package/dist-cli/chunks/{chunk-FNE7Y7HP.js → chunk-CLEO4DEV.js} +6 -6
  19. package/dist-cli/chunks/{chunk-Z5W64CPI.js → chunk-DLENSNEY.js} +2 -2
  20. package/dist-cli/chunks/{chunk-I4NSHBCP.js → chunk-DZYZQCET.js} +2 -2
  21. package/dist-cli/chunks/{chunk-EADVJDBH.js → chunk-ERDQVO6E.js} +2 -2
  22. package/dist-cli/chunks/{chunk-EVCAO4LJ.js → chunk-F2WCFGRK.js} +2 -2
  23. package/dist-cli/chunks/{chunk-4JILXZEK.js → chunk-FNG7EEFU.js} +2 -2
  24. package/dist-cli/chunks/{chunk-I7IO3QJC.js → chunk-GFIXAGFA.js} +1 -1
  25. package/dist-cli/chunks/{chunk-PP4RVVJ4.js → chunk-I43WF32H.js} +1 -1
  26. package/dist-cli/chunks/{chunk-APRBFQOQ.js → chunk-ISIO4SR2.js} +2 -2
  27. package/dist-cli/chunks/{chunk-XB5XCNDT.js → chunk-J2XMTE4K.js} +2 -2
  28. package/dist-cli/chunks/{chunk-OWGWD5UJ.js → chunk-JE5YNG3L.js} +1 -1
  29. package/dist-cli/chunks/chunk-JTBFEQH4.js +12 -0
  30. package/dist-cli/chunks/{chunk-K7M7ZCFP.js → chunk-KJUP4MG5.js} +1 -1
  31. package/dist-cli/chunks/{chunk-XBQX2VHN.js → chunk-L76C6UV4.js} +1 -1
  32. package/dist-cli/chunks/chunk-LSPJL5XI.js +1 -0
  33. package/dist-cli/chunks/chunk-LWUHOZLQ.js +2 -0
  34. package/dist-cli/chunks/{chunk-2DM5NDPK.js → chunk-MGZKAJV6.js} +2 -2
  35. package/dist-cli/chunks/{chunk-WMFMWFN6.js → chunk-PH4GQWKG.js} +1 -1
  36. package/dist-cli/chunks/chunk-POQEZLEI.js +2 -0
  37. package/dist-cli/chunks/{chunk-LP2SP3NM.js → chunk-PZQVLWTL.js} +2 -2
  38. package/dist-cli/chunks/{chunk-5IGO6XGX.js → chunk-Q4OS7YTL.js} +3 -3
  39. package/dist-cli/chunks/{chunk-MWTL4ZFM.js → chunk-RP7NLZ26.js} +2 -2
  40. package/dist-cli/chunks/{chunk-PQHLVPEJ.js → chunk-RVEZYFCE.js} +2 -2
  41. package/dist-cli/chunks/{chunk-DEOZXXWZ.js → chunk-S5IHTZL6.js} +2 -2
  42. package/dist-cli/chunks/{chunk-7FQX6FEW.js → chunk-SNP2YECI.js} +1 -1
  43. package/dist-cli/chunks/{chunk-U77ESDGH.js → chunk-UHQCVRXY.js} +1 -1
  44. package/dist-cli/chunks/{chunk-HXHDO2DR.js → chunk-V3VDLHQ6.js} +2 -2
  45. package/dist-cli/chunks/{chunk-XZJ3PTB6.js → chunk-VAMD4BL3.js} +35 -33
  46. package/dist-cli/chunks/{chunk-BQXJ6AF3.js → chunk-YVPVF26I.js} +1 -1
  47. package/dist-cli/chunks/{chunk-K3THC66A.js → chunk-Z5VQYEPL.js} +3 -3
  48. package/dist-cli/chunks/{chunk-I7OGBC6P.js → chunk-ZCV4Z3DO.js} +2 -2
  49. package/dist-cli/chunks/{chunk-UJNQQNOM.js → chunk-ZIFZANWB.js} +1 -1
  50. package/dist-cli/chunks/{chunk-MBOXFWCL.js → chunk-ZZKSTNCP.js} +2 -2
  51. package/dist-cli/chunks/cli-version-XZIL5X5T.js +2 -0
  52. package/dist-cli/chunks/{compat-WHW7I5MM.js → compat-NUHFYRSF.js} +3 -3
  53. package/dist-cli/chunks/{config-DYCJ2ZMU.js → config-S6TVKOQJ.js} +2 -2
  54. package/dist-cli/chunks/{control-LOVLXRGL.js → control-UZNJNYVG.js} +2 -2
  55. package/dist-cli/chunks/cpu-profile-XU4UXBGY.js +2 -0
  56. package/dist-cli/chunks/{daemon-SCE66FRG.js → daemon-SYFY7U2Q.js} +2 -2
  57. package/dist-cli/chunks/{debug-NNNDY5PS.js → debug-S2KZ7ZZ4.js} +3 -3
  58. package/dist-cli/chunks/{detox-4MCKTJ5N.js → detox-F5FVX7BH.js} +2 -2
  59. package/dist-cli/chunks/{device-74PRSXM3.js → device-UKDPJDNQ.js} +2 -2
  60. package/dist-cli/chunks/{diagnose-PKRI76BG.js → diagnose-SHADVUWO.js} +2 -2
  61. package/dist-cli/chunks/drivers-WHUFSQK6.js +2 -0
  62. package/dist-cli/chunks/{electron-FQENK33B.js → electron-WIZUNPGZ.js} +3 -3
  63. package/dist-cli/chunks/flow-L54IDEQT.js +2 -0
  64. package/dist-cli/chunks/help-ORII3NB6.js +2 -0
  65. package/dist-cli/chunks/{hints-FYJOB6LV.js → hints-ANBJHAN3.js} +2 -2
  66. package/dist-cli/chunks/{home-paths-ERNVUXFW.js → home-paths-OUI7LTGB.js} +2 -2
  67. package/dist-cli/chunks/{inspect-HPY3ZFIA.js → inspect-6AIEW43W.js} +3 -3
  68. package/dist-cli/chunks/install-TYZARIPO.js +2 -0
  69. package/dist-cli/chunks/{install-desktop-E5HOJ2MU.js → install-desktop-4AZ2JWLE.js} +3 -3
  70. package/dist-cli/chunks/{keys-ASQVWFUI.js → keys-XZX57JNB.js} +2 -2
  71. package/dist-cli/chunks/{launch-YCXPAOWO.js → launch-RQZQV7UR.js} +3 -3
  72. package/dist-cli/chunks/{login-BWUINOUR.js → login-DW5NMQZP.js} +4 -4
  73. package/dist-cli/chunks/{logout-C7DKI2DA.js → logout-ADR77ELR.js} +2 -2
  74. package/dist-cli/chunks/{maestro-ZC4W3AYD.js → maestro-SUVQXANM.js} +2 -2
  75. package/dist-cli/chunks/{preview-YX4ZPRFC.js → preview-CKCO2N4V.js} +2 -2
  76. package/dist-cli/chunks/{profile-T4EWPIDJ.js → profile-5DA3PCBY.js} +2 -2
  77. package/dist-cli/chunks/{react-XJ7NDLLM.js → react-Z2RWJFRM.js} +2 -2
  78. package/dist-cli/chunks/{record-YEHHQLFM.js → record-CVEAYVH7.js} +2 -2
  79. package/dist-cli/chunks/runtime-DSZU6QQH.js +2 -0
  80. package/dist-cli/chunks/{runtime-delivery-QQDUMUR6.js → runtime-delivery-KPATO3DV.js} +2 -2
  81. package/dist-cli/chunks/{screenshot-LQG5G2DA.js → screenshot-WVJT2TDY.js} +2 -2
  82. package/dist-cli/chunks/{screenshot-mode-C4IB4Z42.js → screenshot-mode-OLKM4SDV.js} +2 -2
  83. package/dist-cli/chunks/{screenshots-AAZCSLWQ.js → screenshots-FTRBR6KJ.js} +2 -2
  84. package/dist-cli/chunks/{server-647HIDMX.js → server-JZOLCNYX.js} +2 -2
  85. package/dist-cli/chunks/setup-repo-7EXOSCGC.js +2 -0
  86. package/dist-cli/chunks/{skills-2XPOUECH.js → skills-JUTRDTBM.js} +2 -2
  87. package/dist-cli/chunks/{start-OY3XIHRY.js → start-TFEX2AGE.js} +4 -4
  88. package/dist-cli/chunks/store-7GCZMEN5.js +2 -0
  89. package/dist-cli/chunks/telemetry-FE3PJGFM.js +2 -0
  90. package/dist-cli/chunks/{test-SGN6UKC3.js → test-GDQFRLG5.js} +3 -3
  91. package/dist-cli/chunks/{three-mode-INZXKQXQ.js → three-mode-KEJUXBNY.js} +2 -2
  92. package/dist-cli/chunks/{timeline-BBPEKOQX.js → timeline-I6GKU236.js} +2 -2
  93. package/dist-cli/chunks/{upgrade-UB63PNOG.js → upgrade-5DN5DOY6.js} +2 -2
  94. package/dist-cli/chunks/upload-WYMSDACQ.js +2 -0
  95. package/dist-cli/chunks/{web-HJQCTT2D.js → web-TWR5HOUF.js} +2 -2
  96. package/dist-cli/chunks/{what-happened-K4Q4TA77.js → what-happened-UY5JDEKR.js} +2 -2
  97. package/dist-cli/chunks/{whoami-UL3GJZ7O.js → whoami-6C56SNN6.js} +2 -2
  98. package/dist-lib/agent-daemon-client.cjs +1 -1
  99. package/dist-lib/agent-events.cjs +1 -1
  100. package/dist-lib/agent-sessions.cjs +1 -1
  101. package/dist-lib/attached-projects.cjs +1 -1
  102. package/dist-lib/auth/shared-session.cjs +1 -1
  103. package/dist-lib/backend-origin.cjs +1 -1
  104. package/dist-lib/beta.cjs +1 -1
  105. package/dist-lib/beta.mjs +1 -1
  106. package/dist-lib/bridge-constants.cjs +1 -1
  107. package/dist-lib/cli-constants.cjs +1 -1
  108. package/dist-lib/config.cjs +1 -1
  109. package/dist-lib/detox/index.cjs +1 -1
  110. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  111. package/dist-lib/home-paths.cjs +1 -1
  112. package/dist-lib/host/bridge-host.cjs +1 -1
  113. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  114. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  115. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  116. package/dist-lib/host/websocket-proxy.cjs +1 -1
  117. package/dist-lib/index.cjs +1 -1
  118. package/dist-lib/metro.cjs +1 -1
  119. package/dist-lib/profiles.cjs +1 -1
  120. package/dist-lib/render-mode.cjs +1 -1
  121. package/dist-lib/scripts/demo-app-registry.cjs +1 -1
  122. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  123. package/dist-lib/skills.cjs +1 -1
  124. package/dist-lib/vite.cjs +1 -1
  125. package/package.json +1 -1
  126. package/dist-cli/chunks/auto-bootstrap-DVFOMCEZ.js +0 -2
  127. package/dist-cli/chunks/beta-R2WUZCJS.js +0 -2
  128. package/dist-cli/chunks/chunk-3VSB6OII.js +0 -2
  129. package/dist-cli/chunks/chunk-6JR6SWCP.js +0 -2
  130. package/dist-cli/chunks/chunk-6T43X22G.js +0 -1
  131. package/dist-cli/chunks/chunk-BOH75UIE.js +0 -1
  132. package/dist-cli/chunks/chunk-GGZNA2XC.js +0 -12
  133. package/dist-cli/chunks/chunk-L4X4SMSR.js +0 -1
  134. package/dist-cli/chunks/chunk-VZHEFRKG.js +0 -2
  135. package/dist-cli/chunks/cli-version-GSTCBKXC.js +0 -2
  136. package/dist-cli/chunks/cpu-profile-DLIX3UYI.js +0 -2
  137. package/dist-cli/chunks/drivers-SLW54QDC.js +0 -2
  138. package/dist-cli/chunks/flow-TFUKEFSE.js +0 -2
  139. package/dist-cli/chunks/help-GP4PPEMD.js +0 -2
  140. package/dist-cli/chunks/install-5RNYQU7L.js +0 -2
  141. package/dist-cli/chunks/runtime-KEY6HZLH.js +0 -2
  142. package/dist-cli/chunks/setup-repo-HRQE6H7G.js +0 -2
  143. package/dist-cli/chunks/store-HLRSKWYM.js +0 -2
  144. package/dist-cli/chunks/telemetry-EOMJAULC.js +0 -2
  145. package/dist-cli/chunks/upload-5WPINCEU.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{A as T,B as y,M as x,z as F}from"./chunk-UJNQQNOM.js";import{c as S,e as N}from"./chunk-KSYI5F5W.js";import{b as k}from"./chunk-OWGWD5UJ.js";import"./chunk-VZHEFRKG.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.js";function _(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--since"&&t+1<n.length){e.push(t,t+1);let s=n[t+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let a=Number(l[1]),m=l[2]??"ms",$=m==="s"?a*1e3:m==="m"?a*6e4:a;return{since:Date.now()-$,consumed:e}}let o=Number(s);if(Number.isFinite(o)&&o>1e12)return{since:o,consumed:e}}return{consumed:e}}function K(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--kinds"&&t+1<n.length)return e.push(t,t+1),{kinds:n[t+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:e};return{consumed:e}}function O(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--limit"&&t+1<n.length){e.push(t,t+1);let s=Number(n[t+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:e}}return{consumed:e}}function j(n,e){if(e===null)return new Date(n).toLocaleTimeString();let t=(n-e)/1e3;return`${t>=0?"+":""}${t.toFixed(2)}s`}function B(n,e){switch(n){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"layout":return`${e.kind??"?"} ${e.testID??e.type??""}${e.skipped?` skipped:${e.reason??"unknown"}`:""}`;case"react-commit":{let t=e.slowest;return`${e.fiberCount??"?"} fibers ${e.durationMs??"?"}ms${t?.displayName?` \xB7 ${t.displayName} ${t.durationMs??"?"}ms`:""}`}case"reanimated":case"animation":return`${e.kind??""} ${e.target??""}${e.durationMs?` ${e.durationMs}ms`:""}`}}function A(n,e){let t=j(n.t,e).padStart(8),s=n.context.padEnd(6),l=`[${n.kind}]`.padEnd(15),o="",a=n.data;return a&&typeof a=="object"&&(o=B(n.kind,a)),` ${t} ${s} ${l} ${o}`}function M(n){let e=[],t={label:"initial state",events:[],startedAt:n[0]?.t??null};e.push(t);for(let s of n)if(t.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,o=l?.phase;if(!o||o==="enter"||o==="appear"||o==="active"){let a=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;e.length===1&&t.events.length===1?t.label=`${s.kind}: ${a}`:(t={label:`${s.kind}: ${a}`,events:[],startedAt:s.t},e.push(t))}}return e}async function J(n,e){let t=S(n,{port:e.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
1
+ /*! sootsim v0.1.98 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{A as T,B as y,M as x,z as F}from"./chunk-ZIFZANWB.js";import{c as S,e as N}from"./chunk-6UGXIH6X.js";import{b as k}from"./chunk-JE5YNG3L.js";import"./chunk-POQEZLEI.js";import"./chunk-KJUP4MG5.js";import"./chunk-UHQCVRXY.js";function _(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--since"&&t+1<n.length){e.push(t,t+1);let s=n[t+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let a=Number(l[1]),m=l[2]??"ms",$=m==="s"?a*1e3:m==="m"?a*6e4:a;return{since:Date.now()-$,consumed:e}}let o=Number(s);if(Number.isFinite(o)&&o>1e12)return{since:o,consumed:e}}return{consumed:e}}function K(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--kinds"&&t+1<n.length)return e.push(t,t+1),{kinds:n[t+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:e};return{consumed:e}}function O(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--limit"&&t+1<n.length){e.push(t,t+1);let s=Number(n[t+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:e}}return{consumed:e}}function j(n,e){if(e===null)return new Date(n).toLocaleTimeString();let t=(n-e)/1e3;return`${t>=0?"+":""}${t.toFixed(2)}s`}function B(n,e){switch(n){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"layout":return`${e.kind??"?"} ${e.testID??e.type??""}${e.skipped?` skipped:${e.reason??"unknown"}`:""}`;case"react-commit":{let t=e.slowest;return`${e.fiberCount??"?"} fibers ${e.durationMs??"?"}ms${t?.displayName?` \xB7 ${t.displayName} ${t.durationMs??"?"}ms`:""}`}case"reanimated":case"animation":return`${e.kind??""} ${e.target??""}${e.durationMs?` ${e.durationMs}ms`:""}`}}function A(n,e){let t=j(n.t,e).padStart(8),s=n.context.padEnd(6),l=`[${n.kind}]`.padEnd(15),o="",a=n.data;return a&&typeof a=="object"&&(o=B(n.kind,a)),` ${t} ${s} ${l} ${o}`}function M(n){let e=[],t={label:"initial state",events:[],startedAt:n[0]?.t??null};e.push(t);for(let s of n)if(t.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,o=l?.phase;if(!o||o==="enter"||o==="appear"||o==="active"){let a=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;e.length===1&&t.events.length===1?t.label=`${s.kind}: ${a}`:(t={label:`${s.kind}: ${a}`,events:[],startedAt:s.t},e.push(t))}}return e}async function J(n,e){let t=S(n,{port:e.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
3
3
  sootsim what-happened \u2014 show recent events from the semantic timeline
4
4
 
5
5
  usage:
@@ -1,2 +1,2 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{d as i}from"./chunk-DEOZXXWZ.js";import{d as n}from"./chunk-EADVJDBH.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.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
+ /*! sootsim v0.1.98 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{d as i}from"./chunk-S5IHTZL6.js";import{d as n}from"./chunk-ERDQVO6E.js";import"./chunk-KJUP4MG5.js";import"./chunk-UHQCVRXY.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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.98 | (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,6 +1,6 @@
1
1
  {
2
2
  "name": "sootsim",
3
- "version": "0.1.96",
3
+ "version": "0.1.98",
4
4
  "description": "sootsim CLI + vite/metro plugins + skills registry. bridge client for driving the proprietary sootsim-engine over WebSocket.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "MIT",
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-5IGO6XGX.js";import"./chunk-KSYI5F5W.js";import"./chunk-OWGWD5UJ.js";import"./chunk-VZHEFRKG.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.js";export{c as ensureDaemonRunning,a as ensureRuntimeInstalled,d as ensureSootsimReady,b as resolveBootstrapPort};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d,e}from"./chunk-I7IO3QJC.js";import"./chunk-U77ESDGH.js";export{e as BETA_ASK_HEADLINE,c as BETA_LABEL,d as BETA_TAGLINE,b as BETA_VERSION_TARGET,a as IS_BETA};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- var t="http://localhost:5173/";export{t as a};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{createRequire as w}from"node:module";import l from"node:path";var m=w(import.meta.url);function A(t){try{let n=new URL(t),o=n.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(o==="localhost"||o.endsWith(".localhost")||o==="0.0.0.0"||o==="::1"||/^127(?:\.\d{1,3}){3}$/.test(o))return n.origin}catch{}return null}function R(t,n){try{let o=new URL(n).pathname,e=o.indexOf("/node_modules/");if(e>0)return l.join(t,o.slice(0,e).replace(/^\/+/,""))}catch{}return t}function x(t,n,o){if(!n||typeof n!="object")return;let e=n[o];if(!e||typeof e!="object")return;let c=e.fonts;if(Array.isArray(c))for(let r of c){if(typeof r=="string"){t.push(r);continue}if(!r||typeof r!="object")continue;let f=r.fontDefinitions;if(Array.isArray(f))for(let p of f){if(!p||typeof p!="object")continue;let u=p.path;typeof u=="string"&&t.push(u)}}}function b(t){let n=A(t.bundleUrl);if(!n)return[];let o=l.resolve(t.repoDir||process.env.SOOT_REPO_DIR||process.cwd()),e=R(o,t.bundleUrl),c=(t.platform||process.env.SOOT_PLATFORM||"ios").toLowerCase(),r=null;try{let s=m.resolve("@expo/config",{paths:[e,o]}),i=m(s);typeof i.getConfig=="function"&&(r=i.getConfig)}catch{}if(!r)return[];let f;try{f=r(e,{skipSDKVersionRequirement:!0})?.exp}catch{return[]}if(!f||typeof f!="object")return[];let p=f.plugins;if(!Array.isArray(p))return[];let u=[];for(let s of p){let i=Array.isArray(s)?s[0]:s;if(typeof i!="string"||!/(^|\/)expo-font$/.test(i))continue;let a=Array.isArray(s)?s[1]||{}:{};if(!a||typeof a!="object")continue;let y=a.fonts;Array.isArray(y)&&u.push(...y.filter(h=>typeof h=="string")),x(u,a,c)}let g=new Set,d=[];for(let s of u){let i=s.replace(/^\.\//,"").replace(/^\/+/,"");!i||g.has(i)||(g.add(i),/\.(ttf|otf|woff|woff2)$/i.test(i)&&d.push({family:l.basename(i).replace(/\.(ttf|otf|woff|woff2)$/i,""),url:`${n}/assets/${i}`}))}return d}function D(t){return t.map(n=>`${encodeURIComponent(n.url)}::${encodeURIComponent(n.family)}`).join(",")}function F(t){let n=[];for(let o of t.split(",")){let e=o.trim();if(!e)continue;let c=e.indexOf("::"),r=c===-1?e:e.slice(0,c);try{n.push(decodeURIComponent(r))}catch{n.push(r)}}return n.filter(Boolean)}export{b as a,D as b,F as c};
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,12 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as _,b as W,c as de,e as me}from"./chunk-MWTL4ZFM.js";import{m as O}from"./chunk-XB5XCNDT.js";import{k as ae,l as le,n as ce}from"./chunk-UJNQQNOM.js";import{a as pe,b as fe}from"./chunk-6JR6SWCP.js";import{b as ie,c as I,d as S,e as x}from"./chunk-KSYI5F5W.js";import{c as k,d as w,e as C}from"./chunk-OWGWD5UJ.js";import{g as G}from"./chunk-MBOXFWCL.js";import{a as T,b as q}from"./chunk-CSWXAX5Z.js";import{c as ue}from"./chunk-EVCAO4LJ.js";import{d as j}from"./chunk-PP4RVVJ4.js";import{a as se}from"./chunk-3VSB6OII.js";import{E as ne,F as re}from"./chunk-K7M7ZCFP.js";import Pe from"node:fs";import Le from"node:os";import J from"node:path";function Ue(t){return t.replace(/^\[|\]$/g,"").toLowerCase()}function V(t){let o=Ue(t);return o==="localhost"||o.endsWith(".localhost")||o==="0.0.0.0"||o==="::1"||/^127(?:\.\d{1,3}){3}$/.test(o)}function ge(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 Me(t,o){return t?.includes("/one/metro-entry.bundle")?"one":typeof o=="string"&&o?"expo":"unknown"}function be(t,o,e){return`${t}//${o}:${e}`}function Re(t){if(typeof window>"u")return!1;try{let o=new URL(t);return V(o.hostname)&&V(window.location.hostname)&&o.origin!==window.location.origin}catch{return!1}}async function he(t,o){let e={...o,cache:o?.cache??"no-store"};return Re(t)?fetch(`/__fetch-proxy?url=${encodeURIComponent(t)}`,e):fetch(t,e)}function Ee(t){return t==="https:"?443:80}function Oe(t){let o=t.pathname||"/";return(o==="/"||o==="")&&!t.search&&!t.hash}async function ye(t,o){let e=t.replace(/\/+$/,"");try{let n=await he(`${e}/`,{headers:{"expo-platform":"ios"}});if(n.ok){let r=await n.json(),s=r?.extra?.expoClient||r?.extra||{},a=typeof r?.launchAsset?.url=="string"?r.launchAsset.url:void 0;if(a||s.name)return{bundleUrl:de(a||`${e}${W}`),port:o,framework:Me(a,s.sdkVersion),projectName:s.name}}}catch{}try{let n=await he(`${e}/status`);if(n.ok&&(await n.text()).includes("packager-status:running"))return{bundleUrl:`${e}${W}`,port:o,framework:"metro"}}catch{}return null}async function we(t){return ye(be("http:","localhost",t),t)}async function Se(t){let o=t.trim();if(/^\d+$/.test(o)){let i=parseInt(o,10),l=await we(i);if(l)return l;let c=3;for(let d=1;d<=c;d++){let m=await we(i+d);if(m)return m}throw ge(`localhost:${i} (also scanned +1..+${c})`)}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:",s=n.port?parseInt(n.port,10):Ee(r),a=be(r,n.hostname,s);if(Oe(n)){let i=await ye(a,s);if(i)return i;throw ge(a)}return{bundleUrl:n.toString(),port:s,framework:"unknown"}}function dt(){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 ve(t){let o=T();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 _e(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 mt(t,o,e){let n=[];try{n=await t.listSims()}catch{}if(console.error(""),n.length===0){_e(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 s=[r.isPrimary?"primary":null,r.readyState,r.userVisible===!1?"hidden":r.userVisible===!0?"visible":null,r.userFocused?"focused":null].filter(Boolean).join(", ");console.error(` ${r.id} (${s})`)}console.error(""),console.error(" pass a valid --sim id, or run `sootsim list` to see all sessions.")}var De={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 v(t){return new Promise(o=>setTimeout(o,t))}function A(t){return t.trim()}function Y(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}}function Ae(t){try{let o=new URL(t).pathname.replace(/\/+$/,"")||"/";return/^\/preview\/[^/]+$/.test(o)||/^\/build\/.+/.test(o)}catch{return!1}}async function Mt(t){let o=A(t);return(await ke(o)).bundleUrl}function Fe(t){try{let o=new URL(t.startsWith("http")?t:`http://${t}`),e=o.pathname||"/";if(e!=="/"&&e!==""||o.search||o.hash||!/^(localhost|127\.0\.0\.1|\[::1\]|::1)$/i.test(o.hostname))return null;let n=o.port?Number(o.port):o.protocol==="https:"?443:80;return Number.isFinite(n)&&n>0?n:null}catch{return null}}async function ke(t){let o=A(t),e=/^\d+$/.test(o)?Number(o):Fe(o);if(e&&e>0){let n=await me(e);if(n)return{bundleUrl:n.bundleUrl,port:n.port,framework:n.framework,projectName:n.projectName}}return Se(o)}function X(t){let o=t.replace(/\/+$/,"")||"/";return o==="/__soot"||o.startsWith("/__soot/")?"/__soot":""}function Ne(t,o){let e=A(t),n=new URL(o),r=X(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 He(t){let o=A(t);return/^\d+$/.test(o)||/^https?:\/\//i.test(o)?!0:/^(localhost|127\.0\.0\.1|\[::1\]|[^/]+\.localhost):\d+(?:\/.*)?$/i.test(o)}async function Ke(t,o){let e=await ke(t),n=new URL(o),r=X(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 ze(t){return t.startsWith("~/")?J.join(Le.homedir(),t.slice(2)):J.isAbsolute(t)?t:J.resolve(process.cwd(),t)}function je(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 s=n.slice(0,r).trim(),a=ze(n.slice(r+1).trim());Pe.existsSync(a)||(console.error(` sootsim open: replacement file not found: ${a}`),process.exit(1)),o[s]={file:a},e++}return Object.keys(o).length>0?{modules:o}:void 0}function Ce(){let t=ne();return re(t)&&t.runtimePort>0?`http://localhost:${t.runtimePort}/`:se}function We(t,o){try{let e=new URL(t),n=e.searchParams.get("bundle")||"",r=o||fe(pe({bundleUrl:n}));return r?(e.searchParams.set("appFonts",r),e.toString()):t}catch{return t}}async function qe(t,o){if(!t)return new URL(o).toString();if(Y(t))return new URL(t).toString();let e=De[t.toLowerCase()];if(e){let n=new URL(o),r=X(n.pathname);return n.pathname=`${r}${e}`,n.toString()}return He(t)?Ke(t,o):Ne(t,o)}async function D(t,o=Ce(),e=process.env.SOOT_APP_FONTS||""){return We(await qe(t,o),e)}function $e(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 Ge(t,o,e){let n=new URL(await D(t,o));return n.searchParams.set("inspectOpen",e),n.toString()}async function Ve(t,o,e,n={}){let r=n.attempts??30,s=n.intervalMs??500,a=n.minNodeCount??10;for(let i=0;i<r;i++){let l=S(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>a)return{bridge:l,count:c}}catch{}l.close(),await v(s)}return null}function Je(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 Qe(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.userVisible===!1?"hidden":e.userVisible===!0?"visible":"",e.attachedCliCount&&e.attachedCliCount>0?"in use":"",e.userFocused?"focused":"",n].filter(Boolean);console.log(` ${e.id}${r.length?` [${r.join(", ")}]`:""}`);let s=Je(e.url);if(s)console.log(` loaded: ${s}`);else if(e.url){let a=e.url.length>96?`${e.url.slice(0,93)}\u2026`:e.url;console.log(` url: ${a}`)}else e.origin&&console.log(` origin: ${e.origin}`);e.title&&console.log(` title: ${e.title}`),e.visibilityState&&e.visibilityState!=="visible"&&console.log(` visibility: ${e.visibilityState}`),console.log(` connected: ${Ie(Date.now()-e.connectedAt)}`),e.lastActiveAt&&e.lastActiveAt>0&&console.log(` last active: ${Ie(Date.now()-e.lastActiveAt)}`)}}function Ie(t){let o=Math.max(0,Math.round(t/1e3));return o<60?`${o}s ago`:o<3600?`${Math.round(o/60)}m ago`:o<86400?`${Math.round(o/3600)}h ago`:`${Math.round(o/86400)}d ago`}async function L(t,o,e,n={}){let r=n.attempts??30,s=n.intervalMs??500;for(let a=0;a<r;a++){let i=S(t,{commandTimeoutMs:o});try{let c=(await i.listSims()).find(e);if(c)return c}catch{}finally{i.close()}await v(s)}return null}async function Ye(t,o,e,n={}){let r=n.attempts??20,s=n.intervalMs??250;for(let a=0;a<r;a++){let i=S(t,{commandTimeoutMs:o});try{let c=(await i.listSims()).find(d=>d.id===e);if(!c||c.readyState!=="open")return!0}catch{return!0}finally{i.close()}await v(s)}return!1}function Xe(t){let o=t.meta;if(!o||o.sootsimHostDriver!=="playwright")return null;let e=Number(o.sootsimHostPid);return!Number.isInteger(e)||e<=1||e===process.pid?null:e}function Ze(t){if(!t.connectAckFile)return!1;try{return Pe.writeFileSync(t.connectAckFile,`${JSON.stringify({connectedAt:Date.now(),pid:t.pid??null})}
4
- `,{flag:"w"}),!0}catch{return!1}}function xe(t){try{return process.kill(t,0),!0}catch(o){return o?.code==="EPERM"}}async function et(t,o=2500){let e=Date.now()+o;for(;Date.now()<e;){if(!xe(t))return!0;await v(100)}return!xe(t)}async function Q(t,o){let e=new Set(o),n=new Set;for(let r of t){if(!e.has(r.id))continue;let s=Xe(r);s&&n.add(s)}for(let r of n){try{process.kill(r,"SIGTERM")}catch{}if(await et(r)){console.log(` closed playwright host process ${r}`);continue}try{process.kill(r,"SIGKILL"),console.log(` force-closed playwright host process ${r}`)}catch{}}}function F(t,o){if(o){let r=o.trim(),s=t.find(a=>a.id===r);if(!s)throw new Error(`no sim connected with id ${r}`);return s}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 B(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 tt(t,o,{stableMs:150,maxMs:400});let r=S(t,{commandTimeoutMs:3e3,simId:o,cliLabel:"open --describe",simIdSource:"flag"});try{let s=null;try{s=await r.send({type:"evaluate",code:ae})}catch{}if(s&&!(s.flag===!0&&!s.loadingText&&s.nodes>=le&&ce(s))){let d=s.loadingText?`still showing "${s.loadingText}"`:s.flag!==!0?"guest ready event has not fired":s.targets<=0?"no visible app content is inspectable yet":"app tree is still stabilizing";console.log(` app still loading: ${d} (nodes: ${s.nodes}, targets: ${s.targets})`),console.log(" before interacting, run: sootsim wait ready --max-ms 120000")}let i=`(async () => {
5
- const t = window.__sootsimTest
6
- const ms = window.SootSim?.bridges?.mainShell
7
- if (!t) return null
8
- let shell = null
9
- try { shell = ms?.getState ? await ms.getState() : null } catch {}
10
- const tree = await t.dumpTree(12, ${JSON.stringify({describe:!0,verbose:!1,filter:""})})
11
- return { tree, shell }
12
- })()`,l=await r.send({type:"evaluate",code:i});if(!l?.tree)return;if(console.log(""),l.shell?.state){let c=[`state=${l.shell.state}`,l.shell.activeApp?`app=${l.shell.activeApp}`:null].filter(Boolean);console.log(` shell: ${c.join(" ")}`)}console.log(l.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 tt(t,o,e){let n=Date.now()+e.maxMs,r="(async () => (await window.__sootsimTest?.getNodeCount?.()) || 0)()",s=S(t,{commandTimeoutMs:2e3,simId:o,simIdSource:"flag"});try{let a=-1,i=0;for(;Date.now()<n;){let l=-1;try{let c=await s.send({type:"evaluate",code:r});typeof c=="number"&&(l=c)}catch{}if(l>=0&&l===a){if(Date.now()-i>=e.stableMs)return}else a=l,i=Date.now();await v(50)}}finally{s.close()}}async function Rt(t,o={}){let e=I(t,{port:o.port,commandTimeoutMs:o.timeoutMs}),n=x(e);try{let r=await n.listSims();Qe(r,e.simId)}finally{n.close()}}async function Et(t,o={}){let e=I(t,{port:o.port,commandTimeoutMs:o.timeoutMs,stripBooleanFlags:["--new","--headless","--ephemeral"],stripValueFlags:["--base-url","--replace","--driver","--profile","--cdp-port"]}),n=t.find((p,u)=>t[u-1]==="--profile"),r=t.includes("--ephemeral"),s=t.find((p,u)=>t[u-1]==="--cdp-port"),a=s?Number(s):void 0;s&&(!Number.isFinite(a)||a<=0)&&(console.error(` sootsim open: --cdp-port must be a positive port number, got "${s}"`),process.exit(1)),n&&r&&(console.error(" sootsim open: --profile cannot be combined with --ephemeral"),process.exit(1));let i=n?ue(n).id:void 0,l=!!i||r,c=t.includes("--new")||l,d=je(t);c&&e.simIdSource==="flag"&&(console.error(" sootsim open: --new, --profile, and --ephemeral cannot be combined with --sim"),process.exit(1));let m=e.positional[0]||"";if(Ae(m)){let p=(()=>{try{return/^(localhost|127\.0\.0\.1|\[::1\]|::1)$/i.test(new URL(m).hostname)}catch{return!1}})();console.log(" that\u2019s a SootSim preview/build link \u2014 a full player page, not a driveable sim."),console.log(" opening it in your browser for viewing\u2026");try{await j(m,{background:!1})}catch(u){console.error(` could not launch a browser: ${u instanceof Error?u.message:String(u)}`),console.error(` open it yourself: ${m}`),process.exit(1)}console.log(p?" to drive it under the CLI, point `sootsim open` at the app\u2019s dev port instead (e.g. `sootsim open 8081`).":" the CLI can\u2019t drive a remote preview (the engine only attaches to the local bridge from localhost). to drive the app, run it locally and `sootsim open <port>`.");return}let h=t.find((p,u)=>t[u-1]==="--driver")||"",N=t.includes("--headless");a&&h!=="playwright"&&(console.error(" sootsim open: --cdp-port is only honored by the playwright driver \u2014 add `--driver playwright`"),process.exit(1));let P=t.find((p,u)=>t[u-1]==="--base-url")||Ce(),Z=t.includes("--base-url"),ee=k();if(!h&&!c&&(e.simIdSource==="flag"||e.simIdSource==="saved"&&!!ee)){let p=x(e),u=e.simId?` --sim ${e.simId}`:"",f=!1;try{let g=null;try{let y=await p.listSims();if(e.simIdSource==="saved"?(g=y.find($=>$.id===ee&&$.readyState==="open")??null,g||C()):g=F(y,e.simId),!g)if(e.simIdSource==="saved")f=!0;else throw new Error("no sim connected");if(!f&&g){let $=Z||Y(m)?P:$e(g,P),E=await D(m,_($,d));p.send({type:"evaluate",simId:g.id,code:`window.location.href = ${JSON.stringify(E)}`}).catch(()=>{})}}catch(y){console.error(` open failed: ${y instanceof Error?y.message:String(y)}`),await O(p,{errorsCommand:`sootsim get errors 5${u}`,warningsCommand:`sootsim get warnings 5${u}`,requestsCommand:`sootsim get requests 5${u}`}),process.exit(1)}if(!f&&g){await v(1500);let y=await Ve(e.wsPort,e.commandTimeoutMs,g.id);y||(console.error(" timed out waiting for current sim to load target"),process.exit(1)),y.bridge.close(),w(g.id);let $=Z||Y(m)?P:$e(g,P),E=await D(m,_($,d));B(E,{...g,url:E},"current sim"),await U(e.wsPort,g.id,t);return}}finally{p.close()}}let te=_(P,d),Be=await D(m,te),oe=`cli-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,b=await Ge(m,te,oe),H={newWindow:!0},M=p=>p.url?.includes(`inspectOpen=${oe}`)??!1;if(h){let p=G(h);p||(console.error(` unknown driver "${h}" \u2014 run \`sootsim list --drivers\``),process.exit(1));let u=await p.launch({url:b,headless:N,newWindow:H.newWindow,profileId:i,ephemeralProfile:r,cdpPort:a});u.launched||(console.error(` ${p.name} driver: ${u.message}`),process.exit(1));let f=await L(e.wsPort,e.commandTimeoutMs,M,{attempts:60,intervalMs:500});if(!f){if(u.pid)try{process.kill(u.pid,"SIGTERM"),console.error(` closed ${p.name} host process ${u.pid}`)}catch{}console.error(" timed out waiting for opened sim to connect"),process.exit(1)}w(f.id),Ze(u),B(b,f,`${p.name} driver`),await U(e.wsPort,f.id,t);return}if(l){let p=T();p||(console.error(" profiles require electron or playwright; install the desktop companion or use `--driver playwright`"),process.exit(1));try{(await q(b,p,{profileId:i,ephemeralProfile:r})).launched||(console.error(" desktop companion failed to start"),process.exit(1))}catch(f){console.error(` desktop companion failed: ${f instanceof Error?f.message:String(f)}`),process.exit(1)}let u=await L(e.wsPort,e.commandTimeoutMs,M,{attempts:40,intervalMs:500});u||(console.error(" timed out waiting for profiled sim to connect"),process.exit(1)),w(u.id),B(b,u,"desktop companion"),await U(e.wsPort,u.id,t);return}let K=!1,z=!1;try{let p=S(e.wsPort,{commandTimeoutMs:2e3});try{await p.listSims(),K=!0}finally{p.close()}}catch{}if(K)try{let p=S(e.wsPort,{commandTimeoutMs:3e3});try{await p.openUrl(b,H),z=!0}finally{p.close()}}catch{}if(!z){let p=T();if(p)try{if((await q(b,p)).launched){let f=await L(e.wsPort,e.commandTimeoutMs,M,{attempts:20,intervalMs:500});if(f){w(f.id),B(b,f,"desktop companion"),await U(e.wsPort,f.id,t);return}}}catch{}try{await j(b,H)}catch(u){console.error(` open failed: ${u instanceof Error?u.message:String(u)}`),G("playwright")?.availability().available?console.error(" no system browser found \u2014 retry with `sootsim open \u2026 --driver playwright` for a headless sim."):console.error(" run `sootsim list --drivers` to see available drivers."),process.exit(1)}if(!K){console.log(` opened: ${Be}`),ve(e.wsPort);return}}let R=await L(e.wsPort,e.commandTimeoutMs,M,{attempts:30,intervalMs:500});R||(console.error(" timed out waiting for opened sim to connect"),process.exit(1)),w(R.id),B(b,R,z?"bridge":"direct shell open"),await U(e.wsPort,R.id,t)}async function Te(t,o={}){let e=I(t,{port:o.port,commandTimeoutMs:o.timeoutMs,stripBooleanFlags:["--force"]}),n=t.includes("--force"),r=x(e),s=e.simId?` --sim ${e.simId}`:"";try{try{let a=await r.listSims(),i=F(a,e.positional[0]||e.simId);if(i.lockedBy&&i.lockExpiresAt&&i.lockExpiresAt>Date.now()){let l=Math.max(0,Math.round((i.lockExpiresAt-Date.now())/1e3));i.lockedByKind==="user-active"&&(console.error(` refused: ${i.id} is locked by the active user (${l}s) \u2014 that's a live human tab`),console.error(" run `sootsim open --new` for a fresh investigation sim"),process.exit(1)),n||(console.error(` refused: ${i.id} is leased by ${i.lockedBy} (${l}s)`),console.error(` \`sootsim use ${i.id} --force\` to take it, or \`sootsim open --new\` for a fresh sim`),process.exit(1))}await r.focusSim(i.id),w(i.id),console.log(` using: ${i.id}`)}catch(a){console.error(` use failed: ${a instanceof Error?a.message:String(a)}`),await O(r,{errorsCommand:`sootsim get errors 5${s}`,warningsCommand:`sootsim get warnings 5${s}`,requestsCommand:`sootsim get requests 5${s}`}),process.exit(1)}}finally{r.close()}}async function Ot(t,o={}){await Te(t,o)}async function _t(t,o={}){await Te(t,o)}async function Lt(t,o={}){let e=I(t,{port:o.port,commandTimeoutMs:o.timeoutMs,stripBooleanFlags:["--force"]}),n=t.includes("--force"),r=x(e);try{try{let s=await r.listSims(),a=F(s,e.positional[0]||e.simId),i=n&&a.lockedBy&&a.lockedByKind!=="user-active"?a.lockedBy:null,l=await r.claim(a.id,{force:n});w(a.id);let c=Math.max(0,Math.round((l.lockExpiresAt-Date.now())/1e3)),d=l.bootedCount>0?` (booted ${l.bootedCount})`:"";console.log(` claimed: ${l.simId} [${c}s]${d}`),i&&console.log(` took over from: ${i}`)}catch(s){if(s instanceof ie){let a=Math.max(0,Math.round(s.lock.expiresInMs/1e3));console.error(` claim failed: locked by ${s.lock.by} for ${a}s more`),console.error(" use --force to take it, or `sootsim open --new` for a fresh sim"),process.exit(1)}console.error(` claim failed: ${s instanceof Error?s.message:String(s)}`),process.exit(1)}}finally{r.close()}}async function ot(t,o,e,n){if(n.length===0)return{closed:[],remaining:[]};await Promise.all(n.map(s=>t.closeSim(s).catch(()=>{})));let r=new Set(n);for(let s=0;s<40;s++){let a=[];try{let i=S(o,{commandTimeoutMs:e});try{a=(await i.listSims()).filter(c=>r.has(c.id)&&c.readyState==="open").map(c=>c.id)}finally{i.close()}}catch{a=[]}if(a.length===0)return{closed:[...r],remaining:[]};if(s===39)return{closed:[...r].filter(i=>!a.includes(i)),remaining:a};await v(250)}return{closed:[...r],remaining:[]}}function nt(t,o){let e=t.filter(m=>m.readyState==="open"),n=e.map(m=>m.id),r=o.explicitKeepId?.trim()||"",s=o.savedKeepId?.trim()||"",a=s?e.some(m=>m.id===s):!1,i=s&&!a?s:null,l=null,c=null,d=null;if(o.closeOthers)if(r){let m=e.find(h=>h.id===r);m?l=m.id:c=r}else if(s&&a)l=s;else{let m=e.find(h=>h.isPrimary)??e[0]??null;m&&(l=m.id,s&&!a&&(d=m.id))}return{openIds:n,keepId:l,targets:c?[]:n.filter(m=>m!==l),staleSavedId:i,missingExplicitKeepId:c,fallbackKeepId:d}}async function Dt(t,o={}){let e=I(t,{port:o.port,commandTimeoutMs:o.timeoutMs,stripBooleanFlags:["--all","--others"]}),n=x(e),r=e.simId?` --sim ${e.simId}`:"",s=t.includes("--all"),a=t.includes("--others");if(s||a){try{let i=await n.listSims(),l=k(),c=e.positional[0]||(e.simIdSource==="flag"?e.simId:void 0),d=nt(i,{closeOthers:a,explicitKeepId:c,savedKeepId:l});if(d.staleSavedId&&C(),d.fallbackKeepId&&(w(d.fallbackKeepId),console.log(` saved sim ${d.staleSavedId} is gone \u2014 keeping primary ${d.fallbackKeepId}`)),d.missingExplicitKeepId&&(console.error(` close failed: keep sim ${d.missingExplicitKeepId} is not connected; not closing other sims`),process.exit(1)),d.targets.length===0){console.log(d.keepId?` nothing to close \u2014 only the kept sim ${d.keepId} is connected`:d.staleSavedId?` nothing to close \u2014 no sims connected (cleared stale current sim ${d.staleSavedId})`:" nothing to close \u2014 no sims connected");return}let m=await ot(n,e.wsPort,e.commandTimeoutMs,d.targets);await Q(i,d.targets);let h=k();h&&m.closed.includes(h)&&(d.keepId?w(d.keepId):C());let N=` closed ${m.closed.length} sim(s)${d.keepId?` (kept ${d.keepId})`:""}`;console.log(N),m.remaining.length>0&&(console.error(` close failed: still connected: ${m.remaining.join(", ")}`),process.exit(1))}catch(i){console.error(` close failed: ${i instanceof Error?i.message:String(i)}`),process.exit(1)}finally{n.close()}return}try{try{let i=await n.listSims(),l=F(i,e.positional[0]||e.simId),c=i.find(m=>m.id!==l.id&&m.readyState==="open");await n.closeSim(l.id),await Ye(e.wsPort,e.commandTimeoutMs,l.id)||(await Q(i,[l.id]),console.error(` close failed: ${l.id} is still connected`),process.exit(1)),await Q(i,[l.id]),k()===l.id&&(c?w(c.id):C()),console.log(` closed: ${l.id}`)}catch(i){console.error(` close failed: ${i instanceof Error?i.message:String(i)}`),await O(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{dt as a,_e as b,mt as c,Mt as d,Ce as e,D as f,Ge as g,Je as h,Qe as i,L as j,Xe as k,Ze as l,Q as m,Rt as n,Et as o,Ot as p,_t as q,Lt as r,ot as s,nt as t,Dt as u};
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- var O="sootsim close";export{O as a};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-7FQX6FEW.js";import"./chunk-U77ESDGH.js";export{a as getCliVersion};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import"./chunk-U77ESDGH.js";import{mkdirSync as $,writeFileSync as P}from"fs";import{dirname as S,resolve as O}from"path";import C from"ws";var v=e=>new Promise(i=>setTimeout(i,e)),w=class{ws;nextId=1;pending=new Map;listeners=new Set;ready;constructor(i){this.ws=new C(i,{maxPayload:1<<28}),this.ready=new Promise((t,r)=>{this.ws.once("open",()=>t()),this.ws.once("error",r)}),this.ws.on("message",t=>{let r=JSON.parse(t.toString());if(r.id&&this.pending.has(r.id)){let{res:o,rej:s}=this.pending.get(r.id);this.pending.delete(r.id),r.error?s(new Error(JSON.stringify(r.error))):o(r.result)}else if(r.method)for(let o of this.listeners)o(r.method,r.params)})}waitOpen(){return this.ready}on(i){this.listeners.add(i)}send(i,t={},r){let o=this.nextId++;return new Promise((s,p)=>{this.pending.set(o,{res:s,rej:p}),this.ws.send(JSON.stringify({id:o,method:i,params:t,...r?{sessionId:r}:{}}))})}close(){try{this.ws.close()}catch{}}};async function D(e,i){let t=Number(d(e,"--duration")??"5");if(!Number.isFinite(t)||t<=0)return console.error(" --duration must be a positive number (seconds)"),1;let r=Number(d(e,"--sample-interval")??"0.1"),o=Number(d(e,"--cdp-port")??process.env.SOOTSIM_CDP_PORT??"9222"),s=d(e,"--match")??"/rn/",p=d(e,"--output")??d(e,"-o"),u=O(process.cwd(),p??"/tmp/sootsim.cpuprofile"),g=[];try{g=await(await fetch(`http://localhost:${o}/json/list`)).json()}catch{return T(o),1}let y=g.find(a=>a.type==="page"&&a.url.includes(s));if(!y)return console.error(` no page target matching "${s}" on CDP :${o}`),console.error(` open targets: ${g.map(a=>a.url).join(", ")||"(none)"}`),1;let c=new w(y.webSocketDebuggerUrl);await c.waitOpen();try{let a=new Map;if(c.on((n,l)=>{n==="Target.attachedToTarget"&&l.targetInfo?.type==="worker"&&a.set(l.sessionId,l.targetInfo.url),n==="Target.detachedFromTarget"&&a.delete(l.sessionId)}),await c.send("Target.setAutoAttach",{autoAttach:!0,waitForDebuggerOnStart:!1,flatten:!0}),await v(500),a.size===0)return console.error(" no worker targets attached \u2014 is the app loaded in this tab?"),1;for(let n of a.keys())await c.send("Profiler.enable",{},n),await c.send("Profiler.setSamplingInterval",{interval:r*1e3},n),await c.send("Profiler.start",{},n);console.log(` recording ${t}s across ${a.size} worker(s) \u2014 interact now\u2026`),await v(t*1e3);let m=[];for(let[n,l]of a){let{profile:f}=await c.send("Profiler.stop",{},n);m.push({url:l,profile:f})}return m.sort((n,l)=>l.profile.samples.length-n.profile.samples.length),$(S(u),{recursive:!0}),m.forEach((n,l)=>{let f=l===0?u:u.replace(/(\.[^.]+)?$/,`.worker${l}$1`);if(P(f,JSON.stringify(n.profile)),console.log(` ${b(n.url)}: ${n.profile.samples.length} samples \u2192 ${f}`),i.verbose&&n.profile.samples.length>0)for(let h of k(n.profile,12))console.log(` ${h.pct.toFixed(1).padStart(5)}% ${h.name} ${h.url}`)}),console.log(" open in chrome devtools \u2192 Performance \u2192 Load profile to inspect."),0}finally{c.close()}}function T(e){console.error(` cpu-profile needs a CDP-enabled browser on :${e}.`),console.error(" the tenant worker can't be profiled via the JS Self-Profiler API (F28),"),console.error(" so the sim must expose Chrome remote debugging. easiest path \u2014"),console.error(" open the sim with a CDP port (it stays driveable over the bridge,"),console.error(" so you can scroll/navigate while profiling):"),console.error(""),console.error(` sootsim open <metro-port> --new --driver playwright --cdp-port ${e}`),console.error(` sootsim cpu-profile --cdp-port ${e} --match <metro-port>`),console.error(""),console.error(" or launch a standalone CDP Chrome (not bridge-driveable):"),console.error(""),console.error(' "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \\'),console.error(` --remote-debugging-port=${e} --user-data-dir=/tmp/sootsim-cdp \\`),console.error(" --no-sandbox --disable-gpu-sandbox --in-process-gpu \\"),console.error(" --use-gl=angle --use-angle=swiftshader --enable-unsafe-swiftshader \\"),console.error(' "http://localhost:5173/rn/<metro-port>" &'),console.error(""),console.error(" override the port with --cdp-port or $SOOTSIM_CDP_PORT.")}function b(e){return e?e.replace(/^https?:\/\/[^/]+/,"").replace(/\?.*$/,"").slice(-50):"(native)"}function k(e,i){let t=e.samples.length||1,r=new Map;for(let o of e.nodes){let s=o.callFrame,p=`${s.functionName||"(anonymous)"}@${b(s.url)}:${s.lineNumber}`,u=r.get(p)??{self:0,name:s.functionName||"(anonymous)",url:`${b(s.url)}:${s.lineNumber}`};u.self+=o.hitCount??0,r.set(p,u)}return[...r.values()].map(o=>({...o,pct:o.self/t*100})).sort((o,s)=>s.self-o.self).slice(0,i)}function d(e,i){let t=e.indexOf(i);if(!(t<0||t===e.length-1))return e[t+1]}export{D as runCpuProfile};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import"./chunk-6T43X22G.js";import{a,b,c,d,e,f,g,h,i}from"./chunk-MBOXFWCL.js";import"./chunk-CSWXAX5Z.js";import"./chunk-L4X4SMSR.js";import"./chunk-EVCAO4LJ.js";import"./chunk-PP4RVVJ4.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as c,b as d,c as e,d as f}from"./chunk-XZJ3PTB6.js";import"./chunk-APRBFQOQ.js";import"./chunk-BOH75UIE.js";import"./chunk-I4NSHBCP.js";import"./chunk-FNE7Y7HP.js";import"./chunk-DEOZXXWZ.js";import{d as a,e as b}from"./chunk-PQHLVPEJ.js";import"./chunk-GGZNA2XC.js";import"./chunk-MWTL4ZFM.js";import"./chunk-XB5XCNDT.js";import"./chunk-UJNQQNOM.js";import"./chunk-6JR6SWCP.js";import"./chunk-KSYI5F5W.js";import"./chunk-OWGWD5UJ.js";import"./chunk-MBOXFWCL.js";import"./chunk-CSWXAX5Z.js";import"./chunk-L4X4SMSR.js";import"./chunk-EVCAO4LJ.js";import"./chunk-PP4RVVJ4.js";import"./chunk-2DM5NDPK.js";import"./chunk-EADVJDBH.js";import"./chunk-I7OGBC6P.js";import"./chunk-3VSB6OII.js";import"./chunk-VZHEFRKG.js";import"./chunk-HXHDO2DR.js";import"./chunk-ZMD7CG5X.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.js";export{c as discoverSootsimUrl,e as hoistLeadingSimFlag,a as parseFlowFile,f as runFlow,d as runFlowPlayback,b as validateFlowFile};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-LP2SP3NM.js";import"./chunk-I7OGBC6P.js";import"./chunk-XBQX2VHN.js";import"./chunk-3VSB6OII.js";import"./chunk-VZHEFRKG.js";import"./chunk-7FQX6FEW.js";import"./chunk-I7IO3QJC.js";import"./chunk-ZMD7CG5X.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.js";export{c as printCommandHelp,b as printGroupHelp,a as printHelp};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as o}from"./chunk-Z5W64CPI.js";import"./chunk-WMFMWFN6.js";import"./chunk-5IGO6XGX.js";import"./chunk-KSYI5F5W.js";import"./chunk-OWGWD5UJ.js";import"./chunk-2DM5NDPK.js";import"./chunk-EADVJDBH.js";import"./chunk-VZHEFRKG.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.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.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-K3THC66A.js";import"./chunk-KSYI5F5W.js";import"./chunk-OWGWD5UJ.js";import"./chunk-VZHEFRKG.js";import"./chunk-BRRSNJH2.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.js";export{a as runRuntime};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-Z5W64CPI.js";import"./chunk-WMFMWFN6.js";import"./chunk-5IGO6XGX.js";import"./chunk-KSYI5F5W.js";import"./chunk-OWGWD5UJ.js";import"./chunk-2DM5NDPK.js";import"./chunk-EADVJDBH.js";import"./chunk-VZHEFRKG.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.js";export{a as runSetupRepo};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-HXHDO2DR.js";import"./chunk-ZMD7CG5X.js";import"./chunk-U77ESDGH.js";export{a as settingsStore};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b}from"./chunk-2DM5NDPK.js";import"./chunk-EADVJDBH.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.js";export{b as flushCliTelemetry,a as trackCliEvent};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.96 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-FNE7Y7HP.js";import"./chunk-DEOZXXWZ.js";import"./chunk-6JR6SWCP.js";import"./chunk-KSYI5F5W.js";import"./chunk-OWGWD5UJ.js";import"./chunk-L4X4SMSR.js";import"./chunk-PP4RVVJ4.js";import"./chunk-2DM5NDPK.js";import"./chunk-EADVJDBH.js";import"./chunk-VZHEFRKG.js";import"./chunk-K7M7ZCFP.js";import"./chunk-U77ESDGH.js";export{a as resolveDefaultUploadOrigin,b as resolvePublicPreviewOrigin,c as runUpload};