sootsim 0.1.155 → 0.1.157

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-C3BYGNOR.js → agent-GKCKPDQL.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-DR75UMEL.js → agent-wrapper-H2U7JFCS.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-TC5QZXEN.js → app-fonts-QUD2SV6L.js} +2 -2
  5. package/dist-cli/chunks/{assert-YICVET3K.js → assert-NH2HHMN4.js} +2 -2
  6. package/dist-cli/chunks/auto-bootstrap-CT7E764X.js +2 -0
  7. package/dist-cli/chunks/beta-WWL6ZI74.js +2 -0
  8. package/dist-cli/chunks/{camera-4F5RQCBC.js → camera-BBIMVYXH.js} +2 -2
  9. package/dist-cli/chunks/{chunk-UNE2CDA5.js → chunk-2MWM7JD6.js} +2 -2
  10. package/dist-cli/chunks/{chunk-AYRY5U2Y.js → chunk-2SQVUKGN.js} +1 -1
  11. package/dist-cli/chunks/{chunk-IAE4IW7O.js → chunk-2V4FB2RT.js} +2 -2
  12. package/dist-cli/chunks/chunk-4HETKHPX.js +13 -0
  13. package/dist-cli/chunks/{chunk-DQCTDCDF.js → chunk-4POIDYSQ.js} +1 -1
  14. package/dist-cli/chunks/{chunk-DXBJHAQE.js → chunk-6CBI57IL.js} +2 -2
  15. package/dist-cli/chunks/{chunk-7R5V5AIL.js → chunk-7P2QJUZB.js} +1 -1
  16. package/dist-cli/chunks/{chunk-ZHBF3X54.js → chunk-7WZEEFD3.js} +2 -2
  17. package/dist-cli/chunks/{chunk-VYUW5QK4.js → chunk-AES7K6P5.js} +1 -1
  18. package/dist-cli/chunks/chunk-AYTLC7QV.js +1 -0
  19. package/dist-cli/chunks/{chunk-EXF6FEAH.js → chunk-BJFLKJZI.js} +2 -2
  20. package/dist-cli/chunks/{chunk-LTAFJDXF.js → chunk-BRIWO44I.js} +1 -1
  21. package/dist-cli/chunks/{chunk-QQUWPJAN.js → chunk-C5BXRLHS.js} +1 -1
  22. package/dist-cli/chunks/{chunk-JD3CVFGB.js → chunk-CQKIN4UH.js} +2 -2
  23. package/dist-cli/chunks/{chunk-SEG4UA6N.js → chunk-DHULHNVZ.js} +1 -1
  24. package/dist-cli/chunks/{chunk-2A4RF2GA.js → chunk-ESZY26WY.js} +2 -2
  25. package/dist-cli/chunks/{chunk-M5LTONRB.js → chunk-FCICI3EX.js} +1 -1
  26. package/dist-cli/chunks/{chunk-4BCGD37Q.js → chunk-FTCNYGT4.js} +1 -1
  27. package/dist-cli/chunks/{chunk-BLTW2X3S.js → chunk-G4EHF2XU.js} +2 -2
  28. package/dist-cli/chunks/{chunk-KJZD6GOC.js → chunk-GAXCW6BZ.js} +57 -32
  29. package/dist-cli/chunks/{chunk-UQTGLV4M.js → chunk-GH25H5QD.js} +1 -1
  30. package/dist-cli/chunks/{chunk-VIDSBYBM.js → chunk-GPV6OYQI.js} +2 -2
  31. package/dist-cli/chunks/{chunk-EQ4VACQH.js → chunk-ISGEH5I6.js} +2 -2
  32. package/dist-cli/chunks/{chunk-ANM2NBPM.js → chunk-J72RL5TX.js} +1 -1
  33. package/dist-cli/chunks/{chunk-UZZA6QOG.js → chunk-JMXKC7DE.js} +2 -2
  34. package/dist-cli/chunks/{chunk-LQUJ5CK6.js → chunk-K4LDVZYP.js} +3 -3
  35. package/dist-cli/chunks/{chunk-BSY42HG5.js → chunk-KIMSPMBC.js} +3 -3
  36. package/dist-cli/chunks/{chunk-DOQDF7TJ.js → chunk-LV3DINZS.js} +1 -1
  37. package/dist-cli/chunks/{chunk-FUCVU7VO.js → chunk-NT6JVAUN.js} +1 -1
  38. package/dist-cli/chunks/chunk-O5HTYUHB.js +2 -0
  39. package/dist-cli/chunks/{chunk-6QWKWASG.js → chunk-OZ3UZ2VO.js} +2 -2
  40. package/dist-cli/chunks/{chunk-XQTW3Z46.js → chunk-P53GI4GU.js} +2 -2
  41. package/dist-cli/chunks/{chunk-SYECZJG3.js → chunk-PCW7AAPN.js} +2 -2
  42. package/dist-cli/chunks/chunk-PPH7UKZN.js +1 -0
  43. package/dist-cli/chunks/{chunk-D43GSIWC.js → chunk-QA7DWZXG.js} +2 -2
  44. package/dist-cli/chunks/{chunk-J4F5YPVG.js → chunk-QIFVD5D2.js} +2 -2
  45. package/dist-cli/chunks/{chunk-JDYTNXVQ.js → chunk-QSFSGKVF.js} +1 -1
  46. package/dist-cli/chunks/{chunk-MDTM3GKQ.js → chunk-QTFL2HSS.js} +1 -1
  47. package/dist-cli/chunks/chunk-RI6LUHT6.js +2 -0
  48. package/dist-cli/chunks/chunk-RJTJ67H3.js +1 -0
  49. package/dist-cli/chunks/chunk-S56YDDA7.js +79 -0
  50. package/dist-cli/chunks/{chunk-IFV2H2PN.js → chunk-SKDLBR7B.js} +2 -2
  51. package/dist-cli/chunks/{chunk-WGMRS45V.js → chunk-SMYZKDMS.js} +1 -1
  52. package/dist-cli/chunks/{chunk-FY42AEQT.js → chunk-XIG5BFQB.js} +2 -2
  53. package/dist-cli/chunks/{chunk-U5DVNBRT.js → chunk-ZJUIBQPS.js} +1 -1
  54. package/dist-cli/chunks/{chunk-QURX7PNL.js → chunk-ZVELB7QY.js} +3 -3
  55. package/dist-cli/chunks/cli-version-BXPUDDCJ.js +2 -0
  56. package/dist-cli/chunks/{compat-5ZDXKMVB.js → compat-AUXJQIHL.js} +3 -3
  57. package/dist-cli/chunks/{config-SALDFPNQ.js → config-BXXIT3N3.js} +2 -2
  58. package/dist-cli/chunks/control-FSL5WY5D.js +2 -0
  59. package/dist-cli/chunks/{cpu-profile-DWVQYLU2.js → cpu-profile-YUS3WKAK.js} +2 -2
  60. package/dist-cli/chunks/{daemon-ZOLT5A64.js → daemon-22L65BF7.js} +2 -2
  61. package/dist-cli/chunks/{debug-T2TZRZLM.js → debug-XJN62JVM.js} +3 -3
  62. package/dist-cli/chunks/{detox-ELF424V7.js → detox-XTQMXYKU.js} +2 -2
  63. package/dist-cli/chunks/{device-VS6S2VBJ.js → device-MAE44TQB.js} +2 -2
  64. package/dist-cli/chunks/{diagnose-C6S6GF6P.js → diagnose-HF3DUNXT.js} +2 -2
  65. package/dist-cli/chunks/drivers-6ZRVNWCU.js +2 -0
  66. package/dist-cli/chunks/{electron-364UUDHO.js → electron-FM7ABQ55.js} +3 -3
  67. package/dist-cli/chunks/flow-4PJHUWIA.js +2 -0
  68. package/dist-cli/chunks/help-C4MKKA5E.js +2 -0
  69. package/dist-cli/chunks/{hints-CQHHEBUY.js → hints-5FKUHYYV.js} +2 -2
  70. package/dist-cli/chunks/{home-paths-3S52MOTF.js → home-paths-2UT3LZCV.js} +2 -2
  71. package/dist-cli/chunks/{inspect-TFHVPSB4.js → inspect-EDWNKILW.js} +3 -3
  72. package/dist-cli/chunks/install-JJ2I2L3B.js +2 -0
  73. package/dist-cli/chunks/{install-desktop-N2DYSBOT.js → install-desktop-MQV7A7LW.js} +3 -3
  74. package/dist-cli/chunks/{keys-5DJVHPJW.js → keys-5R3GN66Z.js} +2 -2
  75. package/dist-cli/chunks/{launch-PZY7TD5A.js → launch-3XQXJHU6.js} +3 -3
  76. package/dist-cli/chunks/{login-TYJBJLHC.js → login-RR3LSQ3A.js} +4 -4
  77. package/dist-cli/chunks/{logout-SG4UGABE.js → logout-3GIZQ27A.js} +2 -2
  78. package/dist-cli/chunks/{maestro-H4CCHNKL.js → maestro-CS6JBEG4.js} +2 -2
  79. package/dist-cli/chunks/optional-demo-registry-BGV6FY2J.js +2 -0
  80. package/dist-cli/chunks/{preview-C6X3ITFK.js → preview-ZMOUSC43.js} +2 -2
  81. package/dist-cli/chunks/{profile-PTUACNTX.js → profile-HGF54OC4.js} +2 -2
  82. package/dist-cli/chunks/{react-3D7WSSLI.js → react-N6HTHJNA.js} +2 -2
  83. package/dist-cli/chunks/{record-MEMW545L.js → record-Z36PVVU7.js} +10 -10
  84. package/dist-cli/chunks/runtime-I64WAQIR.js +2 -0
  85. package/dist-cli/chunks/{runtime-delivery-UYRGLL35.js → runtime-delivery-PJMSW4HO.js} +2 -2
  86. package/dist-cli/chunks/{screenshot-OWF4HNV6.js → screenshot-4YKF4UBD.js} +2 -2
  87. package/dist-cli/chunks/{screenshot-mode-KM65465J.js → screenshot-mode-BGXJPIBS.js} +2 -2
  88. package/dist-cli/chunks/{screenshots-MJXEOC2O.js → screenshots-TRGYSPW5.js} +2 -2
  89. package/dist-cli/chunks/{server-Q5ZYFO5O.js → server-CV7RETHK.js} +3 -3
  90. package/dist-cli/chunks/setup-repo-IZ44DI2U.js +2 -0
  91. package/dist-cli/chunks/{skills-G2MSPKGR.js → skills-MTXAUNIT.js} +2 -2
  92. package/dist-cli/chunks/{slides-TZTHVGWV.js → slides-LDMZ3ZKO.js} +2 -2
  93. package/dist-cli/chunks/{start-CJ35MCB6.js → start-LTZH7NX6.js} +4 -4
  94. package/dist-cli/chunks/store-HTK26UWW.js +2 -0
  95. package/dist-cli/chunks/telemetry-YKO6WSAB.js +2 -0
  96. package/dist-cli/chunks/{test-MUGRVEBG.js → test-MAGRP4B6.js} +3 -3
  97. package/dist-cli/chunks/{three-mode-CQ6XZZU3.js → three-mode-QYIRSQBC.js} +2 -2
  98. package/dist-cli/chunks/{timeline-MM43OOX2.js → timeline-X5HZN2L5.js} +2 -2
  99. package/dist-cli/chunks/{upgrade-A4CBZ3A5.js → upgrade-JZPXC2WH.js} +2 -2
  100. package/dist-cli/chunks/upload-7DBFEXRG.js +2 -0
  101. package/dist-cli/chunks/{version-ONYEMBRD.js → version-YZNR4TYU.js} +2 -2
  102. package/dist-cli/chunks/web-CHLW4MAH.js +2 -0
  103. package/dist-cli/chunks/{what-happened-H4ZLTNBG.js → what-happened-P6YJADRY.js} +2 -2
  104. package/dist-cli/chunks/{whoami-U63F2I7B.js → whoami-MK25C7TJ.js} +2 -2
  105. package/dist-lib/agent-daemon-client.cjs +1 -1
  106. package/dist-lib/agent-events.cjs +1 -1
  107. package/dist-lib/agent-sessions.cjs +1 -1
  108. package/dist-lib/attached-projects.cjs +1 -1
  109. package/dist-lib/auth/shared-session.cjs +1 -1
  110. package/dist-lib/backend-origin.cjs +1 -1
  111. package/dist-lib/beta.cjs +1 -1
  112. package/dist-lib/beta.mjs +1 -1
  113. package/dist-lib/bridge-constants.cjs +1 -1
  114. package/dist-lib/cli-constants.cjs +1 -1
  115. package/dist-lib/config.cjs +1 -1
  116. package/dist-lib/detox/index.cjs +1 -1
  117. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  118. package/dist-lib/home-paths.cjs +1 -1
  119. package/dist-lib/host/bridge-host.cjs +1 -1
  120. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  121. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  122. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  123. package/dist-lib/host/websocket-proxy.cjs +1 -1
  124. package/dist-lib/index.cjs +1 -1
  125. package/dist-lib/menu.cjs +3 -2
  126. package/dist-lib/menu.mjs +3 -2
  127. package/dist-lib/metro.cjs +1 -1
  128. package/dist-lib/profiles.cjs +1 -1
  129. package/dist-lib/render-mode.cjs +1 -1
  130. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  131. package/dist-lib/sdk.cjs +30 -5
  132. package/dist-lib/sdk.mjs +30 -5
  133. package/dist-lib/skills.cjs +51 -13
  134. package/dist-lib/vite.cjs +1 -1
  135. package/package.json +1 -1
  136. package/src/menu.ts +2 -1
  137. package/dist-cli/chunks/auto-bootstrap-LIMVUYCU.js +0 -2
  138. package/dist-cli/chunks/beta-GGCQHRJW.js +0 -2
  139. package/dist-cli/chunks/chunk-4BFAO5OU.js +0 -2
  140. package/dist-cli/chunks/chunk-BQ3UFSIG.js +0 -1
  141. package/dist-cli/chunks/chunk-INMKIIZH.js +0 -79
  142. package/dist-cli/chunks/chunk-TJEKTG6V.js +0 -1
  143. package/dist-cli/chunks/chunk-U4JYYYUW.js +0 -1
  144. package/dist-cli/chunks/chunk-YXCVIAAU.js +0 -13
  145. package/dist-cli/chunks/cli-version-O7QJ4BZ2.js +0 -2
  146. package/dist-cli/chunks/control-CNRPHEU4.js +0 -2
  147. package/dist-cli/chunks/drivers-36GE2TDC.js +0 -2
  148. package/dist-cli/chunks/flow-5D5SRQT6.js +0 -2
  149. package/dist-cli/chunks/help-F4BRZV6Y.js +0 -2
  150. package/dist-cli/chunks/install-WYCI7SLJ.js +0 -2
  151. package/dist-cli/chunks/optional-demo-registry-G43O66KE.js +0 -2
  152. package/dist-cli/chunks/runtime-ZLDHSWAR.js +0 -2
  153. package/dist-cli/chunks/setup-repo-MANQTJRC.js +0 -2
  154. package/dist-cli/chunks/store-LZD4WSTY.js +0 -2
  155. package/dist-cli/chunks/telemetry-MR3X56AA.js +0 -2
  156. package/dist-cli/chunks/upload-3UDJ4OHD.js +0 -2
  157. package/dist-cli/chunks/web-EYRW3MVM.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{C as T,D as A,E as y,P as _,Q as b,R as S}from"./chunk-DQCTDCDF.js";import{c as N,e as F}from"./chunk-SYECZJG3.js";import{b as k}from"./chunk-U5DVNBRT.js";import"./chunk-DOQDF7TJ.js";import"./chunk-UQTGLV4M.js";import"./chunk-MDTM3GKQ.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=N(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.157 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{C as T,D as A,E as y,P as _,Q as b,R as S}from"./chunk-4POIDYSQ.js";import{c as N,e as F}from"./chunk-PCW7AAPN.js";import{b as k}from"./chunk-ZJUIBQPS.js";import"./chunk-LV3DINZS.js";import"./chunk-GH25H5QD.js";import"./chunk-QTFL2HSS.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=N(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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{d as i}from"./chunk-ZHBF3X54.js";import{d as n}from"./chunk-IAE4IW7O.js";import"./chunk-UQTGLV4M.js";import"./chunk-MDTM3GKQ.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.157 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{d as i}from"./chunk-7WZEEFD3.js";import{d as n}from"./chunk-2V4FB2RT.js";import"./chunk-GH25H5QD.js";import"./chunk-QTFL2HSS.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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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;
@@ -328,7 +328,8 @@ function buildSootSimDeviceChoiceDefs(currentDevice, deviceChoices, options) {
328
328
  let lastPlatform = "";
329
329
  const isStateful = options.action === "switch-device";
330
330
  for (const choice of deviceChoices) {
331
- if (lastPlatform && choice.platform !== lastPlatform) items.push({ type: "separator" });
331
+ if (lastPlatform && choice.platform !== lastPlatform)
332
+ items.push({ type: "separator" });
332
333
  lastPlatform = choice.platform;
333
334
  if (isStateful) {
334
335
  items.push({
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/menu.ts
4
4
  var SOOTSIM_ENGINE_EVENT_NAME = "sootsim:engine-event";
@@ -295,7 +295,8 @@ function buildSootSimDeviceChoiceDefs(currentDevice, deviceChoices, options) {
295
295
  let lastPlatform = "";
296
296
  const isStateful = options.action === "switch-device";
297
297
  for (const choice of deviceChoices) {
298
- if (lastPlatform && choice.platform !== lastPlatform) items.push({ type: "separator" });
298
+ if (lastPlatform && choice.platform !== lastPlatform)
299
+ items.push({ type: "separator" });
299
300
  lastPlatform = choice.platform;
300
301
  if (isStateful) {
301
302
  items.push({
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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;
@@ -1363,21 +1363,46 @@ async function waitForSootsimIdle({
1363
1363
  return { layout: nodes.join(';'), animating, pendingFetches, requestTotal, requestInFlight }
1364
1364
  }
1365
1365
 
1366
+ // how long generic background network is allowed to keep us waiting AFTER
1367
+ // the screen is otherwise visually settled. apps with continuous traffic
1368
+ // (polling, realtime sockets, a tap that fires 20-50 fetches) never reach
1369
+ // requestInFlight===0 / a stable requestTotal, so requiring full network
1370
+ // quiet burns the ENTIRE budget on every command \u2014 the leading idle that
1371
+ // failed PR-preview recordings for network-heavy apps (3pc fight-pulse).
1372
+ // layout-stability + the image-loader already prove visible content
1373
+ // loaded (a data load changes layout; an image load shows in the loader),
1374
+ // so the generic request counters are a courtesy, not a gate: honor them
1375
+ // only within this grace once the screen is visually still.
1376
+ const networkQuietGraceMs = 1200
1366
1377
  let lastLayout = ''
1367
1378
  let lastRequestTotal = -1
1368
1379
  let stable = 0
1380
+ let visuallyStillSince = 0
1369
1381
  while (Date.now() < deadline) {
1370
1382
  const snapshot = await readSnapshot()
1371
1383
  const strictOk = !strict || !snapshot.animating
1372
- const contentReady = snapshot.pendingFetches === 0 && snapshot.requestInFlight === 0
1373
- const requestsStable = snapshot.requestTotal === lastRequestTotal
1374
- if (strictOk && contentReady && requestsStable && snapshot.layout === lastLayout) {
1384
+ // visually settled: no animations, no image content loading, layout
1385
+ // unchanged since the last poll.
1386
+ const visuallyStill =
1387
+ strictOk && snapshot.pendingFetches === 0 && snapshot.layout === lastLayout
1388
+ // generic network quiet: nothing in flight and no new requests issued.
1389
+ const networkQuiet =
1390
+ snapshot.requestInFlight === 0 && snapshot.requestTotal === lastRequestTotal
1391
+ if (visuallyStill) {
1375
1392
  stable++
1376
- if (stable >= requiredStablePolls) {
1393
+ if (visuallyStillSince === 0) visuallyStillSince = Date.now()
1394
+ // settle once the screen has held still long enough AND either the
1395
+ // network is genuinely quiet OR it has refused to quiet within the
1396
+ // grace (continuous background traffic must not block forever).
1397
+ if (
1398
+ stable >= requiredStablePolls &&
1399
+ (networkQuiet || Date.now() - visuallyStillSince >= networkQuietGraceMs)
1400
+ ) {
1377
1401
  return { settled: true, elapsed: Date.now() - start }
1378
1402
  }
1379
1403
  } else {
1380
1404
  stable = 0
1405
+ visuallyStillSince = 0
1381
1406
  }
1382
1407
  lastLayout = snapshot.layout
1383
1408
  lastRequestTotal = snapshot.requestTotal
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // cli/commands/inspect/core.ts
4
4
  function resolveMaxMsFlag(args, fallbackMs) {
@@ -1274,21 +1274,46 @@ async function waitForSootsimIdle({
1274
1274
  return { layout: nodes.join(';'), animating, pendingFetches, requestTotal, requestInFlight }
1275
1275
  }
1276
1276
 
1277
+ // how long generic background network is allowed to keep us waiting AFTER
1278
+ // the screen is otherwise visually settled. apps with continuous traffic
1279
+ // (polling, realtime sockets, a tap that fires 20-50 fetches) never reach
1280
+ // requestInFlight===0 / a stable requestTotal, so requiring full network
1281
+ // quiet burns the ENTIRE budget on every command \u2014 the leading idle that
1282
+ // failed PR-preview recordings for network-heavy apps (3pc fight-pulse).
1283
+ // layout-stability + the image-loader already prove visible content
1284
+ // loaded (a data load changes layout; an image load shows in the loader),
1285
+ // so the generic request counters are a courtesy, not a gate: honor them
1286
+ // only within this grace once the screen is visually still.
1287
+ const networkQuietGraceMs = 1200
1277
1288
  let lastLayout = ''
1278
1289
  let lastRequestTotal = -1
1279
1290
  let stable = 0
1291
+ let visuallyStillSince = 0
1280
1292
  while (Date.now() < deadline) {
1281
1293
  const snapshot = await readSnapshot()
1282
1294
  const strictOk = !strict || !snapshot.animating
1283
- const contentReady = snapshot.pendingFetches === 0 && snapshot.requestInFlight === 0
1284
- const requestsStable = snapshot.requestTotal === lastRequestTotal
1285
- if (strictOk && contentReady && requestsStable && snapshot.layout === lastLayout) {
1295
+ // visually settled: no animations, no image content loading, layout
1296
+ // unchanged since the last poll.
1297
+ const visuallyStill =
1298
+ strictOk && snapshot.pendingFetches === 0 && snapshot.layout === lastLayout
1299
+ // generic network quiet: nothing in flight and no new requests issued.
1300
+ const networkQuiet =
1301
+ snapshot.requestInFlight === 0 && snapshot.requestTotal === lastRequestTotal
1302
+ if (visuallyStill) {
1286
1303
  stable++
1287
- if (stable >= requiredStablePolls) {
1304
+ if (visuallyStillSince === 0) visuallyStillSince = Date.now()
1305
+ // settle once the screen has held still long enough AND either the
1306
+ // network is genuinely quiet OR it has refused to quiet within the
1307
+ // grace (continuous background traffic must not block forever).
1308
+ if (
1309
+ stable >= requiredStablePolls &&
1310
+ (networkQuiet || Date.now() - visuallyStillSince >= networkQuietGraceMs)
1311
+ ) {
1288
1312
  return { settled: true, elapsed: Date.now() - start }
1289
1313
  }
1290
1314
  } else {
1291
1315
  stable = 0
1316
+ visuallyStillSince = 0
1292
1317
  }
1293
1318
  lastLayout = snapshot.layout
1294
1319
  lastRequestTotal = snapshot.requestTotal
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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;
@@ -359,10 +359,9 @@ var init_registry = __esm({
359
359
  versions: [
360
360
  {
361
361
  range: ">=0.17.0",
362
- coverage: 0.95,
363
- note: "functional splash screen lifecycle with sootsim canvas integration. hide()/hideAsync() pair, preventAutoHideAsync, setOptions (fade/duration accepted), and the sootsim internal _notifyCanvasReady / _createHideSignal / _isAutoHidePrevented bridges. Splash actually hides + restores correctly across reloads. SplashScreenOptions type exported so consumer typing matches upstream.",
364
- working: "preventAutoHideAsync, hideAsync, hide (sync alias), setOptions (fade/duration), _notifyCanvasReady, _createHideSignal, _isAutoHidePrevented, SplashScreenOptions interface, default-export bundle including hide",
365
- missing: "native fade/animation on hide (sootsim hides instantly \u2014 visual difference vs iOS native fade), backgroundColor / image options not yet rendered in the canvas splash"
362
+ coverage: 1,
363
+ note: "full splash wired to the sootsim canvas boot splash, including the app's REAL configured artwork. the config plugin's image + backgroundColor (+ imageWidth, resizeMode, dark variant) and the legacy expo.splash / expo.ios.splash blocks are parsed and painted on boot exactly like the native splash window. setOptions({fade,duration}) is honored: hideAsync()/hide() cross-dissolve the splash over the configured duration (default 400ms, fade default off \u2014 mirroring ios/SplashScreenManager.swift hide()); preventAutoHideAsync holds the splash until the app hides it. matches upstream index.native.ts semantics.",
364
+ working: "preventAutoHideAsync (holds splash), hideAsync, hide (sync), setOptions (fade + duration drive the real canvas fade), configured splash image + backgroundColor + imageWidth + resizeMode + dark variant painted on boot (config plugin + legacy expo.splash), SplashScreenOptions type"
366
365
  }
367
366
  ]
368
367
  },
@@ -830,12 +829,14 @@ var init_registry = __esm({
830
829
  },
831
830
  "react-native-bootsplash": {
832
831
  category: "Device & Platform",
833
- stubType: "works",
832
+ stubType: "native",
834
833
  versions: [
835
834
  {
836
835
  range: ">=4.0.0",
837
836
  coverage: 1,
838
- note: "pure-JS turbo module; getConstants/hide/isVisible run without a stub needed"
837
+ note: "real package JS (index.ts hide/isVisible + the pure-JS useHideAnimation hook) runs unmodified from the bundle against the RNBootSplash native seam. the app's configured logo + background (+ logoWidth, dark variant) from the bootsplash config plugin are parsed and painted on the canvas boot splash. hide(fade) drives it: cross-dissolve over a fixed 250ms when fade is set, snap otherwise (mirrors ios/RNBootSplash.mm). isVisible() reflects real splash state; getConstants() returns { darkModeEnabled } exactly as the iOS constantsToExport (logoSizeRatio/navigationBarHeight/statusBarHeight are android-only, defaulted in the hook).",
838
+ working: "configured logo + background + logoWidth + dark variant painted on boot, hide(fade) (real canvas fade/snap), isVisible() (true while splash visible), getConstants() (darkModeEnabled), useHideAnimation hook (logo/brand layout from manifest, runs from bundle)",
839
+ missing: "the optional brand/darkBrand image (a secondary bottom-anchored logo) is not painted \u2014 only the primary logo + background"
839
840
  }
840
841
  ]
841
842
  },
@@ -2303,8 +2304,8 @@ var init_registry = __esm({
2303
2304
  {
2304
2305
  range: ">=3.0.0",
2305
2306
  coverage: 1,
2306
- note: "noop show/hide \u2014 correct, no splash screen concept in browser",
2307
- working: "show, hide"
2307
+ note: "package JS is just `export default NativeModules.SplashScreen`; the real package runs from the bundle against the SplashScreen native seam. hide() snap-hides the sootsim canvas boot splash (mirrors ios/RNSplashScreen.m removeFromSuperview, no fade); show() returns immediately without re-showing, exactly as the booted-app native path where `waiting` is already false.",
2308
+ working: "hide() (snap-hides the canvas splash), show() (no-op in a booted app, faithful)"
2308
2309
  }
2309
2310
  ]
2310
2311
  },
@@ -15699,21 +15700,46 @@ async function waitForSootsimIdle({
15699
15700
  return { layout: nodes.join(';'), animating, pendingFetches, requestTotal, requestInFlight }
15700
15701
  }
15701
15702
 
15703
+ // how long generic background network is allowed to keep us waiting AFTER
15704
+ // the screen is otherwise visually settled. apps with continuous traffic
15705
+ // (polling, realtime sockets, a tap that fires 20-50 fetches) never reach
15706
+ // requestInFlight===0 / a stable requestTotal, so requiring full network
15707
+ // quiet burns the ENTIRE budget on every command \u2014 the leading idle that
15708
+ // failed PR-preview recordings for network-heavy apps (3pc fight-pulse).
15709
+ // layout-stability + the image-loader already prove visible content
15710
+ // loaded (a data load changes layout; an image load shows in the loader),
15711
+ // so the generic request counters are a courtesy, not a gate: honor them
15712
+ // only within this grace once the screen is visually still.
15713
+ const networkQuietGraceMs = 1200
15702
15714
  let lastLayout = ''
15703
15715
  let lastRequestTotal = -1
15704
15716
  let stable = 0
15717
+ let visuallyStillSince = 0
15705
15718
  while (Date.now() < deadline) {
15706
15719
  const snapshot = await readSnapshot()
15707
15720
  const strictOk = !strict || !snapshot.animating
15708
- const contentReady = snapshot.pendingFetches === 0 && snapshot.requestInFlight === 0
15709
- const requestsStable = snapshot.requestTotal === lastRequestTotal
15710
- if (strictOk && contentReady && requestsStable && snapshot.layout === lastLayout) {
15721
+ // visually settled: no animations, no image content loading, layout
15722
+ // unchanged since the last poll.
15723
+ const visuallyStill =
15724
+ strictOk && snapshot.pendingFetches === 0 && snapshot.layout === lastLayout
15725
+ // generic network quiet: nothing in flight and no new requests issued.
15726
+ const networkQuiet =
15727
+ snapshot.requestInFlight === 0 && snapshot.requestTotal === lastRequestTotal
15728
+ if (visuallyStill) {
15711
15729
  stable++
15712
- if (stable >= requiredStablePolls) {
15730
+ if (visuallyStillSince === 0) visuallyStillSince = Date.now()
15731
+ // settle once the screen has held still long enough AND either the
15732
+ // network is genuinely quiet OR it has refused to quiet within the
15733
+ // grace (continuous background traffic must not block forever).
15734
+ if (
15735
+ stable >= requiredStablePolls &&
15736
+ (networkQuiet || Date.now() - visuallyStillSince >= networkQuietGraceMs)
15737
+ ) {
15713
15738
  return { settled: true, elapsed: Date.now() - start }
15714
15739
  }
15715
15740
  } else {
15716
15741
  stable = 0
15742
+ visuallyStillSince = 0
15717
15743
  }
15718
15744
  lastLayout = snapshot.layout
15719
15745
  lastRequestTotal = snapshot.requestTotal
@@ -16147,6 +16173,17 @@ var init_app_fonts = __esm({
16147
16173
  }
16148
16174
  });
16149
16175
 
16176
+ // cli/app-splash.ts
16177
+ var import_node_module2, import_config_plugin_splash, require3;
16178
+ var init_app_splash = __esm({
16179
+ "cli/app-splash.ts"() {
16180
+ "use strict";
16181
+ import_node_module2 = require("node:module");
16182
+ import_config_plugin_splash = require("sootsim-engine/engine/config-plugin-splash");
16183
+ require3 = (0, import_node_module2.createRequire)(__sootsim_import_meta_url);
16184
+ }
16185
+ });
16186
+
16150
16187
  // cli/open-url.ts
16151
16188
  var init_open_url2 = __esm({
16152
16189
  "cli/open-url.ts"() {
@@ -16189,6 +16226,7 @@ var init_upload = __esm({
16189
16226
  import_presigned_upload = require("sootsim-engine/preview/presigned-upload");
16190
16227
  init_shared_session();
16191
16228
  init_app_fonts();
16229
+ init_app_splash();
16192
16230
  init_auth();
16193
16231
  init_open_url2();
16194
16232
  init_telemetry();
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.157 | (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.155",
3
+ "version": "0.1.157",
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",
package/src/menu.ts CHANGED
@@ -388,7 +388,8 @@ export function buildSootSimDeviceChoiceDefs(
388
388
  const isStateful = options.action === 'switch-device'
389
389
 
390
390
  for (const choice of deviceChoices) {
391
- if (lastPlatform && choice.platform !== lastPlatform) items.push({ type: 'separator' })
391
+ if (lastPlatform && choice.platform !== lastPlatform)
392
+ items.push({ type: 'separator' })
392
393
  lastPlatform = choice.platform
393
394
 
394
395
  if (isStateful) {
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-LQUJ5CK6.js";import"./chunk-SYECZJG3.js";import"./chunk-U5DVNBRT.js";import"./chunk-DOQDF7TJ.js";import"./chunk-UQTGLV4M.js";import"./chunk-MDTM3GKQ.js";export{c as ensureDaemonRunning,a as ensureRuntimeInstalled,d as ensureSootsimReady,b as resolveBootstrapPort};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d,e}from"./chunk-AYRY5U2Y.js";import"./chunk-MDTM3GKQ.js";export{e as BETA_ASK_HEADLINE,c as BETA_LABEL,d as BETA_TAGLINE,b as BETA_VERSION_TARGET,a as IS_BETA};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- var t="http://localhost:5173/";export{t as a};
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.155 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */