sootsim 0.1.209 → 0.1.211

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 (149) hide show
  1. package/README.md +10 -9
  2. package/dist-cli/bin.js +4 -4
  3. package/dist-cli/chunks/{agent-KEC5PILM.js → agent-YMWIMQSZ.js} +2 -2
  4. package/dist-cli/chunks/{agent-wrapper-PVXYV2Z5.js → agent-wrapper-6MN4L5WR.js} +2 -2
  5. package/dist-cli/chunks/{app-fonts-ANPET46E.js → app-fonts-C7OF7H5G.js} +2 -2
  6. package/dist-cli/chunks/{assert-TIABJI4M.js → assert-JVVKDGJZ.js} +2 -2
  7. package/dist-cli/chunks/{auth-R7PMD6TZ.js → auth-K5PLXC65.js} +2 -2
  8. package/dist-cli/chunks/beta-FFPVM735.js +2 -0
  9. package/dist-cli/chunks/{camera-7UFJSFK7.js → camera-LN5T6FHN.js} +2 -2
  10. package/dist-cli/chunks/chunk-2OE3UXXF.js +119 -0
  11. package/dist-cli/chunks/{chunk-2OT4F6F2.js → chunk-33FTN3AV.js} +3 -3
  12. package/dist-cli/chunks/{chunk-OVT65DWK.js → chunk-3AMN64TG.js} +1 -1
  13. package/dist-cli/chunks/{chunk-RGRLM7AT.js → chunk-4L4WXCMZ.js} +2 -2
  14. package/dist-cli/chunks/{chunk-5MEH5VHS.js → chunk-75ZI44EE.js} +4 -4
  15. package/dist-cli/chunks/{chunk-CXBNEQNP.js → chunk-ADHPC2X3.js} +2 -2
  16. package/dist-cli/chunks/{chunk-GGRLGKFC.js → chunk-AQXWKFSQ.js} +1 -1
  17. package/dist-cli/chunks/{chunk-QYOLP7E2.js → chunk-AVJOEZLW.js} +2 -2
  18. package/dist-cli/chunks/chunk-BVOMJLZJ.js +1 -0
  19. package/dist-cli/chunks/chunk-CA53GTDU.js +2 -0
  20. package/dist-cli/chunks/{chunk-JXOQBX5R.js → chunk-CDMWW44J.js} +2 -2
  21. package/dist-cli/chunks/{chunk-GGPPDEWU.js → chunk-CNMIJNUJ.js} +2 -2
  22. package/dist-cli/chunks/chunk-CZJWXULV.js +13 -0
  23. package/dist-cli/chunks/{chunk-IE3M7UCB.js → chunk-E2HECQS5.js} +48 -48
  24. package/dist-cli/chunks/{chunk-2N7YUIB6.js → chunk-E2TCQ5AD.js} +1 -1
  25. package/dist-cli/chunks/{chunk-DNAKPQ56.js → chunk-FLQJ4E4B.js} +2 -2
  26. package/dist-cli/chunks/{chunk-VUTSNH77.js → chunk-FUUQJQ6D.js} +1 -1
  27. package/dist-cli/chunks/{chunk-VCUGCWFW.js → chunk-GDIUF4LO.js} +2 -2
  28. package/dist-cli/chunks/{chunk-Y2YT6G2K.js → chunk-GIPNU35K.js} +2 -2
  29. package/dist-cli/chunks/{chunk-H7I4QQBU.js → chunk-HYCIJ46S.js} +1 -1
  30. package/dist-cli/chunks/{chunk-3MSLDFKZ.js → chunk-IHQXMMQA.js} +2 -2
  31. package/dist-cli/chunks/{chunk-KUFSYYKY.js → chunk-KDCFEKQG.js} +1 -1
  32. package/dist-cli/chunks/{chunk-CNHZWLE3.js → chunk-KKOQCQ7C.js} +1 -1
  33. package/dist-cli/chunks/{chunk-44EPIO7S.js → chunk-LN2YBE53.js} +3 -3
  34. package/dist-cli/chunks/{chunk-IUG5LGAH.js → chunk-MRVFOA46.js} +2 -2
  35. package/dist-cli/chunks/{chunk-JUBCRVXK.js → chunk-NLHBFC44.js} +8 -8
  36. package/dist-cli/chunks/{chunk-VHUEJNYT.js → chunk-OEVW6X6O.js} +1 -1
  37. package/dist-cli/chunks/{chunk-UQX3RDUO.js → chunk-OJXQDTQP.js} +1 -1
  38. package/dist-cli/chunks/{chunk-4N2A7WPD.js → chunk-OYKIZT5Q.js} +1 -1
  39. package/dist-cli/chunks/{chunk-7XXN43QW.js → chunk-PC3RU3SN.js} +1 -1
  40. package/dist-cli/chunks/{chunk-56YCENXG.js → chunk-RCNPJNHG.js} +1 -1
  41. package/dist-cli/chunks/{chunk-TCIUR5IB.js → chunk-RNCB3OP2.js} +2 -2
  42. package/dist-cli/chunks/{chunk-IELT7YPL.js → chunk-SSYQZ5IN.js} +2 -2
  43. package/dist-cli/chunks/{chunk-EYISIVUC.js → chunk-T3L3I3XN.js} +2 -2
  44. package/dist-cli/chunks/{chunk-YC4E3DRA.js → chunk-TBBKY5QW.js} +2 -2
  45. package/dist-cli/chunks/{chunk-W2SLUPGS.js → chunk-TYJ7RKBZ.js} +1 -1
  46. package/dist-cli/chunks/{chunk-5HAEGTT5.js → chunk-U74PRAD5.js} +2 -2
  47. package/dist-cli/chunks/{chunk-JOFHXMRG.js → chunk-UMBVQZ22.js} +2 -2
  48. package/dist-cli/chunks/{chunk-YB7GMFBR.js → chunk-UXJC5TWI.js} +1 -1
  49. package/dist-cli/chunks/{chunk-IEDKCUPC.js → chunk-VDLNYLQ3.js} +1 -1
  50. package/dist-cli/chunks/chunk-X5F2XRCT.js +1 -0
  51. package/dist-cli/chunks/{chunk-L23EEIDG.js → chunk-XNJNWR34.js} +2 -2
  52. package/dist-cli/chunks/cli-version-6ZGU3OMS.js +2 -0
  53. package/dist-cli/chunks/{compat-MR7RNAP6.js → compat-FHMWPGR4.js} +3 -3
  54. package/dist-cli/chunks/{config-MMRF4WYY.js → config-OKQY5P52.js} +2 -2
  55. package/dist-cli/chunks/{control-ULQKJBAD.js → control-7WL54I6D.js} +2 -2
  56. package/dist-cli/chunks/daemon-MJAW7WLB.js +2 -0
  57. package/dist-cli/chunks/{debug-QRTBFTZC.js → debug-QWZHZQPU.js} +3 -3
  58. package/dist-cli/chunks/{desktop-WTUZLOEG.js → desktop-FXGRW74A.js} +3 -3
  59. package/dist-cli/chunks/{detox-I4NFW53N.js → detox-3EDUFJTL.js} +4 -4
  60. package/dist-cli/chunks/{device-UL3V6W3S.js → device-QCRIH4UL.js} +2 -2
  61. package/dist-cli/chunks/{diagnose-63E4BQXG.js → diagnose-URCT4GRE.js} +2 -2
  62. package/dist-cli/chunks/drivers-K6AYJ4K4.js +2 -0
  63. package/dist-cli/chunks/flow-FJK6CFCI.js +2 -0
  64. package/dist-cli/chunks/help-GCSPMIWH.js +2 -0
  65. package/dist-cli/chunks/{home-paths-U6VSF2D3.js → home-paths-EO6LWXWX.js} +2 -2
  66. package/dist-cli/chunks/inspect-DLPOHI65.js +2 -0
  67. package/dist-cli/chunks/install-desktop-LKSETTBL.js +2 -0
  68. package/dist-cli/chunks/{login-4Y32SP3B.js → login-7NUQAWXS.js} +4 -4
  69. package/dist-cli/chunks/{logout-HRGK2TLN.js → logout-BH53ZI7B.js} +2 -2
  70. package/dist-cli/chunks/{maestro-UOOWOSMW.js → maestro-C3RK43L7.js} +17 -11
  71. package/dist-cli/chunks/maestro-generate-NJBAT2VF.js +34 -0
  72. package/dist-cli/chunks/{mode-6PO2NWNV.js → mode-2LMGYLFI.js} +2 -2
  73. package/dist-cli/chunks/optional-demo-registry-A27PORZB.js +2 -0
  74. package/dist-cli/chunks/{perf-6ZGFXV7T.js → perf-LA7ZSQ7P.js} +2 -2
  75. package/dist-cli/chunks/{record-IIVWF5QW.js → record-3RNPPFI5.js} +3 -3
  76. package/dist-cli/chunks/runtime-7VEUKPNE.js +2 -0
  77. package/dist-cli/chunks/{screenshot-command-JLSF5QJO.js → screenshot-command-KIWXTT6Q.js} +6 -6
  78. package/dist-cli/chunks/{screenshots-capture-GW4YS6YN.js → screenshots-capture-ZADO3BSL.js} +2 -2
  79. package/dist-cli/chunks/{serve-ZINIYVBO.js → serve-64IOEG4C.js} +2 -2
  80. package/dist-cli/chunks/{setup-T4TUKR5N.js → setup-GANEERC5.js} +3 -3
  81. package/dist-cli/chunks/{skills-VMVA5KMV.js → skills-DYN4EKIN.js} +2 -2
  82. package/dist-cli/chunks/{storage-2I3TEBEI.js → storage-773UY5XZ.js} +2 -2
  83. package/dist-cli/chunks/store-LSC33DBI.js +2 -0
  84. package/dist-cli/chunks/telemetry-4DVRYGKH.js +2 -0
  85. package/dist-cli/chunks/{timeline-DSZIKBSD.js → timeline-HLF3CJNH.js} +2 -2
  86. package/dist-cli/chunks/upgrade-RDAUF53R.js +4 -0
  87. package/dist-cli/chunks/upload-KI23CKE4.js +2 -0
  88. package/dist-cli/chunks/{version-HNDOSSV6.js → version-63PZYMY6.js} +2 -2
  89. package/dist-cli/chunks/{web-YFMICNP2.js → web-XN5ZVSZR.js} +2 -2
  90. package/dist-cli/chunks/{what-happened-RJNSVNUE.js → what-happened-T3WJ7LTW.js} +2 -2
  91. package/dist-lib/agent-daemon-client.cjs +1 -1
  92. package/dist-lib/agent-events.cjs +1 -1
  93. package/dist-lib/agent-identity.cjs +1 -1
  94. package/dist-lib/agent-sessions.cjs +1 -1
  95. package/dist-lib/attached-projects.cjs +1 -1
  96. package/dist-lib/auth/shared-session.cjs +1 -1
  97. package/dist-lib/backend-origin.cjs +1 -1
  98. package/dist-lib/beta.cjs +1 -1
  99. package/dist-lib/beta.mjs +1 -1
  100. package/dist-lib/bridge-constants.cjs +1 -1
  101. package/dist-lib/cli-constants.cjs +1 -1
  102. package/dist-lib/config.cjs +1 -1
  103. package/dist-lib/detox/index.cjs +1 -1
  104. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  105. package/dist-lib/home-paths.cjs +1 -1
  106. package/dist-lib/host/bridge-host.cjs +1 -1
  107. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  108. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  109. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  110. package/dist-lib/host/websocket-proxy.cjs +1 -1
  111. package/dist-lib/index.cjs +1 -1
  112. package/dist-lib/jump-to-source-babel.cjs +1 -1
  113. package/dist-lib/menu.cjs +1 -1
  114. package/dist-lib/menu.mjs +1 -1
  115. package/dist-lib/metro.cjs +1 -1
  116. package/dist-lib/profiles.cjs +1 -1
  117. package/dist-lib/render-mode.cjs +1 -1
  118. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  119. package/dist-lib/sdk.cjs +1 -1
  120. package/dist-lib/sdk.mjs +1 -1
  121. package/dist-lib/skills.cjs +108 -108
  122. package/dist-lib/vite.cjs +1 -1
  123. package/package.json +1 -1
  124. package/skills/soot/SKILL.md +5 -7
  125. package/skills/sootsim-debug/SKILL.md +1 -1
  126. package/skills/sootsim-perf/SKILL.md +1 -1
  127. package/skills/sootsim-test/SKILL.md +36 -40
  128. package/src/skills/builtin/{test-flow.ts → maestro-test.ts} +6 -6
  129. package/src/skills/registry.ts +3 -3
  130. package/dist-cli/chunks/beta-FFASIXKH.js +0 -2
  131. package/dist-cli/chunks/chunk-2PGB3DOK.js +0 -119
  132. package/dist-cli/chunks/chunk-3RVUM7UI.js +0 -1
  133. package/dist-cli/chunks/chunk-CYDWIYRJ.js +0 -1
  134. package/dist-cli/chunks/chunk-OL7X4HKV.js +0 -2
  135. package/dist-cli/chunks/chunk-S73LN4A3.js +0 -13
  136. package/dist-cli/chunks/cli-version-VMYLWAMI.js +0 -2
  137. package/dist-cli/chunks/daemon-KLIQUGQB.js +0 -2
  138. package/dist-cli/chunks/drivers-FSTNEQAE.js +0 -2
  139. package/dist-cli/chunks/flow-JHQNIALS.js +0 -2
  140. package/dist-cli/chunks/help-S7U65PPA.js +0 -2
  141. package/dist-cli/chunks/inspect-Z4GQNIWJ.js +0 -2
  142. package/dist-cli/chunks/install-desktop-AEDLWUK6.js +0 -2
  143. package/dist-cli/chunks/optional-demo-registry-RVVVXHLS.js +0 -2
  144. package/dist-cli/chunks/runtime-CQCSXHC2.js +0 -2
  145. package/dist-cli/chunks/store-IAFN6XPI.js +0 -2
  146. package/dist-cli/chunks/telemetry-G2XJWKVX.js +0 -2
  147. package/dist-cli/chunks/test-PR7EPXIP.js +0 -69
  148. package/dist-cli/chunks/upgrade-EM7AEJCX.js +0 -4
  149. package/dist-cli/chunks/upload-BU5GF2ZF.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.209 | (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-IEDKCUPC.js";import{g as A,i as _}from"./chunk-YC4E3DRA.js";import"./chunk-4N2A7WPD.js";import{b as k}from"./chunk-2N7YUIB6.js";import"./chunk-OVT65DWK.js";import"./chunk-YB7GMFBR.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.211 | (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-VDLNYLQ3.js";import{g as A,i as _}from"./chunk-TBBKY5QW.js";import"./chunk-OYKIZT5Q.js";import{b as k}from"./chunk-E2TCQ5AD.js";import"./chunk-3AMN64TG.js";import"./chunk-UXJC5TWI.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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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;
@@ -18992,8 +18992,111 @@ function isNative(name) {
18992
18992
  return name.startsWith("expo-") || name.startsWith("react-native-") || name.startsWith("@react-native/") || name.startsWith("@react-native-community/") || name.startsWith("@expo/") || name === "expo";
18993
18993
  }
18994
18994
 
18995
- // src/skills/builtin/perf-profile.ts
18995
+ // src/skills/builtin/maestro-test.ts
18996
+ function sleep3(ms) {
18997
+ return new Promise((resolve5) => setTimeout(resolve5, ms));
18998
+ }
18996
18999
  var skill3 = {
19000
+ name: "maestro-test",
19001
+ description: "Run Maestro YAML tests against the app",
19002
+ type: "testing",
19003
+ version: "1.0.0",
19004
+ triggers: ["run test", "test flow", "run maestro", "test the app"],
19005
+ tools: [
19006
+ {
19007
+ name: "run_maestro",
19008
+ description: "Run a Maestro YAML test against the app",
19009
+ parameters: {
19010
+ flowPath: {
19011
+ type: "string",
19012
+ description: "Path to the YAML flow file",
19013
+ required: true
19014
+ },
19015
+ record: { type: "boolean", description: "Record video of the flow" }
19016
+ },
19017
+ async execute(params, context) {
19018
+ const fs11 = await import("fs");
19019
+ const path11 = await import("path");
19020
+ const yaml2 = await import("yaml");
19021
+ const { DEFAULT_SOOTSIM_BRIDGE_PORT: DEFAULT_SOOTSIM_BRIDGE_PORT2 } = await Promise.resolve().then(() => (init_bridge_constants(), bridge_constants_exports));
19022
+ const { SootSimBridgeHost: SootSimBridgeHost2 } = await Promise.resolve().then(() => (init_bridge_host(), bridge_host_exports));
19023
+ const { createBridge: createBridge2 } = await Promise.resolve().then(() => (init_ws_bridge(), ws_bridge_exports));
19024
+ const { SootSimBridgeFlowRunner: SootSimBridgeFlowRunner2 } = await Promise.resolve().then(() => (init_bridge_flow_runner(), bridge_flow_runner_exports));
19025
+ const host = new SootSimBridgeHost2({ port: DEFAULT_SOOTSIM_BRIDGE_PORT2 });
19026
+ host.start({ silent: true });
19027
+ try {
19028
+ const flowContent = fs11.readFileSync(params.flowPath, "utf8");
19029
+ const fmMatch = flowContent.match(/^---\n([\s\S]*?)\n---\n?/);
19030
+ const stepsBody = fmMatch ? flowContent.slice(fmMatch[0].length) : flowContent;
19031
+ const steps = yaml2.parse(stepsBody);
19032
+ const beforeIds = new Set(host.listSims().map((sim) => sim.id));
19033
+ await host.openUrl(context.url);
19034
+ let simId = null;
19035
+ for (let i = 0; i < 60; i++) {
19036
+ const sims = host.listSims();
19037
+ const opened = sims.find((sim) => !beforeIds.has(sim.id) && sim.readyState === "open") || sims.find((sim) => sim.readyState === "open");
19038
+ if (opened) {
19039
+ simId = opened.id;
19040
+ break;
19041
+ }
19042
+ await sleep3(500);
19043
+ }
19044
+ if (!simId) {
19045
+ throw new Error("no sim connected to the bridge host");
19046
+ }
19047
+ const bridge = createBridge2(DEFAULT_SOOTSIM_BRIDGE_PORT2, {
19048
+ simId,
19049
+ commandTimeoutMs: 15e3
19050
+ });
19051
+ const driver = new SootSimBridgeFlowRunner2(bridge, {
19052
+ screenshotDir: context.outputDir,
19053
+ flowDir: path11.dirname(path11.resolve(params.flowPath)),
19054
+ simId,
19055
+ recordingOutputDir: params.record ? context.outputDir : void 0
19056
+ });
19057
+ let videoPath = null;
19058
+ try {
19059
+ await driver.waitForTree(12e4);
19060
+ if (params.record) {
19061
+ await driver.startRecording();
19062
+ }
19063
+ await driver.runFlow(steps);
19064
+ if (params.record) {
19065
+ videoPath = await driver.stopRecording();
19066
+ }
19067
+ return {
19068
+ success: true,
19069
+ message: `Flow completed: ${steps.length} steps passed`,
19070
+ data: {
19071
+ steps: steps.length,
19072
+ simId,
19073
+ videoPath: videoPath || void 0
19074
+ },
19075
+ artifacts: videoPath ? [{ type: "video", name: path11.basename(videoPath), path: videoPath }] : void 0
19076
+ };
19077
+ } finally {
19078
+ try {
19079
+ await bridge.closeSim(simId);
19080
+ } catch {
19081
+ }
19082
+ bridge.close();
19083
+ }
19084
+ } catch (err) {
19085
+ return {
19086
+ success: false,
19087
+ message: `Flow failed: ${err.message}`
19088
+ };
19089
+ } finally {
19090
+ await host.close().catch(() => {
19091
+ });
19092
+ }
19093
+ }
19094
+ }
19095
+ ]
19096
+ };
19097
+
19098
+ // src/skills/builtin/perf-profile.ts
19099
+ var skill4 = {
18997
19100
  name: "perf-profile",
18998
19101
  description: "Profile render performance of the app",
18999
19102
  type: "performance",
@@ -19058,7 +19161,7 @@ var skill3 = {
19058
19161
  };
19059
19162
 
19060
19163
  // src/skills/builtin/screenshot-all.ts
19061
- var skill4 = {
19164
+ var skill5 = {
19062
19165
  name: "screenshot-all",
19063
19166
  description: "Capture screenshots of all screens in the app",
19064
19167
  type: "screenshot",
@@ -19097,109 +19200,6 @@ var skill4 = {
19097
19200
  ]
19098
19201
  };
19099
19202
 
19100
- // src/skills/builtin/test-flow.ts
19101
- function sleep3(ms) {
19102
- return new Promise((resolve5) => setTimeout(resolve5, ms));
19103
- }
19104
- var skill5 = {
19105
- name: "test-flow",
19106
- description: "Run YAML test flows against the app",
19107
- type: "testing",
19108
- version: "1.0.0",
19109
- triggers: ["run test", "test flow", "run flow", "test the app"],
19110
- tools: [
19111
- {
19112
- name: "run_flow",
19113
- description: "Run a YAML flow against the app",
19114
- parameters: {
19115
- flowPath: {
19116
- type: "string",
19117
- description: "Path to the YAML flow file",
19118
- required: true
19119
- },
19120
- record: { type: "boolean", description: "Record video of the flow" }
19121
- },
19122
- async execute(params, context) {
19123
- const fs11 = await import("fs");
19124
- const path11 = await import("path");
19125
- const yaml2 = await import("yaml");
19126
- const { DEFAULT_SOOTSIM_BRIDGE_PORT: DEFAULT_SOOTSIM_BRIDGE_PORT2 } = await Promise.resolve().then(() => (init_bridge_constants(), bridge_constants_exports));
19127
- const { SootSimBridgeHost: SootSimBridgeHost2 } = await Promise.resolve().then(() => (init_bridge_host(), bridge_host_exports));
19128
- const { createBridge: createBridge2 } = await Promise.resolve().then(() => (init_ws_bridge(), ws_bridge_exports));
19129
- const { SootSimBridgeFlowRunner: SootSimBridgeFlowRunner2 } = await Promise.resolve().then(() => (init_bridge_flow_runner(), bridge_flow_runner_exports));
19130
- const host = new SootSimBridgeHost2({ port: DEFAULT_SOOTSIM_BRIDGE_PORT2 });
19131
- host.start({ silent: true });
19132
- try {
19133
- const flowContent = fs11.readFileSync(params.flowPath, "utf8");
19134
- const fmMatch = flowContent.match(/^---\n([\s\S]*?)\n---\n?/);
19135
- const stepsBody = fmMatch ? flowContent.slice(fmMatch[0].length) : flowContent;
19136
- const steps = yaml2.parse(stepsBody);
19137
- const beforeIds = new Set(host.listSims().map((sim) => sim.id));
19138
- await host.openUrl(context.url);
19139
- let simId = null;
19140
- for (let i = 0; i < 60; i++) {
19141
- const sims = host.listSims();
19142
- const opened = sims.find((sim) => !beforeIds.has(sim.id) && sim.readyState === "open") || sims.find((sim) => sim.readyState === "open");
19143
- if (opened) {
19144
- simId = opened.id;
19145
- break;
19146
- }
19147
- await sleep3(500);
19148
- }
19149
- if (!simId) {
19150
- throw new Error("no sim connected to the bridge host");
19151
- }
19152
- const bridge = createBridge2(DEFAULT_SOOTSIM_BRIDGE_PORT2, {
19153
- simId,
19154
- commandTimeoutMs: 15e3
19155
- });
19156
- const driver = new SootSimBridgeFlowRunner2(bridge, {
19157
- screenshotDir: context.outputDir,
19158
- flowDir: path11.dirname(path11.resolve(params.flowPath)),
19159
- simId,
19160
- recordingOutputDir: params.record ? context.outputDir : void 0
19161
- });
19162
- let videoPath = null;
19163
- try {
19164
- await driver.waitForTree(12e4);
19165
- if (params.record) {
19166
- await driver.startRecording();
19167
- }
19168
- await driver.runFlow(steps);
19169
- if (params.record) {
19170
- videoPath = await driver.stopRecording();
19171
- }
19172
- return {
19173
- success: true,
19174
- message: `Flow completed: ${steps.length} steps passed`,
19175
- data: {
19176
- steps: steps.length,
19177
- simId,
19178
- videoPath: videoPath || void 0
19179
- },
19180
- artifacts: videoPath ? [{ type: "video", name: path11.basename(videoPath), path: videoPath }] : void 0
19181
- };
19182
- } finally {
19183
- try {
19184
- await bridge.closeSim(simId);
19185
- } catch {
19186
- }
19187
- bridge.close();
19188
- }
19189
- } catch (err) {
19190
- return {
19191
- success: false,
19192
- message: `Flow failed: ${err.message}`
19193
- };
19194
- } finally {
19195
- await host.close().catch(() => {
19196
- });
19197
- }
19198
- }
19199
- }
19200
- ]
19201
- };
19202
-
19203
19203
  // src/skills/builtin/visual-diff.ts
19204
19204
  var skill6 = {
19205
19205
  name: "visual-diff",
@@ -19285,9 +19285,9 @@ var _skills = /* @__PURE__ */ new Map();
19285
19285
  var BUILTIN_SKILLS = [
19286
19286
  skill,
19287
19287
  skill2,
19288
- skill3,
19289
19288
  skill4,
19290
19289
  skill5,
19290
+ skill3,
19291
19291
  skill6
19292
19292
  ];
19293
19293
  var skillRegistry = {
@@ -19348,7 +19348,7 @@ var skillRegistry = {
19348
19348
  const pkg = JSON.parse(fs10.readFileSync(pkgPath, "utf8"));
19349
19349
  const deps = { ...pkg.dependencies, ...pkg.devDependencies };
19350
19350
  if (deps["detox"] || deps["maestro"]) {
19351
- suggestions.push("test-flow");
19351
+ suggestions.push("maestro-test");
19352
19352
  }
19353
19353
  if (!deps["jest-axe"] && !deps["@testing-library/jest-dom"]) {
19354
19354
  suggestions.push("a11y-review");
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.209 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.211 | (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.209",
3
+ "version": "0.1.211",
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",
@@ -19,9 +19,7 @@ automation, inspecting the render tree, and managing sims.
19
19
 
20
20
  | command | description |
21
21
  | --- | --- |
22
- | `sootsim test` | run tests against sootsim |
23
- | `sootsim flow` | run flows through the current sim or manage a draft from live inspect actions |
24
- | `sootsim maestro` | run existing Maestro YAML flows against sootsim |
22
+ | `sootsim maestro` | author, generate, and run Maestro YAML flows against sootsim |
25
23
  | `sootsim detox` | run existing Detox suites against sootsim on headless Chromium |
26
24
  | `sootsim record` | capture the live sim as webm/mp4/gif, or sample N png frames (--frames) |
27
25
  | `sootsim storage` | manage guest app storage and launch profiles |
@@ -92,7 +90,7 @@ skills for working with the SootSim native preview engine:
92
90
  | `/sootsim-debug` | Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under sootsim. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the sootsim CLI debug tooling first, not screenshots or ad-hoc logging. |
93
91
  | `/sootsim-perf` | Optimize SootSim engine and app performance — scroll jank, dropped frames, slow animation, idle CPU, memory growth, and "smooth normally but laggy under load" (video calls, busy machines). Covers measuring on the right thread with the right browser, proving each perf tier actually engages via its counters, a CPU-contention test harness, and the map of existing perf machinery so you improve it instead of reinventing it. For general app debugging load /sootsim-debug first. |
94
92
  | `/sootsim-setup` | Get sootsim connected to your React Native app — from `sootsim setup` to a driveable sim |
95
- | `/sootsim-test` | Run automated tests against your React Native app under sootsim native YAML flows, Maestro drop-in, or Detox drop-in |
93
+ | `/sootsim-test` | Run automated tests against your React Native app under sootsim with Maestro YAML or Detox/Jest |
96
94
  | `/sootsim-visual` | Pixel-level rendering comparison between sootsim and native iOS — fonts, gradients, shadows, image fidelity |
97
95
 
98
96
  ## automatic settling
@@ -153,9 +151,9 @@ sootsim debug state shell # runtime state dump
153
151
  ### testing
154
152
 
155
153
  ```sh
156
- sootsim test # run tests
157
- sootsim flow flows/login.yaml # run a YAML flow
158
- sootsim flow start # start recording a flow
154
+ sootsim maestro test .maestro/ # run Maestro YAML flows
155
+ sootsim maestro generate "login" # generate and run a Maestro flow
156
+ sootsim detox # run Detox/Jest suites
159
157
  ```
160
158
 
161
159
  ### inspection
@@ -199,7 +199,7 @@ budget. **p95 >20 ms is visible jank for a scrolling surface.**
199
199
  profiling a whole flow:
200
200
 
201
201
  ```sh
202
- sootsim flow flows/scroll-feed.yaml --profile # per-step + frame stats
202
+ sootsim maestro test .maestro/scroll-feed.yaml --profile # per-step + frame stats
203
203
  sootsim perf cpu --duration 5 --output /tmp/trace.cpuprofile # sampled CPU
204
204
  ```
205
205
 
@@ -72,7 +72,7 @@ runs clears the buffer.
72
72
  deeper tools when the frame report isn't enough:
73
73
 
74
74
  ```sh
75
- sootsim flow flows/scroll.yaml --profile # per-step + frame stats
75
+ sootsim maestro test .maestro/scroll.yaml --profile # per-step + frame stats
76
76
  sootsim perf cpu --duration 5 --output /tmp/t.cpuprofile # sampled CPU
77
77
  sootsim open 8089 --new --driver playwright --cdp-port 9222 # cpu-profile a driveable sim
78
78
  sootsim debug enable layout,render && sootsim debug recent layout 40