sootsim 0.1.210 → 0.1.212

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 (147) hide show
  1. package/README.md +10 -9
  2. package/dist-cli/bin.js +4 -4
  3. package/dist-cli/chunks/{agent-KAQZXQI7.js → agent-SEHSNZX6.js} +2 -2
  4. package/dist-cli/chunks/{agent-wrapper-2FEBECLE.js → agent-wrapper-YMUSFYO4.js} +2 -2
  5. package/dist-cli/chunks/{app-fonts-527RTD7E.js → app-fonts-P7IHVY46.js} +2 -2
  6. package/dist-cli/chunks/{assert-FD7ABNEJ.js → assert-AZZHFMFN.js} +2 -2
  7. package/dist-cli/chunks/{auth-U5CEZXAX.js → auth-QWPDQK3C.js} +2 -2
  8. package/dist-cli/chunks/beta-G6PO4MUG.js +2 -0
  9. package/dist-cli/chunks/{camera-OIURHC5C.js → camera-LQTWHUE6.js} +2 -2
  10. package/dist-cli/chunks/chunk-2ZF3OFCV.js +1 -0
  11. package/dist-cli/chunks/{chunk-PH46EVF3.js → chunk-3L6FBCSH.js} +2 -2
  12. package/dist-cli/chunks/chunk-44LPHPGF.js +2 -0
  13. package/dist-cli/chunks/{chunk-VVRIRW4K.js → chunk-4AEJLWKA.js} +1 -1
  14. package/dist-cli/chunks/{chunk-IPX2D5AJ.js → chunk-4IBUPIN6.js} +1 -1
  15. package/dist-cli/chunks/{chunk-3ZZ4QGEW.js → chunk-4RU6YTEP.js} +1 -1
  16. package/dist-cli/chunks/{chunk-MVIWCOR3.js → chunk-5FQMI3PB.js} +1 -1
  17. package/dist-cli/chunks/{chunk-VCFHK3EU.js → chunk-6DPNSUZZ.js} +1 -1
  18. package/dist-cli/chunks/{chunk-XRUPDNSR.js → chunk-7BH3S3L3.js} +2 -2
  19. package/dist-cli/chunks/{chunk-P6L7NTH2.js → chunk-7SYXBGM2.js} +2 -2
  20. package/dist-cli/chunks/{chunk-ATMXAOZC.js → chunk-7T4AAWY2.js} +2 -2
  21. package/dist-cli/chunks/{chunk-AYU7TPLY.js → chunk-ACGAAVPX.js} +2 -2
  22. package/dist-cli/chunks/{chunk-T7SAFPA6.js → chunk-AOUNFYEN.js} +1 -1
  23. package/dist-cli/chunks/{chunk-WTJP6C4W.js → chunk-ATFY2JZZ.js} +51 -51
  24. package/dist-cli/chunks/{chunk-BCDCPHIB.js → chunk-DOCQ4YBT.js} +2 -2
  25. package/dist-cli/chunks/{chunk-QMS2S3EF.js → chunk-DWL4WFZ2.js} +1 -1
  26. package/dist-cli/chunks/{chunk-KWAAJUF2.js → chunk-ERG3QCK4.js} +1 -1
  27. package/dist-cli/chunks/{chunk-NLRGBEDV.js → chunk-ETXSEPTH.js} +2 -2
  28. package/dist-cli/chunks/{chunk-XUXEKCY2.js → chunk-FMITPB4T.js} +2 -2
  29. package/dist-cli/chunks/{chunk-DO4AU4FA.js → chunk-FSJQB6FI.js} +2 -2
  30. package/dist-cli/chunks/{chunk-74SGAJAJ.js → chunk-HTX3YVCJ.js} +2 -2
  31. package/dist-cli/chunks/{chunk-NV7QTS3L.js → chunk-KOARSZSJ.js} +1 -1
  32. package/dist-cli/chunks/{chunk-LO7DZIFS.js → chunk-KRJRWLOW.js} +1 -1
  33. package/dist-cli/chunks/chunk-MTIPOS45.js +1 -0
  34. package/dist-cli/chunks/{chunk-GCW2PJGE.js → chunk-O7K44ZT6.js} +2 -2
  35. package/dist-cli/chunks/{chunk-VAMOANYW.js → chunk-OHRSRPEB.js} +11 -11
  36. package/dist-cli/chunks/{chunk-5S7BCA4C.js → chunk-QG3N3XNK.js} +3 -3
  37. package/dist-cli/chunks/{chunk-XTKTKQIT.js → chunk-QXDO6QT5.js} +2 -2
  38. package/dist-cli/chunks/{chunk-KEWZBN4M.js → chunk-SC67TYH6.js} +1 -1
  39. package/dist-cli/chunks/{chunk-7YKBZB7D.js → chunk-SPEEWUAK.js} +4 -4
  40. package/dist-cli/chunks/chunk-SX5MJUQC.js +119 -0
  41. package/dist-cli/chunks/{chunk-SX5M6VA3.js → chunk-TBLMSWZ6.js} +1 -1
  42. package/dist-cli/chunks/{chunk-KLPGPFZF.js → chunk-TKGMBU6V.js} +2 -2
  43. package/dist-cli/chunks/{chunk-USLCZL6I.js → chunk-TPD4GIHM.js} +2 -2
  44. package/dist-cli/chunks/{chunk-KCGE56W3.js → chunk-TUMOXM4E.js} +2 -2
  45. package/dist-cli/chunks/{chunk-FF7B5JFA.js → chunk-TWNBIOWX.js} +1 -1
  46. package/dist-cli/chunks/{chunk-FMIR4NMA.js → chunk-TWNZ24EL.js} +1 -1
  47. package/dist-cli/chunks/{chunk-2RJ57USW.js → chunk-W7RH3GDB.js} +2 -2
  48. package/dist-cli/chunks/{chunk-VMRT3K3M.js → chunk-WLFIL6JU.js} +2 -2
  49. package/dist-cli/chunks/{chunk-4X3L2WDG.js → chunk-WSI6YFMI.js} +3 -3
  50. package/dist-cli/chunks/{chunk-SVLKYHDO.js → chunk-YFXU4HRJ.js} +1 -1
  51. package/dist-cli/chunks/{chunk-PIONEQXI.js → chunk-YNEFNAKF.js} +2 -2
  52. package/dist-cli/chunks/cli-version-YGN377WG.js +2 -0
  53. package/dist-cli/chunks/{compat-2QLPOPPM.js → compat-GLOXSMDS.js} +3 -3
  54. package/dist-cli/chunks/{config-U3Z5QR5Q.js → config-QLSJASDG.js} +2 -2
  55. package/dist-cli/chunks/{control-YUIGGT7H.js → control-HW7J3XVA.js} +2 -2
  56. package/dist-cli/chunks/daemon-66EHUQG5.js +2 -0
  57. package/dist-cli/chunks/{debug-Z5LPQGQY.js → debug-Q2STL45F.js} +3 -3
  58. package/dist-cli/chunks/{desktop-2MG6MKXV.js → desktop-LJJVJIU3.js} +3 -3
  59. package/dist-cli/chunks/{detox-OWZNY37O.js → detox-WBTVTSHD.js} +4 -4
  60. package/dist-cli/chunks/{device-PQN5ZIOA.js → device-E3JPFQZM.js} +2 -2
  61. package/dist-cli/chunks/{diagnose-A5XCL535.js → diagnose-VECVKV6Z.js} +2 -2
  62. package/dist-cli/chunks/drivers-SOBHAYVL.js +2 -0
  63. package/dist-cli/chunks/flow-P3QRESKR.js +2 -0
  64. package/dist-cli/chunks/help-NHIRWWJQ.js +2 -0
  65. package/dist-cli/chunks/{home-paths-SD3NRI7J.js → home-paths-CRN2V4ZP.js} +2 -2
  66. package/dist-cli/chunks/inspect-DAGGHG65.js +2 -0
  67. package/dist-cli/chunks/install-desktop-HLFM6Q6M.js +2 -0
  68. package/dist-cli/chunks/{login-7V3C7LUJ.js → login-FZTKNUQU.js} +4 -4
  69. package/dist-cli/chunks/{logout-MMMVGJ65.js → logout-FBH74CJM.js} +2 -2
  70. package/dist-cli/chunks/{maestro-KPKOSHF5.js → maestro-NRDQGJYE.js} +17 -11
  71. package/dist-cli/chunks/maestro-generate-RFAXAENX.js +34 -0
  72. package/dist-cli/chunks/{mode-SPC2PQIA.js → mode-IXMJSPUT.js} +2 -2
  73. package/dist-cli/chunks/optional-demo-registry-ZDULKK6R.js +2 -0
  74. package/dist-cli/chunks/{perf-S6P6POGY.js → perf-K2IHHZXM.js} +2 -2
  75. package/dist-cli/chunks/{record-MSARERUQ.js → record-RE6KIPXY.js} +3 -3
  76. package/dist-cli/chunks/runtime-BFBAWZDT.js +2 -0
  77. package/dist-cli/chunks/{screenshot-command-BWEJO65L.js → screenshot-command-S47YKHRV.js} +6 -6
  78. package/dist-cli/chunks/{screenshots-capture-6O4U2QZP.js → screenshots-capture-ZTG4V52X.js} +2 -2
  79. package/dist-cli/chunks/{serve-B3GZM4I2.js → serve-3AWTKYDJ.js} +2 -2
  80. package/dist-cli/chunks/{setup-BVF7AE4F.js → setup-66M64ZEI.js} +3 -3
  81. package/dist-cli/chunks/{skills-OOGMXBUU.js → skills-2UDI5RNU.js} +2 -2
  82. package/dist-cli/chunks/{storage-B6KLLSZ5.js → storage-XNTIUIYR.js} +2 -2
  83. package/dist-cli/chunks/store-YOG762Q4.js +2 -0
  84. package/dist-cli/chunks/telemetry-ZANU3YOO.js +2 -0
  85. package/dist-cli/chunks/{timeline-DNEEKXNB.js → timeline-VMPCXPKA.js} +2 -2
  86. package/dist-cli/chunks/{upgrade-4QBAXVEE.js → upgrade-UYXVI3XZ.js} +2 -2
  87. package/dist-cli/chunks/upload-RNDBU5AE.js +2 -0
  88. package/dist-cli/chunks/{version-GZ3CPO3H.js → version-I62N7JTP.js} +2 -2
  89. package/dist-cli/chunks/{web-NTF5XYWV.js → web-42YNSI2X.js} +2 -2
  90. package/dist-cli/chunks/{what-happened-XIXJ455M.js → what-happened-3TVVRSN4.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 +109 -109
  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-77XRUQXG.js +0 -2
  131. package/dist-cli/chunks/chunk-2HT73DM2.js +0 -119
  132. package/dist-cli/chunks/chunk-CQHQSDDJ.js +0 -2
  133. package/dist-cli/chunks/chunk-JY6W7FJK.js +0 -1
  134. package/dist-cli/chunks/chunk-O4QDSXAR.js +0 -1
  135. package/dist-cli/chunks/cli-version-HFRMOBQC.js +0 -2
  136. package/dist-cli/chunks/daemon-6SB37NMK.js +0 -2
  137. package/dist-cli/chunks/drivers-JVQ2IGFA.js +0 -2
  138. package/dist-cli/chunks/flow-ENY24D57.js +0 -2
  139. package/dist-cli/chunks/help-O4NYJLMW.js +0 -2
  140. package/dist-cli/chunks/inspect-B4GJTKF4.js +0 -2
  141. package/dist-cli/chunks/install-desktop-PE662CEU.js +0 -2
  142. package/dist-cli/chunks/optional-demo-registry-ZXW3LBUE.js +0 -2
  143. package/dist-cli/chunks/runtime-S3TTT5GK.js +0 -2
  144. package/dist-cli/chunks/store-VT7DQ5SF.js +0 -2
  145. package/dist-cli/chunks/telemetry-7K33P734.js +0 -2
  146. package/dist-cli/chunks/test-TN3KDDT2.js +0 -69
  147. package/dist-cli/chunks/upload-T6F6NRSY.js +0 -2
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-SVLKYHDO.js";import"./chunk-FF7B5JFA.js";export{a as getCliVersion};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d,e}from"./chunk-NLRGBEDV.js";import"./chunk-P6L7NTH2.js";import"./chunk-GCW2PJGE.js";import"./chunk-VMRT3K3M.js";import"./chunk-DO4AU4FA.js";import"./chunk-2HT73DM2.js";import"./chunk-XRUPDNSR.js";import"./chunk-MVIWCOR3.js";import"./chunk-QMS2S3EF.js";import"./chunk-KWAAJUF2.js";import"./chunk-SVLKYHDO.js";import"./chunk-KEWZBN4M.js";import"./chunk-T7SAFPA6.js";import"./chunk-FF7B5JFA.js";export{c as daemonInstall,b as getDaemonServiceStatus,a as runDaemon,d as teardownDaemonService,e as teardownSootsimHome};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import"./chunk-O4QDSXAR.js";import{f as a,g as b,h as c,i as d,j as e,k as f,l as g,m as h,n as i}from"./chunk-XTKTKQIT.js";import"./chunk-3ZZ4QGEW.js";import"./chunk-SX5M6VA3.js";import"./chunk-QMS2S3EF.js";import"./chunk-KWAAJUF2.js";import"./chunk-FF7B5JFA.js";export{e as ALL_DRIVERS,i as buildDriverListRows,a as chromiumDriver,b as electronDriver,f as getAllDrivers,g as getDriver,c as playwrightDriver,h as resolveDriver,d as systemDriver};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{c,d,e,f,g,h}from"./chunk-WTJP6C4W.js";import{c as a,d as b}from"./chunk-7YKBZB7D.js";import"./chunk-2RJ57USW.js";import"./chunk-BCDCPHIB.js";import"./chunk-VAMOANYW.js";import"./chunk-PIONEQXI.js";import"./chunk-XUXEKCY2.js";import"./chunk-74SGAJAJ.js";import"./chunk-JY6W7FJK.js";import"./chunk-FMIR4NMA.js";import"./chunk-LO7DZIFS.js";import"./chunk-NV7QTS3L.js";import"./chunk-USLCZL6I.js";import"./chunk-IPX2D5AJ.js";import"./chunk-KCGE56W3.js";import"./chunk-XTKTKQIT.js";import"./chunk-3ZZ4QGEW.js";import"./chunk-SX5M6VA3.js";import"./chunk-CQHQSDDJ.js";import"./chunk-PH46EVF3.js";import"./chunk-P6L7NTH2.js";import"./chunk-GCW2PJGE.js";import"./chunk-2HT73DM2.js";import"./chunk-XRUPDNSR.js";import"./chunk-MVIWCOR3.js";import"./chunk-QMS2S3EF.js";import"./chunk-KWAAJUF2.js";import"./chunk-T7SAFPA6.js";import"./chunk-FF7B5JFA.js";export{e as discoverSootsimUrl,c as getLastFlowPreviewUploadResult,d as getLastFlowTraceSteps,g as hoistLeadingSimFlag,a as parseFlowFile,h as runFlow,f as runFlowPlayback,b as validateFlowFile};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-VMRT3K3M.js";import"./chunk-DO4AU4FA.js";import"./chunk-2HT73DM2.js";import"./chunk-XRUPDNSR.js";import"./chunk-MVIWCOR3.js";import"./chunk-QMS2S3EF.js";import"./chunk-KWAAJUF2.js";import"./chunk-SVLKYHDO.js";import"./chunk-KEWZBN4M.js";import"./chunk-T7SAFPA6.js";import"./chunk-FF7B5JFA.js";export{c as printCommandHelp,b as printGroupHelp,a as printHelp};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{j as a,k as b}from"./chunk-7YKBZB7D.js";import"./chunk-2RJ57USW.js";import"./chunk-XUXEKCY2.js";import"./chunk-74SGAJAJ.js";import"./chunk-JY6W7FJK.js";import"./chunk-FMIR4NMA.js";import"./chunk-LO7DZIFS.js";import"./chunk-NV7QTS3L.js";import"./chunk-USLCZL6I.js";import"./chunk-IPX2D5AJ.js";import"./chunk-KCGE56W3.js";import"./chunk-XTKTKQIT.js";import"./chunk-3ZZ4QGEW.js";import"./chunk-SX5M6VA3.js";import"./chunk-CQHQSDDJ.js";import"./chunk-PH46EVF3.js";import"./chunk-2HT73DM2.js";import"./chunk-XRUPDNSR.js";import"./chunk-MVIWCOR3.js";import"./chunk-QMS2S3EF.js";import"./chunk-KWAAJUF2.js";import"./chunk-T7SAFPA6.js";import"./chunk-FF7B5JFA.js";export{a as printShellPerfReport,b as runInspect};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-4X3L2WDG.js";import"./chunk-VCFHK3EU.js";import"./chunk-3ZZ4QGEW.js";import"./chunk-FF7B5JFA.js";export{a as runInstallDesktop};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b}from"./chunk-NV7QTS3L.js";import"./chunk-FF7B5JFA.js";export{a as loadOptionalDemoApps,b as optionalDemoAppsSync};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-5S7BCA4C.js";import"./chunk-AYU7TPLY.js";import"./chunk-KCGE56W3.js";import"./chunk-MVIWCOR3.js";import"./chunk-QMS2S3EF.js";import"./chunk-KWAAJUF2.js";import"./chunk-FF7B5JFA.js";export{a as runRuntime};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-PH46EVF3.js";import"./chunk-T7SAFPA6.js";import"./chunk-FF7B5JFA.js";export{a as settingsStore};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b}from"./chunk-P6L7NTH2.js";import"./chunk-GCW2PJGE.js";import"./chunk-KWAAJUF2.js";import"./chunk-FF7B5JFA.js";export{b as flushCliTelemetry,a as trackCliEvent};
@@ -1,69 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as P,b as N,c as A}from"./chunk-KLPGPFZF.js";import{a as L}from"./chunk-2RJ57USW.js";import{a as k}from"./chunk-VAMOANYW.js";import{a as O,b as M}from"./chunk-PIONEQXI.js";import"./chunk-FMIR4NMA.js";import"./chunk-LO7DZIFS.js";import{f as F}from"./chunk-IPX2D5AJ.js";import{g as D,i as E}from"./chunk-KCGE56W3.js";import"./chunk-SX5M6VA3.js";import"./chunk-P6L7NTH2.js";import"./chunk-GCW2PJGE.js";import"./chunk-MVIWCOR3.js";import"./chunk-QMS2S3EF.js";import"./chunk-KWAAJUF2.js";import"./chunk-FF7B5JFA.js";import{spawn as Y}from"child_process";import{existsSync as _,mkdtempSync as H,readdirSync as I,writeFileSync as G}from"fs";import{tmpdir as K}from"os";import{resolve as S,dirname as z,join as R,relative as X}from"path";import{fileURLToPath as q}from"url";var $=z(q(import.meta.resolve("sootsim-engine/package.json"))),Q=process.env.SOOTSIM_TEST_MODEL||"deepseek-v4-flash",j=18e3,Z=18e4;async function Te(e,t){let n=e.includes("--flows"),u=e.includes("--detox"),l=e.includes("--parallel"),s=e.includes("--watch"),a=e.find((i,c)=>e[c-1]==="--reporter")||"console",o=ee(e);if((e.includes("--help")||e.includes("-h"))&&(console.log(`
3
- sootsim test \u2014 run tests against sootsim
4
-
5
- usage:
6
- sootsim test [options]
7
- sootsim test "natural language goal" [--owner <org> --repo <repo>]
8
-
9
- modes:
10
- (default) run package-local playwright tests
11
- "<prompt>" generate, run, upload, and register a replayable flow
12
- --flows run YAML flows
13
- --detox run shared Detox-style conformance suites
14
-
15
- options:
16
- --parallel run tests in parallel
17
- --watch re-run on changes
18
- --reporter output format (console|json|junit)
19
- --origin sootbean upload / LLM origin (default: auto)
20
- --owner org account to attach the uploaded run to
21
- --repo repo name for --owner
22
- -t, --testNamePattern <pat>
23
- filter tests by name
24
-
25
- examples:
26
- sootsim test
27
- sootsim test "tap the login button and verify the welcome screen"
28
- sootsim test --flows
29
- sootsim test --detox --watch
30
- sootsim test -t "login"
31
-
32
- notes:
33
- playwright is best for smoke and package-local debugging
34
- --detox is the preferred parity lane for behavior that should match real RN
35
- `),process.exit(0)),o&&!n&&!u)await ce(o.prompt,o.index,e,t);else if(n)await pe(e,t,l,a);else if(u){let{runDetox:i}=await import("./detox-OWZNY37O.js");await i(e.filter(c=>c!=="--detox"),t)}else await ue(e,t)}function h(e,t){let n=e.indexOf(t);return n>=0?e[n+1]:void 0}function C(e,t){for(let n of t){let u=h(e,n);if(u)return u}}var J=new Set(["--reporter","-t","--testNamePattern","--grep","--origin","--preview-origin","--public-origin","--preview-public-origin","--owner","--repo","--url","--driver","--sim","--device","--slow","--tail-wait","--remap","--replace"]);function ee(e){for(let t=0;t<e.length;t++){let n=e[t];if(n){if(J.has(n)){t+=1;continue}if(!n.startsWith("-"))return _(n)||/\.(?:[cm]?[jt]sx?|ya?ml|json)$/i.test(n)||!/\s/.test(n)&&n.length<16?null:{prompt:n,index:t}}}return null}function te(e,t){return e.filter((n,u)=>u!==t)}async function ne(e,t){let n=te(e,t),u=D(n,{stripBooleanFlags:["--parallel","--watch","--flows","--detox","--new","--headless","--headed","--electron","--preview-open"],stripValueFlags:[...J]}),l=E(u);try{let s=await F(l,{describe:!0,verbose:!1,filter:"",compact:!0,hideXy:!0}),o=[s.shell?`shell: ${JSON.stringify(s.shell)}`:"",s.keyboard?`keyboard: ${JSON.stringify(s.keyboard)}`:"",typeof s.nodeCount=="number"?`nodes: ${s.nodeCount}`:"",s.tree||""].filter(Boolean).join(`
36
- `);return o.length>j?o.slice(0,j)+`
37
- [tree truncated]`:o}finally{l.close()}}var oe=`
38
- You write SootSim YAML flows from a user's natural-language test goal.
39
- Return only JSON, no markdown, with this exact shape:
40
- {"summary":"short human-readable result goal","steps":[{"waitFor":{"text":"...","timeout":10000}}]}
41
-
42
- Use only these flow commands:
43
- - waitFor: { "text"?: string, "id"?: string, "timeout"?: number }
44
- - assertVisible: string or { "text"?: string, "id"?: string }
45
- - assertNotVisible: string or { "text"?: string, "id"?: string }
46
- - tapOn: string or { "text"?: string, "id"?: string, "index"?: number }
47
- - inputText: string
48
- - pressKey: string
49
- - hideKeyboard: true
50
- - swipe: { "direction": "UP" | "DOWN" | "LEFT" | "RIGHT", "duration"?: number }
51
- - waitForAnimationToEnd: true
52
- - takeScreenshot: "label"
53
-
54
- Prefer ids/testIDs from the tree. Prefer visible text when no id exists.
55
- Do not invent app-specific data that is not visible. Keep the flow short.
56
- End with an assertion or wait that proves the user's goal.
57
- `.trim();function re(e,t){return`
58
- User goal:
59
- ${e}
60
-
61
- Current SootSim visible tree:
62
- ${t||"[no tree available]"}
63
-
64
- Generate the shortest replayable flow that verifies the goal from this current state.
65
- `.trim()}function U(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>t&&typeof t=="object"&&t.type==="text"?String(t.text??""):"").join(""):""}async function se(e){let t=await fetch(`${e.origin.replace(/\/$/,"")}/api/llm`,{method:"POST",headers:{"content-type":"application/json",authorization:e.authHeader},body:JSON.stringify({modelId:Q,context:{systemPrompt:oe,messages:[{role:"user",content:re(e.prompt,e.describe),timestamp:Date.now()}]},options:{maxTokens:1800,temperature:.2},threadId:null}),signal:AbortSignal.timeout(Z)});if(!t.ok||!t.body){let c=await t.text().catch(()=>"");throw new Error(`/api/llm ${t.status}${c?`: ${c}`:""}`)}let n=t.body.getReader(),u=new TextDecoder,l=[],s="",a="",o=c=>{let p=c.trim();if(!p)return;let r=JSON.parse(p);if(r.type==="text_delta"&&r.delta)l.push(r.delta);else if(r.type==="text_end"&&r.content)s=r.content;else if(r.type==="done")s=U(r.message?.content);else if(r.type==="error")throw new Error(r.error?.errorMessage||U(r.error?.content)||"llm error")};for(;;){let{value:c,done:p}=await n.read();if(p)break;a+=u.decode(c,{stream:!0});let r;for(;(r=a.indexOf(`
66
- `))>=0;)o(a.slice(0,r)),a=a.slice(r+1)}a+=u.decode(),a.trim()&&o(a);let i=(s||l.join("")).trim();if(!i)throw new Error("llm returned an empty test flow");return i}function ie(e){let t=e.match(/```(?:json)?\s*([\s\S]*?)```/i),n=t?t[1]:e.slice(e.indexOf("{"),e.lastIndexOf("}")+1);return JSON.parse(n)}function B(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function le(e){let t=ie(e);if(!B(t))throw new Error("llm did not return a JSON object");let n=typeof t.summary=="string"&&t.summary.trim()?t.summary.trim().slice(0,500):"SootSim generated test",u=t.steps;if(!Array.isArray(u)||u.length===0)throw new Error("llm returned no flow steps");let l=u.map((s,a)=>{if(!B(s))throw new Error(`flow step ${a+1} is not an object`);return s});return{summary:n,steps:l,yamlText:L.stringify(l)}}function ae(e,t,n,u){let l=[n,"--preview","--preview-origin",u,"--billing-kind","test_run"],s=new Set(["--public-origin","--preview-public-origin","--owner","--repo","--url","--driver","--sim","--device","--slow","--tail-wait","--remap","--replace"]),a=new Set(["--new","--headless","--headed","--electron","--preview-open","--no-shell","--shell-only"]);for(let o=0;o<e.length;o++){if(o===t)continue;let i=e[o];if(i==="--origin"||i==="--preview-origin"){o+=1;continue}if(i==="--public-origin"){let c=e[o+1];c&&l.push("--preview-public-origin",c),o+=1;continue}if(s.has(i)){let c=e[o+1];c&&l.push(i,c),o+=1;continue}a.has(i)&&l.push(i)}return l}async function ce(e,t,n,u){let l=O();(!l||l.kind==="github")&&(console.error(' sootsim test "<prompt>" needs a login or SOOTSIM_API_KEY.'),console.error(" API keys must include preview_upload and llm scopes."),process.exit(1));let s=M(l),a=await k(C(n,["--origin","--preview-origin"]));console.log(" inspecting current sim\u2026");let o=await ne(n,t);console.log(" generating flow\u2026");let i=await se({prompt:e,describe:o,origin:a,authHeader:s}),c=le(i),p=H(R(K(),"sootsim-test-")),r=R(p,"flow.yaml");G(r,c.yamlText),console.log(` flow: ${r}`);let m=Date.now(),{runFlowPlayback:d,getLastFlowPreviewUploadResult:v,getLastFlowTraceSteps:y}=await import("./flow-ENY24D57.js"),w=ae(n,t,r,a),g=await d(w),f=v(),b=y(),V=b.find(W=>W.status==="failure"),T=g===0?"passed":"failed",x=await A({origin:a,kind:"nl",prompt:e,summary:c.summary,status:T,failureMessage:T==="failed"?V?.error??"flow playback failed":null,previewShareId:f?.shareId??null,owner:h(n,"--owner")??null,repo:h(n,"--repo")??null,durationMs:Date.now()-m,flowYamlSizeBytes:Buffer.byteLength(c.yamlText,"utf8"),...P(b),auth:l});console.log(`
67
- result: ${T}`),x&&console.log(` run: ${x.id}`),f?.previewUrl&&console.log(` preview: ${f.previewUrl}`),x?.traceUrl&&console.log(` replay: ${x.traceUrl}`),process.exit(g)}async function ue(e,t){let n=["playwright","test"],u=e.find((o,i)=>e[i-1]==="-t")||e.find((o,i)=>e[i-1]==="--testNamePattern")||e.find((o,i)=>e[i-1]==="--grep");u&&n.push("-g",u),e.includes("--watch")&&n.push("--ui");let l=new Set(["--flows","--detox","--parallel","--watch","--reporter","-t","--testNamePattern","--grep"]);for(let o=0;o<e.length;o++){if(l.has(e[o])){(e[o]==="-t"||e[o]==="--testNamePattern"||e[o]==="--grep"||e[o]==="--reporter")&&o++;continue}n.push(e[o])}console.log(` running: npx ${n.join(" ")}`);let s=Y("npx",n,{cwd:$,stdio:"inherit",env:{...process.env}}),a=await new Promise(o=>{s.on("exit",i=>o(i||0))});process.exit(a)}async function pe(e,t,n,u){let l=["flows","test/flows","e2e/flows",".maestro","maestro"],s=[];for(let p of l){let r=S($,p);if(_(r)){let m=I(r).filter(d=>d.endsWith(".yaml")||d.endsWith(".yml"));for(let d of m)s.push(S(r,d))}}for(let p of l){let r=S(process.cwd(),p);if(!r.startsWith($)&&_(r)){let m=I(r).filter(d=>d.endsWith(".yaml")||d.endsWith(".yml"));for(let d of m)s.push(S(r,d))}}s.length===0&&(console.log(" no flow files found in flows/, test/flows/, or e2e/flows/"),process.exit(0)),console.log(` found ${s.length} flow(s)`);let a=O(),o=await k(C(e,["--origin","--preview-origin"])),i=0,c=0;for(let p of s){let r=1,m=Date.now();try{let{runFlowPlayback:w}=await import("./flow-ENY24D57.js"),g=t.port?`http://localhost:${t.port}`:"http://localhost:5173";r=await w([p,"--url",g,"--new"])}catch{r=1}r===0?i++:c++;let{getLastFlowPreviewUploadResult:d,getLastFlowTraceSteps:v}=await import("./flow-ENY24D57.js"),y=d();if(N({uploadedShare:!!y,auth:a})){let w=v(),g=w.find(b=>b.status==="failure"),f=await A({origin:o,kind:"flow",name:X(process.cwd(),p),status:r===0?"passed":"failed",failureMessage:r===0?null:g?.error??"flow playback failed",previewShareId:y?.shareId??null,owner:h(e,"--owner")??null,repo:h(e,"--repo")??null,durationMs:Date.now()-m,...P(w),auth:a});f&&console.log(` run: ${f.id}${f.traceUrl?` \xB7 replay: ${f.traceUrl}`:""}`)}}console.log(`
68
- results: ${i} passed, ${c} failed (${s.length} total)
69
- `),process.exit(c>0?1:0)}export{Te as runTest};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.210 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-VAMOANYW.js";import"./chunk-PIONEQXI.js";import"./chunk-FMIR4NMA.js";import"./chunk-LO7DZIFS.js";import"./chunk-KCGE56W3.js";import"./chunk-SX5M6VA3.js";import"./chunk-P6L7NTH2.js";import"./chunk-GCW2PJGE.js";import"./chunk-MVIWCOR3.js";import"./chunk-QMS2S3EF.js";import"./chunk-KWAAJUF2.js";import"./chunk-FF7B5JFA.js";export{a as resolveDefaultUploadOrigin,b as resolvePublicPreviewOrigin,c as runUpload};