sootsim 0.1.240 → 0.1.241

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 (144) hide show
  1. package/dist-cli/bin.js +4 -4
  2. package/dist-cli/chunks/{agent-YS355M7O.js → agent-7Z3WG3YJ.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-DJJH2DE5.js → agent-wrapper-IMTGEJ7T.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-2KURCNO7.js → app-fonts-7E66PSAV.js} +2 -2
  5. package/dist-cli/chunks/{assert-Y7SV6LAY.js → assert-IEBAQZC7.js} +2 -2
  6. package/dist-cli/chunks/{auth-5VMBSD6F.js → auth-FRMHPA2X.js} +2 -2
  7. package/dist-cli/chunks/beta-AMMCLKHD.js +2 -0
  8. package/dist-cli/chunks/{camera-WCQNMZRH.js → camera-O67TQUAH.js} +2 -2
  9. package/dist-cli/chunks/{chunk-ZYMOUSJC.js → chunk-2DY3JHFK.js} +1 -1
  10. package/dist-cli/chunks/{chunk-BWR3AJZ3.js → chunk-4JSCYLLH.js} +1 -1
  11. package/dist-cli/chunks/{chunk-AX56F2Z5.js → chunk-4V6MFWDY.js} +1 -1
  12. package/dist-cli/chunks/{chunk-OBQJXFV3.js → chunk-5COOJUTE.js} +1 -1
  13. package/dist-cli/chunks/{chunk-SFNTUDIP.js → chunk-5ZNYFTOB.js} +2 -2
  14. package/dist-cli/chunks/{chunk-KY2HHVDG.js → chunk-7I3PV2RE.js} +2 -2
  15. package/dist-cli/chunks/{chunk-XVE2O2IR.js → chunk-AROVTS3P.js} +2 -2
  16. package/dist-cli/chunks/{chunk-DQEI7LOC.js → chunk-BIHEU677.js} +3 -3
  17. package/dist-cli/chunks/{chunk-4FUKKXDQ.js → chunk-CAOW2O5V.js} +2 -2
  18. package/dist-cli/chunks/{chunk-2ZEVD46I.js → chunk-CSZOZRKB.js} +3 -3
  19. package/dist-cli/chunks/{chunk-GW7REFUB.js → chunk-DS2KFLBO.js} +1 -1
  20. package/dist-cli/chunks/chunk-ECRSTV5C.js +118 -0
  21. package/dist-cli/chunks/{chunk-OUW757HM.js → chunk-EY3ZQWUQ.js} +52 -52
  22. package/dist-cli/chunks/{chunk-H6GS5C4F.js → chunk-F5YD4BLA.js} +2 -2
  23. package/dist-cli/chunks/{chunk-TFXCEOCW.js → chunk-FR7JCFAR.js} +1 -1
  24. package/dist-cli/chunks/{chunk-LBOSTYWQ.js → chunk-GFZLDVLE.js} +1 -1
  25. package/dist-cli/chunks/{chunk-OKHNWLZ7.js → chunk-GVTSKLLS.js} +2 -2
  26. package/dist-cli/chunks/{chunk-XV4VXQDA.js → chunk-H7G2QGUG.js} +2 -2
  27. package/dist-cli/chunks/{chunk-XSSTKHK7.js → chunk-H7SP6J3H.js} +2 -2
  28. package/dist-cli/chunks/{chunk-C4MSUAGM.js → chunk-HNI6U6M5.js} +1 -1
  29. package/dist-cli/chunks/{chunk-HIFBYPJK.js → chunk-IF5VXL45.js} +2 -2
  30. package/dist-cli/chunks/{chunk-5LCZXDDX.js → chunk-JMTQBHQY.js} +1 -1
  31. package/dist-cli/chunks/{chunk-T7BLBFPG.js → chunk-JX4N376W.js} +2 -2
  32. package/dist-cli/chunks/{chunk-WYT6JDAV.js → chunk-KFI26HW5.js} +1 -1
  33. package/dist-cli/chunks/chunk-KLXLOMI6.js +1 -0
  34. package/dist-cli/chunks/{chunk-DEO54ZY3.js → chunk-KN3Q6VSC.js} +2 -2
  35. package/dist-cli/chunks/{chunk-EJ6ULQFO.js → chunk-LVUOVKJO.js} +2 -2
  36. package/dist-cli/chunks/{chunk-SW5HPJC7.js → chunk-MCAJBAWD.js} +2 -2
  37. package/dist-cli/chunks/{chunk-JDRG4T3G.js → chunk-MGLTIS7P.js} +2 -2
  38. package/dist-cli/chunks/{chunk-NJYDI627.js → chunk-PR6AOTP5.js} +1 -1
  39. package/dist-cli/chunks/{chunk-GYWIGJB7.js → chunk-PVUUG5YW.js} +2 -2
  40. package/dist-cli/chunks/{chunk-6XHVSTMH.js → chunk-R3EZVIEM.js} +2 -2
  41. package/dist-cli/chunks/{chunk-4F63QBYN.js → chunk-U7XJNNGI.js} +3 -3
  42. package/dist-cli/chunks/{chunk-VU5WTUZJ.js → chunk-UF333CGY.js} +2 -2
  43. package/dist-cli/chunks/{chunk-3ULI43M6.js → chunk-VVUANJFA.js} +72 -23
  44. package/dist-cli/chunks/{chunk-2QILUPQJ.js → chunk-WFB3ICCN.js} +1 -1
  45. package/dist-cli/chunks/{chunk-M3VY5LEN.js → chunk-WIHKSZM4.js} +1 -1
  46. package/dist-cli/chunks/{chunk-KENWUOKC.js → chunk-WPWLJFKF.js} +2 -2
  47. package/dist-cli/chunks/{chunk-M2MJXMTO.js → chunk-YLWUYESW.js} +1 -1
  48. package/dist-cli/chunks/{chunk-7ZTOWAQF.js → chunk-YX7S6N42.js} +2 -2
  49. package/dist-cli/chunks/{chunk-M2OTE66X.js → chunk-Z72IF5FC.js} +2 -2
  50. package/dist-cli/chunks/chunk-ZGSGMGE3.js +1 -0
  51. package/dist-cli/chunks/{chunk-ILU6JNUJ.js → chunk-ZUZLQ4ZJ.js} +1 -1
  52. package/dist-cli/chunks/{chunk-GI36DI2I.js → chunk-ZYJCVJFP.js} +1 -1
  53. package/dist-cli/chunks/cli-version-DIYZFJMN.js +2 -0
  54. package/dist-cli/chunks/{compat-LUERFKMW.js → compat-ZRUVBIK7.js} +3 -3
  55. package/dist-cli/chunks/{config-U4Z6TYT6.js → config-VKQDFC5Z.js} +2 -2
  56. package/dist-cli/chunks/{control-I5YB63IZ.js → control-OYK2J4JW.js} +2 -2
  57. package/dist-cli/chunks/daemon-YQLY7PVM.js +2 -0
  58. package/dist-cli/chunks/{debug-HXECWDLV.js → debug-3WEO7ZRW.js} +3 -3
  59. package/dist-cli/chunks/{desktop-NZJLDJIO.js → desktop-DVOFHJKU.js} +3 -3
  60. package/dist-cli/chunks/{detox-LUOT4TIA.js → detox-GAGC276D.js} +2 -2
  61. package/dist-cli/chunks/{device-7TZ7BD36.js → device-256KFP2G.js} +2 -2
  62. package/dist-cli/chunks/{diagnose-DW2ANEGF.js → diagnose-GYKUU3N5.js} +2 -2
  63. package/dist-cli/chunks/drivers-FHWFHVQF.js +2 -0
  64. package/dist-cli/chunks/{film-6MYMKZ3N.js → film-WAV3WPQK.js} +3 -3
  65. package/dist-cli/chunks/flow-WKPPIDM6.js +2 -0
  66. package/dist-cli/chunks/help-P4A7NNSC.js +2 -0
  67. package/dist-cli/chunks/{hidden-runtime-alias-FUDVEMFB.js → hidden-runtime-alias-DODMMNOJ.js} +2 -2
  68. package/dist-cli/chunks/{home-paths-KU4MY22X.js → home-paths-QU5UX3MT.js} +2 -2
  69. package/dist-cli/chunks/inspect-NIHY67NU.js +2 -0
  70. package/dist-cli/chunks/install-desktop-NA53KD6G.js +2 -0
  71. package/dist-cli/chunks/{login-EVS4SZQN.js → login-OURQ3DVM.js} +4 -4
  72. package/dist-cli/chunks/{logout-K5MLSAWM.js → logout-ZYVJAPBO.js} +2 -2
  73. package/dist-cli/chunks/{maestro-OEDT2T7V.js → maestro-H2NGXNF4.js} +3 -3
  74. package/dist-cli/chunks/{maestro-generate-T4RZSVSM.js → maestro-generate-DA2IZPK2.js} +3 -3
  75. package/dist-cli/chunks/{mode-TZU7JML2.js → mode-QTK3ERUW.js} +2 -2
  76. package/dist-cli/chunks/optional-demo-registry-ZLN23OYV.js +2 -0
  77. package/dist-cli/chunks/{perf-YNBU57WH.js → perf-WZ4OPYXV.js} +2 -2
  78. package/dist-cli/chunks/{record-V6T2INPF.js → record-ZQSUHQJU.js} +3 -3
  79. package/dist-cli/chunks/runtime-RM67M6H3.js +2 -0
  80. package/dist-cli/chunks/{screenshot-command-CZZ6IXSD.js → screenshot-command-UDJ6TEAM.js} +3 -3
  81. package/dist-cli/chunks/{screenshots-capture-WVR5FCHX.js → screenshots-capture-4FK4NYXG.js} +2 -2
  82. package/dist-cli/chunks/{serve-6I35UUFI.js → serve-MCT4HKR7.js} +2 -2
  83. package/dist-cli/chunks/{setup-O7GD6GME.js → setup-I2IELNJN.js} +3 -3
  84. package/dist-cli/chunks/{skills-GBTBS2OK.js → skills-PVXI7LM6.js} +2 -2
  85. package/dist-cli/chunks/{storage-FI2YOPQE.js → storage-KZFCVRGD.js} +2 -2
  86. package/dist-cli/chunks/store-CEMC5MTK.js +2 -0
  87. package/dist-cli/chunks/telemetry-LFIQWPZD.js +2 -0
  88. package/dist-cli/chunks/{timeline-E5DVVATK.js → timeline-YAULXFEC.js} +2 -2
  89. package/dist-cli/chunks/{upgrade-QKOI3Q4U.js → upgrade-63TVREBM.js} +2 -2
  90. package/dist-cli/chunks/upload-APW46WK3.js +2 -0
  91. package/dist-cli/chunks/{version-UANAPNZM.js → version-JWWEGZS7.js} +2 -2
  92. package/dist-cli/chunks/{web-4LZ7DUUS.js → web-XO724HJL.js} +2 -2
  93. package/dist-cli/chunks/{what-happened-JOLNICMX.js → what-happened-DQ4MXAPJ.js} +2 -2
  94. package/dist-lib/agent-daemon-client.cjs +1 -1
  95. package/dist-lib/agent-events.cjs +1 -1
  96. package/dist-lib/agent-identity.cjs +1 -1
  97. package/dist-lib/agent-sessions.cjs +1 -1
  98. package/dist-lib/attached-projects.cjs +1 -1
  99. package/dist-lib/auth/shared-session.cjs +1 -1
  100. package/dist-lib/backend-origin.cjs +1 -1
  101. package/dist-lib/beta.cjs +1 -1
  102. package/dist-lib/beta.mjs +1 -1
  103. package/dist-lib/bridge-constants.cjs +1 -1
  104. package/dist-lib/cli-constants.cjs +1 -1
  105. package/dist-lib/config.cjs +1 -1
  106. package/dist-lib/detox/index.cjs +1 -1
  107. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  108. package/dist-lib/home-paths.cjs +1 -1
  109. package/dist-lib/host/bridge-host.cjs +1 -1
  110. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  111. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  112. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  113. package/dist-lib/host/websocket-proxy.cjs +1 -1
  114. package/dist-lib/index.cjs +1 -1
  115. package/dist-lib/jump-to-source-babel.cjs +1 -1
  116. package/dist-lib/menu.cjs +1 -1
  117. package/dist-lib/menu.mjs +1 -1
  118. package/dist-lib/metro.cjs +1 -1
  119. package/dist-lib/profiles.cjs +1 -1
  120. package/dist-lib/render-mode.cjs +1 -1
  121. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  122. package/dist-lib/sdk.cjs +157 -5
  123. package/dist-lib/sdk.mjs +156 -5
  124. package/dist-lib/skills.cjs +144 -4
  125. package/dist-lib/vite.cjs +1 -1
  126. package/package.json +1 -1
  127. package/skills/contrast/SKILL.md +1 -1
  128. package/skills/sootsim-debug/SKILL.md +21 -12
  129. package/dist-cli/chunks/beta-KMI4GCCN.js +0 -2
  130. package/dist-cli/chunks/chunk-3RYTIG4Y.js +0 -118
  131. package/dist-cli/chunks/chunk-R54EGANH.js +0 -1
  132. package/dist-cli/chunks/chunk-U3VMQUN6.js +0 -1
  133. package/dist-cli/chunks/cli-version-2BXTYTLJ.js +0 -2
  134. package/dist-cli/chunks/daemon-VTG3XKWA.js +0 -2
  135. package/dist-cli/chunks/drivers-RDXY5SDO.js +0 -2
  136. package/dist-cli/chunks/flow-KS77CBEA.js +0 -2
  137. package/dist-cli/chunks/help-H3ZD3LVG.js +0 -2
  138. package/dist-cli/chunks/inspect-ACDDO276.js +0 -2
  139. package/dist-cli/chunks/install-desktop-UQVXJAXS.js +0 -2
  140. package/dist-cli/chunks/optional-demo-registry-NIJ3MA5N.js +0 -2
  141. package/dist-cli/chunks/runtime-7XBSKGNO.js +0 -2
  142. package/dist-cli/chunks/store-FU7T5NPV.js +0 -2
  143. package/dist-cli/chunks/telemetry-REPVX6LA.js +0 -2
  144. package/dist-cli/chunks/upload-IFQM3FG4.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.240 | (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-3ULI43M6.js";import{g as A,i as _}from"./chunk-H6GS5C4F.js";import"./chunk-AX56F2Z5.js";import{c as k}from"./chunk-NJYDI627.js";import"./chunk-WYT6JDAV.js";import"./chunk-OBQJXFV3.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.241 | (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-VVUANJFA.js";import{g as A,i as _}from"./chunk-F5YD4BLA.js";import"./chunk-4V6MFWDY.js";import{c as k}from"./chunk-PR6AOTP5.js";import"./chunk-KFI26HW5.js";import"./chunk-5COOJUTE.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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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.240 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.241 | (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;
@@ -76,6 +76,7 @@ __export(sdk_exports, {
76
76
  resolveFindMode: () => resolveFindMode,
77
77
  resolveMaxMsFlag: () => resolveMaxMsFlag,
78
78
  scoreInteractive: () => scoreInteractive,
79
+ scoreLayoutTextContrast: () => scoreLayoutTextContrast,
79
80
  setDebugChannels: () => setDebugChannels,
80
81
  shouldSkipAutoSettleForInspectPick: () => shouldSkipAutoSettleForInspectPick,
81
82
  tapBest: () => tapBest,
@@ -236,6 +237,101 @@ async function inspectDescribe(bridge, dumpOpts) {
236
237
  const result = await bridge.send({ type: "evaluate", code });
237
238
  return result ?? {};
238
239
  }
240
+ function scoreLayoutTextContrast(input) {
241
+ const required = input.fontSize >= 18 || input.fontSize >= 14 && (input.fontWeight ?? 400) >= 700 ? 3 : 4.5;
242
+ const { normal, background } = input;
243
+ if (normal.width <= 0 || normal.height <= 0 || normal.width !== background.width || normal.height !== background.height) {
244
+ return { ratio: null, required, reason: "capture dimensions do not match" };
245
+ }
246
+ const left = Math.max(0, Math.floor(input.box.x));
247
+ const top = Math.max(0, Math.floor(input.box.y));
248
+ const right = Math.min(normal.width, Math.ceil(input.box.x + input.box.w));
249
+ const bottom = Math.min(normal.height, Math.ceil(input.box.y + input.box.h));
250
+ if (right <= left || bottom <= top) {
251
+ return { ratio: null, required, reason: "text is outside the captured frame" };
252
+ }
253
+ const linear = (value) => {
254
+ const channel = value / 255;
255
+ return channel <= 0.04045 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);
256
+ };
257
+ const ratioOf = (foreground, behind) => {
258
+ const foregroundLuminance = 0.2126 * linear(foreground[0]) + 0.7152 * linear(foreground[1]) + 0.0722 * linear(foreground[2]);
259
+ const backgroundLuminance = 0.2126 * linear(behind[0]) + 0.7152 * linear(behind[1]) + 0.0722 * linear(behind[2]);
260
+ return (Math.max(foregroundLuminance, backgroundLuminance) + 0.05) / (Math.min(foregroundLuminance, backgroundLuminance) + 0.05);
261
+ };
262
+ const hex = (color) => `#${color.slice(0, 3).map((value) => Math.round(value).toString(16).padStart(2, "0")).join("")}`;
263
+ const area = (right - left) * (bottom - top);
264
+ const step = Math.max(1, Math.floor(Math.sqrt(area / 12e3)));
265
+ const offsetAt = (x, y) => (y * normal.width + x) * 4;
266
+ const deltaAt = (offset) => Math.max(
267
+ Math.abs(normal.data[offset] - background.data[offset]),
268
+ Math.abs(normal.data[offset + 1] - background.data[offset + 1]),
269
+ Math.abs(normal.data[offset + 2] - background.data[offset + 2])
270
+ );
271
+ let strongestDelta = 0;
272
+ let strongestForeground = null;
273
+ let opaqueBackground = null;
274
+ for (let y = top; y < bottom; y += step) {
275
+ for (let x = left; x < right; x += step) {
276
+ const offset = offsetAt(x, y);
277
+ if (background.data[offset + 3] < 250) continue;
278
+ const behind = [
279
+ background.data[offset],
280
+ background.data[offset + 1],
281
+ background.data[offset + 2]
282
+ ];
283
+ opaqueBackground ??= behind;
284
+ const delta = deltaAt(offset);
285
+ if (delta <= strongestDelta) continue;
286
+ strongestDelta = delta;
287
+ strongestForeground = [
288
+ normal.data[offset],
289
+ normal.data[offset + 1],
290
+ normal.data[offset + 2]
291
+ ];
292
+ }
293
+ }
294
+ let bestRatio = Infinity;
295
+ let bestForeground = null;
296
+ let bestBackground = null;
297
+ const consider = (foreground, behind) => {
298
+ const ratio = ratioOf(foreground, behind);
299
+ if (ratio >= bestRatio) return;
300
+ bestRatio = ratio;
301
+ bestForeground = foreground;
302
+ bestBackground = behind;
303
+ };
304
+ if (strongestDelta >= 2 && strongestForeground) {
305
+ for (let y = top; y < bottom; y += step) {
306
+ for (let x = left; x < right; x += step) {
307
+ const offset = offsetAt(x, y);
308
+ if (background.data[offset + 3] < 250 || deltaAt(offset) < 2) {
309
+ continue;
310
+ }
311
+ consider(strongestForeground, [
312
+ background.data[offset],
313
+ background.data[offset + 1],
314
+ background.data[offset + 2]
315
+ ]);
316
+ }
317
+ }
318
+ } else if (opaqueBackground) {
319
+ consider(opaqueBackground, opaqueBackground);
320
+ }
321
+ if (!bestForeground || !bestBackground || !Number.isFinite(bestRatio)) {
322
+ return {
323
+ ratio: null,
324
+ required,
325
+ reason: "could not isolate opaque rendered text pixels"
326
+ };
327
+ }
328
+ return {
329
+ ratio: Math.round(bestRatio * 100) / 100,
330
+ required,
331
+ foreground: hex(bestForeground),
332
+ background: hex(bestBackground)
333
+ };
334
+ }
239
335
  function layoutGetNativeEval(opts = {}) {
240
336
  const includeStyle = opts.styling === true;
241
337
  const filter = opts.filter?.trim().toLowerCase() ?? "";
@@ -245,6 +341,7 @@ function layoutGetNativeEval(opts = {}) {
245
341
  const list = await t.listInspectable({})
246
342
  if (!Array.isArray(list)) return []
247
343
  const includeStyle = ${JSON.stringify(includeStyle)}
344
+ const scoreContrast = ${scoreLayoutTextContrast.toString()}
248
345
  // narrows by ELEMENT, not by style field: fewer rows, full detail on each.
249
346
  const filter = ${JSON.stringify(filter)}
250
347
  const matchesFilter = (n, text) => {
@@ -289,7 +386,7 @@ function layoutGetNativeEval(opts = {}) {
289
386
  }
290
387
  const weightOf = (style) => {
291
388
  const w = style && style.fontWeight
292
- const n = typeof w === 'number' ? w : (typeof w === 'string' ? parseInt(w, 10) : NaN)
389
+ const n = w === 'bold' ? 700 : (typeof w === 'number' ? w : (typeof w === 'string' ? parseInt(w, 10) : NaN))
293
390
  return Number.isFinite(n) && n >= 600 ? n : undefined
294
391
  }
295
392
  const decoOf = (style) => {
@@ -332,7 +429,7 @@ function layoutGetNativeEval(opts = {}) {
332
429
  return abs.x + layout.width > 0 && abs.y + layout.height > 0 && abs.x < screenW && abs.y < screenH
333
430
  }
334
431
 
335
- return list.filter(isVisible).filter((n) => {
432
+ const elements = list.filter(isVisible).filter((n) => {
336
433
  const t = typeof n.text === 'string' && n.text.trim() ? n.text.trim() : undefined
337
434
  return matchesFilter(n, t)
338
435
  }).map((n) => {
@@ -367,7 +464,7 @@ function layoutGetNativeEval(opts = {}) {
367
464
  ...base,
368
465
  borderRadius: radiusOf(style),
369
466
  padding: { t: round(pad.top), r: round(pad.right), b: round(pad.bottom), l: round(pad.left) },
370
- fontSize: fontSizeOf(style),
467
+ fontSize: text ? (fontSizeOf(style) || 14) : 0,
371
468
  color: text ? colorStr(style.color) : undefined,
372
469
  bg: colorStr(style.backgroundColor),
373
470
  opacity: opacityOf(style),
@@ -378,6 +475,50 @@ function layoutGetNativeEval(opts = {}) {
378
475
  borderColor: borderWidth ? borderColorOf(style) : undefined,
379
476
  }
380
477
  })
478
+ const textElements = elements.filter((element) => element.text && element.fontSize > 0)
479
+ if (!includeStyle || textElements.length === 0) return elements
480
+
481
+ const screenshot = window.SootSim && window.SootSim.bridges && window.SootSim.bridges.screenshot
482
+ if (typeof screenshot !== 'function') {
483
+ throw new Error('styled native layout requires the SootSim capture bridge')
484
+ }
485
+ const device = list.find((node) => node && node.device)?.device || {}
486
+ const width = Math.round(Number(device.width) || window.innerWidth || 0)
487
+ const height = Math.round(Number(device.height) || window.innerHeight || 0)
488
+ if (!width || !height) throw new Error('native layout has no capture dimensions')
489
+ const capture = async (suppressText) => {
490
+ const dataUrl = await screenshot({
491
+ format: 'png',
492
+ outputWidth: width,
493
+ outputHeight: height,
494
+ ...(suppressText ? { suppressText: true } : {}),
495
+ })
496
+ const image = await new Promise((resolve, reject) => {
497
+ const next = new Image()
498
+ next.onload = () => resolve(next)
499
+ next.onerror = () => reject(new Error('could not decode native layout pixels'))
500
+ next.src = dataUrl
501
+ })
502
+ const canvas = document.createElement('canvas')
503
+ canvas.width = image.naturalWidth
504
+ canvas.height = image.naturalHeight
505
+ const context = canvas.getContext('2d', { willReadFrequently: true })
506
+ if (!context) throw new Error('could not read native layout pixels')
507
+ context.drawImage(image, 0, 0)
508
+ return context.getImageData(0, 0, canvas.width, canvas.height)
509
+ }
510
+ const normal = await capture(false)
511
+ const background = await capture(true)
512
+ for (const element of textElements) {
513
+ element.contrast = scoreContrast({
514
+ normal,
515
+ background,
516
+ box: element.box,
517
+ fontSize: element.fontSize,
518
+ fontWeight: element.fontWeight,
519
+ })
520
+ }
521
+ return elements
381
522
  })()`;
382
523
  }
383
524
  var LAYOUT_GET_NATIVE_EVAL = layoutGetNativeEval();
@@ -404,6 +545,11 @@ function formatLayoutElements(elements, opts) {
404
545
  if (el.fontWeight) parts.push(`weight:${el.fontWeight}`);
405
546
  if (el.color) parts.push(`color:${el.color}`);
406
547
  if (el.bg) parts.push(`bg:${el.bg}`);
548
+ if (el.contrast) {
549
+ const score = el.contrast.ratio == null ? `?/${el.contrast.required}` : `${el.contrast.ratio}/${el.contrast.required}${el.contrast.ratio < el.contrast.required ? " FAIL" : ""}`;
550
+ parts.push(`contrast:${score}`);
551
+ if (el.contrast.background) parts.push(`on:${el.contrast.background}`);
552
+ }
407
553
  if (el.opacity != null) parts.push(`opacity:${el.opacity}`);
408
554
  if (el.textDecoration) parts.push(`deco:${el.textDecoration}`);
409
555
  if (el.overflow) parts.push(`overflow:${el.overflow}`);
@@ -1204,6 +1350,10 @@ async function inspectScreens(bridge) {
1204
1350
  test && typeof test.getNavigationSnapshot === 'function'
1205
1351
  ? await test.getNavigationSnapshot()
1206
1352
  : null
1353
+ const route =
1354
+ test && typeof test.getRouteInfo === 'function'
1355
+ ? await test.getRouteInfo()
1356
+ : null
1207
1357
  const keyboard =
1208
1358
  kb && typeof kb.getLayout === 'function'
1209
1359
  ? (() => {
@@ -1220,13 +1370,14 @@ async function inspectScreens(bridge) {
1220
1370
  } : null
1221
1371
  })()
1222
1372
  : null
1223
- return { nav: navSnap, keyboard }
1373
+ return { nav: navSnap, route, keyboard }
1224
1374
  })()`
1225
1375
  });
1226
1376
  const shell = await getShellState(bridge, 500).catch(() => null);
1227
1377
  return {
1228
1378
  shell,
1229
1379
  nav: payload?.nav ?? null,
1380
+ route: payload?.route ?? null,
1230
1381
  keyboard: payload?.keyboard ?? null
1231
1382
  };
1232
1383
  }
@@ -2084,6 +2235,7 @@ async function tapBest(bridge, query, opts = {}) {
2084
2235
  resolveFindMode,
2085
2236
  resolveMaxMsFlag,
2086
2237
  scoreInteractive,
2238
+ scoreLayoutTextContrast,
2087
2239
  setDebugChannels,
2088
2240
  shouldSkipAutoSettleForInspectPick,
2089
2241
  tapBest,