sootsim 0.1.185 → 0.1.186

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 (157) hide show
  1. package/dist-cli/bin.js +3 -3
  2. package/dist-cli/chunks/{agent-VF756RZU.js → agent-HOCS7BA7.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-IAFL7ROV.js → agent-wrapper-OFIKO65K.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-VWLEC7ZA.js → app-fonts-PXVMBZZ7.js} +2 -2
  5. package/dist-cli/chunks/{assert-I55QVGG7.js → assert-OZS6AXZE.js} +2 -2
  6. package/dist-cli/chunks/beta-LUMNYREE.js +2 -0
  7. package/dist-cli/chunks/{camera-CYYBJH7W.js → camera-QJ2PKIJB.js} +2 -2
  8. package/dist-cli/chunks/{chunk-2T73IGB2.js → chunk-2B2D2EBR.js} +2 -2
  9. package/dist-cli/chunks/{chunk-ARNLQPMQ.js → chunk-353E6UCU.js} +2 -2
  10. package/dist-cli/chunks/chunk-3ISH4ZRW.js +1 -0
  11. package/dist-cli/chunks/{chunk-PIUKLO3W.js → chunk-4HVMPXJZ.js} +1 -1
  12. package/dist-cli/chunks/chunk-5TTEOJ4A.js +1 -0
  13. package/dist-cli/chunks/chunk-5XIRXMOS.js +971 -0
  14. package/dist-cli/chunks/chunk-6MJVRIUP.js +118 -0
  15. package/dist-cli/chunks/{chunk-EXFB33AZ.js → chunk-6OQVIQY7.js} +2 -2
  16. package/dist-cli/chunks/chunk-BU5CRHHR.js +24 -0
  17. package/dist-cli/chunks/{chunk-TUF6EPCQ.js → chunk-DPXVA7ZF.js} +2 -2
  18. package/dist-cli/chunks/{chunk-R4KLD4P4.js → chunk-FN64EREO.js} +2 -2
  19. package/dist-cli/chunks/{chunk-BI56RR3G.js → chunk-FUHNIWFL.js} +4 -4
  20. package/dist-cli/chunks/{chunk-WEJKLJ4B.js → chunk-GNGEYMS3.js} +2 -2
  21. package/dist-cli/chunks/{chunk-QTFCJYBF.js → chunk-I65LTDPY.js} +3 -3
  22. package/dist-cli/chunks/{chunk-BMCBPMTC.js → chunk-INIASYOZ.js} +1 -1
  23. package/dist-cli/chunks/{chunk-FUHXL6BW.js → chunk-KNICGV7H.js} +1 -1
  24. package/dist-cli/chunks/{chunk-E5DE33BU.js → chunk-LV7DFIBL.js} +1 -1
  25. package/dist-cli/chunks/{chunk-M3P67TBN.js → chunk-MAGDSBXT.js} +1 -1
  26. package/dist-cli/chunks/chunk-MP4CRGWM.js +2 -0
  27. package/dist-cli/chunks/{chunk-MADEJDFD.js → chunk-MPUCQL3Q.js} +1 -1
  28. package/dist-cli/chunks/{chunk-FY6DJGOS.js → chunk-N3PLEUYD.js} +39 -15
  29. package/dist-cli/chunks/{chunk-CYBRFHPU.js → chunk-NYYP5QQK.js} +2 -2
  30. package/dist-cli/chunks/{chunk-4OUQAR34.js → chunk-O2SQQXUO.js} +1 -1
  31. package/dist-cli/chunks/{chunk-K2THZIVC.js → chunk-OMFESSKA.js} +1 -1
  32. package/dist-cli/chunks/{chunk-C3UEINOZ.js → chunk-P5UT637B.js} +2 -2
  33. package/dist-cli/chunks/{chunk-C63EVPDN.js → chunk-POOE26UD.js} +2 -2
  34. package/dist-cli/chunks/{chunk-HQG4DRQ3.js → chunk-PTUTIFWJ.js} +1 -1
  35. package/dist-cli/chunks/{chunk-IJP257WP.js → chunk-QBLTH2F6.js} +1 -1
  36. package/dist-cli/chunks/{chunk-LJ3SOZBF.js → chunk-RAY2ZSNI.js} +2 -2
  37. package/dist-cli/chunks/{chunk-DZLBZGHN.js → chunk-RDM3LVH2.js} +2 -2
  38. package/dist-cli/chunks/chunk-RP5CVR6O.js +382 -0
  39. package/dist-cli/chunks/{chunk-PKZNXDUJ.js → chunk-TYV3FMBE.js} +2 -2
  40. package/dist-cli/chunks/{chunk-4NUQVW5P.js → chunk-U3BTJLRM.js} +17 -6
  41. package/dist-cli/chunks/{chunk-QQ4NSPAD.js → chunk-UATE6GSA.js} +2 -2
  42. package/dist-cli/chunks/chunk-V434ATFM.js +13 -0
  43. package/dist-cli/chunks/{chunk-GX6MKIFC.js → chunk-VGAD3CMW.js} +1 -1
  44. package/dist-cli/chunks/{chunk-LI4RLX6B.js → chunk-VPUJQTEO.js} +1 -1
  45. package/dist-cli/chunks/chunk-WBPTJ3WC.js +5 -0
  46. package/dist-cli/chunks/{chunk-NL5IFN4T.js → chunk-WFSLSEGX.js} +2 -2
  47. package/dist-cli/chunks/{chunk-TFZO277G.js → chunk-XFQOFRYY.js} +1 -1
  48. package/dist-cli/chunks/{chunk-TNHF6BON.js → chunk-XQ6PPMM6.js} +1 -1
  49. package/dist-cli/chunks/{chunk-FHJTTB3W.js → chunk-YYZGAZQI.js} +2 -2
  50. package/dist-cli/chunks/{chunk-WBY4JJ2K.js → chunk-ZE2O7AA5.js} +2 -2
  51. package/dist-cli/chunks/{chunk-X4KS33ZC.js → chunk-ZJ64K2PL.js} +2 -2
  52. package/dist-cli/chunks/cli-version-474OBNTF.js +2 -0
  53. package/dist-cli/chunks/{compat-ZJA3N4ZT.js → compat-BNXJOVMU.js} +3 -3
  54. package/dist-cli/chunks/control-6LPRGKTF.js +2 -0
  55. package/dist-cli/chunks/{cpu-profile-ACSQMVXY.js → cpu-profile-3KXOGOJP.js} +2 -2
  56. package/dist-cli/chunks/daemon-OMT3RVU4.js +2 -0
  57. package/dist-cli/chunks/{debug-W2ZOVTQO.js → debug-B3MN6772.js} +11 -10
  58. package/dist-cli/chunks/{detox-ANJO6T27.js → detox-YKSX4DUO.js} +2 -2
  59. package/dist-cli/chunks/{device-KPPN4KYD.js → device-NZX6AKQI.js} +2 -2
  60. package/dist-cli/chunks/{diagnose-5PEJYGES.js → diagnose-26HE6KS5.js} +2 -2
  61. package/dist-cli/chunks/drivers-2PZC4QA3.js +2 -0
  62. package/dist-cli/chunks/{electron-U456QLSQ.js → electron-XEUWIM47.js} +3 -3
  63. package/dist-cli/chunks/flow-P22NDT6V.js +2 -0
  64. package/dist-cli/chunks/help-ECGL4JSP.js +2 -0
  65. package/dist-cli/chunks/{hints-MBBQLMQU.js → hints-C56M4PMW.js} +2 -2
  66. package/dist-cli/chunks/{home-paths-KQKYP2SE.js → home-paths-EYH3RBPS.js} +2 -2
  67. package/dist-cli/chunks/inspect-LJYG4WC6.js +2 -0
  68. package/dist-cli/chunks/{install-desktop-OR6ZJ43X.js → install-desktop-UWHLWFKB.js} +3 -3
  69. package/dist-cli/chunks/{keys-JSQMBUE7.js → keys-Q37NM52E.js} +2 -2
  70. package/dist-cli/chunks/{login-DVMWAI3G.js → login-6E6ZEJRF.js} +4 -4
  71. package/dist-cli/chunks/{logout-RIVPFE5N.js → logout-A7QHH6DQ.js} +2 -2
  72. package/dist-cli/chunks/{maestro-TX6FPTVH.js → maestro-YJRGFGDQ.js} +2 -2
  73. package/dist-cli/chunks/optional-demo-registry-OVWOHGTW.js +2 -0
  74. package/dist-cli/chunks/{preview-3AD7WNA6.js → preview-3OYFVL4A.js} +2 -2
  75. package/dist-cli/chunks/{profile-HY55VFNR.js → profile-5Z2YGBCJ.js} +2 -2
  76. package/dist-cli/chunks/{react-HDRCKCKV.js → react-ZNFFE3VQ.js} +2 -2
  77. package/dist-cli/chunks/{record-HW4C7QYN.js → record-V4CBW3GG.js} +2 -2
  78. package/dist-cli/chunks/runtime-OC6S2C22.js +2 -0
  79. package/dist-cli/chunks/{screenshot-XFR3QN5T.js → screenshot-QWMRWTIQ.js} +2 -2
  80. package/dist-cli/chunks/{screenshot-mode-Y5CVO267.js → screenshot-mode-36EUFBF5.js} +2 -2
  81. package/dist-cli/chunks/{screenshots-RKUL2ZZT.js → screenshots-LOS6WHZN.js} +2 -2
  82. package/dist-cli/chunks/{screenshots-capture-RVNF75ZD.js → screenshots-capture-6D6TBI6A.js} +2 -2
  83. package/dist-cli/chunks/{serve-QMRYLWL5.js → serve-YWGZ2JSI.js} +16 -16
  84. package/dist-cli/chunks/{setup-ELNJS7AI.js → setup-JS35KZ6P.js} +3 -3
  85. package/dist-cli/chunks/{skills-GPSJYS4W.js → skills-2TRDAXNC.js} +2 -2
  86. package/dist-cli/chunks/{slides-OCFNPIFG.js → slides-AO5MBP5Q.js} +2 -2
  87. package/dist-cli/chunks/store-HQKPCA6W.js +2 -0
  88. package/dist-cli/chunks/telemetry-I2H25VVF.js +2 -0
  89. package/dist-cli/chunks/{telemetry-KFZQUFG5.js → telemetry-MBWJUKBU.js} +2 -2
  90. package/dist-cli/chunks/{test-Z2HZXCZM.js → test-TRP2O6AP.js} +3 -3
  91. package/dist-cli/chunks/{three-mode-NKJFCDYS.js → three-mode-VVNOGAZT.js} +2 -2
  92. package/dist-cli/chunks/{timeline-PRGQMQRR.js → timeline-4WDFXUXB.js} +2 -2
  93. package/dist-cli/chunks/{upgrade-3NW7JRRX.js → upgrade-NHQRFD4J.js} +2 -2
  94. package/dist-cli/chunks/upload-6C2EC56N.js +2 -0
  95. package/dist-cli/chunks/{version-FDTZRIYT.js → version-T7O46MZL.js} +2 -2
  96. package/dist-cli/chunks/{web-4N5QQEQJ.js → web-7YW2ISLF.js} +2 -2
  97. package/dist-cli/chunks/{what-happened-IX2RRCOS.js → what-happened-IDOUXSFI.js} +2 -2
  98. package/dist-cli/chunks/{whoami-QZ42FYYF.js → whoami-DQBR3UTO.js} +2 -2
  99. package/dist-lib/agent-daemon-client.cjs +1 -1
  100. package/dist-lib/agent-events.cjs +1 -1
  101. package/dist-lib/agent-sessions.cjs +1 -1
  102. package/dist-lib/attached-projects.cjs +1 -1
  103. package/dist-lib/auth/shared-session.cjs +1 -1
  104. package/dist-lib/backend-origin.cjs +1 -1
  105. package/dist-lib/beta.cjs +1 -1
  106. package/dist-lib/beta.mjs +1 -1
  107. package/dist-lib/bridge-constants.cjs +1 -1
  108. package/dist-lib/cli-constants.cjs +1 -1
  109. package/dist-lib/config.cjs +1 -1
  110. package/dist-lib/detox/index.cjs +1 -1
  111. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  112. package/dist-lib/home-paths.cjs +2 -2
  113. package/dist-lib/host/bridge-host.cjs +77 -44
  114. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  115. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  116. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  117. package/dist-lib/host/websocket-proxy.cjs +1 -1
  118. package/dist-lib/index.cjs +28 -1
  119. package/dist-lib/jump-to-source-babel.cjs +1 -1
  120. package/dist-lib/menu.cjs +1 -1
  121. package/dist-lib/menu.mjs +1 -1
  122. package/dist-lib/metro.cjs +28 -1
  123. package/dist-lib/profiles.cjs +1 -1
  124. package/dist-lib/render-mode.cjs +1 -1
  125. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  126. package/dist-lib/sdk.cjs +38 -10
  127. package/dist-lib/sdk.mjs +38 -10
  128. package/dist-lib/skills.cjs +283 -254
  129. package/dist-lib/vite.cjs +28 -1
  130. package/package.json +1 -1
  131. package/src/home-paths.ts +8 -1
  132. package/src/host/bridge-host.ts +15 -1
  133. package/src/runtime-assets.ts +70 -0
  134. package/src/vite-plugin.ts +9 -0
  135. package/dist-cli/chunks/beta-X6YPQVZH.js +0 -2
  136. package/dist-cli/chunks/chunk-7OAUPGLN.js +0 -23
  137. package/dist-cli/chunks/chunk-IGJHME3T.js +0 -1
  138. package/dist-cli/chunks/chunk-JRL7PFNZ.js +0 -463
  139. package/dist-cli/chunks/chunk-KOKIECMB.js +0 -118
  140. package/dist-cli/chunks/chunk-OAHGYDJR.js +0 -13
  141. package/dist-cli/chunks/chunk-PDLQWZN4.js +0 -2
  142. package/dist-cli/chunks/chunk-SL6565MR.js +0 -1
  143. package/dist-cli/chunks/chunk-V4M2R6FZ.js +0 -2
  144. package/dist-cli/chunks/chunk-V5JEPE3P.js +0 -5
  145. package/dist-cli/chunks/chunk-XU5EMZ4B.js +0 -264
  146. package/dist-cli/chunks/cli-version-ICHQMND6.js +0 -2
  147. package/dist-cli/chunks/control-CZFSYSYG.js +0 -2
  148. package/dist-cli/chunks/daemon-337B4P3B.js +0 -2
  149. package/dist-cli/chunks/drivers-MSDIFHBD.js +0 -2
  150. package/dist-cli/chunks/flow-JL3SC6HC.js +0 -2
  151. package/dist-cli/chunks/help-PA4RTR5X.js +0 -2
  152. package/dist-cli/chunks/inspect-ZP5SM4EW.js +0 -987
  153. package/dist-cli/chunks/optional-demo-registry-ONYG6DUI.js +0 -2
  154. package/dist-cli/chunks/runtime-RHHPW5WO.js +0 -2
  155. package/dist-cli/chunks/store-MBKDUQEQ.js +0 -2
  156. package/dist-cli/chunks/telemetry-46XXIUEE.js +0 -2
  157. package/dist-cli/chunks/upload-QVDVJ6ZK.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.185 | (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-FY6DJGOS.js";import{c as A,e as _}from"./chunk-7OAUPGLN.js";import"./chunk-PDLQWZN4.js";import{b as k}from"./chunk-E5DE33BU.js";import"./chunk-BI56RR3G.js";import"./chunk-GX6MKIFC.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.186 | (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-N3PLEUYD.js";import{g as A,i as _}from"./chunk-BU5CRHHR.js";import"./chunk-MP4CRGWM.js";import{b as k}from"./chunk-LV7DFIBL.js";import"./chunk-FUHNIWFL.js";import"./chunk-VGAD3CMW.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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{d as i}from"./chunk-PKZNXDUJ.js";import{d as n}from"./chunk-LJ3SOZBF.js";import"./chunk-BI56RR3G.js";import"./chunk-GX6MKIFC.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.186 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{d as i}from"./chunk-TYV3FMBE.js";import{d as n}from"./chunk-RAY2ZSNI.js";import"./chunk-FUHNIWFL.js";import"./chunk-VGAD3CMW.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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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;
@@ -271,7 +271,7 @@ function readDevBridgeLockfile() {
271
271
  const bytesRead = import_node_fs.default.readSync(fd, buf, 0, DAEMON_LOCKFILE_MAX_BYTES, 0);
272
272
  const raw = buf.subarray(0, bytesRead).toString("utf8");
273
273
  const parsed = JSON.parse(raw);
274
- if (parsed && parsed.schema === 1 && parsed.source === "vite-dev" && typeof parsed.pid === "number" && typeof parsed.bridgePort === "number" && typeof parsed.runtimePort === "number" && typeof parsed.cwd === "string" && typeof parsed.startedAt === "number" && typeof parsed.heartbeatAt === "number") {
274
+ if (parsed && parsed.schema === 1 && parsed.source === "vite-dev" && typeof parsed.pid === "number" && typeof parsed.bridgePort === "number" && typeof parsed.runtimePort === "number" && typeof parsed.cwd === "string" && typeof parsed.startedAt === "number" && typeof parsed.heartbeatAt === "number" && (parsed.shellPort === void 0 || typeof parsed.shellPort === "number")) {
275
275
  return parsed;
276
276
  }
277
277
  return null;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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;
@@ -71,9 +71,9 @@ __export(bridge_host_exports, {
71
71
  });
72
72
  module.exports = __toCommonJS(bridge_host_exports);
73
73
  var import_child_process4 = require("child_process");
74
- var import_fs3 = __toESM(require("fs"), 1);
74
+ var import_fs4 = __toESM(require("fs"), 1);
75
75
  var import_http3 = require("http");
76
- var import_path3 = __toESM(require("path"), 1);
76
+ var import_path4 = __toESM(require("path"), 1);
77
77
  var import_ws2 = require("ws");
78
78
 
79
79
  // scripts/dev-server-scanner.ts
@@ -156,10 +156,10 @@ function tcpPing(port, timeout = TCP_GATE_MS) {
156
156
  sock.connect(port, "localhost");
157
157
  });
158
158
  }
159
- function httpGet(port, path8, method = "GET", timeout = TIMEOUT_MS, headers = {}) {
159
+ function httpGet(port, path9, method = "GET", timeout = TIMEOUT_MS, headers = {}) {
160
160
  return new Promise((resolve) => {
161
161
  const req = import_http.default.request(
162
- { hostname: "localhost", port, path: path8, method, timeout, headers },
162
+ { hostname: "localhost", port, path: path9, method, timeout, headers },
163
163
  (res) => {
164
164
  let body = "";
165
165
  res.on("data", (c) => body += c.toString());
@@ -786,11 +786,40 @@ function removeDevBridgeLockfile() {
786
786
  }
787
787
  }
788
788
 
789
+ // src/runtime-assets.ts
790
+ var import_fs = __toESM(require("fs"), 1);
791
+ var import_path = __toESM(require("path"), 1);
792
+ var import_url = require("url");
793
+ var _monorepoRootCache;
794
+ function findMonorepoRoot() {
795
+ if (_monorepoRootCache !== void 0) return _monorepoRootCache;
796
+ let dir = import_path.default.dirname((0, import_url.fileURLToPath)(__sootsim_import_meta_url));
797
+ for (let i = 0; i < 12 && dir !== import_path.default.dirname(dir); i++) {
798
+ if (import_fs.default.existsSync(import_path.default.join(dir, "packages/sootsim-engine/package.json")) && import_fs.default.existsSync(import_path.default.join(dir, "public/sootsim"))) {
799
+ _monorepoRootCache = dir;
800
+ return dir;
801
+ }
802
+ dir = import_path.default.dirname(dir);
803
+ }
804
+ _monorepoRootCache = null;
805
+ return null;
806
+ }
807
+ function resolveDevCheckoutRuntimeRoot() {
808
+ if (process.env.SOOTSIM_HOME && readActiveRuntime()) return null;
809
+ const root = findMonorepoRoot();
810
+ if (!root) return null;
811
+ const devBuild = import_path.default.join(root, "public/sootsim");
812
+ if (import_fs.default.existsSync(import_path.default.join(devBuild, "index.html")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine/index.html")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine-tenant/worker.js"))) {
813
+ return devBuild;
814
+ }
815
+ return null;
816
+ }
817
+
789
818
  // src/runtime-delivery.ts
790
819
  var import_child_process2 = require("child_process");
791
820
  var import_crypto = __toESM(require("crypto"), 1);
792
- var import_fs = __toESM(require("fs"), 1);
793
- var import_path = __toESM(require("path"), 1);
821
+ var import_fs2 = __toESM(require("fs"), 1);
822
+ var import_path2 = __toESM(require("path"), 1);
794
823
  var import_stream = require("stream");
795
824
  var import_promises = require("stream/promises");
796
825
  var DEFAULT_RUNTIME_CDN_ORIGIN = "https://sootbean.com";
@@ -798,7 +827,7 @@ var RUNTIME_CDN_ORIGIN_ENV = "SOOTSIM_CDN_ORIGIN";
798
827
  var RUNTIME_CHANNEL_ENV = "SOOTSIM_RUNTIME_CHANNEL";
799
828
  function readConfig() {
800
829
  try {
801
- const parsed = JSON.parse(import_fs.default.readFileSync(configFilePath(), "utf8"));
830
+ const parsed = JSON.parse(import_fs2.default.readFileSync(configFilePath(), "utf8"));
802
831
  return parsed && typeof parsed === "object" ? parsed : {};
803
832
  } catch {
804
833
  return {};
@@ -852,7 +881,7 @@ async function installRuntime(opts = {}) {
852
881
  const { version, channel, entry } = resolveRuntimeVersion(manifest, opts);
853
882
  const destDir = runtimeDir(version);
854
883
  const setActive = opts.setActive !== false;
855
- if (!opts.force && import_fs.default.existsSync(import_path.default.join(destDir, "index.html"))) {
884
+ if (!opts.force && import_fs2.default.existsSync(import_path2.default.join(destDir, "index.html"))) {
856
885
  if (setActive) writeActiveRuntime(version);
857
886
  return {
858
887
  version,
@@ -865,7 +894,7 @@ async function installRuntime(opts = {}) {
865
894
  };
866
895
  }
867
896
  const tarUrl = entry.tarball || runtimeTarballUrl(version, cdnOrigin);
868
- const tarCachePath = import_path.default.join(cacheDir(), `sootsim-runtime-${version}.tar.gz`);
897
+ const tarCachePath = import_path2.default.join(cacheDir(), `sootsim-runtime-${version}.tar.gz`);
869
898
  process.stderr.write(`sootsim: downloading runtime ${version}\u2026
870
899
  `);
871
900
  await downloadToFile(tarUrl, tarCachePath);
@@ -873,23 +902,23 @@ async function installRuntime(opts = {}) {
873
902
  `);
874
903
  const actualSha = await sha256File(tarCachePath);
875
904
  if (actualSha !== entry.sha256) {
876
- import_fs.default.rmSync(tarCachePath, { force: true });
905
+ import_fs2.default.rmSync(tarCachePath, { force: true });
877
906
  throw new Error(
878
907
  `sha256 mismatch for runtime ${version}: expected ${entry.sha256}, actual ${actualSha}`
879
908
  );
880
909
  }
881
- const tmpDir = import_path.default.join(import_path.default.dirname(destDir), `.installing-${version}-${process.pid}`);
882
- import_fs.default.rmSync(tmpDir, { recursive: true, force: true });
883
- import_fs.default.mkdirSync(tmpDir, { recursive: true });
910
+ const tmpDir = import_path2.default.join(import_path2.default.dirname(destDir), `.installing-${version}-${process.pid}`);
911
+ import_fs2.default.rmSync(tmpDir, { recursive: true, force: true });
912
+ import_fs2.default.mkdirSync(tmpDir, { recursive: true });
884
913
  try {
885
914
  await extractTarball(tarCachePath, tmpDir);
886
- if (!import_fs.default.existsSync(import_path.default.join(tmpDir, "index.html"))) {
915
+ if (!import_fs2.default.existsSync(import_path2.default.join(tmpDir, "index.html"))) {
887
916
  throw new Error(`extracted tarball for runtime ${version} is missing index.html`);
888
917
  }
889
- import_fs.default.rmSync(destDir, { recursive: true, force: true });
890
- import_fs.default.renameSync(tmpDir, destDir);
918
+ import_fs2.default.rmSync(destDir, { recursive: true, force: true });
919
+ import_fs2.default.renameSync(tmpDir, destDir);
891
920
  } catch (err) {
892
- import_fs.default.rmSync(tmpDir, { recursive: true, force: true });
921
+ import_fs2.default.rmSync(tmpDir, { recursive: true, force: true });
893
922
  throw err;
894
923
  }
895
924
  if (setActive) writeActiveRuntime(version);
@@ -929,7 +958,7 @@ async function updateRuntimeToLatest(opts = {}) {
929
958
  }
930
959
  const activeVersion = readActiveRuntime();
931
960
  const activeDir = activeVersion ? runtimeDir(activeVersion) : null;
932
- const activeInstalled = activeDir ? import_fs.default.existsSync(import_path.default.join(activeDir, "index.html")) : false;
961
+ const activeInstalled = activeDir ? import_fs2.default.existsSync(import_path2.default.join(activeDir, "index.html")) : false;
933
962
  const shouldInstall = !activeVersion || !activeInstalled || compareSemver(latestVersion, activeVersion) > 0;
934
963
  if (!shouldInstall) {
935
964
  return {
@@ -959,17 +988,17 @@ async function downloadToFile(url, destPath) {
959
988
  if (!res.ok || !res.body) {
960
989
  throw new Error(`download failed: ${res.status} ${res.statusText} (${url})`);
961
990
  }
962
- import_fs.default.mkdirSync(import_path.default.dirname(destPath), { recursive: true });
991
+ import_fs2.default.mkdirSync(import_path2.default.dirname(destPath), { recursive: true });
963
992
  const tmp = `${destPath}.partial`;
964
993
  try {
965
994
  await (0, import_promises.pipeline)(
966
995
  import_stream.Readable.fromWeb(res.body),
967
- import_fs.default.createWriteStream(tmp)
996
+ import_fs2.default.createWriteStream(tmp)
968
997
  );
969
- import_fs.default.renameSync(tmp, destPath);
998
+ import_fs2.default.renameSync(tmp, destPath);
970
999
  } catch (err) {
971
1000
  try {
972
- import_fs.default.unlinkSync(tmp);
1001
+ import_fs2.default.unlinkSync(tmp);
973
1002
  } catch {
974
1003
  }
975
1004
  throw err;
@@ -978,7 +1007,7 @@ async function downloadToFile(url, destPath) {
978
1007
  function sha256File(filePath) {
979
1008
  return new Promise((resolve, reject) => {
980
1009
  const hash = import_crypto.default.createHash("sha256");
981
- const stream = import_fs.default.createReadStream(filePath);
1010
+ const stream = import_fs2.default.createReadStream(filePath);
982
1011
  stream.on("data", (chunk) => hash.update(chunk));
983
1012
  stream.on("error", reject);
984
1013
  stream.on("end", () => resolve(hash.digest("hex")));
@@ -2546,9 +2575,9 @@ function handleAppApiRequest(req, res) {
2546
2575
 
2547
2576
  // src/host/open-url.ts
2548
2577
  var import_child_process3 = require("child_process");
2549
- var import_fs2 = require("fs");
2578
+ var import_fs3 = require("fs");
2550
2579
  var import_os = require("os");
2551
- var import_path2 = require("path");
2580
+ var import_path3 = require("path");
2552
2581
  var MAC_CHROMIUM_CANDIDATES = [
2553
2582
  "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
2554
2583
  "~/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
@@ -2586,12 +2615,12 @@ var UNIX_CHROMIUM_COMMANDS = [
2586
2615
  ];
2587
2616
  var WINDOWS_CHROMIUM_COMMANDS = ["chrome", "msedge", "brave"];
2588
2617
  function expandHome(candidate) {
2589
- return candidate.startsWith("~/") ? (0, import_path2.join)((0, import_os.homedir)(), candidate.slice(2)) : candidate;
2618
+ return candidate.startsWith("~/") ? (0, import_path3.join)((0, import_os.homedir)(), candidate.slice(2)) : candidate;
2590
2619
  }
2591
2620
  function firstExisting(candidates) {
2592
2621
  for (const candidate of candidates) {
2593
2622
  const expanded = expandHome(candidate);
2594
- if ((0, import_fs2.existsSync)(expanded)) return expanded;
2623
+ if ((0, import_fs3.existsSync)(expanded)) return expanded;
2595
2624
  }
2596
2625
  return null;
2597
2626
  }
@@ -2610,7 +2639,7 @@ function lookupExecutable(command, platform) {
2610
2639
  }
2611
2640
  function resolveChromiumBinary(platform = process.platform) {
2612
2641
  const envCandidate = process.env.CHROME_PATH || process.env.CHROMIUM_PATH;
2613
- if (envCandidate && (0, import_fs2.existsSync)(envCandidate)) return envCandidate;
2642
+ if (envCandidate && (0, import_fs3.existsSync)(envCandidate)) return envCandidate;
2614
2643
  const direct = platform === "darwin" ? firstExisting(MAC_CHROMIUM_CANDIDATES) : platform === "win32" ? firstExisting(WINDOWS_CHROMIUM_CANDIDATES) : firstExisting(LINUX_CHROMIUM_CANDIDATES);
2615
2644
  if (direct) return direct;
2616
2645
  const commands = platform === "win32" ? WINDOWS_CHROMIUM_COMMANDS : UNIX_CHROMIUM_COMMANDS;
@@ -2982,6 +3011,7 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
2982
3011
  automationSimActiveGraceMs;
2983
3012
  shouldWriteLockfile;
2984
3013
  shouldWriteDevLockfile;
3014
+ getShellPort;
2985
3015
  sootbeanOrigin = null;
2986
3016
  effectivePort = 0;
2987
3017
  startedAt = 0;
@@ -3014,6 +3044,7 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
3014
3044
  this.port = this.preferredPort;
3015
3045
  this.shouldWriteLockfile = opts.writeLockfile === true;
3016
3046
  this.shouldWriteDevLockfile = opts.writeDevLockfile === true;
3047
+ this.getShellPort = opts.getShellPort ?? null;
3017
3048
  this.portFallbackCount = Math.max(1, opts.portFallbackCount ?? 10);
3018
3049
  this.openUrlHandler = opts.openUrl;
3019
3050
  this.agentHost = new AgentHost({
@@ -3619,12 +3650,14 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
3619
3650
  };
3620
3651
  }
3621
3652
  buildDevLockfileSnapshot() {
3653
+ const shellPort = this.getShellPort?.() ?? null;
3622
3654
  return {
3623
3655
  schema: 1,
3624
3656
  pid: process.pid,
3625
3657
  platform: process.platform,
3626
3658
  bridgePort: this.effectivePort,
3627
3659
  runtimePort: this.effectivePort,
3660
+ ...shellPort && shellPort > 0 ? { shellPort } : {},
3628
3661
  cwd: process.cwd(),
3629
3662
  startedAt: this.startedAt,
3630
3663
  heartbeatAt: Date.now(),
@@ -3639,7 +3672,7 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
3639
3672
  }
3640
3673
  refreshActiveRuntime() {
3641
3674
  this.activeRuntimeVersion = readActiveRuntime();
3642
- this.activeRuntimeDirPath = activeRuntimeDir();
3675
+ this.activeRuntimeDirPath = resolveDevCheckoutRuntimeRoot() ?? activeRuntimeDir();
3643
3676
  }
3644
3677
  runServerScan() {
3645
3678
  if (this.inflightScan) return this.inflightScan;
@@ -3929,34 +3962,34 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
3929
3962
  return;
3930
3963
  }
3931
3964
  }
3932
- const resolved = import_path3.default.resolve(baseDir, "." + rel);
3933
- const baseWithSep = baseDir.endsWith(import_path3.default.sep) ? baseDir : baseDir + import_path3.default.sep;
3965
+ const resolved = import_path4.default.resolve(baseDir, "." + rel);
3966
+ const baseWithSep = baseDir.endsWith(import_path4.default.sep) ? baseDir : baseDir + import_path4.default.sep;
3934
3967
  if (!resolved.startsWith(baseWithSep) && resolved !== baseDir) {
3935
3968
  res.writeHead(403);
3936
3969
  res.end("forbidden");
3937
3970
  return;
3938
3971
  }
3939
- import_fs3.default.realpath(resolved, (realErr, realResolved) => {
3972
+ import_fs4.default.realpath(resolved, (realErr, realResolved) => {
3940
3973
  const servePath = realErr ? resolved : realResolved;
3941
- const servePathWithSep = servePath.endsWith(import_path3.default.sep) ? servePath : servePath + import_path3.default.sep;
3974
+ const servePathWithSep = servePath.endsWith(import_path4.default.sep) ? servePath : servePath + import_path4.default.sep;
3942
3975
  if (!realErr) {
3943
3976
  const realBaseWithSep = (() => {
3944
3977
  try {
3945
- const rb = import_fs3.default.realpathSync(baseDir);
3946
- return rb.endsWith(import_path3.default.sep) ? rb : rb + import_path3.default.sep;
3978
+ const rb = import_fs4.default.realpathSync(baseDir);
3979
+ return rb.endsWith(import_path4.default.sep) ? rb : rb + import_path4.default.sep;
3947
3980
  } catch {
3948
3981
  return baseWithSep;
3949
3982
  }
3950
3983
  })();
3951
- if (!servePathWithSep.startsWith(realBaseWithSep) && servePath + import_path3.default.sep !== realBaseWithSep) {
3984
+ if (!servePathWithSep.startsWith(realBaseWithSep) && servePath + import_path4.default.sep !== realBaseWithSep) {
3952
3985
  res.writeHead(403);
3953
3986
  res.end("forbidden");
3954
3987
  return;
3955
3988
  }
3956
3989
  }
3957
- import_fs3.default.stat(servePath, (err, stats) => {
3990
+ import_fs4.default.stat(servePath, (err, stats) => {
3958
3991
  if (err || !stats?.isFile()) {
3959
- const ext2 = import_path3.default.extname(rel).toLowerCase();
3992
+ const ext2 = import_path4.default.extname(rel).toLowerCase();
3960
3993
  if (ext2 && ext2 !== ".html") {
3961
3994
  res.writeHead(404);
3962
3995
  res.end("not found");
@@ -3967,8 +4000,8 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
3967
4000
  res.end("not found");
3968
4001
  return;
3969
4002
  }
3970
- const indexPath = import_path3.default.join(baseDir, "index.html");
3971
- import_fs3.default.readFile(indexPath, (err2, data) => {
4003
+ const indexPath = import_path4.default.join(baseDir, "index.html");
4004
+ import_fs4.default.readFile(indexPath, (err2, data) => {
3972
4005
  if (err2) {
3973
4006
  res.writeHead(404);
3974
4007
  res.end("not found");
@@ -3988,7 +4021,7 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
3988
4021
  });
3989
4022
  return;
3990
4023
  }
3991
- const ext = import_path3.default.extname(servePath).toLowerCase();
4024
+ const ext = import_path4.default.extname(servePath).toLowerCase();
3992
4025
  const contentType = HTTP_MIME_TYPES[ext] || "application/octet-stream";
3993
4026
  res.writeHead(200, {
3994
4027
  "Content-Type": contentType,
@@ -3999,7 +4032,7 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
3999
4032
  return;
4000
4033
  }
4001
4034
  if (ext === ".html") {
4002
- import_fs3.default.readFile(servePath, (readErr, data) => {
4035
+ import_fs4.default.readFile(servePath, (readErr, data) => {
4003
4036
  if (readErr) {
4004
4037
  try {
4005
4038
  res.end();
@@ -4013,7 +4046,7 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
4013
4046
  });
4014
4047
  return;
4015
4048
  }
4016
- const stream = import_fs3.default.createReadStream(servePath);
4049
+ const stream = import_fs4.default.createReadStream(servePath);
4017
4050
  stream.pipe(res);
4018
4051
  stream.on("error", () => {
4019
4052
  try {
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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;
@@ -114,7 +114,32 @@ function isDaemonLockfileFresh(lock, now = Date.now()) {
114
114
  // src/runtime-assets.ts
115
115
  var import_fs = __toESM(require("fs"), 1);
116
116
  var import_path = __toESM(require("path"), 1);
117
+ var import_url = require("url");
117
118
  var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[sootsim] no engine runtime installed \u2014 run `sootsim setup`, or `sootsim runtime install`";
119
+ var _monorepoRootCache;
120
+ function findMonorepoRoot() {
121
+ if (_monorepoRootCache !== void 0) return _monorepoRootCache;
122
+ let dir = import_path.default.dirname((0, import_url.fileURLToPath)(__sootsim_import_meta_url));
123
+ for (let i = 0; i < 12 && dir !== import_path.default.dirname(dir); i++) {
124
+ if (import_fs.default.existsSync(import_path.default.join(dir, "packages/sootsim-engine/package.json")) && import_fs.default.existsSync(import_path.default.join(dir, "public/sootsim"))) {
125
+ _monorepoRootCache = dir;
126
+ return dir;
127
+ }
128
+ dir = import_path.default.dirname(dir);
129
+ }
130
+ _monorepoRootCache = null;
131
+ return null;
132
+ }
133
+ function resolveDevCheckoutRuntimeRoot() {
134
+ if (process.env.SOOTSIM_HOME && readActiveRuntime()) return null;
135
+ const root = findMonorepoRoot();
136
+ if (!root) return null;
137
+ const devBuild = import_path.default.join(root, "public/sootsim");
138
+ if (import_fs.default.existsSync(import_path.default.join(devBuild, "index.html")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine/index.html")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine-tenant/worker.js"))) {
139
+ return devBuild;
140
+ }
141
+ return null;
142
+ }
118
143
  var MIME_TYPES = {
119
144
  ".js": "application/javascript",
120
145
  ".mjs": "application/javascript",
@@ -150,6 +175,8 @@ var ROOT_RUNTIME_PATHS = [
150
175
  "/preview-sw.js"
151
176
  ];
152
177
  function resolveActiveRuntimeRoot() {
178
+ const devRoot = resolveDevCheckoutRuntimeRoot();
179
+ if (devRoot) return devRoot;
153
180
  const active = readActiveRuntime();
154
181
  if (!active) return null;
155
182
  const dir = runtimeDir(active);
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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;
@@ -42,6 +42,7 @@ var import_path2 = __toESM(require("path"), 1);
42
42
  // src/runtime-assets.ts
43
43
  var import_fs = __toESM(require("fs"), 1);
44
44
  var import_path = __toESM(require("path"), 1);
45
+ var import_url = require("url");
45
46
 
46
47
  // src/home-paths.ts
47
48
  var import_node_fs = __toESM(require("node:fs"), 1);
@@ -75,6 +76,30 @@ var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
75
76
 
76
77
  // src/runtime-assets.ts
77
78
  var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[sootsim] no engine runtime installed \u2014 run `sootsim setup`, or `sootsim runtime install`";
79
+ var _monorepoRootCache;
80
+ function findMonorepoRoot() {
81
+ if (_monorepoRootCache !== void 0) return _monorepoRootCache;
82
+ let dir = import_path.default.dirname((0, import_url.fileURLToPath)(__sootsim_import_meta_url));
83
+ for (let i = 0; i < 12 && dir !== import_path.default.dirname(dir); i++) {
84
+ if (import_fs.default.existsSync(import_path.default.join(dir, "packages/sootsim-engine/package.json")) && import_fs.default.existsSync(import_path.default.join(dir, "public/sootsim"))) {
85
+ _monorepoRootCache = dir;
86
+ return dir;
87
+ }
88
+ dir = import_path.default.dirname(dir);
89
+ }
90
+ _monorepoRootCache = null;
91
+ return null;
92
+ }
93
+ function resolveDevCheckoutRuntimeRoot() {
94
+ if (process.env.SOOTSIM_HOME && readActiveRuntime()) return null;
95
+ const root = findMonorepoRoot();
96
+ if (!root) return null;
97
+ const devBuild = import_path.default.join(root, "public/sootsim");
98
+ if (import_fs.default.existsSync(import_path.default.join(devBuild, "index.html")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine/index.html")) && import_fs.default.existsSync(import_path.default.join(devBuild, "engine-tenant/worker.js"))) {
99
+ return devBuild;
100
+ }
101
+ return null;
102
+ }
78
103
  var MIME_TYPES = {
79
104
  ".js": "application/javascript",
80
105
  ".mjs": "application/javascript",
@@ -110,6 +135,8 @@ var ROOT_RUNTIME_PATHS = [
110
135
  "/preview-sw.js"
111
136
  ];
112
137
  function resolveActiveRuntimeRoot() {
138
+ const devRoot = resolveDevCheckoutRuntimeRoot();
139
+ if (devRoot) return devRoot;
113
140
  const active = readActiveRuntime();
114
141
  if (!active) return null;
115
142
  const dir = runtimeDir(active);
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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.185 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.186 | (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;