sliccy 6.235.1 → 6.235.2
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/ui/.vite/manifest.json +177 -177
- package/dist/ui/assets/SKILL-IFmza_44.js +1 -0
- package/dist/ui/assets/{account-store-CzfblpgI.js → account-store-BT0pbAvQ.js} +1 -1
- package/dist/ui/assets/{account-store-cmW9lr-u.js → account-store-D7DGAxNM.js} +1 -1
- package/dist/ui/assets/{adobe-ZmhPnSWg.js → adobe-CEArSxCX.js} +1 -1
- package/dist/ui/assets/{adobe-D9usgHdQ.js → adobe-_I4i3x_7.js} +1 -1
- package/dist/ui/assets/{agent-panels-CovHB283.js → agent-panels-C_58flxq.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-DZj1HPjn.js → almost-bash-shell-headless-B6ZMvYl4.js} +294 -294
- package/dist/ui/assets/{apply-layout-6nSAZIch.js → apply-layout-8fGhBCeJ.js} +1 -1
- package/dist/ui/assets/{azure-openai-BiE76aFn.js → azure-openai-B1ImIasn.js} +1 -1
- package/dist/ui/assets/{azure-openai-wak12yse.js → azure-openai-eCi3qaKl.js} +1 -1
- package/dist/ui/assets/{cdp-BfWXIBWq.js → cdp-D7X02m26.js} +1 -1
- package/dist/ui/assets/{cerebras-D0Mx69Ap.js → cerebras-DLriLpBm.js} +1 -1
- package/dist/ui/assets/{cerebras-CVs2Tbk1.js → cerebras-Dw16qbLP.js} +1 -1
- package/dist/ui/assets/{composer-speech-jBihbFM6.js → composer-speech-C5aq2EHX.js} +1 -1
- package/dist/ui/assets/{connect-surface-B9v56nmb.js → connect-surface-B33YxHel.js} +1 -1
- package/dist/ui/assets/{directed-approval-C0t4KpWS.js → directed-approval-CsWbrazD.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-DMdyTzyr.js → emscripten-vfs-hook-C_WW9D-C.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-CIAvz3MU.js → frozen-archive-writer-Bjl1A6fy.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-DB_o-YIG.js → gelatiere-unit-69YQevwx.js} +1 -1
- package/dist/ui/assets/{github-DnT3cRBN.js → github-5665N6-Q.js} +1 -1
- package/dist/ui/assets/{github-CFuLPM1l.js → github-DeAThA8k.js} +1 -1
- package/dist/ui/assets/{github-copilot-5ZaouHsb.js → github-copilot-2CNJ6evQ.js} +1 -1
- package/dist/ui/assets/{github-copilot-DAgTPemA.js → github-copilot-B-F9GN74.js} +1 -1
- package/dist/ui/assets/{hear-iW9mOWoq.js → hear-DzjhPERk.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-BhKOuytZ.js → js-realm-worker-ALz7TOVI.js} +2 -2
- package/dist/ui/assets/{jsh-executor-5RfX9BIL.js → jsh-executor-UfR3L63B.js} +2 -2
- package/dist/ui/assets/{kernel-worker-CGsXwcqn.js → kernel-worker-coLE80Cx.js} +9 -9
- package/dist/ui/assets/{lick-ws-bridge-CjVMKm8L.js → lick-ws-bridge-BwZ6Lsqx.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-DGxSYcuv.js → lick-ws-bridge-DpjVEf6h.js} +1 -1
- package/dist/ui/assets/{live-session-curation-BU5-dXYs.js → live-session-curation-CN8ifDXh.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-BWcSQGFy.js → live-session-snapshot-BoQYDzUq.js} +1 -1
- package/dist/ui/assets/{local-llm-C4GedX1z.js → local-llm-CBWcw9ga.js} +1 -1
- package/dist/ui/assets/{local-llm-Cpt03yXM.js → local-llm-DAdQyx68.js} +1 -1
- package/dist/ui/assets/{main-595v9V-3.js → main-D7Ilh1cw.js} +3 -3
- package/dist/ui/assets/{main-cherry-eHIcfKvm.js → main-cherry-9nngpfRy.js} +1 -1
- package/dist/ui/assets/{mcp-command-Xe8sQKQ_.js → mcp-command-BeBM1rHC.js} +9 -9
- package/dist/ui/assets/{memory-curation-seam-CVn_O_mB.js → memory-curation-seam-CUFsPZ6T.js} +1 -1
- package/dist/ui/assets/{memory-health-DypYUKTb.js → memory-health-hDyNPmp-.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-CGC2ORkk.js → memory-write-execute-CgR8Y6VS.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-BS5CElKu.js → merge-folded-cost-into-frozen-DTjO_AHz.js} +1 -1
- package/dist/ui/assets/{new-session-C5HNTz7s.js → new-session-CLqykoTf.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-D23nMevA.js → oauth-bootstrap-UPOMQS2N.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-BjKsI5uz.js → onboarding-orchestrator-DKu8ScwD.js} +1 -1
- package/dist/ui/assets/{openai-codex-KpV263Ls.js → openai-codex-C3rT7EJ-.js} +1 -1
- package/dist/ui/assets/{openai-codex-ChtuwAW1.js → openai-codex-CXG3CPUO.js} +1 -1
- package/dist/ui/assets/{openrouter-u-VuffJY.js → openrouter-C_mHcLUY.js} +1 -1
- package/dist/ui/assets/{openrouter-ChIUUOYB.js → openrouter-MNU1Hy35.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CN5PR6UC.js → openrouter-free-2vZpBTFE.js} +1 -1
- package/dist/ui/assets/{openrouter-free-DbAWX3Ls.js → openrouter-free-wsl2KNbX.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-C1JpAZJA.js → openrouter-oauth-Bw05OEXj.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BHXMNz60.js → openrouter-oauth-sx8YMfw_.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-DtU8YR7T.js → panel-rpc-handlers-C4ZEbr-L.js} +2 -2
- package/dist/ui/assets/{panelize-shell-suwXOo1o.js → panelize-shell-CLTgjV9N.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-DZS-XL1f.js → pi-edit-execution-DF0ZCxw2.js} +1 -1
- package/dist/ui/assets/{provider-rbar9Htp.js → provider-CBb3zRgf.js} +1 -1
- package/dist/ui/assets/{provider-vKrQcy3i.js → provider-CWkiPaFF.js} +1 -1
- package/dist/ui/assets/{provider-settings-Bk3jM_dW.js → provider-settings-BySNZFTG.js} +1 -1
- package/dist/ui/assets/provider-store-access-BmLF3yiQ.js +1 -0
- package/dist/ui/assets/provider-store-access-qocbyVYP.js +1 -0
- package/dist/ui/assets/{providers-CtMfOWZV.js → providers-3muwTGPn.js} +2 -2
- package/dist/ui/assets/{providers-DAcj1Z9Z.js → providers-Dz9lZ6WH.js} +1 -1
- package/dist/ui/assets/{quick-llm-C0lTtG9X.js → quick-llm-BE1MoA8w.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-Cy05DzV-.js → realm-inprocess-B-C5-frg.js} +2 -2
- package/dist/ui/assets/{realm-unhandled-rejections-BZ7BU17Z.js → realm-unhandled-rejections-CE1G6Vqu.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-BdgrZ_Tc.js → realm-unhandled-rejections-zi6bFzVe.js} +1 -1
- package/dist/ui/assets/{recovery-screen-Czap-Ds9.js → recovery-screen-tADn1zrY.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-ClW4k4jN.js → remote-terminal-view-4u9dBB0E.js} +2 -2
- package/dist/ui/assets/{restore-BShMjqqJ.js → restore-ue1IxJw4.js} +1 -1
- package/dist/ui/assets/{run-CEBrumrs.js → run-BSPrcB21.js} +2 -2
- package/dist/ui/assets/{run-ChnKF9ZW.js → run-BVj8rfi8.js} +1 -1
- package/dist/ui/assets/{run-BfhnodhF.js → run-Blqu2GaE.js} +2 -2
- package/dist/ui/assets/{run-D-w1YIco.js → run-DKbvbERf.js} +1 -1
- package/dist/ui/assets/{session-command-memory-DmcqSseK.js → session-command-memory-Cep9cwKm.js} +2 -2
- package/dist/ui/assets/{session-jsonl-DqFmsBfc.js → session-jsonl-CFn8rdop.js} +1 -1
- package/dist/ui/assets/{session-jsonl-DuPmCWIA.js → session-jsonl-j0zMWVNK.js} +1 -1
- package/dist/ui/assets/{session-search-index-CsPtPLrP.js → session-search-index-la9-q_G1.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-BoMFAvjY.js → setup-feature-flags-remote-BTYJL90t.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-D0DP9wiJ.js → setup-model-catalog-D8Ea_olZ.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-Dha6CPnL.js → silent-renew-backoff-BtuCuxCi.js} +1 -1
- package/dist/ui/assets/slicc-version-_RfsCQCx.js +1 -0
- package/dist/ui/assets/snapshot-Dtq5VBeA.js +5 -0
- package/dist/ui/assets/{snapshot-features-Dw5v6SoZ.js → snapshot-features-Dopnb9Bm.js} +1 -1
- package/dist/ui/assets/{soundscape-09mPeSPR.js → soundscape-CGUkUoeQ.js} +1 -1
- package/dist/ui/assets/{speak-CWzBia74.js → speak-CxwK7WUc.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-BUmhUwMO.js → sprinkle-manager-7If5XMR2.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-B6dWi-QW.js → sprinkle-renderer-BZE6UauM.js} +1 -1
- package/dist/ui/assets/{sudo-CcNMeNw9.js → sudo-Bur3ckJR.js} +1 -1
- package/dist/ui/assets/{supervisor-D1I8NtD6.js → supervisor-BoiwgqlW.js} +1 -1
- package/dist/ui/assets/{sync-dialog-K-6Dwu6Q.js → sync-dialog-CoFg-wC1.js} +1 -1
- package/dist/ui/assets/{transformers-env-CKLRzg13.js → transformers-env-CvumQVfQ.js} +1 -1
- package/dist/ui/assets/{tray-leader-BA8fnW8_.js → tray-leader-B4zwhLBC.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-uVbEBWHb.js → tray-leave-runtime-gvronesJ.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-DKl-ToAq.js → tray-sidecar-DOIJd5vJ.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-BW142R9z.js → upgrade-detection-DbUZ5LnM.js} +1 -1
- package/dist/ui/assets/{voice-reply-CqmBxgx2.js → voice-reply-CMQ06Wn-.js} +1 -1
- package/dist/ui/assets/{wc-attach-DrdD-8KV.js → wc-attach-CtS_GXt-.js} +2 -2
- package/dist/ui/assets/{wc-browser-BB31i94E.js → wc-browser-DjJiSTyC.js} +1 -1
- package/dist/ui/assets/{wc-computers-D3H84OT-.js → wc-computers-hk2xbTfE.js} +1 -1
- package/dist/ui/assets/{wc-detached-CvcOIohO.js → wc-detached-Cwjv2dxL.js} +1 -1
- package/dist/ui/assets/{wc-extension-DxWqpNa_.js → wc-extension-ClEdff6M.js} +2 -2
- package/dist/ui/assets/{wc-follower-d9YZQxTZ.js → wc-follower-Bf76brRQ.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-DKRo3i-9.js → wc-follower-oauth-BZYWuEQu.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-r0pgwj12.js → wc-gelatiere-Cs0ORVhQ.js} +1 -1
- package/dist/ui/assets/{wc-live-DpXgkTD5.js → wc-live-C-qevd3g.js} +5 -5
- package/dist/ui/assets/{wc-nav-BGeqjnUI.js → wc-nav-Rophsgk9.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-C7G7JAE2.js → wc-onboarding-Caj_waOY.js} +2 -2
- package/dist/ui/assets/{wc-permissions-CDFPXXDL.js → wc-permissions-D9yyGqLl.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-7BVfIQUy.js → wc-placeholder-BfxhJIh1.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-BMTup9oo.js → wc-secret-request-DqxZuJUL.js} +1 -1
- package/dist/ui/assets/{wc-settings-Bdhmy3v1.js → wc-settings-Bh44ZTl-.js} +3 -3
- package/dist/ui/assets/{wc-shell-9XZ8Z3qa.js → wc-shell-CJLjywlF.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-C8a2WkCw.js → wc-shortcut-config-Cz7Vv65u.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-rQb0mxS1.js → wc-sprinkles-DVTcJSN3.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-CpV_nEwR.js → wc-transcript-export-CE_ns2-x.js} +2 -2
- package/dist/ui/assets/{wc-tray-Cchd3cVu.js → wc-tray-DSEM6WbT.js} +4 -4
- package/dist/ui/assets/welcome-detection-BxKU2eoh.js +1 -0
- package/dist/ui/assets/{whisper-session-DWRyE1lC.js → whisper-session-BycheH59.js} +2 -2
- package/dist/ui/assets/{xai-grok-BpbbusoG.js → xai-grok-CW0J74cE.js} +1 -1
- package/dist/ui/assets/{xai-grok-FndYhbwy.js → xai-grok-Xy7OSykN.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/SKILL-DLrI4y2g.js +0 -1
- package/dist/ui/assets/provider-store-access-8gQsSLs9.js +0 -1
- package/dist/ui/assets/provider-store-access-C5y4WGSI.js +0 -1
- package/dist/ui/assets/slicc-version-B6632Mch.js +0 -1
- package/dist/ui/assets/snapshot-D6YGbggk.js +0 -5
- package/dist/ui/assets/welcome-detection-p9d7llYH.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{C as l,d as u,f as d,i as f,u as p}from"./account-store-cmW9lr-u.js";import{c as m,d as h,n as g,r as _,s as v}from"./proxied-fetch-F-dCBEfh.js";import{t as ee}from"./runtime-env-DadgceZk.js";import{t as te}from"./slugify-BYJ6QVAt.js";import{i as ne,n as re,r as ie,t as ae}from"./host-command-CwRNpVLr.js";import{a as oe,i as se,n as ce,r as le,t as ue}from"./snapshot-D6YGbggk.js";import{n as de,t as y}from"./panel-rpc-accessor-B4BfPLSo.js";import{a as fe,c as pe,n as me,o as he,s as ge,t as _e}from"./feature-flags-QlgHaQc1.js";import{t as ve}from"./providers-DAcj1Z9Z.js";import{r as ye}from"./binary-cache-bSOhqXB1.js";import{i as be,n as xe,r as Se}from"./fetch-body-CuwTaJC_.js";import{s as Ce,t as we}from"./api-endpoint-D8lUKmPu.js";import{t as Te}from"./compat-nGhSz-U1.js";import"./core-C1m4D34S.js";import{n as Ee,t as De}from"./mime-types-D7IV6i7k.js";import{n as Oe,t as ke}from"./float-topology-COIC4j_U.js";import{t as Ae}from"./secrets-bridge-client-GOCzDscb.js";import{a as je,i as Me,n as Ne,r as Pe}from"./tool-ui-DRnUkp2g.js";import{a as Fe,i as Ie,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as Le,r as Re,t as ze}from"./merge-file-core-VJlzucJY.js";import{n as Be,t as Ve}from"./types-D8gIX-W-.js";import{i as He}from"./mount-index-CQfmUPuZ.js";import{a as Ue,i as We,n as Ge,o as Ke,s as qe,t as Je}from"./signed-fetch-DeDG40wV.js";import{o as Ye}from"./mount-table-store-DrF_Ifaz.js";import{t as Xe}from"./remote-cache-UwMD8EkX.js";import{n as Ze}from"./fs-CKSBDyCr.js";import{a as Qe}from"./tray-leader-status-CpkFr6n7.js";import{n as $e,t as et}from"./slicc-version-B6632Mch.js";import{a as tt,i as nt,o as rt,r as S,t as it}from"./browser-Jlk38XAj.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as at,r as ot,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as st}from"./cost-command-05RLVzlt.js";import{d as ct,g as lt,i as ut,n as dt,o as ft}from"./sudoers-BdBYQPUn.js";import{t as pt}from"./sudo-refusal-DVwTXFRE.js";import{n as mt}from"./types-Dj5TU-Qg.js";import{a as ht,c as gt,i as _t,l as vt,n as yt,o as bt,r as xt,t as St}from"./types-JfhqX7lD.js";import{n as T,t as Ct}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as wt}from"./html-B_Hg2WOy.js";import{n as Tt}from"./llm-session-id-BZyXP_j2.js";import{t as Et}from"./src-CUSndb9K.js";import{i as Dt,o as Ot}from"./browser-DuyhpHbR.js";import{a as kt,c as At,n as jt,o as Mt,r as Nt,s as Pt,t as Ft}from"./reason-l_1I9RdR.js";import{i as It,r as Lt,t as Rt}from"./mount-picker-popup-BMils9JY.js";import{t as zt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Bt,B as E,C as Vt,D,E as Ht,F as Ut,G as Wt,H as O,I as k,J as Gt,K as Kt,L as qt,M as Jt,N as Yt,O as Xt,P as Zt,R as Qt,S as $t,T as en,U as tn,V as nn,W as rn,Y as an,_ as on,a as sn,b as cn,c as ln,d as un,f as dn,g as fn,h as pn,i as mn,j as hn,k as gn,l as _n,m as vn,n as yn,o as bn,p as A,q as xn,r as Sn,s as Cn,t as wn,u as Tn,v as En,w as Dn,x as On,y as kn,z as An}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as jn,_ as Mn,a as Nn,b as Pn,c as Fn,d as In,f as Ln,g as Rn,h as zn,i as Bn,l as Vn,n as Hn,o as Un,p as Wn,r as Gn,s as Kn,t as qn,u as Jn,v as j,x as M,y as Yn}from"./state-Tykh4Vum.js";import{a as Xn,i as Zn,r as Qn,t as $n}from"./git-config-Bdgu8kD2.js";import{h as er,i as tr,r as nr}from"./stdio-tty-BB4qV92F.js";import{i as rr,r as ir}from"./global-prefix-DqCuANmV.js";import{t as ar}from"./wasm-programs-Bd5YaoqY.js";import{a as or,n as sr,o as cr,r as lr,s as ur}from"./jsh-discovery-CnvNKojr.js";import{C as dr,a as fr,b as pr,c as mr,d as hr,f as gr,h as _r,i as vr,l as yr,m as br,n as xr,o as Sr,p as Cr,r as wr,s as Tr,t as N,u as Er,v as Dr,y as Or}from"./shared-D-ZRFYou.js";import{_ as kr,a as Ar,b as jr,d as Mr,f as Nr,g as Pr,h as Fr,i as Ir,l as Lr,m as Rr,p as zr,r as Br,s as Vr,u as Hr,v as Ur,x as Wr,y as Gr}from"./require-guards-DnafTLJr.js";import{_ as Kr,a as qr,b as Jr,c as Yr,d as Xr,f as Zr,g as Qr,h as $r,l as ei,m as ti,n as ni,p as ri,s as ii,t as ai,u as oi,v as si,x as ci,y as li}from"./jsh-executor-5RfX9BIL.js";import{n as ui,t as di}from"./esbuild-wasm-DeTghvWH.js";import{n as fi}from"./wasm-compiler-Ct7QZURL.js";import{a as pi,o as mi,s as hi,t as gi}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as _i,r as vi,t as yi}from"./just-bash-compat-B-SPHuh_.js";import{i as bi,r as xi,t as Si}from"./script-catalog-WaCMvXY3.js";import{a as Ci,c as wi,o as Ti,s as Ei,t as Di}from"./types-Dzr0qYl3.js";import{a as Oi,c as ki,d as Ai,f as ji,n as Mi,r as Ni,u as Pi}from"./github-zip-CUIsX5nN.js";import{i as Fi,t as Ii}from"./github-auth-CSG4xZUZ.js";import{a as Li,i as Ri,o as zi,r as Bi,t as Vi}from"./provenance-DdmsQ3Nr.js";import{a as Hi,c as Ui,i as Wi,n as Gi,o as Ki,r as qi,s as Ji}from"./github-install-HX3c8n0G.js";import{n as Yi,t as Xi}from"./magick-wasm-BbnwhVj1.js";import{i as Zi,n as Qi,r as $i,t as ea}from"./pdf-raster-BWk6ezTX.js";import{n as ta}from"./lick-target-env-8JxfVcIV.js";import{t as na}from"./tmpdir-env-ate4iNcK.js";import{n as ra,t as ia}from"./hf-defaults-BwJdGLgk.js";import{t as aa}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as oa}from"./local-llm-Cpt03yXM.js";import{i as sa,n as ca,r as la,t as ua}from"./tar-BWIPCxI2.js";import{a as da,c as fa,i as pa,o as ma,r as ha,s as ga}from"./v86-vm-DCm7zA2r.js";import{n as _a,r as va}from"./lick-urls-CgPiVwD-.js";let ya=null;function ba(e){ya=e!==null&&Number.isFinite(e)&&e>0?e:null}function xa(){if(ya!==null)return ya;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const Sa=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function Ca(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=Sa.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function wa(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function Ta(e,t){return e.some(e=>wa(e,t))}const Ea=`slicc-transcript`,Da=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],Oa=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function ka(e){return Oa.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Aa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const ja=new Set(Da),Ma=/^[0-9a-fA-F]{64}$/,Na=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Pa(e){return typeof e==`string`&&Ma.test(e)}function Fa(e){return Na.test(e)&&Number.isFinite(Date.parse(e))}function Ia(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function La(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ia(n,t)}:{ok:!0}}function Ra(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function za(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ba(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=La(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?za(e,t):n}function Va(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Ha(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Ua(e,t){let n=Va(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Ha(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Wa(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Fa(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function Ga(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Ka(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Ua(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=La(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Ga(e,t);if(!n.ok)return n}let r=Wa(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Ra(i,Ba,`${t}.content`);return a.ok?Ka(e,t):a}function Ja(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=La(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Ra(r,qa,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Ya(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Xa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Pa(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Za=[`attachment-file-missing`,`attachment-association-unavailable`];function Qa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?La(e.missingReason,Za,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function $a(e,t){return e.present?Xa(e,t):Qa(e,t)}function eo(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ya(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=La(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?$a(e,t):r}function to(e,t){let n=La(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function no(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=La(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?to(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function ro(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function io(e,t){return typeof e!=`string`||!ja.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function ao(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function oo(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=La(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Ra(e.missing,io,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function so(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=La(e.state,[`active`,`frozen`],`session.state`);return t.ok?oo(e.completeness):t}function co(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Ra(n,no,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function lo(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Ra(t,Ja,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Ra(r,ro,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Ra(a,eo,`attachments`):{ok:!1,error:`attachments must be an array`}}function uo(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function fo(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function po(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function mo(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of po(e))t.add(n)}return t}function ho(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function go(e){return ho(e,mo(e))}function _o(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function vo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=_o(e,t);if(!r.ok)return r}}return{ok:!0}}function yo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return vo(e,n)}function bo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function xo(e,t){let n=bo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function So(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(po(e)))}return t}function Co(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function wo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return Co(e,n,So(t))}function To(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function Eo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=To(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function Do(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=uo(t);if(!o.ok)return o;let s=fo(t);if(!s.ok)return s;let c=go(t);if(!c.ok)return c;let l=yo(t,n);if(!l.ok)return l;let u=xo(n,t);if(!u.ok)return u;let d=wo(r,t);return d.ok?Eo(a,n):d}function Oo(e){let t=lo(e);return t.ok?Do(e):t}function ko(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=ao(e.export);if(!t.ok)return t;let n=so(e.session);if(!n.ok)return n;let r=co(e.privacy);return r.ok?Oo(e):r}async function Ao(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:Ke});if(r.status===401||r.status===403)throw Error(`not authorized to read the site config for ${e}/${t} — log in via Settings → Providers → Adobe, or pass --backend to skip the probe`);if(r.status===404)throw Error(`no site config for ${e}/${t} — check the org and site names`);if(r.status>=400)throw Error(`site config probe failed for ${e}/${t}: ${r.status}`);let i;try{i=await r.json()}catch(n){throw Error(`site config for ${e}/${t} is not JSON: ${n instanceof Error?n.message:String(n)}`)}let a=i.content?.source?.url;return{backend:jo(a),sourceUrl:a}}function jo(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Mo=`slicc-sprinkle-routes`;function No(){try{let e=localStorage.getItem(Mo);return e?JSON.parse(e):{}}catch{return{}}}function Po(e){try{localStorage.setItem(Mo,JSON.stringify(e))}catch{}}function Fo(e){return No()[e]}function Io(e,t){let n=No();n[e]=t,Po(n)}function Lo(e){let t=No();delete t[e],Po(t)}function Ro(){return No()}function zo(e,t,n){return gt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Bo(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(zo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Vo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Bo(t,`browser`,yt,e.browser),network:Bo(t,`network`,ht,e.network),secrets:Bo(t,`secrets`,bt,e.secrets),devices:Bo(t,`devices`,xt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Bo(t,`mounts`,_t,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Bo(t,`approvals`,St,e.approvals)}}function Ho(e={}){return Vo({adapter:`connect`,pageGestures:e.pageGestures})}function Uo(e){let t=Ct(()=>import(`./extension-ops-OtrqWANJ.js`).then(t=>t.createExtensionOps(e)));return Vo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Wo(e={}){let t=Ct(()=>import(`./rest-ops-j0P6ql7f.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Vo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Go(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Wo({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Uo({adapter:e,pageGestures:n});case`connect`:return Ho({pageGestures:n})}}const Ko=e(`quick-llm`);async function qo(e){let t=f();if(!t)return Ko.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?Zo(n,e.modelId)??Zo(n,r):Jo(n,r),!i)return Ko.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Qo());try{let n=(await Te(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Ko.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Jo(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Xo(r.id),a=n.filter(e=>Yo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Yo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Xo(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Zo(e,t){return p(e).find(e=>e.id===t)}function Qo(){return Tt(`ui-quick-llm`)}const $o=e(`sudo-suggest`),es=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
|
|
1
|
+
import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{C as l,d as u,f as d,i as f,u as p}from"./account-store-D7DGAxNM.js";import{c as m,d as h,n as g,r as _,s as v}from"./proxied-fetch-F-dCBEfh.js";import{t as ee}from"./runtime-env-DadgceZk.js";import{t as te}from"./slugify-BYJ6QVAt.js";import{i as ne,n as re,r as ie,t as ae}from"./host-command-CwRNpVLr.js";import{a as oe,i as se,n as ce,r as le,t as ue}from"./snapshot-Dtq5VBeA.js";import{n as de,t as y}from"./panel-rpc-accessor-B4BfPLSo.js";import{a as fe,c as pe,n as me,o as he,s as ge,t as _e}from"./feature-flags-QlgHaQc1.js";import{t as ve}from"./providers-Dz9lZ6WH.js";import{r as ye}from"./binary-cache-bSOhqXB1.js";import{i as be,n as xe,r as Se}from"./fetch-body-CuwTaJC_.js";import{s as Ce,t as we}from"./api-endpoint-D8lUKmPu.js";import{t as Te}from"./compat-nGhSz-U1.js";import"./core-C1m4D34S.js";import{n as Ee,t as De}from"./mime-types-D7IV6i7k.js";import{n as Oe,t as ke}from"./float-topology-COIC4j_U.js";import{t as Ae}from"./secrets-bridge-client-GOCzDscb.js";import{a as je,i as Me,n as Ne,r as Pe}from"./tool-ui-DRnUkp2g.js";import{a as Fe,i as Ie,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as Le,r as Re,t as ze}from"./merge-file-core-VJlzucJY.js";import{n as Be,t as Ve}from"./types-D8gIX-W-.js";import{i as He}from"./mount-index-CQfmUPuZ.js";import{a as Ue,i as We,n as Ge,o as Ke,s as qe,t as Je}from"./signed-fetch-DeDG40wV.js";import{o as Ye}from"./mount-table-store-DrF_Ifaz.js";import{t as Xe}from"./remote-cache-UwMD8EkX.js";import{n as Ze}from"./fs-CKSBDyCr.js";import{a as Qe}from"./tray-leader-status-CpkFr6n7.js";import{n as $e,t as et}from"./slicc-version-_RfsCQCx.js";import{a as tt,i as nt,o as rt,r as S,t as it}from"./browser-Jlk38XAj.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as at,r as ot,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as st}from"./cost-command-05RLVzlt.js";import{d as ct,g as lt,i as ut,n as dt,o as ft}from"./sudoers-BdBYQPUn.js";import{t as pt}from"./sudo-refusal-DVwTXFRE.js";import{n as mt}from"./types-Dj5TU-Qg.js";import{a as ht,c as gt,i as _t,l as vt,n as yt,o as bt,r as xt,t as St}from"./types-JfhqX7lD.js";import{n as T,t as Ct}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as wt}from"./html-B_Hg2WOy.js";import{n as Tt}from"./llm-session-id-BZyXP_j2.js";import{t as Et}from"./src-CUSndb9K.js";import{i as Dt,o as Ot}from"./browser-DuyhpHbR.js";import{a as kt,c as At,n as jt,o as Mt,r as Nt,s as Pt,t as Ft}from"./reason-l_1I9RdR.js";import{i as It,r as Lt,t as Rt}from"./mount-picker-popup-BMils9JY.js";import{t as zt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Bt,B as E,C as Vt,D,E as Ht,F as Ut,G as Wt,H as O,I as k,J as Gt,K as Kt,L as qt,M as Jt,N as Yt,O as Xt,P as Zt,R as Qt,S as $t,T as en,U as tn,V as nn,W as rn,Y as an,_ as on,a as sn,b as cn,c as ln,d as un,f as dn,g as fn,h as pn,i as mn,j as hn,k as gn,l as _n,m as vn,n as yn,o as bn,p as A,q as xn,r as Sn,s as Cn,t as wn,u as Tn,v as En,w as Dn,x as On,y as kn,z as An}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as jn,_ as Mn,a as Nn,b as Pn,c as Fn,d as In,f as Ln,g as Rn,h as zn,i as Bn,l as Vn,n as Hn,o as Un,p as Wn,r as Gn,s as Kn,t as qn,u as Jn,v as j,x as M,y as Yn}from"./state-Tykh4Vum.js";import{a as Xn,i as Zn,r as Qn,t as $n}from"./git-config-Bdgu8kD2.js";import{h as er,i as tr,r as nr}from"./stdio-tty-BB4qV92F.js";import{i as rr,r as ir}from"./global-prefix-DqCuANmV.js";import{t as ar}from"./wasm-programs-Bd5YaoqY.js";import{a as or,n as sr,o as cr,r as lr,s as ur}from"./jsh-discovery-CnvNKojr.js";import{C as dr,a as fr,b as pr,c as mr,d as hr,f as gr,h as _r,i as vr,l as yr,m as br,n as xr,o as Sr,p as Cr,r as wr,s as Tr,t as N,u as Er,v as Dr,y as Or}from"./shared-D-ZRFYou.js";import{_ as kr,a as Ar,b as jr,d as Mr,f as Nr,g as Pr,h as Fr,i as Ir,l as Lr,m as Rr,p as zr,r as Br,s as Vr,u as Hr,v as Ur,x as Wr,y as Gr}from"./require-guards-DnafTLJr.js";import{_ as Kr,a as qr,b as Jr,c as Yr,d as Xr,f as Zr,g as Qr,h as $r,l as ei,m as ti,n as ni,p as ri,s as ii,t as ai,u as oi,v as si,x as ci,y as li}from"./jsh-executor-UfR3L63B.js";import{n as ui,t as di}from"./esbuild-wasm-DeTghvWH.js";import{n as fi}from"./wasm-compiler-Ct7QZURL.js";import{a as pi,o as mi,s as hi,t as gi}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as _i,r as vi,t as yi}from"./just-bash-compat-B-SPHuh_.js";import{i as bi,r as xi,t as Si}from"./script-catalog-WaCMvXY3.js";import{a as Ci,c as wi,o as Ti,s as Ei,t as Di}from"./types-Dzr0qYl3.js";import{a as Oi,c as ki,d as Ai,f as ji,n as Mi,r as Ni,u as Pi}from"./github-zip-CUIsX5nN.js";import{i as Fi,t as Ii}from"./github-auth-CSG4xZUZ.js";import{a as Li,i as Ri,o as zi,r as Bi,t as Vi}from"./provenance-DdmsQ3Nr.js";import{a as Hi,c as Ui,i as Wi,n as Gi,o as Ki,r as qi,s as Ji}from"./github-install-HX3c8n0G.js";import{n as Yi,t as Xi}from"./magick-wasm-BbnwhVj1.js";import{i as Zi,n as Qi,r as $i,t as ea}from"./pdf-raster-BWk6ezTX.js";import{n as ta}from"./lick-target-env-8JxfVcIV.js";import{t as na}from"./tmpdir-env-ate4iNcK.js";import{n as ra,t as ia}from"./hf-defaults-BwJdGLgk.js";import{t as aa}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as oa}from"./local-llm-DAdQyx68.js";import{i as sa,n as ca,r as la,t as ua}from"./tar-BWIPCxI2.js";import{a as da,c as fa,i as pa,o as ma,r as ha,s as ga}from"./v86-vm-DCm7zA2r.js";import{n as _a,r as va}from"./lick-urls-CgPiVwD-.js";let ya=null;function ba(e){ya=e!==null&&Number.isFinite(e)&&e>0?e:null}function xa(){if(ya!==null)return ya;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const Sa=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function Ca(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=Sa.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function wa(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function Ta(e,t){return e.some(e=>wa(e,t))}const Ea=`slicc-transcript`,Da=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],Oa=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function ka(e){return Oa.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Aa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const ja=new Set(Da),Ma=/^[0-9a-fA-F]{64}$/,Na=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Pa(e){return typeof e==`string`&&Ma.test(e)}function Fa(e){return Na.test(e)&&Number.isFinite(Date.parse(e))}function Ia(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function La(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ia(n,t)}:{ok:!0}}function Ra(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function za(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ba(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=La(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?za(e,t):n}function Va(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Ha(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Ua(e,t){let n=Va(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Ha(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Wa(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Fa(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function Ga(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Ka(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Ua(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=La(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Ga(e,t);if(!n.ok)return n}let r=Wa(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Ra(i,Ba,`${t}.content`);return a.ok?Ka(e,t):a}function Ja(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=La(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Ra(r,qa,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Ya(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Xa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Pa(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Za=[`attachment-file-missing`,`attachment-association-unavailable`];function Qa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?La(e.missingReason,Za,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function $a(e,t){return e.present?Xa(e,t):Qa(e,t)}function eo(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ya(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=La(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?$a(e,t):r}function to(e,t){let n=La(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function no(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=La(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?to(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function ro(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function io(e,t){return typeof e!=`string`||!ja.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function ao(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function oo(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=La(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Ra(e.missing,io,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function so(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=La(e.state,[`active`,`frozen`],`session.state`);return t.ok?oo(e.completeness):t}function co(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Ra(n,no,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function lo(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Ra(t,Ja,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Ra(r,ro,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Ra(a,eo,`attachments`):{ok:!1,error:`attachments must be an array`}}function uo(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function fo(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function po(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function mo(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of po(e))t.add(n)}return t}function ho(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function go(e){return ho(e,mo(e))}function _o(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function vo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=_o(e,t);if(!r.ok)return r}}return{ok:!0}}function yo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return vo(e,n)}function bo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function xo(e,t){let n=bo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function So(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(po(e)))}return t}function Co(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function wo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return Co(e,n,So(t))}function To(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function Eo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=To(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function Do(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=uo(t);if(!o.ok)return o;let s=fo(t);if(!s.ok)return s;let c=go(t);if(!c.ok)return c;let l=yo(t,n);if(!l.ok)return l;let u=xo(n,t);if(!u.ok)return u;let d=wo(r,t);return d.ok?Eo(a,n):d}function Oo(e){let t=lo(e);return t.ok?Do(e):t}function ko(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=ao(e.export);if(!t.ok)return t;let n=so(e.session);if(!n.ok)return n;let r=co(e.privacy);return r.ok?Oo(e):r}async function Ao(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:Ke});if(r.status===401||r.status===403)throw Error(`not authorized to read the site config for ${e}/${t} — log in via Settings → Providers → Adobe, or pass --backend to skip the probe`);if(r.status===404)throw Error(`no site config for ${e}/${t} — check the org and site names`);if(r.status>=400)throw Error(`site config probe failed for ${e}/${t}: ${r.status}`);let i;try{i=await r.json()}catch(n){throw Error(`site config for ${e}/${t} is not JSON: ${n instanceof Error?n.message:String(n)}`)}let a=i.content?.source?.url;return{backend:jo(a),sourceUrl:a}}function jo(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Mo=`slicc-sprinkle-routes`;function No(){try{let e=localStorage.getItem(Mo);return e?JSON.parse(e):{}}catch{return{}}}function Po(e){try{localStorage.setItem(Mo,JSON.stringify(e))}catch{}}function Fo(e){return No()[e]}function Io(e,t){let n=No();n[e]=t,Po(n)}function Lo(e){let t=No();delete t[e],Po(t)}function Ro(){return No()}function zo(e,t,n){return gt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Bo(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(zo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Vo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Bo(t,`browser`,yt,e.browser),network:Bo(t,`network`,ht,e.network),secrets:Bo(t,`secrets`,bt,e.secrets),devices:Bo(t,`devices`,xt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Bo(t,`mounts`,_t,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Bo(t,`approvals`,St,e.approvals)}}function Ho(e={}){return Vo({adapter:`connect`,pageGestures:e.pageGestures})}function Uo(e){let t=Ct(()=>import(`./extension-ops-OtrqWANJ.js`).then(t=>t.createExtensionOps(e)));return Vo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Wo(e={}){let t=Ct(()=>import(`./rest-ops-j0P6ql7f.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Vo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Go(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Wo({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Uo({adapter:e,pageGestures:n});case`connect`:return Ho({pageGestures:n})}}const Ko=e(`quick-llm`);async function qo(e){let t=f();if(!t)return Ko.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?Zo(n,e.modelId)??Zo(n,r):Jo(n,r),!i)return Ko.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Qo());try{let n=(await Te(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Ko.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Jo(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Xo(r.id),a=n.filter(e=>Yo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Yo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Xo(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Zo(e,t){return p(e).find(e=>e.id===t)}function Qo(){return Tt(`ui-quick-llm`)}const $o=e(`sudo-suggest`),es=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
|
|
2
2
|
`),ts=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
|
|
3
3
|
`);async function ns(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim();if(e.kind===`guest-message`||e.kind===`guest-tool`)return n;let r=e.kind===`command`?es:ts,i=null;try{i=await qo({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){$o.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return rs(i)||n}function rs(e){if(!e)return null;let t=(e.split(`
|
|
4
4
|
`,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}const is=e(`sudo:capability-gesture`);function as(e,t={}){let n=t.suggest??ns;return{async requestApproval(t,r){let i=r?.signal,a;if(t.suggestedPattern)a=t.suggestedPattern;else try{a=await n(t,i)}catch{a=t.detail}if(i?.aborted)return is.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),mt();if(!e)return is.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),mt();let o=await e.approvals.request({kind:t.kind,detail:t.detail,suggestedPattern:a,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{},...i?{signal:i}:{}});return o.ok?vt(o.value,a):(is.warn(`capability broker approvals.request failed — denying`,{message:o.message}),mt())}}}const os=e(`sudo:tray-first`);function ss(e,t={}){let n=t.suggest??ns,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-CR9k3qWE.js`).then(e=>e.r);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return mt();let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){os.debug?.(`panel-RPC client lookup threw — using native broker`,{error:e instanceof Error?e.message:String(e)})}if(c)try{let e=await c.call(`sudo-request`,{request:s,mode:`tray-first`},{timeoutMs:r});if(e?.handled!==!1)return ls(e?.decision,o)}catch(e){os.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}const cs=[`user-timeout`,`cone-timeout`,`unavailable`];function ls(e,t){if(!e||typeof e!=`object`)return mt();let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;if(n.decision===`allow`)return{decision:`allow`,...r?{attestation:r}:{}};if(n.decision===`always`)return{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}};if(n.decision!==`deny`)return mt();let i=cs.find(e=>e===n.reason);return i?{decision:`deny`,reason:i}:{decision:`deny`}}function us(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ds(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var fs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ds,this.setTimer=e.setTimer??((e,t)=>setTimeout(e,t)),this.clearTimer=e.clearTimer??(e=>clearTimeout(e)),this.onAutoSettle=e.onAutoSettle??(()=>{})}notifyAutoSettle(e,t,n){try{this.onAutoSettle(e,t,n)}catch{}}register(e,t,n){let r=this.newId();return{id:r,pending:new Promise(i=>{let a=null;Number.isFinite(this.timeoutMs)&&this.timeoutMs>0&&(a=this.setTimer(()=>{let e=this.pending.get(r);e&&(this.pending.delete(r),e.resolve(ie(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function ps(e){return ne(ms(e))}function ms(e){let t=as(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:ss(t)}let hs=null;function gs(e){return hs=e,()=>{hs===e&&(hs=null)}}function _s(){if(!hs)throw new Aa(`session-not-found`);return hs}const vs=`focus`,ys={type:`leaf`,surfaceId:`chat`};function bs(e,t={},n={}){return{zones:{top:null,left:null,middle:null,right:null,bottom:null,...e},rowFr:{top:1,center:1,bottom:1,...n},colFr:{left:1,middle:1,right:1,...t}}}const xs={focus:{name:`focus`,tree:bs({left:ys},{left:3,middle:1})}};function Ss(e){return xs[e]??null}const Cs=`progress`;async function ws(){try{let e=await Lt();if(e.cancelled)throw Error(`mount: cancelled`);if(e.error)throw Error(`mount: ${e.error}`);if(e.handleInIdb&&typeof e.idbKey==`string`){let t=await Rt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await It(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Ts(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Es(e,t){let n;try{({grants:n}=await e.call(`permission-request`,{kinds:[`filesystem`],description:`A command in the terminal asks to mount a local directory at ${t}.`},{timeoutMs:3e5}))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(t.replace(/^permission-request: /,``))}let r=n.find(e=>e.kind===`filesystem`);if(!r||!(`idbKey`in r))throw Error(`no directory selected`);let i=await Rt(r.idbKey);if(!i)throw Error(`no directory handle found in storage`);return await It(i),i}function Ds(e){let t={positional:[],noProbe:!1,clearCache:!1,bodies:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`--source`)t.source=e[++n];else if(r===`--profile`)t.profile=e[++n];else if(r===`--backend`){let r=e[++n];r===`da`||r===`aem`?t.backend=r:t.backendError=r}else r===`--no-probe`?t.noProbe=!0:r===`--max-body-mb`?t.maxBodyMb=Number(e[++n]):r===`--clear-cache`?t.clearCache=!0:r===`--bodies`?t.bodies=!0:r===`--json`?t.json=!0:t.positional.push(r)}return t}function Os(e){let t=e.match(/^(da|aem):\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);return t?{scheme:t[1],org:t[2],name:t[3],path:(t[4]??``).replace(/^\/+/,``).replace(/\/+$/,``)}:null}const ks=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function As(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;ks.has(n)&&t++}return!1}function js(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Ms=class{options;signedFetchS3;signedFetchDa;constructor(e){this.options=e,this.signedFetchS3=e.signedFetchS3,this.signedFetchDa=e.signedFetchDa}async execute(e,t,n){let r=e[0];if(r===`--help`||r===`-h`)return this.help();if(r===`unmount`||r===`-u`)return this.handleUnmount(e.slice(1),t,`mount unmount`);if(r===`list`||r===`-l`||r===`--list`)return this.handleList();if(r===`refresh`)return this.handleRefresh(e.slice(1),t,n);if(r===`info`)return this.handleInfo(e.slice(1),t);let i=Ds(e);if(i.positional.length===0)return this.usageError(`mount: mount point required`);let a=this.resolvePath(i.positional[0],t);return i.backendError===void 0?i.source?i.source.startsWith(`s3://`)?this.mountS3(a,i):i.source.startsWith(`da://`)||i.source.startsWith(`aem://`)?this.mountAdobe(a,i):this.usageError(`mount: invalid source '${i.source}' — expected s3://..., da://... or aem://...`):this.mountLocal(a,n):this.usageError(`mount: invalid --backend '${i.backendError}' — expected 'da' or 'aem'`)}async executeUmount(e,t){return this.handleUnmount(e,t,`umount`)}async mountLocal(e,t){try{if((this.options.isScoop??(()=>!1))())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n=je();if(!n){let n=await Ns(e);if(n)return await this.options.fs.mount(e,n,{env:t}),{stdout:`Mounted '${n.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}let r=de()?null:y(),i;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);i=await t(n,e)}else i=ee()?await ws():r?await Es(r,e):await Ts();let a=He.fromHandle(i,{mountId:Ye()});return await this.options.fs.mount(e,a,{env:t}),{stdout:`Mounted '${a.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async mountS3(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=Ye(),i=new Xe({mountId:r,ttlMs:3e4}),a=new We({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Ge(n)});if(!t.noProbe)try{await a.readDir(`/`)}catch(e){return await a.close(),{stdout:``,stderr:`mount: probe failed for ${t.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,a),{stdout:`Mounted '${a.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:``,exitCode:0}}async mountAdobe(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=this.signedFetchDa??Je(),i=Os(t.source);if(!i)return this.usageError(`mount: invalid source '${t.source}' — expected da://org/repo or aem://org/site`);let a=i.scheme===`aem`?`aem`:`da`,o=``;if(t.backend)a=t.backend;else if(i.scheme===`da`)try{a=(await Ao(i.org,i.name,r)).backend,a===`aem`&&(o=`mount: ${i.org}/${i.name} is on Helix 6 — its content lives in the Source Bus at https://api.aem.live/${i.org}/sites/${i.name}/source, not admin.da.live. Mounting through aem://${i.org}/${i.name}. Pass --backend da to force the old endpoint.\n`)}catch(e){return{stdout:``,stderr:`mount: could not determine the content source for ${t.source} — ${e instanceof Error?e.message:String(e)}. Pass --backend da or --backend aem to skip this probe.\n`,exitCode:1}}let s=Ye(),c=new Xe({mountId:s,ttlMs:3e4}),l={source:a===`aem`?js(i):`da://${i.org}/${i.name}${i.path?`/${i.path}`:``}`,profile:n,cache:c,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:s,signedFetch:r},u=a===`aem`?new qe(l):new Ue(l);if(!t.noProbe)try{await u.readDir(`/`)}catch(e){return await u.close(),{stdout:``,stderr:o+`mount: probe failed for ${l.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,u),{stdout:`Mounted '${u.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:o,exitCode:0}}async handleUnmount(e,t,n){if(As(e))return n===`umount`?this.umountHelp():this.help();let r=Ds(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-UwMD8EkX.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
|
|
@@ -287,7 +287,7 @@ Examples:
|
|
|
287
287
|
skill list
|
|
288
288
|
skill info bluebubbles
|
|
289
289
|
skill read bluebubbles
|
|
290
|
-
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-
|
|
290
|
+
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-coLE80Cx.js`).then(e=>e.r);try{switch(r){case`list`:return Eh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
|
|
291
291
|
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:wh(r),stderr:``,exitCode:0}:{stdout:``,stderr:`skill: "${n}" not found\n`,exitCode:1}}case`read`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: read requires a skill name
|
|
292
292
|
`,exitCode:1};let r=await i.readSkillInstructions(e,n);return r===null?{stdout:``,stderr:`skill: no SKILL.md found for "${n}"\n`,exitCode:1}:{stdout:r+`
|
|
293
293
|
`,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const Oh=[{names:[`--branch`,`-b`],validate:e=>!e.startsWith(`-`)&&i(e),error:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters`,apply:(e,t)=>{e.branch=t}},{names:[`--from`],validate:e=>Wi(e)!==null,error:`upskill: --from requires a GitHub source (owner/repo, owner/repo@branch, or a github.com URL)`,apply:(e,t)=>{e.from=t}},{names:[`--path`,`-p`],validate:e=>o(e),error:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters`,apply:(e,t)=>{e.path=t}}];function kh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=Oh.find(e=>e.names.includes(r));if(i){let r=e[++n];if(!r||!i.validate(r))return t.error=i.error,t;i.apply(t,r)}else if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--json`)t.json=!0;else if(r.startsWith(`-`))return t.error=`upskill: unknown option "${r}" for update`,t;else t.skills.push(r)}return t}function Ah(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function jh(e,t){try{let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(String(n))}catch{return}}async function Mh(e,t,n,r){let i=await jh(e,t);return Ai(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?Ah(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function Nh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await Mh(e,n,r,a);i.changes.push({path:r,status:o}),s&&i.writes.push({path:n,content:a})}let a=new Set(r.files??[]);for(let r of await ji(e,t)){if(n.has(r))continue;let e=a.has(r);i.changes.push({path:r,status:e?`removed`:`kept-local`}),e&&i.removals.push(`${t}/${r}`)}return i.changes.sort((e,t)=>e.path.localeCompare(t.path)),i}async function Ph(e,t,n,r,i,a){let o={skill:n,source:`${r.kind}:${r.source}`,ref:i??r.ref,from:r.sha,outcome:`current`,changes:[]},[s,c]=r.source.split(`/`);if(!s||!c)return{...o,outcome:`error`,error:`unusable source "${r.source}"`};let l=(r.path??``).replace(/^\/|\/$/g,``),u=await Ii(t),d=await Ri(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await Fh(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await Ih(s,c,l,n,o.ref,t,u);if(`error`in f)return{...o,outcome:`error`,error:f.error};let p=f.files,m=f.path;if(p.size===0)return{...o,outcome:`error`,error:`no files at ${s}/${c}${m?`/${m}`:``} — the skill may have moved or been removed upstream`};let{changes:h,writes:g,removals:_}=await Nh(e,`${Ci}/${n}`,p,r),v=g.length>0||_.length>0;if(a)return{...o,outcome:v?`updated`:`current`,changes:h};let ee=d??r.sha;return v&&await Vh(e,{changes:h,writes:g,removals:_}),await zi(e,n,{...r,ref:o.ref,path:m,sha:ee,files:[...p.keys()].sort()}),{...o,to:ee,outcome:v?`updated`:`current`,changes:h}}async function Fh(e,t,n){if(!n.files?.length)return!1;for(let r of n.files)if(!await e.exists(`/workspace/skills/${t}/${r}`))return!1;return!0}async function Ih(e,t,n,r,i,a,o){let s=await Ni(e,t,a,i??`main`);if(s.status===`ok`){let i=Oi(s.files),a=n||Lh(i,r);return a===null?{error:`could not find "${r}/SKILL.md" in ${e}/${t} — pass --path <dir> to say where the skill lives`}:{files:Bh(i,a),path:a}}try{return{files:zh(Rh(await Mi(e,t,n,i,o))),path:n}}catch(e){let t=e instanceof Error?e.message:String(e);return{error:`${s.message}; Contents API fallback failed: ${t}`}}}function Lh(e,t){let n=[];for(let r of Object.keys(e))r===`SKILL.md`?n.push(``):(r.endsWith(`/${t}/SKILL.md`)||r===`${t}/SKILL.md`)&&n.push(r.slice(0,-9));return n.length===0?null:(n.sort((e,t)=>e.split(`/`).length-t.split(`/`).length||e.localeCompare(t)),n[0])}function Rh(e){return new Map([...e].filter(([e])=>ki(e)))}function zh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function Bh(e,t){let n=t?`${t}/`:``,r=new Map;for(let[t,i]of Object.entries(e)){if(!t.startsWith(n)||t.endsWith(`/`))continue;let e=t.slice(n.length);ki(e)&&r.set(e,i)}return zh(r)}async function Vh(e,t){for(let n of t.writes){let t=n.path.slice(0,n.path.lastIndexOf(`/`));await e.mkdir(t,{recursive:!0}),await e.writeFile(n.path,n.content)}for(let n of t.removals)await e.rm(n).catch(()=>{})}async function Hh(e,t,n,r,i){let a={skill:n,source:`${r.kind}:${r.source}`,outcome:`current`,changes:[]},[o,s]=r.source.split(`/`);if(!o||!s)return{...a,outcome:`error`,error:`unusable source "${r.source}"`};let c=await yh(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${Ci}/${n}/SKILL.md`,u=await jh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&_h(new TextDecoder().decode(u))===_h(c.content);if(Ah(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${Ci}/${n}`,{recursive:!0}),await e.writeFile(l,d),await zi(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function Uh(e,t){if(e.outcome===`error`)return` ${e.skill}: failed — ${e.error}\n`;let n=new Map;for(let t of e.changes)n.set(t.status,(n.get(t.status)??0)+1);let r=e.to&&e.to!==e.from?` → ${e.to.slice(0,7)}`:``;if(e.outcome===`current`)return` ${e.skill}: already current (${e.source}${r})\n`;let i=t?`would update`:`updated`,a=` ${e.skill}: ${i} from ${e.source}${r}\n`;for(let t of e.changes)t.status!==`unchanged`&&(a+=` ${t.status.padEnd(10)} ${t.path}\n`);let o=n.get(`kept-local`)??0;return o>0&&(a+=` (${o} kept-local — dotfiles and local additions are never touched)\n`),a}function Wh(e,t,n,r){let i=Wi(t);return i?{version:1,kind:`github`,source:`${i.owner}/${i.repo}`,skill:e,ref:r??i.branch,path:n??i.path,installed:new Date().toISOString()}:null}async function Gh(e,t,n){if(t.length===0){let t=await Li(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await Bi(e,a);if(t){r.push({name:a,provenance:t});continue}if(!await e.exists(`/workspace/skills/${a}`)){i.push({name:a,reason:`not-installed`});continue}let o=n.from?Wh(a,n.from,n.path,n.branch):null;o?r.push({name:a,provenance:o}):i.push({name:a,reason:`no-provenance`})}return{targets:r,missing:i,skipped:[]}}function Kh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
|
|
@@ -298,7 +298,7 @@ Examples:
|
|
|
298
298
|
`}function Yh(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
|
|
299
299
|
`:`Skill update:
|
|
300
300
|
`;for(let n of e)a+=Uh(n,t);if(i.length>0&&(a+=Jh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${qh(e.length,`skill`)} with provenance ${e.length===1?`is`:`are`}`:`all skills are`;a+=t?`\n${n.charAt(0).toUpperCase()}${n.slice(1)} current.\n`:`\nNothing to update — ${n} current.\n`}return a}async function Xh(e,t,n){let{targets:r,missing:i,skipped:a}=await Gh(e,n.skills,{skills:n.skills,dryRun:n.dryRun,json:!1,branch:n.branch,from:n.from,path:n.path}),o=[];for(let i of r)o.push(i.provenance.kind===`browse.sh`?await Hh(e,t,i.name,i.provenance,n.dryRun):await Ph(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function Zh(e,t,n){let r=kh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await Xh(t,n,r);if(i.length===0)return a.length===0&&o.length>0?{stdout:r.json?`${JSON.stringify({ok:!0,dryRun:r.dryRun,results:[],skipped:o})}\n`:Yh([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(Kh).join(``):"upskill: no skill has install provenance yet — reinstall a skill, or run `upskill update <skill> --from <owner>/<repo>`, to record its source\n",exitCode:1};let s=i.filter(e=>e.outcome===`error`),c=i.some(e=>e.outcome===`updated`);c&&!r.dryRun&&await Ui();let l=a.map(Kh).join(``)+s.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``),u=s.length===0&&a.length===0;return r.json?{stdout:`${JSON.stringify({ok:u,dryRun:r.dryRun,results:i,skipped:o})}\n`,stderr:l,exitCode:+!u}:{stdout:Yh(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function Qh(e){let t={outdated:!1,json:!1};for(let n of e)if(n===`--outdated`)t.outdated=!0;else if(n===`--json`)t.json=!0;else if(n.startsWith(`-`))return t.error=`upskill: unknown option "${n}" for list`,t;else return t.error=`upskill: unexpected argument "${n}" for list`,t;return t}function $h(e){return e.to&&e.from&&e.to!==e.from?` ${e.from.slice(0,7)} → ${e.to.slice(0,7)}`:e.to?` ${e.to.slice(0,7)}`:``}function eg(e,t){let n=e.filter(e=>e.outcome===`updated`),r=[];if(n.length===0)r.push(`No outdated skills.`);else{r.push(`Outdated skills:`,``);for(let e of n)r.push(` ${e.skill} ${e.source}${$h(e)}`)}if(t.length>0){let e=t.length===1?`skill`:`skills`;r.push(``,`Skipped ${t.length} ${e} with no install provenance — not checked.`)}let i=e.filter(e=>e.outcome===`error`);if(i.length>0){let e=i.length===1?`skill`:`skills`;r.push(``,`Could not check ${i.length} ${e}:`);for(let e of i)r.push(` ${e.skill}: failed — ${e.error}`)}return`${r.join(`
|
|
301
|
-
`)}\n`}async function tg(e,t,n){let r=await(await import(`./kernel-worker-
|
|
301
|
+
`)}\n`}async function tg(e,t,n){let r=await(await import(`./kernel-worker-coLE80Cx.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await lr(e,or(n));return t?{stdout:`${JSON.stringify({ok:!0,skills:r,commandCollisions:i})}\n`,stderr:``,exitCode:0}:r.length===0?{stdout:`No discoverable local skills found.\n\n${xh()}`,stderr:``,exitCode:0}:{...ur(`upskill`,Ch(r,`Discoverable local skills`),i,{builtinNames:new Set(rt())}),exitCode:0}}async function ng(e,t,n){let{results:r,skipped:i}=await Xh(e,t,{skills:[],dryRun:!0}),a=r.filter(e=>e.outcome===`updated`),o=r.filter(e=>e.outcome===`error`),s=o.length===0,c=o.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``);return n?{stdout:`${JSON.stringify({ok:s,results:[...a,...o],skipped:i})}\n`,stderr:c,exitCode:+!s}:{stdout:eg(r,i),stderr:c,exitCode:+!s}}async function rg(e,t,n,r){let i=Qh(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?ng(t,n,i.json):tg(t,i.json,r)}async function ig(e,t){let n=`${wi}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=20`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){throw Error(Fi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=be(r.body);if(!i.data)return[];let a=new Map;for(let e of i.data){if(e.type!==`skill`)continue;let t=e.attributes,n=Hi(t.sourceUrl),r=n?`${n.owner}/${n.repo}`:void 0,i=t.scores.aggregate==null?null:Math.round(t.scores.aggregate*100),o=t.sourceUrl||e.id,s=a.get(o);if(s&&s.qualityScore!=null&&i!=null&&s.qualityScore>=i)continue;let c=t.path.replace(/\/SKILL\.md$/i,``),l=c.split(`/`).pop()||t.name,u=n?`upskill ${n.owner}/${n.repo} --path ${c.split(`/`).slice(0,-1).join(`/`)||`.`} --skill ${l}`:`upskill tessl:${t.name}`;a.set(o,{name:t.name,displayName:t.name,summary:t.description||``,source:`tessl`,qualityScore:i,installHint:u,featured:t.featured,sourceRepo:r})}return Array.from(a.values())}async function ag(e,t){let n=`${wi}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=5`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){return{error:`Tessl search failed: ${Fi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=be(r.body).data?.find(t=>t.type===`skill`&&t.attributes.name===e);if(!i)return{error:`skill "${e}" not found on Tessl registry`};let a=Hi(i.attributes.sourceUrl);if(!a)return{error:`skill "${e}" has no GitHub source URL`};let o=i.attributes.path.replace(/\/SKILL\.md$/i,``);return{owner:a.owner,repo:a.repo,skillPath:o,skillName:e}}const og=[{label:`Tessl`,host:new URL(wi).host,fetch:ig},{label:`browse.sh`,host:new URL(Di).host,fetch:dh}];function sg(e){let t=[],n=e.reduce((e,t)=>Math.max(e,t.length),0);for(let r=0;r<n;r++)for(let n of e)r<n.length&&t.push(n[r]);return t}async function cg(e,t,n=1){let r=await Promise.allSettled(og.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=sg(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=og[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
|
|
302
302
|
`}return u<l&&(p+=`Showing ${d+1}-${d+f.length} of ${c}. `,p+=`Next page: upskill search ${e} --page ${u+1}\n\n`),p+=`To install:
|
|
303
303
|
`,p+=` From Tessl: upskill <owner/repo> --skill <name>
|
|
304
304
|
`,p+=` From browse.sh: upskill browse:<hostname>/<task>
|
|
@@ -321,7 +321,7 @@ Examples:
|
|
|
321
321
|
`,{stdout:s,stderr:``,exitCode:0}}function hg(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
|
|
322
322
|
`,exitCode:1}:i(e)?null:{stdout:``,stderr:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters
|
|
323
323
|
`,exitCode:1}}function gg(e){let t={selectedSkills:[],listOnly:!1,installAll:!1,force:!1,sourceRef:``},n=0;for(;n<e.length;){let r=e[n];if(r===`--skill`)t.selectedSkills.push(e[++n]);else if(r===`--path`||r===`-p`){let r=e[++n];if(typeof r!=`string`||!o(r))return t.earlyReturn={stdout:``,stderr:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters
|
|
324
|
-
`,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=hg(e[n+1]);if(r)return t.earlyReturn=r,t;t.branch=e[++n]}else r.startsWith(`-`)||(t.sourceRef=r);n++}return t}async function _g(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-
|
|
324
|
+
`,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=hg(e[n+1]);if(r)return t.earlyReturn=r,t;t.branch=e[++n]}else r.startsWith(`-`)||(t.sourceRef=r);n++}return t}async function _g(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-coLE80Cx.js`).then(e=>e.r);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await Bi(n,t),a=i?Vi(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:wh(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
|
|
325
325
|
`,stderr:``,exitCode:0}}async function vg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Ki(p.path,p.name,r,i,a,s?{...s,path:p.path}:void 0),h=f+1,g=((Date.now()-o)/1e3).toFixed(1),_=(Date.now()-o)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.ok?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.error}${v}\n`,l+=`upskill: ${m.error}\n`)}return{output:c,errors:l,successCount:u}}async function yg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Gi(t,n,p.path,p.name,i,r,a,void 0,o),h=f+1,g=((Date.now()-s)/1e3).toFixed(1),_=(Date.now()-s)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.exitCode===0?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.stderr.trim()}${v}\n`,l+=m.stderr)}return{output:c,errors:l,successCount:u}}async function bg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Gi(t,n,d.path,d.name,i,r,a,o,s);e.exitCode===0?(c+=e.stdout,u++):l+=e.stderr}return{output:c,errors:l,successCount:u}}function xg(e,t,n){let r=`Available skills in ${t}/${n}:\n\n`;for(let t of e)r+=` ${t.name.padEnd(30)} ${t.path}\n`;return r+=`\nFound ${e.length} skill(s)\n`,r}async function Sg(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await Ii(r),l=await qi(i,a,c,s,r,o);if(l.error)return{stdout:``,stderr:`upskill: failed to list skills: ${l.error}\n`,exitCode:1};if(l.skills.length===0)return{stdout:`No skills found in ${i}/${a}${s?`/`+s:``}\n`,stderr:``,exitCode:0};if(t.listOnly)return{stdout:xg(l.skills,i,a)+`\nTo install: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let u=l.skills;if(t.selectedSkills.length>0){u=l.skills.filter(e=>t.selectedSkills.includes(e.name));for(let e of t.selectedSkills)if(!l.skills.find(t=>t.name===e))return{stdout:``,stderr:`upskill: skill "${e}" not found in ${i}/${a}\n`,exitCode:1}}else if(!t.installAll)return{stdout:xg(l.skills,i,a)+`\nTo install specific skills: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let d=u.length,f=Date.now(),p=``,m=``,h=0;if(d>1){let e=await Ni(i,a,r,o);if(e.status===`ok`){let r=await Ri(i,a,o,c,!0,s),l=await vg(u,i,a,Oi(e.files),n,t.force,f,{kind:`github`,source:`${i}/${a}`,ref:o,sha:r});({output:p,errors:m,successCount:h}=l)}else{let e=await yg(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await bg(u,i,a,c,n,t.force,r,o));let g=((Date.now()-f)/1e3).toFixed(1);return h>0&&(p+=`\nInstalled ${h} skill(s)${d>1?` in ${g}s`:``}\n`,await Ui()),{stdout:p,stderr:m,exitCode:+!!m}}async function Cg(e,t,n,r,i){switch(e[0]){case`tabs`:return pg(t,n,r,e.includes(`--json`));case`recommendations`:return mg(t,n,e.includes(`--install`));case`update`:case`upgrade`:return Zh(e.slice(1),t,n);case`list`:return rg(e.slice(1),t,n,i);case`info`:case`read`:return _g(e[0],e[1],t);case`search`:return Tg(e,n);default:return null}}function wg(e,t,n){return S(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Th();let a=await Cg(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=gg(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Th();if(o.sourceRef.startsWith(`tessl:`))return Eg(o.sourceRef,o.force,e,t);let s=mh(o.sourceRef);if(s)return bh(s.hostname,s.task,e,t,o.force);let c=Wi(o.sourceRef);return c?Sg(c,o,e,t):{stdout:``,stderr:`upskill: unrecognized source "${o.sourceRef}"\n\nExpected: owner/repo, tessl:<name>, or browse:<hostname>/<task>\n`,exitCode:1}})}async function Tg(e,t){let n=[...e.slice(1)],r=n.indexOf(`--page`),i=1;r>=0&&(i=parseInt(n[r+1],10)||1,n.splice(r,2));let a=n.join(` `);return a?cg(a,t,i):Th()}async function Eg(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
|
|
326
326
|
`,exitCode:1};let a=await ag(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await Ii(r);return Gi(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function Dg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
|
|
327
327
|
|
|
@@ -926,7 +926,7 @@ Options:
|
|
|
926
926
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=TC(`eval-file`,r);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=s.path,l;try{l=await t.readTextFile(o)}catch(e){return{stdout:``,stderr:`eval-file: cannot read ${o}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let u=await i(a.targetId,async e=>{let t=await Yn(e,r),n=await wC(t?n=>e.evaluateInFrame(t.frameId,n,{world:`main`}):t=>e.evaluate(t),l);return typeof n==`string`?n:JSON.stringify(n,null,2)});if(c){let e=u??`null`;return await t.writeFile(c,e),{stdout:`Result saved to ${c} (${Math.round(new TextEncoder().encode(e).length/1024)} KB)\n`,stderr:``,exitCode:0}}return{stdout:(u??`undefined`)+`
|
|
927
927
|
`,stderr:``,exitCode:0}};function OC(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=h(n?.headers),a=await e(r,{method:n?.method??`GET`,...i?{headers:i}:{}});return new Response(a.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}async function kC(e){let t=new Set;try{let n=await e.readDir(`/workspace/skills`);for(let e of n)e.type===`directory`&&e.name.startsWith(`browse-`)&&t.add(e.name)}catch{}return t}async function AC(e,t,n){let r=``;try{r=new URL(e).hostname}catch{return{}}let i=r?sh(r):``;if(!i)return{};let a;try{a=await uh(n)}catch(e){return{warning:`playwright-cli: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}`}}let o=await kC(t),s=[];for(let e of a){if(!e.hostname||sh(e.hostname)!==i)continue;let t=e.name||e.task.replace(/-[A-Za-z0-9]{4,8}$/,``)||e.task,n=`browse-${e.hostname}-${t}`;s.push({slug:e.slug,name:e.name,title:e.title||e.name||e.task,recommendedMethod:e.recommendedMethod,installed:o.has(n),installHint:`upskill browse:${e.hostname}/${e.task}`})}return{skills:s}}async function jC(e,t={}){let n=t.fetchImpl??g(),r;try{r=await n(e,{method:t.method??`GET`})}catch(t){return{url:e,links:[],handoff:null,error:t instanceof Error?t.message:String(t)}}let i=[];for(let[e,t]of Object.entries(r.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&i.push(t);let o=s(i,e),c=a(o),l={url:e,status:r.status,links:o,handoff:c};if(t.discover&&o.length>0){let e=await Jb(o,{fetchImpl:OC(n)});l.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}else t.discover&&(l.discovery={failures:[]});if(t.discover&&t.fs){let r=await AC(e,t.fs,n);r.warning?l.browseShWarning=r.warning:r.skills&&r.skills.length>0&&(l.discovery={...l.discovery??{failures:[]},browseShSkills:r.skills})}return l}const MC=async({fs:e,positional:t,flags:n})=>{if(t.length===0)return{stdout:``,stderr:`fetch requires a URL
|
|
928
928
|
`,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await jC(r,{discover:n.discover===`true`,method:n.method??`GET`,fs:e});return{stdout:JSON.stringify(a,null,2)+`
|
|
929
|
-
`,stderr:i?`${i}\n`:``,exitCode:+!!a.error}};function NC(e){if(!e)return 0;let t={Alt:1,Control:2,Meta:4,Shift:8};return e.split(`,`).map(e=>t[e.trim()]??0).reduce((e,t)=>e|t,0)}async function
|
|
929
|
+
`,stderr:i?`${i}\n`:``,exitCode:+!!a.error}},NC={Enter:{key:`Enter`,code:`Enter`,keyCode:13,text:`\r`},Return:{key:`Enter`,code:`Enter`,keyCode:13,text:`\r`},"\r":{key:`Enter`,code:`Enter`,keyCode:13,text:`\r`},"\n":{key:`Enter`,code:`Enter`,keyCode:13,text:`\r`},Tab:{key:`Tab`,code:`Tab`,keyCode:9,text:` `},Escape:{key:`Escape`,code:`Escape`,keyCode:27},Esc:{key:`Escape`,code:`Escape`,keyCode:27},Backspace:{key:`Backspace`,code:`Backspace`,keyCode:8},Delete:{key:`Delete`,code:`Delete`,keyCode:46},Insert:{key:`Insert`,code:`Insert`,keyCode:45},Home:{key:`Home`,code:`Home`,keyCode:36},End:{key:`End`,code:`End`,keyCode:35},PageUp:{key:`PageUp`,code:`PageUp`,keyCode:33},PageDown:{key:`PageDown`,code:`PageDown`,keyCode:34},ArrowUp:{key:`ArrowUp`,code:`ArrowUp`,keyCode:38},ArrowDown:{key:`ArrowDown`,code:`ArrowDown`,keyCode:40},ArrowLeft:{key:`ArrowLeft`,code:`ArrowLeft`,keyCode:37},ArrowRight:{key:`ArrowRight`,code:`ArrowRight`,keyCode:39},Space:{key:` `,code:`Space`,keyCode:32,text:` `}," ":{key:` `,code:`Space`,keyCode:32,text:` `},Shift:{key:`Shift`,code:`ShiftLeft`,keyCode:16},Control:{key:`Control`,code:`ControlLeft`,keyCode:17},Alt:{key:`Alt`,code:`AltLeft`,keyCode:18},Meta:{key:`Meta`,code:`MetaLeft`,keyCode:91}};for(let e=1;e<=12;e++)NC[`F${e}`]={key:`F${e}`,code:`F${e}`,keyCode:111+e};const PC={";":{key:`;`,code:`Semicolon`,keyCode:186,text:`;`},"=":{key:`=`,code:`Equal`,keyCode:187,text:`=`},",":{key:`,`,code:`Comma`,keyCode:188,text:`,`},"-":{key:`-`,code:`Minus`,keyCode:189,text:`-`},".":{key:`.`,code:`Period`,keyCode:190,text:`.`},"/":{key:`/`,code:`Slash`,keyCode:191,text:`/`},"`":{key:"`",code:`Backquote`,keyCode:192,text:"`"},"[":{key:`[`,code:`BracketLeft`,keyCode:219,text:`[`},"\\":{key:`\\`,code:`Backslash`,keyCode:220,text:`\\`},"]":{key:`]`,code:`BracketRight`,keyCode:221,text:`]`},"'":{key:`'`,code:`Quote`,keyCode:222,text:`'`},":":{key:`:`,code:`Semicolon`,keyCode:186,text:`:`},"+":{key:`+`,code:`Equal`,keyCode:187,text:`+`},"<":{key:`<`,code:`Comma`,keyCode:188,text:`<`},_:{key:`_`,code:`Minus`,keyCode:189,text:`_`},">":{key:`>`,code:`Period`,keyCode:190,text:`>`},"?":{key:`?`,code:`Slash`,keyCode:191,text:`?`},"~":{key:`~`,code:`Backquote`,keyCode:192,text:`~`},"{":{key:`{`,code:`BracketLeft`,keyCode:219,text:`{`},"|":{key:`|`,code:`Backslash`,keyCode:220,text:`|`},"}":{key:`}`,code:`BracketRight`,keyCode:221,text:`}`},'"':{key:`"`,code:`Quote`,keyCode:222,text:`"`},")":{key:`)`,code:`Digit0`,keyCode:48,text:`)`},"!":{key:`!`,code:`Digit1`,keyCode:49,text:`!`},"@":{key:`@`,code:`Digit2`,keyCode:50,text:`@`},"#":{key:`#`,code:`Digit3`,keyCode:51,text:`#`},$:{key:`$`,code:`Digit4`,keyCode:52,text:`$`},"%":{key:`%`,code:`Digit5`,keyCode:53,text:`%`},"^":{key:`^`,code:`Digit6`,keyCode:54,text:`^`},"&":{key:`&`,code:`Digit7`,keyCode:55,text:`&`},"*":{key:`*`,code:`Digit8`,keyCode:56,text:`*`},"(":{key:`(`,code:`Digit9`,keyCode:57,text:`(`}};function FC(e){let t=NC[e];if(t)return t;if(e.length>1){let t=Object.keys(NC).find(t=>t.toLowerCase()===e.toLowerCase());if(t)return NC[t]}if(e.length===1){let t=PC[e];if(t)return t;let n=e,r=n.toLowerCase();return r>=`a`&&r<=`z`?{key:n,code:`Key${r.toUpperCase()}`,keyCode:r.toUpperCase().charCodeAt(0),text:n}:n>=`0`&&n<=`9`?{key:n,code:`Digit${n}`,keyCode:n.charCodeAt(0),text:n}:{key:n,code:n,keyCode:n.charCodeAt(0),text:n}}return{key:e,code:e,keyCode:0}}function IC(e,t){let n=FC(e),r={type:t,key:n.key,code:n.code,windowsVirtualKeyCode:n.keyCode};return t===`keyDown`&&n.text!==void 0&&(r.text=n.text,r.unmodifiedText=n.text),r}function LC(e){return[IC(e,`keyDown`),IC(e,`keyUp`)]}function RC(e){if(!e)return 0;let t={Alt:1,Control:2,Meta:4,Shift:8};return e.split(`,`).map(e=>t[e.trim()]??0).reduce((e,t)=>e|t,0)}async function zC(e){let[t,n]=LC(`Enter`);await e.send(`Input.dispatchKeyEvent`,t),await e.send(`Input.dispatchKeyEvent`,n)}async function BC(e,t,n){((await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Un,returnByValue:!0})).result?.value??``)!==n&&await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Nn,arguments:[{value:n}],returnByValue:!0})}async function VC(e,t,n){await e.clickByBackendNodeId(t),await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let r=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;r?.objectId&&await e.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:Hn,returnByValue:!0}),await e.insertText(n),r?.objectId&&await BC(e,r.objectId,n)}async function HC(e,t,n){await e.click(t),await e.evaluate(`(function() {
|
|
930
930
|
const el = document.querySelector(${JSON.stringify(t)});
|
|
931
931
|
if (el) { return (${Hn}).call(el); }
|
|
932
932
|
return false;
|
|
@@ -938,15 +938,15 @@ Options:
|
|
|
938
938
|
const el = document.querySelector(${JSON.stringify(r)});
|
|
939
939
|
if (!el) return;
|
|
940
940
|
(${Nn}).call(el, ${JSON.stringify(n)});
|
|
941
|
-
})()`)}const
|
|
942
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=
|
|
941
|
+
})()`)}const UC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`click requires a ref (e.g. e5)
|
|
942
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=RC(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
943
943
|
var el = document.querySelector(${JSON.stringify(s)});
|
|
944
944
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
945
945
|
el.scrollIntoView({ block: 'center' });
|
|
946
946
|
el.click();
|
|
947
947
|
})()`),t.snapshots.delete(a.targetId),`Clicked ${o} (in iframe)`}let c=n.refToBackendNodeId.get(o);if(c)return await e.clickByBackendNodeId(c,s),t.snapshots.delete(a.targetId),`Clicked ${o}`;let l=n.refToSelector.get(o);if(!l)throw Error(`Unknown ref "${o}". Available: ${[...n.refToSelector.keys()].slice(0,10).join(`, `)}...`);return await e.click(l,s),t.snapshots.delete(a.targetId),`Clicked ${o}`})+`
|
|
948
|
-
`,stderr:``,exitCode:0}},
|
|
949
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t.join(` `);return await r(i.targetId,async e=>{await e.type(a),n.submit===`true`&&await
|
|
948
|
+
`,stderr:``,exitCode:0}},WC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`type requires text
|
|
949
|
+
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t.join(` `);return await r(i.targetId,async e=>{await e.type(a),n.submit===`true`&&await zC(e)}),{stdout:`Typed: ${a}\n`,stderr:``,exitCode:0}},GC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`fill requires <ref> <text>
|
|
950
950
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n.slice(1).join(` `);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:i}=Mn(o),c=n.refToFrameId?.get(o);if(i&&c){let i=n.refToSelector.get(o);if(!i)throw Error(`Unknown ref "${o}" in iframe`);let l=i.split(`,`)[0].trim();return await e.evaluateInFrame(c,`(function() {
|
|
951
951
|
var el = document.querySelector(${JSON.stringify(l)});
|
|
952
952
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
@@ -956,32 +956,32 @@ Options:
|
|
|
956
956
|
el.value = ${JSON.stringify(s)};
|
|
957
957
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
958
958
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
959
|
-
})()`),t.snapshots.delete(a.targetId),r.submit===`true`&&await
|
|
960
|
-
`,stderr:``,exitCode:0}},
|
|
961
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,
|
|
962
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,
|
|
963
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,
|
|
964
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=
|
|
959
|
+
})()`),t.snapshots.delete(a.targetId),r.submit===`true`&&await zC(e),`Filled ${o} with: ${s} (in iframe)`}let l=n.refToBackendNodeId.get(o);if(l)return await VC(e,l,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await zC(e),`Filled ${o} with: ${s}`;let u=n.refToSelector.get(o);if(!u)throw Error(`Unknown ref "${o}"`);return await HC(e,u,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await zC(e),`Filled ${o} with: ${s}`})+`
|
|
960
|
+
`,stderr:``,exitCode:0}},KC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`press requires a key name
|
|
961
|
+
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],[o,s]=LC(a);return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,o,e),await t.send(`Input.dispatchKeyEvent`,s,e)}),{stdout:`Pressed ${a}\n`,stderr:``,exitCode:0}},qC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keydown requires a key name
|
|
962
|
+
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=IC(a,`keyDown`);return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,o,e)}),{stdout:`Key ${a} down\n`,stderr:``,exitCode:0}},JC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keyup requires a key name
|
|
963
|
+
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=IC(a,`keyUp`);return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,o,e)}),{stdout:`Key ${a} up\n`,stderr:``,exitCode:0}},YC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`dblclick requires a ref (e.g. e5)
|
|
964
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=RC(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
965
965
|
var el = document.querySelector(${JSON.stringify(s)});
|
|
966
966
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
967
967
|
el.scrollIntoView({ block: 'center' });
|
|
968
968
|
el.dispatchEvent(new MouseEvent('dblclick', { bubbles: true }));
|
|
969
969
|
})()`),t.snapshots.delete(a.targetId),`Double-clicked ${o} (in iframe)`}let l=n.refToBackendNodeId.get(o);if(!l)throw Error(`Unknown ref "${o}"`);return await e.dblclickByBackendNodeId(l,s,c),t.snapshots.delete(a.targetId),`Double-clicked ${o}`})+`
|
|
970
|
-
`,stderr:``,exitCode:0}},
|
|
970
|
+
`,stderr:``,exitCode:0}},XC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`hover requires a ref (e.g. e5)
|
|
971
971
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let t=n.refToSelector.get(o);if(!t)throw Error(`Unknown ref "${o}" in iframe`);let r=t.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
972
972
|
var el = document.querySelector(${JSON.stringify(r)});
|
|
973
973
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
974
974
|
el.scrollIntoView({ block: 'center' });
|
|
975
975
|
el.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
|
976
976
|
})()`),`Hovered ${o} (in iframe)`}let s=n.refToBackendNodeId.get(o);if(!s)throw Error(`Unknown ref "${o}"`);return await e.hoverByBackendNodeId(s),`Hovered ${o}`})+`
|
|
977
|
-
`,stderr:``,exitCode:0}},
|
|
977
|
+
`,stderr:``,exitCode:0}},ZC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`select requires <ref> <value>
|
|
978
978
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n.slice(1).join(` `);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let c=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
979
979
|
var el = document.querySelector(${JSON.stringify(c)});
|
|
980
980
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
981
981
|
el.value = ${JSON.stringify(s)};
|
|
982
982
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
983
983
|
})()`),t.snapshots.delete(a.targetId),`Selected "${s}" on ${o} (in iframe)`}let c=n.refToBackendNodeId.get(o);if(!c)throw Error(`Unknown ref "${o}"`);return await e.selectByBackendNodeId(c,s),t.snapshots.delete(a.targetId),`Selected "${s}" on ${o}`})+`
|
|
984
|
-
`,stderr:``,exitCode:0}},
|
|
984
|
+
`,stderr:``,exitCode:0}},QC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`check requires a ref (e.g. e5)
|
|
985
985
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
986
986
|
var el = document.querySelector(${JSON.stringify(s)});
|
|
987
987
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
@@ -991,7 +991,7 @@ Options:
|
|
|
991
991
|
el.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
|
992
992
|
}
|
|
993
993
|
})()`),t.snapshots.delete(a.targetId),`Checked ${o} (in iframe)`}let s=n.refToBackendNodeId.get(o);if(!s)throw Error(`Unknown ref "${o}"`);let c=await e.setCheckedByBackendNodeId(s,!0);return c===`toggled`&&t.snapshots.delete(a.targetId),c===`already`?`${o} already checked`:`Checked ${o}`})+`
|
|
994
|
-
`,stderr:``,exitCode:0}}
|
|
994
|
+
`,stderr:``,exitCode:0}},$C=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`uncheck requires a ref (e.g. e5)
|
|
995
995
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
996
996
|
var el = document.querySelector(${JSON.stringify(s)});
|
|
997
997
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
@@ -1001,14 +1001,14 @@ Options:
|
|
|
1001
1001
|
el.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
|
1002
1002
|
}
|
|
1003
1003
|
})()`),t.snapshots.delete(a.targetId),`Unchecked ${o} (in iframe)`}let s=n.refToBackendNodeId.get(o);if(!s)throw Error(`Unknown ref "${o}"`);let c=await e.setCheckedByBackendNodeId(s,!1);return c===`toggled`&&t.snapshots.delete(a.targetId),c===`already`?`${o} already unchecked`:`Unchecked ${o}`})+`
|
|
1004
|
-
`,stderr:``,exitCode:0}},
|
|
1004
|
+
`,stderr:``,exitCode:0}},ew=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`drag requires <startRef> <endRef>
|
|
1005
1005
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let r=n.refToBackendNodeId.get(o),i=n.refToBackendNodeId.get(s);if(!r)throw Error(`Unknown ref "${o}"`);if(!i)throw Error(`Unknown ref "${s}"`);return await e.dragByBackendNodeIds(r,i),t.snapshots.delete(a.targetId),`Dragged ${o} to ${s}`})+`
|
|
1006
|
-
`,stderr:``,exitCode:0}};async function
|
|
1006
|
+
`,stderr:``,exitCode:0}};async function tw(e,t){let n=await e.readFile(t,{encoding:`binary`});if(n instanceof Uint8Array)return n;if(typeof n!=`string`)throw Error(`cannot represent '${t}' faithfully: unexpected file content type`);if(n.includes(`�`))throw Error(`cannot represent '${t}' faithfully: file was read as text (contains U+FFFD). Binary files must be read as bytes, not UTF-8.`);return new TextEncoder().encode(n)}function nw(e){return e===void 0?`left`:e===`left`||e===`right`||e===`middle`?e:{error:`Invalid button "${e}". Must be left, right, or middle.\n`}}const rw={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,pdf:`application/pdf`,txt:`text/plain`,json:`application/json`,csv:`text/csv`,html:`text/html`,htm:`text/html`,xml:`application/xml`,zip:`application/zip`,mp4:`video/mp4`,mp3:`audio/mpeg`};function iw(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return rw[t]??`application/octet-stream`}const aw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousemove requires <x> <y>
|
|
1007
1007
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);return isNaN(o)||isNaN(s)?{stdout:``,stderr:`x and y must be numbers
|
|
1008
|
-
`,exitCode:1}:(await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:o,y:s,button:`none`,modifiers:0},e)}),t.lastMousePosition.set(a.targetId,{x:o,y:s}),{stdout:`Mouse moved to (${o}, ${s})\n`,stderr:``,exitCode:0})},
|
|
1008
|
+
`,exitCode:1}:(await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:o,y:s,button:`none`,modifiers:0},e)}),t.lastMousePosition.set(a.targetId,{x:o,y:s}),{stdout:`Mouse moved to (${o}, ${s})\n`,stderr:``,exitCode:0})},ow=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=nw(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} pressed\n`,stderr:``,exitCode:0}},sw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=nw(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} released\n`,stderr:``,exitCode:0}},cw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousewheel requires <dx> <dy>
|
|
1009
1009
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);if(isNaN(o)||isNaN(s))return{stdout:``,stderr:`dx and dy must be numbers
|
|
1010
|
-
`,exitCode:1};let c=t.lastMousePosition.get(a.targetId)??{x:0,y:0},l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{if((await t.send(`Runtime.evaluate`,{expression:`document.visibilityState`,returnByValue:!0},e)).result?.value===`hidden`){let n=await t.send(`Runtime.evaluate`,{expression:
|
|
1011
|
-
`;return}await t.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,deltaX:o,deltaY:s,x:c.x,y:c.y,modifiers:0},e)}),{stdout:`Mouse wheel scrolled (dx=${o}, dy=${s})\n`,stderr:l,exitCode:0}};function
|
|
1010
|
+
`,exitCode:1};let c=t.lastMousePosition.get(a.targetId)??{x:0,y:0},l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{if((await t.send(`Runtime.evaluate`,{expression:`document.visibilityState`,returnByValue:!0},e)).result?.value===`hidden`){let n=await t.send(`Runtime.evaluate`,{expression:lw(c.x,c.y,o,s),returnByValue:!0},e);if(n.exceptionDetails)throw Error(n.exceptionDetails.exception?.description??n.exceptionDetails.text??`Page scroll failed`);l=`note: the tab is in the background, so the wheel was applied as a page scroll
|
|
1011
|
+
`;return}await t.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,deltaX:o,deltaY:s,x:c.x,y:c.y,modifiers:0},e)}),{stdout:`Mouse wheel scrolled (dx=${o}, dy=${s})\n`,stderr:l,exitCode:0}};function lw(e,t,n,r){return`(() => {
|
|
1012
1012
|
const dx = ${JSON.stringify(n)}, dy = ${JSON.stringify(r)};
|
|
1013
1013
|
const canScroll = (el) => {
|
|
1014
1014
|
const style = getComputedStyle(el);
|
|
@@ -1027,8 +1027,8 @@ Options:
|
|
|
1027
1027
|
: (document.scrollingElement || document.documentElement);
|
|
1028
1028
|
target.scrollBy({ left: dx, top: dy, behavior: 'instant' });
|
|
1029
1029
|
return true;
|
|
1030
|
-
})()`}const
|
|
1031
|
-
`,exitCode:1};let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0],l=a.path,u=a.data,d=[];if(l){let e=await
|
|
1030
|
+
})()`}const uw=async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`drop requires a ref (e.g. e5)
|
|
1031
|
+
`,exitCode:1};let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0],l=a.path,u=a.data,d=[];if(l){let e=await tw(n,l),r=l.split(`/`).pop()??l;d.push({name:r,type:iw(r),base64:t(e)})}let f=[];if(u){let e=u.indexOf(`=`);if(e===-1)return{stdout:``,stderr:`--data format must be "mime/type=value"
|
|
1032
1032
|
`,exitCode:1};f.push({mimeType:u.slice(0,e),value:u.slice(e+1)})}return{stdout:await o(s.targetId,async({sessionId:e,transport:t})=>{let n=r.snapshots.get(s.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let i=n.refToBackendNodeId.get(c);if(i){await t.send(`DOM.enable`,{},e);let n=await t.send(`DOM.resolveNode`,{backendNodeId:i},e),a=await t.send(`Runtime.callFunctionOn`,{objectId:n.object.objectId,functionDeclaration:`function(filesData, dataItems) {
|
|
1033
1033
|
var dt = new DataTransfer();
|
|
1034
1034
|
for (var i = 0; i < filesData.length; i++) {
|
|
@@ -1063,7 +1063,7 @@ Options:
|
|
|
1063
1063
|
el.dispatchEvent(new DragEvent('drop', { bubbles: true, cancelable: true, dataTransfer: dt }));
|
|
1064
1064
|
return true;
|
|
1065
1065
|
})()`,h=await t.send(`Runtime.evaluate`,{expression:m,returnByValue:!0,awaitPromise:!1},e);if(h.exceptionDetails){let e=h.exceptionDetails.exception?.description??h.exceptionDetails.text??`Drop failed`;throw Error(e)}return r.snapshots.delete(s.targetId),`Dropped onto ${c}`})+`
|
|
1066
|
-
`,stderr:``,exitCode:0}},
|
|
1066
|
+
`,stderr:``,exitCode:0}},dw=e(`playwright-teleport`),fw={origin:``,localStorage:{},sessionStorage:{}};function pw(e){let t=new Map;for(let n of e){let e=n.domain??`unknown`;t.set(e,(t.get(e)??0)+1)}return[...t.entries()].sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${t} ${e}`).join(`, `)}function mw(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function hw(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function gw(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function _w(e,t,n){let r=hw(t);if(t&&r===e)return t;let i=hw(n);return n&&i===e?n:e||(t??n)}async function vw(e,t){let n=await e.evaluate(`(() => {
|
|
1067
1067
|
const collect = (storage) => {
|
|
1068
1068
|
const items = {};
|
|
1069
1069
|
for (let i = 0; i < storage.length; i++) {
|
|
@@ -1077,7 +1077,7 @@ Options:
|
|
|
1077
1077
|
localStorage: collect(window.localStorage),
|
|
1078
1078
|
sessionStorage: collect(window.sessionStorage),
|
|
1079
1079
|
});
|
|
1080
|
-
})()`);if(typeof n!=`string`||n.length===0)return
|
|
1080
|
+
})()`);if(typeof n!=`string`||n.length===0)return dw.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),fw;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return dw.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),fw}}function yw(e){return`(() => {
|
|
1081
1081
|
const snapshot = ${JSON.stringify(e)};
|
|
1082
1082
|
if (!snapshot.origin || window.location.origin !== snapshot.origin) return;
|
|
1083
1083
|
const markerKey = '__slicc_teleport_storage_applied__:' + snapshot.origin;
|
|
@@ -1093,7 +1093,7 @@ Options:
|
|
|
1093
1093
|
apply(window.localStorage, snapshot.localStorage || {});
|
|
1094
1094
|
apply(window.sessionStorage, snapshot.sessionStorage || {});
|
|
1095
1095
|
try { window.sessionStorage.setItem(markerKey, '1'); } catch {}
|
|
1096
|
-
})();`}function
|
|
1096
|
+
})();`}function bw(e){return`(() => {
|
|
1097
1097
|
const snapshot = ${JSON.stringify(e)};
|
|
1098
1098
|
if (!snapshot.origin || globalThis.location.origin !== snapshot.origin) {
|
|
1099
1099
|
throw new Error('Teleport storage origin mismatch');
|
|
@@ -1111,88 +1111,88 @@ Options:
|
|
|
1111
1111
|
localStorageCount: Object.keys(snapshot.localStorage || {}).length,
|
|
1112
1112
|
sessionStorageCount: Object.keys(snapshot.sessionStorage || {}).length,
|
|
1113
1113
|
});
|
|
1114
|
-
})();`}async function
|
|
1114
|
+
})();`}async function xw(e,t,n){let r=mw(t);if(r===0)return;let i=await e.evaluate(bw(t));dw.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),dw.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function Sw(e,t,n){let r=mw(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:yw(t)}),a=typeof i.identifier==`string`?i.identifier:null;return dw.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),dw.debug(`Installed teleport storage init script details`,{target:n,origin:t.origin||`(unknown)`,localStorageCount:Object.keys(t.localStorage).length,sessionStorageCount:Object.keys(t.sessionStorage).length,hasIdentifier:!!a}),a?{identifier:a,targetId:e.targetId}:null}async function Cw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){dw.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function ww(e){let t=await e.evaluate(`(() => JSON.stringify({
|
|
1115
1115
|
url: window.location.href,
|
|
1116
1116
|
title: document.title || '',
|
|
1117
1117
|
bodySnippet: document.body?.innerText?.replace(/\\s+/g, ' ').trim().slice(0, 500) || '(empty)',
|
|
1118
|
-
}))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function bw(e){return/callback|authorize\/resume|error/i.test(e)}async function xw(e,t,n){try{let r=await yw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,ow.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){ow.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function Sw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>vw(e,r,`follower`)),ow.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){ow.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function Cw(e){return Array.isArray(e)?e:[]}const U=e(`playwright-teleport`);let ww=null,Tw=null;function Ew(e){ww=e}function Dw(e){Tw=e}function Ow(){return Tw?.()??null}async function kw(e,t){if(U.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),U.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>xw(e,t,`timeout`))}catch(e){U.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await Sw(e,t,`timeout`)}if(Aw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){U.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function Aw(e){U.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function jw(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);U.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),U.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);U.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(U.info(`Teleport start pattern matched on leader`),U.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),Nw(e,t,c,a).catch(e=>{U.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){U.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{U.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function Mw(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,U.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,U.info(`Follower reached auth provider; waiting for return pattern`),U.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):U.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}U.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),bw(o)&&await e.withTab(r,e=>xw(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(U.info(`Follower return pattern matched after auth`),U.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),Rw(e,t,n,i).catch(e=>{U.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){U.warn(`Error polling follower tab URL`,{error:String(e)})}}async function Nw(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,U.info(`Teleport triggered`),U.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=sw;try{a=Cw((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),U.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){U.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>pw(e,`leader`)),U.info(`Captured leader storage for follower`,{totalEntries:lw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=ww?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}U.info(`Selected follower for teleport`),U.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,U.info(`Opened follower tab for teleport`),U.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),U.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){U.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await _w(e,o,`follower`),U.info(`Navigating follower to intercepted auth URL`),U.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),U.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&kw(e,n).catch(e=>{U.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,U.info(`Teleport waiting for follower auth redirect`),U.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{Mw(e,t,n,l,s).catch(e=>{U.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){U.error(`Teleport trigger failed`,{error:String(t)}),await Sw(e,n,`trigger-error`),n.phase=`done`,Aw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function Pw(e,t){U.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),U.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){U.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);U.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){U.warn(`Could not read follower page content`,{error:String(e)})}let i=Cw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?cw(i):`none`;U.info(`Captured cookies from follower`,{count:i.length}),U.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=sw;try{o=await pw(e,`follower`),U.info(`Captured follower storage for leader`,{totalEntries:lw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture follower storage`,{error:String(e)})}return await xw(e,t,`capture`),await vw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),U.info(`Closed follower tab after teleport`),U.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){U.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function Fw(e,t,n,r){try{await e.navigate(n),await gw(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){U.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),U.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await _w(e,t,`leader`);try{r&&await e.navigate(r)}finally{await vw(e,a,`leader`)}}}async function Iw(e,t,n,r,i){let a=e.targetId,o=await _w(e,n,`leader`);try{r&&(U.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:lw(n)}),U.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:lw(n)}),await e.navigate(r))}finally{await vw(e,o,`leader`)}}async function Lw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=fw(o,t.originalLeaderUrl,i),c=uw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?dw(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),U.info(`Injected cookies into leader tab`,{count:n.length}),U.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(U.info(`Hydrating leader storage origin before landing`,{storageEntries:lw(r)}),U.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:lw(r)}),await Fw(e,r,u,s)):await Iw(e,t,r,s,i)}),s):(U.warn(`No leader tab available for auth-state injection`),s)}async function Rw(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,U.info(`Capturing auth state from follower`),U.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await Pw(e,n),o=lw(i),s=await Lw(e,n,t,i,a);n.phase=`done`,Aw(n);let c=t.length>0?` (${cw(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;U.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),U.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){U.error(`Teleport auth-state capture failed`,{error:String(t)}),await Sw(e,n,`capture-error`),n.phase=`done`,Aw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const zw=e(`playwright`),Bw=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1119
|
-
`,exitCode:1};let o=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){
|
|
1120
|
-
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},
|
|
1121
|
-
`,stderr:``,exitCode:0})},
|
|
1122
|
-
`,stderr:``,exitCode:0})},
|
|
1123
|
-
`,stderr:``,exitCode:0})},
|
|
1124
|
-
`,exitCode:1}:(await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Network.enable`,{},e),await t.send(`Network.emulateNetworkConditions`,{offline:a===`offline`,latency:0,downloadThroughput:-1,uploadThroughput:-1},e)}),{stdout:`Network set to ${a}\n`,stderr:``,exitCode:0})},
|
|
1118
|
+
}))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function Tw(e){return/callback|authorize\/resume|error/i.test(e)}async function Ew(e,t,n){try{let r=await ww(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,dw.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){dw.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function Dw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>Cw(e,r,`follower`)),dw.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){dw.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function Ow(e){return Array.isArray(e)?e:[]}const U=e(`playwright-teleport`);let kw=null,Aw=null;function jw(e){kw=e}function Mw(e){Aw=e}function Nw(){return Aw?.()??null}async function Pw(e,t){if(U.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),U.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>Ew(e,t,`timeout`))}catch(e){U.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await Dw(e,t,`timeout`)}if(Fw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){U.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function Fw(e){U.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function Iw(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);U.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),U.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);U.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(U.info(`Teleport start pattern matched on leader`),U.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),Rw(e,t,c,a).catch(e=>{U.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){U.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{U.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function Lw(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,U.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,U.info(`Follower reached auth provider; waiting for return pattern`),U.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):U.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}U.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),Tw(o)&&await e.withTab(r,e=>Ew(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(U.info(`Follower return pattern matched after auth`),U.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),Uw(e,t,n,i).catch(e=>{U.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){U.warn(`Error polling follower tab URL`,{error:String(e)})}}async function Rw(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,U.info(`Teleport triggered`),U.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=fw;try{a=Ow((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),U.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){U.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>vw(e,`leader`)),U.info(`Captured leader storage for follower`,{totalEntries:mw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=kw?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}U.info(`Selected follower for teleport`),U.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,U.info(`Opened follower tab for teleport`),U.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),U.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){U.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await Sw(e,o,`follower`),U.info(`Navigating follower to intercepted auth URL`),U.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),U.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&Pw(e,n).catch(e=>{U.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,U.info(`Teleport waiting for follower auth redirect`),U.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{Lw(e,t,n,l,s).catch(e=>{U.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){U.error(`Teleport trigger failed`,{error:String(t)}),await Dw(e,n,`trigger-error`),n.phase=`done`,Fw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function zw(e,t){U.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),U.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){U.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);U.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){U.warn(`Could not read follower page content`,{error:String(e)})}let i=Ow((await e.send(`Network.getCookies`)).cookies),a=i.length>0?pw(i):`none`;U.info(`Captured cookies from follower`,{count:i.length}),U.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=fw;try{o=await vw(e,`follower`),U.info(`Captured follower storage for leader`,{totalEntries:mw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture follower storage`,{error:String(e)})}return await Ew(e,t,`capture`),await Cw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),U.info(`Closed follower tab after teleport`),U.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){U.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function Bw(e,t,n,r){try{await e.navigate(n),await xw(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){U.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),U.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await Sw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await Cw(e,a,`leader`)}}}async function Vw(e,t,n,r,i){let a=e.targetId,o=await Sw(e,n,`leader`);try{r&&(U.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:mw(n)}),U.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:mw(n)}),await e.navigate(r))}finally{await Cw(e,o,`leader`)}}async function Hw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=_w(o,t.originalLeaderUrl,i),c=hw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?gw(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),U.info(`Injected cookies into leader tab`,{count:n.length}),U.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(U.info(`Hydrating leader storage origin before landing`,{storageEntries:mw(r)}),U.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:mw(r)}),await Bw(e,r,u,s)):await Vw(e,t,r,s,i)}),s):(U.warn(`No leader tab available for auth-state injection`),s)}async function Uw(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,U.info(`Capturing auth state from follower`),U.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await zw(e,n),o=mw(i),s=await Hw(e,n,t,i,a);n.phase=`done`,Fw(n);let c=t.length>0?` (${pw(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;U.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),U.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){U.error(`Teleport auth-state capture failed`,{error:String(t)}),await Dw(e,n,`capture-error`),n.phase=`done`,Fw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const Ww=e(`playwright`),Gw=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1119
|
+
`,exitCode:1};let o=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){Ww.info(`Arming teleport via goto/navigate flags`),Ww.debug(`Arming teleport via goto/navigate flags details`,{targetId:o.targetId,startPattern:s,returnPattern:c});let t,a;try{t=new RegExp(s)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${s}\n`,exitCode:1}}try{a=new RegExp(c)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${c}\n`,exitCode:1}}let l=i.timeout?parseInt(i.timeout,10):300,u=n.teleportWatchers.get(o.targetId);u&&(Fw(u),n.teleportWatchers.delete(o.targetId)),Iw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await jC(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
|
|
1120
|
+
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},Kw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.back()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated back
|
|
1121
|
+
`,stderr:``,exitCode:0})},qw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.forward()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated forward
|
|
1122
|
+
`,stderr:``,exitCode:0})},Jw=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
|
|
1123
|
+
`,stderr:``,exitCode:0})},Yw=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=j(t);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0];return a!==`online`&&a!==`offline`?{stdout:``,stderr:`network-state-set requires "online" or "offline"
|
|
1124
|
+
`,exitCode:1}:(await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Network.enable`,{},e),await t.send(`Network.emulateNetworkConditions`,{offline:a===`offline`,latency:0,downloadThroughput:-1,uploadThroughput:-1},e)}),{stdout:`Network set to ${a}\n`,stderr:``,exitCode:0})},Xw=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function Zw(e,t){if(e&&Xw.some(t=>e.startsWith(t)))return!0;try{let e=new URL(t).pathname;return/\.(png|jpe?g|gif|webp|svg|ico|woff2?|ttf|eot|otf|css|js|mjs)$/i.test(e)}catch{return!1}}function Qw(e,t,n,r,i){if(t.networkCleanup.has(r))return;t.networkRequests.set(r,[]),t.networkRequestIndex.set(r,new Map);let a=1,o=rC({browser:e,targetId:r,transport:n,sessionId:i,listeners:[[`Network.requestWillBeSent`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,s=n.request;if(!i||!s)return;let c=t.networkRequests.get(r),l=t.networkRequestIndex.get(r);if(!c||!l)return;let u=s.url??``,d={index:a++,requestId:i,method:s.method??`GET`,url:u,requestHeaders:s.headers??{},requestBody:s.postData==null?null:String(s.postData),status:null,responseHeaders:null,responseBody:null,responseBodyBase64:!1,mimeType:null,isStatic:Zw(null,u),timestamp:Date.now()};if(c.push(d),l.set(i,d),c.length>500){let e=c.splice(0,c.length-500);for(let t of e)l.delete(t.requestId)}}],[`Network.responseReceived`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,a=n.response;if(!i||!a)return;let s=t.networkRequestIndex.get(r)?.get(i);s&&(s.status=a.status??null,s.responseHeaders=a.headers??null,s.mimeType=a.mimeType??null,s.isStatic=Zw(s.mimeType,s.url))}],[`Network.loadingFinished`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId;if(!i)return;let a=t.networkRequestIndex.get(r)?.get(i);!a||a.isStatic||a.responseBody!==null||o.transport.send(`Network.getResponseBody`,{requestId:i},o.sessionId).then(e=>{let t=e;t&&(a.responseBody=t.body??null,a.responseBodyBase64=t.base64Encoded===!0)}).catch(()=>{})}]],enable:(e,t)=>e.send(`Network.enable`,{},t)});t.networkCleanup.set(r,()=>o.stop())}function $w(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<55296||n>57343)continue;if(n>=56320)return t;let r=e.charCodeAt(t+1);if(Number.isNaN(r)||r<56320||r>57343)return t;t++}return-1}function eT(e,t){if(t){let t;try{t=atob(e)}catch{return{error:`response body is flagged base64 but is not valid base64`}}let n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return{bytes:n}}let n=$w(e);return n>=0?{error:`response body has an unpaired surrogate at index ${n} and cannot be saved without substituting U+FFFD`}:{bytes:new TextEncoder().encode(e)}}function tT(e,t,n){let r=parseInt(n,10);return!Number.isFinite(r)||r<1?null:(e.networkRequests.get(t)??[]).find(e=>e.index===r)??null}const nT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};t.networkCleanup.has(i.targetId)||await r(i.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Qw(e,t,r,i.targetId,n)});let a=n.static===`true`,o=n.filter,s=n.clear===`true`,c=t.networkRequests.get(i.targetId)??[];if(a||(c=c.filter(e=>!e.isStatic)),o){let e;try{e=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid filter regex: ${o}\n`,exitCode:1}}c=c.filter(t=>e.test(t.url))}return s&&(t.networkRequests.set(i.targetId,[]),t.networkRequestIndex.set(i.targetId,new Map)),c.length===0?{stdout:`No requests
|
|
1125
1125
|
`,stderr:``,exitCode:0}:{stdout:c.map(e=>`${e.index} ${e.method} ${e.url} → ${e.status??`pending`}`).join(`
|
|
1126
1126
|
`)+`
|
|
1127
|
-
`,stderr:``,exitCode:0}},
|
|
1127
|
+
`,stderr:``,exitCode:0}},rT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Qw(e,t,r,o.targetId,n)});let s=n[0]??``,c=tT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=[`Method: ${c.method}`,`URL: ${c.url}`,`Status: ${c.status??`pending`}`,``,`Request Headers:`,...Object.entries(c.requestHeaders).map(([e,t])=>` ${e}: ${t}`)];if(c.requestBody!==null&&l.push(``,`Request Body: ${c.requestBody}`),c.responseHeaders!==null&&(l.push(``,`Response Headers:`),l.push(...Object.entries(c.responseHeaders).map(([e,t])=>` ${e}: ${t}`))),c.responseBody!==null){let e=c.responseBody,t=e.length>4096?e.slice(0,4096)+`
|
|
1128
1128
|
... (truncated)`:e,n=c.responseBodyBase64?`Response Body (base64)`:`Response Body`;l.push(``,`${n}:\n${t}`)}let u=l.join(`
|
|
1129
1129
|
`)+`
|
|
1130
|
-
`,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}}
|
|
1130
|
+
`,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},iT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Qw(e,t,r,o.targetId,n)});let s=n[0]??``,c=tT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=Object.entries(c.requestHeaders).map(([e,t])=>`${e}: ${t}`).join(`
|
|
1131
1131
|
`)+`
|
|
1132
|
-
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},
|
|
1132
|
+
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},aT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Qw(e,t,r,o.targetId,n)});let s=n[0]??``,c=tT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.requestBody===null)return{stdout:`(no request body)
|
|
1133
1133
|
`,stderr:``,exitCode:0};let l=r.filename;return l?(await i.writeFile(l,c.requestBody),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0}):{stdout:c.requestBody+`
|
|
1134
|
-
`,stderr:``,exitCode:0}},
|
|
1134
|
+
`,stderr:``,exitCode:0}},oT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Qw(e,t,r,o.targetId,n)});let s=n[0]??``,c=tT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseHeaders===null)return{stdout:`(response not yet received)
|
|
1135
1135
|
`,stderr:``,exitCode:0};let l=Object.entries(c.responseHeaders).map(([e,t])=>`${e}: ${t}`).join(`
|
|
1136
1136
|
`)+`
|
|
1137
|
-
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},
|
|
1138
|
-
`,stderr:``,exitCode:0};let l=r.filename,u=
|
|
1137
|
+
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},sT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),Qw(e,t,r,o.targetId,n)});let s=n[0]??``,c=tT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseBody===null)return{stdout:`(response body not yet available)
|
|
1138
|
+
`,stderr:``,exitCode:0};let l=r.filename,u=eT(c.responseBody,c.responseBodyBase64);if(`error`in u)return{stdout:``,stderr:`Request ${s}: ${u.error}\n`,exitCode:1};if(l)return await i.writeFile(l,u.bytes),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0};if(c.mimeType!==null&&!c.mimeType.startsWith(`text/`)&&!c.mimeType.includes(`json`)&&!c.mimeType.includes(`javascript`)&&!c.mimeType.includes(`xml`))return{stdout:`[binary body, ${u.bytes.length} bytes]\n`,stderr:``,exitCode:0};let d=c.responseBodyBase64?new TextDecoder().decode(u.bytes):c.responseBody;return{stdout:(d.length>4096?d.slice(0,4096)+`
|
|
1139
1139
|
... (truncated)`:d)+`
|
|
1140
|
-
`,stderr:``,exitCode:0}},
|
|
1141
|
-
`,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},
|
|
1142
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:
|
|
1140
|
+
`,stderr:``,exitCode:0}},cT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a,signal:o})=>{let s=r[0]||`about:blank`,c=i.filter;await se(e,n),Pn(o,`about to open the recording tab`);let l=await e.createPage(s);try{let{transport:r,sessionId:i}=await a(l,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:l,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});n.harRecorder||=e.createHarRecorder(t,r);let u=await n.harRecorder.startRecording(l,i,c,o);return{stdout:`Recording started (targetId: ${l}, recordingId: ${u}) at ${s}\nHAR saved to /recordings/${u}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(l).catch(()=>void 0),t}},lT=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
|
|
1141
|
+
`,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},uT=e(`playwright-route`),dT=[{urlPattern:`*`,requestStage:`Request`}];function fT(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function pT(e,n,r,i,a){if(a.sessionId!==n)return;let{requestId:o,request:s}=a,c=(r.routes.get(i)??[]).find(e=>e.regex.test(s.url));if(!c){await e.send(`Fetch.continueRequest`,{requestId:o},n).catch(e=>{uT.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:o,err:e})});return}let l=[{name:`Content-Type`,value:c.contentType},...Object.entries(c.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:o,responseCode:c.status,responseHeaders:l,body:c.body?t(new TextEncoder().encode(c.body)):void 0},n).catch(e=>{uT.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function mT(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:dT},t);let a,o=e=>{a&&pT(a.transport,a.sessionId,n,r,e)};try{a=rC({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:dT},t)})}catch(e){throw await i.send(`Fetch.disable`,{},t).catch(()=>void 0),e}let s=a;n.routeCleanup.set(r,()=>{s.stop(),s.transport.send(`Fetch.disable`,{},s.sessionId).catch(()=>void 0)})})}const hT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
|
|
1142
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:fT(o),status:r.status?parseInt(r.status,10):200,body:r.body??``,contentType:r[`content-type`]??`text/plain`,headers:{}};if(r.header){r.header.includes(`,`)&&uT.warn(`--header value contains comma — only last segment used. Use separate route calls for multiple headers.`);for(let e of r.header.split(`,`)){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();s.headers[n]=r}}}t.routeCleanup.has(a.targetId)||(t.routes.has(a.targetId)||t.routes.set(a.targetId,[]),await mT(e,i,t,a.targetId));let c=t.routes.get(a.targetId)??[];return c.unshift(s),t.routes.set(a.targetId,c),{stdout:`Route added: ${o}\n`,stderr:``,exitCode:0}},gT=async({state:e,flags:t})=>{let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};let r=e.routes.get(n.targetId)??[];return r.length===0?{stdout:`No active routes
|
|
1143
1143
|
`,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
|
|
1144
1144
|
`)+`
|
|
1145
|
-
`,stderr:``,exitCode:0}},
|
|
1146
|
-
`,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}},
|
|
1147
|
-
`),p=`${i}/snapshots/page-${Fn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function
|
|
1145
|
+
`,stderr:``,exitCode:0}},_T=async({state:e,positional:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t[0];if(!i){e.routes.set(r.targetId,[]);let t=e.routeCleanup.get(r.targetId);return t&&(t(),e.routeCleanup.delete(r.targetId)),{stdout:`All routes removed
|
|
1146
|
+
`,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}},vT=`/.playwright`;function yT(e,t){return e?`${t.replace(/\/+$/,``)}${vT}`:vT}async function bT(e,t,n){if(!t.sessionDirsCreated.has(n)){for(let t of[n,`${n}/snapshots`,`${n}/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!Ln(e))throw e}t.sessionDirsCreated.add(n)}}async function xT(e,t,n,r,i){try{return await e.withTab(n,async e=>{let{url:a,title:o,text:s,refToSelector:c,refToBackendNodeId:l,refToFrameId:u}=await ue(e),d={url:a,title:o,refToSelector:c,refToBackendNodeId:l,refToFrameId:u,content:s,timestamp:Date.now()};r.snapshots.set(n,d);let f=[`Page URL: ${a}`,`Page Title: ${o}`,``,s].join(`
|
|
1147
|
+
`),p=`${i}/snapshots/page-${Fn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function ST(e,t,n,r){await bT(e,t,n);let i=new Date().toISOString(),a=`playwright-cli ${r.command}${r.args.length?` `+r.args.join(` `):``}`,o=r.result.exitCode===0?r.result.stdout.trim()||`OK`:`Error: ${r.result.stderr.trim()}`,s=[`### ${a}`,`- **Time**: ${i}`];if(r.tabUrl||r.targetId){let e=r.tabUrl?`${r.tabUrl}${r.targetId?` (targetId: ${r.targetId})`:``}`:`targetId: ${r.targetId}`;s.push(`- **Tab**: ${e}`)}s.push(`- **Result**: ${o}`),r.snapshotPath&&s.push(``,`[Snapshot](${r.snapshotPath})`),s.push(`---`,``);let c=s.join(`
|
|
1148
1148
|
`)+`
|
|
1149
|
-
`,l=`${n}/session.md`,u=``;try{let t=await e.readFile(l);u=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(l,u+c)}function
|
|
1150
|
-
`);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function
|
|
1149
|
+
`,l=`${n}/session.md`,u=``;try{let t=await e.readFile(l);u=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(l,u+c)}function CT(){return import(`./snapshot-features-Dopnb9Bm.js`)}async function wT(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=le(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
|
|
1150
|
+
`);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function TT(e,t){await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let n=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;if(n?.objectId)return(await e.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
|
|
1151
1151
|
this.scrollIntoView({ block: 'center' });
|
|
1152
1152
|
const r = this.getBoundingClientRect();
|
|
1153
1153
|
return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
|
|
1154
|
-
}`,returnByValue:!0})).result?.value}async function
|
|
1154
|
+
}`,returnByValue:!0})).result?.value}async function ET(e,t){let n=await e.evaluate(`(function() {
|
|
1155
1155
|
const el = document.querySelector(${JSON.stringify(t.split(`,`)[0].trim())});
|
|
1156
1156
|
if (!el) return null;
|
|
1157
1157
|
el.scrollIntoView({ block: 'center' });
|
|
1158
1158
|
const r = el.getBoundingClientRect();
|
|
1159
1159
|
return JSON.stringify({ x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height });
|
|
1160
|
-
})()`);return n?Rn(n,`element clip rect`):void 0}async function
|
|
1161
|
-
`,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Yn(e,r);if(t)return
|
|
1162
|
-
`,stderr:``,exitCode:0}},
|
|
1160
|
+
})()`);return n?Rn(n,`element clip rect`):void 0}async function DT(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return TT(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return ET(e,i)}const OT=async({browser:e,fs:t,state:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r[`no-iframes`]===`true`,s=r.depth;if(s!==void 0&&!/^[1-9][0-9]*$/.test(s))return{stdout:``,stderr:`snapshot: --depth must be a positive integer, got "${s}"\n`,exitCode:1};let c=s===void 0?void 0:parseInt(s,10),l=r.boxes===`true`;if(l&&r.frame)return{stdout:``,stderr:`snapshot: --boxes is not supported with --frame (child-frame rects live in another coordinate space)
|
|
1161
|
+
`,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Yn(e,r);if(t)return wT(e,n,a.targetId,t);let{snapshot:i,output:s}=await oe(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await CT();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await CT();u=e(u,c)}return r.filename?(await t.writeFile(r.filename,u),{stdout:`Snapshot saved to ${r.filename}\n`,stderr:``,exitCode:0}):{stdout:u+`
|
|
1162
|
+
`,stderr:``,exitCode:0}},kT=async e=>{let{findHandlerImpl:t}=await CT();return t(e)},AT=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:{stdout:await n(r.targetId,async e=>`Frame IDs (use with --frame, never --tab):\n${(await e.getFrameTree()).map(e=>{let t=e.parentFrameId?`child`:`main`,n=e.parentFrameId?` parentFrameId=${e.parentFrameId}`:``;return` [${t}] frameId=${e.frameId}${n} - ${e.url}`}).join(`
|
|
1163
1163
|
`)}`)+`
|
|
1164
|
-
`,stderr:``,exitCode:0}},
|
|
1165
|
-
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function
|
|
1166
|
-
`,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await
|
|
1167
|
-
`,stderr:``,exitCode:0}},
|
|
1164
|
+
`,stderr:``,exitCode:0}},jT=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Fn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Kn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return ee()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
|
|
1165
|
+
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function MT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await DT(e,i,r);return!a||a.width<=0||a.height<=0?{error:`could not resolve element ${r} to a visible box — the snapshot is likely stale (navigation, reload, or layout change). Re-run "snapshot" and retry with a fresh ref, or omit the ref to capture the viewport deliberately.`}:{clip:a}}const NT=new Set([`png`,`jpeg`,`webp`]);function PT(e){let t=e.type;if(t&&NT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const FT=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,sessionRoot:o,onTab:s})=>{let c=j(i);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};if(i.type&&!NT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&PT(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
|
|
1166
|
+
`,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await MT(e,n,c.targetId,r[0]);if(`error`in t)return t;s=t.clip}let l=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await CT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=PT(i),f=await e.screenshot({format:d,fullPage:l,...s?{clip:s}:{},...u?{maxWidth:u}:{}}),p=d===`jpeg`?`jpg`:d,m=i.filename||`${a}/screenshot-${Date.now()}.${p}`,h=Kn(f);await t.writeFile(m,h);try{await bT(t,n,o);let e=`${o}/screenshots/screenshot-${Fn(new Date)}.${p}`;await t.writeFile(e,h)}catch{}return{message:`Screenshot saved to ${m} (${Math.round(h.length/1024)} KB)`}});return`error`in l?{stdout:``,stderr:`screenshot: ${l.error}\n`,exitCode:1}:{stdout:l.message+`
|
|
1167
|
+
`,stderr:``,exitCode:0}},IT=async({browser:e,fs:t,positional:n,flags:r,sessionRoot:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=r.filename??n[0]??`${i}/storage-state.json`,c=[],l=[],u=``;await a(o.targetId,async e=>{c=(await e.send(`Network.getCookies`)).cookies??[];let{sessionId:t,transport:n}=e;u=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``;let r=(await n.send(`Runtime.evaluate`,{expression:`JSON.stringify(Object.entries(localStorage).map(([name,value])=>({name,value})))`,returnByValue:!0},t)).result.value??`[]`;l=JSON.parse(r)});let d=JSON.stringify({cookies:c,origins:u?[{origin:u,localStorage:l}]:[]},null,2);return await t.writeFile(s,d),{stdout:`Saved storage state to ${s}\n`,stderr:``,exitCode:0}},LT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
|
|
1168
1168
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s;try{let e=await t.readTextFile(o);s=JSON.parse(e)}catch{return{stdout:``,stderr:`Failed to read storage state from ${o}\n`,exitCode:1}}let c=[];(s.cookies?.length||s.origins?.length)&&await i(a.targetId,async e=>{if(s.cookies?.length&&await e.send(`Network.setCookies`,{cookies:s.cookies}),!s.origins?.length)return;let{sessionId:t,transport:n}=e,r=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``,i=s.origins.filter(e=>e.origin===r);c=s.origins.filter(e=>e.origin!==r);for(let{localStorage:e}of i){let r=`(function() {
|
|
1169
1169
|
var items = ${JSON.stringify(e)};
|
|
1170
1170
|
for (var i = 0; i < items.length; i++) {
|
|
1171
1171
|
localStorage.setItem(items[i].name, items[i].value);
|
|
1172
1172
|
}
|
|
1173
|
-
})()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function
|
|
1173
|
+
})()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function RT(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:{stdout:await r(i.targetId,async e=>{let n=await e.evaluate(`JSON.stringify(Object.entries(${t}))`),r=JSON.parse(n);return r.length===0?`No ${t} entries`:r.map(([e,t])=>`${e}=${t}`).join(`
|
|
1174
1174
|
`)})+`
|
|
1175
1175
|
`,stderr:``,exitCode:0}},get:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-get requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:{stdout:await a(o.targetId,async e=>{let n=await e.evaluate(`${t}.getItem(${JSON.stringify(r[0])})`);if(n===null)throw Error(`Key "${r[0]}" not found in ${t}`);return n})+`
|
|
1176
|
-
`,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const
|
|
1177
|
-
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},
|
|
1176
|
+
`,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const zT=RT(`localstorage`,`localStorage`),BT=RT(`sessionstorage`,`sessionStorage`),VT=e(`playwright`),HT={width:412,height:915,deviceScaleFactor:2.625};function UT(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;VT.info(`Arming teleport via open/tab-new flags`),VT.debug(`Arming teleport via open/tab-new flags details`,{targetId:i,startPattern:a,returnPattern:o});let s,c;try{s=new RegExp(a)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${a}\n`,exitCode:1}}try{c=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${o}\n`,exitCode:1}}let l=n.timeout?parseInt(n.timeout,10):300,u=t.teleportWatchers.get(i);return u&&(Fw(u),t.teleportWatchers.delete(i)),Iw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const WT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=r[0]||`about:blank`,s=i.runtime,c=i.mobile===`true`;await se(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),c&&await a(u,async e=>{await e.setViewportOverride(HT.width,HT.height,{deviceScaleFactor:HT.deviceScaleFactor,mobile:!0,userAgent:`Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36`}),o!==`about:blank`&&await e.navigate(o)}),i.foreground===`true`||i.fg===`true`)try{await a(u,e=>e.bringToFront())}catch(e){VT.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=UT(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await jC(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
|
|
1177
|
+
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},GT=async({browser:e,state:t})=>{let n=await ce(e,t);return n.length===0?{stdout:`No tabs open
|
|
1178
1178
|
`,stderr:``,exitCode:0}:{stdout:n.map(e=>{let t=!!e.active,n=e.targetId.includes(`:`),r=t?` (active)`:``,i=n?` [remote:${e.targetId.substring(0,e.targetId.indexOf(`:`))}]`:``;return`[${e.targetId}] ${e.url} "${e.title}"${r}${i}`}).join(`
|
|
1179
1179
|
`)+`
|
|
1180
|
-
`,stderr:``,exitCode:0}},
|
|
1180
|
+
`,stderr:``,exitCode:0}},KT=async({browser:e,state:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},qT=async({browser:e,state:t,positional:n,onTab:r})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
|
|
1181
1181
|
`,exitCode:1};let i=n[0];if(!/^[0-9]+$/.test(i))return{stdout:``,stderr:`tab-select index must be a positive integer
|
|
1182
1182
|
`,exitCode:1};let a=parseInt(i,10);if(a<1)return{stdout:``,stderr:`tab-select index must be a positive integer
|
|
1183
|
-
`,exitCode:1};let o=await ce(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},
|
|
1183
|
+
`,exitCode:1};let o=await ce(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},JT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
|
|
1184
1184
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseInt(n[0],10),s=parseInt(n[1],10);return isNaN(o)||isNaN(s)||o<=0||s<=0?{stdout:``,stderr:`resize requires positive integer width and height
|
|
1185
|
-
`,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},
|
|
1185
|
+
`,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},YT=e(`playwright-teleport`);function XT(){YT.info(`Listing available follower runtimes`);let e=Nw();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
|
|
1186
1186
|
`,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
|
|
1187
1187
|
`,stderr:``,exitCode:0};let n=[`Available runtimes for teleport:`];for(let e of t){let t=[e.runtimeId];if(e.floatType&&t.push(`[${e.floatType}]`),e.runtime&&t.push(`(${e.runtime})`),e.lastActivity){let n=Math.round((Date.now()-e.lastActivity)/1e3);t.push(`active ${n}s ago`)}n.push(` ${t.join(` `)}`)}return{stdout:n.join(`
|
|
1188
1188
|
`)+`
|
|
1189
|
-
`,stderr:``,exitCode:0}}function
|
|
1190
|
-
`,stderr:``,exitCode:0}}function
|
|
1191
|
-
`,exitCode:1};let c=
|
|
1192
|
-
`,exitCode:1};let u=n.runtime;if(u){let e
|
|
1189
|
+
`,stderr:``,exitCode:0}}function ZT({state:e,flags:t}){let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};YT.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(Fw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
|
|
1190
|
+
`,stderr:``,exitCode:0}}function QT(e,t){let n,r;try{n=new RegExp(e)}catch{return{error:`Invalid regex for --start: ${e}\n`}}try{r=new RegExp(t)}catch{return{error:`Invalid regex for --return: ${t}\n`}}return{startPattern:n,returnPattern:r}}function $T(e){return(Nw()?.()??[]).find(t=>t.runtimeId===e)?.runtime===`slicc-cherry`?`teleport: runtime ${e} is a cherry host and cannot serve a cookie teleport (no Network.* access)\n`:null}async function eE({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.start||n[`teleport-start`],s=n.return||n[`teleport-return`];if(!o||!s)return{stdout:``,stderr:`teleport requires --start <regex> and --return <regex>
|
|
1191
|
+
`,exitCode:1};let c=QT(o,s);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};let l=n.timeout?parseInt(n.timeout,10):300;if(isNaN(l)||l<=0)return{stdout:``,stderr:`--timeout must be a positive number
|
|
1192
|
+
`,exitCode:1};let u=n.runtime;if(u){let e=$T(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(YT.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),Fw(d),t.teleportWatchers.delete(a.targetId));let f;try{let e=await r(a.targetId,e=>e.evaluate(`window.location.href`));f=typeof e==`string`?e:String(e)}catch{}return YT.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),YT.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),Pn(i,`about to arm a teleport watcher on tab ${a.targetId}`),Iw(e,t,c.startPattern,c.returnPattern,l*1e3,u,f,a.targetId),{stdout:`Teleport armed on tab ${a.targetId}. Will trigger when URL matches ${o}\n`,stderr:``,exitCode:0}}const tE=async e=>e.flags.list===`true`?XT():e.flags.off===`true`?ZT(e):eE(e),nE={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,pdf:`application/pdf`,txt:`text/plain`,json:`application/json`,csv:`text/csv`,html:`text/html`,htm:`text/html`,xml:`application/xml`,zip:`application/zip`,mp4:`video/mp4`,mp3:`audio/mpeg`};function rE(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return nE[t]??`application/octet-stream`}function iE(e,t){if(e.length===0)return{error:`upload requires at least one file path
|
|
1193
1193
|
`};if(!Wn(e[0]))return{targetRef:null,filePaths:e};let n=e[0],r=e.slice(1);return t?t.refToBackendNodeId.has(n)?r.length===0?{error:`upload requires at least one file path
|
|
1194
1194
|
`}:{targetRef:n,filePaths:r}:{error:`Unknown ref "${n}"\n`}:{error:`No snapshot available. Run "snapshot" first.
|
|
1195
|
-
`}}const
|
|
1195
|
+
`}}const aE=new Map([[`teleport`,tE],[`open`,WT],[`tab-new`,WT],[`fetch`,MC],[`goto`,Gw],[`navigate`,Gw],[`snapshot`,OT],[`find`,kT],[`frames`,AT],[`screenshot`,FT],[`click`,UC],[`type`,WC],[`fill`,GC],[`eval`,EC],[`eval-file`,DC],[`press`,KC],[`keydown`,qC],[`keyup`,JC],[`go-back`,Kw],[`go-forward`,qw],[`reload`,Jw],[`tab-list`,GT],[`tab-close`,KT],[`close`,KT],[`dblclick`,YC],[`hover`,XC],[`select`,ZC],[`check`,QC],[`uncheck`,$C],[`drag`,ew],[`resize`,JT],[`dialog-accept`,bC],[`dialog-dismiss`,xC],[`cookie-list`,pC],[`cookie-get`,mC],[`cookie-set`,hC],[`cookie-delete`,gC],[`cookie-clear`,_C],[`localstorage-list`,zT.list],[`localstorage-get`,zT.get],[`localstorage-set`,zT.set],[`localstorage-delete`,zT.del],[`localstorage-clear`,zT.clear],[`sessionstorage-list`,BT.list],[`sessionstorage-get`,BT.get],[`sessionstorage-set`,BT.set],[`sessionstorage-delete`,BT.del],[`sessionstorage-clear`,BT.clear],[`record`,cT],[`stop-recording`,lT],[`tab-select`,qT],[`pdf`,jT],[`network-state-set`,Yw],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=iE(i,c);if(`error`in l)return{stdout:``,stderr:l.error,exitCode:1};let{targetRef:u,filePaths:d}=l,f=[];for(let e of d){let r=await tw(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:rE(i),base64:t(r)})}if(u){let e=c.refToBackendNodeId.get(u);await o(s.targetId,async({sessionId:t,transport:n})=>{await n.send(`DOM.enable`,{},t);let{object:r}=await n.send(`DOM.resolveNode`,{backendNodeId:e},t),i=await n.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:`function(filesData) {
|
|
1196
1196
|
const el = this;
|
|
1197
1197
|
if (el.tagName !== 'INPUT' || el.type !== 'file') {
|
|
1198
1198
|
throw new Error('Element ' + el.tagName + ' is not a file input');
|
|
@@ -1223,12 +1223,12 @@ Options:
|
|
|
1223
1223
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
1224
1224
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
1225
1225
|
return el.files.length;
|
|
1226
|
-
})()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,
|
|
1227
|
-
`;return{...r,stderr:r.stderr+c}}async function
|
|
1228
|
-
`,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await
|
|
1229
|
-
`);let a=[];for(let[e,t]of
|
|
1226
|
+
})()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,IT],[`state-load`,LT],[`console`,cC],[`requests`,nT],[`request`,rT],[`request-headers`,iT],[`request-body`,aT],[`response-headers`,oT],[`response-body`,sT],[`mousemove`,aw],[`mousedown`,ow],[`mouseup`,sw],[`mousewheel`,cw],[`drop`,uw],[`route`,hT],[`route-list`,gT],[`unroute`,_T],[`generate-locator`,vC],[`highlight`,yC]]);function oE(){let e=(Bn.string??[]).map(e=>`--${e}`),t=new Set(Bn.boolean??[]);for(let[e,n]of Object.entries(Bn.alias??{})){let r=[e,...Array.isArray(n)?n:[n]];if(r.some(e=>t.has(e)))for(let e of r)t.add(e)}return{value:e,bool:[...[...t].map(e=>`--${e}`),`--help`,`-h`,`--no-iframes`]}}function sE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function cE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const lE=2e3;function uE(e,t){if(typeof e.getTabLockStats!=`function`)return;let n=e.getTabLockStats();return t?{totalWaitMs:n.totalWaitMs,tabWaitMs:e.getTabLockStats(t).tabWaitMs}:{totalWaitMs:n.totalWaitMs}}function dE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<lE)return r;let o=(a/1e3).toFixed(1),s=n&&t.tabWaitMs!==void 0?e.getTabLockStats(n).tabWaitMs-t.tabWaitMs:0,c=`note: browser bridge contended — lock waits totaled ${o}s while this command ran, ${s>=lE?`${(s/1e3).toFixed(1)}s of it waiting on this tab (--tab=${n})`:`all of it waiting on the bridge, not on this tab`} (queue depth ${i.queueDepth}). Commands on the same tab serialize; commands on different tabs run in parallel — stagger callers on THIS tab, or give each caller its own tab.
|
|
1227
|
+
`;return{...r,stderr:r.stderr+c}}async function fE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Vn(e,t.tab,n):null)??r}\n`,exitCode:1}}function pE(e,t,n){return{stdout:``,stderr:`${e} ${t}: ${n===void 0?`aborted: the caller stopped waiting for it`:n instanceof Error?n.message:String(n)}\n`,exitCode:130}}async function mE(e,t,n){let r=aE.get(t);if(!r)return{stdout:``,stderr:`Unknown command: ${t}\nRun "playwright-cli help" for usage.\n`,exitCode:1};let{signal:i}=n;try{let a=await r(n);return i?.aborted?pE(e,t,void 0):a}catch(r){return i?.aborted?pE(e,t,r):await fE(n.browser,n.flags,r)}}async function hE(e,t,n,r){let i=C(sE(n),cE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=zn(n))}catch(n){return{answer:{stdout:``,stderr:`${e} ${t}: ${n instanceof Error?n.message:String(n)}\n`,exitCode:1}}}if(a.help===`true`||a.h===`true`){let{formatSubcommandHelp:n}=await import(`./help-aKSKYJF6.js`);return{answer:{stdout:n(e,t),stderr:``,exitCode:0}}}let o=null;try{let{validateSubcommandArgs:r}=await import(`./validate-args-BcxRh84E.js`);o=r(e,t,n,i.positionals)}catch{o=null}return o?{answer:{stdout:``,stderr:o,exitCode:1}}:{positional:i.positionals,flags:a}}function gE(e,t,n,r={}){let i=t?In(t,n):null,a=oE();return S(e,async(o,s)=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`){let{formatHelp:t}=await import(`./help-aKSKYJF6.js`);return{stdout:t(e)+`
|
|
1228
|
+
`,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await hE(e,c,l,a);if(`answer`in u)return u.answer;let{positional:d,flags:f}=u;if(!t||!i)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let p=f.tab??null,m=uE(t,p),h=na(s.env),g=yT(r.isScoop?.()??!1,h),_=await mE(e,c,{browser:t,fs:n,state:i,positional:d,flags:f,scratchDir:h,sessionRoot:g,onTab:(e,n)=>t.withTab(e,n,{signal:s.signal}),signal:s.signal}),v=f.tab??null,ee=null;qn.has(c)&&_.exitCode===0&&v&&(ee=await xT(t,n,v,i,g));try{await ST(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return dE(t,m,p,_)})}const _E=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`pyodide`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Gn,`sprinkle`]],[`Clipboard`,[`pbcopy`,`pbpaste`,`xclip`,`xsel`]],[`Filesystem`,[`mount`,`umount`,`fswatch`]],[`Scoops & agents`,[`agent`,`gelatiere`,`mcp`,`webhook`,`crontask`]],[`Process`,[`ps`,`kill`,`jshd`,`meminfo`,`uptime`]],[`Shell builtins (limited)`,[...Kg]]]);function vE(e,t=[],n=[]){let r=[],i=new Set(e);for(let e of t)i.delete(e);for(let e of n)i.delete(e);r.push(`Available commands:
|
|
1229
|
+
`);let a=[];for(let[e,t]of _E){let n=t.filter(e=>i.has(e));if(n.length>0){r.push(` ${e}:`),r.push(` ${n.join(`, `)}\n`);for(let e of n)i.delete(e)}}for(let e of i)a.push(e);return a.length>0&&(r.push(` Other:`),r.push(` ${a.sort().join(`, `)}\n`)),t.length>0&&(r.push(` User scripts (.jsh):`),r.push(` ${t.sort().join(`, `)}\n`)),n.length>0&&(r.push(` Workflows:`),r.push(` ${n.sort().join(`, `)}\n`)),r.push(`Use '<command> --help' for details on a specific command.`),r.join(`
|
|
1230
1230
|
`)+`
|
|
1231
|
-
`}function
|
|
1231
|
+
`}function yE(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
|
|
1232
1232
|
|
|
1233
1233
|
Usage: commands [command]
|
|
1234
1234
|
|
|
@@ -1239,7 +1239,7 @@ If a command name is provided, shows help for that command.
|
|
|
1239
1239
|
Otherwise, lists all available commands.
|
|
1240
1240
|
|
|
1241
1241
|
Note: This is an enhanced version of 'help' that shows all custom commands.
|
|
1242
|
-
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:
|
|
1242
|
+
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:vE(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function bE(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
|
|
1243
1243
|
|
|
1244
1244
|
Usage:
|
|
1245
1245
|
hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
|
|
@@ -1270,8 +1270,8 @@ Notes:
|
|
|
1270
1270
|
- Background-job logs get a progress line every few seconds.
|
|
1271
1271
|
- Weights are read by the speech engines via the preview SW from the
|
|
1272
1272
|
target directory; transformers expects <localModelPath>/<repo>/.
|
|
1273
|
-
`,stderr:``,exitCode:e}}function
|
|
1274
|
-
`)}\n`}function
|
|
1273
|
+
`,stderr:``,exitCode:e}}function xE(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const SE=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function CE(e,t){if(typeof t!=`string`)return{error:`${e} requires a value`};let n=Number(t);return!/^\d+$/.test(t)||!Number.isSafeInteger(n)||n<1?{error:`${e} must be a positive integer, got '${t}'`}:n}function wE(e){let t=null,n=`main`,r=!1,i,a,o=[],s=0;for(;s<e.length;){let c=e[s];if(c===`--concurrency`||c===`-j`||c===`--max-in-flight-mb`){let t=CE(c,e[s+1]);if(typeof t!=`number`)return t;c===`--max-in-flight-mb`?a=t:i=t,s+=2;continue}if(c===`--to`){let n=e[s+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,s+=2;continue}if(c===`--revision`||c===`--rev`){let t=e[s+1];if(typeof t!=`string`)return{error:`${c} requires a value`};n=t,s+=2;continue}if(c===`--force`||c===`-f`){r=!0,s+=1;continue}if(c.startsWith(`--`))return{error:`unknown option: ${c}`};o.push(c),s+=1}if(o.length===0)return{error:`download requires <repo>`};let c=o[0];return SE.test(c)?{repo:c,files:o.slice(1),to:t,revision:n,force:r,concurrency:i,maxInFlightMb:a}:{error:`invalid repo '${c}' — expected <owner>/<name>`}}function TE(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${t%60}s`:`${Math.floor(n/60)}h ${n%60}m`}var EE=class{filesTotal;bytesTotal;now;filesDone=0;bytesDone=0;bytesFetched=0;lastLineAt=-1/0;startedAt;constructor(e,t,n=Date.now){this.filesTotal=e,this.bytesTotal=t,this.now=n,this.startedAt=n()}listed(e,t){this.filesTotal=e,this.bytesTotal=t>0?t:void 0}file(e,t){this.filesDone+=1,this.bytesDone+=t,e===`downloaded`&&(this.bytesFetched+=t)}rate(){let e=(this.now()-this.startedAt)/1e3;return e>0?this.bytesFetched/e:0}elapsedMs(){return this.now()-this.startedAt}line(){let e=this.now();if(!(this.filesDone>=this.filesTotal)&&e-this.lastLineAt<5e3)return null;this.lastLineAt=e;let t=this.rate(),n=Sy(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${Sy(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${TE(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${Sy(t)}/s${r}\n`}};function DE(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function OE(e,t,n,r){let i=wE(e);if(`error`in i)return xE(i.error);let a=ra(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=DE(t),l=new EE(i.files.length,void 0,r),u=``;try{let e=await o({fetch:n.fetch,streamFetch:n.streamFetch,fs:t.fs,repo:i.repo,targetDir:a,files:i.files,revision:i.revision,force:i.force,concurrency:i.concurrency,maxBytesInFlight:i.maxInFlightMb===void 0?void 0:i.maxInFlightMb*1024*1024,signal:t.signal,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e,totalBytes:t})=>{l.listed(e.length,t);let n=`hf: ${e.length} file(s) listed in ${i.repo}@${i.revision}\n`;u+=n,c?.(n)},onFile:e=>{u+=e.status===`downloaded`?`hf: downloaded ${e.file} (${Sy(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${a})\n`,l.file(e.status,e.bytes);let t=c?l.line():null;t&&c?.(t)}}}),r=e.downloaded>0?` in ${TE(l.elapsedMs())} (${Sy(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${Sy(e.totalBytes)} total into ${a}${r}\n`;return{stdout:``,stderr:u+s,exitCode:0}}catch(e){return e instanceof s?(u+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:u,exitCode:1}):xE(e instanceof Error?e.message:String(e))}}const kE=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function AE(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||w(n,{valueFlags:kE}))return bE(+(n.length===0));let i=n[0];return i===`download`?OE(n.slice(1),r,e,t):xE(`unknown subcommand: ${i}`)}}}const jE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function ME(e){return jn(e,jE)}function NE(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function PE(e){let t={};return e.has(`--vid`)&&(t.vendorId=NE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=NE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=NE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=NE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function FE(e){let t=_i(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function IE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function LE(e){return e.toString(16).padStart(2,`0`)}function RE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function zE(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${RE(e.usagePage)}:${RE(e.usage??0)}`;return`${e.handle}\t${RE(e.vendorId)}:${RE(e.productId)}${r}\t${t}${n}`}function BE(e,t){let n=t?.usagePage,r=t?.usage;if(n===void 0&&r===void 0)return e;let i=e.findIndex(e=>(n===void 0||e.usagePage===n)&&(r===void 0||e.usage===r));if(i<=0)return e;let a=e.slice(),[o]=a.splice(i,1);return a.unshift(o),a}function VE(e){return`${e.map(zE).join(`
|
|
1274
|
+
`)}\n`}function HE(e){return`${LE(e.reportId)} ${IE(e.bytes)}`.trimEnd()}function UE(e){return{stdout:e,stderr:``,exitCode:0}}function W(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const WE=`hid - access HID devices via WebHID
|
|
1275
1275
|
|
|
1276
1276
|
Usage: hid <subcommand> [options]
|
|
1277
1277
|
|
|
@@ -1295,10 +1295,10 @@ Options:
|
|
|
1295
1295
|
-h, --help
|
|
1296
1296
|
|
|
1297
1297
|
Report payloads are capped at ${$r} bytes (4 MiB).
|
|
1298
|
-
`;function
|
|
1299
|
-
`):
|
|
1300
|
-
`)}\n`)}async function
|
|
1301
|
-
`)}\n`:``)}async function
|
|
1298
|
+
`;function GE(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return UE(t)}return UE(e.length?`${IE(e)}\n`:``)}function KE(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function qE(e){let t=await e.list();return t.length===0?UE(`no granted HID devices
|
|
1299
|
+
`):UE(`${t.map(zE).join(`
|
|
1300
|
+
`)}\n`)}async function JE(e,t){let n=e.get(`--__resolved`),r=PE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?W(`request: missing resolved handle`):UE(VE(BE(await Promise.all(e.map(e=>t.info(e))),i)))}let a=je();return a?YE(r,i,a,t):UE(VE(BE(await t.request(r),i)))}async function YE(e,t,n,r){let i=await Ax(`hid-device`,e,n),a,o;if(i.handle){let e=await r.info(i.handle);a=e.vendorId,o=e.productId}else{let e=i.info,t=Qr();if(!t)return W(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=Kr(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return W(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=BE(s.length>0?s:[],t);return c.length===0?W(`request: granted device could not be re-acquired`):UE(VE(c))}async function XE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),UE(``)):W(`${e}: handle required`)}async function ZE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return W(`${e}: handle and report-id required`);let o=NE(a,`report-id`),s=FE(n);return s.length>4194304?W(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),UE(``))}async function QE(e,t,n){let[,r,i]=e;return!r||i===void 0?W(`feature-get: handle and report-id required`):GE((await t.receiveFeatureReport(r,NE(i,`report-id`))).bytes,n)}async function $E(e,t,n){let r=e[1];if(!r)return W(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(HE(e))});try{await KE(t.signal)}finally{await a()}return UE(i.length?`${i.join(`
|
|
1301
|
+
`)}\n`:``)}async function eD(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return W(`query: handle and report-id required`);let s=NE(o,`report-id`),c=FE(t);if(c.length>4194304)return W(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?NE(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?W(`query: no input report within ${l}ms`):i?GE(t.bytes,!0):UE(`${HE(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function tD(e,t,n){let{positionals:r,flags:i,bools:a}=ME(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return qE(n);case`request`:return JE(i,n);case`open`:case`close`:return XE(o,r,n);case`send`:case`feature-send`:return ZE(o,r,t,n);case`feature-get`:return QE(r,n,s);case`watch`:return $E(r,t,n);case`query`:return eD(r,t,i,n,s);default:return W(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function nD(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return UE(WE);let n=ti(de(),y());if(!n)return W(`WebHID is unavailable in this environment`);try{return await tD(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?W(`user cancelled or no device selected`):W(t)}})}const rD=1e3,iD=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,aD=`${iD}
|
|
1302
1302
|
|
|
1303
1303
|
Print the user and group identity of this SLICC runtime.
|
|
1304
1304
|
|
|
@@ -1313,22 +1313,22 @@ Options:
|
|
|
1313
1313
|
--version Print the SLICC build.
|
|
1314
1314
|
|
|
1315
1315
|
Identity comes from the home directory, which is where the rest of the shell
|
|
1316
|
-
gets it too. A cone is the human user (uid ${
|
|
1316
|
+
gets it too. A cone is the human user (uid ${rD}, one per runtime, since every
|
|
1317
1317
|
cone shares one home); a scoop is a service identity whose uid is derived from
|
|
1318
1318
|
its folder name, so it is stable across reloads and distinct per scoop.
|
|
1319
1319
|
Every user is in a user-private group of the same name, plus the role group
|
|
1320
1320
|
\`cone\` (10) or \`scoop\` (20).
|
|
1321
|
-
`,
|
|
1321
|
+
`,oD=`/scoops/`;function sD(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return 2e3+t%58e3}function cD(e,t){return{name:e,uid:t===`cone`?rD:sD(e),role:t}}function lD(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function uD(e,t){return`${e}(${t})`}function dD(e){let t=lD(e),n=t[0];return`uid=${uD(e.uid,e.name)} gid=${uD(n.gid,n.name)} groups=${t.map(e=>uD(e.gid,e.name)).join(`,`)}\n`}async function fD(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(oD)?`scoop`:`cone`,r=e.env.get(`USER`)||pD(t,n);return r?cD(r,n):cD(hp(await mp(mD(e.fs))),`cone`)}function pD(e,t){return e===``?``:t===`cone`?hp(e):e.slice(8).split(`/`)[0]??``}function mD(e){return{readDir:async t=>(await e.readdirWithFileTypes?.(t)??[]).map(e=>({name:e.name,type:e.isDirectory?`directory`:`file`})),stat:async t=>({mtime:(await e.stat(t)).mtime.getTime()})}}async function hD(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?cD(t,`cone`):await e.fs.exists(`${oD}${t}`).catch(()=>!1)?cD(t,`scoop`):null}function gD(e){let t={select:`all`,names:!1,mode:`run`},n=[];for(let r of e){if(r===`--help`||r===`-h`)return{...t,mode:`help`};if(r===`--version`)return{...t,mode:`version`};let e=vD[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=_D[e];if(!n)return{error:`unrecognized option '-${e}'`};n(t)}continue}n.push(r)}return n.length>1?{error:`extra operand '${n[1]}'`}:(n[0]!==void 0&&(t.operand=n[0]),t.names&&t.select===`all`?{error:`cannot print only names in default format`}:t)}const _D={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},vD={"--user":_D.u,"--group":_D.g,"--groups":_D.G,"--name":_D.n,"--real":_D.r};function yD(e,t){let n=lD(e),r=(e,n)=>t.names?n:String(e);switch(t.select){case`user`:return`${r(e.uid,e.name)}\n`;case`group`:return`${r(n[0].gid,n[0].name)}\n`;case`groups`:return`${n.map(e=>r(e.gid,e.name)).join(` `)}\n`;case`all`:return dD(e)}}function bD(){return S(`id`,async(e,t)=>{let n=gD(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${iD}\n`,exitCode:1};if(n.mode===`help`)return SD(aD);if(n.mode===`version`)return SD(`id (SLICC) ${$e().version}\n`);let r=n.operand===void 0?await fD(t):await hD(t,n.operand);return r?SD(yD(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function xD(){return S(`whoami`,async(e,t)=>SD(`${(await fD(t)).name}\n`))}function SD(e){return{stdout:e,stderr:``,exitCode:0}}function CD(){return{stdout:`imgcat - preview image and video files in the preview tab
|
|
1322
1322
|
|
|
1323
1323
|
Usage: imgcat <path> [path...]
|
|
1324
1324
|
|
|
1325
1325
|
Options:
|
|
1326
1326
|
-h, --help Show this help message
|
|
1327
|
-
`,stderr:``,exitCode:0}}function
|
|
1328
|
-
`,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=De(t);if(!Ee(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const
|
|
1329
|
-
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),
|
|
1330
|
-
`]),
|
|
1331
|
-
`)}\n`}function
|
|
1327
|
+
`,stderr:``,exitCode:0}}function wD(e={}){return S(`imgcat`,async(t,n)=>{if(t.length===0||w(t))return CD();let r=C(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return CD();if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
|
|
1328
|
+
`,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=De(t);if(!Ee(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const TD=new Set([`run`,`run-script`]),ED=new Set([`test`,`start`,`stop`,`restart`]),DD=new Set([` `,` `,`
|
|
1329
|
+
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),OD=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
|
|
1330
|
+
`]),kD=/^[A-Za-z_][A-Za-z0-9_]*=/,AD=/^[@A-Za-z0-9._-]+$/,jD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),MD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),ND=new Set([`ipx`,`npx`]);function PD(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function FD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*ID(e){let t=b(e);for(;yield t,t!==`/`;)t=Fe(t).dir}function LD(e){if(typeof e!=`object`||!e)return{};let t={};for(let[n,r]of Object.entries(e))typeof r==`string`&&(t[n]=r);return t}function RD(e){return typeof e==`string`?e:void 0}async function zD(e,t){for(let n of ID(t)){let t=x(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await FD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:RD(r.name),version:RD(r.version),scripts:LD(r.scripts)}}return null}function BD(e,t){let n=t,r=``;for(;n<e.length;){let t=e[n];if(r!==``){t===`\\`&&r===`"`?n++:t===r&&(r=``),n++;continue}if(t===`'`||t===`"`){r=t,n++;continue}if(t===`\\`){n+=2;continue}if(DD.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function VD(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(OD.has(i)){r=!0,n++;continue}let a=BD(e,n);if(a.end===a.start){n++;continue}if(r&&!kD.test(a.text)){if(MD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function HD(e,t){return!AD.test(e)||jD.has(e)||ND.has(e)?!1:!t.isRegistered(e)}async function UD(e,t){let n=VD(e).filter(e=>HD(e.text,t));if(n.length===0)return e;let r=[];for(let e of n)await t.hasLocalBin(e.text)&&r.push(e);if(r.length===0)return e;let i=e;for(let e of[...r].reverse())i=`${i.slice(0,e.start)}ipx ${i.slice(e.start)}`;return i}function WD(e){let t=[];for(let n of ID(e))t.push(x(n,`node_modules`,`.bin`));return t}function GD(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...WD(e.dir),i].filter(e=>e!==``).join(`:`),npm_lifecycle_event:t,npm_lifecycle_script:n};return e.name!==void 0&&(a.npm_package_name=e.name),e.version!==void 0&&(a.npm_package_version=e.version),a}function KD(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function qD(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${x(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${KD(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
|
|
1331
|
+
`)}\n`}function JD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function YD(e){let t={silent:!1,ifPresent:!1},n=[],r,i=!1;for(let a of e){if(i){n.push(a);continue}if(a===`--`){i=!0;continue}JD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function XD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function ZD(e,t,n,r){let i=r.length>0?` ${r.map(PD).join(` `)}`:``,a=[],o=e.scripts[`pre${t}`];o!==void 0&&a.push({event:`pre${t}`,body:o}),a.push({event:t,body:`${n}${i}`});let s=e.scripts[`post${t}`];return s!==void 0&&a.push({event:`post${t}`,body:s}),a}async function QD(e,t,n,r){if(n===`start`&&await r.exists(x(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function $D(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of WD(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function eO(e,t,n,r,i,a){let o=i.exec;if(!o)return XD(e,`run requires shell exec support, which this context does not provide`);let s=$D(a.fs,t,i),c=KD(t),l=``,u=``;for(let a of n){r.silent||(l+=`\n> ${c} ${a.event}\n> ${a.body}\n\n`);let n=await o(await UD(a.body,s),{cwd:t.dir,env:GD(t,a.event,a.body,i),stdin:_i(i.stdin),stdinKind:`bytes`});if(l+=n.stdout,u+=n.stderr,n.exitCode!==0)return u+=`${e}: script '${a.event}' exited with code ${n.exitCode}\n`,{stdout:l,stderr:u,exitCode:n.exitCode}}return{stdout:l,stderr:u,exitCode:0}}async function tO(e,t,n,r){let i;try{i=await zD(r.fs,n.cwd)}catch(t){return XD(e,t instanceof Error?t.message:String(t))}if(!i)return XD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=YD(t);if(o===void 0)return{stdout:qD(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await QD(e,i,o,r.fs)??void 0;if(c===void 0){if(a.ifPresent)return{stdout:``,stderr:``,exitCode:0};let t=Object.keys(i.scripts);return XD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return eO(e,i,ZD(i,o,c,s),a,n,r)}const nO=()=>import(`./installer-CbjJjnwg.js`),rO=new Set([`install`,`i`,`add`]),iO=new Set([`uninstall`,`remove`,`rm`,`un`]),aO=new Set([`list`,`ls`]),oO=new Set([`-g`,`--global`,`--location=global`]),sO=[`-g`,`--global`,`-D`,`--save-dev`];function cO(e){return`${e} - install packages from the npm registry into node_modules
|
|
1332
1332
|
and run package.json scripts; also install conda/emscripten-forge
|
|
1333
1333
|
packages via '${e} mamba'
|
|
1334
1334
|
|
|
@@ -1404,15 +1404,15 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
|
|
|
1404
1404
|
and deps are recorded in /shared/lib/package.json. Existing fields are
|
|
1405
1405
|
preserved. Idempotent: re-installing an already-satisfied package is a clean
|
|
1406
1406
|
no-op.
|
|
1407
|
-
`}function
|
|
1407
|
+
`}function lO(e){let t=C(e,{bool:sO,value:[`--location`]});if(`error`in t)return t;let n=t.values.get(`--location`);return n!==void 0&&n!==`global`?{error:`unknown flag: --location=${n}`}:{global:t.bools.has(`-g`)||t.bools.has(`--global`)||n===`global`,saveDev:t.bools.has(`-D`)||t.bools.has(`--save-dev`),specs:t.positionals}}function uO(e){let t=!1,n=[];for(let r of e){if(oO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function dO(e){return w(e)}function fO(e){return e instanceof Error?e.message:String(e)}async function pO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function mO(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(n)return dO(r)?{stdout:cO(e),stderr:``,exitCode:0}:gO(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-BRxsK-p_.js`);return n(e,r.slice(1),i,t)}if(dO(r))return{stdout:cO(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:cO(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return rO.has(a)?gO(e,o,i,t):iO.has(a)?vO(e,o,i,t):aO.has(a)?yO(e,o,i,t):a===`root`?bO(e,o,i,t):TD.has(a)?tO(e,o,i,{fs:t.fs}):ED.has(a)?tO(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function hO(e,t,n){let{installFromManifest:r,ManifestNotFoundError:i}=await nO(),a;try{a=await r({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof i?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${fO(t)}\n`,exitCode:1}}if(a.empty&&a.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),s=[...(a.notes??[]).map(t=>`${e}: ${t}`),...a.errors.map(t=>`${e}: failed to install ${t.spec}: ${fO(t.error)}`)];return{stdout:o.length>0?`${o.join(`
|
|
1408
1408
|
`)}\n`:``,stderr:s.length>0?`${s.join(`
|
|
1409
|
-
`)}\n`:``,exitCode:a.errors.length===0?0:1}}async function
|
|
1409
|
+
`)}\n`:``,exitCode:a.errors.length===0?0:1}}async function gO(e,t,n,r){let i=lO(t);if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let{global:a,saveDev:o,specs:s}=i;if(a&&s.length===0)return{stdout:``,stderr:`${e}: global install requires at least one package name\n`,exitCode:1};if(s.length===0)return hO(e,n,r);let{installPackages:c}=await nO(),l;try{l=await c(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${fO(t)}\n`,exitCode:1}}let u=l.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),d=[...(l.notes??[]).map(t=>`${e}: ${t}`),...l.errors.map(t=>`${e}: failed to install ${t.spec}: ${fO(t.error)}`)];return a&&l.results.length>0&&await pO(r),{stdout:u.length>0?`${u.join(`
|
|
1410
1410
|
`)}\n`:``,stderr:d.length>0?`${d.join(`
|
|
1411
|
-
`)}\n`:``,exitCode:l.errors.length===0?0:1}}function
|
|
1412
|
-
`)}\n`}async function
|
|
1411
|
+
`)}\n`:``,exitCode:l.errors.length===0?0:1}}function _O(e,t){if(t.length===0)return`${e}\n└── (empty)\n`;let n=[`${e}`];for(let e=0;e<t.length;e++){let r=e===t.length-1?`└──`:`├──`;n.push(`${r} ${t[e].name}@${t[e].version}`)}return`${n.join(`
|
|
1412
|
+
`)}\n`}async function vO(e,t,n,r){let{global:i,specs:a}=uO(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let{uninstallPackages:o}=await nO(),s;try{s=await o(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${fO(t)}\n`,exitCode:1}}let c=s.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),l=s.results.filter(e=>!e.removed).map(e=>e.name),u=s.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${fO(t.error)}`);l.length>0&&u.push(`${e}: ${l.join(`, `)} not installed${i?` globally`:``}`);let d=s.errors.length>0;return i&&await pO(r),{stdout:c.length>0?`${c.join(`
|
|
1413
1413
|
`)}\n`:``,stderr:u.length>0?`${u.join(`
|
|
1414
|
-
`)}\n`:``,exitCode:+!!d}}async function
|
|
1415
|
-
`)}\n`}const
|
|
1414
|
+
`)}\n`:``,exitCode:+!!d}}async function yO(e,t,n,r){let{global:i}=uO(t);try{let{listGlobalPackages:e,listLocalPackages:t}=await nO(),a=i?await e(r.fs):await t(r.fs,n.cwd);return{stdout:_O(i?rr:n.cwd,a),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${fO(t)}\n`,exitCode:1}}}async function bO(e,t,n,r){let{global:i}=uO(t);return{stdout:`${i?ir:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}const xO=`0.5.462`,SO=`v86 is not installed in node_modules: run \`${N} v86@${xO}\` (no network fallback)`;let CO=null;async function wO(e={}){return CO||=OO(e.ipk).catch(e=>{throw CO=null,e}),CO}const TO=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function EO(e,t){for(let{js:n,wasm:r}of TO){let i=`${e}/${n}`,a=`${e}/${r}`;if(await t.exists(i)&&await t.exists(a))return{jsPath:i,wasmPath:a}}return null}async function DO(e){let t;try{t=await dr(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await EO(Fe(t.path).dir,e.reader);if(!n)return null;try{let r=await e.reader.readFile(t.path),i=String(JSON.parse(r).version??`0.5.462`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function OO(e){if(Cr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(SO);let t=await DO(e);if(!t)throw Error(SO);let n=URL.createObjectURL(new Blob([t.jsSource],{type:`text/javascript`})),r;try{r=await import(n)}finally{URL.revokeObjectURL(n)}let i=r.V86??r.default;if(typeof i!=`function`)throw Error(`v86: installed package did not export a V86 constructor`);return{V86:i,wasmModule:await fi(t.wasmBytes),version:t.version}}function kO(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const AO={command:`biome`,example:`biome check foo.js`,bootstrap:`${N} ${w_}`},jO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},MO={command:`puppeteer`,example:`puppeteer open https://example.com`},NO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${N} @imagemagick/magick-wasm@${Xi}`},PO={...NO,command:`magick`,example:`magick input.png output.jpg`},FO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},IO={"@biomejs/biome":AO,biome:AO,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${N} esbuild-wasm@${di}`},playwright:jO,"@playwright/test":jO,"playwright-core":jO,puppeteer:MO,"puppeteer-core":MO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:wr},"pdf-poppler":FO,"pdf-to-img":FO,pdf2pic:FO,"pdf-img-convert":FO,poppler:FO,"poppler-utils":FO,imagemagick:NO,"imagemagick-cli":NO,"imagemagick-convert":NO,"magick-cli":PO,"@imagemagick/magick-wasm":PO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${aa}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${aa}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${aa}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${aa}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${N} v86@${xO}`}};function LO(e){return Object.hasOwn(IO,e)?IO[e]:void 0}function RO(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function zO(e,t,n,r){let i=n.length?[r.command,...n].map(RO).join(` `):r.example,a=[`${e}: SLICC has a built-in \`${r.command}\` for npm package \`${t}\`.`,` try: ${i}`];return r.bootstrap&&a.push(` first run: ${r.bootstrap}`),a.push(` install anyway: ${[e,`--force`,t,...n].map(RO).join(` `)}`),`${a.join(`
|
|
1415
|
+
`)}\n`}const BO=/require\(\s*["']([^"']+)["']\s*\)/;function VO(e){return`${e} - run an installed package's executable bin
|
|
1416
1416
|
|
|
1417
1417
|
Usage:
|
|
1418
1418
|
${e} [--force] [--global] <pkg-or-bin> [args...]
|
|
@@ -1425,12 +1425,12 @@ Options:
|
|
|
1425
1425
|
--force Install a package even when a SLICC built-in shadows it
|
|
1426
1426
|
--global Resolve only from the shared global prefix (/shared/lib/node_modules)
|
|
1427
1427
|
-h, --help Show this help message
|
|
1428
|
-
`}async function
|
|
1429
|
-
`)}\n`:``}}catch(n){return{error
|
|
1430
|
-
`,exitCode:1};let r=
|
|
1431
|
-
`)}\n`:``,exitCode:+!i}})}function
|
|
1432
|
-
`,exitCode:2};let i=
|
|
1433
|
-
`,exitCode:2}:
|
|
1428
|
+
`}async function HO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function UO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function WO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*GO(e,t=!1){if(t){yield ir;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Fe(n).dir;yield ir}async function KO(e,t,n,r=!1){for(let i of GO(t,r)){let t=x(i,`.bin`,n);if(!await UO(e,t))continue;let r=await HO(e,t),a=BO.exec(r),o=Fe(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function qO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function JO(e,t){if(typeof e==`string`)return{binName:qO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,qO(t)];for(let t of n){let n=Object.getOwnPropertyDescriptor(e,t)?.value;if(typeof n==`string`)return{binName:t,binPath:n}}let r=Object.entries(e).filter(e=>typeof e[1]==`string`);if(r.length===1){let[e,t]=r[0];return{binName:e,binPath:t}}return null}async function YO(e,t,n,r=!1){for(let i of GO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await UO(e,r))continue;let a;try{a=JSON.parse(await HO(e,r))}catch{return null}let o=JO(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:x(t,s),argvName:x(i,`.bin`,o.binName)}}return null}async function XO(e,t,n,r=!1){return await KO(e,t,n,r)??await YO(e,t,n,r)}async function ZO(e,t,n){for(let r of GO(t))if(await UO(e,x(r,n,`package.json`)))return!0;return!1}function QO(e){return e instanceof Error?e.message:String(e)}function $O(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function ek(e,t,n,r){try{let{installPackages:i}=await import(`./installer-CbjJjnwg.js`),a=await i([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(a.errors.length>0)return{error:$O(e,`failed to install '${t}': ${QO(a.errors[0].error)}`)};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:o.length>0?`${o.join(`
|
|
1429
|
+
`)}\n`:``}}catch(n){return{error:$O(e,`failed to install '${t}': ${QO(n)}`)}}}async function tk(e,t,n,r){return await UO(r,n)?null:await WO(r,n)?$O(e,`bin target '${n}' is a directory, not a file`):$O(e,`bin file '${n}' for '${t}' does not exist`)}async function nk(e,t,n,r,i,a){if(await ZO(a.fs,i.cwd,t))return{error:$O(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:LO(t);if(o)return{error:{stdout:``,stderr:zO(e,t,n,o),exitCode:1}};let s=await ek(e,t,i,a);if(`error`in s)return s;let c=await XO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:$O(e,`package '${t}' was installed but does not expose an executable bin`)}}function rk(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:VO(e),stderr:``,exitCode:+(n.length===0)};let i=n[0]===`--force`,a=i?n.slice(1):n,o=a[0]===`--global`;o&&(a=a.slice(1));let s=a;if(s.length===0)return{stdout:VO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await XO(t.fs,r.cwd,c,o)}catch(t){return $O(e,QO(t))}let d=``;if(!u){if(o)return $O(e,`no global bin '${c}' found in ${ir}`);let n=await nk(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await tk(e,c,u.binFilePath,t.fs);if(f)return f;let p=si(await HO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await ai(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function ik(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-BSPrcB21.js`);return r(t,n,e)})}const ak=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function ok(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return fk();let n=e.processManager??sk();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
|
|
1430
|
+
`,exitCode:1};let r=ck(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=lk(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
|
|
1431
|
+
`)}\n`:``,exitCode:+!i}})}function sk(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function ck(e){let t=`SIGTERM`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-s`||i===`--signal`){let n=e[++r];if(!n)return{ok:!1,stderr:`kill: -s requires a signal name
|
|
1432
|
+
`,exitCode:2};let i=uk(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=dk(i);if(e instanceof Error)return{ok:!1,stderr:`kill: ${e.message}\n`,exitCode:2};t=e;continue}let a=Number.parseInt(i,10);if(!Number.isFinite(a)||String(a)!==i)return{ok:!1,stderr:`kill: invalid pid '${i}'\n`,exitCode:2};n.push(a)}return n.length===0?{ok:!1,stderr:`kill: no pids supplied
|
|
1433
|
+
`,exitCode:2}:ak.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function lk(e,t,n){let r=!0,i=[];for(let a of t)e.signal(a,n)||(r=!1,i.push(e.get(a)?`kill: (${a}) - process already terminated`:`kill: (${a}) - no such process`));return{allDelivered:r,errors:i}}function uk(e){let t=e.toUpperCase(),n=t.startsWith(`SIG`)?t:`SIG${t}`;return n===`SIGINT`||n===`SIGTERM`||n===`SIGKILL`||n===`SIGSTOP`||n===`SIGCONT`?n:Error(`unknown signal '${e}'`)}function dk(e){return e===`-9`?`SIGKILL`:uk(e.slice(1))}function fk(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
|
|
1434
1434
|
|
|
1435
1435
|
Send a signal to one or more processes tracked by the kernel.
|
|
1436
1436
|
|
|
@@ -1452,7 +1452,7 @@ Examples:
|
|
|
1452
1452
|
kill -INT 1024 1025 SIGINT both
|
|
1453
1453
|
kill -STOP 1024 pause; \`kill -CONT 1024\` resumes
|
|
1454
1454
|
kill -s SIGKILL 1024 explicit signal name
|
|
1455
|
-
`,stderr:``,exitCode:0}}const
|
|
1455
|
+
`,stderr:``,exitCode:0}}const pk=[`top`,`left`,`middle`,`right`,`bottom`],mk=`usage: layout <verb> [args]
|
|
1456
1456
|
|
|
1457
1457
|
list List the built-in presets
|
|
1458
1458
|
set <preset> Switch to a built-in preset
|
|
@@ -1472,9 +1472,9 @@ Examples:
|
|
|
1472
1472
|
docs Describe the layout surfaces
|
|
1473
1473
|
panels List the registered panel ids
|
|
1474
1474
|
|
|
1475
|
-
Zones: ${
|
|
1476
|
-
`,
|
|
1477
|
-
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const
|
|
1475
|
+
Zones: ${pk.join(`, `)}
|
|
1476
|
+
`,hk=new Set([`files`,`term`,`memory`,`monitor`]),gk=`sprinkle:`;function _k(e){return e===`chat`||hk.has(e)||e.startsWith(gk)?e:`${gk}${e}`}function vk(e){let t=/^(\d+(?:\.\d+)?)%$/.exec(e);if(t)return{percent:Number.parseFloat(t[1])};let n=/^(\d+(?:\.\d+)?)(?:px)?$/.exec(e);return n?{px:Number.parseFloat(n[1])}:null}const yk=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function bk(e){let t=e[0],n=t?Ss(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function xk(e){let t=e[0];return pk.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${pk.join(`|`)}>`}}function Sk(e){let[t,n]=e;return!t||!pk.includes(n)?{error:`usage: layout open <surfaceId> <${pk.join(`|`)}>`}:{kind:`open`,surfaceId:_k(t),zone:n}}function Ck(e){let t=e[0];return t?{kind:`close`,surfaceId:_k(t)}:{error:`usage: layout close <surfaceId>`}}function wk(e){let[t,n]=e;return!t||!pk.includes(n)?{error:`usage: layout move <surfaceId> <${pk.join(`|`)}>`}:{kind:`move`,surfaceId:_k(t),zone:n}}function Tk(e,t,n){if(t!==`--width`&&t!==`--height`)return{error:`layout size: unknown flag "${t}"`};if(!n)return{error:`layout size: missing value for ${t}`};let r=vk(n);return r?(t===`--width`?r.percent==null?e.widthPx=r.px:e.widthPercent=r.percent:r.percent==null?e.heightPx=r.px:e.heightPercent=r.percent,null):{error:`layout size: invalid size "${n}" (want <number>px or <number>%)`}}function Ek(e){let t=e[0];if(!t)return{error:yk};let n={};for(let t=1;t<e.length;t+=2){let r=Tk(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:yk}:{kind:`size`,surfaceId:_k(t),size:n}}function Dk(e){let t=e[0];if(!t||t.startsWith(`--`))return{error:`usage: layout save <name> [--protected]`};if(!/^[\w.-]+$/.test(t))return{error:`invalid layout name "${t}" (use letters, digits, . _ -)`};let n=e.slice(1),r=n.find(e=>e!==`--protected`);return r?{error:`layout save: unknown flag "${r}"`}:{kind:`save`,name:t,protected:n.includes(`--protected`)}}function Ok(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function kk(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:_k(n)}:{kind:`hide`,panelId:_k(n)}:{error:`usage: layout ${e} <panelId>`}}function Ak(){let e=Ss(vs);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function jk(e){let[t,...n]=e;switch(t){case`set`:return bk(n);case`chat`:return xk(n);case`open`:return Sk(n);case`close`:return Ck(n);case`move`:return wk(n);case`size`:return Ek(n);case`reset`:return{kind:`reset`};case`edit`:return Ak();case`load`:return Ok(`load`,n);case`save`:return Dk(n);case`delete`:return Ok(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return kk(`show`,n);case`hide`:return kk(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function Mk(){return S(`layout`,async e=>{if(w(e))return{stdout:e[0]?.startsWith(`-`)?mk:ot(`layout`,e[0],mk),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(xs).join(`, `)}\ndefault: ${vs}\n`,stderr:``,exitCode:0};let t=jk(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=y();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
|
|
1477
|
+
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const Nk=oa.id;function Pk(){return`local-llm — inspect and configure the Local LLM provider
|
|
1478
1478
|
|
|
1479
1479
|
Usage:
|
|
1480
1480
|
local-llm Show current config + verify connection
|
|
@@ -1493,21 +1493,21 @@ Common base URLs:
|
|
|
1493
1493
|
llama.cpp http://localhost:8080/v1
|
|
1494
1494
|
vLLM http://localhost:8000/v1
|
|
1495
1495
|
Jan http://localhost:1337/v1
|
|
1496
|
-
`}function
|
|
1496
|
+
`}function Fk(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function Ik(e){return e.map(e=>` • ${e}`)}function Lk(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${Fk(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
|
|
1497
1497
|
`)+`
|
|
1498
|
-
`,exitCode:1}}function
|
|
1498
|
+
`,exitCode:1}}function Rk(e,t){return{stdout:[`✓ ${e}`,` runtime: ${Fk(t.runtime,!0)}`,` models: ${t.models.length}`,...Ik(t.models)].join(`
|
|
1499
1499
|
`)+`
|
|
1500
|
-
`,stderr:``,exitCode:0}}function
|
|
1500
|
+
`,stderr:``,exitCode:0}}function zk(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${Fk(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...Ik(t.models)].join(`
|
|
1501
1501
|
`)+`
|
|
1502
|
-
`,stderr:``,exitCode:0}}function
|
|
1503
|
-
`,exitCode:1};let c=await a(s,t(
|
|
1502
|
+
`,stderr:``,exitCode:0}}function Bk(){return S(Nk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:Pk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-D7DGAxNM.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-DAdQyx68.js`).then(e=>e.n),o=e[0]??`status`;if(o!==`status`&&o!==`discover`)return{stdout:``,stderr:`Unknown subcommand: ${o}. See \`local-llm --help\`.\n`,exitCode:2};let s=r(Nk);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
|
|
1503
|
+
`,exitCode:1};let c=await a(s,t(Nk)??void 0);if(!c.ok)return Lk(s,c);if(o===`discover`){let e=n(Nk)??``;return i(Nk,e,s,c.models.join(`, `)),zk(s,c)}return Rk(s,c)})}function Vk(){return{stdout:`usage: man <topic>
|
|
1504
1504
|
|
|
1505
1505
|
Fetches documentation for a given topic from sliccy.com.
|
|
1506
|
-
`,stderr:``,exitCode:0}}function
|
|
1506
|
+
`,stderr:``,exitCode:0}}function Hk(e){return e.replace(/<[^>]*>/g,``).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).replace(/&/g,`&`).trimEnd()}function Uk(){let e=g();return S(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return Vk();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
|
|
1507
1507
|
For example, try 'man commands'.
|
|
1508
|
-
`,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:
|
|
1509
|
-
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function
|
|
1510
|
-
`)}\n`}function
|
|
1508
|
+
`,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:Hk(new TextDecoder(`utf-8`).decode(t.body))+`
|
|
1509
|
+
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function Wk(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function Gk(e){return e.attribution.length===0?`(shared)`:e.attribution.map(e=>{let t=e.container?.src??e.container?.id??e.url??`?`;return e.scope?`${e.scope} ${t}`:t}).join(`, `)}function Kk(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function qk(e){if(e[0]===`--help`||e[0]===`-h`||e[0]===`help`)return{help:!0};let t=!1;for(let n of e){if(n!==`--json`)return{error:`unknown option '${n}' — see \`meminfo --help\``};t=!0}return{help:!1,json:t}}function Jk(e){let t=[`total: ${Sy(e.bytes)}`],n=[...e.breakdown].filter(e=>e.bytes>0).sort((e,t)=>t.bytes-e.bytes);if(n.length>0){t.push(``,`BYTES TYPES ATTRIBUTION`);for(let e of n)t.push(`${Sy(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${Gk(e)}`)}return`${t.join(`
|
|
1510
|
+
`)}\n`}function Yk(e={}){return S(`meminfo`,async t=>{let n=qk(t);if(`error`in n)return Wk(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
|
|
1511
1511
|
|
|
1512
1512
|
Usage:
|
|
1513
1513
|
meminfo Human-readable breakdown (bytes, scope, types, url)
|
|
@@ -1518,8 +1518,8 @@ Notes:
|
|
|
1518
1518
|
Document-Isolation-Policy). Embedded floats cannot be isolated and
|
|
1519
1519
|
report why instead.
|
|
1520
1520
|
- The browser randomizes measurement timing — expect a short delay.
|
|
1521
|
-
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??
|
|
1522
|
-
`)?e:`${e}\n`,exitCode:1}}async function
|
|
1521
|
+
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??Kk();if(!r&&!e.measure)return Wk(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return Wk(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return Wk(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:Jk(a),stderr:``,exitCode:0}})}function Xk(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-DKbvbERf.js`);return n(t,e)})}function Zk(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const Qk=`/.cache/artificial-analysis.json`,$k=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],eA=[`--provider`];function tA(e){return{stdout:``,stderr:e.endsWith(`
|
|
1522
|
+
`)?e:`${e}\n`,exitCode:1}}async function nA(e){try{let t=await e.readFile(Qk),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function rA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function iA(e){return e.map(e=>{let t=e;return{slug:t.slug??``,name:t.name??``,creator_slug:t.model_creator?.slug??``,intelligence_index:t.evaluations?.artificial_analysis_intelligence_index??null,coding_index:t.evaluations?.artificial_analysis_coding_index??null,speed_tps:t.median_output_tokens_per_second??null}})}async function aA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(Qk,JSON.stringify(n))}catch{}}async function oA(e,t=!1){if(e&&!t){let t=await nA(e);if(t)return t}let n={Accept:`application/json`},r=rA();r&&(n[`x-api-key`]=r);let i=g(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=iA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await aA(e,c),c}function sA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function cA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=sA(e),a=t.find(e=>sA(e.slug)===i);if(a)return a;let o=t.filter(e=>n.includes(e.slug)||e.slug.includes(n));if(o.length!==0)return o.sort((e,t)=>t.slug.length-e.slug.length),o[0]}function lA(){return`models - list available LLM models
|
|
1523
1523
|
|
|
1524
1524
|
Usage: models [options]
|
|
1525
1525
|
|
|
@@ -1531,14 +1531,14 @@ Options:
|
|
|
1531
1531
|
--refresh Force re-fetch benchmark data from Artificial Analysis
|
|
1532
1532
|
--no-benchmarks Skip benchmark data enrichment (faster, works offline)
|
|
1533
1533
|
-h, --help Show this help message
|
|
1534
|
-
`}function
|
|
1534
|
+
`}function uA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function dA(e){return`$${e.toFixed(2)}`}const fA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function pA(e){let t=`${e.id} ${e.name??``}`;return!fA.test(t)}function mA(e){let t=e.match(/^(claude-(?:opus|sonnet|haiku))/);if(t)return t[1];let n=e.match(/^(gpt-\d+)(?:\.\d+)?(-[a-z][-a-z]*)?$/);if(n)return n[1]+(n[2]??``);let r=e.match(/^gemini-[\d.]+-(.+)$/);if(r)return`gemini-${r[1]}`;let i=e.match(/^gemini-(\d+)-(.+)$/);if(i)return`gemini-${i[2]}`;let a=e.match(/^grok-[\d.]+-([\w-]+)$/);if(a)return`grok-${a[1]}`;if(e.match(/^(grok)-[\d.]+$/))return`grok`;let o=e.match(/^(o\d+(?:-[a-z]+)?)(?:-\d.*)?$/);if(o)return o[1]}function hA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),mA(t)??t.replace(/-[\d.]+$/,``)}function gA(e){let t=new Map;for(let n of e){let e=hA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function _A(e,t,n,r,i){let a=i?cA(e.id,i):void 0,o={id:e.id,name:e.name,provider:t,cost:e.cost??{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:e.contextWindow??0,maxTokens:e.maxTokens??0,reasoning:!!e.reasoning,input:e.input??[`text`],selected:e.id===n&&t===r};return a?.intelligence_index!=null&&(o.intelligence=a.intelligence_index),a?.coding_index!=null&&(o.codingScore=a.coding_index),a?.speed_tps!=null&&(o.speed=a.speed_tps),o}function vA(e,t,n,r){let i=[];i.push(`Models for "${e}" (${t}):\n`);for(let e of n){let t=e.selected?` ► `:` `,n=e.id.padEnd(30),r=`${dA(e.cost.input)} / ${dA(e.cost.output)}`,a=`${uA(e.contextWindow)} ctx`,o=e.intelligence==null?``:`IQ:${e.intelligence}`,s=e.speed==null?``:`${Math.round(e.speed)} t/s`,c=e.reasoning?`reasoning`:``,l=o||s?`${o.padEnd(6)} ${s.padEnd(8)}`:``;i.push(`${t}${n} ${r.padEnd(16)} ${a.padEnd(10)} ${l} ${c}`)}return i.push(`\n ${n.length} model${n.length===1?``:`s`} available.`),r&&i.push(` Intelligence data: artificialanalysis.ai`),i.join(`
|
|
1535
1535
|
`)+`
|
|
1536
|
-
`}function
|
|
1537
|
-
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await
|
|
1536
|
+
`}function yA(e){let t=C(e,{bool:$k,value:eA});return`error`in t?t:{jsonMode:t.bools.has(`--json`),allMode:t.bools.has(`--all`),allVersions:t.bools.has(`--all-versions`),forceRefresh:t.bools.has(`--refresh`),noBenchmarks:t.bools.has(`--no-benchmarks`),explicitProvider:t.values.get(`--provider`)}}function bA(e,t,n){if(t.explicitProvider){let n=e.getAvailableProviders();return n.includes(t.explicitProvider)?[t.explicitProvider]:{error:`Unknown provider: ${t.explicitProvider}. Available: ${n.join(`, `)}\n`}}return t.allMode?[...new Set(e.getAccounts().map(e=>e.providerId))]:[n]}function xA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(pA);if(o.length===0)return[];let s=o.map(e=>_A(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=gA(s)),s}function SA(e,t,n,r){let i=`${e}:${t}`,a=`${n}:${r}`;return i===a?`Currently using: ${i}\n`:`Currently using: ${i} (selected ${a} — resolved to a different model)\n`}async function CA(e,t){if(w(e,{valueFlags:eA}))return{stdout:lA(),stderr:``,exitCode:0};let n=yA(e);if(`error`in n)return tA(`models: ${n.error}`);let r=await import(`./account-store-D7DGAxNM.js`).then(e=>e.t);if(r.getAccounts().length===0)return tA(`No provider accounts configured. Run the provider settings to add one.
|
|
1537
|
+
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await oA(t,n.forceRefresh);e.length>0&&(l=e)}let u=bA(r,n,s);if(`error`in u)return tA(u.error);let d=[],f=[];for(let e of u){let t=xA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return tA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(vA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
|
|
1538
1538
|
`,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
|
|
1539
|
-
`),f.push(
|
|
1540
|
-
`),stderr:``,exitCode:0})}function
|
|
1541
|
-
`,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:
|
|
1539
|
+
`),f.push(SA(o,a,s,c)),{stdout:f.join(`
|
|
1540
|
+
`),stderr:``,exitCode:0})}function wA(e){return S(`models`,async t=>CA(t,e))}const TA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function EA(e){return e===`-e`||e===`--eval`||TA.has(e)||!e.startsWith(`-`)}function DA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function OA(e,t,n){let r=e.startsWith(`--input-type=`),i=r?e.slice(13):t,a=r?n+1:n+2;return i===void 0?{nextIndex:n+1,error:{stdout:``,stderr:`node: option --input-type requires an argument
|
|
1541
|
+
`,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:DA(i)}:{inputType:i,nextIndex:a}}function kA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(EA(o))break;if(o===`-h`||o===`--help`){t=!0,a+=1;continue}if(o===`-v`||o===`--version`){n=!0,a+=1;continue}if(o===`-c`||o===`--check`){r=!0,a+=1;continue}if(o===`--input-type`||o.startsWith(`--input-type=`)){let s=OA(o,e[a+1],a);if(s.error)return{help:t,version:n,check:r,inputType:i,sourceIndex:s.nextIndex,error:s.error};i=s.inputType,a=s.nextIndex;continue}return{help:t,version:n,check:r,inputType:i,sourceIndex:a,error:{stdout:``,stderr:`node: unsupported option '${o}'\n`,exitCode:9}}}return{help:t,version:n,check:r,inputType:i,sourceIndex:a}}function AA(){return{stdout:`usage: node [options] [script.js] [args...]
|
|
1542
1542
|
node [options] -e <code> [args...]
|
|
1543
1543
|
|
|
1544
1544
|
Options:
|
|
@@ -1547,20 +1547,20 @@ Options:
|
|
|
1547
1547
|
--input-type=TYPE module or commonjs (stdin / -e / .js)
|
|
1548
1548
|
-h, --help print this help
|
|
1549
1549
|
-v, --version print Node shim version
|
|
1550
|
-
`,stderr:``,exitCode:0}}function
|
|
1550
|
+
`,stderr:``,exitCode:0}}function jA(){return{stdout:`${xr}\n`,stderr:``,exitCode:0}}function MA(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
|
|
1551
1551
|
`,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
|
|
1552
|
-
`,exitCode:9}}}function
|
|
1553
|
-
`,exitCode:9}};if(e.length>0&&
|
|
1554
|
-
`,exitCode:9}}}function
|
|
1555
|
-
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=
|
|
1552
|
+
`,exitCode:9}}}function NA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function PA(e){return e instanceof Error?e.stack??e.message:String(e)}async function FA(e,t,n){if(!(pr(e)||Or(e)||t.endsWith(`.mjs`)))return e;try{return(await(await ui()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(PA(r)))throw r;return li()({source:e,filename:t,fromDir:NA(t,n)})}}async function IA(e,t,n){let r=e;try{r=await FA(e,t,n)}catch(e){return{stdout:``,stderr:`${PA(e)}\n`,exitCode:1}}try{let e=Object.getPrototypeOf(async function(){}).constructor;return new e(r),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${PA(e)}\n`,exitCode:1}}}async function LA(e,t){if(e.length>0&&(e[0]===`-e`||e[0]===`--eval`))return e[1]?{kind:`ok`,code:e[1],filename:`[eval]`,argv:[`node`,...e.slice(2)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: option requires an argument -- eval
|
|
1553
|
+
`,exitCode:9}};if(e.length>0&&TA.has(e[0]))return{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`,e[0],...e.slice(1)],innerCtx:{...t,stdin:``}};if(e.length>0&&!e[0].startsWith(`-`)){let n=e[0],r=t.fs.resolvePath(t.cwd,n);return await t.fs.exists(r)?{kind:`ok`,code:await t.fs.readFile(r),filename:r,argv:[`node`,r,...e.slice(1)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: cannot find module '${n}'\n`,exitCode:1}}}return P(t.stdin).trim().length>0?{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`],innerCtx:{...t,stdin:``}}:e.length>0?{kind:`result`,result:{stdout:``,stderr:`node: unsupported option '${e[0]}'\n`,exitCode:9}}:{kind:`result`,result:{stdout:``,stderr:`node: REPL mode is not supported in this environment; use node -e "code"
|
|
1554
|
+
`,exitCode:9}}}function RA(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=kA(t);if(r.error)return r.error;if(r.help)return AA();if(r.version)return jA();let i=await LA(t.slice(r.sourceIndex),n);if(i.kind===`result`)return r.check&&i.result.exitCode===9&&t.slice(r.sourceIndex).length===0?{stdout:``,stderr:`node: -c/--check requires a filename or -e CODE
|
|
1555
|
+
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=MA(o,r.inputType);if(l)return l;let u=si(a);return r.check?IA(u,o,n.cwd):ai(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const zA=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function BA(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}const VA=[],HA=[`--yes`];function UA(){return S(`nuke`,async e=>{if(w(e,{valueFlags:VA}))return{stdout:`Usage: nuke <launch-code>
|
|
1556
1556
|
|
|
1557
1557
|
Completely reset the environment by deleting all local data and reloading.
|
|
1558
1558
|
Destroys the file system, chat history, and scoops database.
|
|
1559
1559
|
Requires the secret launch code to proceed.
|
|
1560
|
-
`,stderr:``,exitCode:0};let t=C(e,{value:
|
|
1560
|
+
`,stderr:``,exitCode:0};let t=C(e,{value:VA,bool:HA});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await BA(),WA(zA)})(),{stdout:`Nuking everything…
|
|
1561
1561
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
|
|
1562
1562
|
Run nuke again with the secret launch code to proceed.
|
|
1563
|
-
`,exitCode:1}})}function
|
|
1563
|
+
`,exitCode:1}})}function WA(e=[]){let t=[...e];try{if(typeof BroadcastChannel==`function`){let e=new BroadcastChannel(`slicc-nuke-control`);e.postMessage({type:`nuke-reload`,keysToRemove:t}),setTimeout(()=>e.close(),100)}}catch{}for(let e of t)try{globalThis.localStorage?.removeItem(e)}catch{}try{globalThis.location?.reload?.()}catch{}}function GA(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
|
|
1564
1564
|
|
|
1565
1565
|
Usage:
|
|
1566
1566
|
oauth-domain list List extra domains for every provider
|
|
@@ -1585,13 +1585,13 @@ Examples:
|
|
|
1585
1585
|
oauth-domain add adobe '*.da.live'
|
|
1586
1586
|
oauth-domain list adobe
|
|
1587
1587
|
oauth-domain remove adobe admin.da.live
|
|
1588
|
-
`}function
|
|
1588
|
+
`}function KA(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function qA(e,t){if(t){let n=e.getExtraOAuthDomains(t);return n.length===0?{stdout:`(no extra domains configured for ${t})\n`,stderr:``,exitCode:0}:{stdout:`${n.join(`
|
|
1589
1589
|
`)}\n`,stderr:``,exitCode:0}}let n=Object.entries(e.getAllExtraOAuthDomains()).filter(([,e])=>e.length>0);return n.length===0?{stdout:`(no extra OAuth domains configured)
|
|
1590
1590
|
`,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
|
|
1591
|
-
`)}\n`,stderr:``,exitCode:0}}async function
|
|
1592
|
-
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function
|
|
1593
|
-
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function
|
|
1594
|
-
`,exitCode:1}}async function
|
|
1591
|
+
`)}\n`,stderr:``,exitCode:0}}async function JA(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
|
|
1592
|
+
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function YA(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
|
|
1593
|
+
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function XA(e,t){return t?(await e.setExtraOAuthDomainsAsync(t,[]),{stdout:`Cleared extra domains for ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`oauth-domain clear: requires <providerId>
|
|
1594
|
+
`,exitCode:1}}async function ZA(e,t,n,r){switch(t){case`list`:return qA(e,n);case`add`:return JA(e,n,r);case`remove`:return YA(e,n,r);case`clear`:return XA(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${GA()}`,exitCode:1}}}function QA(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:GA(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return KA(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-D7DGAxNM.js`).then(e=>e.t);try{return await ZA(a,n,r,i)}catch(e){return KA(e instanceof Error?e.message:String(e))}})}function $A(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-Blqu2GaE.js`);return n(e,t)})}const ej=[`--download`,`-d`,`--view`,`-v`],tj=[`--size`],nj={low:256,medium:768,high:1536};function rj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
|
|
1595
1595
|
|
|
1596
1596
|
VFS paths are served in a new browser tab via the preview service worker.
|
|
1597
1597
|
URLs (http/https/etc.) are opened directly in a new tab.
|
|
@@ -1605,19 +1605,19 @@ Examples:
|
|
|
1605
1605
|
medium (768x768), high (1536x1536), or a custom WxH
|
|
1606
1606
|
box like 512x512. The image is fit inside the box
|
|
1607
1607
|
with aspect ratio preserved and is never upscaled.
|
|
1608
|
-
`,stderr:``,exitCode:0}}function
|
|
1608
|
+
`,stderr:``,exitCode:0}}function ij(e){if(e in nj){let t=nj[e];return{maxW:t,maxH:t}}let t=/^(\d+)x(\d+)$/.exec(e);if(t){let e=parseInt(t[1],10),n=parseInt(t[2],10);if(e>0&&n>0)return{maxW:e,maxH:n}}return null}function aj(e,t){if(t===`image/png`||t===`image/apng`){if(e.length<26)return!1;let t=e[25];return t===4||t===6}if(t===`image/webp`){if(e.length<16)return!1;let t=String.fromCharCode(e[12],e[13],e[14],e[15]);return t===`VP8L`?!0:t===`VP8X`?e.length<21?!1:!!(e[20]&16):!1}return!1}function oj(){return`open --view requires --size to bound the inlined image. Use one of:
|
|
1609
1609
|
--size low (256x256)
|
|
1610
1610
|
--size medium (768x768)
|
|
1611
1611
|
--size high (1536x1536)
|
|
1612
1612
|
--size WxH (custom box, e.g. 512x512)
|
|
1613
|
-
`}const
|
|
1614
|
-
`)}async function
|
|
1615
|
-
`);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return
|
|
1616
|
-
`);let i;try{i=await n.fs.stat(t)}catch{return G(`open: no such file: ${e}\n`)}if(!i.isFile)return G(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return G(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:fr(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=vr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),
|
|
1617
|
-
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await mr(t.fs,i?e:Sr(e)),o=Wr(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return
|
|
1618
|
-
`);if(gr(e))return
|
|
1613
|
+
`}const sj=new Set([`image/png`,`image/webp`]);function cj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function lj(e,t){let n=cj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function uj(e,t,n,r){let i=cj(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=aj(e,t)?sj.has(t)?t:`image/png`:`image/jpeg`,p=await u.convertToBlob(f===`image/jpeg`?{type:`image/jpeg`,quality:.85}:{type:f});return{bytes:new Uint8Array(await p.arrayBuffer()),mime:f,width:c,height:l,nativeWidth:i,nativeHeight:a}}finally{o.close?.()}}function dj(e){let t=C(e,{bool:ej,value:tj});if(`error`in t)return{error:`open: ${t.error}`};let n=t.values.get(`--size`);return n?.startsWith(`-`)&&n!==`-`?{error:`open: unknown flag: ${n}`}:{download:t.bools.has(`--download`)||t.bools.has(`-d`),view:t.bools.has(`--view`)||t.bools.has(`-v`),sizeSpec:n,targets:t.positionals}}function fj(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function pj(e){return e?` (targetId: ${e})`:``}function mj(e,t,n){return async r=>{if(e)return e.createPage(r);if(t){window.open(r,`_blank`,`noopener,noreferrer`);return}try{await n.call(`window-open`,{url:r,target:`_blank`,features:`noopener,noreferrer`})}catch(e){throw Error(`open: ${e instanceof Error?e.message:String(e)}`)}}}async function hj(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,e);if(n){let e=(a.split(`/`).pop()??``).replace(/\.shtml$/,``);try{return await n.open(e),fj(`opened sprinkle ${e} from ${a}`)}catch(e){return G(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await mr(t.fs,Sr(a)),n=Wr(a,e),r;try{r=await i(n)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return fj(`opened ${a} → ${n}${pj(r)}`)}return G(`open: sprinkle manager not initialized
|
|
1614
|
+
`)}async function gj(e,t,n){if(!t)return G(`open: browser APIs are unavailable in this environment
|
|
1615
|
+
`);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return fj(`opened ${e}${pj(r)}`)}async function _j(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return G(`open: no such file: ${e}\n`)}if(!a.isFile)return G(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return G(`open: failed to read: ${e}\n`)}let s=fr(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=ij(i),!l))return G(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await lj(c,s)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(c.byteLength/1024);return G(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+oj())}let u;try{u=await uj(c,s,l.maxW,l.maxH)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=t(u.bytes),f=Math.round(u.bytes.byteLength/1024);return fj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function vj(e,t,n,r){if(!r)return G(`open: --download requires the in-panel terminal (DOM-only)
|
|
1616
|
+
`);let i;try{i=await n.fs.stat(t)}catch{return G(`open: no such file: ${e}\n`)}if(!i.isFile)return G(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return G(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:fr(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=vr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),fj(`downloaded ${t}`)}async function yj(e,t,n,r){if(!n)return G(`open: browser APIs are unavailable in this environment
|
|
1617
|
+
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await mr(t.fs,i?e:Sr(e)),o=Wr(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return fj(`opened ${e} → ${o}${pj(s)}`)}async function bj(e,t,n,r){if(!gr(e)&&e.endsWith(`.shtml`)&&t.fs)return hj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
|
|
1618
|
+
`);if(gr(e))return gj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?_j(e,i,t,n.sizeSpec):n.download?vj(e,i,t,r.hasDom):yj(i,t,r.canOpenWindow,r.openExternal)}function xj(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:tj}))return rj();let r=dj(t);if(`error`in r)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{download:i,view:a,sizeSpec:o,targets:s}=r;if(s.length===0)return rj();let c=globalThis.__slicc_sprinkleManager,l=typeof window<`u`&&typeof document<`u`,u=l?null:y(),d={canOpenWindow:!!e||l||!!u,hasDom:l,sprinkleManager:c,openExternal:mj(e,l,u)},f=[];for(let e of s){let t=await bj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
|
|
1619
1619
|
`)+`
|
|
1620
|
-
`,stderr:``,exitCode:0}})}function
|
|
1620
|
+
`,stderr:``,exitCode:0}})}function Sj(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-BVj8rfi8.js`);return n(e,t)})}function Cj(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function wj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
|
|
1621
1621
|
|
|
1622
1622
|
Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
|
|
1623
1623
|
is zero-padded to the digit width of the last page (out-1.png for a 9-page
|
|
@@ -1644,8 +1644,8 @@ Examples:
|
|
|
1644
1644
|
pdftoppm -png -r 150 doc.pdf page
|
|
1645
1645
|
pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
|
|
1646
1646
|
pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
|
|
1647
|
-
`,stderr:``,exitCode:0}}function
|
|
1648
|
-
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function
|
|
1647
|
+
`,stderr:``,exitCode:0}}function Tj(e,t){if(e===void 0)throw Error(`missing argument for ${t}`);let n=Number(e);if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw Error(`invalid ${t} value: ${e}`);return n}function Ej(e){if(e===void 0)throw Error(`missing argument for -jpegopt`);for(let t of e.split(`,`)){let[e,n]=t.split(`=`);if(e?.trim()!==`quality`)continue;let r=Number(n);if(!Number.isFinite(r)||r<0||r>100)throw Error(`invalid -jpegopt quality: ${n}`);return r}throw Error(`unsupported -jpegopt: ${e}`)}function Dj(e){let t=`png`,n=150,r,i,a,o,s,c,l=!1,u=[];for(let d=0;d<e.length;d++){let f=e[d];switch(f){case`-png`:t=`png`;break;case`-jpeg`:t=`jpeg`;break;case`-jpegopt`:c=Ej(e[++d]),t=`jpeg`;break;case`-r`:n=Tj(e[++d],`-r`);break;case`-f`:r=Tj(e[++d],`-f`);break;case`-l`:i=Tj(e[++d],`-l`);break;case`-scale-to`:a=Tj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=Tj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=Tj(e[++d],`-scale-to-y`);break;case`-singlefile`:l=!0;break;default:if(f.startsWith(`-`))throw Error(`unsupported option ${f}`);u.push(f)}}if(u.length===0)throw Error(`expected an input PDF`);if(u.length>2)throw Error(`expected at most one input PDF and one output prefix`);if(r!==void 0&&i!==void 0&&r>i)throw Error(`invalid page range: ${r}-${i}`);return{inputPath:u[0],outputRoot:u[1],format:t,dpi:n,firstPage:r,lastPage:i,scaleTo:a,scaleToX:o,scaleToY:s,quality:c,singleFile:l}}function Oj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function kj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Aj(e){return e===`jpeg`?`jpg`:`png`}function jj(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:ea(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function Mj(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Qi(r))throw Error(`${t}: not a PDF file`);return r}function Nj(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return wj();let r;try{r=Dj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await Mj(n,r.inputPath),i=Aj(r.format),a=r.outputRoot??Oj(vr(r.inputPath)),o=[];return await Zi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...jj(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:kj(a,e.pageNumber,t.lastPage,i);await n.fs.writeFile(n.fs.resolvePath(n.cwd,s),e.bytes),o.push(s)}),o.length===0?{stdout:``,stderr:`${e}: no pages to render\n`,exitCode:1}:{stdout:`${o.join(`
|
|
1648
|
+
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Pj(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Fj(e){let t=e.filter(e=>e.teleportEligible===!0&&e.bootstrapId&&e.floatType);if(t.length===0)return null;let n=t.filter(e=>e.floatType===`standalone`),r=n.length>0?n:t;r.sort((e,t)=>(t.lastActivity??0)-(e.lastActivity??0));let i=r[0];return{runtimeId:i.runtimeId,bootstrapId:i.bootstrapId,floatType:i.floatType}}function Ij(){Mw(()=>()=>re()),jw(()=>()=>Fj(re()))}const Lj=`/workspace/.plugins/sources`;function Rj(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function zj(e,t){let n=C(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function Bj(){return`usage: plugin <command> [args]
|
|
1649
1649
|
|
|
1650
1650
|
Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
|
|
1651
1651
|
directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
|
|
@@ -1655,7 +1655,7 @@ Commands:
|
|
|
1655
1655
|
install <path|repo> Validate the plugin and register it. <repo> is a
|
|
1656
1656
|
GitHub reference (owner/repo, owner/repo@branch, or
|
|
1657
1657
|
https://github.com/owner/repo[/tree/branch[/dir]]),
|
|
1658
|
-
downloaded into ${
|
|
1658
|
+
downloaded into ${Lj}/.
|
|
1659
1659
|
Skills surface through the standard skills discovery;
|
|
1660
1660
|
streamable-http MCP servers are added to the MCP
|
|
1661
1661
|
store as "<plugin>:<server>".
|
|
@@ -1677,36 +1677,36 @@ Examples:
|
|
|
1677
1677
|
plugin list
|
|
1678
1678
|
plugin info my-plugin
|
|
1679
1679
|
plugin remove my-plugin
|
|
1680
|
-
`}function
|
|
1680
|
+
`}function Vj(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return Rj(Bj());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await Jj(i,a,e);case`list`:case`ls`:return await Qj(i,e);case`info`:return await $j(i,e);case`validate`:return await eM(i,a,e,na(n?.env));case`remove`:case`rm`:case`delete`:return await tM(i,e);default:return K(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return K(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function Hj(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-CKSBDyCr.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return t.create({dbName:n})}async function Uj(e,t,n){let r=nM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-HX3c8n0G.js`).then(e=>e.t),a=i(e);if(a){let e=`${a.owner}/${a.repo}${a.branch?`@${a.branch}`:``}${a.path?`/${a.path}`:``}`;return{kind:`github`,ref:{...a,display:e}}}return{kind:`error`,message:`${r} does not exist and "${e}" is not a GitHub reference (owner/repo[@branch] or https://github.com/owner/repo[/tree/branch[/dir]])`}}function Wj(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function Gj(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${Lj}/${t.map(Wj).join(`--`)}`}async function Kj(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-CUIsX5nN.js`).then(e=>e.i),s=await i(e.owner,e.repo,r,e.branch);if(s.status===`error`)return`failed to download ${e.display}: ${s.message}`;let c=a(s.files),l=e.path?e.path.replace(/^\/|\/$/g,``)+`/`:``;if(!c[`${l}plugin.json`])return`no plugin.json found at ${e.display} — not an Agent Plugins package`;try{await n.rm(t,{recursive:!0})}catch{}return await n.mkdir(t,{recursive:!0}),(await o(c,l,t,n,!1)).length===0?`no files found at ${e.display}`:null}async function qj(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function Jj(e,t,n){if(w(e))return Rj(`usage: plugin install <path|repo>
|
|
1681
1681
|
|
|
1682
1682
|
Loads the Agent Plugins package at <path>, or downloads it from a GitHub
|
|
1683
1683
|
reference (owner/repo, owner/repo@branch, or
|
|
1684
1684
|
https://github.com/owner/repo[/tree/branch[/dir]]) into
|
|
1685
|
-
${
|
|
1685
|
+
${Lj}/ first. Validates plugin.json (closed
|
|
1686
1686
|
schema, name constraints), discovers skills/*/SKILL.md, and validates
|
|
1687
1687
|
mcp.json. On success the plugin is recorded in
|
|
1688
1688
|
/workspace/.plugins/plugins.json — its skills then surface through the
|
|
1689
1689
|
standard skills discovery, and each supported streamable-http MCP server
|
|
1690
1690
|
is registered in the MCP store as "<plugin>:<server>".
|
|
1691
|
-
`);let r=
|
|
1691
|
+
`);let r=zj(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await Hj(n),a=await Uj(r.positionals[0],t,i);if(a.kind===`error`)return K(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return K(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=Gj(a.ref),s=a.ref.display;let e=await Kj(a.ref,o,i,n.fetch);if(e)return K(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-D4Fuki1u.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await qj(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${rM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-Mw1jky9b.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await qj(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await Zj(u,n),g=await Xj(d,m?.mcpServerNames,h.registered,n);return await p(d,{root:o,version:u.manifest.version,description:u.manifest.description,installedAt:new Date().toISOString(),mcpServerNames:h.registered,...s?{source:s}:{}},n.fs),Rj(Yj(u,h,g,s??o,l.diagnostics))}function Yj(e,t,n,r,i){let a=e.manifest.name,o=t.registered,s=e.mcp.servers.filter(e=>e.status!==`supported`),c=[`Installed agent plugin "${a}"${e.manifest.version?` v${e.manifest.version}`:``} from ${r}`,` skills: ${e.skills.length}${e.skills.length>0?` (${e.skills.map(e=>e.name).join(`, `)})`:``}`,` mcp: ${o.length} registered${o.length>0?` (${o.join(`, `)})`:``}${s.length>0?`, ${s.length} skipped`:``}${n>0?`, ${n} removed from previous install`:``}`];return t.conflicts.length>0&&c.push(` warning: not bridged — MCP server name(s) already in use and not owned by this plugin: ${t.conflicts.join(`, `)} (remove them with \`mcp remove\` first)`),i.length>0&&c.push(`Diagnostics:`,rM(i)),c.join(`
|
|
1692
1692
|
`)+`
|
|
1693
|
-
`}async function
|
|
1694
|
-
`);let n=
|
|
1693
|
+
`}async function Xj(e,t,n,r){let i=(t??[]).filter(e=>!n.includes(e));if(i.length===0)return 0;let{deleteServer:a,getServer:o}=await import(`./store-wiEGJ_43.js`).then(e=>e.r),s=0;for(let t of i)(await o(t,r.fs))?.pluginOrigin===e&&await a(t,r.fs)&&(s+=1);return s}async function Zj(e,t){let n=e.mcp.servers.filter(e=>e.status===`supported`);if(n.length===0)return{registered:[],conflicts:[]};let{getServer:r,setServer:i}=await import(`./store-wiEGJ_43.js`).then(e=>e.r),{McpClient:a}=await import(`./client-D5zdJCVT.js`),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function Qj(e,t){if(w(e))return Rj(`usage: plugin list
|
|
1694
|
+
`);let n=zj(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-Mw1jky9b.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return Rj("No agent plugins installed. Use `plugin install <path>`.\n");let o=[[`NAME`,`VERSION`,`ROOT`,`MCP`]];for(let e of a){let t=i[e];o.push([e,t.version??`-`,t.root,String(t.mcpServerNames?.length??0)])}let s=o[0].map((e,t)=>Math.max(...o.map(e=>e[t].length)));return Rj(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
|
|
1695
1695
|
`)+`
|
|
1696
|
-
`)}async function
|
|
1697
|
-
`);let n=
|
|
1696
|
+
`)}async function $j(e,t){if(w(e))return Rj(`usage: plugin info <name>
|
|
1697
|
+
`);let n=zj(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-Mw1jky9b.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await Hj(t),{loadPluginFromDirectory:s}=await import(`./loader-D4Fuki1u.js`),c=await s(o,a.root);if(!c.ok)return K(`plugin info: plugin at ${a.root} no longer loads:\n${rM(c.diagnostics)}`);let{plugin:l}=c,u=l.manifest,d=[`${u.name}${u.version?` v${u.version}`:``}`,...u.description?[` ${u.description}`]:[],` root: ${l.root}`,...u.license?[` license: ${u.license}`]:[],...u.homepage?[` home: ${u.homepage}`]:[],``,`Skills (${l.skills.length}):`,...l.skills.map(e=>` ${e.name} ${e.description}`),``,`MCP servers (${l.mcp.servers.length}):`,...l.mcp.servers.map(e=>e.status===`supported`?` ${e.name} ${e.config.type} ${e.config.url}`:` ${e.name} [skipped: ${e.reason}]`)];return c.diagnostics.length>0&&d.push(``,`Diagnostics:`,rM(c.diagnostics)),Rj(d.join(`
|
|
1698
1698
|
`)+`
|
|
1699
|
-
`)}async function
|
|
1700
|
-
`);let i=
|
|
1699
|
+
`)}async function eM(e,t,n,r){if(w(e))return Rj(`usage: plugin validate <path|repo>
|
|
1700
|
+
`);let i=zj(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await Hj(n),o=await Uj(i.positionals[0],t,a);if(o.kind===`error`)return K(`plugin validate: ${o.message}`);let s,c=null;if(o.kind===`github`){if(!n.fetch)return K(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);c=`${r}/.plugin-validate/${Gj(o.ref).split(`/`).pop()}`;let e=await Kj(o.ref,c,a,n.fetch);if(e)return K(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-D4Fuki1u.js`),u;try{u=await l(a,s)}finally{c&&await qj(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${rM(u.diagnostics)}\n`,exitCode:1};let{plugin:d}=u,f=d.mcp.servers.filter(e=>e.status===`supported`).length,p=[`plugin validate: OK — "${d.manifest.name}"${d.manifest.version?` v${d.manifest.version}`:``}`,` skills: ${d.skills.length}`,` mcp servers: ${f} supported, ${d.mcp.servers.length-f} skipped (mcp.json ${d.mcp.status})`];return u.diagnostics.length>0&&p.push(`Diagnostics:`,rM(u.diagnostics)),Rj(p.join(`
|
|
1701
1701
|
`)+`
|
|
1702
|
-
`)}async function
|
|
1703
|
-
`);let n=
|
|
1702
|
+
`)}async function tM(e,t){if(w(e))return Rj(`usage: plugin remove <name>
|
|
1703
|
+
`);let n=zj(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-Mw1jky9b.js`),o=await i(r,t.fs);if(!o)return K(`plugin remove: no installed plugin named "${r}"`);let s=0;if(o.mcpServerNames&&o.mcpServerNames.length>0){let{deleteServer:e,getServer:n}=await import(`./store-wiEGJ_43.js`).then(e=>e.r);for(let i of o.mcpServerNames)(await n(i,t.fs))?.pluginOrigin===r&&await e(i,t.fs)&&(s+=1)}await a(r,t.fs);let c=o.root.startsWith(`${Lj}/`);return c&&await qj(await Hj(t),o.root),Rj([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
|
|
1704
1704
|
`)+`
|
|
1705
|
-
`)}function
|
|
1706
|
-
`)}const
|
|
1707
|
-
`,exitCode:1};let r=C(t,{bool:
|
|
1705
|
+
`)}function nM(e,t){let n=t.startsWith(`/`)?t:`${e.replace(/\/$/,``)}/${t}`,r=[];for(let e of n.split(`/`))e!==``&&e!==`.`&&(e===`..`?r.pop():r.push(e));return`/${r.join(`/`)}`}function rM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
|
|
1706
|
+
`)}const iM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],aM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],oM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},sM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],cM=[`-o`,`--columns`];function lM(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:cM}))return CM();let n=e.processManager??uM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
|
|
1707
|
+
`,exitCode:1};let r=C(t,{bool:sM,value:cM});if(`error`in r)return{stdout:``,stderr:`ps: ${r.error}\n`,exitCode:r.error.startsWith(`unknown flag:`)?1:2};if(r.positionals.length>0)return{stdout:``,stderr:`ps: unrecognized argument '${r.positionals[0]}'\n`,exitCode:2};let i=aM,a=r.bools.has(`-T`)||r.bools.has(`--tree`),o=r.bools.has(`-a`)||r.bools.has(`-A`)||r.bools.has(`-e`)||r.bools.has(`--all`),s=r.values.get(`-o`)??r.values.get(`--columns`);if(s!==void 0){let e=dM(s);if(e instanceof Error)return{stdout:``,stderr:`ps: ${e.message}\n`,exitCode:2};i=e}let c=n.list().sort((e,t)=>e.pid-t.pid),l=o?c:c.filter(e=>e.status===`running`||e.status===`pending`),u=a?SM(l):l.map(e=>({proc:e,depth:0})),d=fM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>hM(e,i,t,a,d));return{stdout:[pM(i,d),...f].join(`
|
|
1708
1708
|
`)+`
|
|
1709
|
-
`,stderr:``,exitCode:0}})}function
|
|
1709
|
+
`,stderr:``,exitCode:0}})}function uM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function dM(e){let t=e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(t.length===0)return Error(`-o requires at least one column`);let n=[];for(let e of t){if(!iM.includes(e))return Error(`unknown column '${e}'; supported: ${iM.join(`, `)}`);n.push(e)}return n}function fM(e,t,n){if(!(n&&e.includes(`scoop`)))return{full:!1,width:10};let r=5;for(let e of t)r=Math.max(r,vM(e).length);return{full:!0,width:r}}function pM(e,t){return e.map(e=>mM(e,t)).join(` `)}function mM(e,t){switch(e){case`pid`:return`PID`.padStart(5);case`ppid`:return`PPID`.padStart(5);case`kind`:return`KIND`.padEnd(10);case`stat`:return`STAT`;case`start`:return`START`;case`scoop`:return`SCOOP`.padEnd(t.width);case`command`:return`COMMAND`}}function hM(e,t,n,r,i){return t.map(t=>gM(e,t,n,r,i)).join(` `)}function gM(e,t,n,r,i){switch(t){case`pid`:return String(e.pid).padStart(5);case`ppid`:return String(e.ppid).padStart(5);case`kind`:return e.kind.padEnd(10);case`stat`:return oM[e.status];case`start`:return _M(e.startedAt);case`scoop`:return yM(e,i);case`command`:return bM(e,n,r)}}function _M(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function vM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function yM(e,t){let n=vM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function bM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(xM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function xM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function SM(e){let t=new Map;for(let n of e)t.set(n.pid,n);let n=new Map,r=[];for(let i of e)if(t.has(i.ppid)){let e=n.get(i.ppid)??[];e.push(i),n.set(i.ppid,e)}else r.push(i);let i=[],a=new Set,o=(e,t)=>{if(a.has(e.pid))return;a.add(e.pid),i.push({proc:e,depth:t});let r=n.get(e.pid)??[];for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,t+1)};for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,0);return i}function CM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
|
|
1710
1710
|
|
|
1711
1711
|
List processes tracked by the kernel.
|
|
1712
1712
|
|
|
@@ -1739,9 +1739,9 @@ Examples:
|
|
|
1739
1739
|
ps -a -T full tree
|
|
1740
1740
|
ps -o pid,kind,stat just three columns
|
|
1741
1741
|
ps -o scoop,stat,pid full scoop jid, with STAT and PID
|
|
1742
|
-
`,stderr:``,exitCode:0}}const
|
|
1743
|
-
`,stderr:``,exitCode:0}}function
|
|
1744
|
-
`,stderr:``,exitCode:0}}async function
|
|
1742
|
+
`,stderr:``,exitCode:0}}const wM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function TM(e,t=wM){let n=[],r=new Set;try{let i=await e.readdir(`/`);for(let a of i){if(!a||a.includes(`/`)||t.has(a))continue;let i=`/${a}`,o=!1;try{o=!!(await e.stat(i)).isDirectory}catch{continue}o&&(r.has(i)||(r.add(i),n.push(i)))}}catch{}return r.has(`/tmp`)||(r.add(`/tmp`),n.push(`/tmp`)),n}function EM(e,t){let n=e;if(typeof n.listMountPoints!=`function`)return[];let r=e=>{for(let n of t)if(e===n||e.startsWith(n===`/`?`/`:n+`/`)||n.startsWith(e+`/`))return!0;return!1},i=[];for(let e of n.listMountPoints())e.kind!==`proc`&&r(e.path)&&i.push({path:e.path,kind:e.kind});return i}function DM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function OM(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},fromDir:e.cwd}}async function kM(e,t){try{let n=await e.readFile(`${t}/package.json`),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}function AM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function jM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
|
|
1743
|
+
`,stderr:``,exitCode:0}}function MM(){return{stdout:`Python 3.14 (Pyodide)
|
|
1744
|
+
`,stderr:``,exitCode:0}}async function NM(e,t,n){if(t[0]===`-c`){if(!t[1])return{kind:`result`,result:{stdout:``,stderr:`${e}: option requires an argument -- 'c'\n`,exitCode:2}};let n=t[1];return{kind:`ok`,code:n,filename:`-c`,sysArgv:[`-c`,...t.slice(2)],procArgv:[e,`-c`,n,...t.slice(2)]}}if(t.length>0&&!t[0].startsWith(`-`)){let r=t[0],i=n.fs.resolvePath(n.cwd,r);return await n.fs.exists(i)?{kind:`ok`,code:await n.fs.readFile(i),filename:r,sysArgv:[r,...t.slice(1)],procArgv:[e,r,...t.slice(1)]}:{kind:`result`,result:{stdout:``,stderr:`${e}: can't open file '${r}': [Errno 2] No such file or directory\n`,exitCode:2}}}return P(n.stdin).trim().length>0?{kind:`ok`,code:P(n.stdin),filename:`<stdin>`,sysArgv:[`<stdin>`],procArgv:[e]}:t.length>0?{kind:`result`,result:{stdout:``,stderr:`${e}: unsupported option '${t[0]}'\n`,exitCode:2}}:{kind:`result`,result:{stdout:``,stderr:`${e}: no input provided (use -c CODE, script path, or stdin)\n`,exitCode:2}}}async function PM(e){let t=OM(e),n=await Vr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Br}\n`,exitCode:1}};let r=await kM(t.reader,n);return r?r===Ar?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${AM(r,Ar)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Br}\n`,exitCode:1}}}const FM=new Set(`EsSuBIPqObdR`);function IM(e){let t=0;for(;t<e.length&&/^-[A-Za-z]+$/.test(e[t]);){let n=e[t].slice(1);if(n===`W`||n===`X`){t+=2;continue}if(![...n].every(e=>FM.has(e)))break;t++}return t===0?e:e.slice(t)}function LM(e,t={}){return S(e,async(n,r)=>{let i=IM(n),a=i[0];if(a===`--help`||a===`-h`)return jM();if(a===`--version`||a===`-V`)return MM();let o=await NM(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await TM(r.fs),f=EM(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??RM(),h=p?.owner??{kind:`system`},g=p?.getParentPid?.(),_=t.realmFactory??Jr(),v=t.pyodideIndexURL??ci(),ee=t.pyodideAssetRoot;if(!ee&&v===void 0){let e=await PM(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=DM();return m?ii({pm:m,realmFactory:_,owner:h,kind:`py`,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f,procKind:`py`,ppid:g,syncFsBridgeEnabled:qr()}):BM({realmFactory:_,owner:h,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f})})}function RM(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let zM=null;async function BM(e){if(!zM){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);zM=new e}return ii({pm:zM,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`,syncFsBridgeEnabled:qr()})}function VM(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function HM(e,t,n={}){let r=new Map;for(let e of t)r.set(e.path,e);let i=new Set,a=[],o=[],s=[];for(let t of e){i.add(t.path);let e=r.get(t.path);e?e.size===t.size&&e.mtimeMs===t.mtimeMs?s.push(t.path):o.push(t.path):a.push(t.path)}let c=[];if(n.delete)for(let e of t)i.has(e.path)||c.push(e.path);return{toAdd:a,toUpdate:o,toDelete:c,toSkip:s}}function UM(){return null}function WM(e){let t={dryRun:!1,delete:!1,verbose:!1},n=[];for(let r of e)if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--delete`)t.delete=!0;else if(r===`--verbose`||r===`-v`)t.verbose=!0;else if(r===`--help`||r===`-h`)return{error:`__help__`};else if(r.startsWith(`-`))return{error:`Unknown flag: ${r}`};else n.push(r);if(n.length!==2)return{error:`Expected exactly 2 arguments: <source> <dest>`};let[r,i]=n,a=GM(r),o=GM(i);return a&&o?{error:`Cannot sync between two remote paths — one side must be local`}:!a&&!o?{error:`One argument must be a remote path (runtime-id:/path)`}:o?{direction:`push`,localPath:r,remotePath:o.path,runtimeId:o.runtimeId,...t}:{direction:`pull`,localPath:i,remotePath:a.path,runtimeId:a.runtimeId,...t}}function GM(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);return r.startsWith(`/`)?{runtimeId:n,path:r}:null}function KM(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
|
|
1745
1745
|
|
|
1746
1746
|
Usage:
|
|
1747
1747
|
rsync [flags] <local-path> <runtime-id>:<remote-path> # push
|
|
@@ -1757,21 +1757,21 @@ Examples:
|
|
|
1757
1757
|
rsync /workspace follower-abc123:/workspace
|
|
1758
1758
|
rsync --delete /shared leader:/shared
|
|
1759
1759
|
rsync follower-abc123:/workspace/project /workspace/project
|
|
1760
|
-
`,stderr:``,exitCode:0}}async function
|
|
1760
|
+
`,stderr:``,exitCode:0}}async function qM(e,t){if(!await e.exists(t))return[];let n=[];for await(let r of e.walk(t)){let i=r.slice(t.length).replace(/^\//,``);if(!i)continue;let a=await e.stat(r);n.push({path:i,size:a.size,mtimeMs:a.mtime})}return n}async function JM(e,t,n){let r=(await e(t,{op:`walk`,path:n}))[0];if(!r.ok){if(r.code===`ENOENT`)return[];throw Error(`Remote walk failed: ${r.error}`)}if(r.data.type!==`paths`)throw Error(`Unexpected walk response type`);let i=r.data.paths,a=[];for(let r of i){let i=r.slice(n.length).replace(/^\//,``);if(!i)continue;let o=(await e(t,{op:`stat`,path:r}))[0];o.ok&&o.data.type===`stat`&&a.push({path:i,size:o.data.stat.size,mtimeMs:o.data.stat.mtime})}return a}async function YM(e,t,n){let r=await e(t,{op:`readFile`,path:n,encoding:`binary`}),i=``;for(let e of r){if(!e.ok)throw Error(`Remote read failed: ${e.error}`);e.data.type===`file`&&(i+=e.data.content)}return i}async function XM(e,t,n){let r=await e(t,{op:`mkdir`,path:n,recursive:!0});if(!r[0].ok)throw Error(`Remote mkdir failed: ${r[0].error}`)}function ZM(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function QM(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=HM(await qM(e,a),await JM(n,s,o),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1761
1761
|
`)+`
|
|
1762
|
-
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await
|
|
1762
|
+
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await XM(n,s,ZM(l));let u=await e.readFile(c,{encoding:`binary`}),d=await n(s,{op:`writeFile`,path:l,content:t(u),encoding:`base64`});if(!d[0].ok)return{stdout:i.join(`
|
|
1763
1763
|
`)+`
|
|
1764
1764
|
`,stderr:`Error writing ${l}: ${d[0].error}\n`,exitCode:1}}for(let e of u.toDelete){let t=o+`/`+e,r=await n(s,{op:`rm`,path:t});if(!r[0].ok)return{stdout:i.join(`
|
|
1765
1765
|
`)+`
|
|
1766
1766
|
`,stderr:`Error deleting ${t}: ${r[0].error}\n`,exitCode:1}}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1767
1767
|
`)+`
|
|
1768
|
-
`,stderr:``,exitCode:0}}async function
|
|
1768
|
+
`,stderr:``,exitCode:0}}async function $M(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=HM(await JM(t,s,o),await qM(e,a),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1769
1769
|
`)+`
|
|
1770
|
-
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=
|
|
1770
|
+
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=ZM(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await YM(t,s,i),d=n(u);await e.writeFile(c,d)}for(let t of u.toDelete){let n=a+`/`+t;await e.rm(n)}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1771
1771
|
`)+`
|
|
1772
|
-
`,stderr:``,exitCode:0}}function
|
|
1772
|
+
`,stderr:``,exitCode:0}}function eN(e={}){let t=e.fs,n=e.getSendFsRequest??UM;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return KM();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
|
|
1773
1773
|
`,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
|
|
1774
|
-
`,exitCode:1};let i=
|
|
1774
|
+
`,exitCode:1};let i=WM(e);if(`error`in i)return i.error===`__help__`?KM():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await QM(t,r,i):await $M(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function tN(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
|
|
1775
1775
|
say --status | --warmup
|
|
1776
1776
|
|
|
1777
1777
|
Speaks the given text. Uses on-device Kokoro voices when the model
|
|
@@ -1790,14 +1790,14 @@ Examples:
|
|
|
1790
1790
|
[web speech] otherwise); kokoro voices lead when ready
|
|
1791
1791
|
--status Show the on-device voice state (downloading/ready + ETA)
|
|
1792
1792
|
--warmup Stage + start the on-device voice download in the background
|
|
1793
|
-
`,stderr:``,exitCode:0}}function
|
|
1793
|
+
`,stderr:``,exitCode:0}}function nN(e){switch(e.state){case`ready`:return`voice engine: ready
|
|
1794
1794
|
`;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
|
|
1795
1795
|
`;case`idle`:return`voice engine: not downloaded (run say --warmup)
|
|
1796
|
-
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function q(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function
|
|
1796
|
+
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function q(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function rN(e){return e instanceof Error?e.message:String(e)}let iN=!1,aN=null;function oN(){return iN?Promise.resolve(speechSynthesis.getVoices()):(aN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){iN=!0,e(t);return}let n=()=>{iN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),iN=!0,e(speechSynthesis.getVoices())},1e3)}),aN)}const sN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function cN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function lN(e,t,n){switch(t){case`-v`:return e.voiceName=n,null;case`-l`:return e.lang=n,null;case`-o`:case`--out`:return e.outFile=n,null;case`-r`:{let t=parseFloat(n);return Number.isNaN(t)||t<.1||t>10?`rate must be between 0.1 and 10`:(e.rate=t,null)}default:return`unknown option: ${t}`}}function uN(e){let t={voiceName:null,rate:1,lang:null,outFile:null,text:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i in sN){let n=cN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return q(`${i} requires ${sN[i]}`);let a=lN(t,i,n);if(a)return q(a)}else if(i.startsWith(`-`)&&i!==`--list`)return q(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function dN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function fN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>dN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await oN()).map(e=>dN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
|
|
1797
1797
|
`)+`
|
|
1798
|
-
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>
|
|
1798
|
+
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>dN(e)).join(`
|
|
1799
1799
|
`)+`
|
|
1800
|
-
`,stderr:``,exitCode:0}}catch(e){return q(
|
|
1800
|
+
`,stderr:``,exitCode:0}}catch(e){return q(rN(e))}}async function pN(e){if(!e.local)return(await e.panelRpc.call(`list-voices`,void 0)).voices;let{kokoroVoicesIfReady:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),n=t().map(e=>({name:e.id})),r=(await oN()).map(e=>({name:e.name}));return[...n,...r]}async function mN(e,t){let n=(await pN(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:q(`voice "${t}" not found. Use --list to see available voices.`)}}async function hN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:nN(t?n():e()),stderr:``,exitCode:0}}return{stdout:nN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(rN(e))}}async function gN(e,t){return t.includes(`--list`)?fN(e):t.includes(`--status`)?hN(e,!1):t.includes(`--warmup`)?hN(e,!0):null}async function _N(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(`speech synthesis error: ${rN(e)}`)}}async function vN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(rN(e))}}async function yN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(rN(e))}}async function bN(e,t){try{let n=await e.panelRpc.call(`synthesize-to-wav`,{text:t.text,lang:t.lang,...t.voice?{voice:t.voice}:{},rate:t.rate},{timeoutMs:3e5});return{bytes:new Uint8Array(n.bytes)}}catch(e){return q(rN(e))}}async function xN(e,t){return e.local?yN(t):bN(e,t)}async function SN(e,t){let n=await xN(e,t);return`exitCode`in n?n:{...yi(n.bytes),stderr:``,exitCode:0}}async function CN(e,t,n,r){let i=await xN(e,r);if(`exitCode`in i)return i;let a=t.fs.resolvePath(t.cwd,n);try{await t.fs.writeFile(a,i.bytes)}catch(e){return q(`failed to write ${n}: ${rN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function wN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await mN(e,n.voiceName);if(i)return i;r=t}let i={text:n.text,lang:n.lang,voice:r,rate:n.rate};return n.outFile===`-`||!n.outFile&&!tr(t)?SN(e,i):n.outFile?CN(e,t,n.outFile,i):e.local?_N(i):vN(e,i)}function TN(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return tN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await gN(n,e);if(r)return r;let i=uN(e);return`exitCode`in i?i:i.text?i.lang?wN(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):tN()})}function EN(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-DXkhPPQJ.js`);return n(e,t)})}const DN=[`--domain`],ON=[`--persist`];function kN(){return`secret — manage secrets for the fetch proxy and mount backends
|
|
1801
1801
|
|
|
1802
1802
|
No approval (session-only, in-memory, never persisted):
|
|
1803
1803
|
secret set <name> <value> --domain <pat> Set a session secret. Free for a
|
|
@@ -1839,23 +1839,23 @@ Examples:
|
|
|
1839
1839
|
secret peek OPENAI_KEY
|
|
1840
1840
|
secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
|
|
1841
1841
|
secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
|
|
1842
|
-
`}function
|
|
1842
|
+
`}function AN(e){if(e===void 0||e.startsWith(`-`))return null;let t=e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0);return t.length===0?null:t}function jN(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const MN={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},NN=new Set;function PN(e,t){if(e===t)return!0;try{return ft(e).test(t)}catch{return!1}}function FN(e,t){for(let n of e)if(PN(n,t))return!0;return!1}function IN(e){return{stdout:``,stderr:`${pt(`secret`,e)}\n`,exitCode:1}}function LN(e){let t=Oe(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??gm(t),i=e.grants??NN,a=e.broker,o=()=>(a??=ps(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(FN(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${MN[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&PN(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&At(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&At(t)&&e.unsetEnv(t)}}}function RN(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
|
|
1843
1843
|
`)?t.slice(0,-2):t.endsWith(`
|
|
1844
|
-
`)?t.slice(0,-1):t}async function
|
|
1845
|
-
`,exitCode:1};let a=r.positionals[1],o=
|
|
1844
|
+
`)?t.slice(0,-1):t}async function zN(e,t,n,r){let i=await r.gate(`persist`,e);return i===`ok`?(await r.backend.setPersisted(e,t,n),await r.injectMaskedEnv(e),{stdout:`Persisted "${e}" (domains: ${n.join(`, `)})\n`,stderr:``,exitCode:0}):IN(i)}async function BN(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return IN(t)}return await r.backend.setSession(e,t,n),await r.injectMaskedEnv(e),{stdout:`Set session secret "${e}" (domains: ${n.join(`, `)}) — in-memory only, not persisted.\n`,stderr:``,exitCode:0}}async function VN(e,t,n){let r=C(e.slice(1),{value:DN,bool:ON});if(`error`in r)return jN(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
|
|
1845
|
+
`,exitCode:1};let a=r.positionals[1],o=RN(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
|
|
1846
1846
|
`,exitCode:1};let s=a??o;if(s===void 0)return{stdout:``,stderr:`secret: set requires a <value>: secret set <name> <value> --domain <patterns> [--persist]
|
|
1847
1847
|
or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
|
|
1848
|
-
`,exitCode:1};let c=
|
|
1849
|
-
`,exitCode:1}}function
|
|
1850
|
-
`,exitCode:1};let i=await t.backend.getMasked(r);return i?{stdout:`${i.name}=${i.maskedValue}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function
|
|
1851
|
-
`,exitCode:1};let i=await t.backend.peek(r);return i?{stdout:`${i.name}: ${i.preview}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function
|
|
1852
|
-
`,exitCode:1};let i=
|
|
1853
|
-
`,exitCode:1};let a=await t.gate(`scope`,r);return a===`ok`?(await t.backend.setScope(r,i),{stdout:`Updated scope for "${r}" (domains: ${i.join(`, `)})\n`,stderr:``,exitCode:0}):
|
|
1854
|
-
`,stderr:a,exitCode:o};let s=Math.max(4,...r.map(e=>e.name.length)),c=`${`NAME`.padEnd(s)} TYPE DOMAINS\n`;for(let e of r){let t=e.persisted?`SAVED`:`SESSION`;c+=`${e.name.padEnd(s)} ${t.padEnd(7)} ${e.domains.join(`, `)}\n`}return{stdout:c,stderr:a,exitCode:o}}async function
|
|
1855
|
-
`,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let{entries:o,warnings:s}=await t.backend.list(),c=o.find(e=>e.name===r);return c?Ta(c.domains,a)?{stdout:`✓ ${r} is allowed for ${a}\n`,stderr:``,exitCode:0}:{stdout:`✗ ${r} is NOT allowed for ${a}\n Allowed domains: ${c.domains.join(`, `)}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:s.length>0?s.map(e=>`secret: ${e}\n`).join(``):`secret: no secret named "${r}"\n`,exitCode:1}}async function
|
|
1848
|
+
`,exitCode:1};let c=AN(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?zN(i,s,c,n):BN(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
|
|
1849
|
+
`,exitCode:1}}function HN(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}async function UN(e,t){let[n,...r]=e.slice(1),i=e=>({stdout:e,stderr:``,exitCode:0});if(n===`set`){let e=C(r,{value:DN,bool:ON}),n=`error`in e?void 0:e.positionals[0];if(!n||!At(n))return i(``);let a=await t.backend.getMasked(n).catch(()=>null);return i(a?`export ${n}=${HN(a.maskedValue)}\n`:``)}if(n===`delete`||n===`rm`){let e=C(r,{}),t=`error`in e?void 0:e.positionals[0];return i(t&&At(t)?`unset ${t}\n`:``)}return i(``)}async function WN(e,t){let n=C(e.slice(1),{});if(`error`in n)return jN(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
|
|
1850
|
+
`,exitCode:1};let i=await t.backend.getMasked(r);return i?{stdout:`${i.name}=${i.maskedValue}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function GN(e,t){let n=C(e.slice(1),{});if(`error`in n)return jN(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
|
|
1851
|
+
`,exitCode:1};let i=await t.backend.peek(r);return i?{stdout:`${i.name}: ${i.preview}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function KN(e,t){let n=C(e.slice(1),{value:DN});if(`error`in n)return jN(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
|
|
1852
|
+
`,exitCode:1};let i=AN(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
|
|
1853
|
+
`,exitCode:1};let a=await t.gate(`scope`,r);return a===`ok`?(await t.backend.setScope(r,i),{stdout:`Updated scope for "${r}" (domains: ${i.join(`, `)})\n`,stderr:``,exitCode:0}):IN(a)}async function qN(e,t){let n=C(e.slice(1),{});if(`error`in n)return jN(n.error);let{entries:r,warnings:i}=await t.backend.list(),a=i.map(e=>`secret: ${e}\n`).join(``),o=+(i.length>0);if(r.length===0)return{stdout:i.length>0?``:`No secrets stored
|
|
1854
|
+
`,stderr:a,exitCode:o};let s=Math.max(4,...r.map(e=>e.name.length)),c=`${`NAME`.padEnd(s)} TYPE DOMAINS\n`;for(let e of r){let t=e.persisted?`SAVED`:`SESSION`;c+=`${e.name.padEnd(s)} ${t.padEnd(7)} ${e.domains.join(`, `)}\n`}return{stdout:c,stderr:a,exitCode:o}}async function JN(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return jN(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`secret: ${t} requires a <name>\n`,exitCode:1};let a=await n.backend.delete(i);return a.removed?(n.clearMaskedEnv(i),{stdout:`Removed ${a.fromSession===!0?`session`:`persisted`} secret "${i}"\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`secret: no secret named "${i}"\n`,exitCode:1}}async function YN(e,t){let n=C(e.slice(1),{});if(`error`in n)return jN(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
|
|
1855
|
+
`,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let{entries:o,warnings:s}=await t.backend.list(),c=o.find(e=>e.name===r);return c?Ta(c.domains,a)?{stdout:`✓ ${r} is allowed for ${a}\n`,stderr:``,exitCode:0}:{stdout:`✗ ${r} is NOT allowed for ${a}\n Allowed domains: ${c.domains.join(`, `)}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:s.length>0?s.map(e=>`secret: ${e}\n`).join(``):`secret: no secret named "${r}"\n`,exitCode:1}}async function XN(e,t){let n=C(e.slice(1),{});if(`error`in n)return jN(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
|
|
1856
1856
|
(changes are picked up on the next request — no restart needed)
|
|
1857
1857
|
`,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
|
|
1858
|
-
`,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function
|
|
1858
|
+
`,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function ZN(e,t,n){let r=e[0];switch(r){case`set`:return VN(e,t,n);case`get`:case`read`:return WN(e,n);case`shell-env`:return UN(e,n);case`peek`:return GN(e,n);case`scope`:return KN(e,n);case`list`:return qN(e,n);case`delete`:case`rm`:return JN(e,r,n);case`test`:return YN(e,n);case`edit`:return XN(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function QN(e={}){let t=LN(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:DN}))return{stdout:kN(),stderr:``,exitCode:0};try{return await ZN(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function $N(){return null}function eP(){return null}function tP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
|
|
1859
1859
|
serve --logs [<token>] [--lines <n>]
|
|
1860
1860
|
serve --truncate [<token>]
|
|
1861
1861
|
|
|
@@ -1891,28 +1891,28 @@ Limits and lifetime:
|
|
|
1891
1891
|
its TTL. Either can be removed sooner with \`serve --stop\`.
|
|
1892
1892
|
- <token> is the "Preview token" printed at mint time or the TOKEN column
|
|
1893
1893
|
of \`serve --list\`; \`--stop\` also accepts the preview URL.
|
|
1894
|
-
`,stderr:``,exitCode:0}}function
|
|
1895
|
-
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function
|
|
1894
|
+
`,stderr:``,exitCode:0}}function nP(e){return`error`in e}function rP(e,t,n){if(e===`--list`)return n.list=!0,{skip:0};if(e===`--logs`||e===`--truncate`){let r=e===`--logs`?`logs`:`truncate`;return t&&!t.startsWith(`-`)?(n[r]=t,{skip:1}):(n[r]=!0,{skip:0})}if(e.startsWith(`--logs=`)||e.startsWith(`--truncate=`)){let t=e.startsWith(`--logs=`)?`logs`:`truncate`,r=e.slice(e.indexOf(`=`)+1);return r?(n[t]=r,{skip:0}):{error:`serve: missing value for --${t}\n`}}if(e===`--lines`||e.startsWith(`--lines=`)){let r=e===`--lines`?t:e.slice(8),i=r===void 0?NaN:Number(r);return!Number.isSafeInteger(i)||i<=0?{error:`serve: --lines must be a positive integer
|
|
1895
|
+
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function iP(e,t,n){if(e!==`--ttl`&&!e.startsWith(`--ttl=`))return;let r=e===`--ttl`?t:e.slice(6);if(!r)return{error:`serve: missing value for --ttl
|
|
1896
1896
|
`};let i=/^([1-9][0-9]*)([mhdw])$/.exec(r);if(!i)return{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
1897
1897
|
`};let a=Number(i[1])*{m:6e4,h:36e5,d:864e5,w:6048e5}[i[2]];return Number.isSafeInteger(a)?a>2592e6?{error:`serve: --ttl cannot exceed 30d; longer retention requires a Sliccy Deluxe De-Enshittification plan.
|
|
1898
1898
|
`}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
1899
|
-
`}}function
|
|
1899
|
+
`}}function aP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function oP(e,t,n){let r=iP(e,t,n);if(r)return r;let i=aP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
|
|
1900
1900
|
`};if(e.startsWith(`--entry=`))return n.entry=e.slice(8),{skip:0};if(e===`--stop`)return t?(n.stop=t,{skip:1}):{error:`serve: missing value for --stop
|
|
1901
|
-
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=
|
|
1901
|
+
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=rP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
|
|
1902
1902
|
`};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
|
|
1903
1903
|
`}:(n.maxTabs=e,{skip:1})}if(e.startsWith(`--max-tabs=`)){let t=Number.parseInt(e.slice(11),10);return!Number.isFinite(t)||t<=0?{error:`serve: --max-tabs must be a positive integer
|
|
1904
1904
|
`}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
|
|
1905
|
-
`}:(n.directory=e,{skip:0})}function
|
|
1906
|
-
`,exitCode:1};if(n.webhookId){let e=await sy();if(!e)return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0};try{await e.deleteWebhook(n.webhookId)}catch(e){return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${e instanceof Error?e.message:String(e)}. Delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${t}\n`,stderr:``,exitCode:0}}async function
|
|
1907
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
1908
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
1909
|
-
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(
|
|
1905
|
+
`}:(n.directory=e,{skip:0})}function sP(e){let t={entry:`index.html`,bridge:!1,noBridge:!1,project:!1,list:!1,quiet:!1};for(let n=0;n<e.length;n+=1){let r=oP(e[n],e[n+1],t);if(nP(r))return{...t,error:r.error};n+=r.skip}return t}async function cP(e,t,n,r){if(!br(t))return{stdout:``,stderr:`serve: invalid entry file: ${t}\n`,exitCode:1};let i=n.resolvePath(r,e),a;try{a=await n.stat(i)}catch{return{stdout:``,stderr:`serve: no such directory: ${e}\n`,exitCode:1}}if(!a.isDirectory)return{stdout:``,stderr:`serve: not a directory: ${e}\n`,exitCode:1};let o=Dr(i,t),s;try{s=await n.stat(o)}catch{return{stdout:``,stderr:`serve: entry file not found: ${o}\n`,exitCode:1}}return s.isFile?{fullDirectory:i,entryPath:o}:{stdout:``,stderr:`serve: entry is not a file: ${o}\n`,exitCode:1}}function lP(e){return`exitCode`in e}async function uP(e){let t=Ca(e)??e,n,r=eP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=y();if(!e)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};n=await e.call(`tray-revoke-preview`,{previewToken:t})}if(!n.revoked)return{stdout:``,stderr:`serve: preview token not found or already revoked
|
|
1906
|
+
`,exitCode:1};if(n.webhookId){let e=await sy();if(!e)return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0};try{await e.deleteWebhook(n.webhookId)}catch(e){return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${e instanceof Error?e.message:String(e)}. Delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${t}\n`,stderr:``,exitCode:0}}async function dP(){let e=eP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
|
|
1907
|
+
`,stderr:``,exitCode:0}:{stdout:pP(t),stderr:``,exitCode:0}}let t=y();if(!t)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let n=(await t.call(`tray-list-previews`,void 0)).previews??[];return n.length===0?{stdout:`No active previews
|
|
1908
|
+
`,stderr:``,exitCode:0}:{stdout:pP(n),stderr:``,exitCode:0}}function fP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function pP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${fP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function mP(e){let t=e.announced?`announced`:`suppressed`,n=e.previewToken??`-`,r=e.lifecycle===`connected`?`origin=${e.origin??`-`} userAgent=${e.userAgent??`-`}`:`reason=${e.reason??`-`}`;return`${e.timestamp} ${e.lifecycle.padEnd(12)} ${t.padEnd(10)} preview=${n} conn=${e.connId} ${r}\n`}async function hP(e){let t,n=eP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=y();if(!n)return{stdout:``,stderr:"serve --logs: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};t=(await n.call(`tray-preview-logs`,{previewToken:e.previewToken})).lifecycleRecords}return e.lines!==void 0&&(t=t.slice(-e.lines)),t.length===0?{stdout:`No preview lifecycle records. The recorder is leader-memory-only and resets on leader restart.
|
|
1909
|
+
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(mP).join(``)}`,stderr:``,exitCode:0}}async function gP(e){let t,n,r=eP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=y();if(!r)return{stdout:``,stderr:"serve --truncate: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let i=await r.call(`tray-preview-truncate`,{previewToken:e});t=i.cleared,n=i.rearmed}return{stdout:`Cleared ${t} preview lifecycle record${t===1?``:`s`}; re-armed ${n} preview announcement${n===1?``:`s`}.\n`,stderr:``,exitCode:0}}async function _P(e,t){let n=[],r=0;for await(let i of e.walk(t)){if(n.length>=1e3)throw Error(`persistent preview exceeds 1000 file limit`);let a=await e.readFile(i,{encoding:`binary`}),o=typeof a==`string`?new TextEncoder().encode(a):a,s=i.slice(t===`/`?1:t.length+1);if(o.byteLength>26214400)throw Error(`preview file exceeds 25 MiB limit: ${s}`);if(r+=o.byteLength,r>52428800)throw Error(`persistent preview exceeds 50 MiB total limit`);n.push({path:s,content:o,mime:fr(s)})}return n}function vP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function yP(e){let t=$N();if(t)return t(e);let n=y();if(!n)throw Error("no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.");return e.ttlMs===void 0?n.call(`tray-open-preview`,e):n.call(`tray-open-preview`,e,{timeoutMs:6e5})}async function bP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function xP(e,t){if(!e)return{ok:!0};let n=await sy();if(!n)return{ok:!1,result:{stdout:``,stderr:`${t}serve: --bridge requires an active lick manager\n`,exitCode:1}};try{return{ok:!0,webhookId:(await n.createWebhook(`preview-bridge`)).id}}catch(e){return{ok:!1,result:{stdout:``,stderr:`${t}serve: webhook creation failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}}async function SP(e,t,n,r,i,a,o){let s;try{s=await yP({entryPath:n,servedRoot:t,bridge:e.bridge,noBridge:e.ttlMs!==void 0||e.noBridge,maxTabs:e.maxTabs,quiet:e.quiet,webhookId:r,ttlMs:e.ttlMs,snapshotFiles:a})}catch(e){if(r){let e=await sy();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await bP(s.url,o),l=`${s.pushed} follower${s.pushed===1?``:`s`}`,u=c?` (targetId: ${c})`:``,d=e.ttlMs===void 0?`expires 5 min after the leader disconnects`:`kept until its --ttl expires; counts toward the 10-snapshot tray quota`,f=s.previewToken?`Preview token: ${s.previewToken} (${d}; revoke sooner with serve --stop)\n`:``;return{stdout:`Preview URL: ${s.url}${u}\n${f}Pushed to ${l}\n`,stderr:i,exitCode:0}}async function CP(e){if(e.stop){let t=e.stop;return vP(()=>uP(t))}if(e.list)return vP(()=>dP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
|
|
1910
1910
|
`,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
|
|
1911
|
-
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return
|
|
1911
|
+
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return vP(()=>hP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return vP(()=>gP(t))}}function wP(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
|
|
1912
1912
|
`,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
|
|
1913
|
-
`,exitCode:1}}async function
|
|
1914
|
-
`:``,f=await
|
|
1915
|
-
`;function
|
|
1913
|
+
`,exitCode:1}}async function TP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return _P(t,n)}}async function EP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return tP();let i=sP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await CP(i);if(a)return a;if(!i.directory)return tP();let o=wP(i);if(o)return o;let s=await cP(i.directory,i.entry,t.fs,t.cwd);if(lP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await TP(i,r,c)}catch(e){return{stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let d=i.project?`serve: --project is obsolete; ignored (root-absolute paths work natively under unified preview)
|
|
1914
|
+
`:``,f=await xP(!i.noBridge&&i.bridge,d);return f.ok?SP(i,c,l,f.webhookId,d,u,n):f.result}function DP(e,t){return S(`serve`,(n,r)=>EP(n,r,e,t))}const OP=`usage: session export [--id <id>] [--output <path>]
|
|
1915
|
+
`;function kP(e){if(e.includes(`\0`))return{ok:!1,reason:`path must not contain NUL bytes`};if(e.includes(`\\`))return{ok:!1,reason:`path must not contain backslashes`};let t=e.split(`/`);for(let e of t)if(e===`..`)return{ok:!1,reason:`path must not contain ".."/traversal segments`};return{ok:!0}}function AP(e){let t=null,n=null,r=e.slice(1);for(let e=0;e<r.length;e++){let i=r[e];if(i===`--id`){if(t!==null)return{ok:!1,stderr:`session export: duplicate flag --id\n${OP}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${OP}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${OP}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${OP}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${OP}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${OP}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function jP(e){let t=[],n=0;for await(let r of e.chunks)t.push(r),n+=r.byteLength;let r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.byteLength;let a=await e.completion;if(a.byteLength!==n||Et(r)!==a.sha256)throw new Aa(`transfer-corrupt`);return r}async function MP(e,t){let n=AP(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=kP(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${OP}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await _s().export(a,{}),n=await jP(e),r=i??`/workspace/${e.filename}`;return await t.fs.writeFile(r,n),{stdout:`exported ${r}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session export: ${e instanceof Aa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function NP(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return MP(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-Cep9cwKm.js`);return n(e,t,OP)})}function PP(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-BRFnmkzR.js`);return await n(e,t)})}const FP=`leader`;function IP(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function LP(e){return+!!e.leader+e.followers.length}function RP(){return{stdout:`usage: sprinkle <subcommand> [args]
|
|
1916
1916
|
|
|
1917
1917
|
list [--runtime <id>] List sprinkles + an instance line per runtime
|
|
1918
1918
|
open <name> Open a sprinkle by name
|
|
@@ -1930,22 +1930,22 @@ Limits and lifetime:
|
|
|
1930
1930
|
chat <html> Show inline HTML in chat (Tool UI)
|
|
1931
1931
|
Use data-action="name" on buttons for callbacks
|
|
1932
1932
|
Pipe HTML: echo "<div>...</div>" | sprinkle chat
|
|
1933
|
-
`,stderr:``,exitCode:0}}function
|
|
1933
|
+
`,stderr:``,exitCode:0}}function zP(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function BP(){return[FP,...re().map(e=>e.runtimeId)]}function VP(e){return`unknown runtime "${e}"\nknown runtimes: ${BP().join(`, `)}\nRun \`host\` to see connected followers.`}async function HP(e,t){let n=e.slice(1).join(` `);if(!n){let e=P(t.stdin);e&&(n=e)}if(!n)return{stdout:``,stderr:`sprinkle chat: HTML content required
|
|
1934
1934
|
`,exitCode:1};let r=await Pe({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
|
|
1935
1935
|
`,exitCode:1}:{stdout:JSON.stringify(r)+`
|
|
1936
|
-
`,stderr:``,exitCode:0}}function
|
|
1937
|
-
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=
|
|
1936
|
+
`,stderr:``,exitCode:0}}function UP(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function WP(e){return[...e.map(e=>({name:e,runtimeId:FP})),...IP()]}async function GP(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!BP().includes(r))return J(`list`,VP(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
|
|
1937
|
+
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=WP([...a]).filter(e=>r===void 0||e.runtimeId===r),s=[];for(let e of i){let t=o.filter(t=>t.name===e.name);if(r!==void 0&&t.length===0)continue;let n=a.has(e.name)?` [open]`:``;s.push(` ${e.name}${n} ${e.title} (${e.path})`),s.push(...UP(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
|
|
1938
1938
|
`)+`
|
|
1939
|
-
`,stderr:``,exitCode:0}}function
|
|
1939
|
+
`,stderr:``,exitCode:0}}function KP(e,t){return!t||Fo(e)?null:(Io(e,t),Fo(e)===t?t:null)}async function qP(e,t,n){let r=C(t.slice(1),{});if(`error`in r)return J(`open`,r.error);let i=r.positionals[0];if(!i)return J(`open`,`name required`);let a=ta(void 0,n),o=KP(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&Lo(i),J(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${o?`; licks route to "${o}"`:``}.\n`,stderr:``,exitCode:0}}function JP(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`close`,n.error);let r=n.positionals[0];return r?(e.close(r),{stdout:`Sprinkle "${r}" closed.\n`,stderr:``,exitCode:0}):J(`close`,`name required`)}async function YP(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`reload`,n.error);let r=n.positionals[0];if(!r)return J(`reload`,`name required`);try{return await e.reload(r),{stdout:`Sprinkle "${r}" reloaded.\n`,stderr:``,exitCode:0}}catch(e){return J(`reload`,e instanceof Error?e.message:String(e))}}async function XP(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`refresh`,n.error);await e.refresh();let r=e.available().length;return{stdout:`Found ${r} sprinkle${r===1?``:`s`}.\n`,stderr:``,exitCode:0}}function ZP(e){let t=C(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return J(`route`,t.error);let n=t.positionals[0];if(!n){let e=Ro(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
|
|
1940
1940
|
`,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
|
|
1941
1941
|
route for follower-forwarded licks too):
|
|
1942
1942
|
`+t.map(([e,t])=>` ${e} -> ${t}`).join(`
|
|
1943
1943
|
`)+`
|
|
1944
|
-
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Lo(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=Fo(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Io(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function
|
|
1945
|
-
`,exitCode:1};switch(n){case`list`:return
|
|
1946
|
-
`,stderr:``,exitCode:0}}function
|
|
1947
|
-
`)}\n`:``}async function
|
|
1948
|
-
`)?e:`${e}\n`,exitCode:1}}function
|
|
1944
|
+
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Lo(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=Fo(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Io(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function QP(e){let t=[];return e.leader&&t.push(FP),t.push(...e.followers),t.join(`, `)}async function $P(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`send`,n.error);let r=n.positionals[0];if(!r)return J(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return J(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return J(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!BP().includes(o))return J(`send`,VP(o));let s=await e.sendToSprinkle(r,a,o?{runtime:o}:void 0);if(!s)return J(`send`,`sprinkle manager returned no delivery report — push not confirmed`);if(s.unknownRuntime)return J(`send`,VP(s.unknownRuntime));let c=LP(s);return c===0?J(`send`,o?`"${r}" is not open on runtime "${o}" — nothing was delivered`:`"${r}" is not open on the leader or any connected follower — nothing was delivered`):{stdout:`Data sent to sprinkle "${r}" — ${c} instance${c===1?``:`s`} (${QP(s)}).\n`,stderr:``,exitCode:0}}function eF(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return RP();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:ot(`sprinkle`,n,RP().stdout),stderr:``,exitCode:0};if(n===`chat`)return HP(at(e),t);let r=zP();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
|
|
1945
|
+
`,exitCode:1};switch(n){case`list`:return GP(r,e);case`open`:return qP(r,e,t.env);case`close`:return JP(r,e);case`reload`:return YP(r,e);case`refresh`:return XP(r,e);case`route`:return ZP(e);case`send`:return $P(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function tF(){return{stdout:`usage: sqlite3 [database] [sql]
|
|
1946
|
+
`,stderr:``,exitCode:0}}function nF(e,t){let n=e.length>0&&!e[0].startsWith(`-`);return{database:n?e[0]:`:memory:`,sql:(n?e.slice(1):e).join(` `).trim()||P(t.stdin).trim()}}function rF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function iF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function aF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function oF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(yr).join(`|`)));return t.length>0?`${t.join(`
|
|
1947
|
+
`)}\n`:``}async function sF(e,t,n){let r=await Er(),i=rF(e,n),a=await iF(r,i,n),o=a.exec(t);return await aF(a,i,n),a.close(),oF(o)}function cF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function lF(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return tF();let{database:r,sql:i}=nF(t,n);if(!i)return cF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await sF(r,i,n),stderr:``,exitCode:0}}catch(t){return cF(e,t)}})}function uF(e){return{stdout:``,stderr:e.endsWith(`
|
|
1948
|
+
`)?e:`${e}\n`,exitCode:1}}function dF(){return{stdout:`ssh - run a command on a connected tray follower
|
|
1949
1949
|
|
|
1950
1950
|
Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
|
|
1951
1951
|
ssh --list
|
|
@@ -1968,11 +1968,11 @@ Examples:
|
|
|
1968
1968
|
ssh --list
|
|
1969
1969
|
ssh follower-abc123 "uname -a"
|
|
1970
1970
|
ssh --cwd /tmp follower-abc123 "ls -la"
|
|
1971
|
-
`,stderr:``,exitCode:0}}function
|
|
1971
|
+
`,stderr:``,exitCode:0}}function fF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
|
|
1972
1972
|
Start one with: slicc <join-url> follow sh -c
|
|
1973
1973
|
`;let n=[`exec targets:`];for(let e of t){let t=[e.runtimeId];e.runtime&&t.push(`(${e.runtime})`),n.push(` - ${t.join(` `)}`),e.motd&&n.push(` ${e.motd}`),e.computerMotd&&n.push(` ${e.computerMotd}`)}return`${n.join(`
|
|
1974
|
-
`)}\n`}function
|
|
1975
|
-
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return
|
|
1974
|
+
`)}\n`}function pF(e){if(e.stdin===void 0)return;let n=_i(e.stdin);if(n.length===0)return;let r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e)&255;return t(r)}function mF(e){let t=!1,n,r,i=0;for(;i<e.length;){let a=e[i];if(a===`--help`||a===`-h`)return{help:!0};if(a===`--list`||a===`-l`){t=!0,i+=1;continue}if(a===`--cwd`){let t=e[i+1];if(t===void 0)return{error:`ssh: --cwd requires a directory argument`};n=t,i+=2;continue}if(a===`--timeout`){let t=e[i+1],n=Number(t);if(t===void 0||!Number.isFinite(n)||n<=0)return{error:`ssh: --timeout requires a positive number of seconds`};r=n,i+=2;continue}if(a.startsWith(`-`)&&a!==`-`)return{error:`ssh: unknown flag: ${a}`};break}let a=e[i],o=e.slice(i+1).join(` `);return{list:t,cwd:n,timeoutSec:r,runtimeId:a,command:o}}function hF(){return S(`ssh`,async(e,t)=>{let n=mF(e);if(`help`in n)return dF();if(`error`in n)return uF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:fF(re()),stderr:``,exitCode:0};if(!n.command)return uF(`ssh: missing command
|
|
1975
|
+
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return uF(`ssh: not available in this environment (needs the standalone app)`);let i=`ssh-${Date.now()}-${Math.random().toString(36).slice(2,10)}`,a=()=>{r.call(`tray-exec-signal`,{execToken:i}).catch(()=>{})};t.signal?.addEventListener(`abort`,a,{once:!0});try{let e=n.timeoutSec?n.timeoutSec*1e3:void 0,a=await r.call(`tray-exec`,{runtimeId:n.runtimeId,command:n.command,cwd:n.cwd,execToken:i,timeoutMs:e,stdin:pF(t)},{timeoutMs:(e??864e5)+5e3});return a.error?{stdout:a.stdout,stderr:`${a.stderr}ssh: ${a.error}\n`,exitCode:a.exitCode||1}:{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode}}catch(e){return uF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function gF(e){return{stdout:``,stderr:`${pt(`sudo`,e)}\n`,exitCode:77}}function _F(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return S(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
|
|
1976
1976
|
`,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
|
|
1977
1977
|
|
|
1978
1978
|
Request human approval to run <command> with elevation. If approved, the
|
|
@@ -1989,14 +1989,14 @@ Options:
|
|
|
1989
1989
|
-h, --help Show this help message and exit.
|
|
1990
1990
|
`,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
|
|
1991
1991
|
`,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
|
|
1992
|
-
`,exitCode:1};let a=$p(e[0],e.slice(1)),o=i.env?.get(nm),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return
|
|
1993
|
-
`,exitCode:1};let i=await Promise.all(r.map(e=>
|
|
1994
|
-
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>
|
|
1995
|
-
`,exitCode:1};let a=await Promise.all(i.map(e=>
|
|
1996
|
-
`,stderr:``,exitCode:0}}function
|
|
1997
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
1998
|
-
`);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let a=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(a,{recursive:!0});let o=[],s=[],c=[],l=[];for(let e of i){let n=
|
|
1999
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
1992
|
+
`,exitCode:1};let a=$p(e[0],e.slice(1)),o=i.env?.get(nm),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return gF(s);if(s.decision===`always`){let e=s.pattern?.trim()||a;if(n)try{await n(e)}catch{}}return r&&r(a),i.exec(e[0],{cwd:i.cwd,args:e.slice(1)})})}function vF(e){let t=e instanceof Error?e.message:String(e);return/ENOENT|no such file/i.test(t)?`No such file or directory`:/ENOTEMPTY|not empty/i.test(t)?`Directory not empty`:t.replace(/^\w+:\s*/,``)}async function yF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function bF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function xF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await yF(e,r);return i.isDirectory&&!i.isSymbolicLink&&!n.recursive?{stdout:``,stderr:`rm: cannot remove '${t}': Is a directory\n`}:(await e.fs.rm(r,{recursive:n.recursive,force:n.force}),{stdout:n.verbose?`removed '${t}'\n`:``,stderr:``})}catch(e){return{stdout:``,stderr:n.force?``:`rm: cannot remove '${t}': ${vF(e)}\n`}}}function SF(){return S(`rm`,async(e,t)=>{let n={recursive:bF(e,`r`)||bF(e,`R`)||e.includes(`--recursive`),force:bF(e,`f`)||e.includes(`--force`),verbose:bF(e,`v`)||e.includes(`--verbose`)},r=e.filter(e=>!e.startsWith(`-`));if(r.length===0)return n.force?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:`rm: missing operand
|
|
1993
|
+
`,exitCode:1};let i=await Promise.all(r.map(e=>xF(t,e,n))),a=i.map(e=>e.stdout).join(``),o=i.map(e=>e.stderr).join(``);return{stdout:a,stderr:o,exitCode:+!!o}})}function CF(e,t,n){let r=n.isSymbolicLink?`symbolic link`:n.isDirectory?`directory`:`regular file`;return e.replace(/%n/g,t).replace(/%N/g,`'${t}'`).replace(/%s/g,String(n.size)).replace(/%F/g,r).replace(/%a/g,n.mode.toString(8))}function wF(e){let t={follow:!1,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];r===`-L`||r===`--dereference`?t.follow=!0:r===`-c`&&e[n+1]?t.format=e[++n]:r.startsWith(`--format=`)?t.format=r.slice(9):r.startsWith(`-`)||t.paths.push(r)}return t}async function TF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await yF(e,r);return{stdout:n.format?`${CF(n.format,t,i)}\n`:` File: ${t}\n Size: ${i.size}\n`,stderr:``}}catch{return{stdout:``,stderr:`stat: cannot stat '${t}': No such file or directory\n`}}}function EF(){return S(`stat`,async(e,t)=>{let n=wF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
|
|
1994
|
+
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>TF(t,e,n))),i=r.map(e=>e.stdout).join(``),a=r.map(e=>e.stderr).join(``);return{stdout:i,stderr:a,exitCode:+!!a}})}function DF(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function OF(e,t,n,r){let i=e.fs.resolvePath(`/`,t).split(`/`).filter(Boolean),a=e.fs.resolvePath(e.cwd,t),o=``;for(let s=0;s<i.length;s++){try{let t=await yF(e,a);if(!t.isDirectory||t.isSymbolicLink)throw Error(`Not a directory`);await e.fs.rm(a,{recursive:!1,force:!1}),r&&(o+=`rmdir: removing directory, '${a}'\n`)}catch(e){return{stdout:o,stderr:`rmdir: failed to remove '${t}': ${vF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=DF(a)}return{stdout:o,stderr:``}}function kF(){return S(`rmdir`,async(e,t)=>{let n=e.some(e=>e===`-p`||e===`--parents`),r=e.some(e=>e===`-v`||e===`--verbose`),i=e.filter(e=>!e.startsWith(`-`));if(i.length===0)return{stdout:``,stderr:`rmdir: missing operand
|
|
1995
|
+
`,exitCode:1};let a=await Promise.all(i.map(e=>OF(t,e,n,r))),o=a.map(e=>e.stdout).join(``),s=a.map(e=>e.stderr).join(``);return{stdout:o,stderr:s,exitCode:+!!s}})}function AF(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
|
|
1996
|
+
`,stderr:``,exitCode:0}}function jF(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function MF(e,t){if(e.mode)return jF(`exactly one of -c, -x, or -t is required`);e.mode=t}function NF(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const PF={c:`create`,x:`extract`,t:`list`};function FF(e,t,n,r,i){let a=PF[e];if(a)return{nextIndex:r,error:MF(i,a)};if(e===`z`)return i.gzip=!0,{nextIndex:r};if(e===`v`)return i.verbose=!0,{nextIndex:r};if(e!==`f`&&e!==`C`)return{nextIndex:r,error:jF(`unsupported option -${e}`)};let o=NF(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:jF(`option -${e} requires an argument`)}}function IF(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=FF(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const LF=/^[cxtzvfC]+$/;function RF(e){let t=e.length>0&&LF.test(e[0])?[`-${e[0]}`,...e.slice(1)]:e,n={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let e=0;e<t.length;e++){let r=t[e];if(!r.startsWith(`-`)||r===`-`){n.paths.push(r);continue}if(r.startsWith(`--`))return jF(`unsupported option ${r}`);let i=IF(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function zF(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):vr(t)}function BF(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function VF(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){let a=await e.fs.readFileBuffer(t),o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:n,bytes:a,...o===void 0?{}:{mode:o},...BF(i)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`,o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:a,bytes:new Uint8Array,directory:!0,...o===void 0?{}:{mode:o},...BF(i)});for(let n of await e.fs.readdir(t))await VF(e,_r(t,n),`${a}${n}`,r)}function HF(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?ua(e):e;return la(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function UF(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return Tr(t,i)?i:void 0}async function WF(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function GF(e,t,n,r){let i=new Map(t),a=new Map(n),o=[...new Set([...i.keys(),...a.keys()])];if(o.length===0)return;let s=o.map(e=>{let t=i.get(e),n=a.get(e),r=n===void 0?void 0:new Date(n*1e3);return{path:e,...t===void 0?{}:{mode:t},...r===void 0?{}:{atime:r,mtime:r}}});if(typeof r?.updateMetadataBatch==`function`){await WF(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await WF(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await WF(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await WF(()=>c.utimes(e,n,n))}}async function KF(e,t,n,r,i){let a=n.directory?493:420,o=n.mode===a&&await e.fs.exists(t),s=n.mode!==void 0&&(n.mode!==a||o);if(n.directory){await e.fs.mkdir(t,{recursive:!0}),s&&r.push([t,n.mode]);return}let c=Sr(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function qF(e,t){if(e.paths.length===0)return jF(`create mode requires at least one input path`);let n=[],r=t.fs.resolvePath(t.cwd,e.directory);for(let i of e.paths){let e=t.fs.resolvePath(r,i);await VF(t,e,zF(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=sa(n);return await t.fs.writeFile(i,e.gzip?ca(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
|
|
1997
|
+
`)}\n`:``,stderr:``,exitCode:0}}function JF(e){let t=new Set,n=[];for(let r=e.length-1;r>=0;r--){let[i,a]=e[r];t.has(i)||(t.add(i),n.push([i,a]))}return n}async function YF(e,t,n){if(e.paths.length>0)return jF(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=HF(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
|
|
1998
|
+
`);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let a=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(a,{recursive:!0});let o=[],s=[],c=[],l=[];for(let e of i){let n=UF(t,a,e.path);if(!n)return jF(`blocked suspicious path ${e.path}`);await KF(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await GF(t,[...JF(s),...JF(c)],JF(l),n),{stdout:e.verbose?`${o.join(`
|
|
1999
|
+
`)}\n`:``,stderr:``,exitCode:0}}function XF(e={}){return S(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return AF();let r=RF(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?jF(`-C is only supported in create or extract mode`):r.mode===`create`?qF(r,n):YF(r,n,e.fs):jF(`option -f requires an archive path`):jF(`exactly one of -c, -x, or -t is required`)})}var ZF=`/**
|
|
2000
2000
|
* Standalone assertions - no dependency on test runner
|
|
2001
2001
|
*
|
|
2002
2002
|
* Each assertion:
|
|
@@ -2184,7 +2184,7 @@ function sameMembers(a, b) {
|
|
|
2184
2184
|
}
|
|
2185
2185
|
|
|
2186
2186
|
const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
|
|
2187
|
-
`,
|
|
2187
|
+
`,QF=`/**
|
|
2188
2188
|
* tst - minimal test runner
|
|
2189
2189
|
*
|
|
2190
2190
|
* - Standalone assertions (assert.js works anywhere)
|
|
@@ -2814,7 +2814,7 @@ function scheduleAutoRun() {
|
|
|
2814
2814
|
scheduleAutoRun()
|
|
2815
2815
|
|
|
2816
2816
|
export * from './assert.js'
|
|
2817
|
-
`;function
|
|
2817
|
+
`;function $F(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}const eI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
|
|
2818
2818
|
|
|
2819
2819
|
Usage:
|
|
2820
2820
|
tsc [options] [files...]
|
|
@@ -2838,28 +2838,28 @@ Install:
|
|
|
2838
2838
|
Then \`tsc --version\` and the transpile commands above. There is no
|
|
2839
2839
|
bundled binary, no CDN fallback; a missing package exits non-zero
|
|
2840
2840
|
with a clear \`ipk add\` hint.
|
|
2841
|
-
`;function
|
|
2842
|
-
`);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function
|
|
2843
|
-
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function
|
|
2841
|
+
`;function tI(e){let t=[],n=!1,r=null,i=!1,a=!1;for(let o=0;o<e.length;o++){let s=e[o];if(s===`-h`||s===`--help`){i=!0;continue}if(s===`-v`||s===`--version`){a=!0;continue}if(s===`--noEmit`){n=!0;continue}if(s===`--outDir`){let t=e[o+1];if(typeof t!=`string`||t.startsWith(`-`))throw Error(`tsc: --outDir requires a value`);r=t,o+=1;continue}if(s.startsWith(`--outDir=`)){r=s.slice(9);continue}if(s.startsWith(`-`))throw Error(`tsc: unknown option: ${s}`);t.push(s)}return{files:t,noEmit:n,outDir:r,showHelp:i,showVersion:a}}function nI(e,t){let n=`${vr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${Sr(e)}/${n}`}async function rI(e,t){let n=t||`/`,r=``;for(;n&&n!==r;){let t=n===`/`?`/tsconfig.json`:`${n}/tsconfig.json`;if(await e.exists(t))return t;r=n,n=Sr(n)}return null}function iI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function aI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function oI(e,t,n){let r=iI(t),i=await rI(e,n);if(!i)return{compilerOptions:{...r}};let a;try{a=await e.readFile(i)}catch{return{compilerOptions:{...r}}}let{config:o,error:s}=t.parseConfigFileTextToJson(i,a);return s||!o?{compilerOptions:{...r}}:{compilerOptions:{...r,...aI(o)}}}function sI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
|
|
2842
|
+
`);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function cI(e,t){let n=t.toLowerCase();return n.endsWith(`.tsx`)?e.ScriptKind.TSX:n.endsWith(`.jsx`)?e.ScriptKind.JSX:n.endsWith(`.js`)||n.endsWith(`.mjs`)||n.endsWith(`.cjs`)?e.ScriptKind.JS:e.ScriptKind.TS}function lI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function uI(e,t,n,r){let{outputText:i,diagnostics:a}=lI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>sI(e,t)),s=o.length>0?`${o.join(`
|
|
2843
|
+
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function dI(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,n);if(!await t.fs.exists(a))return{stderr:`tsc: ${n}: no such file\n`,hadError:!0};let o;try{o=await t.fs.readFile(a)}catch(e){return{stderr:`tsc: ${n}: ${e instanceof Error?e.message:String(e)}\n`,hadError:!0}}cI(e,a);let{outputText:s,diagnostics:c}=lI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${sI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,nI(a,r.outDir));try{await t.fs.writeFile(d,s)}catch(e){l.push(`tsc: ${d}: ${e instanceof Error?e.message:String(e)}\n`),u=!0}return{stderr:l.join(``),hadError:u}}async function fI(e,t){let n;try{n=tI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:eI,stderr:``,exitCode:0}};let r;try{r=await hr($F(t))}catch(e){return{done:{stdout:``,stderr:`tsc: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}return n.showVersion?{done:{stdout:`Version ${r.version}\n`,stderr:``,exitCode:0}}:{parsed:n,ts:r}}function pI(){return S(`tsc`,async(e,t)=>{let n=await fI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await oI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?uI(i,r,a,e):{stdout:eI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await dI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const mI=[`**/*.test.{js,ts}`];function hI(e,t){let n,r=1;if(e===`--reporter`)n=t,r=2;else if(e.startsWith(`--reporter=`))n=e.slice(11);else return null;if(n!==`tap`&&n!==`spec`)throw Error(`tst: --reporter must be tap or spec`);return{reporter:n,consumed:r}}function gI(e,t){return e===`--coverage`?{consumed:1}:e===`--coverage-dir`&&t!==void 0?{coverageDir:t,consumed:2}:e.startsWith(`--coverage-dir=`)?{coverageDir:e.slice(15),consumed:1}:null}function _I(e){let t=[],n=`tap`,r=!1,i=!1,a=``;for(let o=0;o<e.length;o++){let s=e[o];if(s===`-h`||s===`--help`){r=!0;continue}let c=hI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=gI(s,e[o+1]);if(l){i=!0,l.coverageDir!==void 0&&(a=l.coverageDir),l.consumed===2&&(o+=1);continue}if(s.startsWith(`-`))throw Error(`tst: unknown option: ${s}`);t.push(s)}return{globs:t.length>0?t:[...mI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function vI(e){let t=e.indexOf(`{`);if(t===-1)return[e];let n=e.indexOf(`}`,t);if(n===-1)return[e];let r=e.slice(0,t),i=e.slice(n+1),a=e.slice(t+1,n).split(`,`),o=[];for(let e of a)for(let t of vI(`${r}${e}${i}`))o.push(t);return o}function yI(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t+=`(?:.*/)?`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):`.+^$()[]|\\`.includes(r)?(t+=`\\${r}`,n+=1):(t+=r,n+=1)}return RegExp(`^${t}$`)}async function bI(e,t,n){let r=n.flatMap(vI).map(yI),i=new Set,a=t===`/`?``:t;async function o(t){let n;try{n=await e.readdir(t)}catch{return}for(let s of n){if(s===`node_modules`||s.startsWith(`.`))continue;let n=t===`/`?`/${s}`:`${t}/${s}`,c=!1;try{c=(await e.stat(n)).isDirectory}catch{continue}if(c){await o(n);continue}let l=n.startsWith(`${a}/`)?n.slice(a.length+1):n;r.some(e=>e.test(l))&&i.add(n)}}return await o(t),[...i].sort()}let xI=null;async function SI(e){if(xI)return xI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return xI=`
|
|
2844
2844
|
if (typeof process !== 'undefined' && !process.versions) {
|
|
2845
2845
|
try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
|
|
2846
2846
|
}
|
|
2847
2847
|
const __tst_assert_exports = (function () {
|
|
2848
2848
|
const module = { exports: {} };
|
|
2849
2849
|
const exports = module.exports;
|
|
2850
|
-
${e.transpileModule(
|
|
2850
|
+
${e.transpileModule(ZF,{compilerOptions:t,fileName:`assert.js`}).outputText}
|
|
2851
2851
|
return module.exports;
|
|
2852
2852
|
})();
|
|
2853
2853
|
const __tst_module_exports = (function () {
|
|
2854
2854
|
const module = { exports: {} };
|
|
2855
2855
|
const exports = module.exports;
|
|
2856
|
-
${e.transpileModule(
|
|
2856
|
+
${e.transpileModule(QF,{compilerOptions:t,fileName:`tst.js`}).outputText.replace(/require\(["']\.\/assert\.js["']\)/g,`__tst_assert_exports`).replace(/\bimport\.meta\b/g,`({url:""})`).replace(/await\s+import\(['"](?:worker_threads|fs|path)['"]\)/g,`await Promise.reject(new Error("tst: fork mode is not supported in the realm"))`)}
|
|
2857
2857
|
return module.exports;
|
|
2858
2858
|
})();
|
|
2859
2859
|
const __tst = __tst_module_exports.default || __tst_module_exports;
|
|
2860
2860
|
__tst.manual = true;
|
|
2861
|
-
`.trim(),
|
|
2862
|
-
`)}}`,d=
|
|
2861
|
+
`.trim(),xI}function CI(e,t=new Map){return e.replace(/(^|[^\w$.])require\(\s*(["'`])([^"'`]+)\2\s*\)/g,(e,n,r,i)=>i===`tst`||i===`tst/tst.js`?`${n}__tstReq("tst")`:i===`tst/assert`||i===`tst/assert.js`?`${n}__tstReq("tst/assert")`:t.has(i)?`${n}__localReq(${JSON.stringify(t.get(i))})`:e)}function wI(e){let t=new Set,n=/(?:^|[^\w$.])require\(\s*(["'`])([^"'`]+)\1\s*\)/g,r;for(;(r=n.exec(e))!==null;)t.add(r[2]);return[...t]}async function TI(e,t,n){let r=b(`${t}/${n}`),i=[r];r.endsWith(`.js`)&&i.push(`${r.slice(0,-3)}.ts`),/\.[a-zA-Z0-9]+$/.test(r)||i.push(`${r}.ts`,`${r}.js`);for(let t of i)if(await e.exists(t))return t;return null}async function EI(e,t,n,r,i,a){let o=new Map,s=new Map,c=[{path:n,cjs:r}];for(;c.length>0;){let{path:n,cjs:r}=c.shift(),l=Sr(n),u=new Map;for(let n of wI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await TI(e,l,n);if(!r||(u.set(n,r),o.has(r)))continue;let s=await e.readFile(r);a&&(s=a(s,r));let d=t.transpileModule(s,{compilerOptions:i,fileName:r}).outputText;o.set(r,d),c.push({path:r,cjs:d})}s.set(n,u)}return{modules:o,edgeRewrites:s}}function DI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=CI(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
|
|
2862
|
+
`)}}`,d=CI(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
|
|
2863
2863
|
${f}${e}
|
|
2864
2864
|
const __realmRequire = require;
|
|
2865
2865
|
const { createRequire: __createRequire } = __realmRequire("module");
|
|
@@ -2902,7 +2902,7 @@ await Promise.resolve();
|
|
|
2902
2902
|
await new Promise((resolve) => setTimeout(resolve));
|
|
2903
2903
|
${p}
|
|
2904
2904
|
if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
|
|
2905
|
-
`}const
|
|
2905
|
+
`}const OI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function kI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...OI}}async function AI(e,t){let n;try{n=_I(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:`tst - run *.test.{js,ts} files with the bundled tst runner
|
|
2906
2906
|
|
|
2907
2907
|
Usage:
|
|
2908
2908
|
tst [options] [glob...]
|
|
@@ -2924,7 +2924,7 @@ Notes:
|
|
|
2924
2924
|
with statement counters. nyc/c8 cannot wrap this runner: it is not a
|
|
2925
2925
|
Node child. Istanbul/Babel are not bundled (webapp size-limit); the
|
|
2926
2926
|
TypeScript AST already in process does the rewrite.
|
|
2927
|
-
`,stderr:``,exitCode:0}};let r=await
|
|
2927
|
+
`,stderr:``,exitCode:0}};let r=await bI(t.fs,t.cwd,n.globs);if(r.length===0)return{done:{stdout:``,stderr:`tst: no test files matched ${n.globs.join(` `)}\n`,exitCode:1}};let i;try{i=await hr($F(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await SI(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:kI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function jI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function MI(e,t,n,r){let{ts:i,harness:a,userOpts:o,parsed:s}=t,c=t.coverageMod,l=c?(e,n)=>{let{source:r,map:a}=c.instrumentSource(i,e,n);return t.coverageMaps[n]=a,r}:void 0,u;try{u=await e.fs.readFile(n)}catch(e){return{stdout:``,stderr:`tst: ${n}: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}l&&(u=l(u,n));let d;try{d=i.transpileModule(u,{compilerOptions:o,fileName:n}).outputText}catch(e){return{stdout:``,stderr:`tst: ${n}: transpile error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let f,p;try{({modules:f,edgeRewrites:p}=await EI(e.fs,i,n,d,o,l))}catch(e){return{stdout:``,stderr:`tst: ${n}: local-require resolve error: ${e instanceof Error?e.message:String(e)}\n`,failed:!0}}let m=DI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await ai(m,[`node`,n],e,void 0,{filename:n}),g=h.stdout;if(c){let e=c.extractCoverageCounts(g);g=e.stdout,c.mergeCounts(t.coverageCounts,e.counts)}return{stdout:r?`# ${n}\n${g}`:g,stderr:h.stderr,failed:h.exitCode!==0||jI(g)}}function NI(){return S(`tst`,async(e,t)=>{let n=await AI(e,t);if(`done`in n)return n.done;let r=n.files.length>1,i=``,a=``,o=!1;for(let e of n.files){let s=await MI(t,n,e,r);i+=s.stdout,a+=s.stderr,s.failed&&(o=!0)}if(n.coverageMod){let e=n.coverageMod.resolveCoverageDir(t.cwd,n.parsed.coverageDir,(e,n)=>t.fs.resolvePath(e,n)),r=JSON.stringify({counts:n.coverageCounts,maps:n.coverageMaps},null,2),s=n.coverageMod.toLcov(n.coverageCounts,n.coverageMaps),c=n.coverageMod.coverageSummary(n.coverageCounts,n.coverageMaps);try{await t.fs.writeFile(`${e}/coverage.json`,r),await t.fs.writeFile(`${e}/coverage.lcov`,s)}catch(t){a+=`tst: writing coverage to ${e}: ${t instanceof Error?t.message:String(t)}\n`,o=!0}i+=`\n${c}`}return{stdout:i,stderr:a,exitCode:+!!o}})}const PI=[],FI=`usage: theme <subcommand> [args]
|
|
2928
2928
|
|
|
2929
2929
|
Subcommands:
|
|
2930
2930
|
list List available preset and custom themes
|
|
@@ -2933,23 +2933,23 @@ Subcommands:
|
|
|
2933
2933
|
reset Reset to the default theme
|
|
2934
2934
|
current Show the currently active theme
|
|
2935
2935
|
export <id> <path> Export a theme to a VFS path
|
|
2936
|
-
`;function
|
|
2937
|
-
`),stderr:``,exitCode:0}}async function
|
|
2938
|
-
`,stderr:``,exitCode:0}}async function
|
|
2936
|
+
`;function II(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function LI(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:FI,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:PI})?{stdout:ot(`theme`,n,FI),stderr:``,exitCode:0}:n===`list`?RI(e):n===`current`?zI(e):n===`reset`?BI(e):n===`apply`?VI(e.slice(1),t):n===`export`?HI(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${FI}`,exitCode:1}})}async function RI(e){let t=C(e.slice(1),{value:PI});if(`error`in t)return II(`list`,t.error);let{PRESETS:n}=await import(`./theme-presets-xiOb9AFN.js`),r=[`Presets:`];for(let e of n)r.push(` ${e.id.padEnd(16)} ${e.name}`);return r.push(``),{stdout:r.join(`
|
|
2937
|
+
`),stderr:``,exitCode:0}}async function zI(e){let t=C(e.slice(1),{value:PI});return`error`in t?II(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
|
|
2938
|
+
`,stderr:``,exitCode:0}}async function BI(e){let t=C(e.slice(1),{value:PI});if(`error`in t)return II(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
|
|
2939
2939
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
2940
|
-
`,exitCode:1}}async function
|
|
2940
|
+
`,exitCode:1}}async function VI(e,t){let n=C(e,{value:PI});if(`error`in n)return II(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
|
|
2941
2941
|
`,exitCode:1};let r=y();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
2942
2942
|
`,exitCode:1};let i=n.positionals[0],{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===i);if(o){let e=JSON.stringify(o);return await r.call(`theme-apply`,{themeJson:e,action:`apply`}),{stdout:`Applied theme: ${o.name}\n`,stderr:``,exitCode:0}}let s=t.fs.resolvePath(t.cwd,i),c;try{c=await t.fs.readFile(s)}catch{return{stdout:``,stderr:`theme apply: "${i}" is not a known preset id and file not found at ${s}\n`,exitCode:1}}try{let e=JSON.parse(c);if(!e.id||!e.name||!e.base||!e.tokens)return{stdout:``,stderr:`theme apply: invalid theme file (missing id, name, base, or tokens)
|
|
2943
2943
|
`,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
|
|
2944
|
-
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function
|
|
2945
|
-
`,exitCode:1};let[r,i]=n.positionals,{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===r);if(!o)return{stdout:``,stderr:`theme export: unknown preset id "${r}"\n`,exitCode:1};let s=t.fs.resolvePath(t.cwd,i);try{await t.fs.writeFile(s,JSON.stringify(o,null,2))}catch(e){return{stdout:``,stderr:`theme export: write failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:`Exported "${o.name}" to ${s}\n`,stderr:``,exitCode:0}}const
|
|
2946
|
-
`),stderr:``,exitCode:0}}function
|
|
2944
|
+
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function HI(e,t){let n=C(e,{value:PI});if(`error`in n)return II(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
|
|
2945
|
+
`,exitCode:1};let[r,i]=n.positionals,{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===r);if(!o)return{stdout:``,stderr:`theme export: unknown preset id "${r}"\n`,exitCode:1};let s=t.fs.resolvePath(t.cwd,i);try{await t.fs.writeFile(s,JSON.stringify(o,null,2))}catch(e){return{stdout:``,stderr:`theme export: write failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:`Exported "${o.name}" to ${s}\n`,stderr:``,exitCode:0}}const UI=`unknown`,WI=`usage: uname [-amnorsv]`,GI=[`s`,`n`,`r`,`v`,`m`,`o`];function KI(){return{stdout:[WI,` -s kernel name (SLICC) -n nodename (leader/follower/standalone)`,` -r release (SLICC version) -v build stamp`,` -m machine (realm platform) -o operating system (user agent)`,` -a all of the above, in uname order`,``].join(`
|
|
2946
|
+
`),stderr:``,exitCode:0}}function qI(){let{releasedAt:e,buildId:t}=$e();return e?`${t} (${e})`:t}function JI(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:UI}function YI(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:UI}function XI(e){switch(e){case`s`:return`SLICC`;case`n`:return Qe();case`r`:return $e().version;case`v`:return qI();case`m`:return JI();case`o`:return YI()}}function ZI(e){return{stdout:``,stderr:`uname: ${e}\n${WI}\n`,exitCode:1}}function QI(e){let t=new Set;for(let n of e){if(!n.startsWith(`-`)||n===`-`)return{error:`extra operand '${n}'`};if(n.startsWith(`--`))return{error:`unrecognized option '${n}'`};for(let e of n.slice(1)){if(e===`a`){for(let e of GI)t.add(e);continue}if(!GI.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function $I(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return KI();let t=QI(e);return`error`in t?ZI(t.error):{stdout:`${(t.size>0?GI.filter(e=>t.has(e)):[`s`]).map(XI).join(` `)}\n`,stderr:``,exitCode:0}})}function eL(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
|
|
2947
2947
|
Remove FILE. Symbolic links are removed without following their target.
|
|
2948
2948
|
`,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
|
|
2949
2949
|
`:`unlink: extra operand
|
|
2950
|
-
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e[0]);try{let r=t.fs.lstat?await t.fs.lstat(n):await t.fs.stat(n);return r.isDirectory&&!r.isSymbolicLink?{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': Is a directory\n`,exitCode:1}:(await t.fs.rm(n,{recursive:!1,force:!1}),{stdout:``,stderr:``,exitCode:0})}catch(t){let n=t instanceof Error?t.message:String(t);return{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': ${n}\n`,exitCode:1}}})}function
|
|
2951
|
-
`,stderr:``,exitCode:0}}function
|
|
2952
|
-
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function
|
|
2950
|
+
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e[0]);try{let r=t.fs.lstat?await t.fs.lstat(n):await t.fs.stat(n);return r.isDirectory&&!r.isSymbolicLink?{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': Is a directory\n`,exitCode:1}:(await t.fs.rm(n,{recursive:!1,force:!1}),{stdout:``,stderr:``,exitCode:0})}catch(t){let n=t instanceof Error?t.message:String(t);return{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': ${n}\n`,exitCode:1}}})}function tL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
|
|
2951
|
+
`,stderr:``,exitCode:0}}function nL(e){let t=`.`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-d`){t=e[r+1]??``,r++;continue}if(i.startsWith(`-`))return{kind:`error`,result:{stdout:``,stderr:`unzip: unsupported option ${i}\n`,exitCode:1}};n.push(i)}return n.length<1?{kind:`error`,result:{stdout:``,stderr:`unzip: expected archive path
|
|
2952
|
+
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function rL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!Tr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=Sr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function iL(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return tL();let n=nL(e);if(n.kind===`error`)return n.result;let r=t.fs.resolvePath(t.cwd,n.archive),i=t.fs.resolvePath(t.cwd,n.destination);await t.fs.mkdir(i,{recursive:!0});let a=await t.fs.readFileBuffer(r),o=Dt(a),s=0;for(let[e,n]of Object.entries(o)){let r=await rL(t,i,e,n);if(r===!0)s++;else if(r!==!1)return r}return{stdout:`extracted ${s} file(s) to ${i}\n`,stderr:``,exitCode:0}})}const aL=`ai-ecoverse/slicc`,oL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,sL=`packages/vfs-root`,cL=3e4,lL=[`${sL}/workspace/skills/`,`${sL}/shared/sprinkles/`,`${sL}/shared/sounds/`,`${sL}/shared/GELATIERE.md`,`${sL}/shared/wiki/WIKI.md`,`${sL}/etc/`],uL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function dL(){return Object.fromEntries(uL.map(e=>[e,0]))}function fL(e,t,n,r){let i=dL();for(let e of n)i[e.classification]+=1;return`${JSON.stringify({ok:r.length===0&&i[`needs-review`]===0,from:e,to:t,results:n.map(({path:e,classification:t,sidecar:n})=>({path:e,status:t,...n?{sidecar:n}:{}})),summary:i,errors:r})}\n`}function pL(e){if(e[0]!==`apply`)throw Error(oL);let t=new Map;for(let n of e.slice(1)){let e=n.match(/^--(from|to)=(.+)$/);if(!e)throw Error(`unsupported argument: ${n}`);t.set(e[1],e[2])}let n=t.get(`from`)??``,r=t.get(`to`)??``,i=/^v?[0-9][0-9A-Za-z.+_-]*$/;if(!i.test(n)||!i.test(r))throw Error(`both --from and --to must be release versions`);return{from:n,to:r}}function mL(e){return e.startsWith(`v`)?e:`v${e}`}function hL(e){if(!lL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)||t.startsWith(`/workspace/skills/`)&&he()?null:t}async function gL(e,t){let n,r;try{n=await Promise.race([e(t,{method:`GET`,headers:{Accept:`application/json`}}),new Promise((e,t)=>{r=setTimeout(()=>t(Error(`request timed out after ${cL}ms`)),cL)})])}catch(e){let n=e instanceof Error?e.message:String(e);throw Error(`fetch failed for ${t}: ${n}`)}finally{r!==void 0&&clearTimeout(r)}if(n.status<200||n.status>=300)throw Error(`fetch failed for ${t}: HTTP ${n.status} ${n.statusText}`);return n}async function _L(e,t){let n=await gL(t,`https://api.github.com/repos/${aL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=be(n.body);if(r.truncated)throw Error(`bundled file discovery was truncated for ${e}`);if(!Array.isArray(r.tree))throw Error(`invalid bundled file discovery response for ${e}`);let i=new Map;for(let e of r.tree){if(e.type!==`blob`||typeof e.path!=`string`)continue;let t=hL(e.path);t&&i.set(t,e.path)}return i}function vL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${aL}/${encodeURIComponent(e)}/${n}`}function yL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function bL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function xL(e,t){if(!await e.exists(t))return;let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)}async function SL(e,t,n,r,i){let a=`${t}.upgrade-${mL(n)}-to-${mL(r)}.conflict`;if(!i.has(a)&&!await e.exists(a))return i.add(a),a;for(let t=1;;t+=1){let n=`${a}.${t}`;if(!i.has(n)&&!await e.exists(n))return i.add(n),n}}async function CL(e,t,n,r,i,a,o){let s=await xL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:yL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(yL(i,a)||yL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(yL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(bL);if(c!==null&&l!==null&&u!==null){let i=ze(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${mL(n)}:${t}`,other:`${mL(r)}:${t}`}}),a=new TextEncoder().encode(i.content);return i.conflicts===0?{path:t,classification:`merged-clean`,content:a}:{path:t,classification:`needs-review`,content:a,sidecar:await SL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await SL(e.fs,t,n,r,o)}}async function wL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function TL(e,t){let n=t.filter(e=>e.content!==void 0),r=await Promise.all(n.map(async t=>{let n=t.sidecar??t.path;return{path:n,content:await xL(e,n)}})),i=[];for(let t=0;t<n.length;t+=1){let a=n[t],o=r[t];try{await e.writeFile(o.path,a.content),i.push(o)}catch(t){let n=[];for(let t of[o,...i.slice().reverse()])try{await wL(e,t)}catch(e){n.push(`${t.path}: ${e instanceof Error?e.message:String(e)}`)}let r=t instanceof Error?t.message:String(t),a=n.length===0?`all writes rolled back`:`rollback failed (${n.join(`; `)})`;throw Error(`apply failed for ${o.path}: ${r}; ${a}`)}}}async function EL(e,t,n){let r=mL(t),i=mL(n),[a,o]=await Promise.all([_L(r,e.fetch),_L(i,e.fetch)]),s=[...new Set([...a.keys(),...o.keys()])].sort(),c=await Promise.all(s.map(async t=>{let[n,s]=await Promise.all([a.has(t)?gL(e.fetch,vL(r,a.get(t))).then(e=>Se(e.body)):void 0,o.has(t)?gL(e.fetch,vL(i,o.get(t))).then(e=>Se(e.body)):void 0]);return{path:t,base:n,theirs:s}})),l=new Set(s),u=[];for(let{path:r,base:i,theirs:a}of c)u.push(await CL(e,r,t,n,i,a,l));return await TL(e.fs,u),u}async function DL(e){let{version:t,releasedAt:n,buildId:r}=$e(),i=[],a=null,o=e.getLastSeen??et();if(!o)i.push(`last-seen version unavailable: no reader registered in this runtime`);else try{a=await o()}catch(e){i.push(`last-seen version unavailable: ${e instanceof Error?e.message:String(e)}`)}let s=a!==null&&a!==t;return`${JSON.stringify({ok:i.length===0,version:t,releasedAt:n,build:r,lastSeen:a,mergePending:s,...s?{apply:`upgrade apply --from=${a} --to=${t}`}:{},errors:i})}\n`}function OL(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${oL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:fL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await DL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=pL(t));let i=await EL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:fL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:fL(n,r,[],[t]),stderr:``,exitCode:1}}})}const kL=`usage: uptime [-p|--pretty] [-s|--since]`,AL=`${kL}
|
|
2953
2953
|
|
|
2954
2954
|
Print how long this SLICC has been running. The clock starts when the browser
|
|
2955
2955
|
window was last loaded — a reload is a reboot.
|
|
@@ -2965,7 +2965,7 @@ The load average is the average number of live kernel processes over the last
|
|
|
2965
2965
|
processes are retained in bounded numbers, so a long burst of short commands
|
|
2966
2966
|
can under-report the older windows. The user count is always 1: a SLICC
|
|
2967
2967
|
runtime has one user identity (see \`id\`).
|
|
2968
|
-
`,
|
|
2968
|
+
`,jL=[1,5,15],ML=6e4,NL=60*ML,PL=24*NL;function FL(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function IL(e,t,n,r){let i=Math.min(n,Math.max(1,t-r)),a=t-i,o=0;for(let n of e){let e=Math.min(n.finishedAt??t,t);o+=Math.max(0,e-Math.max(n.startedAt,a))}return o/i}function LL(e){let t=Math.max(0,e),n=Math.floor(t/PL),r=Math.floor(t%PL/NL),i=Math.floor(t%NL/ML),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function RL(e){let t=Math.max(0,e),n=[],r=(e,t)=>{e>0&&n.push(`${e} ${t}${e===1?``:`s`}`)};return r(Math.floor(t/PL),`day`),r(Math.floor(t%PL/NL),`hour`),r(Math.floor(t%NL/ML),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function zL(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${`${t.getFullYear()}-${n(t.getMonth()+1)}-${n(t.getDate())}`} ${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function BL(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function VL(e,t,n){let r=jL.map(r=>IL(e,t,r*ML,n).toFixed(2));return` ${BL(t)} up ${LL(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function HL(e){let t=`default`;for(let n of e)switch(n){case`-p`:case`--pretty`:t=`pretty`;break;case`-s`:case`--since`:t=`since`;break;case`-h`:case`--help`:return`help`;case`--version`:return`version`;default:return{error:`unrecognized option '${n}'`}}return t}function UL(e={}){return S(`uptime`,async t=>{let n=HL(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${kL}\n`,exitCode:1};if(n===`help`)return{stdout:AL,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${$e().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():xa();if(n===`since`)return WL(`${zL(i)}\n`);if(n===`pretty`)return WL(`${RL(r-i)}\n`);let a=e.processManager??FL();return WL(VL(a?a.list():[],r,i))})}function WL(e){return{stdout:e,stderr:``,exitCode:0}}const GL=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function KL(e){return jn(e,GL)}function Y(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function qL(e){let t={};return e.has(`--vid`)&&(t.vendorId=Y(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=Y(e.get(`--pid`),`pid`)),e.has(`--class`)&&(t.classCode=Y(e.get(`--class`),`class`)),e.has(`--subclass`)&&(t.subclassCode=Y(e.get(`--subclass`),`subclass`)),e.has(`--protocol`)&&(t.protocolCode=Y(e.get(`--protocol`),`protocol`)),e.has(`--serial`)&&(t.serialNumber=e.get(`--serial`)),Object.keys(t).length>0?[t]:[]}const JL=new Set([`standard`,`class`,`vendor`]),YL=new Set([`device`,`interface`,`endpoint`,`other`]);function XL(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!JL.has(t))throw Error(`invalid --request-type: '${t}'`);if(!YL.has(n))throw Error(`invalid --recipient: '${n}'`);return{requestType:t,recipient:n,request:Y(e.get(`--request`)??`0`,`request`),value:Y(e.get(`--value`)??`0`,`value`),index:Y(e.get(`--index`)??`0`,`index`)}}function ZL(e){let t=_i(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function QL(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function $L(e){return`0x${e.toString(16).padStart(4,`0`)}`}function eR(e){let t=[e.manufacturerName,e.productName].filter(Boolean).join(` `)||`(unknown)`,n=e.serialNumber?` serial=${e.serialNumber}`:``,r=e.opened?` [open]`:``;return`${e.handle}\t${$L(e.vendorId)}:${$L(e.productId)}\t${t}${n}${r}`}function X(e){return{stdout:e,stderr:``,exitCode:0}}function Z(e){return{stdout:``,stderr:`usb: ${e}\n`,exitCode:1}}const tR=`usb - access USB devices via WebUSB
|
|
2969
2969
|
|
|
2970
2970
|
Usage: usb <subcommand> [options]
|
|
2971
2971
|
|
|
@@ -3004,11 +3004,11 @@ Options:
|
|
|
3004
3004
|
-h, --help
|
|
3005
3005
|
|
|
3006
3006
|
Transfers are capped at ${gi} bytes (4 MiB).
|
|
3007
|
-
`;function
|
|
3008
|
-
`):X(`${t.map(
|
|
3009
|
-
`)}\n`)}async function
|
|
3007
|
+
`;function nR(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return X(t)}return X(e.length?`${QL(e)}\n`:``)}async function rR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
|
|
3008
|
+
`):X(`${t.map(eR).join(`
|
|
3009
|
+
`)}\n`)}async function iR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${eR(await t.info(n))}\n`);let r=qL(e),i=je();if(i){let e=await Ax(`usb-device`,r,i);if(e.handle)return X(`${eR(await t.info(e.handle))}\n`);let n=e.info,a=mi();if(!a)return Z(`request: WebUSB unavailable for device re-acquire`);let o=(await a.getDevices()).find(e=>e.vendorId===n.vendorId&&e.productId===n.productId&&(!n.serialNumber||e.serialNumber===n.serialNumber));if(!o)return Z(`request: granted device could not be re-acquired`);let s=hi().register(o);return X(`${eR(pi(s,o))}\n`)}return X(`${eR(await t.request(r))}\n`)}async function aR(e,t,n,r){let i=t[1];if(!i)return Z(`${e}: handle required`);let a=r.has(`--force`);return e===`open`?await n.open(i):e===`close`?await n.close(i,{force:a}):await n.reset(i,{force:a}),X(``)}async function oR(e,t){let[,n,r,i]=e;return!n||r===void 0||i===void 0?Z(`clear-halt: handle, direction and endpoint required`):r!==`in`&&r!==`out`?Z(`clear-halt: direction must be 'in' or 'out', got '${r}'`):(await t.clearHalt(n,r,Y(i,`endpoint`)),X(``))}async function sR(e,t){let[,n,r]=e;return!n||r===void 0?Z(`select-config: handle and value required`):(await t.selectConfig(n,Y(r,`configuration`)),X(``))}async function cR(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return Z(`${e}: handle and interface required`);let o=Y(a,`interface`);return e===`claim`?await n.claim(i,o,{wait:r.has(`--wait`)}):await n.release(i,o),X(``)}async function lR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`control-in: handle and length required`);let o=Y(a,`length`);return o>4194304?Z(`control-in length exceeds 4 MiB limit`):nR((await n.controlIn(i,XL(t),o)).bytes,r)}async function uR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=ZL(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,XL(n),a)).bytesWritten} bytes written\n`)}async function dR(e,t,n,r){let[,i,a,o]=e;if(!i||a===void 0||o===void 0)return Z(`transfer-in: handle, endpoint and length required`);let s=Y(o,`length`);return s>4194304?Z(`transfer-in length exceeds 4 MiB limit`):nR((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function fR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=ZL(t);return o.length>4194304?Z(`transfer-out payload exceeds 4 MiB limit`):X(`${(await r.transferOut(i,Y(a,`endpoint`),o)).bytesWritten} bytes written\n`)}async function pR(e,t,n){let{positionals:r,flags:i,bools:a}=KL(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return rR(n);case`request`:return iR(i,n);case`open`:case`close`:case`reset`:return aR(o,r,n,a);case`clear-halt`:return oR(r,n);case`select-config`:return sR(r,n);case`claim`:case`release`:return cR(o,r,n,a);case`control-in`:return lR(r,i,n,s);case`control-out`:return uR(r,t,i,n);case`transfer-in`:return dR(r,i,n,s);case`transfer-out`:return fR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function mR(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(tR);let n=Yr(de(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await pR(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?Z(`user cancelled or no device selected`):Z(t)}})}const hR=`/workspace/.v86`,gR=`v86 - run an x86 virtual machine (v86 wasm engine)
|
|
3010
3010
|
|
|
3011
|
-
Requires: ${N} v86@${
|
|
3011
|
+
Requires: ${N} v86@${xO}
|
|
3012
3012
|
|
|
3013
3013
|
Usage:
|
|
3014
3014
|
v86 start [boot options] Boot a VM in the background (prints pid)
|
|
@@ -3042,7 +3042,7 @@ Boot options (QEMU-flavored):
|
|
|
3042
3042
|
proxy — no gateway needed, https upstream via the proxy
|
|
3043
3043
|
-vga <MiB> SVGA/VBE video memory (default 8, max 64) —
|
|
3044
3044
|
raise for high-res VESA modes (1080p32 needs ~9)
|
|
3045
|
-
-bios <path> -vgabios <path> BIOS blobs (default ${
|
|
3045
|
+
-bios <path> -vgabios <path> BIOS blobs (default ${hR}/{seabios,vgabios}.bin)
|
|
3046
3046
|
-nographic Serial-only guest (skip VGA)
|
|
3047
3047
|
|
|
3048
3048
|
Notes:
|
|
@@ -3050,19 +3050,19 @@ Notes:
|
|
|
3050
3050
|
(Alpine, FreeDOS, Buildroot Linux) work best.
|
|
3051
3051
|
- The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
|
|
3052
3052
|
- BIOS blobs are not bundled; download once:
|
|
3053
|
-
mkdir -p ${
|
|
3054
|
-
curl -o ${
|
|
3055
|
-
curl -o ${
|
|
3056
|
-
`,
|
|
3057
|
-
mkdir -p ${
|
|
3058
|
-
curl -o ${
|
|
3059
|
-
curl -o ${
|
|
3060
|
-
or pass -bios / -vgabios with explicit VFS paths.`,
|
|
3053
|
+
mkdir -p ${hR}
|
|
3054
|
+
curl -o ${hR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3055
|
+
curl -o ${hR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3056
|
+
`,_R=`v86: BIOS images not found. Download them once:
|
|
3057
|
+
mkdir -p ${hR}
|
|
3058
|
+
curl -o ${hR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3059
|
+
curl -o ${hR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3060
|
+
or pass -bios / -vgabios with explicit VFS paths.`,vR={"-n":yR,"-name":yR,"--name":yR,"-m":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-m requires a positive MiB value`:n>512?`-m ${n} exceeds the 512 MiB cap`:(e.memoryMib=n,null)},"-vga":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-vga requires a positive MiB value`:n>64?`-vga ${n} exceeds the 64 MiB cap`:(e.vgaMemoryMib=n,null)},"-cdrom":(e,t)=>bR(e,`cdrom`,t),"-hda":(e,t)=>bR(e,`hda`,t),"-fda":(e,t)=>bR(e,`fda`,t),"-kernel":(e,t)=>bR(e,`kernel`,t),"-initrd":(e,t)=>bR(e,`initrd`,t),"-append":(e,t)=>bR(e,`append`,t),"-bios":(e,t)=>bR(e,`bios`,t),"-vgabios":(e,t)=>bR(e,`vgabios`,t),"-state":(e,t)=>bR(e,`state`,t),"-fs9p":(e,t)=>/^https?:\/\//u.test(t)?(e.fs9p=t,null):`-fs9p requires an http(s) base URL`,"-net":(e,t)=>{let[n,...r]=t.split(`,`);if(n!==`ne2k`&&n!==`virtio`)return`-net requires ne2k or virtio`;for(let t of r){if(t!==`relay=fetch`)return`-net: unknown option '${t}' (only relay=fetch)`;e.netRelay=`fetch`}return e.net=n,null},"-boot":(e,t)=>t!==`a`&&t!==`c`&&t!==`d`?`-boot requires a, c, or d`:(e.boot=t,null)};function yR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function bR(e,t,n){return e[t]=n,null}const xR=[...Object.keys(vR),`--fps`,`--tail`,`--send`,`--to`];function SR(e){let t={name:`vm0`,memoryMib:128,vgaMemoryMib:8,nographic:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`-nographic`){t.nographic=!0;continue}let i=Object.hasOwn(vR,r)?vR[r]:void 0;if(!i)return{ok:!1,error:`unknown option '${r}'`};let a=n+1<e.length?e[n+1]:null;if(a===null)return{ok:!1,error:`${r} requires a value`};let o=i(t,a);if(o)return{ok:!1,error:o};n++}return!t.cdrom&&!t.hda&&!t.fda&&!t.kernel&&!t.state?{ok:!1,error:`no bootable media (-cdrom, -hda, -fda, -kernel, or -state required)`}:{ok:!0,parsed:t}}function CR(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},readBytes:t=>e.fs.readFileBuffer(t),fromDir:e.cwd}}function Q(e){return{stdout:``,stderr:`v86: ${e}\n`,exitCode:1}}function $(e=``){return{stdout:e,stderr:``,exitCode:0}}function wR(e){let t=[],n=`vm0`;for(let r=0;r<e.length;r++){if(e[r]===`-n`||e[r]===`-name`||e[r]===`--name`){let t=e[r+1];if(t){n=t,r++;continue}}t.push(e[r])}return{name:n,rest:t}}function TR(e){return ha(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function ER(e){return`exitCode`in e}async function DR(e,t,n){let r=e.fs.resolvePath(e.cwd,t);if(!await e.fs.exists(r))return Q(`${n}: no such file: ${t}`);let i=await e.fs.readFileBuffer(r),a=new ArrayBuffer(i.byteLength);return new Uint8Array(a).set(i),{buffer:a}}const OR={a:801,c:306,d:531};function kR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function AR(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(gR);if(t[0]===`--version`)return jR(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:xR}))return $(ot(`v86`,r,gR,{prefix:`v86`}));let i=at(t.slice(1));try{switch(r){case`start`:return await LR(i,n,e);case`ls`:return zR();case`type`:return await UR(i,n);case`key`:return await WR(i,n);case`mouse`:return await KR(i,n);case`screenshot`:return await qR(i,n);case`text`:return await JR(i,n);case`serve`:return YR(i);case`serial`:return XR(i);case`state`:return await ZR(i,n);case`stop`:return await QR(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function jR(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(CR(e))).version} (qemu-flavored CLI)\n`);let n=await DO(CR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(SO)}async function MR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await DR(t,e.bios??`${hR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(_R.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await DR(t,e.vgabios??`${hR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(_R.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function NR(e,t,n){let r=await MR(e,t,n);if(r)return r;for(let[r,i]of[[`cdrom`,`cdrom`],[`hda`,`hda`],[`fda`,`fda`],[`kernel`,`bzimage`],[`initrd`,`initrd`]]){let a=e[r];if(!a)continue;let o=await DR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=OR[e.boot]),e.state){let r=await DR(t,e.state,`-state`);if(`exitCode`in r)return r;n.initial_state=r}return e.fs9p&&(n.filesystem={baseurl:e.fs9p}),e.net&&(n.net_device=e.netRelay===`fetch`?{type:e.net,relay_url:`fetch`}:{type:e.net}),null}const PR=6e4;function FR(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${PR/1e3}s`)),PR);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function IR(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??g();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function LR(e,t,n){let r=SR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(ha(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=CR(t),o=n.loadEngine?await n.loadEngine(a):await wO({ipk:a}),s={wasm_fn:kO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await NR(i,t,s);if(c)return c;let l=new o.V86(s),u={name:i.name,emulator:l,engineVersion:o.version,pid:null,startedAt:Date.now(),bootArgv:[`v86`,`start`,...e],serial:{buffer:``},screen:{mode:`text`,width:0,height:0,frame:null},serve:null},d=n.processManager??kR();if(d){let e=d.spawn({kind:`net`,argv:u.bootArgv,cwd:t.cwd,owner:{kind:`system`}});u.pid=e.pid,e.abort.signal.addEventListener(`abort`,()=>{RR(u,d)})}ma(u);try{if(await FR(l),i.netRelay===`fetch`){let e=IR(l,n);if(e)return await RR(u,d),e}pa(u),await l.run()}catch(e){return await RR(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-DfuJBCKY.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-DKE8ZbX9.js`).then(({registerV86Computer:e})=>e(u)).catch(()=>{});let f=u.pid===null?``:` (pid ${u.pid})`;return $(`VM '${i.name}' booting in the background${f}.\nDrive it with: v86 text -n ${i.name} | v86 screenshot -n ${i.name} | v86 type -n ${i.name} "..."\n`)}async function RR(e,t){ga(e),fa(e.name),import(`./v86-DKE8ZbX9.js`).then(({unregisterV86Computer:t})=>t(e.name)).catch(()=>{});try{e.emulator.is_running()&&await e.emulator.stop()}catch{}try{await e.emulator.destroy()}catch{}t&&e.pid!==null&&t.exit(e.pid,null)}function zR(){let e=da();if(e.length===0)return $(`no VMs running
|
|
3061
3061
|
`);let t=[`NAME PID STATE UP BOOT`];for(let n of e){let e=Math.round((Date.now()-n.startedAt)/1e3),r=e>=60?`${Math.floor(e/60)}m${e%60}s`:`${e}s`;t.push(`${n.name.padEnd(10)} ${String(n.pid??`-`).padEnd(6)} ${(n.emulator.is_running()?`running`:`stopped`).padEnd(9)} ${r.padEnd(9)} `+n.bootArgv.slice(2).join(` `))}return $(`${t.join(`
|
|
3062
|
-
`)}\n`)}function
|
|
3062
|
+
`)}\n`)}function BR(e,t){return`prefer: computer ${e} -c ${t}\n`}async function VR(e,t,n,r){let i=TR(t);if(ER(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-CnfMQAT6.js`).then(e=>e.t),import(`./registry-DfuJBCKY.js`),import(`./v86-DKE8ZbX9.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),HR(await a([`-c`,l,...n],e,{registry:u}),r,l)}function HR(e,t,n){let r=BR(t,n);return e.exitCode===0?$(`${e.stdout}${r}`):e.stderr.includes(`screenshot failed after input`)?$(`${e.stderr}${r}`):{stdout:e.stdout,stderr:e.stderr.replace(/^computer: /u,`v86: `),exitCode:e.exitCode}}async function UR(e,t){let{name:n,rest:r}=wR(e);if(r.length===0){let e=TR(n);return ER(e)?e:Q(`type: no text supplied`)}return VR(t,n,[`type`,`--`,...r],`type`)}async function WR(e,t){let{name:n,rest:r}=wR(e);if(r.length===0){let e=TR(n);return ER(e)?e:Q(`key: no chord supplied`)}return VR(t,n,[`key`,...r],`key`)}const GR=[`left`,`middle`,`right`];async function KR(e,t){let{name:n,rest:r}=wR(e),i=TR(n);if(ER(i))return i;let a=r.indexOf(`--to`);if(a!==-1){let e=r[a+1],i=e?/^(\d+),(\d+)$/u.exec(e):null;return i?VR(t,n,[`--native`,`mousemove`,i[1],i[2]],`mousemove`):Q(`mouse: --to requires <x>,<y>`)}let o=r[0];if(o===`move`){let e=r[1],i=r[2];return e===void 0||i===void 0||!Number.isFinite(Number(e))||!Number.isFinite(Number(i))?Q(`mouse: move requires <dx> <dy>`):VR(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!GR.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),VR(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function qR(e,t){let{name:n,rest:r}=wR(e);return VR(t,n,[`screenshot`,...r],`screenshot`)}async function JR(e,t){let{name:n}=wR(e);return VR(t,n,[`text`],`text`)}function YR(e){let{name:t}=wR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function XR(e){let{name:t,rest:n}=wR(e),r=TR(t);if(ER(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
|
|
3063
3063
|
`);return e?(r.emulator.serial0_send(e),$()):Q(`serial: --send requires text`)}let a=n.indexOf(`--tail`);if(a!==-1){let e=Number.parseInt(n[a+1]??`25`,10);return $(`${r.serial.buffer.split(`
|
|
3064
3064
|
`).slice(-Math.max(1,e)).join(`
|
|
3065
|
-
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function
|
|
3065
|
+
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function ZR(e,t){let{name:n,rest:r}=wR(e),i=TR(n);if(ER(i))return i;let[a,o]=r;if(a!==`save`&&a!==`load`||!o)return Q(`state: expected save|load <file>`);let s=t.fs.resolvePath(t.cwd,o);if(a===`save`){let e=await i.emulator.save_state();return await t.fs.writeFile(s,new Uint8Array(e)),$(`${s} (${e.byteLength} bytes)\n`)}if(!await t.fs.exists(s))return Q(`state: no such file: ${o}`);let c=await t.fs.readFileBuffer(s),l=new ArrayBuffer(c.byteLength);return new Uint8Array(l).set(c),await i.emulator.restore_state(l),$()}async function QR(e,t){let{name:n,rest:r}=wR(e),i=TR(n);if(ER(i))return i;let a=t.processManager??kR();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await RR(i,a),$(`VM '${n}' stopped\n`))}function $R(e={}){return S(`wasm`,async(t,n)=>{let{runWasmCommand:r}=await import(`./run-Cf2apntf.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}const ez=[`--name`,`--filter`,`--scoop`],tz={state:`inactive`,session:null};function nz(){return{stdout:`usage: webhook <command> [options]
|
|
3066
3066
|
|
|
3067
3067
|
Commands:
|
|
3068
3068
|
create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
|
|
@@ -3082,21 +3082,21 @@ Examples:
|
|
|
3082
3082
|
webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
|
|
3083
3083
|
webhook list
|
|
3084
3084
|
webhook delete abc123
|
|
3085
|
-
`,stderr:``,exitCode:0}}function
|
|
3085
|
+
`,stderr:``,exitCode:0}}function rz(e){return e().session?.webhookUrl??null}function iz(e,t,n){return t?_a(t,e):n()?va(self.location.href,e):`(URL unavailable — connect a leader tray)`}function az(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function oz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
|
|
3086
3086
|
`,exitCode:1};let t=y();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
|
|
3087
3087
|
`,exitCode:1};try{return await t.call(`tray-webhook-rotate`,void 0),{stdout:`Rotated webhook delivery secret. Old URLs no longer work; run webhook list for replacement URLs.
|
|
3088
3088
|
`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
|
|
3089
|
-
`,exitCode:1}}}async function
|
|
3090
|
-
`,exitCode:1};let s=
|
|
3091
|
-
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=
|
|
3089
|
+
`,exitCode:1}}}async function sz(e,t,n){let r=C(e.slice(1),{value:ez});if(`error`in r)return{stdout:``,stderr:`webhook create: ${r.error}\n`,exitCode:1};let i=r.values.get(`--name`)??`default`,a=r.values.get(`--filter`),o=ta(r.values.get(`--scoop`),n);if(!t.hasLocalNodeServer()&&a)return{stdout:``,stderr:`webhook create: --filter is not supported in extension mode (CSP forbids dynamic eval) — drop --filter, or use standalone CLI mode
|
|
3090
|
+
`,exitCode:1};let s=uz(t);if(s)return s;let c=await sy();if(!c)return az(`create`);let l=await ly(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=dz(u.id,t),f=`Created webhook "${u.name}"\nID: ${u.id}\nURL: ${d}\n`;return u.scoop&&(f+=`Scoop: ${u.scoop}\n`),u.filter&&(f+=`Filter: ${u.filter}\n`),{stdout:f,stderr:``,exitCode:0}}async function cz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await sy();if(!r)return az(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
|
|
3091
|
+
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=fz(t);return{stdout:pz(i.map(e=>({id:e.id,name:e.name,url:iz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function lz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook delete: ${n.error}\n`,exitCode:1};let r=n.positionals[0];if(n.positionals.length>1)return{stdout:``,stderr:`webhook delete: requires exactly one ID
|
|
3092
3092
|
`,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
|
|
3093
|
-
`,exitCode:1};let i=await sy();if(!i)return
|
|
3094
|
-
`,exitCode:1}}return await i.deleteWebhook(r)?{stdout:`Deleted webhook "${r}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`webhook delete: webhook "${r}" not found\n`,exitCode:1}}function
|
|
3095
|
-
`,exitCode:1}}return null}function
|
|
3093
|
+
`,exitCode:1};let i=await sy();if(!i)return az(`delete`);let a=y();try{if(a){if((await a.call(`tray-webhook-revoke`,{webhookId:r}))?.ok!==!0)throw Error(`revocation not acknowledged`)}else if(t.getLeaderStatus().session?.webhookUrl?.includes(`/wh/`))throw Error(`no leader panel`)}catch{return{stdout:``,stderr:`webhook delete: revocation failed; registration retained, reconnect the leader and retry
|
|
3094
|
+
`,exitCode:1}}return await i.deleteWebhook(r)?{stdout:`Deleted webhook "${r}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`webhook delete: webhook "${r}" not found\n`,exitCode:1}}function uz(e){if(e.hasLocalNodeServer())return null;if(!rz(e.getLeaderStatus)){let t=e.getLeaderStatus().state;return{stdout:``,stderr:(t===`leader`?`webhook create: tray session is not connected yet — wait for the leader to attach`:`webhook create: requires extension-leader mode with a tray worker URL configured (current state: "${t}")`)+`
|
|
3095
|
+
`,exitCode:1}}return null}function dz(e,t){try{return iz(e,rz(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function fz(e){try{return{trayUrlBase:rz(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function pz(e,t,n,r){let i=`Active webhooks:
|
|
3096
3096
|
`;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
|
|
3097
3097
|
`;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
|
|
3098
3098
|
Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
|
|
3099
|
-
`),i}function
|
|
3099
|
+
`),i}function mz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>tz)};return S(`webhook`,async(e,n)=>{if(e.length===0)return nz();let r=e[0];if(w(e,{valueFlags:r===`create`?ez:void 0}))return nz();try{switch(r){case`create`:return await sz(e,t,n.env);case`list`:return await cz(e,t);case`delete`:return await lz(e,t);case`rotate`:return await oz(e);default:return{stdout:``,stderr:`webhook: unknown command "${r}"\n`,exitCode:1}}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`webhook ${r??`?`}: ${t}\n`,exitCode:1}}})}function hz(){return{text:!0,binary:!1,oneMessage:!1,noClose:!1,exitOnEof:!1,unidirectional:!1,unidirectionalReverse:!1,insecure:!1,quiet:!1,verbose:0,nullTerminated:!1,base64:!1,jsonrpc:!1,jsonrpcOmit:!1,bufferSize:65536,connTimeoutMs:3e4,customHeaders:[],showHelp:!1}}function gz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
|
|
3100
3100
|
|
|
3101
3101
|
Minimal websocat client. Sends stdin lines as WebSocket messages and prints
|
|
3102
3102
|
received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
|
|
@@ -3138,14 +3138,14 @@ EXAMPLES:
|
|
|
3138
3138
|
echo 'Page.navigate {"url":"https://example.com"}' \\
|
|
3139
3139
|
| websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
|
|
3140
3140
|
ws://127.0.0.1:9222/devtools/page/<id>
|
|
3141
|
-
`,stderr:``,exitCode:0}}const
|
|
3142
|
-
`)}function
|
|
3143
|
-
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function
|
|
3141
|
+
`,stderr:``,exitCode:0}}const _z=new Set([`-s`,`--server-mode`,`--oneshot`,`--socks5`,`--basic-auth`,`--basic-auth-file`,`--header-to-env`,`--server-header`,`--exec`,`--ws-c-uri`,`--restrict-uri`,`--unlink`,`--strict`,`-S`]);function vz(e,t,n,r){let i=e[t].indexOf(`=`);if(i!==-1&&e[t].startsWith(n))return{value:e[t].slice(i+1),next:t};let a=e[t+1];return a===void 0?(r.error=`websocat: missing value for ${n}\n`,null):{value:a,next:t+1}}function yz(e,t,n,r=`positive integer`){let i=Number(t);return!Number.isFinite(i)||i<=0?(e.error=`websocat: ${n} expects ${r}\n`,null):i}function bz(e,t){let n=Number(t);return!Number.isFinite(n)||n<1e3||n>4999?(e.error=`websocat: --close-status-code expects 1000..4999, got '${t}'\n`,null):n}function xz(e,t){let n={"-t":()=>{e.text=!0,e.binary=!1},"--text":()=>{e.text=!0,e.binary=!1},"-b":()=>{e.binary=!0,e.text=!1},"--binary":()=>{e.binary=!0,e.text=!1},"-1n":()=>{e.oneMessage=!0,e.noClose=!0},"-n1":()=>{e.oneMessage=!0,e.noClose=!0},"-1":()=>{e.oneMessage=!0},"--one-message":()=>{e.oneMessage=!0},"-n":()=>{e.noClose=!0},"--no-close":()=>{e.noClose=!0},"-E":()=>{e.exitOnEof=!0},"--exit-on-eof":()=>{e.exitOnEof=!0},"-u":()=>{e.unidirectional=!0},"--unidirectional":()=>{e.unidirectional=!0},"-U":()=>{e.unidirectionalReverse=!0},"--unidirectional-reverse":()=>{e.unidirectionalReverse=!0},"-k":()=>{e.insecure=!0},"--insecure":()=>{e.insecure=!0},"-q":()=>{e.quiet=!0},"-0":()=>{e.nullTerminated=!0},"--null-terminated":()=>{e.nullTerminated=!0},"--base64":()=>{e.base64=!0},"--jsonrpc":()=>{e.jsonrpc=!0},"--jsonrpc-omit-jsonrpc":()=>{e.jsonrpcOmit=!0,e.jsonrpc=!0}}[t];return n?(n(),!0):!1}function Sz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function Cz(e,t,n,r,i){let a=vz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function wz(e,t,n,r,i,a,o){let s=vz(t,n,r,e);if(!s)return{stop:!0};let c=yz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function Tz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const Ez=[(e,t,n,r)=>{if(!Tz(r,[`--close-status-code`]))return null;let i=vz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=bz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>Tz(r,[`--close-reason`])?Cz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>Tz(r,[`-B`,`--buffer-size`])?wz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>Tz(r,[`--max-messages`])?wz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>Tz(r,[`--protocol`])?Cz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!Tz(r,[`--ping-interval`]))return null;let i=vz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>Tz(r,[`--conn-timeout`])?wz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>Tz(r,[`-H`,`--header`])?Cz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Dz(e,t,n,r){for(let i of Ez){let a=i(e,t,n,r);if(a)return a}return null}function Oz(e){e.closeReason!==void 0&&e.closeStatus===void 0&&(e.error=`websocat: --close-reason requires --close-status-code (the WebSocket close frame cannot carry a reason without a status code)
|
|
3142
|
+
`)}function kz(e){let t=hz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(_z.has(r)||_z.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(xz(t,r)||Sz(t,r))continue;let i=Dz(t,e,n,r);if(i){if(`stop`in i)return t;n=i.nextIndex;continue}if(r.startsWith(`-`))return t.error=`websocat: unknown flag '${r}'\n`,t;if(t.url)return t.error=`websocat: extra positional argument '${r}' — advanced mode is not supported\n`,t;t.url=r}return Oz(t),t}function Az(e,t){if(!e)return[];let n=t?`\0`:`
|
|
3143
|
+
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function jz(e,t,n){let r=e.trim();if(!r)return e;let i=r.search(/\s/),a=i===-1?r:r.slice(0,i),o=i===-1?``:r.slice(i+1).trim(),s=[];if(o)try{s=JSON.parse(o)}catch{s=[o]}let c={id:t,method:a,params:s};return n||(c.jsonrpc=`2.0`),JSON.stringify(c)}function Mz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function Nz(e){if(typeof e==`string`)return{bytes:new TextEncoder().encode(e),isBinary:!1};if(e instanceof ArrayBuffer)return{bytes:new Uint8Array(e),isBinary:!0};if(ArrayBuffer.isView(e)){let t=e;return{bytes:new Uint8Array(t.buffer,t.byteOffset,t.byteLength),isBinary:!0}}return{bytes:new TextEncoder().encode(String(e)),isBinary:!1}}const Pz=1e4;function Fz(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function Iz(){let e=!1,t=Fz();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function Lz(e,t){return e.length?e.join(t)+t:``}function Rz(e){return e.length?e.join(`
|
|
3144
3144
|
`)+`
|
|
3145
|
-
`:``}function
|
|
3146
|
-
`,a=
|
|
3147
|
-
`);if(!/^wss?:\/\//i.test(r.url))return
|
|
3148
|
-
`,exitCode:1}}function
|
|
3145
|
+
`:``}function zz(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function Bz(e,t){e.verbose<1||(e.customHeaders.length>0&&zz(e,t,`-H/--header is accepted for parity but browsers do not allow setting WebSocket request headers; only --protocol is honored`),e.pingInterval!==void 0&&zz(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&zz(e,t,`-k/--insecure has no effect in browsers`))}function Vz(e,t){try{let n=t.protocol?new e(t.url,t.protocol):new e(t.url);return n.binaryType=`arraybuffer`,{ws:n}}catch(e){return{error:`websocat: connect failed: ${e instanceof Error?e.message:String(e)}\n`}}}function Hz(e,t,n,r){if(n.outLines.length<Pz){n.outLines.push(r);return}n.droppedForOverflow===0&&zz(e,t,`output buffer reached ${Pz} messages; dropping further inbound messages — use -1, --max-messages, or pipe to a file with a different tool for long-running streams`),n.droppedForOverflow+=1}function Uz(e,n,r){let{bytes:i,isBinary:a}=Nz(r);return i.length>e.bufferSize&&(zz(e,n,`inbound message of ${i.length} bytes exceeds --buffer-size ${e.bufferSize}; truncating`),i=i.slice(0,e.bufferSize)),a&&e.base64?t(i):Mz(i)}function Wz(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function Gz(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function Kz(e,t){setTimeout(()=>{Gz(t,e.closeStatus??1e3,e.closeReason)},0)}function qz(e,t,n){let r=Az(n,t.nullTerminated),i=1,a=0,o=t.oneMessage?r.slice(0,1):r;for(let n of o){let r=n;t.jsonrpc&&(r=jz(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function Jz(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&Kz(t,e)}async function Yz(e,t,n){let r=[];Bz(e,r);let i=e.nullTerminated?`\0`:`
|
|
3146
|
+
`,a=Vz(n,e);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let{ws:o}=a,s={outLines:[],droppedForOverflow:0,received:0,finishing:!1},c=!1,l=Fz(),u=Iz(),d=0,f=!1,p=setTimeout(()=>{f=!0,Gz(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}Gz(o,e.closeStatus??1e3,e.closeReason)};o.onopen=()=>{clearTimeout(p),c=!0,l.resolve()},o.onmessage=t=>{if(!s.finishing){if(!e.unidirectional){let n=Uz(e,r,t.data);Hz(e,r,s,n)}s.received+=1,Wz(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(zz(e,r,`websocket error`),d=1,c||l.reject(Error(`connect failed`)))},o.onclose=t=>{if(clearTimeout(p),f){u.settle(124);return}e.verbose>=1&&zz(e,r,`closed code=${t.code} reason=${JSON.stringify(t.reason||``)}`),d===0&&t.code!==1e3&&t.code!==1005&&t.code!==1001&&(d=1),c||l.reject(Error(`connect closed (code ${t.code})`)),u.settle(d)};try{await l.promise}catch(e){clearTimeout(p);let t=e instanceof Error?e.message:String(e);return{stdout:Lz(s.outLines,i),stderr:Rz(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&Kz(e,o):Jz(o,e,qz(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&zz(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:Lz(s.outLines,i),stderr:Rz(r),exitCode:h}}function Xz(e){return{stdout:``,stderr:e,exitCode:2}}function Zz(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function Qz(e,t,n={}){let r=kz(e);if(r.showHelp)return gz();if(r.error)return Xz(r.error);if(!r.url)return Xz(`websocat: missing ws:// or wss:// URL (use --help for usage)
|
|
3147
|
+
`);if(!/^wss?:\/\//i.test(r.url))return Xz(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=Zz(n);return i?Yz(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
|
|
3148
|
+
`,exitCode:1}}function $z(){return S(`websocat`,async(e,t)=>Qz(e,{stdin:P(t.stdin)}))}function eB(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const tB={commands:new Map,collisions:[]};async function nB(e,t){let n=or(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?lr(e.fs,n):tB}async function rB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?bi(e.fs):new Map}async function iB(e){return e.scriptCatalog?e.scriptCatalog.getWasmCommands():new Map}function aB(e,t){let n=e.script?`script`:`wasm`;return`${e.glue} (${n}, ${e.pkg}${t?`, ${t}`:``})`}function oB(e,{jshPath:t,collision:n,wasm:r,wf:i}){let a=[`/usr/bin/${e}`];if((t||r||i)&&a.push(` (shadowed by built-in ${e})`),r&&a.push(` (shadowed ${aB(r)})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)a.push(` (shadowed ${t})`)}return a}function sB(e,{collision:t,wasm:n,wf:r}){let i=[e];for(let e of t?.shadowedPaths??[])i.push(` (shadowed ${e})`);return n&&i.push(` ${aB(n,`shadowed by .jsh`)}`),r&&i.push(` ${r.path} (workflow, shadowed by .jsh)`),i}function cB(e,t,n,r,i){let{jshPath:a,wasm:o,wf:s}=t;if(n.has(e))return{lines:oB(e,t),found:!0};if(a)return{lines:sB(a,t),found:!0};if(o){let e=[aB(o)];return s&&e.push(` ${s.path} (workflow, shadowed by wasm)`),{lines:e,found:!0}}return s?{lines:[`${s.path} (workflow)`],found:!0}:r.has(e)&&!i.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function lB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return S(`which`,async(e,n)=>{if(w(e))return{stdout:`which - locate a command
|
|
3149
3149
|
|
|
3150
3150
|
Usage: which <command> [command...]
|
|
3151
3151
|
|
|
@@ -3157,9 +3157,9 @@ Prints the path of the given command(s).
|
|
|
3157
3157
|
|
|
3158
3158
|
Exit code 0 if all commands found, 1 if any not found.
|
|
3159
3159
|
`,stderr:``,exitCode:0};let r=C(e,{});if(`error`in r)return{stdout:``,stderr:`which: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return{stdout:``,stderr:`which: missing argument
|
|
3160
|
-
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await
|
|
3160
|
+
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await nB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await rB(t),u=await iB(t),d=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,f=new Set(t.getScriptRegisteredNames?.()??[]),p=[],m=!0;for(let e of r.positionals){let t=cB(e,{jshPath:s.get(e),collision:c.get(e),wasm:u.get(e),wf:l.get(e)},d,a,f);p.push(...t.lines),t.found||(m=!1)}return{stdout:p.length>0?p.join(`
|
|
3161
3161
|
`)+`
|
|
3162
|
-
`:``,stderr:``,exitCode:+!m}})}const
|
|
3162
|
+
`:``,stderr:``,exitCode:+!m}})}const uB=`__slicc_workflows`,dB=String.raw`
|
|
3163
3163
|
class WorkflowError extends Error {}
|
|
3164
3164
|
class WorkflowDeterminismError extends WorkflowError {}
|
|
3165
3165
|
class WorkflowAgentCapError extends WorkflowError {}
|
|
@@ -3278,40 +3278,40 @@ function log(message) {
|
|
|
3278
3278
|
}
|
|
3279
3279
|
const budget = { total: (__WF.budget == null ? null : __WF.budget), spent() { return 0; }, remaining() { return this.total == null ? Infinity : Math.max(0, this.total - this.spent()); } };
|
|
3280
3280
|
function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
|
|
3281
|
-
`;function
|
|
3281
|
+
`;function fB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function pB(e){let t=_B(e);return t===null?{name:null,description:null}:{name:vB(t,`name`),description:vB(t,`description`)}}function mB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function hB(e){return`const __emit = console.log.bind(console);
|
|
3282
3282
|
const __stringify = JSON.stringify.bind(JSON);
|
|
3283
|
-
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${
|
|
3283
|
+
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${mB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function gB(e,t){let n=e.split(`
|
|
3284
3284
|
`);for(let e=n.length-1;e>=0;e--)if(n[e].startsWith(t)){let r=[...n.slice(0,e),...n.slice(e+1)].join(`
|
|
3285
|
-
`).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function
|
|
3285
|
+
`).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function _B(e){let t=/\bmeta\s*=\s*\{/.exec(e);if(!t)return null;let n=t.index+t[0].length-1,r=0;for(let t=n;t<e.length;t++)if(e[t]===`{`)r++;else if(e[t]===`}`&&--r===0)return e.slice(n+1,t);return null}function vB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const yB=e(`workflow-command`),bB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
|
|
3286
3286
|
workflow run --script '<inline js>' [...]
|
|
3287
3287
|
workflow list
|
|
3288
3288
|
workflow status <runId>
|
|
3289
3289
|
workflow stop <runId>
|
|
3290
3290
|
workflow save <runId> <name> [--force]
|
|
3291
3291
|
Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
|
|
3292
|
-
pass --wait to block and print the full result.`,
|
|
3293
|
-
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return
|
|
3292
|
+
pass --wait to block and print the full result.`,xB=new Set([`list`,`status`,`stop`,`save`]);function SB(){return globalThis[uB]}function CB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function wB(e,t,n,r){let i=t[n];switch(i){case`-h`:case`--help`:return{i:n,help:!0};case`--script`:return e.script=t[++n],{i:n};case`--wait`:return e.wait=!0,{i:n};case`--args`:try{e.args=JSON.parse(t[++n]??``),e.hasArgs=!0}catch{return{i:n,error:`workflow: --args must be valid JSON`}}return{i:n};case`--budget`:{let r=Number(t[++n]);return Number.isFinite(r)?(e.budget=r,{i:n}):{i:n,error:`workflow: --budget must be a number`}}case`--concurrency`:{let i=Number(t[++n]);return Number.isFinite(i)?(e.cap=Math.min(r,Math.max(1,Math.trunc(i))),{i:n}):{i:n,error:`workflow: --concurrency must be a number`}}default:return i.startsWith(`-`)?{i:n,error:`workflow: unknown flag '${i}'`}:e.file===void 0?(e.file=i,{i:n}):{i:n,error:`workflow: too many arguments`}}}function TB(e){if(e[0]!==`run`)return e.length===0||e.includes(`-h`)||e.includes(`--help`)?{help:!0}:{error:`workflow: unknown subcommand '${e[0]}' (only 'run' in SP1)`};let t=CB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=wB(n,e,r,t);if(i.help)return{help:!0};if(i.error)return{error:i.error};r=i.i}return n.script===void 0&&n.file===void 0?{error:`workflow: a <file.js> or --script is required`}:n}function EB(e={}){return S(`workflow`,async(t,n)=>{if(xB.has(t[0])&&w(t.slice(1)))return{stdout:bB+`
|
|
3293
|
+
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return MB(t,n);if(t[0]===`save`)return jB(t,n,e);let r=TB(t);if(r.help)return{stdout:bB+`
|
|
3294
3294
|
`,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
|
|
3295
|
-
`,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=
|
|
3296
|
-
`,exitCode:1};let s=
|
|
3297
|
-
`,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const
|
|
3298
|
-
`,exitCode:1};if(!
|
|
3295
|
+
`,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=pB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
|
|
3296
|
+
`,exitCode:1};let s=fB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=fB(),u=hB({prelude:dB,config:{...r.hasArgs?{args:r.args}:{},cap:r.cap??8,budget:r.budget??null,cwd:n.cwd,agentCwd:c},body:i,sentinel:l});return r.wait?DB(u,a,l,o,n):OB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function DB(e,t,n,r,i){let a;try{a=await ai(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return yB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return NB(r,a,n)}async function OB(e){let t=SB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
|
|
3297
|
+
`,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const kB=/^[a-z0-9][a-z0-9-]*$/,AB=`/workspace/.workflows`;async function jB(e,t,n){let r=!1,i=[];for(let t of e.slice(1))t===`--force`?r=!0:i.push(t);let[a,o,...s]=i;if(!a||!o||s.length>0)return{stdout:``,stderr:`usage: workflow save <runId> <name> [--force]
|
|
3298
|
+
`,exitCode:1};if(!kB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=SB()?.getRun(a);if(!c)return{stdout:``,stderr:`workflow: no run '${a}' (only backgrounded runs are saveable; --wait runs are not)\n`,exitCode:1};if(!c.source)return{stdout:``,stderr:`workflow: run '${a}' has no source to save\n`,exitCode:1};let l=`${AB}/${o}.workflow.js`;if(await t.fs.exists(l)){if(!r)return{stdout:``,stderr:`workflow: ${l} already exists (pass --force to overwrite)\n`,exitCode:1}}else if(new Set(t.getRegisteredCommands?.()??[]).has(o))return{stdout:``,stderr:`workflow: '${o}' is already a command — choose another name\n`,exitCode:1};await t.fs.mkdir(AB,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){yB.warn(`workflow save: command re-sync failed; workflow saved, will register on next sync`,{name:o,error:e instanceof Error?e.message:String(e)})}return{stdout:`saved workflow '${o}' → ${l}\nrun it as '${o}' (or 'workflow run ${l}' if a built-in/.jsh shadows the name)\n`,stderr:``,exitCode:0}}async function MB(e,t){let n=SB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
|
|
3299
3299
|
`,exitCode:1};let e=n.listRuns().map(e=>`${e.id} ${e.status.padEnd(7)} ${e.agentsDone}/${e.agentsStarted} ${e.name??``}`);return{stdout:(e.length?e.join(`
|
|
3300
3300
|
`):`(no runs)`)+`
|
|
3301
3301
|
`,stderr:``,exitCode:0}}let r=e[1],i=n?.getRun(r??``);if(!i)return{stdout:``,stderr:`workflow: no run '${r}'\n`,exitCode:1};if(e[0]===`status`)return{stdout:[`run ${i.id} (${i.name??`unnamed`}) status=${i.status}`,`agents ${i.agentsDone}/${i.agentsStarted} phase=${i.currentPhase??`-`}`,i.resultPath?`result: ${i.resultPath}`:``,i.preview?`preview: ${i.preview}`:``,i.error?`error: ${i.error}`:``].filter(Boolean).join(`
|
|
3302
3302
|
`)+`
|
|
3303
|
-
`,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function
|
|
3303
|
+
`,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function NB(e,t,n){let{result:r,log:i,hadResult:a}=gB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?PB(i)+`
|
|
3304
3304
|
`:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
|
|
3305
3305
|
`),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
|
|
3306
|
-
`,stderr:t.stderr,exitCode:0}}function
|
|
3306
|
+
`,stderr:t.stderr,exitCode:0}}function PB(e){return e.split(`
|
|
3307
3307
|
`).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
|
|
3308
|
-
`)}function
|
|
3308
|
+
`)}function FB(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function IB(e){if(e==null)throw Error(`missing option value`);let t=e.startsWith(`-`),n=t||e.startsWith(`+`)?e.slice(1):e,r;if(/^0x[0-9a-fA-F]+$/.test(n))r=parseInt(n.slice(2),16);else if(/^[0-9]+$/.test(n))r=parseInt(n,10);else throw Error(`invalid number: ${e}`);return t?-r:r}function LB(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function RB(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function zB(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function BB(e,t,n,r,i){let a=[];for(let o=0;o<e.length;o+=t){let s=Math.min(o+t,e.length),c=(i+o).toString(16).padStart(8,`0`),l=``;for(let i=0;i<t;i++)n>0&&i>0&&i%n===0&&(l+=` `),l+=o+i<s?LB(e[o+i],r):` `;let u=``;for(let t=o;t<s;t++)u+=e[t]>=32&&e[t]<=126?String.fromCharCode(e[t]):`.`;a.push(`${c}: ${l} ${u}`)}return a.length?a.join(`
|
|
3309
3309
|
`)+`
|
|
3310
|
-
`:``}function
|
|
3311
|
-
`}return r}function
|
|
3310
|
+
`:``}function VB(e,t,n){let r=``;for(let i=0;i<e.length;i+=t){let a=``;for(let r=0;r<t&&i+r<e.length;r++)a+=LB(e[i+r],n);r+=a+`
|
|
3311
|
+
`}return r}function HB(e,t,n,r){let i=Array.from(e,e=>`0x${LB(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
|
|
3312
3312
|
`);return r===null?i.length?o+`
|
|
3313
|
-
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function
|
|
3314
|
-
`)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const
|
|
3313
|
+
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function UB(e){let t=e.replace(/[^0-9a-fA-F]/g,``),n=Math.floor(t.length/2),r=new Uint8Array(n);for(let e=0;e<n;e++)r[e]=parseInt(t.substr(e*2,2),16);return r}function WB(e){let t=[],n=0;for(let r of e.split(`
|
|
3314
|
+
`)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const GB={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},KB=[{key:`cols`,exact:[`-c`,`-cols`],attached:/^-c(0x)?[0-9]/},{key:`group`,exact:[`-g`,`-groupsize`],attached:/^-g(0x)?[0-9]/},{key:`length`,exact:[`-l`,`-len`],attached:/^-l(0x)?[0-9]/},{key:`seek`,exact:[`-s`,`-seek`],attached:/^-s[+-]?(0x)?[0-9]/}];function qB(e){let t={upper:!1,plain:!1,include:!1,revert:!1,positional:[]};for(let n=0;n<e.length;n++){let r=e[n],i=GB[r];if(i){t[i]=!0;continue}let a=KB.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=IB(a.exact.includes(r)?e[++n]:r.slice(2));continue}if(r!==`-`&&r.startsWith(`-`)&&r.length>1)throw Error(`invalid option ${r}`);t.positional.push(r)}return t}function JB(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function YB(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=_i(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function XB(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?VB(t,a,e.upper):e.include?HB(t,a,e.upper,i?null:zB(r??``)):BB(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function ZB(e,t){let n=0,r=t;return e.seek!==void 0&&(n=e.seek<0?Math.max(0,r.length+e.seek):Math.min(e.seek,r.length),r=r.subarray(n)),e.length!==void 0&&(r=r.subarray(0,Math.max(0,e.length))),{data:r,base:n}}function QB(){return S(`xxd`,async(e,t)=>{if(JB(e))return{stdout:`usage: xxd [options] [infile [outfile]]
|
|
3315
3315
|
-c cols number of octets per line (default 16; 30 for -p; 12 for -i)
|
|
3316
3316
|
-g bytes number of octets per group (default 2; 0 disables grouping)
|
|
3317
3317
|
-l len stop after len octets
|
|
@@ -3321,10 +3321,10 @@ pass --wait to block and print the full result.`,gB=new Set([`list`,`status`,`st
|
|
|
3321
3321
|
-i output in C include style
|
|
3322
3322
|
-r reverse: convert a hex dump back to binary (-r -p for plain)
|
|
3323
3323
|
-h show this help
|
|
3324
|
-
`,stderr:``,exitCode:0};let n;try{n=
|
|
3325
|
-
`,stderr:``,exitCode:0}}function
|
|
3326
|
-
`,exitCode:1};let i=t.fs.resolvePath(t.cwd,r[0]),a=r.slice(1),o={},s=0;for(let e of a){let r=t.fs.resolvePath(t.cwd,e),i=await t.fs.stat(r),a=(e.startsWith(`/`)?e.slice(1):e.replace(/^\.\//,``))||vr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await
|
|
3327
|
-
`,exitCode:1};let c=Ot(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function
|
|
3324
|
+
`,stderr:``,exitCode:0};let n;try{n=qB(e)}catch(e){return FB(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await YB(t,r,a)}catch{return FB(`${r}: No such file or directory`)}if(n.revert){let e=RB(o),r=n.plain?UB(e):WB(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:RB(r),stderr:``,exitCode:0}}let{data:s,base:c}=ZB(n,o),l=XB(n,s,c,r,a);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),l),{stdout:``,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}})}async function $B(e,t,n,r){if((await e.fs.stat(t)).isFile)return r[n]=await e.fs.readFileBuffer(t),1;let i=await e.fs.readdir(t),a=0;for(let o of i){let i=_r(t,o),s=n?`${n}/${o}`:o;a+=await $B(e,i,s,r)}return a}function eV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
|
|
3325
|
+
`,stderr:``,exitCode:0}}function tV(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return eV();let n=!1,r=[];for(let t of e){if(t===`-r`){n=!0;continue}if(t.startsWith(`-`))return{stdout:``,stderr:`zip: unsupported option ${t}\n`,exitCode:1};r.push(t)}if(r.length<2)return{stdout:``,stderr:`zip: expected archive path and at least one input path
|
|
3326
|
+
`,exitCode:1};let i=t.fs.resolvePath(t.cwd,r[0]),a=r.slice(1),o={},s=0;for(let e of a){let r=t.fs.resolvePath(t.cwd,e),i=await t.fs.stat(r),a=(e.startsWith(`/`)?e.slice(1):e.replace(/^\.\//,``))||vr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await $B(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
|
|
3327
|
+
`,exitCode:1};let c=Ot(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function nV(e){let t;return S(`mcp`,async(n,r)=>{if(!t){let{createMcpCommand:n}=await import(`./mcp-command-BeBM1rHC.js`);t=n({fs:e.fs,scriptCatalog:e.scriptCatalog,connectionManager:e.mcpConnectionManager})}return t.execute(n,r)})}function rV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function iV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[mO(`ipk`,r),mO(`npm`,r),mO(`i`,r),rk(`ipx`,{fs:t,fetch:n}),rk(`npx`,{fs:t,fetch:n}),ab(`di`,{fs:t,fetch:n}),ab(`uv`,{fs:t,fetch:n}),OL({fs:t,fetch:n})]}function aV(e){let t={buildProcessConfig:e.buildProcessConfig};return[`python3`,`python`,`pyodide`].map(e=>LM(e,t))}function oV(e){let t=e.scriptCatalog;return{buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:t&&(()=>t.getWasmCommands()),gitIdentity:e.gitIdentity}}function sV(e={}){let t=[yE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),ae(),hF(),PP(),DP(e.browserAPI,e.fs),xj(e.browserAPI),by(e.browserAPI),wD(e),tV(),iL(),XF(e.fs?{fs:e.fs}:{}),SF(),kF(),EF(),hv(),$R(oV(e)),BS(oV(e)),QB(),lF(`sqlite3`),lF(`sqllite`),pI(),NI(),xx(),Z_(),RA({buildProcessConfig:e.buildProcessConfig}),RA({buildProcessConfig:e.buildProcessConfig},`jsh`),...aV(e),...iV(e),...e.fs?[zS({fs:e.fs})]:[],...e.fs?[Xk({fs:e.fs})]:[],...e.fetch?[AE({fetch:e.fetch,streamFetch:e.streamFetch})]:[],mS(),hS(),DS(),mz(e.webhook),$z(),yy(e.crontask),nV(e),Vj({fs:e.fs,fetch:e.fetch}),RS(),eF(),Sj(),Cj(`pdftk`),Cj(`pdf`),Q_(`biscotto`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Q_(`biscotti`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Nj(`pdftoppm`),Nj(`pdftocairo`),Pj(`pdftotext`),ry(`convert`),ry(`magick`),lB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),LI(),$I(),bD(),xD(),eL(),Zk(),VM(),Uk(),Kb(),$A(),QA(),Bk(),QN(rV(e)),Om(e.gitCredential),eN({fs:e.fs}),EN(),fv(),pv(),mv(`xclip`),mv(`xsel`),TN(),tC(),Ug(),Wg(),wA(e.fs),st(),UA(),Gg({getParentJid:e.getParentJid}),ex(),lM({processManager:e.processManager}),UL({processManager:e.processManager}),ok({processManager:e.processManager}),ik({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...qg(),Yk(),Mk(),mR(),nD(),nS(),AR({processManager:e.processManager}),vv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),pS(),av({registry:e.cherryRuntimeRegistry}),ky(),Fy({fs:e.fs}),Iy({fs:e.fs}),_F(e.sudoCommand),EB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),eB(),NP()];return e.fs&&(Ij(),t.push(...Gn.map(t=>gE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let cV=null;function lV(e){cV=e}function uV(e){cV?.(e)}var dV=zt();const fV={user:`user`,home:pp},pV=new Set([`root`,`nobody`,`nogroup`]),mV=/^[A-Za-z_][A-Za-z0-9_.-]*$/;function hV(e){return{user:mV.test(e.user)&&!pV.has(e.user)?e.user:fV.user,home:e.home.startsWith(`/`)&&!/[:\n]/.test(e.home)?e.home:fV.home}}function gV(e,t){let{user:n,home:r}=hV(t);if(e===`/etc/passwd`)return[`root:x:0:0:root:/root:/bin/bash`,`${n}:x:1000:1000:SLICC user:${r}:/bin/bash`,`nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin`,``].join(`
|
|
3328
3328
|
`);if(e===`/etc/group`)return[`root:x:0:`,`${n}:x:1000:`,`nogroup:x:65534:`,``].join(`
|
|
3329
|
-
`)}function fV(e,t=sV){let n=dV(e,t);return n===void 0?void 0:new TextEncoder().encode(n)}function pV(e){return e===`/etc`?[`group`,`passwd`]:[]}function mV(e){return e?.code===`ENOENT`}const hV=Reflect.get(tt,`DefenseInDepthBox`);function gV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function _V(e,t){if(typeof e!=`string`)return e;let n=gV(t);if(n===`binary`||n===`latin1`){let t=ye(e);if(t)return t}return oV.Buffer.from(e,n)}function vV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}function yV(e){let t=/^[A-Za-z0-9._+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`;return new TextEncoder().encode(`#!/bin/sh\n# SLICC command\nexec ${t} "$@"\n`)}function bV(e,t){let n=pV(e).filter(e=>!t.includes(e));return n.length?[...t,...n].sort():t}function xV(e,t){let n=pV(e).filter(e=>!t.some(t=>t.name===e));if(!n.length)return t;let r=n.map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));return[...t,...r].sort((e,t)=>e.name.localeCompare(t.name))}var SV=class{vfs;registeredCommandsFn=null;identityFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,this.updateMetadataBatch=this.updateMetadataBatch.bind(this),this.symlinkBatch=this.symlinkBatch.bind(this)}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Be(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}setIdentityFn(e){this.identityFn=e}identityFile(e){return fV(e,this.identityFn?.()??sV)}isVirtualBinCommand(e){return e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e)}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=vV(e);if(t===`/usr`||t===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(t.startsWith(`/usr/bin/`)){let e=t.slice(9);if(this.isVirtualBinCommand(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:yV(e).length,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=hV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.readRaw(n),i=gV(t),a=oV.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString(i);return i!==`hex`&&i!==`base64`&&m(a,r),a})}async readFileBuffer(e){return this.trusted(()=>this.readRaw(b(e)))}async readRaw(e){let t=vV(e);if(t.startsWith(`/usr/bin/`)&&this.isVirtualBinCommand(t.slice(9)))return yV(t.slice(9));let n;try{n=await this.vfs.readFile(e,{encoding:`binary`})}catch(t){let n=this.identityFile(e);if(n&&mV(t))return n;throw t}return n instanceof Uint8Array?n:new TextEncoder().encode(n)}identityStat(e,t){let n=this.identityFile(e);if(!(!n||!mV(t)))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:420,size:n.length,mtime:new Date(0)}}async readFileBytes(e){let t=await this.readFileBuffer(e);return oV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(b(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(b(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e);await this.vfs.writeFile(r,_V(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),_V(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:await this.vfs.exists(t)||this.identityFile(t)!==void 0})}async stat(e){return this.trusted(async()=>{let t=b(e);try{return await this.statVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async statVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.statSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:!!n.isSymlink,mode:n.mode??(n.type===`directory`?493:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.stat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async lstat(e){return this.trusted(async()=>{let t=b(e);try{return await this.lstatVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async lstatVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.lstatSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:n.type===`symlink`,mode:n.mode??(n.type===`directory`?493:n.type===`symlink`?511:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.lstat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(vV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return bV(t,n.map(e=>e.name));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),bV(t,r.map(e=>e.name))})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(vV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return xV(t,this.mapFastEntriesToDirents(n));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),xV(t,this.mapAsyncEntriesToDirents(r))})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t),a;try{a=await this.vfs.stat(r)}catch(e){let t=this.identityFile(r);if(!t||!mV(e))throw e;await this.vfs.writeFile(i,t);return}if(a.type===`directory`){if(!n?.recursive)throw new Ve(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}let r=new Set(n.map(e=>e.name));for(let n of pV(e)){let i=r.has(n)?void 0:this.identityFile(x(e,n));i&&await this.vfs.writeFile(x(t,n),i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:b(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:b(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function CV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?CV(e.getUnderlyingFS?.()):null}async function wV(e){let t=ve(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function TV(){let e=ve(`github`);if(!e)return ym;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??ym,...t??[]]}const EV=e(`almost-bash-shell`),DV=`__SLICC_RUN_PID`,OV=`__SLICC_OUTPUT_TEE__`;function kV(e){let t=e?.get(DV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function AV(e){if(!(DV in e)&&!(OV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[DV]:t,[OV]:n,[nm]:r,[jt]:i,[Nt]:a,...o}=e;return o}function jV(e){let t=new AbortController,n=e.filter(e=>e!==void 0),r=()=>t.abort();for(let e of n)e.aborted?t.abort():e.addEventListener(`abort`,r,{once:!0});return{signal:t.signal,release(){for(let e of n)e.removeEventListener(`abort`,r)}}}var MV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;registeredWasmCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;commandAbort=new AbortController;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(kV(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:pp,PATH:sr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return nV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands],fs:e.fs,fetch:t,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,terminal:e.terminal,gateNativeCommand:this.gateNativeCommand,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]},gitCredential:{githubToken:(e,t)=>this.gitCommands.githubCredential(e,t),githubDomains:TV},gitIdentity:()=>this.gitCommands.identity(),mcpConnectionManager:e.mcpConnectionManager})}constructor(t){this.options=t,this.vfsAdapter=new SV(t.fs),this.progress=new _p({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new ap({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:wV}),this.mountCommands=new Ms({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Nm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=CV(i)??CV(a);this.scriptCatalog=t.scriptCatalog??new Si({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||ar(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:Sp(this.progress)}),l=_({progress:Sp(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),Dh(t.fs),wg(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...rt(),...nt()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new it({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:Up(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:sp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(Vm),this.allowedCommands!==null){let e=this.bash;for(let t of nt())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let m=d.map(e=>e.name),h=p??[...rt(),...nt()];this.builtinCommandNames=new Set([...h,...m]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.vfsAdapter.setIdentityFn(()=>({user:this.lastEnv.USER??`user`,home:this.lastEnv.HOME??`/home/user`})),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}cancelActiveCommand(){this.commandAbort.abort(),this.commandAbort=new AbortController}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return ni(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return cr(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await mp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=hp(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd,umask:this.umask});if(typeof r.umask==`number`&&(this.umask=r.umask),r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){EV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){if(aV(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.usesGnuBash())return this.runOnGnuBash(e,t,n,r,i,a);let o=im(e),s={env:{...this.lastEnv,...n===void 0?{}:{[DV]:String(n)},...i===void 0?{}:{[OV]:i},...o?{[nm]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=jV([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Pt(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.flushPendingCommandGrants(),d=kt(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=AV(d.env)),d.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.applyPendingEnvWrites(),d.env?.PWD&&(this.cwd=d.env.PWD),d.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(d.exitCode!==0&&d.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return Mt(await e(d,this.cwd,this.vfsAdapter),d.pipeStatus)}return d}applyPendingEnvWrites(){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}async usesGnuBash(){return!this.options.gnuBash||this.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await this.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let{runWasmCommand:o,withoutRealmDefaults:s}=await import(`./run-Cf2apntf.js`),c=im(e),l={...this.lastEnv,...n===void 0?{}:{[DV]:String(n)},...c?{[nm]:c}:{}},u=i===void 0?void 0:this.outputTees.get(i),d=await fp(e,{env:l,run:(e,i,a)=>o(e,this.wasmContext(i,t,r),{processConfig:this.buildJshProcessConfig(n),gate:this.gateNativeCommand,onOutput:u,fds:a,commands:()=>this.scriptCatalog.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}),f=this.lastEnv.PATH;return d.state&&(this.cwd=d.state.cwd,this.lastEnv=up(s(d.state.env,l),[DV,nm,OV])),this.lastEnv.PATH!==f&&await this.syncJshCommands().catch(()=>void 0),await this.flushPendingCommandGrants(),this.applyPendingEnvWrites(),{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:{...this.lastEnv},...a&&d.state?{pipeStatus:d.state.pipeStatus}:{}}}wasmContext(e,t,n){return{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>this.bash.exec(e,{...t,umask:this.umask})}}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.isTransparentGatingEnabled()||vm.has(e))return null;let r=await this.gateCommandDispatch(e,t,n[nm]);return r?{stderr:r.stderr,exitCode:r.exitCode}:null};isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?qp(t,this.progress):Yp(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t),a=this.outputTees;return{...n,async execute(e,t){let o=t.env?.get(OV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await Zp(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(OV);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=Rp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Bp(t,this.progress,zp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled()||vm.has(e.name))return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(nm))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=$p(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await tm(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=lt(e);if(!n)return;let r=`${dt}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Ve&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
3330
|
-
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(vm.get(e)??e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)
|
|
3329
|
+
`)}function _V(e,t=fV){let n=gV(e,t);return n===void 0?void 0:new TextEncoder().encode(n)}function vV(e){return e===`/etc`?[`group`,`passwd`]:[]}function yV(e){return e?.code===`ENOENT`}const bV=Reflect.get(tt,`DefenseInDepthBox`);function xV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function SV(e,t){if(typeof e!=`string`)return e;let n=xV(t);if(n===`binary`||n===`latin1`){let t=ye(e);if(t)return t}return dV.Buffer.from(e,n)}function CV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}function wV(e){let t=/^[A-Za-z0-9._+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`;return new TextEncoder().encode(`#!/bin/sh\n# SLICC command\nexec ${t} "$@"\n`)}function TV(e,t){let n=vV(e).filter(e=>!t.includes(e));return n.length?[...t,...n].sort():t}function EV(e,t){let n=vV(e).filter(e=>!t.some(t=>t.name===e));if(!n.length)return t;let r=n.map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));return[...t,...r].sort((e,t)=>e.name.localeCompare(t.name))}var DV=class{vfs;registeredCommandsFn=null;identityFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,this.updateMetadataBatch=this.updateMetadataBatch.bind(this),this.symlinkBatch=this.symlinkBatch.bind(this)}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Be(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}setIdentityFn(e){this.identityFn=e}identityFile(e){return _V(e,this.identityFn?.()??fV)}isVirtualBinCommand(e){return e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e)}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=CV(e);if(t===`/usr`||t===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(t.startsWith(`/usr/bin/`)){let e=t.slice(9);if(this.isVirtualBinCommand(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:wV(e).length,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=bV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.readRaw(n),i=xV(t),a=dV.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString(i);return i!==`hex`&&i!==`base64`&&m(a,r),a})}async readFileBuffer(e){return this.trusted(()=>this.readRaw(b(e)))}async readRaw(e){let t=CV(e);if(t.startsWith(`/usr/bin/`)&&this.isVirtualBinCommand(t.slice(9)))return wV(t.slice(9));let n;try{n=await this.vfs.readFile(e,{encoding:`binary`})}catch(t){let n=this.identityFile(e);if(n&&yV(t))return n;throw t}return n instanceof Uint8Array?n:new TextEncoder().encode(n)}identityStat(e,t){let n=this.identityFile(e);if(!(!n||!yV(t)))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:420,size:n.length,mtime:new Date(0)}}async readFileBytes(e){let t=await this.readFileBuffer(e);return dV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(b(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(b(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e);await this.vfs.writeFile(r,SV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),SV(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:await this.vfs.exists(t)||this.identityFile(t)!==void 0})}async stat(e){return this.trusted(async()=>{let t=b(e);try{return await this.statVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async statVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.statSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:!!n.isSymlink,mode:n.mode??(n.type===`directory`?493:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.stat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async lstat(e){return this.trusted(async()=>{let t=b(e);try{return await this.lstatVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async lstatVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.lstatSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:n.type===`symlink`,mode:n.mode??(n.type===`directory`?493:n.type===`symlink`?511:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.lstat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(CV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return TV(t,n.map(e=>e.name));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),TV(t,r.map(e=>e.name))})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(CV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return EV(t,this.mapFastEntriesToDirents(n));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),EV(t,this.mapAsyncEntriesToDirents(r))})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t),a;try{a=await this.vfs.stat(r)}catch(e){let t=this.identityFile(r);if(!t||!yV(e))throw e;await this.vfs.writeFile(i,t);return}if(a.type===`directory`){if(!n?.recursive)throw new Ve(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}let r=new Set(n.map(e=>e.name));for(let n of vV(e)){let i=r.has(n)?void 0:this.identityFile(x(e,n));i&&await this.vfs.writeFile(x(t,n),i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:b(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:b(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function OV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?OV(e.getUnderlyingFS?.()):null}async function kV(e){let t=ve(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function AV(){let e=ve(`github`);if(!e)return ym;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??ym,...t??[]]}const jV=e(`almost-bash-shell`),MV=`__SLICC_RUN_PID`,NV=`__SLICC_OUTPUT_TEE__`;function PV(e){let t=e?.get(MV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function FV(e){if(!(MV in e)&&!(NV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[MV]:t,[NV]:n,[nm]:r,[jt]:i,[Nt]:a,...o}=e;return o}function IV(e){let t=new AbortController,n=e.filter(e=>e!==void 0),r=()=>t.abort();for(let e of n)e.aborted?t.abort():e.addEventListener(`abort`,r,{once:!0});return{signal:t.signal,release(){for(let e of n)e.removeEventListener(`abort`,r)}}}var LV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;registeredWasmCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;commandAbort=new AbortController;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(PV(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:pp,PATH:sr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return sV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands],fs:e.fs,fetch:t,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,terminal:e.terminal,gateNativeCommand:this.gateNativeCommand,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]},gitCredential:{githubToken:(e,t)=>this.gitCommands.githubCredential(e,t),githubDomains:AV},gitIdentity:()=>this.gitCommands.identity(),mcpConnectionManager:e.mcpConnectionManager})}constructor(t){this.options=t,this.vfsAdapter=new DV(t.fs),this.progress=new _p({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new ap({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:kV}),this.mountCommands=new Ms({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Nm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=OV(i)??OV(a);this.scriptCatalog=t.scriptCatalog??new Si({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||ar(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:Sp(this.progress)}),l=_({progress:Sp(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),Dh(t.fs),wg(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...rt(),...nt()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new it({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:Up(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:sp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(Vm),this.allowedCommands!==null){let e=this.bash;for(let t of nt())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let m=d.map(e=>e.name),h=p??[...rt(),...nt()];this.builtinCommandNames=new Set([...h,...m]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.vfsAdapter.setIdentityFn(()=>({user:this.lastEnv.USER??`user`,home:this.lastEnv.HOME??`/home/user`})),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}cancelActiveCommand(){this.commandAbort.abort(),this.commandAbort=new AbortController}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return ni(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return cr(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await mp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=hp(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd,umask:this.umask});if(typeof r.umask==`number`&&(this.umask=r.umask),r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){jV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){if(uV(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.usesGnuBash())return this.runOnGnuBash(e,t,n,r,i,a);let o=im(e),s={env:{...this.lastEnv,...n===void 0?{}:{[MV]:String(n)},...i===void 0?{}:{[NV]:i},...o?{[nm]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=IV([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Pt(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.flushPendingCommandGrants(),d=kt(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=FV(d.env)),d.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.applyPendingEnvWrites(),d.env?.PWD&&(this.cwd=d.env.PWD),d.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(d.exitCode!==0&&d.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return Mt(await e(d,this.cwd,this.vfsAdapter),d.pipeStatus)}return d}applyPendingEnvWrites(){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}async usesGnuBash(){return!this.options.gnuBash||this.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await this.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let{runWasmCommand:o,withoutRealmDefaults:s}=await import(`./run-Cf2apntf.js`),c=im(e),l={...this.lastEnv,...n===void 0?{}:{[MV]:String(n)},...c?{[nm]:c}:{}},u=i===void 0?void 0:this.outputTees.get(i),d=await fp(e,{env:l,run:(e,i,a)=>o(e,this.wasmContext(i,t,r),{processConfig:this.buildJshProcessConfig(n),gate:this.gateNativeCommand,onOutput:u,fds:a,commands:()=>this.scriptCatalog.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}),f=this.lastEnv.PATH;return d.state&&(this.cwd=d.state.cwd,this.lastEnv=up(s(d.state.env,l),[MV,nm,NV])),this.lastEnv.PATH!==f&&await this.syncJshCommands().catch(()=>void 0),await this.flushPendingCommandGrants(),this.applyPendingEnvWrites(),{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:{...this.lastEnv},...a&&d.state?{pipeStatus:d.state.pipeStatus}:{}}}wasmContext(e,t,n){return{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>this.bash.exec(e,{...t,umask:this.umask})}}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.isTransparentGatingEnabled()||vm.has(e))return null;let r=await this.gateCommandDispatch(e,t,n[nm]);return r?{stderr:r.stderr,exitCode:r.exitCode}:null};isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?qp(t,this.progress):Yp(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t),a=this.outputTees;return{...n,async execute(e,t){let o=t.env?.get(NV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await Zp(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(NV);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=Rp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Bp(t,this.progress,zp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled()||vm.has(e.name))return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(nm))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=$p(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await tm(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=lt(e);if(!n)return;let r=`${dt}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Ve&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
3330
|
+
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(vm.get(e)??e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)jV.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands(),r=await this.scriptCatalog.getWasmCommands();for(let[e,n]of t)this.isCommandAllowed(e)&&(this.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.builtinCommandNames.add(e)));let i=[...r.keys()].filter(e=>this.isCommandAllowed(e));this.registerLateScriptNames(i,this.registeredWasmCommands),this.registerLateScriptNames(n.keys(),this.registeredWorkflowCommands)}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}registerLateScriptNames(e,t){let n=[this.registeredJshCommands,this.registeredWasmCommands,this.registeredWorkflowCommands];for(let r of e)if(!t.has(r)){if(n.some(e=>e!==t&&e.has(r))){t.add(r);continue}this.builtinCommandNames.has(r)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(r))),t.add(r),this.builtinCommandNames.add(r))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:t?.env??Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return ai(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(PV(i.env)))}let s=(await t.getWasmCommands()).get(r);if(s){let{runWasmCommand:n}=await import(`./run-Cf2apntf.js`);return n(s.script?[r,...e]:[`--argv0`,s.argv0,`--module`,s.wasm,s.glue,...s.args??[],...e],i,{processConfig:this.buildJshProcessConfig(PV(i.env)),gate:this.gateNativeCommand,defaults:s.env,commands:()=>t.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}let c=(await t.getWorkflowCommands()).get(r);if(c){let t=xi(c.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return S(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,P(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return S(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createUmountCustomCommand(){let e=this.mountCommands;return S(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?gp(a):[],c=this.options.jshDiscoveryFs??this.options.fs,l;try{let e=await c.readFile(o,{encoding:`utf-8`});l=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.lastEnv}}let u=[`node`,o,...s],d=await ai(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{Aa as _,gB as a,ba as b,Cs as c,fs as d,us as f,Ea as g,Fo as h,fB as i,gs as l,Wo as m,DV as n,uB as o,Go as p,lV as r,pp as s,LV as t,ps as u,ka as v,ko as y};
|