sootsim 0.1.270 → 0.1.272

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/detox/expectations.ts +56 -48
  2. package/dist-cli/bin.js +4 -4
  3. package/dist-cli/chunks/{agent-4YXUPSJ2.js → agent-P6GZSLRM.js} +2 -2
  4. package/dist-cli/chunks/{agent-wrapper-BMJPWHWK.js → agent-wrapper-2V6QR7JT.js} +2 -2
  5. package/dist-cli/chunks/{app-fonts-EDRH6ETC.js → app-fonts-KNRMKJXD.js} +2 -2
  6. package/dist-cli/chunks/{assert-CRDV324D.js → assert-VWMXT55P.js} +2 -2
  7. package/dist-cli/chunks/{auth-WYRQIJEN.js → auth-GIM3YHL4.js} +2 -2
  8. package/dist-cli/chunks/beta-C322CH35.js +2 -0
  9. package/dist-cli/chunks/{camera-5TO6IVBP.js → camera-LV3B3ERY.js} +2 -2
  10. package/dist-cli/chunks/{chunk-MYBY7OHL.js → chunk-2MSJ4TOR.js} +1 -1
  11. package/dist-cli/chunks/{chunk-GQDQO3KU.js → chunk-3D3WUHI2.js} +2 -2
  12. package/dist-cli/chunks/{chunk-OUKH6UGN.js → chunk-3GZ4ZGUW.js} +1 -1
  13. package/dist-cli/chunks/{chunk-TLNGREAA.js → chunk-3P3LAIKZ.js} +2 -2
  14. package/dist-cli/chunks/{chunk-ZTKDHPA6.js → chunk-4BQDKWUP.js} +2 -2
  15. package/dist-cli/chunks/{chunk-6CI73D3X.js → chunk-4RTPPDCM.js} +2 -2
  16. package/dist-cli/chunks/{chunk-NTO6SKS5.js → chunk-52IU2APA.js} +1 -1
  17. package/dist-cli/chunks/{chunk-TMWNOQAA.js → chunk-5IBEBKBU.js} +1 -1
  18. package/dist-cli/chunks/{chunk-LHMVSKKD.js → chunk-647M3ME6.js} +2 -2
  19. package/dist-cli/chunks/{chunk-FCMEOOQE.js → chunk-6LJQM2PV.js} +2 -2
  20. package/dist-cli/chunks/{chunk-44ISBOEK.js → chunk-6UXGVE7B.js} +3 -3
  21. package/dist-cli/chunks/{chunk-MD24VVKT.js → chunk-77AHG7XC.js} +2 -2
  22. package/dist-cli/chunks/{chunk-SLR3HWMB.js → chunk-7FREST5Z.js} +2 -2
  23. package/dist-cli/chunks/{chunk-2J3E5TPS.js → chunk-AMOUIEAP.js} +1 -1
  24. package/dist-cli/chunks/{chunk-FNBFRG64.js → chunk-BIWYNMXB.js} +1 -1
  25. package/dist-cli/chunks/{chunk-6JLIPPNB.js → chunk-E6FZKMNQ.js} +1 -1
  26. package/dist-cli/chunks/{chunk-3ZOF2BTJ.js → chunk-EOIPXAUF.js} +1 -1
  27. package/dist-cli/chunks/{chunk-SW5HZ5LK.js → chunk-HS527F2B.js} +1 -1
  28. package/dist-cli/chunks/chunk-JOSBLCUP.js +2 -0
  29. package/dist-cli/chunks/{chunk-M32JVXHU.js → chunk-K4USS5KY.js} +1 -1
  30. package/dist-cli/chunks/{chunk-B5IBLYEO.js → chunk-LSMPXU4D.js} +3 -3
  31. package/dist-cli/chunks/{chunk-DCJXHSIA.js → chunk-NMPW3IKE.js} +2 -2
  32. package/dist-cli/chunks/{chunk-3VIMSXQZ.js → chunk-NVY52AQE.js} +2 -2
  33. package/dist-cli/chunks/chunk-PHCPWYXA.js +1 -0
  34. package/dist-cli/chunks/{chunk-IIXRM6BB.js → chunk-Q2RS3DKR.js} +2 -2
  35. package/dist-cli/chunks/{chunk-AMA3YGJ5.js → chunk-QCZHL3KI.js} +2 -2
  36. package/dist-cli/chunks/{chunk-HWGKGIWE.js → chunk-QPADKGOP.js} +2 -2
  37. package/dist-cli/chunks/{chunk-ABSUFSOH.js → chunk-QUZDHDE3.js} +2 -2
  38. package/dist-cli/chunks/{chunk-557IYHPC.js → chunk-SWF6GSP2.js} +1 -1
  39. package/dist-cli/chunks/{chunk-AMVYE3F4.js → chunk-TRKOQX32.js} +2 -2
  40. package/dist-cli/chunks/{chunk-YKK2QUGO.js → chunk-U7UBIV75.js} +1 -1
  41. package/dist-cli/chunks/{chunk-TIONGRTA.js → chunk-UE2XRBIP.js} +18 -18
  42. package/dist-cli/chunks/chunk-UZH4THUY.js +1 -0
  43. package/dist-cli/chunks/{chunk-UPRCATUH.js → chunk-V77BGSWB.js} +2 -2
  44. package/dist-cli/chunks/{chunk-5IHDZOMR.js → chunk-VE2JT5D4.js} +1 -1
  45. package/dist-cli/chunks/{chunk-4HPWZVBS.js → chunk-W5DZNFI3.js} +1 -1
  46. package/dist-cli/chunks/{chunk-ERXCR7NU.js → chunk-WO7QKCZR.js} +2 -2
  47. package/dist-cli/chunks/{chunk-FHPXOPMC.js → chunk-WUKCADRK.js} +2 -2
  48. package/dist-cli/chunks/{chunk-TZH4VH32.js → chunk-WZT2JQZ7.js} +3 -3
  49. package/dist-cli/chunks/{chunk-GAYG7AO4.js → chunk-YASTVFWI.js} +1 -1
  50. package/dist-cli/chunks/{chunk-SDKIUJUO.js → chunk-YMPQ6USJ.js} +2 -2
  51. package/dist-cli/chunks/{chunk-AG563BSO.js → chunk-YQ54F276.js} +2 -2
  52. package/dist-cli/chunks/{chunk-74HIBIJQ.js → chunk-YUU2LHZS.js} +1 -1
  53. package/dist-cli/chunks/{chunk-M5VURHXD.js → chunk-ZJYKKMU7.js} +1 -1
  54. package/dist-cli/chunks/cli-version-EJ6Y575J.js +2 -0
  55. package/dist-cli/chunks/{compat-IZEDAAUW.js → compat-5WRD3HPR.js} +3 -3
  56. package/dist-cli/chunks/{config-I4CXZ6M7.js → config-2WYBXEGB.js} +2 -2
  57. package/dist-cli/chunks/{control-DVF7UL5D.js → control-LQT2NTEJ.js} +2 -2
  58. package/dist-cli/chunks/daemon-Y7L22R6N.js +2 -0
  59. package/dist-cli/chunks/{debug-5X2F2WRP.js → debug-AYCCUWM2.js} +3 -3
  60. package/dist-cli/chunks/{desktop-JHEYQZGF.js → desktop-ZZQMD6Q7.js} +3 -3
  61. package/dist-cli/chunks/{detox-W64UENQG.js → detox-7LRIEKC6.js} +2 -2
  62. package/dist-cli/chunks/{device-ZBSW2EHS.js → device-GDCBAZPE.js} +2 -2
  63. package/dist-cli/chunks/{diagnose-WER4X3P5.js → diagnose-6VSIE264.js} +2 -2
  64. package/dist-cli/chunks/drivers-Q6FTTPFM.js +2 -0
  65. package/dist-cli/chunks/{film-TIXNUTR6.js → film-7M3ZY5OZ.js} +3 -3
  66. package/dist-cli/chunks/flow-NFGZ4HEU.js +2 -0
  67. package/dist-cli/chunks/help-UXGBACTX.js +2 -0
  68. package/dist-cli/chunks/{hidden-runtime-alias-R3JH3INM.js → hidden-runtime-alias-ADZDP6BO.js} +2 -2
  69. package/dist-cli/chunks/{home-paths-CNNARPCT.js → home-paths-H3OAW2FB.js} +2 -2
  70. package/dist-cli/chunks/inspect-T7L3UWXF.js +2 -0
  71. package/dist-cli/chunks/install-desktop-PRSRY6WV.js +2 -0
  72. package/dist-cli/chunks/{login-6NCCZ3CZ.js → login-EJ2AKM3R.js} +4 -4
  73. package/dist-cli/chunks/{logout-C4VKXUH4.js → logout-QI5YXZJQ.js} +2 -2
  74. package/dist-cli/chunks/{maestro-ZRGFQ3MV.js → maestro-DPMZM74Q.js} +3 -3
  75. package/dist-cli/chunks/{maestro-generate-A5XZS5GC.js → maestro-generate-CPUUFDJ3.js} +3 -3
  76. package/dist-cli/chunks/{mode-IFFZ55HM.js → mode-FSTSZ3MW.js} +2 -2
  77. package/dist-cli/chunks/optional-demo-registry-5MYUTZN2.js +2 -0
  78. package/dist-cli/chunks/{perf-44KZNTIV.js → perf-VD26YPVC.js} +2 -2
  79. package/dist-cli/chunks/{record-GZLZNXYZ.js → record-M76CRKNG.js} +3 -3
  80. package/dist-cli/chunks/runtime-G35ZTARE.js +2 -0
  81. package/dist-cli/chunks/{screenshot-command-GL3STSWK.js → screenshot-command-CQNZOJCP.js} +3 -3
  82. package/dist-cli/chunks/{screenshots-capture-QSSBWHN6.js → screenshots-capture-MUU37VUC.js} +2 -2
  83. package/dist-cli/chunks/{serve-AFK6X2Q3.js → serve-RTBFO3EP.js} +2 -2
  84. package/dist-cli/chunks/{setup-DYSDNEUE.js → setup-DZQ4OLOY.js} +3 -3
  85. package/dist-cli/chunks/{skills-YXWQ43PZ.js → skills-RESDEF2Z.js} +2 -2
  86. package/dist-cli/chunks/{storage-C7IS5GTM.js → storage-SCHHLLFY.js} +2 -2
  87. package/dist-cli/chunks/store-RPDRE7TV.js +2 -0
  88. package/dist-cli/chunks/telemetry-TAT36E3X.js +2 -0
  89. package/dist-cli/chunks/{timeline-FDTIHQ5V.js → timeline-K4N53W24.js} +2 -2
  90. package/dist-cli/chunks/{upgrade-VRQCFJEI.js → upgrade-LKS7JREU.js} +2 -2
  91. package/dist-cli/chunks/upload-4CZLH275.js +2 -0
  92. package/dist-cli/chunks/{version-MP6NKJ27.js → version-RKRNYRKP.js} +2 -2
  93. package/dist-cli/chunks/{web-XYPFJHKW.js → web-M2C2TSTH.js} +2 -2
  94. package/dist-cli/chunks/{what-happened-IM6UH24Q.js → what-happened-2ULBMYTD.js} +2 -2
  95. package/dist-lib/agent-daemon-client.cjs +1 -1
  96. package/dist-lib/agent-events.cjs +1 -1
  97. package/dist-lib/agent-identity.cjs +1 -1
  98. package/dist-lib/agent-sessions.cjs +1 -1
  99. package/dist-lib/attached-projects.cjs +1 -1
  100. package/dist-lib/auth/shared-session.cjs +1 -1
  101. package/dist-lib/backend-origin.cjs +1 -1
  102. package/dist-lib/beta.cjs +1 -1
  103. package/dist-lib/beta.mjs +1 -1
  104. package/dist-lib/bridge-constants.cjs +1 -1
  105. package/dist-lib/cli-constants.cjs +1 -1
  106. package/dist-lib/config.cjs +1 -1
  107. package/dist-lib/detox/index.cjs +41 -43
  108. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  109. package/dist-lib/home-paths.cjs +1 -1
  110. package/dist-lib/host/bridge-host.cjs +1 -1
  111. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  112. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  113. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  114. package/dist-lib/host/websocket-proxy.cjs +1 -1
  115. package/dist-lib/index.cjs +3 -2
  116. package/dist-lib/jump-to-source-babel.cjs +1 -1
  117. package/dist-lib/menu.cjs +1 -1
  118. package/dist-lib/menu.mjs +1 -1
  119. package/dist-lib/metro.cjs +3 -2
  120. package/dist-lib/profiles.cjs +1 -1
  121. package/dist-lib/render-mode.cjs +1 -1
  122. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  123. package/dist-lib/sdk.cjs +1 -1
  124. package/dist-lib/sdk.mjs +1 -1
  125. package/dist-lib/skills.cjs +12 -12
  126. package/dist-lib/vite.cjs +3 -2
  127. package/package.json +1 -1
  128. package/src/runtime-assets.ts +1 -0
  129. package/src/screenshots/frame-compose.ts +14 -12
  130. package/dist-cli/chunks/beta-NBANSL2S.js +0 -2
  131. package/dist-cli/chunks/chunk-PDFKRVDC.js +0 -2
  132. package/dist-cli/chunks/chunk-XTTXSDDA.js +0 -1
  133. package/dist-cli/chunks/chunk-ZZH2AFPJ.js +0 -1
  134. package/dist-cli/chunks/cli-version-BLKUTVJ2.js +0 -2
  135. package/dist-cli/chunks/daemon-FPKQPSSY.js +0 -2
  136. package/dist-cli/chunks/drivers-6P53DLMM.js +0 -2
  137. package/dist-cli/chunks/flow-53XFDYLL.js +0 -2
  138. package/dist-cli/chunks/help-MPYJLD7I.js +0 -2
  139. package/dist-cli/chunks/inspect-JBDDYUA5.js +0 -2
  140. package/dist-cli/chunks/install-desktop-BBP7AMK4.js +0 -2
  141. package/dist-cli/chunks/optional-demo-registry-TQZA65K3.js +0 -2
  142. package/dist-cli/chunks/runtime-F4FCEPPB.js +0 -2
  143. package/dist-cli/chunks/store-LVF2C2XZ.js +0 -2
  144. package/dist-cli/chunks/telemetry-5V3OXY6C.js +0 -2
  145. package/dist-cli/chunks/upload-CRCPDN6G.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.270 | (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-M5VURHXD.js";import{g as A,i as _}from"./chunk-ERXCR7NU.js";import"./chunk-6JLIPPNB.js";import{c as k}from"./chunk-74HIBIJQ.js";import"./chunk-557IYHPC.js";import"./chunk-5IHDZOMR.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.272 | (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-ZJYKKMU7.js";import{g as A,i as _}from"./chunk-WO7QKCZR.js";import"./chunk-E6FZKMNQ.js";import{c as k}from"./chunk-YUU2LHZS.js";import"./chunk-SWF6GSP2.js";import"./chunk-VE2JT5D4.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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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;
@@ -711,36 +711,25 @@ async function scrollMatcherElement(page, findNode, matcher, pixels, direction)
711
711
  if (!node) {
712
712
  throw new Error(`scroll container not found: ${JSON.stringify(matcher)}`);
713
713
  }
714
+ const before = scrollOffsetOf(node);
714
715
  await dragScrollNode(page, node, pixels, direction);
716
+ const after = scrollOffsetOf(await findNode(matcher));
717
+ return Math.abs(after.x - before.x) + Math.abs(after.y - before.y);
715
718
  }
716
- function isNodeVisibleInViewport(node, viewport) {
717
- if (!node || node.layout.width <= 0 || node.layout.height <= 0) {
718
- return false;
719
- }
720
- const frame = node.visibleFrame ?? {
721
- x: node.absolutePosition?.x ?? node.layout?.x ?? 0,
722
- y: node.absolutePosition?.y ?? node.layout?.y ?? 0,
723
- width: node.layout.width,
724
- height: node.layout.height
725
- };
726
- const right = frame.x + frame.width;
727
- const bottom = frame.y + frame.height;
728
- const visibleWidth = Math.max(0, Math.min(right, viewport.width) - Math.max(frame.x, 0));
729
- const visibleHeight = Math.max(
730
- 0,
731
- Math.min(bottom, viewport.height) - Math.max(frame.y, 0)
732
- );
733
- const visibleArea = visibleWidth * visibleHeight;
734
- const totalArea = node.layout.width * node.layout.height;
735
- return totalArea > 0 && visibleArea / totalArea >= DEFAULT_VISIBILITY_THRESHOLD;
719
+ function scrollOffsetOf(node) {
720
+ return { x: node?.scrollOffsetX ?? 0, y: node?.scrollOffsetY ?? 0 };
736
721
  }
737
- async function isNodeVisible(page, node) {
738
- if (!node || node.layout.width <= 0 || node.layout.height <= 0) {
739
- return false;
740
- }
741
- return isNodeVisibleInViewport(node, await readSootsimInteractiveViewport(page));
722
+ function visibleFraction(node) {
723
+ const totalArea = (node?.layout?.width ?? 0) * (node?.layout?.height ?? 0);
724
+ const frame = node?.visibleFrame;
725
+ if (totalArea <= 0 || !frame) return 0;
726
+ const visibleArea = Math.max(0, frame.width) * Math.max(0, frame.height);
727
+ return visibleArea / totalArea;
728
+ }
729
+ function isNodeVisible(node) {
730
+ return visibleFraction(node) >= DEFAULT_VISIBILITY_THRESHOLD;
742
731
  }
743
- function describeNodeVisibility(node, viewport) {
732
+ function describeNodeVisibility(node) {
744
733
  if (!node) return "not found";
745
734
  const absX = node.absolutePosition?.x ?? node.layout?.x ?? 0;
746
735
  const absY = node.absolutePosition?.y ?? node.layout?.y ?? 0;
@@ -754,7 +743,8 @@ function describeNodeVisibility(node, viewport) {
754
743
  bottom: absY + (node.layout?.height ?? 0)
755
744
  },
756
745
  visibleFrame: node.visibleFrame ?? null,
757
- viewport: viewport ?? null,
746
+ visibleFraction: visibleFraction(node),
747
+ threshold: DEFAULT_VISIBILITY_THRESHOLD,
758
748
  style: node.style ?? null
759
749
  });
760
750
  }
@@ -801,9 +791,7 @@ var SootSimExpectation = class _SootSimExpectation {
801
791
  }
802
792
  async toBeVisible() {
803
793
  const node = await this.findNode(this.matcher);
804
- const page = this.getPage();
805
- const viewport = node ? await readSootsimInteractiveViewport(page) : void 0;
806
- const visible = viewport ? isNodeVisibleInViewport(node, viewport) : false;
794
+ const visible = isNodeVisible(node);
807
795
  if (this.negated) {
808
796
  if (visible) {
809
797
  throw new Error(
@@ -813,14 +801,14 @@ var SootSimExpectation = class _SootSimExpectation {
813
801
  } else {
814
802
  if (!visible) {
815
803
  throw new Error(
816
- `expected element to be visible but it is ${describeNodeVisibility(node, viewport)}: ${JSON.stringify(this.matcher)}`
804
+ `expected element to be visible but it is ${describeNodeVisibility(node)}: ${JSON.stringify(this.matcher)}`
817
805
  );
818
806
  }
819
807
  }
820
808
  }
821
809
  async toBeNotVisible() {
822
810
  const node = await this.findNode(this.matcher);
823
- const visible = await isNodeVisible(this.getPage(), node);
811
+ const visible = isNodeVisible(node);
824
812
  if (visible) {
825
813
  throw new Error(
826
814
  `expected element NOT to be visible: ${JSON.stringify(this.matcher)}`
@@ -977,12 +965,10 @@ var SootSimWaitForChain = class {
977
965
  toBeVisible() {
978
966
  this.assertionFn = async () => {
979
967
  const node = await this.findNode(this.matcher);
980
- const page = this.getPage();
981
- const viewport = node ? await readSootsimInteractiveViewport(page) : void 0;
982
- const visible = viewport ? isNodeVisibleInViewport(node, viewport) : false;
968
+ const visible = isNodeVisible(node);
983
969
  if (this._negated ? visible : !visible) {
984
970
  throw new Error(
985
- `waitFor toBeVisible failed (${describeNodeVisibility(node, viewport)}): ${JSON.stringify(this.matcher)}`
971
+ `waitFor toBeVisible failed (${describeNodeVisibility(node)}): ${JSON.stringify(this.matcher)}`
986
972
  );
987
973
  }
988
974
  };
@@ -991,7 +977,7 @@ var SootSimWaitForChain = class {
991
977
  toBeNotVisible() {
992
978
  this.assertionFn = async () => {
993
979
  const node = await this.findNode(this.matcher);
994
- const visible = await isNodeVisible(this.getPage(), node);
980
+ const visible = isNodeVisible(node);
995
981
  if (visible) {
996
982
  throw new Error(`waitFor toBeNotVisible failed: ${JSON.stringify(this.matcher)}`);
997
983
  }
@@ -1080,22 +1066,34 @@ var SootSimWaitForScrollAction = class {
1080
1066
  this.getPage = getPage2;
1081
1067
  this.matcher = matcher;
1082
1068
  }
1069
+ // detox scrolls the container until the expectation passes or the container
1070
+ // can no longer move. bounding this by wall clock instead made the result
1071
+ // depend on how fast the host dispatches pointer events: the same fixture and
1072
+ // the same assertion pass on an idle machine and fail on a loaded one,
1073
+ // because each 200px drag is a real pointer stream and fewer of them fit in
1074
+ // the budget. end on scroll exhaustion, which is a property of the content.
1083
1075
  async scroll(pixels, direction, _startPositionX, _startPositionY) {
1084
1076
  const page = this.getPage();
1085
- const start = Date.now();
1086
- const timeoutMs = 5e3;
1087
1077
  let lastError = null;
1088
- while (Date.now() - start < timeoutMs) {
1078
+ let stalledSteps = 0;
1079
+ while (stalledSteps < 2) {
1089
1080
  try {
1090
1081
  await this.assertionFn();
1091
1082
  return;
1092
1083
  } catch (error) {
1093
1084
  lastError = error;
1094
1085
  }
1095
- await scrollMatcherElement(page, this.findNode, this.matcher, pixels, direction);
1086
+ const travelled = await scrollMatcherElement(
1087
+ page,
1088
+ this.findNode,
1089
+ this.matcher,
1090
+ pixels,
1091
+ direction
1092
+ );
1093
+ stalledSteps = travelled < 0.5 ? stalledSteps + 1 : 0;
1096
1094
  }
1097
1095
  throw lastError || new Error(
1098
- `waitFor whileElement(...).scroll() timed out: ${JSON.stringify(this.matcher)}`
1096
+ `waitFor whileElement(...).scroll() reached the end of ${JSON.stringify(this.matcher)}`
1099
1097
  );
1100
1098
  }
1101
1099
  };
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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;
@@ -172,7 +172,8 @@ var ROOT_RUNTIME_PATHS = [
172
172
  "/sounds/",
173
173
  "/spike/",
174
174
  "/test-wallpaper.jpg",
175
- "/preview-sw.js"
175
+ "/preview-sw.js",
176
+ "/sootsim.svg"
176
177
  ];
177
178
  function resolveActiveRuntimeRoot() {
178
179
  const devRoot = resolveDevCheckoutRuntimeRoot();
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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;
@@ -132,7 +132,8 @@ var ROOT_RUNTIME_PATHS = [
132
132
  "/sounds/",
133
133
  "/spike/",
134
134
  "/test-wallpaper.jpg",
135
- "/preview-sw.js"
135
+ "/preview-sw.js",
136
+ "/sootsim.svg"
136
137
  ];
137
138
  function resolveActiveRuntimeRoot() {
138
139
  const devRoot = resolveDevCheckoutRuntimeRoot();
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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;
@@ -16305,37 +16305,37 @@ function getFramedScreenshotLayout(model) {
16305
16305
  const isLegacyHardware = spec.statusBarHeight > 0 && !spec.dynamicIsland && spec.homeIndicatorHeight === 0 && spec.cornerRadius === 0;
16306
16306
  const logicalScreenWidth = spec.width;
16307
16307
  const logicalScreenHeight = spec.height;
16308
- const logicalFrameWidth = isLegacyHardware ? spec.width + import_chrome_metrics.LEGACY_SIDE_BEZEL * 2 : spec.width + spec.bezelWidth * 2;
16309
- const logicalFrameHeight = isLegacyHardware ? spec.height + import_chrome_metrics.LEGACY_TOP_BEZEL + import_chrome_metrics.LEGACY_BOTTOM_BEZEL : spec.height + spec.bezelWidth * 2;
16308
+ const modernGeometry = (0, import_settings.resolveDeviceFrameGeometry)(spec);
16309
+ const logicalFrameWidth = isLegacyHardware ? spec.width + import_chrome_metrics.LEGACY_SIDE_BEZEL * 2 : modernGeometry.frameWidth;
16310
+ const logicalFrameHeight = isLegacyHardware ? spec.height + import_chrome_metrics.LEGACY_TOP_BEZEL + import_chrome_metrics.LEGACY_BOTTOM_BEZEL : modernGeometry.frameHeight;
16310
16311
  const logicalFrameLeft = import_chrome_metrics.SIDE_BUTTON_RESERVE;
16311
16312
  const logicalFrameTop = FRAME_OUTLINE_BLEED;
16312
16313
  const logicalOuterWidth = logicalFrameWidth + logicalFrameLeft * 2;
16313
16314
  const logicalOuterHeight = logicalFrameHeight + FRAME_OUTLINE_BLEED * 2;
16314
- const logicalScreenLeft = logicalFrameLeft + (isLegacyHardware ? import_chrome_metrics.LEGACY_SIDE_BEZEL : spec.bezelWidth);
16315
- const logicalScreenTop = isLegacyHardware ? import_chrome_metrics.LEGACY_TOP_BEZEL : spec.bezelWidth;
16316
- const corners = (0, import_settings.resolveDeviceFrameCorners)(spec);
16317
- const logicalFrameRadius = isLegacyHardware ? import_chrome_metrics.LEGACY_FRAME_RADIUS : corners.frameRadius;
16315
+ const logicalScreenLeft = logicalFrameLeft + (isLegacyHardware ? import_chrome_metrics.LEGACY_SIDE_BEZEL : modernGeometry.screenLeft);
16316
+ const logicalScreenTop = isLegacyHardware ? import_chrome_metrics.LEGACY_TOP_BEZEL : modernGeometry.screenTop;
16317
+ const logicalFrameRadius = isLegacyHardware ? import_chrome_metrics.LEGACY_FRAME_RADIUS : modernGeometry.frameRadius;
16318
16318
  const buttons = [
16319
16319
  {
16320
- side: "right",
16320
+ side: spec.hardwareButtons.lock.side,
16321
16321
  top: spec.hardwareButtons.lock.top,
16322
16322
  height: spec.hardwareButtons.lock.height,
16323
16323
  width: spec.hardwareButtons.width
16324
16324
  },
16325
16325
  {
16326
- side: "left",
16326
+ side: spec.hardwareButtons.ringToggle.side,
16327
16327
  top: spec.hardwareButtons.ringToggle.top,
16328
16328
  height: spec.hardwareButtons.ringToggle.height,
16329
16329
  width: spec.hardwareButtons.width
16330
16330
  },
16331
16331
  {
16332
- side: "left",
16332
+ side: spec.hardwareButtons.volumeUp.side,
16333
16333
  top: spec.hardwareButtons.volumeUp.top,
16334
16334
  height: spec.hardwareButtons.volumeUp.height,
16335
16335
  width: spec.hardwareButtons.width
16336
16336
  },
16337
16337
  {
16338
- side: "left",
16338
+ side: spec.hardwareButtons.volumeDown.side,
16339
16339
  top: spec.hardwareButtons.volumeDown.top,
16340
16340
  height: spec.hardwareButtons.volumeDown.height,
16341
16341
  width: spec.hardwareButtons.width
@@ -16356,7 +16356,7 @@ function getFramedScreenshotLayout(model) {
16356
16356
  logicalScreenHeight,
16357
16357
  logicalScreenLeft,
16358
16358
  logicalScreenTop,
16359
- logicalScreenRadius: isLegacyHardware ? 0 : corners.screenRadius,
16359
+ logicalScreenRadius: isLegacyHardware ? 0 : modernGeometry.screenRadius,
16360
16360
  logicalFrameRadius,
16361
16361
  frameBackground: isLegacyHardware ? "linear-gradient(180deg, #1b1c20 0%, #0f1012 42%, #050608 100%)" : "#000000",
16362
16362
  frameOutline: isLegacyHardware ? "0 0 0 1px #1f2125" : "0 0 0 1px #333",
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.272 | (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;
@@ -167,7 +167,8 @@ var ROOT_RUNTIME_PATHS = [
167
167
  "/sounds/",
168
168
  "/spike/",
169
169
  "/test-wallpaper.jpg",
170
- "/preview-sw.js"
170
+ "/preview-sw.js",
171
+ "/sootsim.svg"
171
172
  ];
172
173
  function resolveActiveRuntimeRoot() {
173
174
  const devRoot = resolveDevCheckoutRuntimeRoot();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sootsim",
3
- "version": "0.1.270",
3
+ "version": "0.1.272",
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",
@@ -110,6 +110,7 @@ const ROOT_RUNTIME_PATHS = [
110
110
  '/spike/',
111
111
  '/test-wallpaper.jpg',
112
112
  '/preview-sw.js',
113
+ '/sootsim.svg',
113
114
  ]
114
115
 
115
116
  export function resolveActiveRuntimeRoot(): string | null {
@@ -9,7 +9,7 @@ import {
9
9
  } from 'sootsim-engine/ios/chrome-metrics'
10
10
  import {
11
11
  getDevice,
12
- resolveDeviceFrameCorners,
12
+ resolveDeviceFrameGeometry,
13
13
  type DeviceModel,
14
14
  } from 'sootsim-engine/settings'
15
15
  import { launchReapedChrome } from '../../../../scripts/lib/reap-browser'
@@ -76,42 +76,44 @@ export function getFramedScreenshotLayout(model: DeviceModel): FramedScreenshotL
76
76
  spec.cornerRadius === 0
77
77
  const logicalScreenWidth = spec.width
78
78
  const logicalScreenHeight = spec.height
79
+ const modernGeometry = resolveDeviceFrameGeometry(spec)
79
80
  const logicalFrameWidth = isLegacyHardware
80
81
  ? spec.width + LEGACY_SIDE_BEZEL * 2
81
- : spec.width + spec.bezelWidth * 2
82
+ : modernGeometry.frameWidth
82
83
  const logicalFrameHeight = isLegacyHardware
83
84
  ? spec.height + LEGACY_TOP_BEZEL + LEGACY_BOTTOM_BEZEL
84
- : spec.height + spec.bezelWidth * 2
85
+ : modernGeometry.frameHeight
85
86
  const logicalFrameLeft = SIDE_BUTTON_RESERVE
86
87
  const logicalFrameTop = FRAME_OUTLINE_BLEED
87
88
  const logicalOuterWidth = logicalFrameWidth + logicalFrameLeft * 2
88
89
  const logicalOuterHeight = logicalFrameHeight + FRAME_OUTLINE_BLEED * 2
89
90
  const logicalScreenLeft =
90
- logicalFrameLeft + (isLegacyHardware ? LEGACY_SIDE_BEZEL : spec.bezelWidth)
91
- const logicalScreenTop = isLegacyHardware ? LEGACY_TOP_BEZEL : spec.bezelWidth
92
- const corners = resolveDeviceFrameCorners(spec)
93
- const logicalFrameRadius = isLegacyHardware ? LEGACY_FRAME_RADIUS : corners.frameRadius
91
+ logicalFrameLeft + (isLegacyHardware ? LEGACY_SIDE_BEZEL : modernGeometry.screenLeft)
92
+ const logicalScreenTop = isLegacyHardware ? LEGACY_TOP_BEZEL : modernGeometry.screenTop
93
+ const logicalFrameRadius = isLegacyHardware
94
+ ? LEGACY_FRAME_RADIUS
95
+ : modernGeometry.frameRadius
94
96
  const buttons: FrameButtonLayout[] = [
95
97
  {
96
- side: 'right',
98
+ side: spec.hardwareButtons.lock.side,
97
99
  top: spec.hardwareButtons.lock.top,
98
100
  height: spec.hardwareButtons.lock.height,
99
101
  width: spec.hardwareButtons.width,
100
102
  },
101
103
  {
102
- side: 'left',
104
+ side: spec.hardwareButtons.ringToggle.side,
103
105
  top: spec.hardwareButtons.ringToggle.top,
104
106
  height: spec.hardwareButtons.ringToggle.height,
105
107
  width: spec.hardwareButtons.width,
106
108
  },
107
109
  {
108
- side: 'left',
110
+ side: spec.hardwareButtons.volumeUp.side,
109
111
  top: spec.hardwareButtons.volumeUp.top,
110
112
  height: spec.hardwareButtons.volumeUp.height,
111
113
  width: spec.hardwareButtons.width,
112
114
  },
113
115
  {
114
- side: 'left',
116
+ side: spec.hardwareButtons.volumeDown.side,
115
117
  top: spec.hardwareButtons.volumeDown.top,
116
118
  height: spec.hardwareButtons.volumeDown.height,
117
119
  width: spec.hardwareButtons.width,
@@ -133,7 +135,7 @@ export function getFramedScreenshotLayout(model: DeviceModel): FramedScreenshotL
133
135
  logicalScreenHeight,
134
136
  logicalScreenLeft,
135
137
  logicalScreenTop,
136
- logicalScreenRadius: isLegacyHardware ? 0 : corners.screenRadius,
138
+ logicalScreenRadius: isLegacyHardware ? 0 : modernGeometry.screenRadius,
137
139
  logicalFrameRadius,
138
140
  frameBackground: isLegacyHardware
139
141
  ? 'linear-gradient(180deg, #1b1c20 0%, #0f1012 42%, #050608 100%)'
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.270 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-3ZOF2BTJ.js";import"./chunk-5IHDZOMR.js";export{d as BETA_ASK_HEADLINE,b as BETA_LABEL,c as BETA_TAGLINE,a as IS_BETA};