sootsim 0.1.183 → 0.1.184

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 (153) hide show
  1. package/README.md +22 -19
  2. package/dist-cli/bin.js +6 -6
  3. package/dist-cli/chunks/{agent-AFAFZKMT.js → agent-KSX5D27X.js} +2 -2
  4. package/dist-cli/chunks/{agent-wrapper-MV5WGYCS.js → agent-wrapper-MS6TJF5Y.js} +2 -2
  5. package/dist-cli/chunks/{app-fonts-ERD5J644.js → app-fonts-HHN6X2VJ.js} +2 -2
  6. package/dist-cli/chunks/{assert-IBMYHSKD.js → assert-XHVSQZOE.js} +2 -2
  7. package/dist-cli/chunks/beta-JS4JTDFC.js +2 -0
  8. package/dist-cli/chunks/{camera-Y6XUIEAP.js → camera-7L7D4XUO.js} +2 -2
  9. package/dist-cli/chunks/chunk-3KK3YZQ3.js +62 -0
  10. package/dist-cli/chunks/{chunk-IJMDXS7N.js → chunk-3S5BOWO5.js} +1 -1
  11. package/dist-cli/chunks/{chunk-AP22KA3Q.js → chunk-53KKDNCU.js} +1 -1
  12. package/dist-cli/chunks/{chunk-FO3RPGBR.js → chunk-6GC57KRY.js} +2 -2
  13. package/dist-cli/chunks/{chunk-KSV6H2IC.js → chunk-6MPD3QXA.js} +1 -1
  14. package/dist-cli/chunks/{chunk-RQDJPT6N.js → chunk-7C6RC3BU.js} +2 -2
  15. package/dist-cli/chunks/{chunk-WOOWTKM7.js → chunk-7DHLNDOA.js} +1 -1
  16. package/dist-cli/chunks/{chunk-QF6RJQ2U.js → chunk-7DKGX746.js} +2 -2
  17. package/dist-cli/chunks/{chunk-BTIARV2B.js → chunk-AKQWG57K.js} +2 -2
  18. package/dist-cli/chunks/chunk-BB432MX4.js +1 -0
  19. package/dist-cli/chunks/{chunk-XGVVYY6P.js → chunk-C3WRMMUM.js} +2 -2
  20. package/dist-cli/chunks/{chunk-W3G5M4UB.js → chunk-FAB5CDE7.js} +3 -3
  21. package/dist-cli/chunks/{chunk-6GCEDCO5.js → chunk-FD4BKULK.js} +2 -2
  22. package/dist-cli/chunks/{chunk-C7BIPAXT.js → chunk-ID25RWPE.js} +1 -1
  23. package/dist-cli/chunks/{chunk-FODJBAWY.js → chunk-IG7F7DTQ.js} +1 -1
  24. package/dist-cli/chunks/{chunk-YSTCZI6L.js → chunk-IHH3JCV5.js} +1 -1
  25. package/dist-cli/chunks/{chunk-JR7LKXPB.js → chunk-IZMNFZXZ.js} +1 -1
  26. package/dist-cli/chunks/{chunk-WN6XO6JV.js → chunk-JFCJIRX6.js} +1 -1
  27. package/dist-cli/chunks/{chunk-QQDPEM7F.js → chunk-M6RZYHFK.js} +1 -1
  28. package/dist-cli/chunks/chunk-MFL73VJG.js +2 -0
  29. package/dist-cli/chunks/{chunk-N2EXJ7HK.js → chunk-MXXD5U6B.js} +2 -2
  30. package/dist-cli/chunks/{chunk-3JW7SSYR.js → chunk-N5LA5G7V.js} +2 -2
  31. package/dist-cli/chunks/{chunk-BYKEWDZO.js → chunk-NBF2SXAH.js} +4 -4
  32. package/dist-cli/chunks/{chunk-SGWTX6CO.js → chunk-NWNFGZSI.js} +2 -2
  33. package/dist-cli/chunks/{chunk-UXHEGFHQ.js → chunk-OGLOOKK6.js} +1 -1
  34. package/dist-cli/chunks/{chunk-RQXZANGL.js → chunk-Q2S6VBXK.js} +1 -1
  35. package/dist-cli/chunks/{chunk-OIFGVAV2.js → chunk-Q6EHTP4Q.js} +1 -1
  36. package/dist-cli/chunks/{chunk-RAEIXWER.js → chunk-QQ4JDVR6.js} +2 -2
  37. package/dist-cli/chunks/{chunk-6TNJLDAQ.js → chunk-QZW44BMW.js} +1 -1
  38. package/dist-cli/chunks/{chunk-WV7QBUFY.js → chunk-S5XWFD5C.js} +2 -2
  39. package/dist-cli/chunks/{chunk-L3FPLPA4.js → chunk-T4XAQ7VQ.js} +2 -2
  40. package/dist-cli/chunks/{chunk-HW65ZTXM.js → chunk-T5YWTSGG.js} +2 -2
  41. package/dist-cli/chunks/{chunk-CD3KUHS3.js → chunk-U636Z2JZ.js} +2 -2
  42. package/dist-cli/chunks/{chunk-QP4W3SGO.js → chunk-V36X7TNR.js} +1 -1
  43. package/dist-cli/chunks/chunk-VGTPGXKM.js +1 -0
  44. package/dist-cli/chunks/{chunk-MBR6TG2P.js → chunk-VVACMCCE.js} +7 -7
  45. package/dist-cli/chunks/{chunk-CPZNH3B3.js → chunk-WAZCQ5UO.js} +3 -3
  46. package/dist-cli/chunks/{chunk-4HJKPRWO.js → chunk-WDMIABUY.js} +10 -10
  47. package/dist-cli/chunks/{chunk-B3W63SZA.js → chunk-WLDAMCQK.js} +4 -4
  48. package/dist-cli/chunks/{chunk-4FVYQIRB.js → chunk-WMLFWLD7.js} +1 -1
  49. package/dist-cli/chunks/{chunk-PY4P54SD.js → chunk-WNUF6LJX.js} +2 -2
  50. package/dist-cli/chunks/{chunk-RC3FKTYP.js → chunk-WSN7MF4E.js} +2 -2
  51. package/dist-cli/chunks/{chunk-64EKAMA3.js → chunk-XSWATK6S.js} +2 -2
  52. package/dist-cli/chunks/{chunk-VSDVOOWG.js → chunk-YQNX7JK6.js} +2 -2
  53. package/dist-cli/chunks/{chunk-7SP7PFUR.js → chunk-YYS2ITHH.js} +1 -1
  54. package/dist-cli/chunks/cli-version-L6NDSEVW.js +2 -0
  55. package/dist-cli/chunks/{compat-ZTFIQOVI.js → compat-EGXOXW5F.js} +3 -3
  56. package/dist-cli/chunks/{control-XWU7LZWC.js → control-LUH3EQQG.js} +2 -2
  57. package/dist-cli/chunks/{cpu-profile-3F2OQNCM.js → cpu-profile-7LF5VVWE.js} +2 -2
  58. package/dist-cli/chunks/daemon-NGDXMG6R.js +2 -0
  59. package/dist-cli/chunks/{debug-7MIHREPG.js → debug-3J74TASS.js} +3 -3
  60. package/dist-cli/chunks/{detox-CDYD54PS.js → detox-PHLGST7G.js} +2 -2
  61. package/dist-cli/chunks/{device-H53IDQ67.js → device-CBGLBSS6.js} +2 -2
  62. package/dist-cli/chunks/{diagnose-YWSZCFPG.js → diagnose-BXUHKEVI.js} +2 -2
  63. package/dist-cli/chunks/drivers-QX77DPCG.js +2 -0
  64. package/dist-cli/chunks/electron-UYJPUPAG.js +19 -0
  65. package/dist-cli/chunks/flow-KDVDRUEN.js +2 -0
  66. package/dist-cli/chunks/help-4L6UVSAZ.js +2 -0
  67. package/dist-cli/chunks/{hints-BYH6BMHP.js → hints-7A4UIZZL.js} +2 -2
  68. package/dist-cli/chunks/{home-paths-AXKOJS62.js → home-paths-THYEF54Y.js} +2 -2
  69. package/dist-cli/chunks/{inspect-TGQU6MZQ.js → inspect-QULPTQ5V.js} +13 -13
  70. package/dist-cli/chunks/{install-desktop-AOJACCWA.js → install-desktop-X7G7VTBV.js} +4 -4
  71. package/dist-cli/chunks/{keys-RC6SP7XY.js → keys-JLP4YC4T.js} +2 -2
  72. package/dist-cli/chunks/{login-EQDNEJFU.js → login-VB4HG5WR.js} +4 -4
  73. package/dist-cli/chunks/{logout-QEDUWSSY.js → logout-TIVYUTTD.js} +2 -2
  74. package/dist-cli/chunks/{maestro-6SVETVRL.js → maestro-C2WVLDFM.js} +2 -2
  75. package/dist-cli/chunks/optional-demo-registry-WV2BZJ5T.js +2 -0
  76. package/dist-cli/chunks/{preview-UNXWRROE.js → preview-YBV54B2S.js} +2 -2
  77. package/dist-cli/chunks/{profile-UBHQS25I.js → profile-67C256LQ.js} +2 -2
  78. package/dist-cli/chunks/{react-THVP5NZX.js → react-HJ3WPDNO.js} +2 -2
  79. package/dist-cli/chunks/{record-SOACBRM3.js → record-FD4QYCBW.js} +2 -2
  80. package/dist-cli/chunks/runtime-BY3EB4G7.js +2 -0
  81. package/dist-cli/chunks/{screenshot-MJKWIVV6.js → screenshot-UTVYF7F4.js} +2 -2
  82. package/dist-cli/chunks/{screenshot-mode-RP67FQSA.js → screenshot-mode-WPSK6REL.js} +2 -2
  83. package/dist-cli/chunks/{screenshots-LWDOE4RD.js → screenshots-OXRAQXWN.js} +2 -2
  84. package/dist-cli/chunks/{screenshots-capture-RUXUL5GO.js → screenshots-capture-KDNNRKDL.js} +2 -2
  85. package/dist-cli/chunks/{serve-TMMMRVTI.js → serve-ZKEXM2U5.js} +2 -2
  86. package/dist-cli/chunks/setup-A5RLMR3I.js +97 -0
  87. package/dist-cli/chunks/{skills-P3HEQGPB.js → skills-FSJFEKNP.js} +2 -2
  88. package/dist-cli/chunks/{slides-MICILFXO.js → slides-UU3DFZDY.js} +2 -2
  89. package/dist-cli/chunks/store-TZH6LKFH.js +2 -0
  90. package/dist-cli/chunks/telemetry-AHIQ3SS5.js +2 -0
  91. package/dist-cli/chunks/{telemetry-7ZVCPD7R.js → telemetry-TOTJDY6O.js} +2 -2
  92. package/dist-cli/chunks/{test-NT7SGPG5.js → test-D6T7Z4XS.js} +3 -3
  93. package/dist-cli/chunks/{three-mode-6ADYURNM.js → three-mode-CAKEPRJQ.js} +2 -2
  94. package/dist-cli/chunks/{timeline-JZNPRKEH.js → timeline-D6NKNKNS.js} +2 -2
  95. package/dist-cli/chunks/upgrade-DBT6E6DD.js +4 -0
  96. package/dist-cli/chunks/upload-JR2B3YT7.js +2 -0
  97. package/dist-cli/chunks/{version-GS2J6SFA.js → version-4PLJ73Q3.js} +2 -2
  98. package/dist-cli/chunks/{web-J2XC4OK4.js → web-O6QWIX3V.js} +2 -2
  99. package/dist-cli/chunks/{what-happened-O5MCMYJL.js → what-happened-67DBMM4S.js} +2 -2
  100. package/dist-cli/chunks/{whoami-Z2Y2X2DN.js → whoami-PSQRCMUL.js} +2 -2
  101. package/dist-lib/agent-daemon-client.cjs +1 -1
  102. package/dist-lib/agent-events.cjs +1 -1
  103. package/dist-lib/agent-sessions.cjs +1 -1
  104. package/dist-lib/attached-projects.cjs +1 -1
  105. package/dist-lib/auth/shared-session.cjs +1 -1
  106. package/dist-lib/backend-origin.cjs +1 -1
  107. package/dist-lib/beta.cjs +1 -1
  108. package/dist-lib/beta.mjs +1 -1
  109. package/dist-lib/bridge-constants.cjs +1 -1
  110. package/dist-lib/cli-constants.cjs +1 -1
  111. package/dist-lib/config.cjs +1 -1
  112. package/dist-lib/detox/index.cjs +1 -1
  113. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  114. package/dist-lib/home-paths.cjs +1 -1
  115. package/dist-lib/host/bridge-host.cjs +1 -1
  116. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  117. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  118. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  119. package/dist-lib/host/websocket-proxy.cjs +1 -1
  120. package/dist-lib/index.cjs +1 -1
  121. package/dist-lib/jump-to-source-babel.cjs +1 -1
  122. package/dist-lib/menu.cjs +1 -1
  123. package/dist-lib/menu.mjs +1 -1
  124. package/dist-lib/metro.cjs +1 -1
  125. package/dist-lib/profiles.cjs +1 -1
  126. package/dist-lib/render-mode.cjs +1 -1
  127. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  128. package/dist-lib/sdk.cjs +1 -1
  129. package/dist-lib/sdk.mjs +1 -1
  130. package/dist-lib/skills.cjs +1 -1
  131. package/dist-lib/vite.cjs +1 -1
  132. package/package.json +1 -1
  133. package/scripts/postinstall.cjs +1 -1
  134. package/skills/soot.md +2 -2
  135. package/skills/sootsim-setup.md +7 -6
  136. package/dist-cli/chunks/beta-T7Z7WSTK.js +0 -2
  137. package/dist-cli/chunks/chunk-77GTIGLV.js +0 -1
  138. package/dist-cli/chunks/chunk-D7ZB6A5T.js +0 -2
  139. package/dist-cli/chunks/chunk-F6DIP2WH.js +0 -62
  140. package/dist-cli/chunks/chunk-NLI4YQOY.js +0 -1
  141. package/dist-cli/chunks/cli-version-P4SZNBPQ.js +0 -2
  142. package/dist-cli/chunks/daemon-CUQB4QAP.js +0 -2
  143. package/dist-cli/chunks/drivers-RRCIIDGS.js +0 -2
  144. package/dist-cli/chunks/electron-UPH35PTF.js +0 -18
  145. package/dist-cli/chunks/flow-ZDJI7ICC.js +0 -2
  146. package/dist-cli/chunks/help-U5QGSMDR.js +0 -2
  147. package/dist-cli/chunks/optional-demo-registry-KXYBVP4S.js +0 -2
  148. package/dist-cli/chunks/runtime-BAS2IZFB.js +0 -2
  149. package/dist-cli/chunks/setup-WYKWQPJW.js +0 -77
  150. package/dist-cli/chunks/store-7CIU7X6W.js +0 -2
  151. package/dist-cli/chunks/telemetry-LVBDBPPV.js +0 -2
  152. package/dist-cli/chunks/upgrade-K6V3HYCU.js +0 -4
  153. package/dist-cli/chunks/upload-Q2ZFKOSR.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-WOOWTKM7.js";import{c as A,e as _}from"./chunk-RQDJPT6N.js";import"./chunk-RQXZANGL.js";import{b as k}from"./chunk-QP4W3SGO.js";import"./chunk-AP22KA3Q.js";import"./chunk-YSTCZI6L.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
