sootsim 0.1.144 → 0.1.146

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 (155) hide show
  1. package/dist-cli/bin.js +3 -3
  2. package/dist-cli/chunks/{agent-2OYPRNUE.js → agent-PNNXV6F3.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-LPKFMZBN.js → agent-wrapper-JTYAONCG.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-3F2X43ER.js → app-fonts-YGTRUUJT.js} +2 -2
  5. package/dist-cli/chunks/{assert-MUUX2DJC.js → assert-HDFDQLHK.js} +2 -2
  6. package/dist-cli/chunks/auto-bootstrap-S7SSJMD3.js +2 -0
  7. package/dist-cli/chunks/beta-E3MSUPWU.js +2 -0
  8. package/dist-cli/chunks/{camera-TBW2MKRE.js → camera-4B7OAHRD.js} +2 -2
  9. package/dist-cli/chunks/{chunk-IAWQFSZ2.js → chunk-2FYSNCRJ.js} +2 -2
  10. package/dist-cli/chunks/{chunk-AKHWKREF.js → chunk-2PYDOYIS.js} +1 -1
  11. package/dist-cli/chunks/{chunk-KF7TXHAG.js → chunk-35QJJ4MM.js} +3 -3
  12. package/dist-cli/chunks/chunk-3RPHEE3K.js +2 -0
  13. package/dist-cli/chunks/{chunk-73DPWPZU.js → chunk-4KNMAGC4.js} +1 -1
  14. package/dist-cli/chunks/{chunk-A3E5QVUN.js → chunk-A7JX3OQC.js} +1 -1
  15. package/dist-cli/chunks/chunk-AOPFT3S4.js +119 -0
  16. package/dist-cli/chunks/{chunk-UZO6PMW3.js → chunk-ATJRNMNA.js} +2 -2
  17. package/dist-cli/chunks/{chunk-2OWIXUFA.js → chunk-BBIN2U26.js} +2 -2
  18. package/dist-cli/chunks/{chunk-ZRVCZZCT.js → chunk-BE2ZDRIJ.js} +2 -2
  19. package/dist-cli/chunks/{chunk-S6OUYII6.js → chunk-C44OZFHJ.js} +2 -2
  20. package/dist-cli/chunks/{chunk-QHCI5TZ6.js → chunk-DP5FSZHW.js} +2 -2
  21. package/dist-cli/chunks/chunk-DRCRPS2N.js +1 -0
  22. package/dist-cli/chunks/{chunk-KABTL7PQ.js → chunk-ERAE4LJT.js} +36 -56
  23. package/dist-cli/chunks/{chunk-LEWUJGFD.js → chunk-FK2YXBKR.js} +1 -1
  24. package/dist-cli/chunks/{chunk-TJXJCYCS.js → chunk-G7JMTSF6.js} +1 -1
  25. package/dist-cli/chunks/{chunk-BBPSMK2D.js → chunk-GD473DHN.js} +2 -2
  26. package/dist-cli/chunks/{chunk-T5SF5UGY.js → chunk-H2EIYIRP.js} +1 -1
  27. package/dist-cli/chunks/{chunk-VFXS73Q6.js → chunk-H6LFGGJW.js} +2 -2
  28. package/dist-cli/chunks/{chunk-FQBF5HG6.js → chunk-HWB7DPXH.js} +1 -1
  29. package/dist-cli/chunks/{chunk-W4KCLE5O.js → chunk-HZHZY7N5.js} +2 -2
  30. package/dist-cli/chunks/{chunk-MX66P64S.js → chunk-IADMCPLZ.js} +1 -1
  31. package/dist-cli/chunks/{chunk-FZXVYC4D.js → chunk-IAO27BWC.js} +2 -2
  32. package/dist-cli/chunks/{chunk-YV6RWCPO.js → chunk-JFQXWAWN.js} +2 -2
  33. package/dist-cli/chunks/{chunk-AV2DSEYZ.js → chunk-JZW2R5D7.js} +2 -2
  34. package/dist-cli/chunks/{chunk-7R3BK6IY.js → chunk-K6X7LUFG.js} +1 -1
  35. package/dist-cli/chunks/{chunk-TONLJPNX.js → chunk-MIIAYBFL.js} +1 -1
  36. package/dist-cli/chunks/{chunk-TKMTONCA.js → chunk-MSQUL5BU.js} +3 -3
  37. package/dist-cli/chunks/{chunk-QMTPTQHG.js → chunk-MVLNHZMU.js} +2 -2
  38. package/dist-cli/chunks/chunk-OU42HTKN.js +1 -0
  39. package/dist-cli/chunks/{chunk-PN4QXNKU.js → chunk-PCW4TKI2.js} +2 -2
  40. package/dist-cli/chunks/{chunk-ZODKBHVK.js → chunk-Q6BHESL2.js} +2 -2
  41. package/dist-cli/chunks/{chunk-6KI36NXX.js → chunk-R7CMXY5T.js} +2 -2
  42. package/dist-cli/chunks/{chunk-A72YS45Y.js → chunk-RTD4RNZV.js} +2 -2
  43. package/dist-cli/chunks/{chunk-HVB4FNBH.js → chunk-SZNVNYEP.js} +2 -2
  44. package/dist-cli/chunks/{chunk-TE2SHQPT.js → chunk-TLFNO2L4.js} +1 -1
  45. package/dist-cli/chunks/{chunk-UGRHYJUA.js → chunk-TZXKFPBJ.js} +2 -2
  46. package/dist-cli/chunks/{chunk-HC43FXK7.js → chunk-UD4SYXDQ.js} +2 -2
  47. package/dist-cli/chunks/chunk-VKKWYLIZ.js +2 -0
  48. package/dist-cli/chunks/{chunk-BCIZZLCX.js → chunk-VZSXOG4N.js} +1 -1
  49. package/dist-cli/chunks/{chunk-XJVBNNIB.js → chunk-WFXLVOUA.js} +2 -2
  50. package/dist-cli/chunks/chunk-XO4VQYFP.js +2 -0
  51. package/dist-cli/chunks/{chunk-AJKVXCHV.js → chunk-XRQDMB2J.js} +2 -2
  52. package/dist-cli/chunks/chunk-Y76W7GZV.js +1 -0
  53. package/dist-cli/chunks/{chunk-4CPUNUJC.js → chunk-YBSNSFBX.js} +1 -1
  54. package/dist-cli/chunks/cli-version-AJWPSNS4.js +2 -0
  55. package/dist-cli/chunks/{compat-P64DATYR.js → compat-F4WAO62Y.js} +3 -3
  56. package/dist-cli/chunks/{config-TDDQXUS5.js → config-WAIORJNJ.js} +2 -2
  57. package/dist-cli/chunks/{control-SNZMPDL7.js → control-M54456XG.js} +2 -2
  58. package/dist-cli/chunks/{cpu-profile-FR47V42J.js → cpu-profile-NNMDXCWI.js} +2 -2
  59. package/dist-cli/chunks/{daemon-LHJUCC7B.js → daemon-UXSN6QDY.js} +2 -2
  60. package/dist-cli/chunks/{debug-26NR6JCY.js → debug-JAQVYKQG.js} +3 -3
  61. package/dist-cli/chunks/{detox-F2KTINZX.js → detox-QOL7PD62.js} +2 -2
  62. package/dist-cli/chunks/{device-O5COOPDN.js → device-WPAQY2ZH.js} +2 -2
  63. package/dist-cli/chunks/{diagnose-PQMLUCBO.js → diagnose-FKN4ALSH.js} +2 -2
  64. package/dist-cli/chunks/drivers-FTOUKVJ5.js +2 -0
  65. package/dist-cli/chunks/{electron-ZBL3TH2F.js → electron-YQKH55P6.js} +3 -3
  66. package/dist-cli/chunks/flow-EJXOH72E.js +2 -0
  67. package/dist-cli/chunks/help-ID6MSA6T.js +2 -0
  68. package/dist-cli/chunks/{hints-DWE4FKYR.js → hints-GIJN25JB.js} +2 -2
  69. package/dist-cli/chunks/{home-paths-N2S32DRH.js → home-paths-KIR4SAL4.js} +2 -2
  70. package/dist-cli/chunks/{inspect-J3BLUHGJ.js → inspect-YRP3UFG4.js} +3 -3
  71. package/dist-cli/chunks/install-S4YF4O3O.js +2 -0
  72. package/dist-cli/chunks/{install-desktop-73H4DAAH.js → install-desktop-INHP4VUQ.js} +3 -3
  73. package/dist-cli/chunks/{keys-R42T6X3W.js → keys-CBKA6IB7.js} +2 -2
  74. package/dist-cli/chunks/{launch-QGDSUNDW.js → launch-JZ463USO.js} +3 -3
  75. package/dist-cli/chunks/{login-BYCX25K6.js → login-VHP4DNC2.js} +4 -4
  76. package/dist-cli/chunks/{logout-TZJXACIH.js → logout-NRG4U6Z7.js} +2 -2
  77. package/dist-cli/chunks/{maestro-VPK6R5NN.js → maestro-KPNXHCFR.js} +2 -2
  78. package/dist-cli/chunks/optional-demo-registry-VXBG2NEH.js +2 -0
  79. package/dist-cli/chunks/{preview-GJ7MVSHM.js → preview-O44G7W2U.js} +2 -2
  80. package/dist-cli/chunks/{profile-2RAV3UZS.js → profile-RMYP6I2J.js} +2 -2
  81. package/dist-cli/chunks/{react-QE7UHEFS.js → react-CFUB2U76.js} +2 -2
  82. package/dist-cli/chunks/{record-YYL4A7DO.js → record-YSLIYV2X.js} +2 -2
  83. package/dist-cli/chunks/runtime-YVV2FMMD.js +2 -0
  84. package/dist-cli/chunks/{runtime-delivery-2G4PGXGK.js → runtime-delivery-DDUSKKTU.js} +2 -2
  85. package/dist-cli/chunks/{screenshot-BIVF76SC.js → screenshot-MH7JQVO7.js} +2 -2
  86. package/dist-cli/chunks/{screenshot-mode-OKAH3ZLK.js → screenshot-mode-JRRQPP37.js} +2 -2
  87. package/dist-cli/chunks/screenshots-32GEAUAF.js +74 -0
  88. package/dist-cli/chunks/{server-6SFAUUGK.js → server-ROXPXSIK.js} +3 -3
  89. package/dist-cli/chunks/setup-repo-E2IJJBCE.js +2 -0
  90. package/dist-cli/chunks/{skills-7APKWTBO.js → skills-T74U4JC7.js} +2 -2
  91. package/dist-cli/chunks/slides-OM25OBW3.js +46 -0
  92. package/dist-cli/chunks/{start-2GETTWND.js → start-NLHWSRC7.js} +4 -4
  93. package/dist-cli/chunks/store-EISWHA6H.js +2 -0
  94. package/dist-cli/chunks/telemetry-7AXVZMQT.js +2 -0
  95. package/dist-cli/chunks/{test-V5HHXSKL.js → test-RYMENNXC.js} +3 -3
  96. package/dist-cli/chunks/{three-mode-UVIEP3CE.js → three-mode-MK242N4J.js} +2 -2
  97. package/dist-cli/chunks/{timeline-HVEKSWHF.js → timeline-ANKR37NA.js} +2 -2
  98. package/dist-cli/chunks/{upgrade-FRHXNAYO.js → upgrade-ZANSK5HX.js} +2 -2
  99. package/dist-cli/chunks/upload-DWWZQMVH.js +2 -0
  100. package/dist-cli/chunks/{version-CBDBUHCC.js → version-DYXEOGY7.js} +2 -2
  101. package/dist-cli/chunks/{web-DMUBG5QR.js → web-LUMZCTLY.js} +2 -2
  102. package/dist-cli/chunks/{what-happened-3J4DEIRJ.js → what-happened-SIQGZLHO.js} +2 -2
  103. package/dist-cli/chunks/{whoami-BSPU6JP4.js → whoami-YI5RAQBT.js} +2 -2
  104. package/dist-lib/agent-daemon-client.cjs +1 -1
  105. package/dist-lib/agent-events.cjs +1 -1
  106. package/dist-lib/agent-sessions.cjs +1 -1
  107. package/dist-lib/attached-projects.cjs +1 -1
  108. package/dist-lib/auth/shared-session.cjs +1 -1
  109. package/dist-lib/backend-origin.cjs +1 -1
  110. package/dist-lib/beta.cjs +1 -1
  111. package/dist-lib/beta.mjs +1 -1
  112. package/dist-lib/bridge-constants.cjs +1 -1
  113. package/dist-lib/cli-constants.cjs +1 -1
  114. package/dist-lib/config.cjs +1 -1
  115. package/dist-lib/detox/index.cjs +1 -1
  116. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  117. package/dist-lib/home-paths.cjs +1 -1
  118. package/dist-lib/host/bridge-host.cjs +1 -1
  119. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  120. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  121. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  122. package/dist-lib/host/websocket-proxy.cjs +1 -1
  123. package/dist-lib/index.cjs +1 -1
  124. package/dist-lib/metro.cjs +1 -1
  125. package/dist-lib/profiles.cjs +1 -1
  126. package/dist-lib/render-mode.cjs +1 -1
  127. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  128. package/dist-lib/sdk.cjs +1 -1
  129. package/dist-lib/sdk.mjs +1 -1
  130. package/dist-lib/skills.cjs +244 -26
  131. package/dist-lib/vite.cjs +1 -1
  132. package/package.json +1 -1
  133. package/src/screenshots/orchestrate.ts +7 -0
  134. package/src/screenshots/org-deck.ts +91 -0
  135. package/dist-cli/chunks/auto-bootstrap-EYENX7BT.js +0 -2
  136. package/dist-cli/chunks/beta-2JIATCYM.js +0 -2
  137. package/dist-cli/chunks/chunk-2WPNYDSO.js +0 -2
  138. package/dist-cli/chunks/chunk-3FFDAVGT.js +0 -119
  139. package/dist-cli/chunks/chunk-3LW4V4ZM.js +0 -2
  140. package/dist-cli/chunks/chunk-3ZNPJADG.js +0 -1
  141. package/dist-cli/chunks/chunk-GJR32NCU.js +0 -1
  142. package/dist-cli/chunks/chunk-TVLQMXWV.js +0 -1
  143. package/dist-cli/chunks/chunk-Z52XC4UA.js +0 -2
  144. package/dist-cli/chunks/cli-version-YEX2XZ7G.js +0 -2
  145. package/dist-cli/chunks/drivers-W4SBNM4V.js +0 -2
  146. package/dist-cli/chunks/flow-QREXGRFN.js +0 -2
  147. package/dist-cli/chunks/help-RE6HG3KD.js +0 -2
  148. package/dist-cli/chunks/install-NLKZNPCO.js +0 -2
  149. package/dist-cli/chunks/optional-demo-registry-UH3YM447.js +0 -2
  150. package/dist-cli/chunks/runtime-C4CLOL7U.js +0 -2
  151. package/dist-cli/chunks/screenshots-AVJANXAQ.js +0 -70
  152. package/dist-cli/chunks/setup-repo-CRCQPW3Y.js +0 -2
  153. package/dist-cli/chunks/store-YFAIUHAS.js +0 -2
  154. package/dist-cli/chunks/telemetry-LUP4L5RW.js +0 -2
  155. package/dist-cli/chunks/upload-NWHZULFU.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{B as T,C as A,D as y,O as _,P as b,Q as S}from"./chunk-QHCI5TZ6.js";import{c as N,e as F}from"./chunk-2OWIXUFA.js";import{b as k}from"./chunk-4CPUNUJC.js";import"./chunk-LEWUJGFD.js";import"./chunk-MX66P64S.js";import"./chunk-TE2SHQPT.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.146 | (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-DP5FSZHW.js";import{c as N,e as F}from"./chunk-BBIN2U26.js";import{b as k}from"./chunk-YBSNSFBX.js";import"./chunk-FK2YXBKR.js";import"./chunk-IADMCPLZ.js";import"./chunk-TLFNO2L4.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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{d as i}from"./chunk-W4KCLE5O.js";import{d as n}from"./chunk-6KI36NXX.js";import"./chunk-MX66P64S.js";import"./chunk-TE2SHQPT.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.146 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{d as i}from"./chunk-HZHZY7N5.js";import{d as n}from"./chunk-R7CMXY5T.js";import"./chunk-IADMCPLZ.js";import"./chunk-TLFNO2L4.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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // cli/commands/inspect/core.ts
