sootsim 0.1.169 → 0.1.170

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (184) hide show
  1. package/README.md +66 -63
  2. package/detox/index.ts +3 -3
  3. package/dist-cli/bin.js +3 -3
  4. package/dist-cli/chunks/agent-3C2BKQKX.js +46 -0
  5. package/dist-cli/chunks/{agent-wrapper-Y5FQA3RL.js → agent-wrapper-OIKCYOXZ.js} +2 -2
  6. package/dist-cli/chunks/{app-fonts-FYVA4XV6.js → app-fonts-25O32NAP.js} +2 -2
  7. package/dist-cli/chunks/{assert-U64QBDM2.js → assert-ONEP4NQU.js} +2 -2
  8. package/dist-cli/chunks/beta-4E5USTEI.js +2 -0
  9. package/dist-cli/chunks/{camera-3GXBVIAM.js → camera-RORW4MAA.js} +2 -2
  10. package/dist-cli/chunks/{chunk-5C6BR24W.js → chunk-25RFZ6WP.js} +6 -6
  11. package/dist-cli/chunks/chunk-35GMFXVJ.js +2 -0
  12. package/dist-cli/chunks/{chunk-GLRFKYDV.js → chunk-3TM7DHWE.js} +2 -2
  13. package/dist-cli/chunks/{chunk-4F3BBP7B.js → chunk-4XVY5TUF.js} +2 -2
  14. package/dist-cli/chunks/{chunk-LZEL2RU3.js → chunk-5ZHUPPS5.js} +1 -1
  15. package/dist-cli/chunks/{chunk-GC4THE6K.js → chunk-6FAEORJ2.js} +2 -2
  16. package/dist-cli/chunks/{chunk-G2ZFDIPK.js → chunk-6TSXXN2W.js} +4 -4
  17. package/dist-cli/chunks/chunk-AJF3QF4K.js +1 -0
  18. package/dist-cli/chunks/{chunk-FIDPRJYH.js → chunk-AUCNBB6Q.js} +2 -2
  19. package/dist-cli/chunks/{chunk-SIB6I72P.js → chunk-BP3EGFER.js} +2 -2
  20. package/dist-cli/chunks/{chunk-OGLWXPVG.js → chunk-DAXME77O.js} +3 -3
  21. package/dist-cli/chunks/chunk-DGJTEFE7.js +13 -0
  22. package/dist-cli/chunks/chunk-DIRDEKRW.js +23 -0
  23. package/dist-cli/chunks/{chunk-3L4NRJ6C.js → chunk-DKTC53HV.js} +1 -1
  24. package/dist-cli/chunks/{chunk-KUUFY6FC.js → chunk-DWXC25XG.js} +1 -1
  25. package/dist-cli/chunks/{chunk-CR6DOLUD.js → chunk-E3FKMY5E.js} +1 -1
  26. package/dist-cli/chunks/chunk-ER4GBJRY.js +2 -0
  27. package/dist-cli/chunks/chunk-EX6V4ZV6.js +6 -0
  28. package/dist-cli/chunks/{chunk-VMYMPL6H.js → chunk-GQH3PD3W.js} +5 -5
  29. package/dist-cli/chunks/{chunk-MVOHANJG.js → chunk-GST4YSBO.js} +4 -4
  30. package/dist-cli/chunks/{chunk-BIWJE7CB.js → chunk-I4RV5I6V.js} +1 -1
  31. package/dist-cli/chunks/{chunk-Y6IDAARY.js → chunk-I5WXVKR6.js} +1 -1
  32. package/dist-cli/chunks/{chunk-HC72ILJK.js → chunk-IO7KAVFK.js} +2 -2
  33. package/dist-cli/chunks/{chunk-XEH4QGWB.js → chunk-LMX7UB5T.js} +2 -2
  34. package/dist-cli/chunks/{chunk-YADWU7OZ.js → chunk-N4YCSOCR.js} +2 -2
  35. package/dist-cli/chunks/{chunk-IODOTOOP.js → chunk-NI3L4A65.js} +2 -2
  36. package/dist-cli/chunks/{chunk-IACEJQIO.js → chunk-ODGEH6OW.js} +2 -2
  37. package/dist-cli/chunks/{chunk-DNA6VS6M.js → chunk-Q4NDYO2U.js} +1 -1
  38. package/dist-cli/chunks/{chunk-PV6MBKKE.js → chunk-QPRF3UYX.js} +2 -2
  39. package/dist-cli/chunks/{chunk-M2TMFGZH.js → chunk-QXJMXSQP.js} +1 -1
  40. package/dist-cli/chunks/chunk-RLKSLUNR.js +2 -0
  41. package/dist-cli/chunks/{chunk-WZG3YVJR.js → chunk-S244IT4W.js} +1 -1
  42. package/dist-cli/chunks/chunk-SDHOM6ZG.js +62 -0
  43. package/dist-cli/chunks/{chunk-B7BMSU7H.js → chunk-TXKOJ3P5.js} +1 -1
  44. package/dist-cli/chunks/{chunk-IBEMMV5E.js → chunk-UDMJSFSH.js} +8 -8
  45. package/dist-cli/chunks/{chunk-DQZEN256.js → chunk-ULV4PWN4.js} +1 -1
  46. package/dist-cli/chunks/{chunk-2TYEWVS4.js → chunk-V4HTQPMA.js} +1 -1
  47. package/dist-cli/chunks/chunk-VATHADSI.js +2 -0
  48. package/dist-cli/chunks/{chunk-5Q7IHJ7K.js → chunk-VUOCUCJ2.js} +2 -2
  49. package/dist-cli/chunks/{chunk-JDGLBW64.js → chunk-WN7R4GL4.js} +1 -1
  50. package/dist-cli/chunks/chunk-XOTJD6PU.js +118 -0
  51. package/dist-cli/chunks/chunk-XUNPVF5K.js +1 -0
  52. package/dist-cli/chunks/{chunk-KZIXAYN5.js → chunk-YMFSRCHL.js} +4 -4
  53. package/dist-cli/chunks/{chunk-X2HNVXNM.js → chunk-YV74D4MG.js} +2 -2
  54. package/dist-cli/chunks/{chunk-SNX3M4XD.js → chunk-YVTWSC5Y.js} +3 -3
  55. package/dist-cli/chunks/cli-version-EKKWCHRX.js +2 -0
  56. package/dist-cli/chunks/{compat-ORRWNXVT.js → compat-ZVZM5TML.js} +3 -3
  57. package/dist-cli/chunks/control-TWINYHMY.js +2 -0
  58. package/dist-cli/chunks/{cpu-profile-6PRSBZ2F.js → cpu-profile-RWGQTWLP.js} +2 -2
  59. package/dist-cli/chunks/daemon-AOSMNBD4.js +2 -0
  60. package/dist-cli/chunks/{debug-Q3J2X4WW.js → debug-R7PL3MHF.js} +5 -5
  61. package/dist-cli/chunks/{detox-DN57GMMJ.js → detox-UIJMKIGQ.js} +2 -2
  62. package/dist-cli/chunks/{device-IL5TPYGU.js → device-7SRVX2PU.js} +2 -2
  63. package/dist-cli/chunks/{diagnose-BW6QWP4F.js → diagnose-OXAKLLZT.js} +2 -2
  64. package/dist-cli/chunks/drivers-BPPG22VP.js +2 -0
  65. package/dist-cli/chunks/{electron-DGMSXQWG.js → electron-CTCH4VOL.js} +3 -3
  66. package/dist-cli/chunks/flow-KA2WCWDL.js +2 -0
  67. package/dist-cli/chunks/help-XBQIK2XY.js +2 -0
  68. package/dist-cli/chunks/{hints-TK3EHB4U.js → hints-P3ZIAP3Z.js} +2 -2
  69. package/dist-cli/chunks/home-paths-ZSCTLOYE.js +2 -0
  70. package/dist-cli/chunks/{inspect-NFWFGU4B.js → inspect-2ABU5WET.js} +24 -24
  71. package/dist-cli/chunks/{install-desktop-GB3JKSNX.js → install-desktop-4NOQ3YY4.js} +3 -3
  72. package/dist-cli/chunks/{keys-RAAHRIFH.js → keys-RPVEUNUC.js} +2 -2
  73. package/dist-cli/chunks/{login-KQ37GHDE.js → login-6D6DXBO3.js} +4 -4
  74. package/dist-cli/chunks/{logout-63SH2Y25.js → logout-T5OSWDTJ.js} +2 -2
  75. package/dist-cli/chunks/{maestro-24BT3MML.js → maestro-MKCHEOKA.js} +2 -2
  76. package/dist-cli/chunks/optional-demo-registry-EYD2K3QH.js +2 -0
  77. package/dist-cli/chunks/{preview-KQAOVN6R.js → preview-S52ZNGN2.js} +2 -2
  78. package/dist-cli/chunks/{profile-AN2B4NJT.js → profile-IG5F3LTL.js} +2 -2
  79. package/dist-cli/chunks/{react-ATGV35B4.js → react-275HCOFC.js} +2 -2
  80. package/dist-cli/chunks/{record-36662T3R.js → record-YT63SUHO.js} +4 -4
  81. package/dist-cli/chunks/runtime-WYZMDZAK.js +2 -0
  82. package/dist-cli/chunks/{screenshot-K4N5MPAT.js → screenshot-5AZ4MY3A.js} +4 -4
  83. package/dist-cli/chunks/{screenshot-mode-4QOJDLSH.js → screenshot-mode-4S4EX2XJ.js} +2 -2
  84. package/dist-cli/chunks/{screenshots-TB35YMSR.js → screenshots-UUJNZSG7.js} +2 -2
  85. package/dist-cli/chunks/{screenshots-capture-W6X33BZ4.js → screenshots-capture-I66JD3AD.js} +2 -2
  86. package/dist-cli/chunks/{server-L2PKDJZ2.js → serve-O46Q4WAD.js} +18 -17
  87. package/dist-cli/chunks/setup-C44N54O7.js +77 -0
  88. package/dist-cli/chunks/skills-PPVS4XOQ.js +40 -0
  89. package/dist-cli/chunks/{slides-TORKO36P.js → slides-ZWSZJZUY.js} +2 -2
  90. package/dist-cli/chunks/store-3SLGP5O3.js +2 -0
  91. package/dist-cli/chunks/telemetry-2XLLWARK.js +2 -0
  92. package/dist-cli/chunks/{test-5VCENVW3.js → test-362G4M5A.js} +3 -3
  93. package/dist-cli/chunks/{three-mode-ZVS2DSX6.js → three-mode-JNVTM2UT.js} +2 -2
  94. package/dist-cli/chunks/{timeline-TNC5OWLF.js → timeline-VKC6ULRK.js} +2 -2
  95. package/dist-cli/chunks/{upgrade-E7IO6A7Z.js → upgrade-SJPX4SPA.js} +2 -2
  96. package/dist-cli/chunks/upload-MXOBV6RT.js +2 -0
  97. package/dist-cli/chunks/version-4Z7AFNH3.js +4 -0
  98. package/dist-cli/chunks/web-WB2I2AWL.js +2 -0
  99. package/dist-cli/chunks/{what-happened-RMHZ7DGX.js → what-happened-KQCWMQJT.js} +3 -3
  100. package/dist-cli/chunks/{whoami-D53ANHR5.js → whoami-K76PXAD4.js} +2 -2
  101. package/dist-lib/agent-daemon-client.cjs +4 -5
  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 +3 -6
  108. package/dist-lib/beta.mjs +3 -5
  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 +4 -4
  113. package/dist-lib/dev-bundle-resolution.cjs +2 -9
  114. package/dist-lib/home-paths.cjs +59 -1
  115. package/dist-lib/host/bridge-host.cjs +67 -5
  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 +2 -2
  121. package/dist-lib/menu.cjs +1 -1
  122. package/dist-lib/menu.mjs +1 -1
  123. package/dist-lib/metro.cjs +2 -2
  124. package/dist-lib/profiles.cjs +1 -1
  125. package/dist-lib/render-mode.cjs +1 -1
  126. package/dist-lib/scripts/dev-server-scanner.cjs +5 -4
  127. package/dist-lib/sdk.cjs +1 -1
  128. package/dist-lib/sdk.mjs +1 -1
  129. package/dist-lib/skills.cjs +124 -8
  130. package/dist-lib/vite.cjs +2 -2
  131. package/package.json +2 -1
  132. package/scripts/dev-server-scanner.ts +3 -4
  133. package/scripts/postinstall.cjs +2 -2
  134. package/scripts/preuninstall.cjs +5 -7
  135. package/skills/soot.md +178 -0
  136. package/skills/sootsim-debug.md +384 -0
  137. package/skills/sootsim-setup.md +96 -0
  138. package/skills/sootsim-test.md +292 -0
  139. package/skills/sootsim-visual.md +122 -0
  140. package/src/agent-daemon-client.ts +4 -14
  141. package/src/beta.ts +3 -5
  142. package/src/dev-bundle-resolution.ts +1 -14
  143. package/src/home-paths.ts +77 -2
  144. package/src/host/agent-host.ts +1 -1
  145. package/src/host/bridge-host.ts +65 -6
  146. package/src/metro-plugin.ts +1 -1
  147. package/src/runtime-assets.ts +1 -1
  148. package/src/vite-plugin.ts +1 -0
  149. package/dist-cli/chunks/agent-V3GVCRPL.js +0 -46
  150. package/dist-cli/chunks/auto-bootstrap-YXDP3WKH.js +0 -2
  151. package/dist-cli/chunks/beta-FGSMZWLP.js +0 -2
  152. package/dist-cli/chunks/chunk-2IFWVIKM.js +0 -2
  153. package/dist-cli/chunks/chunk-3T36XLP3.js +0 -119
  154. package/dist-cli/chunks/chunk-5KY7TQ42.js +0 -5
  155. package/dist-cli/chunks/chunk-BQOMDL4K.js +0 -1
  156. package/dist-cli/chunks/chunk-FHMPJZKM.js +0 -7
  157. package/dist-cli/chunks/chunk-GQAWFQNN.js +0 -23
  158. package/dist-cli/chunks/chunk-HJTKKF7M.js +0 -13
  159. package/dist-cli/chunks/chunk-K4JAWKOY.js +0 -1
  160. package/dist-cli/chunks/chunk-NXGQS7IR.js +0 -2
  161. package/dist-cli/chunks/chunk-R2INPDGW.js +0 -1
  162. package/dist-cli/chunks/chunk-SLL5SZN4.js +0 -2
  163. package/dist-cli/chunks/chunk-XM66K64H.js +0 -79
  164. package/dist-cli/chunks/cli-version-3L6FFDIX.js +0 -2
  165. package/dist-cli/chunks/config-5IB6ONJ2.js +0 -45
  166. package/dist-cli/chunks/control-BM4V27OB.js +0 -2
  167. package/dist-cli/chunks/daemon-62MZT4G4.js +0 -67
  168. package/dist-cli/chunks/drivers-V6QDFZQD.js +0 -2
  169. package/dist-cli/chunks/flow-VBM6TU32.js +0 -2
  170. package/dist-cli/chunks/help-XWKNL743.js +0 -2
  171. package/dist-cli/chunks/home-paths-G23H3RO6.js +0 -2
  172. package/dist-cli/chunks/install-5YL7FITA.js +0 -2
  173. package/dist-cli/chunks/launch-DYFE4CAD.js +0 -16
  174. package/dist-cli/chunks/optional-demo-registry-JJXPB3UD.js +0 -2
  175. package/dist-cli/chunks/runtime-NRMC3U3D.js +0 -2
  176. package/dist-cli/chunks/runtime-delivery-RO6CTYPQ.js +0 -2
  177. package/dist-cli/chunks/setup-repo-AK6QOUE7.js +0 -2
  178. package/dist-cli/chunks/skills-KDSOWUOE.js +0 -10
  179. package/dist-cli/chunks/start-GH2AOUX6.js +0 -23
  180. package/dist-cli/chunks/store-JHW65VGQ.js +0 -2
  181. package/dist-cli/chunks/telemetry-SZLRXJXW.js +0 -2
  182. package/dist-cli/chunks/upload-KKEWETA5.js +0 -2
  183. package/dist-cli/chunks/version-37OD33SE.js +0 -4
  184. package/dist-cli/chunks/web-4JVMIBTB.js +0 -2
