sootsim 0.1.193 → 0.1.194

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 (138) hide show
  1. package/dist-cli/bin.js +3 -3
  2. package/dist-cli/chunks/{agent-USE53A6G.js → agent-CM42FXZ2.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-NNPLVD2D.js → agent-wrapper-RTNUXAUA.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-K6BJQ5PV.js → app-fonts-GRO4JNA7.js} +2 -2
  5. package/dist-cli/chunks/{assert-OBYCJT6E.js → assert-KOOROQJI.js} +2 -2
  6. package/dist-cli/chunks/{auth-QAZ3NU2P.js → auth-ASS7OY74.js} +2 -2
  7. package/dist-cli/chunks/beta-G6FAR5KL.js +2 -0
  8. package/dist-cli/chunks/{camera-ND7VAW2Z.js → camera-LPPMHGJQ.js} +2 -2
  9. package/dist-cli/chunks/{chunk-R62P6SPR.js → chunk-454SCBS7.js} +2 -2
  10. package/dist-cli/chunks/{chunk-ICI5UOHJ.js → chunk-4YYFY5HM.js} +1 -1
  11. package/dist-cli/chunks/{chunk-3RKAEUTW.js → chunk-5WHIIC72.js} +2 -2
  12. package/dist-cli/chunks/{chunk-UG44WJ5U.js → chunk-63GQM7YC.js} +2 -2
  13. package/dist-cli/chunks/{chunk-HRH5AL5T.js → chunk-6RARYOEL.js} +2 -2
  14. package/dist-cli/chunks/{chunk-ZMYHC2GZ.js → chunk-7CNBR64U.js} +1 -1
  15. package/dist-cli/chunks/{chunk-XX5ABTZE.js → chunk-CGC6VL3E.js} +1 -1
  16. package/dist-cli/chunks/{chunk-73RUAURY.js → chunk-CQPAW4BG.js} +2 -2
  17. package/dist-cli/chunks/chunk-DJSMPGAY.js +1 -0
  18. package/dist-cli/chunks/{chunk-HNBFCX26.js → chunk-DZCTXHGC.js} +2 -2
  19. package/dist-cli/chunks/{chunk-HFKXGD6F.js → chunk-EKLBXHUK.js} +1 -1
  20. package/dist-cli/chunks/{chunk-2H5WTYZB.js → chunk-EZCGWPX4.js} +1 -1
  21. package/dist-cli/chunks/{chunk-KNPIQNLB.js → chunk-FFR4USO5.js} +2 -2
  22. package/dist-cli/chunks/{chunk-EBRAQH3D.js → chunk-H6CPDHFG.js} +3 -3
  23. package/dist-cli/chunks/{chunk-3FZ2YUUP.js → chunk-HSC4YJX7.js} +2 -2
  24. package/dist-cli/chunks/{chunk-OOGJDQMT.js → chunk-HU4ZXOLS.js} +1 -1
  25. package/dist-cli/chunks/{chunk-2OCQ4XLZ.js → chunk-I7YBEJW2.js} +2 -2
  26. package/dist-cli/chunks/{chunk-XNCFZ4UT.js → chunk-IKNJYCUF.js} +1 -1
  27. package/dist-cli/chunks/{chunk-WT4SBY54.js → chunk-IXLWH3XE.js} +4 -4
  28. package/dist-cli/chunks/{chunk-2YZKJ3ZJ.js → chunk-JOFQ67LV.js} +1 -1
  29. package/dist-cli/chunks/{chunk-EYUZLNLC.js → chunk-JPWVEJEC.js} +1 -1
  30. package/dist-cli/chunks/chunk-JQYDRLG5.js +1 -0
  31. package/dist-cli/chunks/{chunk-3HZLGWTB.js → chunk-JVJJWIDH.js} +3 -3
  32. package/dist-cli/chunks/{chunk-3HBRJVSY.js → chunk-K5IZM7I5.js} +1 -1
  33. package/dist-cli/chunks/{chunk-TYYWETOW.js → chunk-LCX3R5GU.js} +2 -2
  34. package/dist-cli/chunks/{chunk-PSP2WT3K.js → chunk-LDWXDKXP.js} +1 -1
  35. package/dist-cli/chunks/{chunk-ZWFFRBAR.js → chunk-NBT3VVSY.js} +2 -2
  36. package/dist-cli/chunks/{chunk-BQSG37WI.js → chunk-NQCAVMZZ.js} +2 -2
  37. package/dist-cli/chunks/{chunk-ZUV7FVK5.js → chunk-NZCCIUPD.js} +2 -2
  38. package/dist-cli/chunks/{chunk-JFURKF6W.js → chunk-P5VG36UG.js} +2 -2
  39. package/dist-cli/chunks/{chunk-UPP423YA.js → chunk-PIK54AHY.js} +2 -2
  40. package/dist-cli/chunks/{chunk-32JBVYL5.js → chunk-QWZBLVT4.js} +1 -1
  41. package/dist-cli/chunks/{chunk-QS73KI7T.js → chunk-RM4Q4CME.js} +1 -1
  42. package/dist-cli/chunks/{chunk-I25N6TF4.js → chunk-SIQUJOVP.js} +2 -2
  43. package/dist-cli/chunks/{chunk-U2QSYQUZ.js → chunk-TC34NFOE.js} +1 -1
  44. package/dist-cli/chunks/{chunk-VGICXM2C.js → chunk-V4U35I2X.js} +2 -2
  45. package/dist-cli/chunks/{chunk-6WL7GBOW.js → chunk-YFT6QNH3.js} +1 -1
  46. package/dist-cli/chunks/{chunk-RHKQEMHY.js → chunk-YZD3FUOU.js} +2 -2
  47. package/dist-cli/chunks/{chunk-7LAHDYZ3.js → chunk-Z2VLPNTW.js} +1 -1
  48. package/dist-cli/chunks/{chunk-2G4WS3NS.js → chunk-ZKV5SZCW.js} +2 -2
  49. package/dist-cli/chunks/{chunk-WS4H3OTZ.js → chunk-ZXTNCFPG.js} +3 -3
  50. package/dist-cli/chunks/cli-version-L74S57R3.js +2 -0
  51. package/dist-cli/chunks/{compat-FFXRTXLA.js → compat-7T7W3OC2.js} +3 -3
  52. package/dist-cli/chunks/{config-DSWOQ6FW.js → config-UMBFP5RC.js} +2 -2
  53. package/dist-cli/chunks/{control-CWME7T7P.js → control-IC2NOIT3.js} +2 -2
  54. package/dist-cli/chunks/daemon-PCQPUR6K.js +2 -0
  55. package/dist-cli/chunks/{debug-4TEW5NVC.js → debug-GTIWLJJM.js} +3 -3
  56. package/dist-cli/chunks/{desktop-UTUIQSY5.js → desktop-3P4KTBZ6.js} +3 -3
  57. package/dist-cli/chunks/{detox-QKN3QWEU.js → detox-HCQMS3NM.js} +2 -2
  58. package/dist-cli/chunks/{device-FIUY3FPI.js → device-7FBDA6PX.js} +2 -2
  59. package/dist-cli/chunks/{diagnose-2SB3E6PB.js → diagnose-PETKX4PH.js} +2 -2
  60. package/dist-cli/chunks/drivers-LY2JUEY7.js +2 -0
  61. package/dist-cli/chunks/flow-7DF6U3ID.js +2 -0
  62. package/dist-cli/chunks/help-PXW7E7CP.js +2 -0
  63. package/dist-cli/chunks/{home-paths-KMZQH425.js → home-paths-WB64RMAZ.js} +2 -2
  64. package/dist-cli/chunks/inspect-65JGU7SX.js +2 -0
  65. package/dist-cli/chunks/install-desktop-G4BHZ4HW.js +2 -0
  66. package/dist-cli/chunks/{login-PYS2PAFC.js → login-M2GVH7KT.js} +4 -4
  67. package/dist-cli/chunks/{logout-IUYFHCSL.js → logout-52H5QYAR.js} +2 -2
  68. package/dist-cli/chunks/{maestro-PXDF2QPV.js → maestro-G7YGMCVS.js} +2 -2
  69. package/dist-cli/chunks/{mode-D2UYKUXM.js → mode-SZKIDZVN.js} +2 -2
  70. package/dist-cli/chunks/optional-demo-registry-DUIJDZXH.js +2 -0
  71. package/dist-cli/chunks/{perf-6TPVXFHZ.js → perf-5QN2GXUG.js} +2 -2
  72. package/dist-cli/chunks/{record-BGGZBLUP.js → record-LNYLU7SU.js} +3 -3
  73. package/dist-cli/chunks/runtime-S74NISZH.js +2 -0
  74. package/dist-cli/chunks/{screenshot-command-UIF7HN7F.js → screenshot-command-A5U6EWBL.js} +2 -2
  75. package/dist-cli/chunks/{serve-AGSFVT5G.js → serve-B3H4W7FQ.js} +2 -2
  76. package/dist-cli/chunks/{setup-4CZ54EJ6.js → setup-P27VDHJN.js} +3 -3
  77. package/dist-cli/chunks/{skills-VYTEBBCP.js → skills-VYXXJXES.js} +2 -2
  78. package/dist-cli/chunks/{storage-ZXVK3T5Y.js → storage-5RS7F336.js} +2 -2
  79. package/dist-cli/chunks/store-VYO4FWD5.js +2 -0
  80. package/dist-cli/chunks/telemetry-BKSSASRW.js +2 -0
  81. package/dist-cli/chunks/{test-JOX7MZ67.js → test-2NPQK3UG.js} +5 -5
  82. package/dist-cli/chunks/{timeline-M4FXQUII.js → timeline-NTNC5Q3Z.js} +2 -2
  83. package/dist-cli/chunks/{upgrade-WS4EUZ5H.js → upgrade-MS6NV4ZZ.js} +2 -2
  84. package/dist-cli/chunks/upload-JUANX7G7.js +2 -0
  85. package/dist-cli/chunks/{version-UCCC26QU.js → version-NJWSIVF7.js} +2 -2
  86. package/dist-cli/chunks/{web-OP75SZAL.js → web-7UB25AI6.js} +2 -2
  87. package/dist-cli/chunks/{what-happened-IED7SETG.js → what-happened-YY6QNNFX.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 +1 -1
  117. package/dist-lib/sdk.mjs +1 -1
  118. package/dist-lib/skills.cjs +1 -1
  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-ODWHC4OS.js +0 -1
  126. package/dist-cli/chunks/chunk-VA6U55D3.js +0 -1
  127. package/dist-cli/chunks/cli-version-NE74BKVQ.js +0 -2
  128. package/dist-cli/chunks/daemon-ZCLZ7Q2G.js +0 -2
  129. package/dist-cli/chunks/drivers-ZMTRO2H7.js +0 -2
  130. package/dist-cli/chunks/flow-YUB6NHPN.js +0 -2
  131. package/dist-cli/chunks/help-2RQGMWFZ.js +0 -2
  132. package/dist-cli/chunks/inspect-XIR5LHB4.js +0 -2
  133. package/dist-cli/chunks/install-desktop-RQ6PDFCW.js +0 -2
  134. package/dist-cli/chunks/optional-demo-registry-DINFQX6N.js +0 -2
  135. package/dist-cli/chunks/runtime-7DFYO5OG.js +0 -2
  136. package/dist-cli/chunks/store-A5FTY6OM.js +0 -2
  137. package/dist-cli/chunks/telemetry-C2D5VTOD.js +0 -2
  138. 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{a as T}from"./chunk-R62P6SPR.js";import{a as P}from"./chunk-BQSG37WI.js";import{a as O,b as k}from"./chunk-ZWFFRBAR.js";import"./chunk-7LAHDYZ3.js";import"./chunk-HFKXGD6F.js";import{f as x}from"./chunk-QS73KI7T.js";import{g as S,i as v}from"./chunk-3FZ2YUUP.js";import"./chunk-2YZKJ3ZJ.js";import"./chunk-JFURKF6W.js";import"./chunk-VGICXM2C.js";import"./chunk-6WL7GBOW.js";import"./chunk-ZMYHC2GZ.js";import"./chunk-32JBVYL5.js";import"./chunk-OOGJDQMT.js";import{spawn as B}from"child_process";import{existsSync as g,mkdtempSync as R,readdirSync as $,writeFileSync as C}from"fs";import{tmpdir as J}from"os";import{resolve as d,dirname as Y,join as _}from"path";import{fileURLToPath as V}from"url";var h=Y(V(import.meta.resolve("sootsim-engine/package.json"))),H=process.env.SOOTSIM_TEST_MODEL||"deepseek-v4-flash",A=18e3,W=18e4;async function he(e,t){let n=e.includes("--flows"),c=e.includes("--detox"),a=e.includes("--parallel"),i=e.includes("--watch"),u=e.find((l,o)=>e[o-1]==="--reporter")||"console",r=G(e);if((e.includes("--help")||e.includes("-h"))&&(console.log(`
1
+ /*! sootsim v0.1.194 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{a as T}from"./chunk-454SCBS7.js";import{a as P}from"./chunk-NQCAVMZZ.js";import{a as O,b as k}from"./chunk-NBT3VVSY.js";import"./chunk-Z2VLPNTW.js";import"./chunk-EKLBXHUK.js";import{f as x}from"./chunk-RM4Q4CME.js";import{g as S,i as v}from"./chunk-HSC4YJX7.js";import"./chunk-JOFQ67LV.js";import"./chunk-P5VG36UG.js";import"./chunk-V4U35I2X.js";import"./chunk-YFT6QNH3.js";import"./chunk-7CNBR64U.js";import"./chunk-QWZBLVT4.js";import"./chunk-HU4ZXOLS.js";import{spawn as B}from"child_process";import{existsSync as g,mkdtempSync as R,readdirSync as $,writeFileSync as C}from"fs";import{tmpdir as J}from"os";import{resolve as d,dirname as Y,join as _}from"path";import{fileURLToPath as V}from"url";var h=Y(V(import.meta.resolve("sootsim-engine/package.json"))),H=process.env.SOOTSIM_TEST_MODEL||"deepseek-v4-flash",A=18e3,W=18e4;async function he(e,t){let n=e.includes("--flows"),c=e.includes("--detox"),a=e.includes("--parallel"),i=e.includes("--watch"),u=e.find((l,o)=>e[o-1]==="--reporter")||"console",r=G(e);if((e.includes("--help")||e.includes("-h"))&&(console.log(`
3
3
  sootsim test \u2014 run tests against sootsim
4
4
 
5
5
  usage:
@@ -32,7 +32,7 @@ examples:
32
32
  notes:
33
33
  playwright is best for smoke and package-local debugging
34
34
  --detox is the preferred parity lane for behavior that should match real RN
35
- `),process.exit(0)),r&&!n&&!c)await oe(r.prompt,r.index,e,t);else if(n)await ie(e,t,a,u);else if(c){let{runDetox:l}=await import("./detox-QKN3QWEU.js");await l(e.filter(o=>o!=="--detox"),t)}else await se(e,t)}function y(e,t){let n=e.indexOf(t);return n>=0?e[n+1]:void 0}function z(e,t){for(let n of t){let c=y(e,n);if(c)return c}}var F=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 G(e){for(let t=0;t<e.length;t++){let n=e[t];if(n){if(F.has(n)){t+=1;continue}if(!n.startsWith("-"))return g(n)||/\.(?:[cm]?[jt]sx?|ya?ml|json)$/i.test(n)||!/\s/.test(n)&&n.length<16?null:{prompt:n,index:t}}}return null}function K(e,t){return e.filter((n,c)=>c!==t)}async function X(e,t){let n=K(e,t),c=S(n,{stripBooleanFlags:["--parallel","--watch","--flows","--detox","--new","--headless","--headed","--electron","--preview-open"],stripValueFlags:[...F]}),a=v(c);try{let i=await x(a,{describe:!0,verbose:!1,filter:"",compact:!0,hideXy:!0}),r=[i.shell?`shell: ${JSON.stringify(i.shell)}`:"",i.keyboard?`keyboard: ${JSON.stringify(i.keyboard)}`:"",typeof i.nodeCount=="number"?`nodes: ${i.nodeCount}`:"",i.tree||""].filter(Boolean).join(`
35
+ `),process.exit(0)),r&&!n&&!c)await oe(r.prompt,r.index,e,t);else if(n)await ie(e,t,a,u);else if(c){let{runDetox:l}=await import("./detox-HCQMS3NM.js");await l(e.filter(o=>o!=="--detox"),t)}else await se(e,t)}function y(e,t){let n=e.indexOf(t);return n>=0?e[n+1]:void 0}function z(e,t){for(let n of t){let c=y(e,n);if(c)return c}}var F=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 G(e){for(let t=0;t<e.length;t++){let n=e[t];if(n){if(F.has(n)){t+=1;continue}if(!n.startsWith("-"))return g(n)||/\.(?:[cm]?[jt]sx?|ya?ml|json)$/i.test(n)||!/\s/.test(n)&&n.length<16?null:{prompt:n,index:t}}}return null}function K(e,t){return e.filter((n,c)=>c!==t)}async function X(e,t){let n=K(e,t),c=S(n,{stripBooleanFlags:["--parallel","--watch","--flows","--detox","--new","--headless","--headed","--electron","--preview-open"],stripValueFlags:[...F]}),a=v(c);try{let i=await x(a,{describe:!0,verbose:!1,filter:"",compact:!0,hideXy:!0}),r=[i.shell?`shell: ${JSON.stringify(i.shell)}`:"",i.keyboard?`keyboard: ${JSON.stringify(i.keyboard)}`:"",typeof i.nodeCount=="number"?`nodes: ${i.nodeCount}`:"",i.tree||""].filter(Boolean).join(`
36
36
  `);return r.length>A?r.slice(0,A)+`
37
37
  [tree truncated]`:r}finally{a.close()}}var q=`
38
38
  You write SootSim YAML flows from a user's natural-language test goal.
@@ -63,7 +63,7 @@ ${t||"[no tree available]"}
63
63
 
64
64
  Generate the shortest replayable flow that verifies the goal from this current state.
65
65
  `.trim()}function M(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 Z(e){let t=await fetch(`${e.origin.replace(/\/$/,"")}/api/llm`,{method:"POST",headers:{"content-type":"application/json",authorization:e.authHeader},body:JSON.stringify({modelId:H,context:{systemPrompt:q,messages:[{role:"user",content:Q(e.prompt,e.describe),timestamp:Date.now()}]},options:{maxTokens:1800,temperature:.2},threadId:null}),signal:AbortSignal.timeout(W)});if(!t.ok||!t.body){let o=await t.text().catch(()=>"");throw new Error(`/api/llm ${t.status}${o?`: ${o}`:""}`)}let n=t.body.getReader(),c=new TextDecoder,a=[],i="",u="",r=o=>{let p=o.trim();if(!p)return;let s=JSON.parse(p);if(s.type==="text_delta"&&s.delta)a.push(s.delta);else if(s.type==="text_end"&&s.content)i=s.content;else if(s.type==="done")i=M(s.message?.content);else if(s.type==="error")throw new Error(s.error?.errorMessage||M(s.error?.content)||"llm error")};for(;;){let{value:o,done:p}=await n.read();if(p)break;u+=c.decode(o,{stream:!0});let s;for(;(s=u.indexOf(`
66
- `))>=0;)r(u.slice(0,s)),u=u.slice(s+1)}u+=c.decode(),u.trim()&&r(u);let l=(i||a.join("")).trim();if(!l)throw new Error("llm returned an empty test flow");return l}function ee(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 E(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function te(e){let t=ee(e);if(!E(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",c=t.steps;if(!Array.isArray(c)||c.length===0)throw new Error("llm returned no flow steps");let a=c.map((i,u)=>{if(!E(i))throw new Error(`flow step ${u+1} is not an object`);return i});return{summary:n,steps:a,yamlText:T.stringify(a)}}function ne(e,t,n,c){let a=[n,"--preview","--preview-origin",c,"--billing-kind","test_run"],i=new Set(["--public-origin","--preview-public-origin","--owner","--repo","--url","--driver","--sim","--device","--slow","--tail-wait","--remap","--replace"]),u=new Set(["--new","--headless","--headed","--electron","--preview-open","--no-shell","--shell-only"]);for(let r=0;r<e.length;r++){if(r===t)continue;let l=e[r];if(l==="--origin"||l==="--preview-origin"){r+=1;continue}if(l==="--public-origin"){let o=e[r+1];o&&a.push("--preview-public-origin",o),r+=1;continue}if(i.has(l)){let o=e[r+1];o&&a.push(l,o),r+=1;continue}u.has(l)&&a.push(l)}return a}async function re(e){let t=await fetch(`${e.origin.replace(/\/$/,"")}/api/sootsim/test-runs`,{method:"POST",headers:{"content-type":"application/json",authorization:e.authHeader},body:JSON.stringify({prompt:e.prompt,summary:e.summary,status:e.status,failureMessage:e.failureMessage,previewShareId:e.previewShareId,owner:e.owner,repo:e.repo,durationMs:e.durationMs,flowYamlSizeBytes:e.flowYamlSizeBytes})});if(!t.ok){let a=await t.text().catch(()=>"");throw new Error(`/api/sootsim/test-runs ${t.status}${a?`: ${a}`:""}`)}let n=await t.json(),c=n.run?.id;if(!c)throw new Error("test run registration returned no id");return{id:c,traceUrl:n.run?.traceUrl??null,previewUrl:n.run?.previewUrl??null}}async function oe(e,t,n,c){let a=O();(!a||a.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 i=k(a),u=await P(z(n,["--origin","--preview-origin"]));console.log(" inspecting current sim\u2026");let r=await X(n,t);console.log(" generating flow\u2026");let l=await Z({prompt:e,describe:r,origin:u,authHeader:i}),o=te(l),p=R(_(J(),"sootsim-test-")),s=_(p,"flow.yaml");C(s,o.yamlText),console.log(` flow: ${s}`);let U=Date.now(),{runFlowPlayback:D,getLastFlowPreviewUploadResult:N}=await import("./flow-YUB6NHPN.js"),I=ne(n,t,s,u),b=await D(I),f=N(),m=b===0?"passed":"failed",L=y(n,"--owner"),j=y(n,"--repo"),w=await re({origin:u,authHeader:i,prompt:e,summary:o.summary,status:m,failureMessage:m==="failed"?"flow playback failed":void 0,previewShareId:f?.shareId??null,owner:L,repo:j,durationMs:Date.now()-U,flowYamlSizeBytes:Buffer.byteLength(o.yamlText,"utf8")});console.log(`
67
- result: ${m}`),console.log(` run: ${w.id}`),f?.previewUrl&&console.log(` preview: ${f.previewUrl}`),w.traceUrl&&console.log(` replay: ${w.traceUrl}`),process.exit(b)}async function se(e,t){let n=["playwright","test"],c=e.find((r,l)=>e[l-1]==="-t")||e.find((r,l)=>e[l-1]==="--testNamePattern")||e.find((r,l)=>e[l-1]==="--grep");c&&n.push("-g",c),e.includes("--watch")&&n.push("--ui");let a=new Set(["--flows","--detox","--parallel","--watch","--reporter","-t","--testNamePattern","--grep"]);for(let r=0;r<e.length;r++){if(a.has(e[r])){(e[r]==="-t"||e[r]==="--testNamePattern"||e[r]==="--grep"||e[r]==="--reporter")&&r++;continue}n.push(e[r])}console.log(` running: npx ${n.join(" ")}`);let i=B("npx",n,{cwd:h,stdio:"inherit",env:{...process.env}}),u=await new Promise(r=>{i.on("exit",l=>r(l||0))});process.exit(u)}async function ie(e,t,n,c){let a=["flows","test/flows","e2e/flows",".maestro","maestro"],i=[];for(let l of a){let o=d(h,l);if(g(o)){let p=$(o).filter(s=>s.endsWith(".yaml")||s.endsWith(".yml"));for(let s of p)i.push(d(o,s))}}for(let l of a){let o=d(process.cwd(),l);if(!o.startsWith(h)&&g(o)){let p=$(o).filter(s=>s.endsWith(".yaml")||s.endsWith(".yml"));for(let s of p)i.push(d(o,s))}}i.length===0&&(console.log(" no flow files found in flows/, test/flows/, or e2e/flows/"),process.exit(0)),console.log(` found ${i.length} flow(s)`);let u=0,r=0;for(let l of i)try{let{runFlowPlayback:o}=await import("./flow-YUB6NHPN.js"),p=t.port?`http://localhost:${t.port}`:"http://localhost:5173";if(await o([l,"--url",p,"--new"])!==0){r++;continue}u++}catch{r++}console.log(`
66
+ `))>=0;)r(u.slice(0,s)),u=u.slice(s+1)}u+=c.decode(),u.trim()&&r(u);let l=(i||a.join("")).trim();if(!l)throw new Error("llm returned an empty test flow");return l}function ee(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 E(e){return!!(e&&typeof e=="object"&&!Array.isArray(e))}function te(e){let t=ee(e);if(!E(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",c=t.steps;if(!Array.isArray(c)||c.length===0)throw new Error("llm returned no flow steps");let a=c.map((i,u)=>{if(!E(i))throw new Error(`flow step ${u+1} is not an object`);return i});return{summary:n,steps:a,yamlText:T.stringify(a)}}function ne(e,t,n,c){let a=[n,"--preview","--preview-origin",c,"--billing-kind","test_run"],i=new Set(["--public-origin","--preview-public-origin","--owner","--repo","--url","--driver","--sim","--device","--slow","--tail-wait","--remap","--replace"]),u=new Set(["--new","--headless","--headed","--electron","--preview-open","--no-shell","--shell-only"]);for(let r=0;r<e.length;r++){if(r===t)continue;let l=e[r];if(l==="--origin"||l==="--preview-origin"){r+=1;continue}if(l==="--public-origin"){let o=e[r+1];o&&a.push("--preview-public-origin",o),r+=1;continue}if(i.has(l)){let o=e[r+1];o&&a.push(l,o),r+=1;continue}u.has(l)&&a.push(l)}return a}async function re(e){let t=await fetch(`${e.origin.replace(/\/$/,"")}/api/sootsim/test-runs`,{method:"POST",headers:{"content-type":"application/json",authorization:e.authHeader},body:JSON.stringify({prompt:e.prompt,summary:e.summary,status:e.status,failureMessage:e.failureMessage,previewShareId:e.previewShareId,owner:e.owner,repo:e.repo,durationMs:e.durationMs,flowYamlSizeBytes:e.flowYamlSizeBytes})});if(!t.ok){let a=await t.text().catch(()=>"");throw new Error(`/api/sootsim/test-runs ${t.status}${a?`: ${a}`:""}`)}let n=await t.json(),c=n.run?.id;if(!c)throw new Error("test run registration returned no id");return{id:c,traceUrl:n.run?.traceUrl??null,previewUrl:n.run?.previewUrl??null}}async function oe(e,t,n,c){let a=O();(!a||a.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 i=k(a),u=await P(z(n,["--origin","--preview-origin"]));console.log(" inspecting current sim\u2026");let r=await X(n,t);console.log(" generating flow\u2026");let l=await Z({prompt:e,describe:r,origin:u,authHeader:i}),o=te(l),p=R(_(J(),"sootsim-test-")),s=_(p,"flow.yaml");C(s,o.yamlText),console.log(` flow: ${s}`);let U=Date.now(),{runFlowPlayback:D,getLastFlowPreviewUploadResult:N}=await import("./flow-7DF6U3ID.js"),I=ne(n,t,s,u),b=await D(I),f=N(),m=b===0?"passed":"failed",L=y(n,"--owner"),j=y(n,"--repo"),w=await re({origin:u,authHeader:i,prompt:e,summary:o.summary,status:m,failureMessage:m==="failed"?"flow playback failed":void 0,previewShareId:f?.shareId??null,owner:L,repo:j,durationMs:Date.now()-U,flowYamlSizeBytes:Buffer.byteLength(o.yamlText,"utf8")});console.log(`
67
+ result: ${m}`),console.log(` run: ${w.id}`),f?.previewUrl&&console.log(` preview: ${f.previewUrl}`),w.traceUrl&&console.log(` replay: ${w.traceUrl}`),process.exit(b)}async function se(e,t){let n=["playwright","test"],c=e.find((r,l)=>e[l-1]==="-t")||e.find((r,l)=>e[l-1]==="--testNamePattern")||e.find((r,l)=>e[l-1]==="--grep");c&&n.push("-g",c),e.includes("--watch")&&n.push("--ui");let a=new Set(["--flows","--detox","--parallel","--watch","--reporter","-t","--testNamePattern","--grep"]);for(let r=0;r<e.length;r++){if(a.has(e[r])){(e[r]==="-t"||e[r]==="--testNamePattern"||e[r]==="--grep"||e[r]==="--reporter")&&r++;continue}n.push(e[r])}console.log(` running: npx ${n.join(" ")}`);let i=B("npx",n,{cwd:h,stdio:"inherit",env:{...process.env}}),u=await new Promise(r=>{i.on("exit",l=>r(l||0))});process.exit(u)}async function ie(e,t,n,c){let a=["flows","test/flows","e2e/flows",".maestro","maestro"],i=[];for(let l of a){let o=d(h,l);if(g(o)){let p=$(o).filter(s=>s.endsWith(".yaml")||s.endsWith(".yml"));for(let s of p)i.push(d(o,s))}}for(let l of a){let o=d(process.cwd(),l);if(!o.startsWith(h)&&g(o)){let p=$(o).filter(s=>s.endsWith(".yaml")||s.endsWith(".yml"));for(let s of p)i.push(d(o,s))}}i.length===0&&(console.log(" no flow files found in flows/, test/flows/, or e2e/flows/"),process.exit(0)),console.log(` found ${i.length} flow(s)`);let u=0,r=0;for(let l of i)try{let{runFlowPlayback:o}=await import("./flow-7DF6U3ID.js"),p=t.port?`http://localhost:${t.port}`:"http://localhost:5173";if(await o([l,"--url",p,"--new"])!==0){r++;continue}u++}catch{r++}console.log(`
68
68
  results: ${u} passed, ${r} failed (${i.length} total)
69
69
  `),process.exit(r>0?1:0)}export{he as runTest};
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{g as m,i as d,l as s}from"./chunk-3FZ2YUUP.js";import"./chunk-6WL7GBOW.js";import"./chunk-ZMYHC2GZ.js";import"./chunk-32JBVYL5.js";import"./chunk-OOGJDQMT.js";import{writeFileSync as g}from"fs";function u(){console.log(`
1
+ /*! sootsim v0.1.194 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{g as m,i as d,l as s}from"./chunk-HSC4YJX7.js";import"./chunk-YFT6QNH3.js";import"./chunk-7CNBR64U.js";import"./chunk-QWZBLVT4.js";import"./chunk-HU4ZXOLS.js";import{writeFileSync as g}from"fs";function u(){console.log(`
3
3
  sootsim timeline \u2014 control the semantic event timeline
4
4
 
5
5
  usage:
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as i}from"./chunk-EBRAQH3D.js";import"./chunk-TYYWETOW.js";import"./chunk-3FZ2YUUP.js";import"./chunk-6WL7GBOW.js";import"./chunk-ZMYHC2GZ.js";import{G as e}from"./chunk-32JBVYL5.js";import{a as s}from"./chunk-2H5WTYZB.js";import"./chunk-OOGJDQMT.js";var r="https://registry.npmjs.org/sootsim/latest";async function g(n){let o=n.indexOf("--channel"),t=o>=0&&n[o+1]?n[o+1]:void 0;console.log(`sootsim upgrade
1
+ /*! sootsim v0.1.194 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{a as i}from"./chunk-H6CPDHFG.js";import"./chunk-LCX3R5GU.js";import"./chunk-HSC4YJX7.js";import"./chunk-YFT6QNH3.js";import"./chunk-7CNBR64U.js";import{G as e}from"./chunk-QWZBLVT4.js";import{a as s}from"./chunk-EZCGWPX4.js";import"./chunk-HU4ZXOLS.js";var r="https://registry.npmjs.org/sootsim/latest";async function g(n){let o=n.indexOf("--channel"),t=o>=0&&n[o+1]?n[o+1]:void 0;console.log(`sootsim upgrade
3
3
  `),await l(),console.log(`
4
4
  runtime:`),await i(["install",...t?["--channel",t]:[]],{})}async function l(){let n=s(),o=await c();if(!o){console.log(` cli: v${n} \u2014 couldn't reach the npm registry, skipped`);return}if(e(o,n)<=0){console.log(` cli: v${n} (latest)`);return}console.log(` cli: v${n} \u2192 v${o}`),console.log(" cli: use the latest CLI with:"),console.log(" sootsim@latest")}async function c(){try{let n=await fetch(r,{headers:{accept:"application/json"},signal:AbortSignal.timeout(8e3)});if(!n.ok)return null;let o=await n.json();return typeof o.version=="string"&&o.version?o.version:null}catch{return null}}export{g as runUpgrade};
@@ -0,0 +1,2 @@
1
+ /*! sootsim v0.1.194 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{a,b,c}from"./chunk-NQCAVMZZ.js";import"./chunk-NBT3VVSY.js";import"./chunk-Z2VLPNTW.js";import"./chunk-EKLBXHUK.js";import"./chunk-HSC4YJX7.js";import"./chunk-JOFQ67LV.js";import"./chunk-P5VG36UG.js";import"./chunk-V4U35I2X.js";import"./chunk-YFT6QNH3.js";import"./chunk-7CNBR64U.js";import"./chunk-QWZBLVT4.js";import"./chunk-HU4ZXOLS.js";export{a as resolveDefaultUploadOrigin,b as resolvePublicPreviewOrigin,c as runUpload};
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.193 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{b as s,d as l,h as r}from"./chunk-TYYWETOW.js";import{a as i}from"./chunk-73RUAURY.js";import"./chunk-32JBVYL5.js";import{a as t}from"./chunk-2H5WTYZB.js";import"./chunk-OOGJDQMT.js";async function d(u){let{IS_BETA:a,BETA_LABEL:m}=await import("./beta-XH6NPFJL.js"),c=a?` \xB7 ${m}`:"";console.log(`sootsim v${t()}${c}`);let o=i(),e=l();o.isDevBridge?(console.log(o.primary),o.installedRuntime&&console.log(`${o.installedRuntime} \xB7 ${e}`)):o.primary==="runtime not installed"?console.log("runtime not installed \u2014 run `sootsim runtime install`"):console.log(`${o.primary} \xB7 ${e}`);let n=await r({channel:e});n.outdated&&n.latest&&console.log(`
1
+ /*! sootsim v0.1.194 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{b as s,d as l,h as r}from"./chunk-LCX3R5GU.js";import{a as i}from"./chunk-CQPAW4BG.js";import"./chunk-QWZBLVT4.js";import{a as t}from"./chunk-EZCGWPX4.js";import"./chunk-HU4ZXOLS.js";async function d(u){let{IS_BETA:a,BETA_LABEL:m}=await import("./beta-G6FAR5KL.js"),c=a?` \xB7 ${m}`:"";console.log(`sootsim v${t()}${c}`);let o=i(),e=l();o.isDevBridge?(console.log(o.primary),o.installedRuntime&&console.log(`${o.installedRuntime} \xB7 ${e}`)):o.primary==="runtime not installed"?console.log("runtime not installed \u2014 run `sootsim runtime install`"):console.log(`${o.primary} \xB7 ${e}`);let n=await r({channel:e});n.outdated&&n.latest&&console.log(`
3
3
  \u2191 runtime v${n.latest} available \u2014 run \`sootsim upgrade\``),console.log(`
4
4
  what's new: ${s}`)}export{d as runVersion};