4
4
  function resolveMaxMsFlag(args, fallbackMs) {
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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;
@@ -15342,6 +15342,231 @@ var init_app_state_reset = __esm({
15342
15342
  }
15343
15343
  });
15344
15344
 
15345
+ // cli/commands/inspect/core.ts
15346
+ function layoutGetNativeEval(opts = {}) {
15347
+ const includeStyle = opts.styling === true;
15348
+ return `(async () => {
15349
+ const t = window.__sootsimTest
15350
+ if (!t || typeof t.listInspectable !== 'function') return []
15351
+ const list = await t.listInspectable({})
15352
+ if (!Array.isArray(list)) return []
15353
+ const includeStyle = ${JSON.stringify(includeStyle)}
15354
+
15355
+ const num = (v) => (typeof v === 'number' && Number.isFinite(v) ? v : 0)
15356
+ const round = (v) => Math.round(num(v))
15357
+
15358
+ // borderRadius can be authored as a string ("12px") or split per-corner;
15359
+ // prefer the uniform borderRadius, else the largest corner radius present.
15360
+ const radiusOf = (style) => {
15361
+ if (!style) return 0
15362
+ const keys = ['borderRadius','borderTopLeftRadius','borderTopRightRadius','borderBottomLeftRadius','borderBottomRightRadius']
15363
+ let max = 0
15364
+ for (const k of keys) {
15365
+ const raw = style[k]
15366
+ const n = typeof raw === 'number' ? raw : (typeof raw === 'string' ? parseFloat(raw) : NaN)
15367
+ if (Number.isFinite(n)) max = Math.max(max, n)
15368
+ }
15369
+ return Math.round(max)
15370
+ }
15371
+ const fontSizeOf = (style) => {
15372
+ if (!style) return 0
15373
+ const raw = style.fontSize
15374
+ const n = typeof raw === 'number' ? raw : (typeof raw === 'string' ? parseFloat(raw) : NaN)
15375
+ return Number.isFinite(n) ? Math.round(n) : 0
15376
+ }
15377
+ // styling extractors \u2014 omit boring defaults so the agent only sees notable
15378
+ // styling (low opacity, struck text, clipping, a real border/color).
15379
+ const colorStr = (v) => {
15380
+ if (v == null) return undefined
15381
+ const s = String(v).split(' ').join('')
15382
+ return s && s !== 'transparent' && s !== 'rgba(0,0,0,0)' ? s : undefined
15383
+ }
15384
+ const opacityOf = (style) => {
15385
+ const o = style && style.opacity
15386
+ const n = typeof o === 'number' ? o : (typeof o === 'string' ? parseFloat(o) : NaN)
15387
+ return Number.isFinite(n) && n < 1 ? Math.round(n * 100) / 100 : undefined
15388
+ }
15389
+ const weightOf = (style) => {
15390
+ const w = style && style.fontWeight
15391
+ const n = typeof w === 'number' ? w : (typeof w === 'string' ? parseInt(w, 10) : NaN)
15392
+ return Number.isFinite(n) && n >= 600 ? n : undefined
15393
+ }
15394
+ const decoOf = (style) => {
15395
+ const d = style && (style.textDecorationLine || style.textDecoration)
15396
+ return d && d !== 'none' && d !== 'normal' ? String(d).split(' ')[0] : undefined
15397
+ }
15398
+ const overflowOf = (style) => (style && style.overflow === 'hidden' ? 'hidden' : undefined)
15399
+ const borderWOf = (style) => {
15400
+ if (!style) return undefined
15401
+ const keys = ['borderWidth','borderTopWidth','borderBottomWidth','borderLeftWidth','borderRightWidth']
15402
+ let max = 0
15403
+ for (const k of keys) {
15404
+ const r = style[k]
15405
+ const n = typeof r === 'number' ? r : (typeof r === 'string' ? parseFloat(r) : NaN)
15406
+ if (Number.isFinite(n)) max = Math.max(max, n)
15407
+ }
15408
+ return max > 0 ? Math.round(max) : undefined
15409
+ }
15410
+
15411
+ const isVisible = (n) => {
15412
+ const layout = n && n.layout
15413
+ if (!layout || layout.width <= 0 || layout.height <= 0) return false
15414
+ const abs = (n && (n.absolute || n.absolutePosition)) || null
15415
+ if (!abs) return true
15416
+ const device = (n && n.device) || {}
15417
+ const screenW = Number(device.width) || window.innerWidth || 0
15418
+ const screenH = Number(device.height) || window.innerHeight || 0
15419
+ if (!screenW || !screenH) return true
15420
+ return abs.x + layout.width > 0 && abs.y + layout.height > 0 && abs.x < screenW && abs.y < screenH
15421
+ }
15422
+
15423
+ return list.filter(isVisible).map((n) => {
15424
+ const layout = n.layout || { x: 0, y: 0, width: 0, height: 0 }
15425
+ const abs = n.absolute || n.absolutePosition || { x: layout.x, y: layout.y }
15426
+ const text = typeof n.text === 'string' && n.text.trim() ? n.text.trim() : undefined
15427
+ const base = {
15428
+ testID: n.testID || n.testId || undefined,
15429
+ role: n.accessibilityRole || n.role || undefined,
15430
+ type: typeof n.type === 'string' ? n.type : 'node',
15431
+ text,
15432
+ box: { x: round(abs.x), y: round(abs.y), w: round(layout.width), h: round(layout.height) },
15433
+ borderRadius: 0,
15434
+ padding: { t: 0, r: 0, b: 0, l: 0 },
15435
+ fontSize: 0,
15436
+ }
15437
+ if (!includeStyle) return base
15438
+ // computedStyle has the resolved values; style is the curated subset \u2014
15439
+ // fall back across both so radius/fontSize survive either shape.
15440
+ const style = Object.assign({}, n.style || {}, n.computedStyle || {})
15441
+ const pad = (n.boxModel && n.boxModel.padding) || {}
15442
+ return {
15443
+ ...base,
15444
+ borderRadius: radiusOf(style),
15445
+ padding: { t: round(pad.top), r: round(pad.right), b: round(pad.bottom), l: round(pad.left) },
15446
+ fontSize: fontSizeOf(style),
15447
+ color: text ? colorStr(style.color) : undefined,
15448
+ bg: colorStr(style.backgroundColor),
15449
+ opacity: opacityOf(style),
15450
+ fontWeight: weightOf(style),
15451
+ textDecoration: decoOf(style),
15452
+ overflow: overflowOf(style),
15453
+ borderWidth: borderWOf(style),
15454
+ }
15455
+ })
15456
+ })()`;
15457
+ }
15458
+ function readyProbeHasContent(probe) {
15459
+ return probe.targets > 0 || probe.nodes >= READY_CONTENT_NODE_FLOOR;
15460
+ }
15461
+ function readyProbeHasTargetContent(probe) {
15462
+ return probe.targets > 0;
15463
+ }
15464
+ var LAYOUT_GET_NATIVE_EVAL, WAIT_READY_PROBE, READY_CONTENT_NODE_FLOOR, READY_NODE_STABLE_MS;
15465
+ var init_core = __esm({
15466
+ "cli/commands/inspect/core.ts"() {
15467
+ "use strict";
15468
+ LAYOUT_GET_NATIVE_EVAL = layoutGetNativeEval();
15469
+ WAIT_READY_PROBE = `(async () => {
15470
+ const t = window.__sootsimTest
15471
+ let nodes = 0
15472
+ try { nodes = (await t?.getNodeCount?.()) || 0 } catch {}
15473
+ let targets = 0
15474
+ let loadingText = ''
15475
+ try {
15476
+ if (typeof t?.listInspectable === 'function') {
15477
+ const list = await t.listInspectable({})
15478
+ if (Array.isArray(list)) {
15479
+ const screenW = window.innerWidth || 0
15480
+ const screenH = window.innerHeight || 0
15481
+ const isVisible = (n) => {
15482
+ const layout = n?.layout
15483
+ if (!layout || layout.width <= 0 || layout.height <= 0) return false
15484
+ const abs = n?.absolutePosition || n?.absolute
15485
+ if (!abs) return true
15486
+ const device = n?.device || {}
15487
+ const w = Number(device.width) || screenW
15488
+ const h = Number(device.height) || screenH
15489
+ return (
15490
+ abs.x + layout.width > 0 &&
15491
+ abs.y + layout.height > 0 &&
15492
+ abs.x < w &&
15493
+ abs.y < h
15494
+ )
15495
+ }
15496
+ const hasContentSignal = (n) => {
15497
+ const role = n?.accessibilityRole || n?.role
15498
+ const label = n?.accessibilityLabel || n?.label
15499
+ const handlers = Array.isArray(n?.handlers) ? n.handlers : []
15500
+ const text = typeof n?.text === 'string' ? n.text.trim() : ''
15501
+ const testID = typeof (n?.testID || n?.testId) === 'string' ? (n.testID || n.testId) : ''
15502
+ if (!loadingText && /^(opening app|loading|capturing|connecting)$/i.test(text)) {
15503
+ loadingText = text
15504
+ }
15505
+ if (handlers.length > 0) return true
15506
+ if (role) return true
15507
+ if (n?.isTextInput) return true
15508
+ if (text) return true
15509
+ if (label) return true
15510
+ if (testID && !/^splash|loading/i.test(testID)) return true
15511
+ return false
15512
+ }
15513
+ targets = list.filter(n => isVisible(n) && hasContentSignal(n)).length
15514
+ }
15515
+ }
15516
+ } catch {}
15517
+ let externalReady = null
15518
+ let externalStatus = ''
15519
+ let externalError = ''
15520
+ try {
15521
+ const getExternalAppState = t?.getExternalAppState
15522
+ const external = typeof getExternalAppState === 'function'
15523
+ ? await Promise.race([
15524
+ getExternalAppState(),
15525
+ new Promise((resolve) => setTimeout(
15526
+ () => resolve({
15527
+ state: {
15528
+ ready: false,
15529
+ loading: true,
15530
+ status: 'waiting for tenant worker...',
15531
+ },
15532
+ }),
15533
+ 1000,
15534
+ )),
15535
+ ])
15536
+ : null
15537
+ const state = external?.state
15538
+ if (state && typeof state === 'object') {
15539
+ externalReady = state.ready === true
15540
+ if (typeof state.status === 'string') externalStatus = state.status
15541
+ if (typeof state.error === 'string') externalError = state.error
15542
+ }
15543
+ if (!externalError && Array.isArray(external?.entryErrors)) {
15544
+ const entry = external.entryErrors.find((item) => {
15545
+ return item && typeof item.message === 'string' && item.message.trim()
15546
+ })
15547
+ if (entry) externalError = entry.message
15548
+ }
15549
+ if (externalReady === false && externalStatus) loadingText = externalStatus
15550
+ } catch {}
15551
+ let errors = 0
15552
+ try { errors = window.__sootsimConsole?.count?.()?.errors ?? 0 } catch {}
15553
+ return {
15554
+ flag: (window).__sootsimExternalAppReady,
15555
+ at: (window).__sootsimExternalAppReadyAt || 0,
15556
+ nodes,
15557
+ targets,
15558
+ errors,
15559
+ loadingText,
15560
+ externalReady,
15561
+ externalStatus,
15562
+ externalError,
15563
+ }
15564
+ })()`;
15565
+ READY_CONTENT_NODE_FLOOR = 100;
15566
+ READY_NODE_STABLE_MS = 750;
15567
+ }
15568
+ });
15569
+
15345
15570
  // cli/commands/inspect/settling.ts
