sootsim 0.1.193 → 0.1.195

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 (142) hide show
  1. package/dist-cli/bin.js +3 -3
  2. package/dist-cli/chunks/{agent-USE53A6G.js → agent-2SXLGZU5.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-NNPLVD2D.js → agent-wrapper-Z4T2JLIQ.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-K6BJQ5PV.js → app-fonts-57M3WMLT.js} +2 -2
  5. package/dist-cli/chunks/{assert-OBYCJT6E.js → assert-ZDSDYXM7.js} +2 -2
  6. package/dist-cli/chunks/{auth-QAZ3NU2P.js → auth-GCFU3FPN.js} +2 -2
  7. package/dist-cli/chunks/beta-CDNCKSIR.js +2 -0
  8. package/dist-cli/chunks/{camera-ND7VAW2Z.js → camera-2Q6EQ755.js} +2 -2
  9. package/dist-cli/chunks/{chunk-TYYWETOW.js → chunk-2JCCEHF7.js} +2 -2
  10. package/dist-cli/chunks/{chunk-ZWFFRBAR.js → chunk-3DLZ4FJI.js} +2 -2
  11. package/dist-cli/chunks/{chunk-EYUZLNLC.js → chunk-3GQAHK2F.js} +1 -1
  12. package/dist-cli/chunks/{chunk-PSP2WT3K.js → chunk-3NHEXDE7.js} +1 -1
  13. package/dist-cli/chunks/{chunk-RHKQEMHY.js → chunk-45AKDBKD.js} +2 -2
  14. package/dist-cli/chunks/{chunk-JFURKF6W.js → chunk-4BQRULZH.js} +2 -2
  15. package/dist-cli/chunks/{chunk-R62P6SPR.js → chunk-6ILXMJDK.js} +2 -2
  16. package/dist-cli/chunks/{chunk-UG44WJ5U.js → chunk-6OI4P6BP.js} +2 -2
  17. package/dist-cli/chunks/chunk-6S62XK5C.js +567 -0
  18. package/dist-cli/chunks/{chunk-3HBRJVSY.js → chunk-7C7XLYIL.js} +1 -1
  19. package/dist-cli/chunks/{chunk-3FZ2YUUP.js → chunk-7WC5DXPG.js} +2 -2
  20. package/dist-cli/chunks/{chunk-EBRAQH3D.js → chunk-ASTS6QOH.js} +3 -3
  21. package/dist-cli/chunks/{chunk-3RKAEUTW.js → chunk-BWGZZ7OI.js} +2 -2
  22. package/dist-cli/chunks/chunk-CUD7JMPE.js +1 -0
  23. package/dist-cli/chunks/{chunk-WT4SBY54.js → chunk-DOL4V4TD.js} +5 -5
  24. package/dist-cli/chunks/{chunk-ZUV7FVK5.js → chunk-FLSYVUEL.js} +2 -2
  25. package/dist-cli/chunks/{chunk-2OCQ4XLZ.js → chunk-G4HILTME.js} +2 -2
  26. package/dist-cli/chunks/{chunk-OOGJDQMT.js → chunk-GIR3RNE5.js} +1 -1
  27. package/dist-cli/chunks/{chunk-ICI5UOHJ.js → chunk-IDLAKJER.js} +1 -1
  28. package/dist-cli/chunks/{chunk-VGICXM2C.js → chunk-L5M7ZXRO.js} +2 -2
  29. package/dist-cli/chunks/{chunk-7LAHDYZ3.js → chunk-MRJ3JET4.js} +1 -1
  30. package/dist-cli/chunks/{chunk-I25N6TF4.js → chunk-NOW2AR67.js} +2 -2
  31. package/dist-cli/chunks/{chunk-QS73KI7T.js → chunk-O3V7G75W.js} +4 -4
  32. package/dist-cli/chunks/{chunk-U2QSYQUZ.js → chunk-O6X4PUVA.js} +1 -1
  33. package/dist-cli/chunks/chunk-PEGAQ2RB.js +119 -0
  34. package/dist-cli/chunks/chunk-PWAK5OIK.js +92 -0
  35. package/dist-cli/chunks/{chunk-2H5WTYZB.js → chunk-QK3UIAL2.js} +1 -1
  36. package/dist-cli/chunks/chunk-QOX33I2E.js +1 -0
  37. package/dist-cli/chunks/{chunk-6WL7GBOW.js → chunk-RZDJVRQK.js} +1 -1
  38. package/dist-cli/chunks/{chunk-HNBFCX26.js → chunk-RZNXUNAQ.js} +2 -2
  39. package/dist-cli/chunks/{chunk-2YZKJ3ZJ.js → chunk-TK26HLN4.js} +1 -1
  40. package/dist-cli/chunks/{chunk-XX5ABTZE.js → chunk-UQWWFIQV.js} +1 -1
  41. package/dist-cli/chunks/{chunk-KNPIQNLB.js → chunk-URIOQ3LY.js} +2 -2
  42. package/dist-cli/chunks/{chunk-ZMYHC2GZ.js → chunk-VAOV6LVA.js} +1 -1
  43. package/dist-cli/chunks/{chunk-HRH5AL5T.js → chunk-VBOZBE6C.js} +2 -2
  44. package/dist-cli/chunks/{chunk-73RUAURY.js → chunk-VIIC2RBU.js} +2 -2
  45. package/dist-cli/chunks/{chunk-UPP423YA.js → chunk-W6EAK5V4.js} +2 -2
  46. package/dist-cli/chunks/{chunk-HFKXGD6F.js → chunk-YBUKWQUZ.js} +1 -1
  47. package/dist-cli/chunks/{chunk-32JBVYL5.js → chunk-YBXS3LTW.js} +1 -1
  48. package/dist-cli/chunks/{chunk-XNCFZ4UT.js → chunk-Z6KDOLRX.js} +1 -1
  49. package/dist-cli/chunks/{chunk-3HZLGWTB.js → chunk-ZL42H3QC.js} +3 -3
  50. package/dist-cli/chunks/cli-version-EODTZL3G.js +2 -0
  51. package/dist-cli/chunks/{compat-FFXRTXLA.js → compat-PEEDQENJ.js} +3 -3
  52. package/dist-cli/chunks/{config-DSWOQ6FW.js → config-JWIRARHW.js} +2 -2
  53. package/dist-cli/chunks/{control-CWME7T7P.js → control-XMVJJY74.js} +2 -2
  54. package/dist-cli/chunks/daemon-XR2776R7.js +2 -0
  55. package/dist-cli/chunks/{debug-4TEW5NVC.js → debug-QF2FBVFJ.js} +3 -3
  56. package/dist-cli/chunks/{desktop-UTUIQSY5.js → desktop-36PJJOCB.js} +3 -3
  57. package/dist-cli/chunks/{detox-QKN3QWEU.js → detox-JM4GGPPI.js} +2 -2
  58. package/dist-cli/chunks/{device-FIUY3FPI.js → device-P7T54KCN.js} +2 -2
  59. package/dist-cli/chunks/{diagnose-2SB3E6PB.js → diagnose-HANGNVID.js} +2 -2
  60. package/dist-cli/chunks/drivers-GHTDMDZW.js +2 -0
  61. package/dist-cli/chunks/flow-67W54GMT.js +2 -0
  62. package/dist-cli/chunks/help-LB25BJRD.js +2 -0
  63. package/dist-cli/chunks/{home-paths-KMZQH425.js → home-paths-AY5QCPZF.js} +2 -2
  64. package/dist-cli/chunks/inspect-J6NIQIMB.js +2 -0
  65. package/dist-cli/chunks/install-desktop-KHSH4TYV.js +2 -0
  66. package/dist-cli/chunks/{login-PYS2PAFC.js → login-D5PAGSQD.js} +4 -4
  67. package/dist-cli/chunks/{logout-IUYFHCSL.js → logout-2XUENTSF.js} +2 -2
  68. package/dist-cli/chunks/{maestro-PXDF2QPV.js → maestro-I3BADRUJ.js} +2 -2
  69. package/dist-cli/chunks/mode-2AFNVIGA.js +95 -0
  70. package/dist-cli/chunks/optional-demo-registry-NAGQDKQZ.js +2 -0
  71. package/dist-cli/chunks/{perf-6TPVXFHZ.js → perf-QMAJYMCS.js} +2 -2
  72. package/dist-cli/chunks/{record-BGGZBLUP.js → record-CCEP74H3.js} +3 -3
  73. package/dist-cli/chunks/runtime-XCOCSQKQ.js +2 -0
  74. package/dist-cli/chunks/{screenshot-command-UIF7HN7F.js → screenshot-command-BPU63ULB.js} +3 -3
  75. package/dist-cli/chunks/{serve-AGSFVT5G.js → serve-MP76K2DW.js} +2 -2
  76. package/dist-cli/chunks/{setup-4CZ54EJ6.js → setup-ULDPNTVP.js} +3 -3
  77. package/dist-cli/chunks/{skills-VYTEBBCP.js → skills-AXDG2VZT.js} +2 -2
  78. package/dist-cli/chunks/{storage-ZXVK3T5Y.js → storage-RFJVSCSD.js} +2 -2
  79. package/dist-cli/chunks/store-H7XRYXSL.js +2 -0
  80. package/dist-cli/chunks/telemetry-T2H7BPRZ.js +2 -0
  81. package/dist-cli/chunks/{test-JOX7MZ67.js → test-PF2RVRU4.js} +5 -5
  82. package/dist-cli/chunks/{timeline-M4FXQUII.js → timeline-PYHL57AY.js} +2 -2
  83. package/dist-cli/chunks/{upgrade-WS4EUZ5H.js → upgrade-PFPXP7I5.js} +2 -2
  84. package/dist-cli/chunks/upload-7IDVWZ4C.js +2 -0
  85. package/dist-cli/chunks/{version-UCCC26QU.js → version-L4UPIIQX.js} +2 -2
  86. package/dist-cli/chunks/{web-OP75SZAL.js → web-N2IRGHFP.js} +2 -2
  87. package/dist-cli/chunks/{what-happened-IED7SETG.js → what-happened-IFLDGKFC.js} +2 -2
  88. package/dist-lib/agent-daemon-client.cjs +1 -1
  89. package/dist-lib/agent-events.cjs +1 -1
  90. package/dist-lib/agent-identity.cjs +1 -1
  91. package/dist-lib/agent-sessions.cjs +1 -1
  92. package/dist-lib/attached-projects.cjs +1 -1
  93. package/dist-lib/auth/shared-session.cjs +1 -1
  94. package/dist-lib/backend-origin.cjs +1 -1
  95. package/dist-lib/beta.cjs +1 -1
  96. package/dist-lib/beta.mjs +1 -1
  97. package/dist-lib/bridge-constants.cjs +1 -1
  98. package/dist-lib/cli-constants.cjs +1 -1
  99. package/dist-lib/config.cjs +1 -1
  100. package/dist-lib/detox/index.cjs +1 -1
  101. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  102. package/dist-lib/home-paths.cjs +1 -1
  103. package/dist-lib/host/bridge-host.cjs +1 -1
  104. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  105. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  106. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  107. package/dist-lib/host/websocket-proxy.cjs +1 -1
  108. package/dist-lib/index.cjs +1 -1
  109. package/dist-lib/jump-to-source-babel.cjs +1 -1
  110. package/dist-lib/menu.cjs +1 -1
  111. package/dist-lib/menu.mjs +1 -1
  112. package/dist-lib/metro.cjs +1 -1
  113. package/dist-lib/profiles.cjs +1 -1
  114. package/dist-lib/render-mode.cjs +1 -1
  115. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  116. package/dist-lib/sdk.cjs +3 -1
  117. package/dist-lib/sdk.mjs +3 -1
  118. package/dist-lib/skills.cjs +129 -13
  119. package/dist-lib/vite.cjs +1 -1
  120. package/package.json +1 -1
  121. package/skills/soot/SKILL.md +3 -3
  122. package/skills/sootsim-debug/SKILL.md +1 -1
  123. package/skills/sootsim-test/SKILL.md +1 -1
  124. package/dist-cli/chunks/beta-XH6NPFJL.js +0 -2
  125. package/dist-cli/chunks/chunk-2G4WS3NS.js +0 -119
  126. package/dist-cli/chunks/chunk-BQSG37WI.js +0 -87
  127. package/dist-cli/chunks/chunk-ODWHC4OS.js +0 -1
  128. package/dist-cli/chunks/chunk-VA6U55D3.js +0 -1
  129. package/dist-cli/chunks/chunk-WS4H3OTZ.js +0 -565
  130. package/dist-cli/chunks/cli-version-NE74BKVQ.js +0 -2
  131. package/dist-cli/chunks/daemon-ZCLZ7Q2G.js +0 -2
  132. package/dist-cli/chunks/drivers-ZMTRO2H7.js +0 -2
  133. package/dist-cli/chunks/flow-YUB6NHPN.js +0 -2
  134. package/dist-cli/chunks/help-2RQGMWFZ.js +0 -2
  135. package/dist-cli/chunks/inspect-XIR5LHB4.js +0 -2
  136. package/dist-cli/chunks/install-desktop-RQ6PDFCW.js +0 -2
  137. package/dist-cli/chunks/mode-D2UYKUXM.js +0 -99
  138. package/dist-cli/chunks/optional-demo-registry-DINFQX6N.js +0 -2
  139. package/dist-cli/chunks/runtime-7DFYO5OG.js +0 -2
  140. package/dist-cli/chunks/store-A5FTY6OM.js +0 -2
  141. package/dist-cli/chunks/telemetry-C2D5VTOD.js +0 -2
  142. package/dist-cli/chunks/upload-QIGILLTV.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.193 | (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-QS73KI7T.js";import{g as A,i as _}from"./chunk-3FZ2YUUP.js";import"./chunk-6WL7GBOW.js";import{b as k}from"./chunk-ZMYHC2GZ.js";import"./chunk-32JBVYL5.js";import"./chunk-OOGJDQMT.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.195 | (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-O3V7G75W.js";import{g as A,i as _}from"./chunk-7WC5DXPG.js";import"./chunk-RZDJVRQK.js";import{b as k}from"./chunk-VAOV6LVA.js";import"./chunk-YBXS3LTW.js";import"./chunk-GIR3RNE5.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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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;
@@ -1302,6 +1302,8 @@ function formatTimelinePayload(kind, d) {
1302
1302
  return `${d.phase ?? "?"}${d.heightPx ? ` h=${d.heightPx}` : ""}${d.mode ? ` ${d.mode}` : ""}`;
1303
1303
  case "screen":
1304
1304
  return `${d.phase ?? "?"} ${d.name ?? d.activeName ?? ""}`;
1305
+ case "flow-step":
1306
+ return `${d.status ?? "?"} ${d.stepName ?? "step"}${d.durationMs ? ` ${d.durationMs}ms` : ""}`;
1305
1307
  case "route":
1306
1308
  return `${d.phase ?? "?"} ${d.path ?? d.pathname ?? ""}`;
1307
1309
  case "alert":
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // cli/commands/inspect/core.ts
4
4
  function resolveMaxMsFlag(args, fallbackMs) {
@@ -1212,6 +1212,8 @@ function formatTimelinePayload(kind, d) {
1212
1212
  return `${d.phase ?? "?"}${d.heightPx ? ` h=${d.heightPx}` : ""}${d.mode ? ` ${d.mode}` : ""}`;
1213
1213
  case "screen":
1214
1214
  return `${d.phase ?? "?"} ${d.name ?? d.activeName ?? ""}`;
1215
+ case "flow-step":
1216
+ return `${d.status ?? "?"} ${d.stepName ?? "step"}${d.durationMs ? ` ${d.durationMs}ms` : ""}`;
1215
1217
  case "route":
1216
1218
  return `${d.phase ?? "?"} ${d.path ?? d.pathname ?? ""}`;
1217
1219
  case "alert":
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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;
@@ -16940,6 +16940,8 @@ var init_bridge_flow_runner = __esm({
16940
16940
  recordingStartedAtMs = null;
16941
16941
  lastRecordingStartedAtMs = null;
16942
16942
  lastRecordingDurationMs = null;
16943
+ lastRecordingFrameStats = null;
16944
+ flowTraceSteps = [];
16943
16945
  lastVisualSettledAtMs = 0;
16944
16946
  simRouteHint = null;
16945
16947
  // set by runStep when a step throws — lets the outer flow command
@@ -17075,10 +17077,12 @@ var init_bridge_flow_runner = __esm({
17075
17077
  throw new Error("recording output directory not configured");
17076
17078
  }
17077
17079
  if (!this.recordingAccessChecked) {
17078
- await ensureCliRecordingEntitlement("flow --video", {
17079
- originOverride: this.opts.billingOriginOverride,
17080
- allowGitHubAuth: this.opts.allowGitHubRecording
17081
- });
17080
+ if (this.opts.requireRecordingEntitlement) {
17081
+ await ensureCliRecordingEntitlement("flow --video", {
17082
+ originOverride: this.opts.billingOriginOverride,
17083
+ allowGitHubAuth: this.opts.allowGitHubRecording
17084
+ });
17085
+ }
17082
17086
  this.recordingAccessChecked = true;
17083
17087
  }
17084
17088
  const startedAt = Date.now();
@@ -17093,7 +17097,7 @@ var init_bridge_flow_runner = __esm({
17093
17097
  throw new Error(result?.error || "recording unavailable on this page");
17094
17098
  }
17095
17099
  if (!this.recordingStartedAtMs) {
17096
- this.recordingStartedAtMs = startedAt;
17100
+ this.recordingStartedAtMs = typeof result.startedAtMs === "number" && Number.isFinite(result.startedAtMs) ? result.startedAtMs : startedAt;
17097
17101
  }
17098
17102
  }
17099
17103
  async startRecording() {
@@ -17109,6 +17113,45 @@ var init_bridge_flow_runner = __esm({
17109
17113
  getLastRecordingStartedAtMs() {
17110
17114
  return this.lastRecordingStartedAtMs;
17111
17115
  }
17116
+ getLastRecordingFrameStats() {
17117
+ return this.lastRecordingFrameStats;
17118
+ }
17119
+ getFlowTraceSteps() {
17120
+ return [...this.flowTraceSteps];
17121
+ }
17122
+ flowStepTargetLabel(step, stepName) {
17123
+ if (stepName === "inputText" || stepName === "runScript" || stepName === "evalScript") {
17124
+ return void 0;
17125
+ }
17126
+ const value = step[stepName];
17127
+ if (typeof value === "string") return value.slice(0, 80);
17128
+ if (typeof value === "number" || typeof value === "boolean") return String(value);
17129
+ if (!value || typeof value !== "object") return void 0;
17130
+ const record = value;
17131
+ const direct = record.id ?? record.text ?? record.name ?? record.path;
17132
+ if (typeof direct === "string" && direct) return direct.slice(0, 80);
17133
+ if (record.point && typeof record.point === "string") return record.point.slice(0, 80);
17134
+ if (typeof record.x === "number" && typeof record.y === "number") {
17135
+ return `${Math.round(record.x)}, ${Math.round(record.y)}`;
17136
+ }
17137
+ return void 0;
17138
+ }
17139
+ recordFlowTraceStep(args) {
17140
+ const endedAtMs = Date.now();
17141
+ const entry = {
17142
+ stepIndex: args.stepIndex,
17143
+ stepName: args.stepName,
17144
+ ...args.targetLabel ? { targetLabel: args.targetLabel } : {},
17145
+ startedAtMs: args.startedAtMs,
17146
+ endedAtMs,
17147
+ durationMs: Math.max(0, endedAtMs - args.startedAtMs),
17148
+ status: args.status
17149
+ };
17150
+ if (args.error != null) {
17151
+ entry.error = args.error instanceof Error ? args.error.message : String(args.error);
17152
+ }
17153
+ this.flowTraceSteps.push(entry);
17154
+ }
17112
17155
  async stopRecording() {
17113
17156
  if (!this.recordingEnabled || !this.opts.recordingOutputDir) return null;
17114
17157
  this.recordingEnabled = false;
@@ -17116,10 +17159,12 @@ var init_bridge_flow_runner = __esm({
17116
17159
  const stopped = await this.evaluate(`window.__sootsimRecorder.stop()`);
17117
17160
  if (!stopped?.ok) {
17118
17161
  this.recordingStartedAtMs = null;
17162
+ this.lastRecordingFrameStats = null;
17119
17163
  throw new Error(stopped?.error || "recording stop failed");
17120
17164
  }
17121
17165
  this.lastRecordingStartedAtMs = this.recordingStartedAtMs;
17122
17166
  this.lastRecordingDurationMs = this.recordingStartedAtMs ? Math.max(1, stoppedAt - this.recordingStartedAtMs) : null;
17167
+ this.lastRecordingFrameStats = stopped.frameStats ?? null;
17123
17168
  this.recordingStartedAtMs = null;
17124
17169
  const chunks = [];
17125
17170
  let offset = 0;
@@ -18036,10 +18081,18 @@ var init_bridge_flow_runner = __esm({
18036
18081
  if (!this.firstLaunchDone && !wantsClear) {
18037
18082
  this.firstLaunchDone = true;
18038
18083
  if (wantsResetRuntime) {
18039
- if (this.recordingEnabled) await this.ensureRecordingStarted();
18084
+ const startingShellState = await getShellState(this.bridge).catch(() => null);
18085
+ const shouldReturnHome = startingShellState?.state === "home" && startingShellState.activeApp == null;
18040
18086
  await this.softReloadGuestApp(false);
18041
- await this.launchShellAppFromHomeIfNeeded(opts);
18042
18087
  await this.waitForTree(12e4);
18088
+ if (shouldReturnHome) {
18089
+ await callShellCommandWhenReady(this.bridge, "goHome", 1e3);
18090
+ await this.waitForShellHome(1e3);
18091
+ }
18092
+ await this.launchShellAppFromHomeIfNeeded(
18093
+ opts,
18094
+ shouldReturnHome ? { ...startingShellState ?? {}, state: "home", activeApp: null } : null
18095
+ );
18043
18096
  } else {
18044
18097
  await this.launchShellAppFromHomeIfNeeded(opts);
18045
18098
  }
@@ -18112,12 +18165,26 @@ var init_bridge_flow_runner = __esm({
18112
18165
  await sleep2(16);
18113
18166
  }
18114
18167
  }
18115
- async launchShellAppFromHomeIfNeeded(opts) {
18168
+ async waitForShellHome(timeoutMs) {
18169
+ const deadline = Date.now() + timeoutMs;
18170
+ while (Date.now() < deadline) {
18171
+ const state = await getShellState(this.bridge).catch(() => null);
18172
+ if (state?.state === "home" && state.activeApp == null && state.showSwitcher === false) {
18173
+ return;
18174
+ }
18175
+ await sleep2(16);
18176
+ }
18177
+ }
18178
+ async launchShellAppFromHomeIfNeeded(opts, knownHomeState) {
18116
18179
  let state = null;
18117
- try {
18118
- state = await getShellState(this.bridge);
18119
- } catch {
18120
- return false;
18180
+ if (knownHomeState) {
18181
+ state = knownHomeState;
18182
+ } else {
18183
+ try {
18184
+ state = await getShellState(this.bridge);
18185
+ } catch {
18186
+ return false;
18187
+ }
18121
18188
  }
18122
18189
  if (state?.state !== "home" || state.activeApp != null) return false;
18123
18190
  const appId = this.resolveShellLaunchAppId(opts, state);
@@ -18264,14 +18331,25 @@ var init_bridge_flow_runner = __esm({
18264
18331
  const rawStep = typeof rawStepInput === "string" ? normalizeBareStringStep(rawStepInput) : rawStepInput;
18265
18332
  const stepName = Object.keys(rawStep).find((k) => k !== "when") || Object.keys(rawStep)[0];
18266
18333
  console.log(`[flow] step ${stepIndex + 1}: ${stepName}`);
18334
+ const startedAtMs = Date.now();
18335
+ let targetLabel = this.flowStepTargetLabel(rawStep, stepName);
18267
18336
  let step;
18268
18337
  try {
18269
18338
  step = this.js.interpolateStep(rawStep);
18339
+ targetLabel = this.flowStepTargetLabel(step, stepName) ?? targetLabel;
18270
18340
  } catch (error) {
18271
18341
  if (this.isOptional(rawStep)) {
18272
18342
  console.log(
18273
18343
  `[flow] (optional, skipped: ${error.message.slice(0, 80)})`
18274
18344
  );
18345
+ this.recordFlowTraceStep({
18346
+ stepIndex,
18347
+ stepName,
18348
+ targetLabel,
18349
+ startedAtMs,
18350
+ status: "skipped",
18351
+ error
18352
+ });
18275
18353
  return;
18276
18354
  }
18277
18355
  this.lastFailedStep = {
@@ -18279,12 +18357,27 @@ var init_bridge_flow_runner = __esm({
18279
18357
  kind: stepName,
18280
18358
  target: rawStep[stepName]
18281
18359
  };
18360
+ this.recordFlowTraceStep({
18361
+ stepIndex,
18362
+ stepName,
18363
+ targetLabel,
18364
+ startedAtMs,
18365
+ status: "failure",
18366
+ error
18367
+ });
18282
18368
  throw error;
18283
18369
  }
18284
18370
  if (step.when) {
18285
18371
  const shouldRun = await this.evaluateWhen(step.when);
18286
18372
  if (!shouldRun) {
18287
18373
  console.log(`[flow] (when: predicate false, skipped)`);
18374
+ this.recordFlowTraceStep({
18375
+ stepIndex,
18376
+ stepName,
18377
+ targetLabel,
18378
+ startedAtMs,
18379
+ status: "skipped"
18380
+ });
18288
18381
  return;
18289
18382
  }
18290
18383
  }
@@ -18317,11 +18410,26 @@ var init_bridge_flow_runner = __esm({
18317
18410
  if (this.stepDelay > 0 && !isAssertion) {
18318
18411
  await sleep2(this.stepDelay);
18319
18412
  }
18413
+ this.recordFlowTraceStep({
18414
+ stepIndex,
18415
+ stepName,
18416
+ targetLabel,
18417
+ startedAtMs,
18418
+ status: "success"
18419
+ });
18320
18420
  } catch (error) {
18321
18421
  if (this.isOptional(step)) {
18322
18422
  console.log(
18323
18423
  `[flow] (optional, skipped: ${error.message.slice(0, 80)})`
18324
18424
  );
18425
+ this.recordFlowTraceStep({
18426
+ stepIndex,
18427
+ stepName,
18428
+ targetLabel,
18429
+ startedAtMs,
18430
+ status: "skipped",
18431
+ error
18432
+ });
18325
18433
  return;
18326
18434
  }
18327
18435
  this.lastFailedStep = {
@@ -18329,6 +18437,14 @@ var init_bridge_flow_runner = __esm({
18329
18437
  kind: stepName,
18330
18438
  target: step[stepName]
18331
18439
  };
18440
+ this.recordFlowTraceStep({
18441
+ stepIndex,
18442
+ stepName,
18443
+ targetLabel,
18444
+ startedAtMs,
18445
+ status: "failure",
18446
+ error
18447
+ });
18332
18448
  throw error;
18333
18449
  }
18334
18450
  }
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.195 | (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.193",
3
+ "version": "0.1.195",
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",
@@ -111,8 +111,8 @@ commands in your own `sleep` or chain `do settle` "just to be safe"**.
111
111
  `type-into`, `key`, `key-sequence`, `keycode`, `drag`, `swipe`,
112
112
  `long-press`, `touch`, `gesture`, `pinch`, `scroll`, `shell`)
113
113
  the CLI polls the layout hash until it is stable for two consecutive
114
- frames. budget: **1200 ms for agents** (`SOOTSIM_AGENT=1`, set by the
115
- harness), 350 ms for humans.
114
+ frames. budget: **400 ms for agents** (`SOOTSIM_AGENT=1`, set by the
115
+ harness), 200 ms for humans.
116
116
 
117
117
  what this means:
118
118
 
@@ -120,7 +120,7 @@ what this means:
120
120
  - you only need `sootsim do settle <seconds>` or `sootsim wait idle
121
121
  --max-ms <N>` when the CLI explicitly prints
122
122
  `⚠ auto-wait timed out after Nms — next command may see mid-animation
123
- state`, or when the transition you care about lasts longer than ~1.2 s
123
+ state`, or when the transition you care about lasts longer than ~400 ms
124
124
  (full stack navigation, crossfades, video load).
125
125
  - opt-out: `--no-wait` on a single command, `SOOTSIM_NO_AUTO_WAIT=1`
126
126
  for a whole lane.
@@ -114,7 +114,7 @@ need a manual wait when:
114
114
  1. the CLI explicitly printed `⚠ auto-wait timed out after Nms — next
115
115
  command may see mid-animation state` *and* your next read depends on
116
116
  the animation finishing.
117
- 2. the transition is longer than ~1.2 s (full stack navigation,
117
+ 2. the transition is longer than ~400 ms (full stack navigation,
118
118
  crossfades, video first-frame, network-backed render).
119
119
  3. you want `--strict` settle, which also requires animation flags to
120
120
  clear — only safe for apps with no perpetual background animation
@@ -118,7 +118,7 @@ drag is backed by the same primitives that auto-wait for transitions on
118
118
  the way in and layout stability on the way out. you rarely need
119
119
  explicit waits; when you do, `waitForAnimationToEnd: true` maps to the
120
120
  CLI's `wait idle` with a generous budget. use it before any
121
- `assertVisible` that depends on a transition longer than ~1.2 s.
121
+ `assertVisible` that depends on a transition longer than ~400 ms.
122
122
 
123
123
  generating a starter flow by crawling the app:
124
124
 
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-3HBRJVSY.js";import"./chunk-OOGJDQMT.js";export{d as BETA_ASK_HEADLINE,b as BETA_LABEL,c as BETA_TAGLINE,a as IS_BETA};