sootsim 0.1.41 → 0.1.43

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 (136) hide show
  1. package/dist-cli/bin.js +4 -4
  2. package/dist-cli/chunks/{agent-7BJ2ZP22.js → agent-SNOLNP4V.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-OXBYRJVT.js → agent-wrapper-TY6IPXYH.js} +2 -2
  4. package/dist-cli/chunks/{assert-NZTYFTTT.js → assert-QISZB6TE.js} +2 -2
  5. package/dist-cli/chunks/auto-bootstrap-QHKU7RLG.js +2 -0
  6. package/dist-cli/chunks/beta-WKOGR7HH.js +2 -0
  7. package/dist-cli/chunks/{chunk-N7DDNZTO.js → chunk-26LJCQNQ.js} +1 -1
  8. package/dist-cli/chunks/{chunk-G2QUPNHI.js → chunk-3VULRGJO.js} +2 -2
  9. package/dist-cli/chunks/{chunk-AOYBIMKL.js → chunk-4D2BRAPP.js} +1 -1
  10. package/dist-cli/chunks/{chunk-ANDSHXLU.js → chunk-4NPUTEDF.js} +2 -2
  11. package/dist-cli/chunks/{chunk-HAVQS3PI.js → chunk-4YM33L7G.js} +1 -1
  12. package/dist-cli/chunks/{chunk-WZDE344I.js → chunk-5A4JEYK2.js} +3 -3
  13. package/dist-cli/chunks/chunk-6GYM3Z7K.js +117 -0
  14. package/dist-cli/chunks/{chunk-LMNB7NYI.js → chunk-7OKSILLD.js} +2 -2
  15. package/dist-cli/chunks/{chunk-SWHWVYZS.js → chunk-A2NHH4S4.js} +1 -1
  16. package/dist-cli/chunks/{chunk-FZB4W23Y.js → chunk-BAHIX7JY.js} +2 -2
  17. package/dist-cli/chunks/{chunk-ECIRRKKE.js → chunk-CHAVUZ6X.js} +2 -2
  18. package/dist-cli/chunks/{chunk-I5Y4IECP.js → chunk-CPYDJJTX.js} +3 -3
  19. package/dist-cli/chunks/{chunk-GOFKXREQ.js → chunk-EW7G6TZV.js} +2 -2
  20. package/dist-cli/chunks/{chunk-IF33CQL4.js → chunk-FQHGM7T3.js} +2 -2
  21. package/dist-cli/chunks/{chunk-2T6UOHPO.js → chunk-GYQ75E5Z.js} +1 -1
  22. package/dist-cli/chunks/{chunk-NZ5O2OEL.js → chunk-HFRDF5SI.js} +4 -4
  23. package/dist-cli/chunks/chunk-HKZEU76U.js +1 -0
  24. package/dist-cli/chunks/{chunk-OPDPXAYA.js → chunk-IBKI7UPZ.js} +2 -2
  25. package/dist-cli/chunks/{chunk-IP2MARRU.js → chunk-IFJMJS4Y.js} +2 -2
  26. package/dist-cli/chunks/{chunk-7YZJHZ7X.js → chunk-JA2UNVA3.js} +1 -1
  27. package/dist-cli/chunks/{chunk-Y2YNXUBT.js → chunk-JJGG2ICF.js} +2 -2
  28. package/dist-cli/chunks/chunk-KFTTDAPI.js +2 -0
  29. package/dist-cli/chunks/chunk-L6EBBORR.js +1 -0
  30. package/dist-cli/chunks/{chunk-MBGNDWGV.js → chunk-LR5DET6G.js} +2 -2
  31. package/dist-cli/chunks/{chunk-C4AMFYK3.js → chunk-LTUGPDW5.js} +1 -1
  32. package/dist-cli/chunks/chunk-MFLW2R4J.js +17 -0
  33. package/dist-cli/chunks/{chunk-UNJTJDZZ.js → chunk-MHETWJAQ.js} +2 -2
  34. package/dist-cli/chunks/{chunk-TBIGAH3T.js → chunk-MK6M3NP4.js} +1 -1
  35. package/dist-cli/chunks/{chunk-GB3G5LVB.js → chunk-NTZRFKEN.js} +1 -1
  36. package/dist-cli/chunks/{chunk-33R6QMNO.js → chunk-OK3YCEYK.js} +1 -1
  37. package/dist-cli/chunks/{chunk-Q6DGMQ2V.js → chunk-OTTV2PFN.js} +2 -2
  38. package/dist-cli/chunks/{chunk-J3JJRXIP.js → chunk-PXUQ5FQN.js} +1 -1
  39. package/dist-cli/chunks/{chunk-GI7FXE7J.js → chunk-QD23HPD4.js} +2 -2
  40. package/dist-cli/chunks/{chunk-S3SQITOO.js → chunk-QOOTU75R.js} +2 -2
  41. package/dist-cli/chunks/{chunk-5JOYGXCS.js → chunk-RHH6P5Z7.js} +2 -2
  42. package/dist-cli/chunks/chunk-SIH4PE3C.js +1 -0
  43. package/dist-cli/chunks/{chunk-HZVPHAJX.js → chunk-UBJJEZO4.js} +9 -9
  44. package/dist-cli/chunks/{chunk-OXTFYLZJ.js → chunk-V527VARZ.js} +2 -2
  45. package/dist-cli/chunks/{chunk-4UA6P3T2.js → chunk-W7N6B2MX.js} +1 -1
  46. package/dist-cli/chunks/chunk-WWTI3E3U.js +1 -0
  47. package/dist-cli/chunks/{chunk-SHHUVGL2.js → chunk-X3ZHRSH4.js} +1 -1
  48. package/dist-cli/chunks/{chunk-BR6QRN7U.js → chunk-XWVTLGO2.js} +2 -2
  49. package/dist-cli/chunks/{chunk-OJFHAMXD.js → chunk-XXJAHIR4.js} +2 -2
  50. package/dist-cli/chunks/{chunk-LX6KS6TL.js → chunk-YSSNIJC6.js} +1 -1
  51. package/dist-cli/chunks/{compat-BA6HDW3Q.js → compat-3XWL4ATU.js} +3 -3
  52. package/dist-cli/chunks/{config-QQ63IS5P.js → config-HMLAEAGT.js} +2 -2
  53. package/dist-cli/chunks/control-G35A52LM.js +2 -0
  54. package/dist-cli/chunks/{cpu-profile-3DDV2SYN.js → cpu-profile-OORGMNDG.js} +2 -2
  55. package/dist-cli/chunks/{daemon-RYSVONEV.js → daemon-QYMI2BWG.js} +2 -2
  56. package/dist-cli/chunks/{debug-YXE4XZLP.js → debug-TOBBTGKD.js} +3 -3
  57. package/dist-cli/chunks/demo-app-registry-COFN4PSB.js +2 -0
  58. package/dist-cli/chunks/{detox-2UI3EAXA.js → detox-GSTT2HKN.js} +2 -2
  59. package/dist-cli/chunks/{device-UGDJBZKD.js → device-MZZLHS7H.js} +2 -2
  60. package/dist-cli/chunks/{diagnose-IRDRYKYZ.js → diagnose-TWYOGKQL.js} +2 -2
  61. package/dist-cli/chunks/drivers-HPWMBGHU.js +2 -0
  62. package/dist-cli/chunks/{electron-ZCYWIZAE.js → electron-JFXGQSEJ.js} +3 -3
  63. package/dist-cli/chunks/flow-TZQRP7FD.js +2 -0
  64. package/dist-cli/chunks/{hints-OWOBCWJH.js → hints-AUB2PZR7.js} +2 -2
  65. package/dist-cli/chunks/{home-paths-5QMCFTBP.js → home-paths-H7UWBZTI.js} +2 -2
  66. package/dist-cli/chunks/{inspect-K4VXPM5J.js → inspect-CRW5T6XB.js} +3 -3
  67. package/dist-cli/chunks/install-MFIJGPJ6.js +2 -0
  68. package/dist-cli/chunks/{install-desktop-U3723T63.js → install-desktop-ZMNP3JUU.js} +3 -3
  69. package/dist-cli/chunks/{keys-IFVXJ7C2.js → keys-EXQ4HPRI.js} +2 -2
  70. package/dist-cli/chunks/{launch-NDGFTRZ5.js → launch-BJCVATQA.js} +3 -3
  71. package/dist-cli/chunks/{login-KEU6RAV3.js → login-DCGHEA5P.js} +4 -4
  72. package/dist-cli/chunks/{logout-KNFLP5OQ.js → logout-OXKHJTNH.js} +2 -2
  73. package/dist-cli/chunks/{maestro-GBUBLS6L.js → maestro-7AWJXCCS.js} +2 -2
  74. package/dist-cli/chunks/{preview-7OKMPPMN.js → preview-RSYAEZKJ.js} +2 -2
  75. package/dist-cli/chunks/{profile-CHKDPGJF.js → profile-Z4KSPIT2.js} +2 -2
  76. package/dist-cli/chunks/{react-GYI5VITJ.js → react-ED3FJ4IM.js} +2 -2
  77. package/dist-cli/chunks/record-UDDH36YF.js +15 -0
  78. package/dist-cli/chunks/runtime-EIEXL23W.js +2 -0
  79. package/dist-cli/chunks/{runtime-delivery-JCAY2QVQ.js → runtime-delivery-YWGRJ62P.js} +2 -2
  80. package/dist-cli/chunks/{screenshot-3T6MNPH7.js → screenshot-LJ3IRZSJ.js} +2 -2
  81. package/dist-cli/chunks/{screenshot-mode-BUGXY7SQ.js → screenshot-mode-BIMMQHLF.js} +2 -2
  82. package/dist-cli/chunks/{screenshots-EMTXGI2Q.js → screenshots-ABB7QEYX.js} +2 -2
  83. package/dist-cli/chunks/{server-46H2M4TF.js → server-FCZUE6AB.js} +2 -2
  84. package/dist-cli/chunks/setup-repo-6CIEQXRN.js +2 -0
  85. package/dist-cli/chunks/{skills-2RP2CFPD.js → skills-NU3ZVGQW.js} +2 -2
  86. package/dist-cli/chunks/{start-QFREXALP.js → start-FUBNFTAN.js} +4 -4
  87. package/dist-cli/chunks/store-VHZ4TFK4.js +2 -0
  88. package/dist-cli/chunks/telemetry-6ZYCDCLG.js +2 -0
  89. package/dist-cli/chunks/{test-LI4PGGTE.js → test-NHEBEWQA.js} +3 -3
  90. package/dist-cli/chunks/{three-mode-PKINB46T.js → three-mode-PWUWCXOA.js} +2 -2
  91. package/dist-cli/chunks/{timeline-5AREJDL5.js → timeline-OODTUKKH.js} +2 -2
  92. package/dist-cli/chunks/{upgrade-W2AGIOSC.js → upgrade-2GN4KRQ6.js} +2 -2
  93. package/dist-cli/chunks/upload-AIOY3AZW.js +2 -0
  94. package/dist-cli/chunks/{web-JM6WDSZQ.js → web-DPMKOIAX.js} +2 -2
  95. package/dist-cli/chunks/{what-happened-SVCASJKT.js → what-happened-6UXAA7YR.js} +2 -2
  96. package/dist-cli/chunks/{whoami-5NJ6IPLT.js → whoami-2IEZXYNZ.js} +2 -2
  97. package/dist-lib/agent-daemon-client.cjs +1 -1
  98. package/dist-lib/agent-events.cjs +1 -1
  99. package/dist-lib/agent-sessions.cjs +1 -1
  100. package/dist-lib/attached-projects.cjs +1 -1
  101. package/dist-lib/auth/shared-session.cjs +1 -1
  102. package/dist-lib/backend-origin.cjs +1 -1
  103. package/dist-lib/bridge-constants.cjs +1 -1
  104. package/dist-lib/cli-constants.cjs +1 -1
  105. package/dist-lib/config.cjs +1 -1
  106. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  107. package/dist-lib/home-paths.cjs +1 -1
  108. package/dist-lib/host/bridge-host.cjs +1 -1
  109. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  110. package/dist-lib/index.cjs +1 -1
  111. package/dist-lib/metro.cjs +1 -1
  112. package/dist-lib/profiles.cjs +1 -1
  113. package/dist-lib/render-mode.cjs +1 -1
  114. package/dist-lib/vite-base.cjs +1 -1
  115. package/dist-lib/vite.cjs +1 -1
  116. package/package.json +1 -1
  117. package/dist-cli/chunks/auto-bootstrap-4KQT4TCR.js +0 -2
  118. package/dist-cli/chunks/beta-3S56PNSS.js +0 -2
  119. package/dist-cli/chunks/chunk-334L67M2.js +0 -2
  120. package/dist-cli/chunks/chunk-6PLNIOJP.js +0 -17
  121. package/dist-cli/chunks/chunk-ASSV2FFC.js +0 -1
  122. package/dist-cli/chunks/chunk-WN6YFWS5.js +0 -117
  123. package/dist-cli/chunks/chunk-YFX2XIR4.js +0 -1
  124. package/dist-cli/chunks/chunk-YKFRPIVC.js +0 -1
  125. package/dist-cli/chunks/chunk-ZPURE62G.js +0 -1
  126. package/dist-cli/chunks/control-GNJNC524.js +0 -2
  127. package/dist-cli/chunks/demo-app-registry-3VFEW4NV.js +0 -2
  128. package/dist-cli/chunks/drivers-EAONIWG3.js +0 -2
  129. package/dist-cli/chunks/flow-ECSMFTKS.js +0 -2
  130. package/dist-cli/chunks/install-YFE7C2NU.js +0 -2
  131. package/dist-cli/chunks/record-DQR2TEIF.js +0 -45
  132. package/dist-cli/chunks/runtime-XXNKSGFE.js +0 -2
  133. package/dist-cli/chunks/setup-repo-P4LCPAF6.js +0 -2
  134. package/dist-cli/chunks/store-GH77HGEB.js +0 -2
  135. package/dist-cli/chunks/telemetry-WC5J4TE5.js +0 -2
  136. package/dist-cli/chunks/upload-RLS6KTG6.js +0 -2
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.41 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import"./chunk-YFX2XIR4.js";import{a,b,c,d,e,f,g,h,i}from"./chunk-NZ5O2OEL.js";import"./chunk-7YZJHZ7X.js";import"./chunk-Q6DGMQ2V.js";import"./chunk-YKFRPIVC.js";import"./chunk-C4AMFYK3.js";import"./chunk-J3JJRXIP.js";import"./chunk-N7DDNZTO.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.41 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-HZVPHAJX.js";import"./chunk-OJFHAMXD.js";import"./chunk-GOFKXREQ.js";import"./chunk-ZPURE62G.js";import"./chunk-IP2MARRU.js";import"./chunk-GI7FXE7J.js";import"./chunk-BR6QRN7U.js";import"./chunk-LX6KS6TL.js";import"./chunk-SHHUVGL2.js";import"./chunk-NZ5O2OEL.js";import"./chunk-7YZJHZ7X.js";import"./chunk-Q6DGMQ2V.js";import"./chunk-FZB4W23Y.js";import"./chunk-Y2YNXUBT.js";import"./chunk-ANDSHXLU.js";import"./chunk-YKFRPIVC.js";import"./chunk-C4AMFYK3.js";import"./chunk-5JOYGXCS.js";import"./chunk-334L67M2.js";import"./chunk-G2QUPNHI.js";import"./chunk-33R6QMNO.js";import"./chunk-6PLNIOJP.js";import"./chunk-SWHWVYZS.js";import"./chunk-OPDPXAYA.js";import"./chunk-S3SQITOO.js";import"./chunk-ASSV2FFC.js";import"./chunk-J3JJRXIP.js";import"./chunk-N7DDNZTO.js";export{b as discoverSootsimUrl,a as parseFlowFile,d as runFlow,c as runFlowPlayback};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.41 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as o}from"./chunk-UNJTJDZZ.js";import"./chunk-AOYBIMKL.js";import"./chunk-WZDE344I.js";import"./chunk-6PLNIOJP.js";import"./chunk-SWHWVYZS.js";import"./chunk-OPDPXAYA.js";import"./chunk-S3SQITOO.js";import"./chunk-ASSV2FFC.js";import"./chunk-J3JJRXIP.js";import"./chunk-N7DDNZTO.js";async function t(n){console.error(" note: `sootsim install` is now `sootsim setup-repo`. forwarding\u2026\n"),await o(n)}export{t as runInstall};
@@ -1,45 +0,0 @@
1
- /*! sootsim v0.1.41 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a as P}from"./chunk-IP2MARRU.js";import"./chunk-Y2YNXUBT.js";import{d as D}from"./chunk-ANDSHXLU.js";import"./chunk-YKFRPIVC.js";import{d as C}from"./chunk-C4AMFYK3.js";import{c as R,e as h}from"./chunk-6PLNIOJP.js";import{b as W}from"./chunk-SWHWVYZS.js";import"./chunk-OPDPXAYA.js";import"./chunk-S3SQITOO.js";import"./chunk-ASSV2FFC.js";import"./chunk-J3JJRXIP.js";import"./chunk-N7DDNZTO.js";import{existsSync as te,mkdirSync as O,readFileSync as re,rmSync as J,writeFileSync as U}from"fs";import{tmpdir as ne}from"os";import{dirname as T,extname as ie,join as se,resolve as _}from"path";var L=6e4;async function Se(e,o){if((e.includes("--help")||e.includes("-h"))&&(console.log(`
3
- sootsim record \u2014 capture the running sim
4
-
5
- usage:
6
- sootsim record [options] one-shot capture (duration-bounded)
7
- sootsim record start [options] begin stateful recording
8
- sootsim record stop [--output <path>] finalize stateful recording
9
-
10
- options:
11
- --mode <kind> video | live | combined (default: video)
12
- video \u2014 local webm/mp4 file
13
- live \u2014 pointer events only, uploads /preview/<id>
14
- combined \u2014 events + video, uploads /preview/<id>
15
- --duration <sec> recording duration (default: 10, atomic mode only)
16
- --fps <n> frame rate for video/gif (default: 30)
17
- --format <fmt> webm | mp4 | gif | png (video mode; inferred from --output ext)
18
- --output <path> output file (video/gif) or directory (png frames)
19
- --frames <n> sample N png frames evenly across --duration
20
- --max-width <px> downscale gif frames to this width
21
- --no-shell exclude the simulated iOS chrome (status bar, keyboard,
22
- toasts) \u2014 records the tenant surfaces only
23
- --shell-only record only the shell chrome
24
- --open open the preview URL in the browser after stop (live/combined)
25
- --sim <sim> target a specific sim
26
- --origin <url> billing/upload origin for live/combined (default: auto \u2014
27
- probes a local :3000 stack, else https://sootbean.com;
28
- also honors SOOTSIM_UPLOAD_ORIGIN)
29
-
30
- examples:
31
- sootsim record # webm, 10s, ./sootsim-<ts>.webm
32
- sootsim record --format mp4 --duration 5
33
- sootsim record --output demo.gif --duration 3
34
- sootsim record --frames 10 --output ./frames/
35
- sootsim record --mode combined --duration 8 --open
36
- sootsim record start --format mp4 # start video; interact freely
37
- sootsim record start --mode combined # start preview-share recording
38
- sootsim record stop --output flow.mp4 # finalize video
39
- sootsim record stop --open # finalize live/combined + open URL
40
- `),process.exit(0)),e[0]==="start"){await le(e.slice(1),o);return}if(e[0]==="stop"){await pe(e.slice(1),o);return}if(e[0]==="cancel"){await me(e.slice(1),o);return}if(e[0]==="status"){ue();return}let t=R(e,{port:o.port,stripBooleanFlags:["--no-shell","--shell-only","--open"],stripValueFlags:["--mode","--duration","--fps","--format","--output","--frames","--max-width","--origin"]}),r=V(a(e,"--mode")),n=e.includes("--shell-only")?"shell":e.includes("--no-shell")?"tenant":void 0,c=a(e,"--format"),i=a(e,"--output"),s=Number(a(e,"--duration")??"10");(!Number.isFinite(s)||s<=0)&&(console.error(` invalid --duration "${a(e,"--duration")}" \u2014 expected a positive number of seconds`),process.exit(1));let u=Number(a(e,"--fps")??"30"),d=a(e,"--frames"),w=e.includes("--open"),$=a(e,"--max-width")?Number(a(e,"--max-width")):void 0,v=Math.max(100,Math.round(s*1e3)),Z=a(e,"--origin");if(r==="live"||r==="combined"){await P("record",{originOverride:Z});let l=h({...t,commandTimeoutMs:6e4});try{await G(l),await K(l),await H(l,r)||(console.error(` start failed: recording store refused to start (${r})`),process.exit(1)),console.log(` recording ${r} for ${s}s`),await new Promise(y=>setTimeout(y,v)),await Q(l);let k=await X(l);Y(k,w)}finally{l.close()}return}let I=d?Number(d):null,S=de(c,i,I),p=h({...t,commandTimeoutMs:6e4});try{if(await j(p),S==="png"){let b=I??10,f=_(process.cwd(),i??`./sootsim-frames-${B()}`);O(f,{recursive:!0}),console.log(` sampling ${b} frames over ${s}s \u2192 ${f}`);let g=await p.send({type:"evaluate",code:`window.__sootsimRecorder.startFrameCapture({ count: ${b}, durationMs: ${v} })`});(!g.ok||!g.requestId)&&(console.error(` frame capture start failed: ${g.error??"unknown error"}`),process.exit(1)),await new Promise(m=>setTimeout(m,v));let ee=Date.now()+Math.max(5e3,v),A=null;for(;;){let m=await p.send({type:"evaluate",code:`window.__sootsimRecorder.getFrameCaptureResult(${g.requestId})`});if(m||(console.error(" frame capture result missing"),process.exit(1)),m.done){m.ok||(console.error(` frame capture failed: ${m.error??"unknown error"}`),process.exit(1)),A=m.frames??[];break}Date.now()>=ee&&(console.error(" frame capture timed out"),process.exit(1)),await new Promise(E=>setTimeout(E,100))}A.forEach((m,E)=>{let oe=`${f}/frame-${String(E+1).padStart(3,"0")}.png`;U(oe,Buffer.from(m.data,"base64"))}),console.log(` saved ${A.length} frames`);return}if(S==="gif"){let b=I??Math.max(10,Math.round(s*u/3)),f=_(process.cwd(),i??`./sootsim-${B()}.gif`);O(T(f),{recursive:!0}),console.log(` encoding gif: ${b} frames over ${s}s \u2192 ${f}`);let g=await p.send({type:"evaluate",code:`window.__sootsimRecorder.captureGif({ frames: ${b}, durationMs: ${v}${$?`, maxWidth: ${$}`:""} })`});g||(console.error(" gif capture returned no frames"),process.exit(1)),U(f,Buffer.from(g.data,"base64")),console.log(` saved: ${f} (${z(g.size)})`);return}let l=_(process.cwd(),i??`./sootsim-${B()}.${S}`);O(T(l),{recursive:!0});let M={format:S,fps:u};n&&(M.layers=n);let k=await p.send({type:"evaluate",code:`window.__sootsimRecorder.start(${JSON.stringify(M)})`});k.ok||(console.error(` start failed: ${k.error??"unknown error"}`),process.exit(1)),console.log(` recording ${S} for ${s}s \u2192 ${l}`),await new Promise(b=>setTimeout(b,v));let y=await p.send({type:"evaluate",code:"window.__sootsimRecorder.stop()"});y.ok||(console.error(` stop failed: ${y.error??"unknown error"}`),process.exit(1)),y.size||(console.error(" recorder returned an empty blob \u2014 nothing written"),process.exit(1)),await q(p,l),console.log(` saved: ${l} (${z(y.size)})`)}finally{p.close()}}async function j(e){if(!await e.send({type:"evaluate",code:'typeof window.__sootsimRecorder !== "undefined"'}))throw new Error("window.__sootsimRecorder missing \u2014 is sootsim engine running in this sim?")}async function q(e,o){let t=[],r=0;for(;;){let n=await e.send({type:"evaluate",code:`window.__sootsimRecorder.getBlobBase64({ offset: ${r}, chunk: 2097152 })`});if(!n)throw new Error("no blob available on recorder");if(t.push(Buffer.from(n.data,"base64")),r=n.offset,n.done)break}U(o,Buffer.concat(t))}function a(e,o){let t=e.indexOf(o);if(!(t<0||t===e.length-1))return e[t+1]}function ae(e){if(!e)return;let o=ie(e).toLowerCase().replace(/^\./,"");if(o==="webm"||o==="mp4"||o==="gif")return o;if(o==="png")return"png"}function de(e,o,t){return e||(t!=null?"png":ae(o)??"webm")}function B(){return new Date().toISOString().replace(/[:T]/g,"-").replace(/\..+/,"")}function z(e){return e<1024?`${e}B`:e<1024*1024?`${(e/1024).toFixed(1)}KB`:`${(e/(1024*1024)).toFixed(2)}MB`}function V(e){if(!e)return"video";if(e==="video"||e==="live"||e==="combined")return e;console.error(` invalid --mode "${e}" \u2014 expected video | live | combined`),process.exit(1)}function N(){return se(ne(),`sootsim-recording-${W()}.json`)}function F(){let e=N();if(!te(e))return null;try{return{mode:"video",...JSON.parse(re(e,"utf8"))}}catch{return J(e,{force:!0}),null}}function ce(e){U(N(),JSON.stringify(e,null,2))}function x(){J(N(),{force:!0})}async function le(e,o){let t=F();t&&(console.error(` recording already in progress (started ${t.startedAt}, sim ${t.simId??"?"}). run \`sootsim record stop\` first, or \`sootsim record cancel\` to discard.`),process.exit(1));let r=R(e,{port:o.port,stripBooleanFlags:["--no-shell","--shell-only"],stripValueFlags:["--mode","--fps","--format","--max-width","--origin"]}),n=V(a(e,"--mode")),c=e.includes("--shell-only")?"shell":e.includes("--no-shell")?"tenant":void 0,i=a(e,"--format"),s=i==="mp4"?"mp4":"webm";i&&s!==i&&(console.error(` record start only supports webm or mp4 (got: ${i}). for gif/png use atomic mode: sootsim record --format ${i} --duration <s>`),process.exit(1));let u=Number(a(e,"--fps")??"30"),d=h({...r,commandTimeoutMs:15e3});try{if(n==="live"||n==="combined")await P("record",{originOverride:a(e,"--origin")}),await G(d),await K(d),await H(d,n)||(console.error(` start failed: recording store refused to start (${n})`),process.exit(1));else{await j(d);let w={format:s,fps:u};c&&(w.layers=c);let $=await d.send({type:"evaluate",code:`window.__sootsimRecorder.start(${JSON.stringify(w)})`});$.ok||(console.error(` start failed: ${$.error??"unknown error"}`),process.exit(1))}ce({simId:r.simId??null,mode:n,format:s,fps:u,layers:c,startedAt:new Date().toISOString()}),console.log(n==="video"?` recording ${s} @ ${u}fps${c?` (${c})`:""} \u2014 run \`sootsim record stop --output <path>\` when done`:` recording ${n} \u2014 run \`sootsim record stop\` when done (add --open to launch the preview URL)`)}finally{d.close()}}function ue(){let e=F();if(!e){console.log(" no recording in progress");return}e.mode==="video"?console.log(` recording ${e.mode} (${e.format} @ ${e.fps}fps) on sim ${e.simId??"?"} since ${e.startedAt}`):console.log(` recording ${e.mode} on sim ${e.simId??"?"} since ${e.startedAt}`)}async function me(e,o){let t=F();if(!t){console.log(" no recording in progress");return}let r=R(e,{port:o.port}),n=r.simId??t.simId??void 0,c=h({...r,simId:n,commandTimeoutMs:15e3});try{t.mode==="live"||t.mode==="combined"?await c.send({type:"evaluate",code:"void window.SootSim?.bridges?.cancelRecording?.()"}):await c.send({type:"evaluate",code:"window.__sootsimRecorder.stop()"})}catch{}finally{x(),c.close()}console.log(" recording cancelled")}async function pe(e,o){let t=F();t||(console.error(" no recording in progress. start one with `sootsim record start`."),process.exit(1));let r=R(e,{port:o.port,stripBooleanFlags:["--open"],stripValueFlags:["--output"]}),n=r.simId??t.simId??void 0,c=e.includes("--open"),i=h({...r,simId:n,commandTimeoutMs:6e4});try{if(t.mode==="live"||t.mode==="combined"){await Q(i);let w=await X(i);x(),Y(w,c);return}let s=a(e,"--output"),u=_(process.cwd(),s??`./sootsim-${B()}.${t.format}`);O(T(u),{recursive:!0});let d=await i.send({type:"evaluate",code:"window.__sootsimRecorder.stop()"});d.ok||(console.error(` stop failed: ${d.error??"unknown error"}`),x(),process.exit(1)),d.size||(console.error(" recorder returned an empty blob \u2014 nothing written"),x(),process.exit(1)),await q(i,u),x(),console.log(` saved: ${u} (${z(d.size)})`)}finally{i.close()}}async function G(e){if(!await e.send({type:"evaluate",code:'typeof window.SootSim?.bridges?.startRecording === "function" && typeof window.SootSim?.bridges?.stopRecording === "function"'}))throw new Error("SootSim.bridges.startRecording missing \u2014 is sootsim engine running in this sim?")}async function K(e){let o=D();if(!o)return;let t=o.kind==="api-key"?o.secret:o.token;if(!await e.send({type:"evaluate",code:`(() => {
41
- const set = window.SootSim && window.SootSim.bridges && window.SootSim.bridges.setSession
42
- if (typeof set !== 'function') return false
43
- set({ token: ${JSON.stringify(t)}, user: null })
44
- return true
45
- })()`}))throw new Error("SootSim.bridges.setSession missing \u2014 the running sootsim engine is too old to accept CLI-injected auth for preview recording. update sootsim.")}async function H(e,o){return await e.send({type:"evaluate",code:`window.SootSim.bridges.startRecording(${JSON.stringify(o)})`})===!0}async function Q(e){await e.send({type:"evaluate",code:"void window.SootSim.bridges.stopRecording()"})}async function X(e){let o=Date.now()+L;for(;Date.now()<o;){let t=await e.send({type:"evaluate",code:"(() => { const s = window.SootSim?.bridges?.getRecordingState?.(); return s ? { state: s.state, lastUpload: s.lastUpload, uploadError: s.uploadError } : null })()"});if(t&&t.state==="idle"){if(t.uploadError)return{uploadError:t.uploadError};if(t.lastUpload?.previewUrl)return{previewUrl:t.lastUpload.previewUrl}}await new Promise(r=>setTimeout(r,300))}return{uploadError:`upload did not settle within ${L/1e3}s`}}function Y(e,o){e.uploadError&&(console.error(` upload failed: ${e.uploadError}`),process.exit(1)),e.previewUrl||(console.error(" upload returned no preview URL"),process.exit(1)),console.log(` preview: ${e.previewUrl}`),o&&C(e.previewUrl)}export{ae as extToFormat,de as resolveFormat,Se as runRecord,a as valueOf};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.41 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-I5Y4IECP.js";import"./chunk-6PLNIOJP.js";import"./chunk-SWHWVYZS.js";import"./chunk-OXTFYLZJ.js";import"./chunk-ASSV2FFC.js";import"./chunk-J3JJRXIP.js";import"./chunk-N7DDNZTO.js";export{a as runRuntime};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.41 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-UNJTJDZZ.js";import"./chunk-AOYBIMKL.js";import"./chunk-WZDE344I.js";import"./chunk-6PLNIOJP.js";import"./chunk-SWHWVYZS.js";import"./chunk-OPDPXAYA.js";import"./chunk-S3SQITOO.js";import"./chunk-ASSV2FFC.js";import"./chunk-J3JJRXIP.js";import"./chunk-N7DDNZTO.js";export{a as runSetupRepo};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.41 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-G2QUPNHI.js";import"./chunk-33R6QMNO.js";import"./chunk-N7DDNZTO.js";export{a as settingsStore};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.41 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b}from"./chunk-OPDPXAYA.js";import"./chunk-S3SQITOO.js";import"./chunk-J3JJRXIP.js";import"./chunk-N7DDNZTO.js";export{b as flushCliTelemetry,a as trackCliEvent};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.41 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-Y2YNXUBT.js";import"./chunk-ANDSHXLU.js";import"./chunk-YKFRPIVC.js";import"./chunk-C4AMFYK3.js";import"./chunk-6PLNIOJP.js";import"./chunk-SWHWVYZS.js";import"./chunk-OPDPXAYA.js";import"./chunk-S3SQITOO.js";import"./chunk-ASSV2FFC.js";import"./chunk-J3JJRXIP.js";import"./chunk-N7DDNZTO.js";export{a as resolveDefaultUploadOrigin,b as resolvePublicPreviewOrigin,c as runUpload};