15346
15571
  async function waitForSootsimIdle({
15347
15572
  bridge,
@@ -16108,6 +16333,7 @@ var init_bridge_flow_runner = __esm({
16108
16333
  import_yaml = __toESM(require("yaml"), 1);
16109
16334
  init_frame_compose();
16110
16335
  init_app_state_reset();
16336
+ init_core();
16111
16337
  init_settling();
16112
16338
  init_maestro_js();
16113
16339
  init_recording_access();
@@ -16210,40 +16436,32 @@ var init_bridge_flow_runner = __esm({
16210
16436
  let lastError = null;
16211
16437
  let consecutiveBridgeFailures = 0;
16212
16438
  let lastProgressAt = 0;
16439
+ let lastNodes = -1;
16440
+ let nodeStableSince = startedAt;
16213
16441
  while (Date.now() < deadline) {
16214
16442
  try {
16215
- const state = await this.evaluate(
16216
- `(async () => {
16217
- const test = window.__sootsimTest
16218
- if (!test) return { count: 0, loading: true }
16219
- const count = (await test.getNodeCount?.()) || 0
16220
- const external = globalThis.__sootsimExternalAppState
16221
- if (external?.error) {
16222
- return { count, loading: false, error: String(external.error) }
16223
- }
16224
- if (external) {
16225
- return {
16226
- count,
16227
- loading: !external.ready,
16228
- error: null,
16229
- }
16230
- }
16231
- const loadingNode = await test.findByText?.('loading')
16232
- const capturingNode = await test.findByText?.('capturing')
16233
- const openingAppNode = await test.findByText?.('opening app')
16234
- const isLoading = !!loadingNode || !!capturingNode || !!openingAppNode || count < 5
16235
- return { count, loading: isLoading, error: null }
16236
- })()`,
16443
+ const probe = await this.evaluate(
16444
+ WAIT_READY_PROBE,
16237
16445
  // the readiness probe is cheap — cap it well under the bridge-wide
16238
16446
  // command timeout so a non-responsive sim is detected in seconds,
16239
16447
  // not after a full 15s-per-poll stall.
16240
16448
  8e3
16241
16449
  );
16242
16450
  consecutiveBridgeFailures = 0;
16243
- if (state?.error) {
16244
- throw new Error(`app failed to load: ${state.error}`);
16451
+ if (probe?.externalError) {
16452
+ throw new Error(`app failed to load: ${probe.externalError}`);
16453
+ }
16454
+ if (probe) {
16455
+ const now = Date.now();
16456
+ if (probe.nodes !== lastNodes) {
16457
+ lastNodes = probe.nodes;
16458
+ nodeStableSince = now;
16459
+ }
16460
+ const hasReadySignal = probe.flag === true && readyProbeHasContent(probe);
16461
+ const hasRenderedContentWithoutReadySignal = probe.flag !== true && readyProbeHasTargetContent(probe);
16462
+ const ready = (hasReadySignal || hasRenderedContentWithoutReadySignal) && probe.externalReady !== false && !probe.externalError && !probe.loadingText && now - nodeStableSince >= READY_NODE_STABLE_MS;
16463
+ if (ready) return;
16245
16464
  }
16246
- if (state && state.count > 10 && !state.loading) return;
16247
16465
  } catch (err) {
16248
16466
  lastError = err instanceof Error ? err : new Error(String(err));
16249
16467
  if (lastError.message.startsWith("app failed to load:")) {
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.144 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.146 | (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.144",
3
+ "version": "0.1.146",
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",
@@ -9,6 +9,7 @@ import {
9
9
  type ComposeSlideSource,
10
10
  } from './compose'
11
11
  import { createFramedScreenshotComposer } from './frame-compose'
12
+ import { applyOrgDeckToPlan, type OrgDeckFrame } from './org-deck'
12
13
  import { loadScreenshotsPlan, type NormalizedScreenshotsPlan } from './schema'
13
14
 
14
15
  export interface RunScreenshotsOverrides {
@@ -17,6 +18,9 @@ export interface RunScreenshotsOverrides {
17
18
  simId?: string | null
18
19
  captureOnly?: boolean
19
20
  composeOnly?: boolean
21
+ // copy/colors pulled from the team's org deck to overlay onto the plan's
22
+ // compose slides (sootsim screenshots --org … --repo …).
23
+ orgDeckFrames?: OrgDeckFrame[] | null
20
24
  }
21
25
 
22
26
  export interface CaptureResult {
@@ -186,6 +190,9 @@ export async function runScreenshotsPlan(
186
190
  overrides: RunScreenshotsOverrides = {},
187
191
  ): Promise<ScreenshotsRunResult> {
188
192
  const plan = loadScreenshotsPlan(planPath)
193
+ if (overrides.orgDeckFrames && overrides.orgDeckFrames.length > 0) {
194
+ applyOrgDeckToPlan(plan, overrides.orgDeckFrames)
195
+ }
189
196
  const effectiveDeviceModel = overrides.deviceModel ?? plan.deviceModel
190
197
  if (!overrides.composeOnly) {
191
198
  await runCaptureStage(plan, overrides)