1
+ /*! sootsim v0.1.184 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-7DHLNDOA.js";import{c as A,e as _}from"./chunk-7C6RC3BU.js";import"./chunk-Q2S6VBXK.js";import{b as k}from"./chunk-V36X7TNR.js";import"./chunk-53KKDNCU.js";import"./chunk-IHH3JCV5.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
3
3
  sootsim what-happened \u2014 show recent events from the semantic timeline
4
4
 
5
5
  usage:
@@ -1,2 +1,2 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{d as i}from"./chunk-FO3RPGBR.js";import{d as n}from"./chunk-3JW7SSYR.js";import"./chunk-AP22KA3Q.js";import"./chunk-YSTCZI6L.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.184 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{d as i}from"./chunk-6GC57KRY.js";import{d as n}from"./chunk-N5LA5G7V.js";import"./chunk-53KKDNCU.js";import"./chunk-IHH3JCV5.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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/menu.ts
4
4
  var SOOTSIM_ENGINE_EVENT_NAME = "sootsim:engine-event";
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // cli/commands/inspect/core.ts
4
4
  function resolveMaxMsFlag(args, fallbackMs) {
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.184 | (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.183",
3
+ "version": "0.1.184",
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,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- // postinstall — best-effort runtime install after `npm i -g sootsim`.
2
+ // postinstall — best-effort runtime install after npm/npx fetches sootsim.
3
3
  //
4
4
  // runs as a child of npm. failures here are non-fatal; setup/open/runtime
5
5
  // commands can install the runtime later.
package/skills/soot.md CHANGED
@@ -60,7 +60,7 @@ automation, inspecting the render tree, and managing sims.
60
60
  | `sootsim claim` | take an exclusive lease on a sim |
61
61
  | `sootsim agent` | attached projects + local agent sessions (codex/claude) |
62
62
  | `sootsim close` | close a connected sim |
63
- | `sootsim setup` | set up this machine and, optionally, this repo |
63
+ | `sootsim setup` | bootstrap SootSim, then install the global CLI |
64
64
  | `sootsim compat` | check package compatibility (alias: scan) |
65
65
  | `sootsim electron` | launch the desktop companion |
66
66
  | `sootsim daemon` | manage the sootsim bridge as a login agent |
@@ -104,7 +104,7 @@ skills for working with the SootSim native preview engine:
104
104
  | skill | description |
105
105
  | --- | --- |
106
106
  | `/sootsim-debug` | Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under sootsim. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the sootsim CLI debug tooling first, not screenshots or ad-hoc logging. |
107
- | `/sootsim-setup` | Get sootsim connected to your React Native app — from `npm install sootsim` to a driveable sim |
107
+ | `/sootsim-setup` | Get sootsim connected to your React Native app — from `sootsim setup` to a driveable sim |
108
108
  | `/sootsim-test` | Run automated tests against your React Native app under sootsim — native YAML flows, Maestro drop-in, or Detox drop-in |
109
109
  | `/sootsim-visual` | Pixel-level rendering comparison between sootsim and native iOS — fonts, gradients, shadows, image fidelity |
110
110
 
@@ -1,13 +1,14 @@
1
1
  ---
2
2
  name: sootsim-setup
3
- description: Get sootsim connected to your React Native app — from `npm install sootsim` to a driveable sim
3
+ description: Get sootsim connected to your React Native app — from `sootsim setup` to a driveable sim
4
4
  ---
5
5
 
6
6
  # sootsim setup
7
7
 
8
- you've installed sootsim into a React Native project and want to drive it
9
- from the CLI. this skill takes you from zero to a connected, pinned sim
10
- that every other sootsim skill assumes exists. if `sootsim describe` already
8
+ you want to drive a React Native app with SootSim from the CLI. this skill
9
+ takes you from `sootsim setup` to a connected, pinned sim that every other
10
+ sootsim skill assumes exists. no per-app SootSim install is required. if
11
+ `sootsim describe` already
11
12
  returns a tree, you're past this skill — load `/sootsim-debug` for
12
13
  debugging or `/sootsim-test` for writing tests.
13
14
 
@@ -26,7 +27,7 @@ debugging or `/sootsim-test` for writing tests.
26
27
  ## first move
27
28
 
28
29
  ```sh
29
- sootsim setup # one-time installs daemon, optional repo setup
30
+ sootsim setup # one-time guided setup; installs daemon
30
31
  sootsim open 8081 # load a metro/expo dev server
31
32
  sootsim list # confirm exactly one sim is reachable
32
33
  sootsim use <id> # pin it for the rest of the workflow
@@ -38,7 +39,7 @@ the detected dev servers. for hosted or unusual targets, pass the URL
38
39
  explicitly:
39
40
 
40
41
  ```sh
41
- sootsim open 8081 # load a metro dev server
42
+ sootsim open 8081 # load a metro dev server
42
43
  sootsim open https://my-app.local # load a hosted bundle
43
44
  ```
44
45
 
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-6TNJLDAQ.js";import"./chunk-YSTCZI6L.js";export{d as BETA_ASK_HEADLINE,b as BETA_LABEL,c as BETA_TAGLINE,a as IS_BETA};
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- var t="http://localhost:5173/";export{t as a};
@@ -1,62 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as C,b as _}from"./chunk-VSDVOOWG.js";import{c as R}from"./chunk-SGWTX6CO.js";import{g as T,j as E,r as N,s as b,t as B}from"./chunk-AP22KA3Q.js";import{a as Y}from"./chunk-YSTCZI6L.js";import{execFileSync as tt,spawnSync as s}from"child_process";import{existsSync as c,mkdirSync as x,readFileSync as et,rmSync as $,writeFileSync as M}from"fs";import{homedir as D}from"os";import{dirname as j,resolve as f}from"path";import{execFileSync as G}from"child_process";import{chmodSync as W,mkdirSync as P,rmSync as K,writeFileSync as L}from"fs";import{dirname as A}from"path";var X="dev.sootsim.daemon",U="SootSim Daemon",O="0.1.36";function F(t,e,r){let o=b(),n=B(),a=A(A(n)),l=A(n),u=`${a}/Resources`;K(o,{recursive:!0,force:!0}),P(N(),{recursive:!0}),P(l,{recursive:!0}),P(u,{recursive:!0}),L(`${a}/Info.plist`,Q()),L(`${a}/PkgInfo`,"APPL????"),L(n,z(t,e,r)),W(n,493);try{G("codesign",["--force","--sign","-","--deep",o],{stdio:"pipe"})}catch(i){let p=i instanceof Error?i.message:String(i);console.warn(` warning: ad-hoc codesign of ${o} failed: ${p}
3
- the daemon will still run, but Login Items may show a generic name.`)}return{bundlePath:o,launcherPath:n}}function Q(){return`<?xml version="1.0" encoding="UTF-8"?>
4
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
5
- <plist version="1.0">
6
- <dict>
7
- <key>CFBundleDevelopmentRegion</key><string>en</string>
8
- <key>CFBundleDisplayName</key><string>${U}</string>
9
- <key>CFBundleExecutable</key><string>sootsim-daemon</string>
10
- <key>CFBundleIdentifier</key><string>${X}</string>
11
- <key>CFBundleInfoDictionaryVersion</key><string>6.0</string>
12
- <key>CFBundleName</key><string>${U}</string>
13
- <key>CFBundlePackageType</key><string>APPL</string>
14
- <key>CFBundleShortVersionString</key><string>${O}</string>
15
- <key>CFBundleSignature</key><string>????</string>
16
- <key>CFBundleVersion</key><string>${O}</string>
17
- <key>LSBackgroundOnly</key><true/>
18
- <key>LSUIElement</key><true/>
19
- <key>LSMinimumSystemVersion</key><string>13.0</string>
20
- <key>NSHumanReadableCopyright</key><string>Tamagui LLC</string>
21
- </dict>
22
- </plist>
23
- `}function z(t,e,r){let n=[t.executable,...t.prefixArgs,"serve","--quiet","--port",String(e)].map(J).join(" ");return`#!/bin/sh
24
- # SootSim Daemon launcher \u2014 auto-generated by 'sootsim setup'.
25
- # launchd spawns this; we exec the real sootsim invocation in place so
26
- # launchd tracks the daemon process, not the shell wrapper.
27
- #
28
- # stdout: ${r.stdout}
29
- # stderr: ${r.stderr}
30
- exec ${n}
31
- `}function J(t){return`'${t.replace(/'/g,"'\\''")}'`}var q=60,y="dev.sootsim.daemon",m="sootsim-daemon",g=f(D(),"Library/Logs/sootsim"),v=f(D(),".local/state/sootsim");async function Tt(t,e={}){let[r,...o]=t,n=e.port??7668;if(!r||r==="--help"||r==="-h"){V();return}new Set(["uninstall","restart","start","stop","logs"]).has(r)&&C({event:`daemon_${r}`,properties:{platform:process.platform,subsource:"daemon"}});try{switch(r){case"uninstall":return await ut();case"status":return await pt();case"restart":return await dt();case"start":return await mt();case"stop":return await gt();case"logs":return await ft(o);default:console.error(` unknown daemon subcommand: ${r}`),V(),process.exit(1)}}finally{await _()}}function V(){R("daemon")}function rt(){let t=ot();return{executable:process.execPath,prefixArgs:[t]}}function ot(){try{let e=tt("which",["sootsim"],{encoding:"utf8"}).trim();if(e&&c(e))return H(e)}catch{}let t=process.argv[1];if(t&&c(t))return H(t);throw new Error("could not locate the sootsim binary")}function H(t){try{return Y("fs").realpathSync(t)}catch{return t}}function nt(t,e){x(g,{recursive:!0});let r=f(g,"bridge.out.log"),o=f(g,"bridge.err.log"),{launcherPath:n}=F(t,e,{stdout:r,stderr:o}),a=` <string>${it(n)}</string>`;return`<?xml version="1.0" encoding="UTF-8"?>
32
- <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
33
- <plist version="1.0">
34
- <dict>
35
- <key>Label</key><string>${y}</string>
36
- <key>ProgramArguments</key>
37
- <array>
38
- ${a}
39
- </array>
40
- <key>RunAtLoad</key><true/>
41
- <key>KeepAlive</key><true/>
42
- <key>ThrottleInterval</key><integer>${q}</integer>
43
- <key>ProcessType</key><string>Background</string>
44
- <key>StandardOutPath</key><string>${r}</string>
45
- <key>StandardErrorPath</key><string>${o}</string>
46
- </dict>
47
- </plist>
48
- `}function st(t,e){return x(v,{recursive:!0}),`[Unit]
49
- Description=sootsim bridge daemon
50
- After=default.target
51
-
52
- [Service]
53
- Type=simple
54
- ExecStart=${[t.executable,...t.prefixArgs].map(at).join(" ")} serve --quiet --port ${e}
55
- Restart=always
56
- RestartSec=${q}
57
-
58
- [Install]
59
- WantedBy=default.target
60
- `}function it(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function at(t){return/[^\w@%+=:,./-]/.test(t)?`'${t.replace(/'/g,"'\\''")}'`:t}function S(){return f(D(),"Library/LaunchAgents",`${y}.plist`)}function w(){return f(D(),".config/systemd/user",`${m}.service`)}function Nt(){if(E())return{supported:!1,installed:!1};if(process.platform==="darwin"){let t=S();return{supported:!0,installed:c(t),path:t}}if(process.platform==="linux"){let t=w();return{supported:!0,installed:c(t),path:t}}return{supported:!1,installed:!1}}async function Bt({port:t,force:e}){if(E())throw new Error("background daemon setup is unavailable in this environment");let r=rt();if(console.log(` binary: ${[r.executable,...r.prefixArgs].join(" ")}`),console.log(` port: ${t}`),process.platform==="darwin"){let o=S();if(c(o)&&!e){console.log(` already installed at ${o}`),console.log(" pass --force to overwrite, or use 'sootsim daemon restart' to reload");return}x(j(o),{recursive:!0}),M(o,nt(r,t)),console.log(` wrote ${o}`);let n=`gui/${process.getuid()}`,a=`${n}/${y}`,l=()=>{let d=s("launchctl",["bootstrap",n,o],{stdio:"pipe",encoding:"utf8"}),k=(d.stderr||d.stdout||"").trim();if(d.status!==0)return{ok:!1,reason:`bootstrap exit ${d.status}${k?`: ${k}`:""}`};let I=s("launchctl",["print",a],{encoding:"utf8"});return I.status!==0?{ok:!1,reason:`bootstrap returned 0 but service not registered (print exit ${I.status})`}:{ok:!0}},u=l();if(!u.ok){let d=u.reason;if(s("launchctl",["bootout",a],{stdio:"ignore"}),u=l(),!u.ok)throw new Error(`launchctl bootstrap failed: ${u.reason}`+(d!==u.reason?` (initial: ${d})`:"")+" \u2014 try `sootsim daemon uninstall` then retry, or reboot if launchd state is stuck.")}let i=Date.now()+4e3,p,h;for(;Date.now()<i;){let d=s("launchctl",["print",a],{encoding:"utf8"});if(d.status===0&&(p=d.stdout?.match(/state\s*=\s*(\w+)/)?.[1],h=d.stdout?.match(/pid\s*=\s*(\d+)/)?.[1],p==="running"||h))break;await new Promise(k=>setTimeout(k,150))}if(p!=="running"&&!h)throw new Error(`daemon registered but did not reach running state within 4s (last state: ${p||"unknown"}). check ${f(g,"bridge.err.log")} \u2014 typically a stale runtime or a port already bound by another process.`);console.log(` registered (state: ${p||"unknown"}${h?`, pid ${h}`:""}, log: ${f(g,"bridge.err.log")})`);return}if(process.platform==="linux"){let o=w();if(c(o)&&!e){console.log(` already installed at ${o}`),console.log(" pass --force to overwrite, or use 'sootsim daemon restart' to reload");return}x(j(o),{recursive:!0}),M(o,st(r,t)),console.log(` wrote ${o}`);let n=s("systemctl",["--user","daemon-reload"],{stdio:"pipe",encoding:"utf8"});if(n.status!==0){let i=(n.stderr||n.stdout||"").trim();throw new Error(`systemctl daemon-reload failed${i?`: ${i}`:""}`)}let a=s("systemctl",["--user","enable","--now",m],{stdio:"pipe",encoding:"utf8"});if(a.status!==0){let i=(a.stderr||a.stdout||"").trim();throw new Error(`systemctl enable --now failed${i?`: ${i}`:""} \u2014 try \`sootsim daemon uninstall\` then retry.`)}let u=(s("systemctl",["--user","is-active",m],{encoding:"utf8"}).stdout||"").trim()||"unknown";console.log(` registered (state: ${u}, journalctl --user -u ${m} to tail logs)`);try{let i=process.env.USER||process.env.LOGNAME||"";if(i){let p=s("loginctl",["show-user",i,"--property=Linger","--value"],{encoding:"utf8"});!((p.stdout||"").trim().toLowerCase()==="yes")&&p.status===0&&console.log(` note: linger is not enabled for "${i}". the daemon will exit at logout.
61
- enable persistence with: sudo loginctl enable-linger ${i}`)}}catch{}return}console.error(` background daemon is not supported on ${process.platform}`),console.error(" run 'sootsim serve' in a persistent shell instead"),process.exit(1)}function ct(){let t=[];if(process.platform==="darwin"){let e=S();c(e)&&(s("launchctl",["bootout",`gui/${process.getuid()}/${y}`],{stdio:"ignore"}),$(e,{force:!0}),t.push(e));let r=b();return c(r)&&($(r,{recursive:!0,force:!0}),t.push(r)),c(g)&&($(g,{recursive:!0,force:!0}),t.push(g)),{removed:t,missing:t.length===0}}if(process.platform==="linux"){let e=w();return c(e)&&(s("systemctl",["--user","disable","--now",m],{stdio:"ignore"}),$(e,{force:!0}),s("systemctl",["--user","daemon-reload"],{stdio:"ignore"}),s("systemctl",["--user","reset-failed",m],{stdio:"ignore"}),t.push(e)),c(v)&&($(v,{recursive:!0,force:!0}),t.push(v)),{removed:t,missing:t.length===0}}return{removed:t,missing:!0}}function lt(){let t=[],e=T();return c(e)&&($(e,{recursive:!0,force:!0}),t.push(e)),{removed:t,missing:t.length===0}}async function ut(){let t=ct();for(let r of t.removed)console.log(` removed ${r}`);let e=lt();for(let r of e.removed)console.log(` removed ${r}`);t.missing&&e.missing&&console.log(" not installed")}async function pt(){if(process.platform==="darwin"){let t=S();if(!c(t)){console.log(" installed: no");return}console.log(` installed: yes (${t})`);let e=yt(t);e&&console.log(` binary: ${e}`);let r=s("launchctl",["print",`gui/${process.getuid()}/${y}`],{encoding:"utf8"});if(r.status===0){let o=r.stdout.match(/state\s*=\s*(\w+)/)?.[1],n=r.stdout.match(/pid\s*=\s*(\d+)/)?.[1];console.log(` state: ${o||"unknown"}${n?` (pid ${n})`:""}`)}else console.log(" state: not running");return}if(process.platform==="linux"){let t=w();if(!c(t)){console.log(" installed: no");return}console.log(` installed: yes (${t})`);let e=s("systemctl",["--user","is-active",m],{encoding:"utf8"});console.log(` state: ${e.stdout.trim()||"unknown"}`);return}console.error(` unsupported platform: ${process.platform}`),process.exit(1)}async function dt(){if(process.platform==="darwin"){let t=S();c(t)||(console.error(" daemon not registered \u2014 run `sootsim setup`"),process.exit(1));let e=s("launchctl",["kickstart","-k",`gui/${process.getuid()}/${y}`],{stdio:"pipe",encoding:"utf8"});e.status!==0&&(console.error(` kickstart failed: ${e.stderr?.trim()}`),process.exit(1)),console.log(" restarted");return}if(process.platform==="linux"){let t=w();c(t)||(console.error(" daemon not registered \u2014 run `sootsim setup`"),process.exit(1));let e=s("systemctl",["--user","restart",m],{stdio:"pipe",encoding:"utf8"});e.status!==0&&(console.error(` restart failed: ${e.stderr?.trim()}`),process.exit(1)),console.log(" restarted");return}console.error(` unsupported platform: ${process.platform}`),process.exit(1)}async function mt(){if(process.platform==="darwin"){s("launchctl",["kickstart",`gui/${process.getuid()}/${y}`],{stdio:"inherit"});return}if(process.platform==="linux"){s("systemctl",["--user","start",m],{stdio:"inherit"});return}console.error(` unsupported platform: ${process.platform}`),process.exit(1)}async function gt(){if(process.platform==="darwin"){s("launchctl",["bootout",`gui/${process.getuid()}/${y}`],{stdio:"inherit"});return}if(process.platform==="linux"){s("systemctl",["--user","stop",m],{stdio:"inherit"});return}console.error(` unsupported platform: ${process.platform}`),process.exit(1)}async function ft(t){let e=t.find(n=>/^-n\d+$|^--lines=\d+$|^\d+$/.test(n)),r=e?Number(e.replace(/\D/g,"")):200,o=t.includes("-f")||t.includes("--follow");if(process.platform==="darwin"){let n=f(g,"bridge.out.log"),a=f(g,"bridge.err.log"),l=[n,a].filter(i=>c(i));l.length===0&&(console.error(` no daemon logs yet at ${g} \u2014 run \`sootsim setup\` to install the daemon`),process.exit(1));let u=o?["-n",String(r),"-F",...l]:["-n",String(r),...l];s("tail",u,{stdio:"inherit"});return}if(process.platform==="linux"){let n=`${m}.service`,a=["--user","-u",n,"-n",String(r),"--no-pager"],l=s("journalctl",o?[...a,"-f"]:a,{encoding:"utf8",stdio:o?"inherit":"pipe"});if(o)return;let u=`${l.stdout||""}${l.stderr||""}`,i=/insufficient permissions|No journal files were opened/i.test(u);if(l.status===0&&!i){process.stdout.write(l.stdout||"");return}let p=s("journalctl",[`_SYSTEMD_USER_UNIT=${n}`,"-n",String(r),"--no-pager"],{encoding:"utf8"});if(p.status===0&&(p.stdout||"").trim()){process.stdout.write(p.stdout);return}console.error(` could not read --user journal for ${n} (this user isn't in the systemd-journal group yet).
62
- run: sudo journalctl _SYSTEMD_USER_UNIT=${n} -n ${r} --no-pager`),process.exit(1)}console.error(` unsupported platform: ${process.platform}`),process.exit(1)}function yt(t){try{return et(t,"utf8").match(/<array>\s*<string>([^<]+)<\/string>/)?.[1]||null}catch{return null}}export{Tt as a,Nt as b,Bt as c,ct as d,lt as e};
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-KSV6H2IC.js";import"./chunk-YSTCZI6L.js";export{a as getCliVersion};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d,e}from"./chunk-F6DIP2WH.js";import"./chunk-VSDVOOWG.js";import"./chunk-3JW7SSYR.js";import"./chunk-SGWTX6CO.js";import"./chunk-WV7QBUFY.js";import"./chunk-MBR6TG2P.js";import"./chunk-CPZNH3B3.js";import"./chunk-L3FPLPA4.js";import"./chunk-D7ZB6A5T.js";import"./chunk-RQXZANGL.js";import"./chunk-QP4W3SGO.js";import"./chunk-AP22KA3Q.js";import"./chunk-KSV6H2IC.js";import"./chunk-6TNJLDAQ.js";import"./chunk-UXHEGFHQ.js";import"./chunk-YSTCZI6L.js";export{c as daemonInstall,b as getDaemonServiceStatus,a as runDaemon,d as teardownDaemonService,e as teardownSootsimHome};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import"./chunk-77GTIGLV.js";import{a,b,c,d,e,f,g,h,i}from"./chunk-BTIARV2B.js";import"./chunk-WN6XO6JV.js";import"./chunk-PY4P54SD.js";import"./chunk-JR7LKXPB.js";import"./chunk-QP4W3SGO.js";import"./chunk-AP22KA3Q.js";import"./chunk-YSTCZI6L.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,18 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as g}from"./chunk-FODJBAWY.js";import"./chunk-77GTIGLV.js";import{a as v,h}from"./chunk-B3W63SZA.js";import"./chunk-6GCEDCO5.js";import"./chunk-QF6RJQ2U.js";import"./chunk-WOOWTKM7.js";import"./chunk-7SP7PFUR.js";import{b as f,g as u}from"./chunk-BTIARV2B.js";import{a as p}from"./chunk-WN6XO6JV.js";import{c as m}from"./chunk-PY4P54SD.js";import"./chunk-4FVYQIRB.js";import"./chunk-C7BIPAXT.js";import"./chunk-RQDJPT6N.js";import"./chunk-JR7LKXPB.js";import"./chunk-D7ZB6A5T.js";import"./chunk-RQXZANGL.js";import"./chunk-QP4W3SGO.js";import"./chunk-AP22KA3Q.js";import"./chunk-YSTCZI6L.js";function b(e){let r=e.indexOf("--port");if(r<0)return;let o=e[r+1],i=o?Number(o):Number.NaN;return(!Number.isInteger(i)||i<=0)&&(console.error(` invalid --port value: ${o||"(missing)"}`),process.exit(1)),i}async function O(e,r){let o=b(e)??r.port;return o?h(String(o)):void 0}async function $(e,r){(e.includes("--help")||e.includes("-h"))&&(console.log(`
3
- sootsim electron \u2014 launch the desktop companion
4
-
5
- usage:
6
- sootsim electron [options]
7
-
8
- options:
9
- --port <number> connect to running dev server on this port
10
- --driver <id> override the launch driver (default: electron)
11
- --profile <id> launch with an isolated persistent storage profile
12
- --ephemeral launch with a temporary isolated storage profile
13
-
14
- examples:
15
- sootsim electron
16
- sootsim electron --port 5173
17
- sootsim electron --profile qa
18
- `),process.exit(0));let o=e.indexOf("--driver"),i=o>=0?e[o+1]:void 0,t=e.find((n,a)=>e[a-1]==="--profile"),d=e.includes("--ephemeral");t&&d&&(console.error(" sootsim electron: --profile cannot be combined with --ephemeral"),process.exit(1));let x=t?m(t).id:void 0,s=i||r.driver,l=f;if(s){let n=u(s);n||(console.error(` unknown driver "${s}" \u2014 run \`sootsim list --drivers\``),process.exit(1)),l=n}if(l.id==="electron"){let n=p();if(!n){if(v(),process.stdin.isTTY&&process.env.CI!=="1"&&process.env.SOOTSIM_NO_PROMPT!=="1"&&await g("run sootsim install-desktop now?",!0)){console.log();let{runInstallDesktop:I}=await import("./install-desktop-AOJACCWA.js");await I(["--yes"]),n=p()}n||process.exit(1)}console.log(` launching ${n.path}`)}let w=await O(e,r),c=await l.launch({url:w,device:r.device,profileId:x,ephemeralProfile:d});c.launched||(console.error(` ${c.message}`),process.exit(1)),console.log(` ${c.message}`)}export{O as resolveElectronLaunchUrl,$ as runElectron};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as c,b as d,c as e,d as f}from"./chunk-4HJKPRWO.js";import"./chunk-XGVVYY6P.js";import"./chunk-NLI4YQOY.js";import"./chunk-N2EXJ7HK.js";import{c as a,d as b}from"./chunk-HW65ZTXM.js";import"./chunk-B3W63SZA.js";import"./chunk-6GCEDCO5.js";import"./chunk-QF6RJQ2U.js";import"./chunk-WOOWTKM7.js";import"./chunk-7SP7PFUR.js";import"./chunk-BTIARV2B.js";import"./chunk-WN6XO6JV.js";import"./chunk-PY4P54SD.js";import"./chunk-BYKEWDZO.js";import"./chunk-FO3RPGBR.js";import"./chunk-4FVYQIRB.js";import"./chunk-C7BIPAXT.js";import"./chunk-RQDJPT6N.js";import"./chunk-JR7LKXPB.js";import"./chunk-VSDVOOWG.js";import"./chunk-3JW7SSYR.js";import"./chunk-L3FPLPA4.js";import"./chunk-D7ZB6A5T.js";import"./chunk-RQXZANGL.js";import"./chunk-QP4W3SGO.js";import"./chunk-AP22KA3Q.js";import"./chunk-RC3FKTYP.js";import"./chunk-UXHEGFHQ.js";import"./chunk-YSTCZI6L.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.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-SGWTX6CO.js";import"./chunk-WV7QBUFY.js";import"./chunk-MBR6TG2P.js";import"./chunk-CPZNH3B3.js";import"./chunk-L3FPLPA4.js";import"./chunk-D7ZB6A5T.js";import"./chunk-RQXZANGL.js";import"./chunk-QP4W3SGO.js";import"./chunk-AP22KA3Q.js";import"./chunk-KSV6H2IC.js";import"./chunk-6TNJLDAQ.js";import"./chunk-UXHEGFHQ.js";import"./chunk-YSTCZI6L.js";export{c as printCommandHelp,b as printGroupHelp,a as printHelp};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b}from"./chunk-7SP7PFUR.js";import"./chunk-YSTCZI6L.js";export{a as loadOptionalDemoApps,b as optionalDemoAppsSync};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-W3G5M4UB.js";import"./chunk-64EKAMA3.js";import"./chunk-RQDJPT6N.js";import"./chunk-RQXZANGL.js";import"./chunk-QP4W3SGO.js";import"./chunk-AP22KA3Q.js";import"./chunk-YSTCZI6L.js";export{a as runRuntime};
@@ -1,77 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{b as M,c as $}from"./chunk-F6DIP2WH.js";import{a as j,b as D}from"./chunk-FODJBAWY.js";import{a as P}from"./chunk-VSDVOOWG.js";import"./chunk-3JW7SSYR.js";import"./chunk-SGWTX6CO.js";import"./chunk-WV7QBUFY.js";import"./chunk-MBR6TG2P.js";import"./chunk-CPZNH3B3.js";import"./chunk-L3FPLPA4.js";import"./chunk-D7ZB6A5T.js";import"./chunk-RQXZANGL.js";import"./chunk-QP4W3SGO.js";import{I as b,K as v}from"./chunk-AP22KA3Q.js";import"./chunk-KSV6H2IC.js";import"./chunk-6TNJLDAQ.js";import"./chunk-UXHEGFHQ.js";import"./chunk-YSTCZI6L.js";import{execSync as H}from"child_process";import{existsSync as g,readFileSync as I,writeFileSync as w}from"fs";import{join as K,relative as h,resolve as m}from"path";import{existsSync as c,readFileSync as d,readdirSync as W,statSync as A}from"fs";import{basename as N,dirname as V,join as i}from"path";function O(e){let o=e;for(;;){if(c(i(o,"turbo.json"))||c(i(o,"nx.json"))||c(i(o,"lerna.json"))||c(i(o,"pnpm-workspace.yaml")))return o;let n=i(o,"package.json");if(c(n))try{if(JSON.parse(d(n,"utf8")).workspaces)return o}catch{}let t=V(o);if(t===o)break;o=t}return e}function J(e){return c(i(e,"bun.lock"))||c(i(e,"bun.lockb"))?"bun":c(i(e,"pnpm-lock.yaml"))?"pnpm":c(i(e,"yarn.lock"))?"yarn":"npm"}function B(e){if(c(i(e,"turbo.json")))return"turbo";if(c(i(e,"nx.json")))return"nx";if(c(i(e,"pnpm-workspace.yaml")))return"pnpm";let o=i(e,"package.json");if(c(o))try{if(JSON.parse(d(o,"utf8")).workspaces)return"npm-workspaces"}catch{}return"single"}function G(e){return e.one?"one":e.expo?"expo":e["react-native"]?"bare":"unknown"}function S(e){let o=i(e,"package.json");if(!c(o))return null;let n;try{n=JSON.parse(d(o,"utf8"))}catch{return null}let t={...n.dependencies,...n.devDependencies},r=G(t);return r==="unknown"?null:{dir:e,name:n.name||N(e),framework:r,hasViteConfig:c(i(e,"vite.config.ts"))||c(i(e,"vite.config.js")),hasMetroConfig:c(i(e,"metro.config.js"))||c(i(e,"metro.config.ts")),hasSootsimDependency:!!t.sootsim,devCommand:n.scripts?.dev||null}}function U(e){let o=[],n=i(e,"pnpm-workspace.yaml");if(c(n)){let s=d(n,"utf8").match(/packages:\s*\n((?:\s+-\s+.+\n?)+)/);if(s){let p=s[1].split(`
3
- `).filter(Boolean);for(let u of p){let a=u.replace(/^\s*-\s*['"]?/,"").replace(/['"]?\s*$/,"");a&&o.push(...C(e,a))}}return o}let t=i(e,"package.json");if(c(t))try{let r=JSON.parse(d(t,"utf8")),s=Array.isArray(r.workspaces)?r.workspaces:r.workspaces?.packages||[];for(let p of s)o.push(...C(e,p))}catch{}return o}function C(e,o){let n=o.replace(/\/\*\*?$/,"").replace(/\*$/,""),t=i(e,n);if(!c(t))return[];try{return W(t).map(s=>i(t,s)).filter(s=>{try{return A(s).isDirectory()&&c(i(s,"package.json"))}catch{return!1}})}catch{return[]}}function _(e){let o=B(e),n=J(e);if(o==="single"){let p=S(e);return{root:e,type:o,packageManager:n,apps:p?[p]:[]}}let t=U(e),r=[],s=S(e);s&&r.push(s);for(let p of t){if(p===e)continue;let u=S(p);u&&r.push(u)}return{root:e,type:o,packageManager:n,apps:r}}function R(e){switch(e){case"bun":return"bun add -d sootsim";case"pnpm":return"pnpm add -D sootsim";case"yarn":return"yarn add -D sootsim";case"npm":return"npm install -D sootsim"}}async function xe(e){(e.includes("--help")||e.includes("-h"))&&(console.log(`
4
- sootsim setup \u2014 set up this machine and, optionally, this repo
5
-
6
- usage:
7
- sootsim setup
8
- sootsim setup --app <dir>
9
- sootsim setup --yes
10
- sootsim setup --dry-run
11
-
12
- what it checks:
13
- 1. background daemon recommended; faster opens and runtime auto-updates
14
- 2. repo plugin optional; pins SootSim for your team and serves /__soot
15
- 3. sootsim.config.ts advanced; only for module/env/settings overrides
16
- `),process.exit(0));let o=Q(e);g(o.appDir)||(console.error(` directory not found: ${o.appDir}`),process.exit(1)),console.log(`
17
- sootsim setup
18
- `),await X(o);let n=await Y(o);await Z(o,n)}function Q(e){let o=e.indexOf("--app");return{dryRun:e.includes("--dry-run"),yes:e.includes("--yes")||e.includes("-y"),appDir:o!==-1&&e[o+1]?m(e[o+1]):process.cwd()}}async function X(e){let o=M(),n=b(),t=v(n);if(console.log(" daemon:"),!o.supported){console.log(` unavailable on ${process.platform}`);return}if(o.installed){console.log(` installed${t&&n?`, running on port ${n.bridgePort}`:""}`);return}if(console.log(" not installed"),console.log(" recommended: installs the background bridge for faster opens and runtime auto-updates"),e.dryRun){console.log(" would install the background daemon");return}await x("install the background daemon?",!0,e)&&await $({port:7668,force:!1})}async function Y(e){let o=O(e.appDir),n=_(o);if(console.log(`
19
- project integration:`),n.apps.length===0)return console.log(" no React Native, Expo, or One app detected"),console.log(" no repo setup is required for `sootsim open <port>`"),null;let t;if(n.type!=="single"&&n.apps.length>1){console.log(` monorepo detected (${n.type} + ${n.packageManager})`);let a=await D("which app?",n.apps.map(l=>`${(h(o,l.dir)||".").padEnd(30)} (${l.framework})`));t=n.apps[a]}else t=n.apps[0];let r=t.framework==="one"?"One/Vite":t.framework==="expo"?"Expo Metro":"Metro";console.log(` app: ${h(o,t.dir)||"."}`),console.log(` package: ${t.name}`),console.log(` bundler: ${r}`),console.log(" optional: add the repo plugin only when you want SootSim pinned and served from /__soot for the team");let s=ee(n.packageManager,t);if(s.length===0)return console.log(" already configured"),t;if(console.log(" would:"),s.forEach((a,l)=>console.log(` ${l+1}. ${a.label}`)),e.dryRun||!await x("install the repo plugin?",!1,e))return t;let p=0;for(let a=0;a<s.length;a++){let l=s[a];process.stdout.write(` [${a+1}/${s.length}] ${l.label}...`);try{await l.run(),console.log(" done")}catch(k){p++,console.log(` failed: ${se(k)}`),(l.label.includes("vite.config")||l.label.includes("metro.config"))&&re(t)}}P({event:"cli_setup_repo",properties:{framework:t.framework,package_manager:n.packageManager,workspace_type:n.type,step_count:s.length,step_failures:p}});let u=t.framework==="expo"?"npx expo start":t.framework==="one"?`${n.packageManager} run dev`:"npx react-native start";return console.log(`
20
- start your dev server:
21
- ${u}
22
-
23
- then:
24
- sootsim open <dev server port>
25
- `),t}async function Z(e,o){let n=o?.dir??e.appDir;if(!g(K(n,"package.json"))){console.log(`
26
- config:`),console.log(" no package.json found; skipping sootsim.config.ts");return}let t=m(n,"sootsim.config.ts");if(console.log(`
27
- config:`),g(t)){console.log(` already exists at ${h(process.cwd(),t)}`);return}if(console.log(" advanced: create only when you need module, environment, or simulator overrides"),e.dryRun){console.log(` would create ${h(process.cwd(),t)}`);return}await x("create sootsim.config.ts?",!1,e)&&(w(t,te()),console.log(` created ${h(process.cwd(),t)}`))}function ee(e,o){let n=[];if(!o.hasSootsimDependency){let t=R(e);n.push({label:"add sootsim as devDependency",run:()=>{H(t,{cwd:o.dir,stdio:"pipe"})}})}return o.framework==="one"&&o.hasViteConfig?n.push({label:"add sootsimPlugin() to vite.config.ts",run:()=>E(o.dir)}):(o.framework==="expo"||o.framework==="bare")&&o.hasMetroConfig?n.push({label:"add withSootsim() to metro.config.js",run:()=>oe(o.dir)}):o.framework==="one"?n.push({label:"add sootsimPlugin() to vite.config.ts",run:()=>E(o.dir)}):n.push({label:"create metro.config.js with withSootsim()",run:()=>ne(o.dir,o.framework)}),n}async function x(e,o,n){return n.yes?!0:j(e,o)}function E(e){let o=m(e,"vite.config.ts"),n=m(e,"vite.config.js"),t=g(o)?o:n;if(!g(t))throw new Error(`no vite config found at ${e}`);let r=I(t,"utf8");if(r.includes("sootsimPlugin")){console.log(" (already configured)");return}let s="import { sootsimPlugin } from 'sootsim/vite'",p=/^(import\s+.+)$/gm,u=0,a;for(;(a=p.exec(r))!==null;)u=a.index+a[0].length;u>0?r=r.slice(0,u)+`
28
- `+s+r.slice(u):r=s+`
29
- `+r;let l=r.match(/plugins\s*:\s*\[/);if(l&&l.index!==void 0){let k=l.index+l[0].length,y=1,f=k;for(;f<r.length&&y>0;)r[f]==="["&&y++,r[f]==="]"&&y--,y>0&&f++;let F=r.slice(0,f),L=r.slice(f),T=r.slice(k).match(/\n(\s+)\S/)?.[1]||" ",q=r.slice(r.lastIndexOf(`
30
- `,f),f+1).match(/\n(\s*)/)?.[1]||" ";r=F.trimEnd()+`
31
- `+T+`sootsimPlugin(),
32
- `+q+L}else throw new Error("could not find plugins array in vite config");w(t,r)}function oe(e){let o=m(e,"metro.config.js"),n=m(e,"metro.config.ts"),t=g(o)?o:n;if(!g(t))throw new Error(`no metro config found at ${e}`);let r=I(t,"utf8");if(r.includes("withSootsim")){console.log(" (already configured)");return}r="const { withSootsim } = require('sootsim/metro')"+`
33
- `+r,r=r.replace(/(module\.exports\s*=\s*)([^;]+)/,(p,u,a)=>`${u}withSootsim(${a.trim()})`),w(t,r)}function ne(e,o){let n=m(e,"metro.config.js");w(n,o==="expo"?`const { getDefaultConfig } = require('expo/metro-config')
34
- const { withSootsim } = require('sootsim/metro')
35
-
36
- const config = getDefaultConfig(__dirname)
37
-
38
- module.exports = withSootsim(config)
39
- `:`const { getDefaultConfig, mergeConfig } = require('@react-native/metro-config')
40
- const { withSootsim } = require('sootsim/metro')
41
-
42
- const config = {}
43
-
44
- module.exports = withSootsim(mergeConfig(getDefaultConfig(__dirname), config))
45
- `)}function te(){return`import { defineConfig } from 'sootsim/config'
46
-
47
- export default defineConfig({
48
- // Advanced overrides only. Delete this file if you do not need them.
49
- modules: {
50
- // 'my-native-lib': 'noop',
51
- // 'my-shim': { file: './shims/my-shim.ts' },
52
- },
53
- env: {
54
- // API_URL: 'http://localhost:3000',
55
- },
56
- settings: {
57
- // deviceModel: 'iphone-16',
58
- // colorScheme: 'dark',
59
- },
60
- })
61
- `}function re(e){e.framework==="one"?console.log(`
62
- manual setup \u2014 add to your vite.config.ts:
63
-
64
- import { sootsimPlugin } from 'sootsim/vite'
65
-
66
- export default {
67
- plugins: [
68
- one({ /* ... */ }),
69
- sootsimPlugin(),
70
- ],
71
- }
72
- `):console.log(`
73
- manual setup \u2014 add to your metro.config.js:
74
-
75
- const { withSootsim } = require('sootsim/metro')
76
- module.exports = withSootsim(config)
77
- `)}function se(e){return e instanceof Error?e.message:String(e)}export{xe as runSetup};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-RC3FKTYP.js";import"./chunk-UXHEGFHQ.js";import"./chunk-YSTCZI6L.js";export{a as settingsStore};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.183 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b}from"./chunk-VSDVOOWG.js";import"./chunk-3JW7SSYR.js";import"./chunk-AP22KA3Q.js";import"./chunk-YSTCZI6L.js";export{b as flushCliTelemetry,a as trackCliEvent};