@@ -0,0 +1,77 @@
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{b as M,c as $}from"./chunk-SDHOM6ZG.js";import{a as j,b as D}from"./chunk-I4RV5I6V.js";import{a as P}from"./chunk-NI3L4A65.js";import"./chunk-QPRF3UYX.js";import"./chunk-UDMJSFSH.js";import"./chunk-35GMFXVJ.js";import"./chunk-XOTJD6PU.js";import"./chunk-3TM7DHWE.js";import"./chunk-ODGEH6OW.js";import"./chunk-ER4GBJRY.js";import"./chunk-ULV4PWN4.js";import"./chunk-DWXC25XG.js";import{I as b,K as v}from"./chunk-EX6V4ZV6.js";import"./chunk-DKTC53HV.js";import"./chunk-VATHADSI.js";import"./chunk-V4HTQPMA.js";import"./chunk-WN7R4GL4.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};
@@ -0,0 +1,40 @@
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import"./chunk-WN7R4GL4.js";import*as r from"fs";import*as S from"os";import*as i from"path";import{fileURLToPath as g}from"url";function b(){try{let n=g(import.meta.resolve("sootsim/package.json"));return i.join(i.dirname(n),"skills")}catch{let n=i.dirname(g(import.meta.url));return i.resolve(n,"../../skills")}}var c=b(),$=new Set(["all","codex","claude"]);function k(){console.log(`sootsim skill
3
+
4
+ install and inspect bundled SootSim agent skills.
5
+
6
+ usage:
7
+ sootsim skill install [all|codex|claude] [skill-name...]
8
+ sootsim skill install --target <dir> [skill-name...]
9
+ sootsim skill show [skill-name]
10
+
11
+ commands:
12
+ install install skills; no target means all supported local agents
13
+ show list bundled skills, or print one skill markdown
14
+
15
+ targets:
16
+ all Codex and Claude Code (default)
17
+ codex $CODEX_HOME/skills, or ~/.codex/skills
18
+ claude $CLAUDE_CONFIG_DIR/skills, or ~/.claude/skills
19
+ `)}function p(){console.log(`sootsim skill install
20
+
21
+ install bundled SootSim skills in the agent skill layout: <skill>/SKILL.md.
22
+
23
+ usage:
24
+ sootsim skill install [all|codex|claude] [skill-name...]
25
+ sootsim skill install --target <dir> [skill-name...]
26
+
27
+ examples:
28
+ sootsim skill install
29
+ sootsim skill install codex
30
+ sootsim skill install codex sootsim-debug
31
+ `)}function u(n,t){let s=process.env[n]||i.join(S.homedir(),t);return i.join(s,"skills")}function x(){return[{label:"codex",dir:u("CODEX_HOME",".codex")},{label:"claude",dir:u("CLAUDE_CONFIG_DIR",".claude")}]}function _(n){if(n==="all")return x();if(n==="codex")return[{label:"codex",dir:u("CODEX_HOME",".codex")}];if(n==="claude")return[{label:"claude",dir:u("CLAUDE_CONFIG_DIR",".claude")}];console.error(` unknown skill install target: ${n}`),console.error(" expected all, codex, or claude"),process.exit(1)}function D(n){let t=n.match(/^---\n([\s\S]*?)\n---/);if(!t)return null;let s=t[1],l=h(s,"name");return l?{name:l,description:h(s,"description")||""}:null}function h(n,t){let s=n.split(`
32
+ `),l=`${t}:`;for(let e=0;e<s.length;e++){let o=s[e];if(!o.startsWith(l))continue;let a=o.slice(l.length).trim();if(a===">-"||a===">"||a==="|-"||a==="|"){let f=[];for(let m=e+1;m<s.length;m++){let d=s[m];if(/^[A-Za-z0-9_-]+:\s*/.test(d))break;if(d.trim()===""){f.push("");continue}if(!/^\s+/.test(d))break;f.push(d.trim())}return f.join(a.startsWith("|")?`
33
+ `:" ").trim()}return a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'")?a.slice(1,-1):a}return null}function I(){if(!r.existsSync(c))return[];let n=r.readdirSync(c).filter(s=>s.endsWith(".md")),t=[];for(let s of n){let l=r.readFileSync(i.join(c,s),"utf8"),e=D(l);e&&t.push({...e,filename:s})}return t.sort((s,l)=>s.name.localeCompare(l.name))}function y(n,t){if(t.length===0)return n;let s=n.filter(l=>t.some(e=>l.name.includes(e)||l.name.replace("sootsim-","").includes(e)||l.filename.includes(e)));return s.length===0&&(console.error(` no skills matched: ${t.join(", ")}`),console.error(" available: "+n.map(l=>l.name).join(", ")),process.exit(1)),s}function w(n,t){let s=i.join(c,n.filename),l=i.join(t,n.name),e=i.join(l,"SKILL.md");r.mkdirSync(l,{recursive:!0}),r.copyFileSync(s,e),console.log(` copied ${n.name} -> ${e}`)}function C(n){if(n.length===0){console.log(" no skills found");return}console.log(`
34
+ available skills:
35
+ `);for(let t of n)console.log(` ${t.name}`),console.log(` ${t.description}
36
+ `);console.log(" usage: sootsim skill install [all|codex|claude] [skill-name...]"),console.log(` usage: sootsim skill show [skill-name]
37
+ `)}function L(n){let t=null,s=[];for(let l=0;l<n.length;l++){let e=n[l];if((e==="--help"||e==="-h")&&(p(),process.exit(0)),e==="--target"){let o=n[l+1];(!o||o.startsWith("-"))&&(console.error(" --target requires a directory"),process.exit(1)),t&&(console.error(" pass only one install target"),process.exit(1)),t=[{label:"target",dir:o}],l++;continue}if(e.startsWith("-")&&(console.error(` unknown option: ${e}`),p(),process.exit(1)),!t&&$.has(e)){t=_(e);continue}s.push(e)}return{targets:t??x(),filters:s}}async function j(n){let t=I();t.length===0&&(console.error(" no skills found in sootsim package"),process.exit(1));let s=L(n),l=y(t,s.filters),e=s.targets.map(o=>({...o,dir:i.resolve(o.dir)}));for(let o of e)r.mkdirSync(o.dir,{recursive:!0}),r.statSync(o.dir).isDirectory()||(console.error(` target is not a directory: ${o.dir}`),process.exit(1));console.log(`
38
+ installing ${l.length} skill(s) to ${e.length} target(s)
39
+ `);for(let o of e){console.log(` target ${o.label}: ${o.dir}`);for(let a of l)w(a,o.dir);console.log("")}console.log(` done. restart the agent session to load newly installed skills.
40
+ `)}function T(n){let t=I(),s=n.find(o=>!o.startsWith("-"));if(!s){C(t);return}let[l]=y(t,[s]),e=r.readFileSync(i.join(c,l.filename),"utf8");console.log(e)}async function F(n){let[t,...s]=n;if(!t||t==="--help"||t==="-h"){k();return}if(t==="install"){await j(s);return}if(t==="show"||t==="list"){T(s);return}console.error(` unknown skill command: ${t}`),k(),process.exit(1)}export{F as runSkill};
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.169 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{c as S,e as y,g as v,h as b,i as u}from"./chunk-GQAWFQNN.js";import"./chunk-DQZEN256.js";import"./chunk-KUUFY6FC.js";import"./chunk-5KY7TQ42.js";import"./chunk-JDGLBW64.js";import{mkdirSync as $,writeFileSync as x}from"node:fs";import{dirname as k,isAbsolute as B,join as C,resolve as E}from"node:path";var z=`
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{c as S,e as y,g as v,h as b,i as u}from"./chunk-DIRDEKRW.js";import"./chunk-ULV4PWN4.js";import"./chunk-DWXC25XG.js";import"./chunk-EX6V4ZV6.js";import"./chunk-WN7R4GL4.js";import{mkdirSync as $,writeFileSync as x}from"node:fs";import{dirname as k,isAbsolute as B,join as C,resolve as E}from"node:path";var z=`
3
3
  sootsim slides \u2014 compose App Store screenshots in the live sim
4
4
 
5
5
  usage:
@@ -0,0 +1,2 @@
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{a}from"./chunk-VUOCUCJ2.js";import"./chunk-V4HTQPMA.js";import"./chunk-WN7R4GL4.js";export{a as settingsStore};
@@ -0,0 +1,2 @@
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{a,b}from"./chunk-NI3L4A65.js";import"./chunk-QPRF3UYX.js";import"./chunk-EX6V4ZV6.js";import"./chunk-WN7R4GL4.js";export{b as flushCliTelemetry,a as trackCliEvent};
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.169 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import"./chunk-JDGLBW64.js";import{spawn as m}from"child_process";import{existsSync as h,readdirSync as w}from"fs";import{resolve as u,dirname as x}from"path";import{fileURLToPath as y}from"url";var d=x(y(import.meta.resolve("sootsim-engine/package.json")));async function v(t,r){let l=t.includes("--flows"),f=t.includes("--detox"),c=t.includes("--parallel"),i=t.includes("--watch"),a=t.find((e,o)=>t[o-1]==="--reporter")||"console";if((t.includes("--help")||t.includes("-h"))&&(console.log(`
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import"./chunk-WN7R4GL4.js";import{spawn as m}from"child_process";import{existsSync as h,readdirSync as w}from"fs";import{resolve as u,dirname as x}from"path";import{fileURLToPath as y}from"url";var d=x(y(import.meta.resolve("sootsim-engine/package.json")));async function v(t,r){let l=t.includes("--flows"),f=t.includes("--detox"),c=t.includes("--parallel"),i=t.includes("--watch"),a=t.find((e,o)=>t[o-1]==="--reporter")||"console";if((t.includes("--help")||t.includes("-h"))&&(console.log(`
3
3
  sootsim test \u2014 run tests against sootsim
4
4
 
5
5
  usage:
@@ -26,6 +26,6 @@ examples:
26
26
  notes:
27
27
  playwright is best for smoke and package-local debugging
28
28
  --detox is the preferred parity lane for behavior that should match real RN
29
- `),process.exit(0)),l)await b(t,r,c,a);else if(f){let{runDetox:e}=await import("./detox-DN57GMMJ.js");await e(t.filter(o=>o!=="--detox"),r)}else await g(t,r)}async function g(t,r){let l=["playwright","test"],f=t.find((e,o)=>t[o-1]==="-t")||t.find((e,o)=>t[o-1]==="--testNamePattern")||t.find((e,o)=>t[o-1]==="--grep");f&&l.push("-g",f),t.includes("--watch")&&l.push("--ui");let c=new Set(["--flows","--detox","--parallel","--watch","--reporter","-t","--testNamePattern","--grep"]);for(let e=0;e<t.length;e++){if(c.has(t[e])){(t[e]==="-t"||t[e]==="--testNamePattern"||t[e]==="--grep"||t[e]==="--reporter")&&e++;continue}l.push(t[e])}console.log(` running: npx ${l.join(" ")}`);let i=m("npx",l,{cwd:d,stdio:"inherit",env:{...process.env}}),a=await new Promise(e=>{i.on("exit",o=>e(o||0))});process.exit(a)}async function b(t,r,l,f){let c=["flows","test/flows","e2e/flows",".maestro","maestro"],i=[];for(let o of c){let s=u(d,o);if(h(s)){let p=w(s).filter(n=>n.endsWith(".yaml")||n.endsWith(".yml"));for(let n of p)i.push(u(s,n))}}for(let o of c){let s=u(process.cwd(),o);if(!s.startsWith(d)&&h(s)){let p=w(s).filter(n=>n.endsWith(".yaml")||n.endsWith(".yml"));for(let n of p)i.push(u(s,n))}}i.length===0&&(console.log(" no flow files found in flows/, test/flows/, or e2e/flows/"),process.exit(0)),console.log(` found ${i.length} flow(s)`);let a=0,e=0;for(let o of i)try{let{runFlowPlayback:s}=await import("./flow-VBM6TU32.js"),p=r.port?`http://localhost:${r.port}`:"http://localhost:5173";if(await s([o,"--url",p,"--new"])!==0){e++;continue}a++}catch{e++}console.log(`
29
+ `),process.exit(0)),l)await b(t,r,c,a);else if(f){let{runDetox:e}=await import("./detox-UIJMKIGQ.js");await e(t.filter(o=>o!=="--detox"),r)}else await g(t,r)}async function g(t,r){let l=["playwright","test"],f=t.find((e,o)=>t[o-1]==="-t")||t.find((e,o)=>t[o-1]==="--testNamePattern")||t.find((e,o)=>t[o-1]==="--grep");f&&l.push("-g",f),t.includes("--watch")&&l.push("--ui");let c=new Set(["--flows","--detox","--parallel","--watch","--reporter","-t","--testNamePattern","--grep"]);for(let e=0;e<t.length;e++){if(c.has(t[e])){(t[e]==="-t"||t[e]==="--testNamePattern"||t[e]==="--grep"||t[e]==="--reporter")&&e++;continue}l.push(t[e])}console.log(` running: npx ${l.join(" ")}`);let i=m("npx",l,{cwd:d,stdio:"inherit",env:{...process.env}}),a=await new Promise(e=>{i.on("exit",o=>e(o||0))});process.exit(a)}async function b(t,r,l,f){let c=["flows","test/flows","e2e/flows",".maestro","maestro"],i=[];for(let o of c){let s=u(d,o);if(h(s)){let p=w(s).filter(n=>n.endsWith(".yaml")||n.endsWith(".yml"));for(let n of p)i.push(u(s,n))}}for(let o of c){let s=u(process.cwd(),o);if(!s.startsWith(d)&&h(s)){let p=w(s).filter(n=>n.endsWith(".yaml")||n.endsWith(".yml"));for(let n of p)i.push(u(s,n))}}i.length===0&&(console.log(" no flow files found in flows/, test/flows/, or e2e/flows/"),process.exit(0)),console.log(` found ${i.length} flow(s)`);let a=0,e=0;for(let o of i)try{let{runFlowPlayback:s}=await import("./flow-KA2WCWDL.js"),p=r.port?`http://localhost:${r.port}`:"http://localhost:5173";if(await s([o,"--url",p,"--new"])!==0){e++;continue}a++}catch{e++}console.log(`
30
30
  results: ${a} passed, ${e} failed (${i.length} total)
31
31
  `),process.exit(e>0?1:0)}export{v as runTest};
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.169 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as $}from"./chunk-4F3BBP7B.js";import{c as p,e as h,i as R}from"./chunk-GQAWFQNN.js";import"./chunk-DQZEN256.js";import"./chunk-KUUFY6FC.js";import"./chunk-5KY7TQ42.js";import"./chunk-JDGLBW64.js";var b=12e3;async function j(e,o){if((e.includes("--help")||e.includes("-h"))&&(console.log(`
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{a as $}from"./chunk-4XVY5TUF.js";import{c as p,e as h,i as R}from"./chunk-DIRDEKRW.js";import"./chunk-ULV4PWN4.js";import"./chunk-DWXC25XG.js";import"./chunk-EX6V4ZV6.js";import"./chunk-WN7R4GL4.js";var b=12e3;async function j(e,o){if((e.includes("--help")||e.includes("-h"))&&(console.log(`
3
3
  sootsim three-mode \u2014 toggle the 3d device stage
4
4
 
5
5
  usage:
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.169 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{c as m,e as d,h as s}from"./chunk-GQAWFQNN.js";import"./chunk-DQZEN256.js";import"./chunk-KUUFY6FC.js";import"./chunk-5KY7TQ42.js";import"./chunk-JDGLBW64.js";import{writeFileSync as g}from"fs";function u(){console.log(`
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{c as m,e as d,h as s}from"./chunk-DIRDEKRW.js";import"./chunk-ULV4PWN4.js";import"./chunk-DWXC25XG.js";import"./chunk-EX6V4ZV6.js";import"./chunk-WN7R4GL4.js";import{writeFileSync as g}from"fs";function u(){console.log(`
3
3
  sootsim timeline \u2014 control the semantic event timeline
4
4
 
5
5
  usage:
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.169 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as s}from"./chunk-SNX3M4XD.js";import"./chunk-GQAWFQNN.js";import"./chunk-DQZEN256.js";import"./chunk-KUUFY6FC.js";import{a as e}from"./chunk-3L4NRJ6C.js";import"./chunk-OGLWXPVG.js";import{E as i}from"./chunk-5KY7TQ42.js";import"./chunk-JDGLBW64.js";import{spawn as r}from"node:child_process";var a="https://registry.npmjs.org/sootsim/latest";async function h(o){let n=o.indexOf("--channel"),t=n>=0&&o[n+1]?o[n+1]:void 0;console.log(`sootsim upgrade
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{a as s}from"./chunk-YVTWSC5Y.js";import"./chunk-DAXME77O.js";import"./chunk-DIRDEKRW.js";import"./chunk-ULV4PWN4.js";import"./chunk-DWXC25XG.js";import{G as i}from"./chunk-EX6V4ZV6.js";import{a as e}from"./chunk-DKTC53HV.js";import"./chunk-WN7R4GL4.js";import{spawn as r}from"node:child_process";var a="https://registry.npmjs.org/sootsim/latest";async function h(o){let n=o.indexOf("--channel"),t=n>=0&&o[n+1]?o[n+1]:void 0;console.log(`sootsim upgrade
3
3
  `),await c(),console.log(`
4
4
  runtime:`),await s(["install",...t?["--channel",t]:[]],{})}async function c(){let o=e(),n=await u();if(!n){console.log(` cli: v${o} \u2014 couldn't reach the npm registry, skipped`);return}if(i(n,o)<=0){console.log(` cli: v${o} (latest)`);return}console.log(` cli: v${o} \u2192 v${n} \u2014 installing globally\u2026`),await m(n)?console.log(` cli: installed v${n} \u2014 restart any running \`sootsim\` process to pick it up`):(console.log(" cli: automatic install failed \u2014 upgrade it yourself with:"),console.log(" npm install -g sootsim@latest"))}async function u(){try{let o=await fetch(a,{headers:{accept:"application/json"},signal:AbortSignal.timeout(8e3)});if(!o.ok)return null;let n=await o.json();return typeof n.version=="string"&&n.version?n.version:null}catch{return null}}function m(o){return new Promise(n=>{let t=r("npm",["install","-g",`sootsim@${o}`],{stdio:"inherit",shell:!0});t.on("error",()=>n(!1)),t.on("exit",l=>n(l===0))})}export{h as runUpgrade};
@@ -0,0 +1,2 @@
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{a,b,c}from"./chunk-GQH3PD3W.js";import"./chunk-BP3EGFER.js";import"./chunk-QXJMXSQP.js";import"./chunk-TXKOJ3P5.js";import"./chunk-DIRDEKRW.js";import"./chunk-6FAEORJ2.js";import"./chunk-NI3L4A65.js";import"./chunk-QPRF3UYX.js";import"./chunk-ULV4PWN4.js";import"./chunk-DWXC25XG.js";import"./chunk-EX6V4ZV6.js";import"./chunk-WN7R4GL4.js";export{a as resolveDefaultUploadOrigin,b as resolvePublicPreviewOrigin,c as runUpload};
@@ -0,0 +1,4 @@
1
+ /*! sootsim v0.1.170 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{b as s,d as l,h as r}from"./chunk-DAXME77O.js";import{a as i}from"./chunk-35GMFXVJ.js";import"./chunk-EX6V4ZV6.js";import{a as t}from"./chunk-DKTC53HV.js";import"./chunk-WN7R4GL4.js";async function d(u){let{IS_BETA:a,BETA_LABEL:m}=await import("./beta-4E5USTEI.js"),c=a?` \xB7 ${m}`:"";console.log(`sootsim v${t()}${c}`);let o=i(),e=l();o.isDevBridge?(console.log(o.primary),o.installedRuntime&&console.log(`${o.installedRuntime} \xB7 ${e}`)):o.primary==="runtime not installed"?console.log("runtime not installed \u2014 run `sootsim runtime install`"):console.log(`${o.primary} \xB7 ${e}`);let n=await r({channel:e});n.outdated&&n.latest&&console.log(`
3
+ \u2191 runtime v${n.latest} available \u2014 run \`sootsim upgrade\``),console.log(`
4
+ what's new: ${s}`)}export{d as runVersion};