sootsim 0.1.118 → 0.1.119

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 +3 -3
  2. package/dist-cli/chunks/{agent-NJPQWWOB.js → agent-HMYFFW3K.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-XY2KLHD5.js → agent-wrapper-L5TRN5OW.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-VVWZHR3V.js → app-fonts-G5L5BPHX.js} +2 -2
  5. package/dist-cli/chunks/{assert-WCZYRGGS.js → assert-MN4TCTKK.js} +2 -2
  6. package/dist-cli/chunks/auto-bootstrap-QJ5PP7KT.js +2 -0
  7. package/dist-cli/chunks/beta-LAPRQ3TP.js +2 -0
  8. package/dist-cli/chunks/{chunk-SCAOPMDY.js → chunk-3MWC6EE2.js} +2 -2
  9. package/dist-cli/chunks/{chunk-WYQOR72S.js → chunk-475TNRB7.js} +2 -2
  10. package/dist-cli/chunks/{chunk-FXARAPTS.js → chunk-47SB3JEW.js} +3 -3
  11. package/dist-cli/chunks/{chunk-4YCHWQKG.js → chunk-4EQ5V4CA.js} +1 -1
  12. package/dist-cli/chunks/{chunk-BJGF7NGV.js → chunk-4KU7AIP7.js} +1 -1
  13. package/dist-cli/chunks/chunk-5AL4WWUG.js +1 -0
  14. package/dist-cli/chunks/{chunk-EGAVQVNQ.js → chunk-5OZHLK4L.js} +2 -2
  15. package/dist-cli/chunks/{chunk-XEWSIOAB.js → chunk-APWX6YCC.js} +2 -2
  16. package/dist-cli/chunks/{chunk-UPSFFGWI.js → chunk-AUKEEPZT.js} +1 -1
  17. package/dist-cli/chunks/{chunk-FPUW7ZDL.js → chunk-AV6YDPVF.js} +2 -2
  18. package/dist-cli/chunks/{chunk-QDBFZQ2P.js → chunk-BBLE5DMP.js} +1 -1
  19. package/dist-cli/chunks/{chunk-3OU23VHJ.js → chunk-BZH7FKZZ.js} +73 -12
  20. package/dist-cli/chunks/{chunk-5YSLVAQO.js → chunk-C3VO2MSV.js} +2 -2
  21. package/dist-cli/chunks/{chunk-2KH3XP25.js → chunk-CHHBZJBH.js} +1 -1
  22. package/dist-cli/chunks/{chunk-W3XLQMHS.js → chunk-DE6JMHEW.js} +2 -2
  23. package/dist-cli/chunks/{chunk-VCYQZSOW.js → chunk-EIAYJLBW.js} +2 -2
  24. package/dist-cli/chunks/{chunk-MAFA2R2B.js → chunk-FCRJNHIA.js} +1 -1
  25. package/dist-cli/chunks/{chunk-WGFN4X7U.js → chunk-FUUXRMXG.js} +2 -2
  26. package/dist-cli/chunks/{chunk-QK5KDLOL.js → chunk-GEPWAAGG.js} +2 -2
  27. package/dist-cli/chunks/{chunk-A3RAHXFP.js → chunk-H4F45EGT.js} +2 -2
  28. package/dist-cli/chunks/{chunk-RRGMPOCZ.js → chunk-HPTOFA3Y.js} +3 -3
  29. package/dist-cli/chunks/chunk-IKVDJYRI.js +2 -0
  30. package/dist-cli/chunks/{chunk-YW6R4AZS.js → chunk-J6UPVQ37.js} +2 -2
  31. package/dist-cli/chunks/{chunk-5PU4UF46.js → chunk-JFHETXYV.js} +1 -1
  32. package/dist-cli/chunks/{chunk-WETDSNVK.js → chunk-JP3PNWTD.js} +1 -1
  33. package/dist-cli/chunks/{chunk-QBRJUGX4.js → chunk-LB7BYFMF.js} +2 -2
  34. package/dist-cli/chunks/{chunk-UFM5KZV5.js → chunk-MJQXUHDS.js} +2 -2
  35. package/dist-cli/chunks/{chunk-2R6ISGHK.js → chunk-MNILEOSP.js} +1 -1
  36. package/dist-cli/chunks/{chunk-L2353XE5.js → chunk-O552XDE7.js} +2 -2
  37. package/dist-cli/chunks/{chunk-U6CXSNU5.js → chunk-O7SJH4E7.js} +2 -2
  38. package/dist-cli/chunks/{chunk-UNGEGYXQ.js → chunk-OS62SSOF.js} +2 -2
  39. package/dist-cli/chunks/{chunk-LP46VFFE.js → chunk-QMU4MAG3.js} +1 -1
  40. package/dist-cli/chunks/{chunk-GJB3233O.js → chunk-RAWQNHKI.js} +1 -1
  41. package/dist-cli/chunks/{chunk-6YPNZR54.js → chunk-RF2STDGD.js} +2 -2
  42. package/dist-cli/chunks/chunk-RIMNMM3O.js +1 -0
  43. package/dist-cli/chunks/{chunk-JSIQX4RC.js → chunk-SSQWBV2F.js} +2 -2
  44. package/dist-cli/chunks/{chunk-IIPXHHCA.js → chunk-TGLPBQ4D.js} +2 -2
  45. package/dist-cli/chunks/{chunk-JH3UHLET.js → chunk-TUJWNKG4.js} +1 -1
  46. package/dist-cli/chunks/{chunk-GF3PTYUG.js → chunk-WNK5XRWG.js} +2 -2
  47. package/dist-cli/chunks/{chunk-PC6MD7KR.js → chunk-XYT2OO4N.js} +2 -2
  48. package/dist-cli/chunks/{chunk-D2HFLNQK.js → chunk-YBRJSW5C.js} +3 -3
  49. package/dist-cli/chunks/chunk-YPLXVVG4.js +1 -0
  50. package/dist-cli/chunks/{chunk-N6A3DLGD.js → chunk-YZ6MQTDJ.js} +2 -2
  51. package/dist-cli/chunks/{chunk-SLBI37WD.js → chunk-ZX4FJNIW.js} +1 -1
  52. package/dist-cli/chunks/cli-version-JKOW3OL3.js +2 -0
  53. package/dist-cli/chunks/{compat-3RY7MNRD.js → compat-3C3O2TKY.js} +3 -3
  54. package/dist-cli/chunks/{config-3B4KNHNB.js → config-TEO7DXWJ.js} +2 -2
  55. package/dist-cli/chunks/control-UUSQA7VO.js +2 -0
  56. package/dist-cli/chunks/{cpu-profile-ZH2TY3EB.js → cpu-profile-QSFGY7HA.js} +2 -2
  57. package/dist-cli/chunks/{daemon-IUAIVTIM.js → daemon-R2TQX4HR.js} +2 -2
  58. package/dist-cli/chunks/{debug-BEFVOWIO.js → debug-UMLASBX2.js} +3 -3
  59. package/dist-cli/chunks/{detox-HPNYBEKZ.js → detox-Y6TFEKQU.js} +2 -2
  60. package/dist-cli/chunks/{device-ZBDEEYN6.js → device-4NBQC4LP.js} +2 -2
  61. package/dist-cli/chunks/{diagnose-D5CLXJP7.js → diagnose-DKXPE4P6.js} +2 -2
  62. package/dist-cli/chunks/drivers-TFUZRRDZ.js +2 -0
  63. package/dist-cli/chunks/{electron-HDDFR27N.js → electron-3AZTVV3N.js} +3 -3
  64. package/dist-cli/chunks/flow-744L27RP.js +2 -0
  65. package/dist-cli/chunks/help-JUP3UEFR.js +2 -0
  66. package/dist-cli/chunks/{hints-NOGPSCHT.js → hints-K323Q4NQ.js} +2 -2
  67. package/dist-cli/chunks/{home-paths-IQNPKC6L.js → home-paths-H7GUBJAB.js} +2 -2
  68. package/dist-cli/chunks/{inspect-EGBGTKVK.js → inspect-UJFYMPE5.js} +52 -51
  69. package/dist-cli/chunks/install-D5J5LA2V.js +2 -0
  70. package/dist-cli/chunks/{install-desktop-SVGXW4NS.js → install-desktop-NT5QJIPD.js} +3 -3
  71. package/dist-cli/chunks/{keys-6ZOTMI56.js → keys-OJVAQQK5.js} +2 -2
  72. package/dist-cli/chunks/{launch-IQGYTPQM.js → launch-VMMQENF6.js} +3 -3
  73. package/dist-cli/chunks/{login-J4U23Q3R.js → login-CRJE2OZK.js} +4 -4
  74. package/dist-cli/chunks/{logout-H6K35NLA.js → logout-3DXVRPLM.js} +2 -2
  75. package/dist-cli/chunks/{maestro-QO2LITVQ.js → maestro-FPDCZ3NO.js} +2 -2
  76. package/dist-cli/chunks/{preview-Q4W6QO7P.js → preview-7WLF767D.js} +2 -2
  77. package/dist-cli/chunks/{profile-2QJPFSDY.js → profile-DE5LJZ5Y.js} +2 -2
  78. package/dist-cli/chunks/{react-DXK7ST5T.js → react-HLRPZFFH.js} +2 -2
  79. package/dist-cli/chunks/{record-UG6W5IME.js → record-VQAG2YYZ.js} +2 -2
  80. package/dist-cli/chunks/runtime-LBAJOT4M.js +2 -0
  81. package/dist-cli/chunks/{runtime-delivery-RAZ445Y5.js → runtime-delivery-O2WD2RT6.js} +2 -2
  82. package/dist-cli/chunks/{screenshot-Q44UHEGZ.js → screenshot-HYSJVWYN.js} +2 -2
  83. package/dist-cli/chunks/{screenshot-mode-I2TYYAON.js → screenshot-mode-ME7WKY7S.js} +2 -2
  84. package/dist-cli/chunks/{screenshots-GGLAOVD7.js → screenshots-5MY3SHOW.js} +2 -2
  85. package/dist-cli/chunks/{server-3IPGETBZ.js → server-LRSX4VKM.js} +2 -2
  86. package/dist-cli/chunks/setup-repo-5FHT7B6J.js +2 -0
  87. package/dist-cli/chunks/{skills-BCFKQBDG.js → skills-SHJHDYYU.js} +2 -2
  88. package/dist-cli/chunks/{start-WVYUD6CH.js → start-FBIHKRWV.js} +4 -4
  89. package/dist-cli/chunks/store-ZSAUNVP6.js +2 -0
  90. package/dist-cli/chunks/telemetry-E2ZAX2C6.js +2 -0
  91. package/dist-cli/chunks/{test-ZATFIL25.js → test-W5VLOO6C.js} +3 -3
  92. package/dist-cli/chunks/{three-mode-B7MYORNU.js → three-mode-OILRSRAU.js} +2 -2
  93. package/dist-cli/chunks/{timeline-SDEOHHGZ.js → timeline-H4SFNSBA.js} +2 -2
  94. package/dist-cli/chunks/{upgrade-MMU63PN3.js → upgrade-4SYAHMAP.js} +2 -2
  95. package/dist-cli/chunks/upload-NPGWC7E5.js +2 -0
  96. package/dist-cli/chunks/{web-BXAEFDAJ.js → web-UXTXQNYW.js} +2 -2
  97. package/dist-cli/chunks/{what-happened-7PASTCPU.js → what-happened-SNC6DEIJ.js} +2 -2
  98. package/dist-cli/chunks/{whoami-26VWXEUX.js → whoami-QDFN5LHP.js} +2 -2
  99. package/dist-lib/agent-daemon-client.cjs +1 -1
  100. package/dist-lib/agent-events.cjs +1 -1
  101. package/dist-lib/agent-sessions.cjs +1 -1
  102. package/dist-lib/attached-projects.cjs +1 -1
  103. package/dist-lib/auth/shared-session.cjs +1 -1
  104. package/dist-lib/backend-origin.cjs +1 -1
  105. package/dist-lib/beta.cjs +1 -1
  106. package/dist-lib/beta.mjs +1 -1
  107. package/dist-lib/bridge-constants.cjs +1 -1
  108. package/dist-lib/cli-constants.cjs +1 -1
  109. package/dist-lib/config.cjs +1 -1
  110. package/dist-lib/detox/index.cjs +1 -1
  111. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  112. package/dist-lib/home-paths.cjs +1 -1
  113. package/dist-lib/host/bridge-host.cjs +1 -1
  114. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  115. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  116. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  117. package/dist-lib/host/websocket-proxy.cjs +1 -1
  118. package/dist-lib/index.cjs +1 -1
  119. package/dist-lib/metro.cjs +1 -1
  120. package/dist-lib/profiles.cjs +1 -1
  121. package/dist-lib/render-mode.cjs +1 -1
  122. package/dist-lib/scripts/demo-app-registry.cjs +1 -1
  123. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  124. package/dist-lib/sdk.cjs +92 -1
  125. package/dist-lib/sdk.mjs +89 -1
  126. package/dist-lib/skills.cjs +1 -1
  127. package/dist-lib/vite.cjs +1 -1
  128. package/package.json +1 -1
  129. package/dist-cli/chunks/auto-bootstrap-4T7P2AEZ.js +0 -2
  130. package/dist-cli/chunks/beta-XPL4OA73.js +0 -2
  131. package/dist-cli/chunks/chunk-2TJIYYD6.js +0 -1
  132. package/dist-cli/chunks/chunk-JAR6ZK7S.js +0 -2
  133. package/dist-cli/chunks/chunk-JWC43Q7G.js +0 -1
  134. package/dist-cli/chunks/chunk-RHTOXVIQ.js +0 -1
  135. package/dist-cli/chunks/cli-version-5RR6YSLC.js +0 -2
  136. package/dist-cli/chunks/control-NE52GBD2.js +0 -2
  137. package/dist-cli/chunks/drivers-GTB2MH7E.js +0 -2
  138. package/dist-cli/chunks/flow-QYL7HHKN.js +0 -2
  139. package/dist-cli/chunks/help-LMXH2UHV.js +0 -2
  140. package/dist-cli/chunks/install-Q2JJJBNC.js +0 -2
  141. package/dist-cli/chunks/runtime-72QZY6P4.js +0 -2
  142. package/dist-cli/chunks/setup-repo-UR2N2LUC.js +0 -2
  143. package/dist-cli/chunks/store-7NUGDP6M.js +0 -2
  144. package/dist-cli/chunks/telemetry-PXZEDDM5.js +0 -2
  145. package/dist-cli/chunks/upload-SLNXXIBH.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{A as y,L as x,y as F,z as T}from"./chunk-3OU23VHJ.js";import{c as S,e as N}from"./chunk-GF3PTYUG.js";import{b as k}from"./chunk-GJB3233O.js";import"./chunk-LP46VFFE.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";function _(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--since"&&t+1<n.length){e.push(t,t+1);let s=n[t+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let a=Number(l[1]),m=l[2]??"ms",$=m==="s"?a*1e3:m==="m"?a*6e4:a;return{since:Date.now()-$,consumed:e}}let o=Number(s);if(Number.isFinite(o)&&o>1e12)return{since:o,consumed:e}}return{consumed:e}}function K(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--kinds"&&t+1<n.length)return e.push(t,t+1),{kinds:n[t+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:e};return{consumed:e}}function O(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--limit"&&t+1<n.length){e.push(t,t+1);let s=Number(n[t+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:e}}return{consumed:e}}function j(n,e){if(e===null)return new Date(n).toLocaleTimeString();let t=(n-e)/1e3;return`${t>=0?"+":""}${t.toFixed(2)}s`}function B(n,e){switch(n){case"app-launch":return e.phase==="launch"?`launch ${e.appName??e.toAppId??""}`:`dismiss ${e.appName??e.fromAppId??""} \u2192 ${e.toAppId??""}`;case"toast":return`"${e.text??""}"${e.durationMs?` (${e.durationMs}ms)`:""}`;case"keyboard":return`${e.phase??"?"}${e.heightPx?` h=${e.heightPx}`:""}${e.mode?` ${e.mode}`:""}`;case"screen":return`${e.phase??"?"} ${e.name??e.activeName??""}`;case"route":return`${e.phase??"?"} ${e.path??e.pathname??""}`;case"alert":case"actionsheet":case"picker":return`${e.phase??"?"} ${e.title??e.message??""}`;case"notification":return`${e.title??""}${e.body?` \u2014 ${e.body}`:""}`;case"fetch":return`${e.method??"GET"} ${e.url??""}${e.status?` -> ${e.status}`:""}`;case"console":return`${e.level??"log"}: ${(e.message??"").toString().slice(0,120)}`;case"shell":return`${e.event??e.type??e.phase??""}`;case"scroll":return`${e.phase??"?"} ${e.target??""}`;case"gesture":return`${e.phase??"?"} ${e.type??""}`;case"text-input":return`${e.phase??"?"}${e.value!==void 0?` "${String(e.value).slice(0,40)}"`:""}`;case"layout":return`${e.kind??"?"} ${e.testID??e.type??""}${e.skipped?` skipped:${e.reason??"unknown"}`:""}`;case"react-commit":{let t=e.slowest;return`${e.fiberCount??"?"} fibers ${e.durationMs??"?"}ms${t?.displayName?` \xB7 ${t.displayName} ${t.durationMs??"?"}ms`:""}`}case"reanimated":case"animation":return`${e.kind??""} ${e.target??""}${e.durationMs?` ${e.durationMs}ms`:""}`}}function A(n,e){let t=j(n.t,e).padStart(8),s=n.context.padEnd(6),l=`[${n.kind}]`.padEnd(15),o="",a=n.data;return a&&typeof a=="object"&&(o=B(n.kind,a)),` ${t} ${s} ${l} ${o}`}function M(n){let e=[],t={label:"initial state",events:[],startedAt:n[0]?.t??null};e.push(t);for(let s of n)if(t.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,o=l?.phase;if(!o||o==="enter"||o==="appear"||o==="active"){let a=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;e.length===1&&t.events.length===1?t.label=`${s.kind}: ${a}`:(t={label:`${s.kind}: ${a}`,events:[],startedAt:s.t},e.push(t))}}return e}async function J(n,e){let t=S(n,{port:e.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.119 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{A as F,B as T,C as y,N as x}from"./chunk-BZH7FKZZ.js";import{c as S,e as N}from"./chunk-WNK5XRWG.js";import{b as k}from"./chunk-RAWQNHKI.js";import"./chunk-QMU4MAG3.js";import"./chunk-ZX4FJNIW.js";import"./chunk-AUKEEPZT.js";function _(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--since"&&t+1<n.length){e.push(t,t+1);let s=n[t+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let a=Number(l[1]),m=l[2]??"ms",$=m==="s"?a*1e3:m==="m"?a*6e4:a;return{since:Date.now()-$,consumed:e}}let o=Number(s);if(Number.isFinite(o)&&o>1e12)return{since:o,consumed:e}}return{consumed:e}}function K(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--kinds"&&t+1<n.length)return e.push(t,t+1),{kinds:n[t+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:e};return{consumed:e}}function O(n){let e=[];for(let t=0;t<n.length;t++)if(n[t]==="--limit"&&t+1<n.length){e.push(t,t+1);let s=Number(n[t+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:e}}return{consumed:e}}function j(n,e){if(e===null)return new Date(n).toLocaleTimeString();let t=(n-e)/1e3;return`${t>=0?"+":""}${t.toFixed(2)}s`}function B(n,e){switch(n){case"app-launch":return e.phase==="launch"?`launch ${e.appName??e.toAppId??""}`:`dismiss ${e.appName??e.fromAppId??""} \u2192 ${e.toAppId??""}`;case"toast":return`"${e.text??""}"${e.durationMs?` (${e.durationMs}ms)`:""}`;case"keyboard":return`${e.phase??"?"}${e.heightPx?` h=${e.heightPx}`:""}${e.mode?` ${e.mode}`:""}`;case"screen":return`${e.phase??"?"} ${e.name??e.activeName??""}`;case"route":return`${e.phase??"?"} ${e.path??e.pathname??""}`;case"alert":case"actionsheet":case"picker":return`${e.phase??"?"} ${e.title??e.message??""}`;case"notification":return`${e.title??""}${e.body?` \u2014 ${e.body}`:""}`;case"fetch":return`${e.method??"GET"} ${e.url??""}${e.status?` -> ${e.status}`:""}`;case"console":return`${e.level??"log"}: ${(e.message??"").toString().slice(0,120)}`;case"shell":return`${e.event??e.type??e.phase??""}`;case"scroll":return`${e.phase??"?"} ${e.target??""}`;case"gesture":return`${e.phase??"?"} ${e.type??""}`;case"text-input":return`${e.phase??"?"}${e.value!==void 0?` "${String(e.value).slice(0,40)}"`:""}`;case"layout":return`${e.kind??"?"} ${e.testID??e.type??""}${e.skipped?` skipped:${e.reason??"unknown"}`:""}`;case"react-commit":{let t=e.slowest;return`${e.fiberCount??"?"} fibers ${e.durationMs??"?"}ms${t?.displayName?` \xB7 ${t.displayName} ${t.durationMs??"?"}ms`:""}`}case"reanimated":case"animation":return`${e.kind??""} ${e.target??""}${e.durationMs?` ${e.durationMs}ms`:""}`}}function A(n,e){let t=j(n.t,e).padStart(8),s=n.context.padEnd(6),l=`[${n.kind}]`.padEnd(15),o="",a=n.data;return a&&typeof a=="object"&&(o=B(n.kind,a)),` ${t} ${s} ${l} ${o}`}function M(n){let e=[],t={label:"initial state",events:[],startedAt:n[0]?.t??null};e.push(t);for(let s of n)if(t.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,o=l?.phase;if(!o||o==="enter"||o==="appear"||o==="active"){let a=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;e.length===1&&t.events.length===1?t.label=`${s.kind}: ${a}`:(t={label:`${s.kind}: ${a}`,events:[],startedAt:s.t},e.push(t))}}return e}async function J(n,e){let t=S(n,{port:e.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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{d as i}from"./chunk-XEWSIOAB.js";import{d as n}from"./chunk-FPUW7ZDL.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.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.119 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{d as i}from"./chunk-APWX6YCC.js";import{d as n}from"./chunk-AV6YDPVF.js";import"./chunk-ZX4FJNIW.js";import"./chunk-AUKEEPZT.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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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;
@@ -23,6 +23,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
23
23
  var sdk_exports = {};
24
24
  __export(sdk_exports, {
25
25
  DEBUG_CHANNELS: () => DEBUG_CHANNELS,
26
+ LAYOUT_GET_NATIVE_EVAL: () => LAYOUT_GET_NATIVE_EVAL,
26
27
  READY_CONTENT_NODE_FLOOR: () => READY_CONTENT_NODE_FLOOR,
27
28
  READY_NODE_STABLE_MS: () => READY_NODE_STABLE_MS,
28
29
  WAIT_READY_PROBE: () => WAIT_READY_PROBE,
@@ -31,6 +32,7 @@ __export(sdk_exports, {
31
32
  clearLogs: () => clearLogs,
32
33
  clearRequests: () => clearRequests,
33
34
  filterLogEntries: () => filterLogEntries,
35
+ formatLayoutElements: () => formatLayoutElements,
34
36
  formatTimelineSummary: () => formatTimelineSummary,
35
37
  getShellState: () => getShellState,
36
38
  inspectAccessibilityTree: () => inspectAccessibilityTree,
@@ -41,6 +43,7 @@ __export(sdk_exports, {
41
43
  inspectDescribe: () => inspectDescribe,
42
44
  inspectErrors: () => inspectErrors,
43
45
  inspectFind: () => inspectFind,
46
+ inspectGetLayout: () => inspectGetLayout,
44
47
  inspectKeyboard: () => inspectKeyboard,
45
48
  inspectLogs: () => inspectLogs,
46
49
  inspectMemory: () => inspectMemory,
@@ -155,6 +158,91 @@ async function inspectDescribe(bridge, dumpOpts) {
155
158
  const result = await bridge.send({ type: "evaluate", code });
156
159
  return result ?? {};
157
160
  }
161
+ var LAYOUT_GET_NATIVE_EVAL = `(async () => {
162
+ const t = window.__sootsimTest
163
+ if (!t || typeof t.listInspectable !== 'function') return []
164
+ const list = await t.listInspectable({})
165
+ if (!Array.isArray(list)) return []
166
+
167
+ const num = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : 0)
168
+ const round = (v) => Math.round(num(v))
169
+
170
+ // borderRadius can be authored as a string ("12px") or split per-corner;
171
+ // prefer the uniform borderRadius, else the largest corner radius present.
172
+ const radiusOf = (style) => {
173
+ if (!style) return 0
174
+ const keys = ['borderRadius','borderTopLeftRadius','borderTopRightRadius','borderBottomLeftRadius','borderBottomRightRadius']
175
+ let max = 0
176
+ for (const k of keys) {
177
+ const raw = style[k]
178
+ const n = typeof raw === 'number' ? raw : (typeof raw === 'string' ? parseFloat(raw) : NaN)
179
+ if (Number.isFinite(n)) max = Math.max(max, n)
180
+ }
181
+ return Math.round(max)
182
+ }
183
+ const fontSizeOf = (style) => {
184
+ if (!style) return 0
185
+ const raw = style.fontSize
186
+ const n = typeof raw === 'number' ? raw : (typeof raw === 'string' ? parseFloat(raw) : NaN)
187
+ return Number.isFinite(n) ? Math.round(n) : 0
188
+ }
189
+
190
+ const isVisible = (n) => {
191
+ const layout = n && n.layout
192
+ if (!layout || layout.width <= 0 || layout.height <= 0) return false
193
+ const abs = (n && (n.absolute || n.absolutePosition)) || null
194
+ if (!abs) return true
195
+ const device = (n && n.device) || {}
196
+ const screenW = Number(device.width) || window.innerWidth || 0
197
+ const screenH = Number(device.height) || window.innerHeight || 0
198
+ if (!screenW || !screenH) return true
199
+ return abs.x + layout.width > 0 && abs.y + layout.height > 0 && abs.x < screenW && abs.y < screenH
200
+ }
201
+
202
+ return list.filter(isVisible).map((n) => {
203
+ const layout = n.layout || { x: 0, y: 0, width: 0, height: 0 }
204
+ const abs = n.absolute || n.absolutePosition || { x: layout.x, y: layout.y }
205
+ // computedStyle has the resolved values; style is the curated subset \u2014
206
+ // fall back across both so radius/fontSize survive either shape.
207
+ const style = Object.assign({}, n.style || {}, n.computedStyle || {})
208
+ const pad = (n.boxModel && n.boxModel.padding) || {}
209
+ const text = typeof n.text === 'string' && n.text.trim() ? n.text.trim() : undefined
210
+ return {
211
+ testID: n.testID || n.testId || undefined,
212
+ role: n.accessibilityRole || n.role || undefined,
213
+ type: typeof n.type === 'string' ? n.type : 'node',
214
+ text,
215
+ box: { x: round(abs.x), y: round(abs.y), w: round(layout.width), h: round(layout.height) },
216
+ borderRadius: radiusOf(style),
217
+ padding: { t: round(pad.top), r: round(pad.right), b: round(pad.bottom), l: round(pad.left) },
218
+ fontSize: fontSizeOf(style),
219
+ }
220
+ })
221
+ })()`;
222
+ async function inspectGetLayout(bridge) {
223
+ const raw = await bridge.send({ type: "evaluate", code: LAYOUT_GET_NATIVE_EVAL });
224
+ return Array.isArray(raw) ? raw : [];
225
+ }
226
+ function formatLayoutElements(elements) {
227
+ if (elements.length === 0) return " no visible elements found";
228
+ const lines = elements.map((el) => {
229
+ const ident = el.testID ? `#${el.testID}` : el.selector ? el.selector : el.role ? `[${el.role}]` : `<${el.type}>`;
230
+ const parts = [ident, `@(${el.box.x},${el.box.y})`, `${el.box.w}x${el.box.h}`];
231
+ if (el.borderRadius > 0) parts.push(`radius:${el.borderRadius}`);
232
+ const p = el.padding;
233
+ if (p.t || p.r || p.b || p.l) {
234
+ const uniform = p.t === p.r && p.r === p.b && p.b === p.l;
235
+ parts.push(uniform ? `pad:${p.t}` : `pad:${p.t},${p.r},${p.b},${p.l}`);
236
+ }
237
+ if (el.fontSize > 0) parts.push(`font:${el.fontSize}`);
238
+ if (el.text) {
239
+ const text = el.text.length > 40 ? `${el.text.slice(0, 39)}\u2026` : el.text;
240
+ parts.push(`"${text}"`);
241
+ }
242
+ return ` ${parts.join(" ")}`;
243
+ });
244
+ return lines.join("\n");
245
+ }
158
246
  var INSPECT_A11Y_CODE = `(async () => {
159
247
  const t = window.__sootsimTest
160
248
  if (!t) return []
@@ -1401,6 +1489,7 @@ async function tapBest(bridge, query, opts = {}) {
1401
1489
  // Annotate the CommonJS export names for ESM import in node:
1402
1490
  0 && (module.exports = {
1403
1491
  DEBUG_CHANNELS,
1492
+ LAYOUT_GET_NATIVE_EVAL,
1404
1493
  READY_CONTENT_NODE_FLOOR,
1405
1494
  READY_NODE_STABLE_MS,
1406
1495
  WAIT_READY_PROBE,
@@ -1409,6 +1498,7 @@ async function tapBest(bridge, query, opts = {}) {
1409
1498
  clearLogs,
1410
1499
  clearRequests,
1411
1500
  filterLogEntries,
1501
+ formatLayoutElements,
1412
1502
  formatTimelineSummary,
1413
1503
  getShellState,
1414
1504
  inspectAccessibilityTree,
@@ -1419,6 +1509,7 @@ async function tapBest(bridge, query, opts = {}) {
1419
1509
  inspectDescribe,
1420
1510
  inspectErrors,
1421
1511
  inspectFind,
1512
+ inspectGetLayout,
1422
1513
  inspectKeyboard,
1423
1514
  inspectLogs,
1424
1515
  inspectMemory,
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // cli/commands/inspect/core.ts
4
4
  function resolveMaxMsFlag(args, fallbackMs) {
@@ -76,6 +76,91 @@ async function inspectDescribe(bridge, dumpOpts) {
76
76
  const result = await bridge.send({ type: "evaluate", code });
77
77
  return result ?? {};
78
78
  }
79
+ var LAYOUT_GET_NATIVE_EVAL = `(async () => {
80
+ const t = window.__sootsimTest
81
+ if (!t || typeof t.listInspectable !== 'function') return []
82
+ const list = await t.listInspectable({})
83
+ if (!Array.isArray(list)) return []
84
+
85
+ const num = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : 0)
86
+ const round = (v) => Math.round(num(v))
87
+
88
+ // borderRadius can be authored as a string ("12px") or split per-corner;
89
+ // prefer the uniform borderRadius, else the largest corner radius present.
90
+ const radiusOf = (style) => {
91
+ if (!style) return 0
92
+ const keys = ['borderRadius','borderTopLeftRadius','borderTopRightRadius','borderBottomLeftRadius','borderBottomRightRadius']
93
+ let max = 0
94
+ for (const k of keys) {
95
+ const raw = style[k]
96
+ const n = typeof raw === 'number' ? raw : (typeof raw === 'string' ? parseFloat(raw) : NaN)
97
+ if (Number.isFinite(n)) max = Math.max(max, n)
98
+ }
99
+ return Math.round(max)
100
+ }
101
+ const fontSizeOf = (style) => {
102
+ if (!style) return 0
103
+ const raw = style.fontSize
104
+ const n = typeof raw === 'number' ? raw : (typeof raw === 'string' ? parseFloat(raw) : NaN)
105
+ return Number.isFinite(n) ? Math.round(n) : 0
106
+ }
107
+
108
+ const isVisible = (n) => {
109
+ const layout = n && n.layout
110
+ if (!layout || layout.width <= 0 || layout.height <= 0) return false
111
+ const abs = (n && (n.absolute || n.absolutePosition)) || null
112
+ if (!abs) return true
113
+ const device = (n && n.device) || {}
114
+ const screenW = Number(device.width) || window.innerWidth || 0
115
+ const screenH = Number(device.height) || window.innerHeight || 0
116
+ if (!screenW || !screenH) return true
117
+ return abs.x + layout.width > 0 && abs.y + layout.height > 0 && abs.x < screenW && abs.y < screenH
118
+ }
119
+
120
+ return list.filter(isVisible).map((n) => {
121
+ const layout = n.layout || { x: 0, y: 0, width: 0, height: 0 }
122
+ const abs = n.absolute || n.absolutePosition || { x: layout.x, y: layout.y }
123
+ // computedStyle has the resolved values; style is the curated subset \u2014
124
+ // fall back across both so radius/fontSize survive either shape.
125
+ const style = Object.assign({}, n.style || {}, n.computedStyle || {})
126
+ const pad = (n.boxModel && n.boxModel.padding) || {}
127
+ const text = typeof n.text === 'string' && n.text.trim() ? n.text.trim() : undefined
128
+ return {
129
+ testID: n.testID || n.testId || undefined,
130
+ role: n.accessibilityRole || n.role || undefined,
131
+ type: typeof n.type === 'string' ? n.type : 'node',
132
+ text,
133
+ box: { x: round(abs.x), y: round(abs.y), w: round(layout.width), h: round(layout.height) },
134
+ borderRadius: radiusOf(style),
135
+ padding: { t: round(pad.top), r: round(pad.right), b: round(pad.bottom), l: round(pad.left) },
136
+ fontSize: fontSizeOf(style),
137
+ }
138
+ })
139
+ })()`;
140
+ async function inspectGetLayout(bridge) {
141
+ const raw = await bridge.send({ type: "evaluate", code: LAYOUT_GET_NATIVE_EVAL });
142
+ return Array.isArray(raw) ? raw : [];
143
+ }
144
+ function formatLayoutElements(elements) {
145
+ if (elements.length === 0) return " no visible elements found";
146
+ const lines = elements.map((el) => {
147
+ const ident = el.testID ? `#${el.testID}` : el.selector ? el.selector : el.role ? `[${el.role}]` : `<${el.type}>`;
148
+ const parts = [ident, `@(${el.box.x},${el.box.y})`, `${el.box.w}x${el.box.h}`];
149
+ if (el.borderRadius > 0) parts.push(`radius:${el.borderRadius}`);
150
+ const p = el.padding;
151
+ if (p.t || p.r || p.b || p.l) {
152
+ const uniform = p.t === p.r && p.r === p.b && p.b === p.l;
153
+ parts.push(uniform ? `pad:${p.t}` : `pad:${p.t},${p.r},${p.b},${p.l}`);
154
+ }
155
+ if (el.fontSize > 0) parts.push(`font:${el.fontSize}`);
156
+ if (el.text) {
157
+ const text = el.text.length > 40 ? `${el.text.slice(0, 39)}\u2026` : el.text;
158
+ parts.push(`"${text}"`);
159
+ }
160
+ return ` ${parts.join(" ")}`;
161
+ });
162
+ return lines.join("\n");
163
+ }
79
164
  var INSPECT_A11Y_CODE = `(async () => {
80
165
  const t = window.__sootsimTest
81
166
  if (!t) return []
@@ -1321,6 +1406,7 @@ async function tapBest(bridge, query, opts = {}) {
1321
1406
  }
1322
1407
  export {
1323
1408
  DEBUG_CHANNELS,
1409
+ LAYOUT_GET_NATIVE_EVAL,
1324
1410
  READY_CONTENT_NODE_FLOOR,
1325
1411
  READY_NODE_STABLE_MS,
1326
1412
  WAIT_READY_PROBE,
@@ -1329,6 +1415,7 @@ export {
1329
1415
  clearLogs,
1330
1416
  clearRequests,
1331
1417
  filterLogEntries,
1418
+ formatLayoutElements,
1332
1419
  formatTimelineSummary,
1333
1420
  getShellState,
1334
1421
  inspectAccessibilityTree,
@@ -1339,6 +1426,7 @@ export {
1339
1426
  inspectDescribe,
1340
1427
  inspectErrors,
1341
1428
  inspectFind,
1429
+ inspectGetLayout,
1342
1430
  inspectKeyboard,
1343
1431
  inspectLogs,
1344
1432
  inspectMemory,
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.119 | (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.118",
3
+ "version": "0.1.119",
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",
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-RRGMPOCZ.js";import"./chunk-GF3PTYUG.js";import"./chunk-GJB3233O.js";import"./chunk-LP46VFFE.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";export{c as ensureDaemonRunning,a as ensureRuntimeInstalled,d as ensureSootsimReady,b as resolveBootstrapPort};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d,e}from"./chunk-4YCHWQKG.js";import"./chunk-UPSFFGWI.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 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- var t="http://localhost:5173/";export{t as a};
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-JH3UHLET.js";import"./chunk-UPSFFGWI.js";export{a as getCliVersion};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{d as a,e as b,f as c,g as d,h as e,i as f,j as g,k as h,l as i,m as j,n as k,o as l,p as m,q as n,r as o,s as p,t as q,u as r,v as s}from"./chunk-YW6R4AZS.js";import"./chunk-EGAVQVNQ.js";import"./chunk-UNGEGYXQ.js";import"./chunk-3OU23VHJ.js";import"./chunk-A3RAHXFP.js";import"./chunk-GF3PTYUG.js";import"./chunk-5YSLVAQO.js";import"./chunk-WETDSNVK.js";import"./chunk-JWC43Q7G.js";import"./chunk-IIPXHHCA.js";import"./chunk-2KH3XP25.js";import"./chunk-GJB3233O.js";import"./chunk-JAR6ZK7S.js";import"./chunk-LP46VFFE.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";export{e as buildOpenUrl,d as buildShellUrl,q as closeSimsBulk,r as planBulkCloseTargets,i as playwrightHostPidForSim,g as printConnectedSims,b as resolveBundleTarget,c as resolveDefaultShellBaseUrl,a as resolveDriverConnectWaitOptions,p as runClaimCommand,s as runCloseCommand,o as runFocusCommand,l as runListCommand,m as runOpenCommand,n as runUseCommand,j as signalDriverLaunchConnected,f as summarizeSimUrl,k as terminatePlaywrightHostsForSims,h as waitForSimMatch};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import"./chunk-2TJIYYD6.js";import{a,b,c,d,e,f,g,h,i}from"./chunk-5YSLVAQO.js";import"./chunk-WETDSNVK.js";import"./chunk-JWC43Q7G.js";import"./chunk-IIPXHHCA.js";import"./chunk-2KH3XP25.js";import"./chunk-GJB3233O.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";export{e as ALL_DRIVERS,i as buildDriverListRows,a as chromiumDriver,b as electronDriver,f as getAllDrivers,g as getDriver,c as playwrightDriver,h as resolveDriver,d as systemDriver};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as c,b as d,c as e,d as f}from"./chunk-FXARAPTS.js";import"./chunk-JSIQX4RC.js";import"./chunk-RHTOXVIQ.js";import"./chunk-WYQOR72S.js";import"./chunk-6YPNZR54.js";import"./chunk-XEWSIOAB.js";import{d as a,e as b}from"./chunk-SCAOPMDY.js";import"./chunk-YW6R4AZS.js";import"./chunk-EGAVQVNQ.js";import"./chunk-UNGEGYXQ.js";import"./chunk-3OU23VHJ.js";import"./chunk-A3RAHXFP.js";import"./chunk-GF3PTYUG.js";import"./chunk-5YSLVAQO.js";import"./chunk-WETDSNVK.js";import"./chunk-JWC43Q7G.js";import"./chunk-IIPXHHCA.js";import"./chunk-2KH3XP25.js";import"./chunk-GJB3233O.js";import"./chunk-W3XLQMHS.js";import"./chunk-FPUW7ZDL.js";import"./chunk-N6A3DLGD.js";import"./chunk-JAR6ZK7S.js";import"./chunk-LP46VFFE.js";import"./chunk-U6CXSNU5.js";import"./chunk-MAFA2R2B.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";export{c as discoverSootsimUrl,e as hoistLeadingSimFlag,a as parseFlowFile,f as runFlow,d as runFlowPlayback,b as validateFlowFile};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-QK5KDLOL.js";import"./chunk-N6A3DLGD.js";import"./chunk-PC6MD7KR.js";import"./chunk-JAR6ZK7S.js";import"./chunk-LP46VFFE.js";import"./chunk-JH3UHLET.js";import"./chunk-4YCHWQKG.js";import"./chunk-MAFA2R2B.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";export{c as printCommandHelp,b as printGroupHelp,a as printHelp};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as o}from"./chunk-VCYQZSOW.js";import"./chunk-QDBFZQ2P.js";import"./chunk-RRGMPOCZ.js";import"./chunk-GF3PTYUG.js";import"./chunk-GJB3233O.js";import"./chunk-W3XLQMHS.js";import"./chunk-FPUW7ZDL.js";import"./chunk-LP46VFFE.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";async function t(n){console.error(" note: `sootsim install` is now `sootsim setup-repo`. forwarding\u2026\n"),await o(n)}export{t as runInstall};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-D2HFLNQK.js";import"./chunk-GF3PTYUG.js";import"./chunk-GJB3233O.js";import"./chunk-LP46VFFE.js";import"./chunk-WGFN4X7U.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";export{a as runRuntime};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-VCYQZSOW.js";import"./chunk-QDBFZQ2P.js";import"./chunk-RRGMPOCZ.js";import"./chunk-GF3PTYUG.js";import"./chunk-GJB3233O.js";import"./chunk-W3XLQMHS.js";import"./chunk-FPUW7ZDL.js";import"./chunk-LP46VFFE.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";export{a as runSetupRepo};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-U6CXSNU5.js";import"./chunk-MAFA2R2B.js";import"./chunk-UPSFFGWI.js";export{a as settingsStore};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b}from"./chunk-W3XLQMHS.js";import"./chunk-FPUW7ZDL.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";export{b as flushCliTelemetry,a as trackCliEvent};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.118 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-6YPNZR54.js";import"./chunk-XEWSIOAB.js";import"./chunk-A3RAHXFP.js";import"./chunk-GF3PTYUG.js";import"./chunk-JWC43Q7G.js";import"./chunk-2KH3XP25.js";import"./chunk-GJB3233O.js";import"./chunk-W3XLQMHS.js";import"./chunk-FPUW7ZDL.js";import"./chunk-LP46VFFE.js";import"./chunk-SLBI37WD.js";import"./chunk-UPSFFGWI.js";export{a as resolveDefaultUploadOrigin,b as resolvePublicPreviewOrigin,c as runUpload};