sootsim 0.1.234 → 0.1.236

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (145) hide show
  1. package/dist-cli/bin.js +4 -4
  2. package/dist-cli/chunks/{agent-RKA6QTYE.js → agent-CU7Q5K22.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-OB6OUCSF.js → agent-wrapper-FCUDUV52.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-6PFARL6B.js → app-fonts-SPA6U6OA.js} +2 -2
  5. package/dist-cli/chunks/{assert-Q6BV2NEM.js → assert-MZVVW7DV.js} +2 -2
  6. package/dist-cli/chunks/{auth-HJ3NXFJP.js → auth-FV3CIFG6.js} +2 -2
  7. package/dist-cli/chunks/beta-7X7N2CB2.js +2 -0
  8. package/dist-cli/chunks/{camera-LWGYRGBB.js → camera-ALWQVYHU.js} +2 -2
  9. package/dist-cli/chunks/{chunk-VWAOND2T.js → chunk-3PLNSSEF.js} +1 -1
  10. package/dist-cli/chunks/{chunk-WPS3EFNK.js → chunk-4Z3JQFES.js} +1 -1
  11. package/dist-cli/chunks/{chunk-TGPXK5U2.js → chunk-54UQB2TW.js} +2 -2
  12. package/dist-cli/chunks/{chunk-36HLSYS2.js → chunk-5E24H5Z5.js} +2 -2
  13. package/dist-cli/chunks/{chunk-IHRBDBGS.js → chunk-6ALJUG36.js} +2 -2
  14. package/dist-cli/chunks/chunk-6NWVRY7I.js +1 -0
  15. package/dist-cli/chunks/{chunk-HTTSF6YF.js → chunk-7KGIZCO3.js} +2 -2
  16. package/dist-cli/chunks/{chunk-KIYCMEMO.js → chunk-7NCUVJSZ.js} +3 -3
  17. package/dist-cli/chunks/{chunk-4YPQAOC6.js → chunk-APQFVJDK.js} +1 -1
  18. package/dist-cli/chunks/{chunk-AASXS3LK.js → chunk-BA4Q3KRH.js} +2 -2
  19. package/dist-cli/chunks/{chunk-DAWIWEWR.js → chunk-BDL6UO36.js} +1 -1
  20. package/dist-cli/chunks/{chunk-JXPGKN3F.js → chunk-BGW73A3C.js} +6 -6
  21. package/dist-cli/chunks/{chunk-5FDIH76R.js → chunk-DKGKL6KP.js} +2 -2
  22. package/dist-cli/chunks/{chunk-PSDDQWFO.js → chunk-DUCTVOTV.js} +1 -1
  23. package/dist-cli/chunks/{chunk-DFAMEHIJ.js → chunk-EURBYQXU.js} +2 -2
  24. package/dist-cli/chunks/{chunk-2QOLVYFF.js → chunk-FK57ISRW.js} +1 -1
  25. package/dist-cli/chunks/chunk-G3EZ5KVE.js +2 -0
  26. package/dist-cli/chunks/{chunk-XK5YL6SF.js → chunk-G3MVPZBK.js} +2 -2
  27. package/dist-cli/chunks/{chunk-MS33P5CV.js → chunk-GB3IT6AN.js} +1 -1
  28. package/dist-cli/chunks/{chunk-5AVOWKYR.js → chunk-HBQ7CCHG.js} +1 -1
  29. package/dist-cli/chunks/{chunk-KIALD4JX.js → chunk-I664RIMB.js} +2 -2
  30. package/dist-cli/chunks/{chunk-YV35LVCO.js → chunk-IQ2IFKZ4.js} +2 -2
  31. package/dist-cli/chunks/{chunk-5JX4BCGL.js → chunk-KWNVZ2LX.js} +1 -1
  32. package/dist-cli/chunks/chunk-LBXFCH5I.js +118 -0
  33. package/dist-cli/chunks/{chunk-B77AQNOH.js → chunk-NX4NOT7Z.js} +1 -1
  34. package/dist-cli/chunks/{chunk-54U7A36G.js → chunk-ORSIJ76W.js} +1 -1
  35. package/dist-cli/chunks/{chunk-DVPVSP7S.js → chunk-PEFAS7Q4.js} +2 -2
  36. package/dist-cli/chunks/{chunk-6NUCPZGB.js → chunk-PGLRJ4GA.js} +1 -1
  37. package/dist-cli/chunks/{chunk-KIYNMK6P.js → chunk-PUH4S4CC.js} +2 -2
  38. package/dist-cli/chunks/{chunk-KQCFBS3K.js → chunk-Q2X3WO5X.js} +2 -2
  39. package/dist-cli/chunks/{chunk-2YOWFGX3.js → chunk-QPZYFSTW.js} +1 -1
  40. package/dist-cli/chunks/{chunk-A3R3A55R.js → chunk-RBDWTH6O.js} +2 -2
  41. package/dist-cli/chunks/{chunk-6KZBSG52.js → chunk-RGDT3EBF.js} +11 -3
  42. package/dist-cli/chunks/{chunk-LJLYNHJF.js → chunk-SACUEZZP.js} +1 -1
  43. package/dist-cli/chunks/{chunk-37CANPD2.js → chunk-SXENH4HF.js} +3 -3
  44. package/dist-cli/chunks/{chunk-4NTBHQZU.js → chunk-T7KUJUST.js} +3 -3
  45. package/dist-cli/chunks/{chunk-IB6NUH34.js → chunk-TB7CIKZ3.js} +2 -2
  46. package/dist-cli/chunks/{chunk-VVVCJPSQ.js → chunk-UGRYC3HL.js} +1 -1
  47. package/dist-cli/chunks/{chunk-57FLKZOS.js → chunk-V5LQP2JL.js} +35 -33
  48. package/dist-cli/chunks/{chunk-UQEDU53Q.js → chunk-VKJ4BFFU.js} +2 -2
  49. package/dist-cli/chunks/{chunk-7G4VSJQ4.js → chunk-VQKTMX3M.js} +1 -1
  50. package/dist-cli/chunks/{chunk-FSSTNYFL.js → chunk-VRXFBWBW.js} +2 -2
  51. package/dist-cli/chunks/{chunk-LW25UTSS.js → chunk-W7H4OAY4.js} +2 -2
  52. package/dist-cli/chunks/chunk-ZYEIV7ZN.js +1 -0
  53. package/dist-cli/chunks/cli-version-457KT7IL.js +2 -0
  54. package/dist-cli/chunks/{compat-NN643MYB.js → compat-JCUMIY6N.js} +3 -3
  55. package/dist-cli/chunks/{config-GVVXK4LX.js → config-3RHULBQA.js} +2 -2
  56. package/dist-cli/chunks/{control-TL666XUK.js → control-NZJHUGDA.js} +2 -2
  57. package/dist-cli/chunks/daemon-4WYYSXCN.js +2 -0
  58. package/dist-cli/chunks/{debug-4D7UPKL6.js → debug-FXTGTIA4.js} +3 -3
  59. package/dist-cli/chunks/{desktop-UK3TXNWM.js → desktop-4Z3DFJZ3.js} +3 -3
  60. package/dist-cli/chunks/{detox-GGCJIYAO.js → detox-ZHVRCYVV.js} +2 -2
  61. package/dist-cli/chunks/{device-27GVWZRM.js → device-B7RJOTO2.js} +2 -2
  62. package/dist-cli/chunks/{diagnose-MRGZ2QTM.js → diagnose-TWMUMITQ.js} +2 -2
  63. package/dist-cli/chunks/drivers-AK6KP6X4.js +2 -0
  64. package/dist-cli/chunks/{film-SFZGOMH5.js → film-DGR6ALQ2.js} +3 -3
  65. package/dist-cli/chunks/flow-RYMDNC4V.js +2 -0
  66. package/dist-cli/chunks/help-JVO6L7HS.js +2 -0
  67. package/dist-cli/chunks/{hidden-runtime-alias-EJ5NRH2V.js → hidden-runtime-alias-XM5Z6GME.js} +2 -2
  68. package/dist-cli/chunks/{home-paths-ICQCVYFE.js → home-paths-BVXLMDUT.js} +2 -2
  69. package/dist-cli/chunks/inspect-TBOCLFLQ.js +2 -0
  70. package/dist-cli/chunks/install-desktop-N6IVQZBG.js +2 -0
  71. package/dist-cli/chunks/{login-YJFCUM4C.js → login-CTAICT4D.js} +4 -4
  72. package/dist-cli/chunks/{logout-T4MKUGMT.js → logout-X4T57OXG.js} +2 -2
  73. package/dist-cli/chunks/{maestro-MJH5BSJG.js → maestro-ZQYSFWKY.js} +3 -3
  74. package/dist-cli/chunks/{maestro-generate-5ORUBHVA.js → maestro-generate-Y25ETFOO.js} +3 -3
  75. package/dist-cli/chunks/{mode-D7MC6TTG.js → mode-KBQ2HTV2.js} +2 -2
  76. package/dist-cli/chunks/optional-demo-registry-G6FLEREA.js +2 -0
  77. package/dist-cli/chunks/{perf-IRUFRNO5.js → perf-MRGDCXKC.js} +2 -2
  78. package/dist-cli/chunks/{record-GTZOEPUV.js → record-6JMMR3DI.js} +8 -8
  79. package/dist-cli/chunks/runtime-3EJHJAAM.js +2 -0
  80. package/dist-cli/chunks/{screenshot-command-72DH5GXF.js → screenshot-command-SEHNB5PW.js} +3 -3
  81. package/dist-cli/chunks/{screenshots-capture-6QQ4NPZ6.js → screenshots-capture-GAZMPQ2T.js} +2 -2
  82. package/dist-cli/chunks/{serve-C2GAQBTN.js → serve-HQAJCUJP.js} +6 -6
  83. package/dist-cli/chunks/{setup-TOAATCCA.js → setup-A3PIKOJA.js} +3 -3
  84. package/dist-cli/chunks/{skills-PPGCRJYB.js → skills-4522XNAV.js} +2 -2
  85. package/dist-cli/chunks/{storage-LI55AAJB.js → storage-VC4FO3X4.js} +2 -2
  86. package/dist-cli/chunks/store-Y6DYP7EA.js +2 -0
  87. package/dist-cli/chunks/telemetry-3M5Y7GDR.js +2 -0
  88. package/dist-cli/chunks/{timeline-VTU7U2F7.js → timeline-AU6ZXEJY.js} +2 -2
  89. package/dist-cli/chunks/{upgrade-VQSDSFTG.js → upgrade-M5V7P7HI.js} +2 -2
  90. package/dist-cli/chunks/upload-F47SYC4Y.js +2 -0
  91. package/dist-cli/chunks/{version-V37CLU3B.js → version-BIWUB3OU.js} +2 -2
  92. package/dist-cli/chunks/{web-PPVH2K63.js → web-Y2HUWQL6.js} +2 -2
  93. package/dist-cli/chunks/{what-happened-3ZN3FV34.js → what-happened-TTM4T2XG.js} +2 -2
  94. package/dist-lib/agent-daemon-client.cjs +1 -1
  95. package/dist-lib/agent-events.cjs +1 -1
  96. package/dist-lib/agent-identity.cjs +1 -1
  97. package/dist-lib/agent-sessions.cjs +1 -1
  98. package/dist-lib/attached-projects.cjs +1 -1
  99. package/dist-lib/auth/shared-session.cjs +1 -1
  100. package/dist-lib/backend-origin.cjs +1 -1
  101. package/dist-lib/beta.cjs +1 -1
  102. package/dist-lib/beta.mjs +1 -1
  103. package/dist-lib/bridge-constants.cjs +15 -3
  104. package/dist-lib/cli-constants.cjs +1 -1
  105. package/dist-lib/config.cjs +1 -1
  106. package/dist-lib/detox/index.cjs +1 -1
  107. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  108. package/dist-lib/home-paths.cjs +1 -1
  109. package/dist-lib/host/bridge-host.cjs +12 -5
  110. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  111. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  112. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  113. package/dist-lib/host/websocket-proxy.cjs +12 -5
  114. package/dist-lib/index.cjs +1 -1
  115. package/dist-lib/jump-to-source-babel.cjs +1 -1
  116. package/dist-lib/menu.cjs +1 -1
  117. package/dist-lib/menu.mjs +1 -1
  118. package/dist-lib/metro.cjs +1 -1
  119. package/dist-lib/profiles.cjs +1 -1
  120. package/dist-lib/render-mode.cjs +1 -1
  121. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  122. package/dist-lib/sdk.cjs +1 -1
  123. package/dist-lib/sdk.mjs +1 -1
  124. package/dist-lib/skills.cjs +30 -10
  125. package/dist-lib/vite.cjs +1 -1
  126. package/package.json +1 -1
  127. package/src/bridge-constants.ts +14 -0
  128. package/src/host/websocket-proxy.ts +11 -2
  129. package/dist-cli/chunks/beta-7LVCC4DC.js +0 -2
  130. package/dist-cli/chunks/chunk-2RP6TUZ3.js +0 -1
  131. package/dist-cli/chunks/chunk-7ST3HVVO.js +0 -2
  132. package/dist-cli/chunks/chunk-TAPKEEG2.js +0 -1
  133. package/dist-cli/chunks/chunk-TD3PSMQU.js +0 -118
  134. package/dist-cli/chunks/cli-version-7DTLL57G.js +0 -2
  135. package/dist-cli/chunks/daemon-MTBKLQAM.js +0 -2
  136. package/dist-cli/chunks/drivers-BHAS62HS.js +0 -2
  137. package/dist-cli/chunks/flow-X3NSSQNP.js +0 -2
  138. package/dist-cli/chunks/help-7WJO45XU.js +0 -2
  139. package/dist-cli/chunks/inspect-FRSSCWP2.js +0 -2
  140. package/dist-cli/chunks/install-desktop-67O3RXXA.js +0 -2
  141. package/dist-cli/chunks/optional-demo-registry-KV3FG6HR.js +0 -2
  142. package/dist-cli/chunks/runtime-RXHJI4Y4.js +0 -2
  143. package/dist-cli/chunks/store-L4ASCJJM.js +0 -2
  144. package/dist-cli/chunks/telemetry-BVONU4AY.js +0 -2
  145. package/dist-cli/chunks/upload-REVW5JI2.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.234 | (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-6NUCPZGB.js";import{g as A,i as _}from"./chunk-JXPGKN3F.js";import"./chunk-7ST3HVVO.js";import{c as k}from"./chunk-54U7A36G.js";import"./chunk-5JX4BCGL.js";import"./chunk-2QOLVYFF.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.236 | (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-PGLRJ4GA.js";import{g as A,i as _}from"./chunk-BGW73A3C.js";import"./chunk-G3EZ5KVE.js";import{c as k}from"./chunk-ORSIJ76W.js";import"./chunk-KWNVZ2LX.js";import"./chunk-FK57ISRW.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,4 +1,4 @@
1
- /*! sootsim v0.1.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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;
@@ -27,7 +27,8 @@ __export(bridge_constants_exports, {
27
27
  SOOTSIM_BRIDGE_SIM_CLOSE_REASON: () => SOOTSIM_BRIDGE_SIM_CLOSE_REASON,
28
28
  resolveSootsimBridgePort: () => resolveSootsimBridgePort,
29
29
  resolveSootsimBridgePortForHttpPort: () => resolveSootsimBridgePortForHttpPort,
30
- resolveSootsimBridgePortForRuntimeLocation: () => resolveSootsimBridgePortForRuntimeLocation
30
+ resolveSootsimBridgePortForRuntimeLocation: () => resolveSootsimBridgePortForRuntimeLocation,
31
+ resolveSootsimBridgeWebSocketUrl: () => resolveSootsimBridgeWebSocketUrl
31
32
  });
32
33
  module.exports = __toCommonJS(bridge_constants_exports);
33
34
  var DEFAULT_SOOTSIM_BRIDGE_PORT = 7668;
@@ -104,6 +105,16 @@ function resolveSootsimBridgePortForRuntimeLocation(input = {}) {
104
105
  if (baseHttpPort === null) return DEFAULT_SOOTSIM_BRIDGE_PORT;
105
106
  return resolveSootsimBridgePortForHttpPort({ httpPort, baseHttpPort });
106
107
  }
108
+ function resolveSootsimBridgeWebSocketUrl(input) {
109
+ const pageUrl = parseHrefUrl(input.href);
110
+ if (!pageUrl || pageUrl.protocol !== "http:" && pageUrl.protocol !== "https:") {
111
+ throw new Error(`invalid SootSim browser bridge page URL: ${input.href}`);
112
+ }
113
+ const proxyUrl = new URL("/__websocket-proxy", pageUrl);
114
+ proxyUrl.protocol = pageUrl.protocol === "https:" ? "wss:" : "ws:";
115
+ proxyUrl.searchParams.set("url", `ws://localhost:${input.bridgePort}`);
116
+ return proxyUrl.href;
117
+ }
107
118
  var SOOTSIM_BRIDGE_SIM_CLOSE_CODE = 4001;
108
119
  var SOOTSIM_BRIDGE_SIM_CLOSE_REASON = "sootsim close";
109
120
  // Annotate the CommonJS export names for ESM import in node:
@@ -113,5 +124,6 @@ var SOOTSIM_BRIDGE_SIM_CLOSE_REASON = "sootsim close";
113
124
  SOOTSIM_BRIDGE_SIM_CLOSE_REASON,
114
125
  resolveSootsimBridgePort,
115
126
  resolveSootsimBridgePortForHttpPort,
116
- resolveSootsimBridgePortForRuntimeLocation
127
+ resolveSootsimBridgePortForRuntimeLocation,
128
+ resolveSootsimBridgeWebSocketUrl
117
129
  });
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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;
@@ -2862,11 +2862,18 @@ function connectProxyPair(clientWs, upstream) {
2862
2862
  clientWs.on("error", () => safeClose(upstream, 1011, "proxy client error"));
2863
2863
  upstream.on("error", () => safeClose(clientWs, 1011, "upstream websocket error"));
2864
2864
  }
2865
- function createUpstreamWebSocket(targetUrl, protocols, headers) {
2865
+ function createUpstreamWebSocket(targetUrl, protocols, headers, forwardOrigin) {
2866
2866
  const upstreamHeaders = { ...headers };
2867
- if (!Object.keys(upstreamHeaders).some((key) => key.toLowerCase() === "origin")) {
2867
+ const originKeys = Object.keys(upstreamHeaders).filter(
2868
+ (key) => key.toLowerCase() === "origin"
2869
+ );
2870
+ if (forwardOrigin && originKeys.length === 0) {
2868
2871
  upstreamHeaders.origin = getDefaultWebSocketOrigin(targetUrl);
2872
+ } else if (!forwardOrigin) {
2873
+ for (const key of originKeys) delete upstreamHeaders[key];
2869
2874
  }
2875
+ if (Object.keys(upstreamHeaders).length === 0)
2876
+ return new import_ws.WebSocket(targetUrl.href, protocols);
2870
2877
  return new import_ws.WebSocket(targetUrl.href, protocols, {
2871
2878
  headers: upstreamHeaders
2872
2879
  });
@@ -2879,7 +2886,7 @@ function isWebSocketProxyRequestUrl(rawUrl) {
2879
2886
  return false;
2880
2887
  }
2881
2888
  }
2882
- function handleWebSocketProxyUpgrade(req, socket, head) {
2889
+ function handleWebSocketProxyUpgrade(req, socket, head, forwardOrigin = true) {
2883
2890
  if (!isWebSocketProxyRequestUrl(req.url)) return false;
2884
2891
  if (!isSameOriginUpgrade(req)) {
2885
2892
  rejectUpgrade(socket, 403, "forbidden websocket proxy origin");
@@ -2905,7 +2912,7 @@ function handleWebSocketProxyUpgrade(req, socket, head) {
2905
2912
  return true;
2906
2913
  }
2907
2914
  const protocols = getRequestedProtocols(req);
2908
- const upstream = createUpstreamWebSocket(targetUrl, protocols, headers);
2915
+ const upstream = createUpstreamWebSocket(targetUrl, protocols, headers, forwardOrigin);
2909
2916
  let completed = false;
2910
2917
  socket.once("close", () => {
2911
2918
  if (!completed) upstream.terminate();
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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;
@@ -124,11 +124,18 @@ function connectProxyPair(clientWs, upstream) {
124
124
  clientWs.on("error", () => safeClose(upstream, 1011, "proxy client error"));
125
125
  upstream.on("error", () => safeClose(clientWs, 1011, "upstream websocket error"));
126
126
  }
127
- function createUpstreamWebSocket(targetUrl, protocols, headers) {
127
+ function createUpstreamWebSocket(targetUrl, protocols, headers, forwardOrigin) {
128
128
  const upstreamHeaders = { ...headers };
129
- if (!Object.keys(upstreamHeaders).some((key) => key.toLowerCase() === "origin")) {
129
+ const originKeys = Object.keys(upstreamHeaders).filter(
130
+ (key) => key.toLowerCase() === "origin"
131
+ );
132
+ if (forwardOrigin && originKeys.length === 0) {
130
133
  upstreamHeaders.origin = getDefaultWebSocketOrigin(targetUrl);
134
+ } else if (!forwardOrigin) {
135
+ for (const key of originKeys) delete upstreamHeaders[key];
131
136
  }
137
+ if (Object.keys(upstreamHeaders).length === 0)
138
+ return new import_ws.WebSocket(targetUrl.href, protocols);
132
139
  return new import_ws.WebSocket(targetUrl.href, protocols, {
133
140
  headers: upstreamHeaders
134
141
  });
@@ -141,7 +148,7 @@ function isWebSocketProxyRequestUrl(rawUrl) {
141
148
  return false;
142
149
  }
143
150
  }
144
- function handleWebSocketProxyUpgrade(req, socket, head) {
151
+ function handleWebSocketProxyUpgrade(req, socket, head, forwardOrigin = true) {
145
152
  if (!isWebSocketProxyRequestUrl(req.url)) return false;
146
153
  if (!isSameOriginUpgrade(req)) {
147
154
  rejectUpgrade(socket, 403, "forbidden websocket proxy origin");
@@ -167,7 +174,7 @@ function handleWebSocketProxyUpgrade(req, socket, head) {
167
174
  return true;
168
175
  }
169
176
  const protocols = getRequestedProtocols(req);
170
- const upstream = createUpstreamWebSocket(targetUrl, protocols, headers);
177
+ const upstream = createUpstreamWebSocket(targetUrl, protocols, headers, forwardOrigin);
171
178
  let completed = false;
172
179
  socket.once("close", () => {
173
180
  if (!completed) upstream.terminate();
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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;
@@ -7490,7 +7490,7 @@ var init_registry = __esm({
7490
7490
  {
7491
7491
  range: ">=1.0.0",
7492
7492
  coverage: 0.85,
7493
- note: "native-seam: the two pure-JS constants (ScreenCornerRadius, IsScreenRounded) run from the real bundle; only the ScreenCornerRadius NativeModule is ours, and its `cornerRadius` constant returns the live simulated device's display corner radius from the same surface-metrics snapshot the engine renders the device chrome from (iPhone 16 = 55, iPhone 17 Pro = 62, SE = 0, \u2026). this is the package's entire purpose and SootSim answers it precisely \u2014 the same value real iOS reports for that hardware. faithful complete contract, not a no-op.",
7493
+ note: "native-seam: the two pure-JS constants (ScreenCornerRadius, IsScreenRounded) run from the real bundle; only the ScreenCornerRadius NativeModule is ours, and its `cornerRadius` constant returns the live simulated device's measured display corner radius from the same device spec the engine renders the chrome from. this is the package's entire purpose and SootSim answers it precisely. faithful complete contract, not a no-op.",
7494
7494
  working: "NativeModules.ScreenCornerRadius.cornerRadius (real per-device radius, synchronous constant read at import like upstream); ScreenCornerRadius + IsScreenRounded constants computed by the real package JS off that value, so IsScreenRounded is correct per device",
7495
7495
  missing: 'none functionally \u2014 returns the exact display corner radius of the simulated device; 0 only in the pre-boot window before the first device spec publishes, which the upstream `?? 0` already treats as "couldn\'t be detected"'
7496
7496
  }
@@ -10309,7 +10309,8 @@ __export(bridge_constants_exports, {
10309
10309
  SOOTSIM_BRIDGE_SIM_CLOSE_REASON: () => SOOTSIM_BRIDGE_SIM_CLOSE_REASON,
10310
10310
  resolveSootsimBridgePort: () => resolveSootsimBridgePort,
10311
10311
  resolveSootsimBridgePortForHttpPort: () => resolveSootsimBridgePortForHttpPort,
10312
- resolveSootsimBridgePortForRuntimeLocation: () => resolveSootsimBridgePortForRuntimeLocation
10312
+ resolveSootsimBridgePortForRuntimeLocation: () => resolveSootsimBridgePortForRuntimeLocation,
10313
+ resolveSootsimBridgeWebSocketUrl: () => resolveSootsimBridgeWebSocketUrl
10313
10314
  });
10314
10315
  function parsePort(value) {
10315
10316
  if (typeof value === "number") {
@@ -10376,6 +10377,16 @@ function resolveSootsimBridgePortForRuntimeLocation(input = {}) {
10376
10377
  if (baseHttpPort === null) return DEFAULT_SOOTSIM_BRIDGE_PORT;
10377
10378
  return resolveSootsimBridgePortForHttpPort({ httpPort, baseHttpPort });
10378
10379
  }
10380
+ function resolveSootsimBridgeWebSocketUrl(input) {
10381
+ const pageUrl = parseHrefUrl(input.href);
10382
+ if (!pageUrl || pageUrl.protocol !== "http:" && pageUrl.protocol !== "https:") {
10383
+ throw new Error(`invalid SootSim browser bridge page URL: ${input.href}`);
10384
+ }
10385
+ const proxyUrl = new URL("/__websocket-proxy", pageUrl);
10386
+ proxyUrl.protocol = pageUrl.protocol === "https:" ? "wss:" : "ws:";
10387
+ proxyUrl.searchParams.set("url", `ws://localhost:${input.bridgePort}`);
10388
+ return proxyUrl.href;
10389
+ }
10379
10390
  var DEFAULT_SOOTSIM_BRIDGE_PORT, CONTRAST_DEV_HTTP_BASE_PORT, SOOTSIM_SITE_DEV_HTTP_BASE_PORT, SOOTSIM_SHELL_DEV_HTTP_BASE_PORT, LOCAL_DEV_HTTP_BASE_PORTS, MAX_LOCAL_DEV_PORT_OFFSET, SOOTSIM_BRIDGE_SIM_CLOSE_CODE, SOOTSIM_BRIDGE_SIM_CLOSE_REASON;
10380
10391
  var init_bridge_constants = __esm({
10381
10392
  "src/bridge-constants.ts"() {
@@ -13325,11 +13336,18 @@ function connectProxyPair(clientWs, upstream) {
13325
13336
  clientWs.on("error", () => safeClose(upstream, 1011, "proxy client error"));
13326
13337
  upstream.on("error", () => safeClose(clientWs, 1011, "upstream websocket error"));
13327
13338
  }
13328
- function createUpstreamWebSocket(targetUrl, protocols, headers) {
13339
+ function createUpstreamWebSocket(targetUrl, protocols, headers, forwardOrigin) {
13329
13340
  const upstreamHeaders = { ...headers };
13330
- if (!Object.keys(upstreamHeaders).some((key) => key.toLowerCase() === "origin")) {
13341
+ const originKeys = Object.keys(upstreamHeaders).filter(
13342
+ (key) => key.toLowerCase() === "origin"
13343
+ );
13344
+ if (forwardOrigin && originKeys.length === 0) {
13331
13345
  upstreamHeaders.origin = getDefaultWebSocketOrigin(targetUrl);
13346
+ } else if (!forwardOrigin) {
13347
+ for (const key of originKeys) delete upstreamHeaders[key];
13332
13348
  }
13349
+ if (Object.keys(upstreamHeaders).length === 0)
13350
+ return new import_ws.WebSocket(targetUrl.href, protocols);
13333
13351
  return new import_ws.WebSocket(targetUrl.href, protocols, {
13334
13352
  headers: upstreamHeaders
13335
13353
  });
@@ -13342,7 +13360,7 @@ function isWebSocketProxyRequestUrl(rawUrl) {
13342
13360
  return false;
13343
13361
  }
13344
13362
  }
13345
- function handleWebSocketProxyUpgrade(req, socket, head) {
13363
+ function handleWebSocketProxyUpgrade(req, socket, head, forwardOrigin = true) {
13346
13364
  if (!isWebSocketProxyRequestUrl(req.url)) return false;
13347
13365
  if (!isSameOriginUpgrade(req)) {
13348
13366
  rejectUpgrade(socket, 403, "forbidden websocket proxy origin");
@@ -13368,7 +13386,7 @@ function handleWebSocketProxyUpgrade(req, socket, head) {
13368
13386
  return true;
13369
13387
  }
13370
13388
  const protocols = getRequestedProtocols(req);
13371
- const upstream = createUpstreamWebSocket(targetUrl, protocols, headers);
13389
+ const upstream = createUpstreamWebSocket(targetUrl, protocols, headers, forwardOrigin);
13372
13390
  let completed = false;
13373
13391
  socket.once("close", () => {
13374
13392
  if (!completed) upstream.terminate();
@@ -15591,9 +15609,11 @@ __export(ws_bridge_exports, {
15591
15609
  worldForBridgePort: () => worldForBridgePort
15592
15610
  });
15593
15611
  function resolveBridgeWorld() {
15594
- if (resolvedWorld) return resolvedWorld;
15595
- resolvedWorld = resolveBridgeWorldFresh();
15596
- return resolvedWorld;
15612
+ const homeDir = sootsimHomeDir();
15613
+ if (resolvedWorld?.homeDir === homeDir) return resolvedWorld.world;
15614
+ const world = resolveBridgeWorldFresh();
15615
+ resolvedWorld = { homeDir, world };
15616
+ return world;
15597
15617
  }
15598
15618
  function resolveBridgeWorldFresh() {
15599
15619
  const dev = readDevBridgeLockfile();
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.236 | (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.234",
3
+ "version": "0.1.236",
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",
@@ -106,6 +106,20 @@ export function resolveSootsimBridgePortForRuntimeLocation(
106
106
  return resolveSootsimBridgePortForHttpPort({ httpPort, baseHttpPort })
107
107
  }
108
108
 
109
+ export function resolveSootsimBridgeWebSocketUrl(input: {
110
+ bridgePort: number
111
+ href: string
112
+ }): string {
113
+ const pageUrl = parseHrefUrl(input.href)
114
+ if (!pageUrl || (pageUrl.protocol !== 'http:' && pageUrl.protocol !== 'https:')) {
115
+ throw new Error(`invalid SootSim browser bridge page URL: ${input.href}`)
116
+ }
117
+ const proxyUrl = new URL('/__websocket-proxy', pageUrl)
118
+ proxyUrl.protocol = pageUrl.protocol === 'https:' ? 'wss:' : 'ws:'
119
+ proxyUrl.searchParams.set('url', `ws://localhost:${input.bridgePort}`)
120
+ return proxyUrl.href
121
+ }
122
+
109
123
  // private websocket close code used when the daemon intentionally closes a
110
124
  // sim. browser clients treat it as terminal and skip their normal reconnect
111
125
  // loop; playwright-owned sims use it to close their hosting context.
@@ -116,11 +116,19 @@ function createUpstreamWebSocket(
116
116
  targetUrl: URL,
117
117
  protocols: string[],
118
118
  headers: Record<string, string>,
119
+ forwardOrigin: boolean,
119
120
  ): WebSocket {
120
121
  const upstreamHeaders = { ...headers }
121
- if (!Object.keys(upstreamHeaders).some((key) => key.toLowerCase() === 'origin')) {
122
+ const originKeys = Object.keys(upstreamHeaders).filter(
123
+ (key) => key.toLowerCase() === 'origin',
124
+ )
125
+ if (forwardOrigin && originKeys.length === 0) {
122
126
  upstreamHeaders.origin = getDefaultWebSocketOrigin(targetUrl)
127
+ } else if (!forwardOrigin) {
128
+ for (const key of originKeys) delete upstreamHeaders[key]
123
129
  }
130
+ if (Object.keys(upstreamHeaders).length === 0)
131
+ return new WebSocket(targetUrl.href, protocols)
124
132
  return new WebSocket(targetUrl.href, protocols, {
125
133
  headers: upstreamHeaders,
126
134
  })
@@ -139,6 +147,7 @@ export function handleWebSocketProxyUpgrade(
139
147
  req: IncomingMessage,
140
148
  socket: Duplex,
141
149
  head: Buffer,
150
+ forwardOrigin = true,
142
151
  ): boolean {
143
152
  if (!isWebSocketProxyRequestUrl(req.url)) return false
144
153
  if (!isSameOriginUpgrade(req)) {
@@ -167,7 +176,7 @@ export function handleWebSocketProxyUpgrade(
167
176
  }
168
177
 
169
178
  const protocols = getRequestedProtocols(req)
170
- const upstream = createUpstreamWebSocket(targetUrl, protocols, headers)
179
+ const upstream = createUpstreamWebSocket(targetUrl, protocols, headers, forwardOrigin)
171
180
  let completed = false
172
181
  socket.once('close', () => {
173
182
  if (!completed) upstream.terminate()
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-5AVOWKYR.js";import"./chunk-2QOLVYFF.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.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- var t=4001,r="sootsim close";var o="http://localhost:5173/";export{t as a,r as b,o as c};
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.234 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */