sootsim 0.1.41 → 0.1.42
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.
- package/dist-cli/bin.js +4 -4
- package/dist-cli/chunks/{agent-7BJ2ZP22.js → agent-4BBZUWD2.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-OXBYRJVT.js → agent-wrapper-TA5GG3MV.js} +2 -2
- package/dist-cli/chunks/{assert-NZTYFTTT.js → assert-7GHUOGLI.js} +2 -2
- package/dist-cli/chunks/auto-bootstrap-7BJDOYUU.js +2 -0
- package/dist-cli/chunks/beta-2LIEPFEJ.js +2 -0
- package/dist-cli/chunks/{chunk-ANDSHXLU.js → chunk-2GKZS2ZZ.js} +2 -2
- package/dist-cli/chunks/chunk-2XCCV7J3.js +2 -0
- package/dist-cli/chunks/{chunk-LX6KS6TL.js → chunk-3PN6HIAM.js} +1 -1
- package/dist-cli/chunks/{chunk-OPDPXAYA.js → chunk-4574AJAK.js} +2 -2
- package/dist-cli/chunks/{chunk-AOYBIMKL.js → chunk-543BSGQG.js} +1 -1
- package/dist-cli/chunks/{chunk-GB3G5LVB.js → chunk-5EBERDK7.js} +1 -1
- package/dist-cli/chunks/{chunk-GI7FXE7J.js → chunk-5PZPKGUJ.js} +2 -2
- package/dist-cli/chunks/{chunk-SHHUVGL2.js → chunk-5TRJK5SO.js} +1 -1
- package/dist-cli/chunks/chunk-64AKKWVB.js +1 -0
- package/dist-cli/chunks/{chunk-J3JJRXIP.js → chunk-6MYXKMLG.js} +1 -1
- package/dist-cli/chunks/{chunk-7YZJHZ7X.js → chunk-6R3CVNXC.js} +1 -1
- package/dist-cli/chunks/chunk-76WF7UIG.js +17 -0
- package/dist-cli/chunks/{chunk-IP2MARRU.js → chunk-A2R42ONP.js} +2 -2
- package/dist-cli/chunks/{chunk-Y2YNXUBT.js → chunk-BBRAYGDX.js} +2 -2
- package/dist-cli/chunks/{chunk-IF33CQL4.js → chunk-BVCZIJ2X.js} +2 -2
- package/dist-cli/chunks/{chunk-NZ5O2OEL.js → chunk-BZFKV7CT.js} +2 -2
- package/dist-cli/chunks/{chunk-HAVQS3PI.js → chunk-CZZDYQBA.js} +1 -1
- package/dist-cli/chunks/{chunk-SWHWVYZS.js → chunk-D5TKAFJ3.js} +1 -1
- package/dist-cli/chunks/{chunk-LMNB7NYI.js → chunk-DNSKIJSB.js} +2 -2
- package/dist-cli/chunks/{chunk-C4AMFYK3.js → chunk-DUVJOJTP.js} +1 -1
- package/dist-cli/chunks/{chunk-GOFKXREQ.js → chunk-DXQKMDX2.js} +2 -2
- package/dist-cli/chunks/{chunk-WZDE344I.js → chunk-EDXBJUHH.js} +3 -3
- package/dist-cli/chunks/chunk-EZGUKWD5.js +1 -0
- package/dist-cli/chunks/{chunk-2T6UOHPO.js → chunk-FDB3P2GV.js} +1 -1
- package/dist-cli/chunks/{chunk-FZB4W23Y.js → chunk-I4LBW6ED.js} +2 -2
- package/dist-cli/chunks/chunk-IFY75LQ3.js +1 -0
- package/dist-cli/chunks/{chunk-S3SQITOO.js → chunk-ITQGNQE3.js} +2 -2
- package/dist-cli/chunks/{chunk-TBIGAH3T.js → chunk-J6HT2ZJW.js} +1 -1
- package/dist-cli/chunks/{chunk-Q6DGMQ2V.js → chunk-KQN7OUQ6.js} +2 -2
- package/dist-cli/chunks/{chunk-33R6QMNO.js → chunk-L53QRCQZ.js} +1 -1
- package/dist-cli/chunks/{chunk-MBGNDWGV.js → chunk-LAOTVMTO.js} +2 -2
- package/dist-cli/chunks/chunk-LJLRHMLK.js +1 -0
- package/dist-cli/chunks/{chunk-5JOYGXCS.js → chunk-LXZK2TIS.js} +2 -2
- package/dist-cli/chunks/{chunk-HZVPHAJX.js → chunk-MQOJIYEY.js} +9 -9
- package/dist-cli/chunks/{chunk-UNJTJDZZ.js → chunk-NLYIKZIF.js} +2 -2
- package/dist-cli/chunks/{chunk-4UA6P3T2.js → chunk-Q26NNL4G.js} +1 -1
- package/dist-cli/chunks/{chunk-BR6QRN7U.js → chunk-QLGR4M5H.js} +2 -2
- package/dist-cli/chunks/{chunk-OXTFYLZJ.js → chunk-QWGMNIWG.js} +2 -2
- package/dist-cli/chunks/chunk-R3KU3IBN.js +117 -0
- package/dist-cli/chunks/{chunk-I5Y4IECP.js → chunk-SGBD3EAX.js} +3 -3
- package/dist-cli/chunks/{chunk-N7DDNZTO.js → chunk-UY6HKNEV.js} +1 -1
- package/dist-cli/chunks/{chunk-OJFHAMXD.js → chunk-WSISSPE3.js} +2 -2
- package/dist-cli/chunks/{chunk-G2QUPNHI.js → chunk-WW4G4D4A.js} +2 -2
- package/dist-cli/chunks/{chunk-ECIRRKKE.js → chunk-Y4ENWAOJ.js} +2 -2
- package/dist-cli/chunks/{compat-BA6HDW3Q.js → compat-GWIATWPP.js} +3 -3
- package/dist-cli/chunks/{config-QQ63IS5P.js → config-OXHJXY6N.js} +2 -2
- package/dist-cli/chunks/control-HJ2RPHYO.js +2 -0
- package/dist-cli/chunks/{cpu-profile-3DDV2SYN.js → cpu-profile-MBYPGUJH.js} +2 -2
- package/dist-cli/chunks/{daemon-RYSVONEV.js → daemon-3N3QWMFU.js} +2 -2
- package/dist-cli/chunks/{debug-YXE4XZLP.js → debug-POCRM56I.js} +3 -3
- package/dist-cli/chunks/demo-app-registry-XABEINTD.js +2 -0
- package/dist-cli/chunks/{detox-2UI3EAXA.js → detox-4NXKQ2CS.js} +2 -2
- package/dist-cli/chunks/{device-UGDJBZKD.js → device-DURJHKK5.js} +2 -2
- package/dist-cli/chunks/{diagnose-IRDRYKYZ.js → diagnose-IMXDGRVA.js} +2 -2
- package/dist-cli/chunks/drivers-VXSNI7K2.js +2 -0
- package/dist-cli/chunks/{electron-ZCYWIZAE.js → electron-NGWA52N6.js} +3 -3
- package/dist-cli/chunks/flow-TCG5XPDK.js +2 -0
- package/dist-cli/chunks/{hints-OWOBCWJH.js → hints-5UNZ7BR2.js} +2 -2
- package/dist-cli/chunks/{home-paths-5QMCFTBP.js → home-paths-TENEFM4L.js} +2 -2
- package/dist-cli/chunks/{inspect-K4VXPM5J.js → inspect-IWMH6MUT.js} +3 -3
- package/dist-cli/chunks/install-IKBAY4PQ.js +2 -0
- package/dist-cli/chunks/{install-desktop-U3723T63.js → install-desktop-ABAWCLFJ.js} +3 -3
- package/dist-cli/chunks/{keys-IFVXJ7C2.js → keys-NET26VLH.js} +2 -2
- package/dist-cli/chunks/{launch-NDGFTRZ5.js → launch-TKIA4RC4.js} +3 -3
- package/dist-cli/chunks/{login-KEU6RAV3.js → login-AWT3GU5M.js} +4 -4
- package/dist-cli/chunks/{logout-KNFLP5OQ.js → logout-R2RUNXHO.js} +2 -2
- package/dist-cli/chunks/{maestro-GBUBLS6L.js → maestro-552237HC.js} +2 -2
- package/dist-cli/chunks/{preview-7OKMPPMN.js → preview-GKIGPZUO.js} +2 -2
- package/dist-cli/chunks/{profile-CHKDPGJF.js → profile-U64JPCPD.js} +2 -2
- package/dist-cli/chunks/{react-GYI5VITJ.js → react-FWSV5JH2.js} +2 -2
- package/dist-cli/chunks/record-FLWDPJIP.js +7 -0
- package/dist-cli/chunks/runtime-AGNC2TK6.js +2 -0
- package/dist-cli/chunks/{runtime-delivery-JCAY2QVQ.js → runtime-delivery-22PV7UED.js} +2 -2
- package/dist-cli/chunks/{screenshot-3T6MNPH7.js → screenshot-4P3TL7CN.js} +2 -2
- package/dist-cli/chunks/{screenshot-mode-BUGXY7SQ.js → screenshot-mode-GX3Q3IZ6.js} +2 -2
- package/dist-cli/chunks/{screenshots-EMTXGI2Q.js → screenshots-5HSLPDWZ.js} +2 -2
- package/dist-cli/chunks/{server-46H2M4TF.js → server-Q3ZD4BEF.js} +2 -2
- package/dist-cli/chunks/setup-repo-NQVN5PK7.js +2 -0
- package/dist-cli/chunks/{skills-2RP2CFPD.js → skills-M2CWX5ZC.js} +2 -2
- package/dist-cli/chunks/{start-QFREXALP.js → start-24EAF2KS.js} +4 -4
- package/dist-cli/chunks/store-GI3SJOKH.js +2 -0
- package/dist-cli/chunks/telemetry-73Z4FAUH.js +2 -0
- package/dist-cli/chunks/{test-LI4PGGTE.js → test-AJBULIVR.js} +3 -3
- package/dist-cli/chunks/{three-mode-PKINB46T.js → three-mode-JBZSQQIQ.js} +2 -2
- package/dist-cli/chunks/{timeline-5AREJDL5.js → timeline-VVGWQSVU.js} +2 -2
- package/dist-cli/chunks/{upgrade-W2AGIOSC.js → upgrade-IOGHQT7J.js} +2 -2
- package/dist-cli/chunks/upload-Z4PPGOX6.js +2 -0
- package/dist-cli/chunks/{web-JM6WDSZQ.js → web-XIMVN6KZ.js} +2 -2
- package/dist-cli/chunks/{what-happened-SVCASJKT.js → what-happened-STVD3KZ2.js} +2 -2
- package/dist-cli/chunks/{whoami-5NJ6IPLT.js → whoami-L62IGS4U.js} +2 -2
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +1 -1
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/vite-base.cjs +1 -1
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/dist-cli/chunks/auto-bootstrap-4KQT4TCR.js +0 -2
- package/dist-cli/chunks/beta-3S56PNSS.js +0 -2
- package/dist-cli/chunks/chunk-334L67M2.js +0 -2
- package/dist-cli/chunks/chunk-6PLNIOJP.js +0 -17
- package/dist-cli/chunks/chunk-ASSV2FFC.js +0 -1
- package/dist-cli/chunks/chunk-WN6YFWS5.js +0 -117
- package/dist-cli/chunks/chunk-YFX2XIR4.js +0 -1
- package/dist-cli/chunks/chunk-YKFRPIVC.js +0 -1
- package/dist-cli/chunks/chunk-ZPURE62G.js +0 -1
- package/dist-cli/chunks/control-GNJNC524.js +0 -2
- package/dist-cli/chunks/demo-app-registry-3VFEW4NV.js +0 -2
- package/dist-cli/chunks/drivers-EAONIWG3.js +0 -2
- package/dist-cli/chunks/flow-ECSMFTKS.js +0 -2
- package/dist-cli/chunks/install-YFE7C2NU.js +0 -2
- package/dist-cli/chunks/record-DQR2TEIF.js +0 -45
- package/dist-cli/chunks/runtime-XXNKSGFE.js +0 -2
- package/dist-cli/chunks/setup-repo-P4LCPAF6.js +0 -2
- package/dist-cli/chunks/store-GH77HGEB.js +0 -2
- package/dist-cli/chunks/telemetry-WC5J4TE5.js +0 -2
- 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,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};
|