sliccy 6.235.2 → 6.235.4
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 +182 -182
- package/dist/ui/assets/SKILL-D64N28rB.js +1 -0
- package/dist/ui/assets/{account-store-D7DGAxNM.js → account-store-Cs4HX6Fx.js} +1 -1
- package/dist/ui/assets/{account-store-BT0pbAvQ.js → account-store-DYjXqZ0_.js} +1 -1
- package/dist/ui/assets/{adobe-CEArSxCX.js → adobe-Bnw7GCJv.js} +1 -1
- package/dist/ui/assets/{adobe-_I4i3x_7.js → adobe-_y0-61YY.js} +1 -1
- package/dist/ui/assets/{agent-panels-C_58flxq.js → agent-panels-C7Bqa-Ho.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-B6ZMvYl4.js → almost-bash-shell-headless-BuApOTs4.js} +490 -490
- package/dist/ui/assets/{apply-layout-8fGhBCeJ.js → apply-layout-B3ZnpqEz.js} +1 -1
- package/dist/ui/assets/{azure-openai-B1ImIasn.js → azure-openai-BT6bKHSX.js} +1 -1
- package/dist/ui/assets/{azure-openai-eCi3qaKl.js → azure-openai-CPAcwuzu.js} +1 -1
- package/dist/ui/assets/{cdp-D7X02m26.js → cdp-BZeS5nmk.js} +1 -1
- package/dist/ui/assets/{cerebras-DLriLpBm.js → cerebras-6LL_YKxo.js} +1 -1
- package/dist/ui/assets/{cerebras-Dw16qbLP.js → cerebras-CxfLpEm0.js} +1 -1
- package/dist/ui/assets/{composer-speech-C5aq2EHX.js → composer-speech-BiBHztPI.js} +1 -1
- package/dist/ui/assets/{connect-surface-B33YxHel.js → connect-surface-Bi9X_wJL.js} +1 -1
- package/dist/ui/assets/{directed-approval-CsWbrazD.js → directed-approval-tJnAS7Qd.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-C_WW9D-C.js → emscripten-vfs-hook-CccsS3uw.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-D4rVkB6b.js → emscripten-vfs-hook-DN8XE7DM.js} +1 -1
- package/dist/ui/assets/frames-Dw-7-9i6.js +1 -0
- package/dist/ui/assets/{frozen-archive-writer-Bjl1A6fy.js → frozen-archive-writer-B_Yk0dmJ.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-69YQevwx.js → gelatiere-unit-CNjxKuaT.js} +1 -1
- package/dist/ui/assets/{github-5665N6-Q.js → github-D8OafP2Z.js} +1 -1
- package/dist/ui/assets/{github-DeAThA8k.js → github-ZZNrFs35.js} +1 -1
- package/dist/ui/assets/{github-copilot-B-F9GN74.js → github-copilot-BMWRdCin.js} +1 -1
- package/dist/ui/assets/{github-copilot-2CNJ6evQ.js → github-copilot-CL7zYevm.js} +1 -1
- package/dist/ui/assets/{go-driver-C0zJJSTi.js → go-driver-DOU6iF-0.js} +1 -1
- package/dist/ui/assets/{hear-DzjhPERk.js → hear-l9ZtYzw0.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-ALz7TOVI.js → js-realm-worker-D66arNS1.js} +2 -2
- package/dist/ui/assets/{jsh-executor-UfR3L63B.js → jsh-executor-C000GN6m.js} +2 -2
- package/dist/ui/assets/{kernel-worker-coLE80Cx.js → kernel-worker-orc-rbxr.js} +9 -9
- package/dist/ui/assets/keyboard-TcuVIW9F.js +1 -0
- package/dist/ui/assets/{lick-ws-bridge-DpjVEf6h.js → lick-ws-bridge-BrMzPx89.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-BwZ6Lsqx.js → lick-ws-bridge-EaJq5vVC.js} +1 -1
- package/dist/ui/assets/{live-session-curation-CN8ifDXh.js → live-session-curation-r0KCWNII.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-BoQYDzUq.js → live-session-snapshot-BoFXQFBo.js} +1 -1
- package/dist/ui/assets/{local-llm-CBWcw9ga.js → local-llm-B17M4gZX.js} +1 -1
- package/dist/ui/assets/{local-llm-DAdQyx68.js → local-llm-BshBZAmq.js} +1 -1
- package/dist/ui/assets/{main-D7Ilh1cw.js → main-DOQz22Hi.js} +3 -3
- package/dist/ui/assets/{main-cherry-9nngpfRy.js → main-cherry-I4yRF50x.js} +1 -1
- package/dist/ui/assets/{mcp-command-BeBM1rHC.js → mcp-command-BqHFwAvU.js} +9 -9
- package/dist/ui/assets/{memory-curation-seam-CUFsPZ6T.js → memory-curation-seam-yhY6cBQU.js} +1 -1
- package/dist/ui/assets/{memory-health-hDyNPmp-.js → memory-health-BhBV3Vts.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-CgR8Y6VS.js → memory-write-execute-BmLwyuUI.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-DTjO_AHz.js → merge-folded-cost-into-frozen-0lbra_xV.js} +1 -1
- package/dist/ui/assets/{new-session-CLqykoTf.js → new-session-CozQURhl.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-UPOMQS2N.js → oauth-bootstrap-BQCdFHox.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-DKu8ScwD.js → onboarding-orchestrator-u30ZsfI2.js} +1 -1
- package/dist/ui/assets/{openai-codex-C3rT7EJ-.js → openai-codex-02ctr8VP.js} +1 -1
- package/dist/ui/assets/{openai-codex-CXG3CPUO.js → openai-codex-CVj-0cWE.js} +1 -1
- package/dist/ui/assets/{openrouter-MNU1Hy35.js → openrouter-BKgB8K_S.js} +1 -1
- package/dist/ui/assets/{openrouter-C_mHcLUY.js → openrouter-CiYZC-jw.js} +1 -1
- package/dist/ui/assets/{openrouter-free-2vZpBTFE.js → openrouter-free-D2KQuRtO.js} +1 -1
- package/dist/ui/assets/{openrouter-free-wsl2KNbX.js → openrouter-free-Q99EOx7o.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-sx8YMfw_.js → openrouter-oauth-ClUOSjeL.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-Bw05OEXj.js → openrouter-oauth-hldOrmrc.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-C4ZEbr-L.js → panel-rpc-handlers-DZcgwV5a.js} +2 -2
- package/dist/ui/assets/{panelize-shell-CLTgjV9N.js → panelize-shell-B7A8LsKg.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-DF0ZCxw2.js → pi-edit-execution-CMAQRxQA.js} +1 -1
- package/dist/ui/assets/{provider-CBb3zRgf.js → provider-BGzOUBkK.js} +1 -1
- package/dist/ui/assets/{provider-CWkiPaFF.js → provider-Bf1Ajplf.js} +1 -1
- package/dist/ui/assets/{provider-settings-BySNZFTG.js → provider-settings-rZFiuTIA.js} +1 -1
- package/dist/ui/assets/provider-store-access-BcrR63Ca.js +1 -0
- package/dist/ui/assets/provider-store-access-CloxNO5a.js +1 -0
- package/dist/ui/assets/{providers-3muwTGPn.js → providers-C4Q0sm3i.js} +2 -2
- package/dist/ui/assets/{providers-Dz9lZ6WH.js → providers-V_6BgZy1.js} +1 -1
- package/dist/ui/assets/{py-live-vfs-CPGqrKx-.js → py-live-vfs-C6sLzy_c.js} +1 -1
- package/dist/ui/assets/{quick-llm-BE1MoA8w.js → quick-llm-Dz6rUpi-.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-B-C5-frg.js → realm-inprocess-B3VY5Tw-.js} +2 -2
- package/dist/ui/assets/{realm-sync-transport-CTz7jTgb.js → realm-sync-transport-Ble3Euu9.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-CE1G6Vqu.js → realm-unhandled-rejections--GLm39Uk.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-zi6bFzVe.js → realm-unhandled-rejections-BxCgpBFZ.js} +1 -1
- package/dist/ui/assets/{recovery-screen-tADn1zrY.js → recovery-screen-Bffxfm3Y.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-4u9dBB0E.js → remote-terminal-view-CoXwAGLO.js} +2 -2
- package/dist/ui/assets/{require-guards-DnafTLJr.js → require-guards-6ovYBhVp.js} +1 -1
- package/dist/ui/assets/{restore-ue1IxJw4.js → restore-CWAOFran.js} +1 -1
- package/dist/ui/assets/run-BStZvimF.js +18 -0
- package/dist/ui/assets/{run-Blqu2GaE.js → run-BT443EyM.js} +2 -2
- package/dist/ui/assets/{run-CnfMQAT6.js → run-BteWzSfI.js} +2 -2
- package/dist/ui/assets/{run-BSPrcB21.js → run-C2HoxcW5.js} +2 -2
- package/dist/ui/assets/{run-DKbvbERf.js → run-CpTqQO9E.js} +1 -1
- package/dist/ui/assets/{run-BVj8rfi8.js → run-DpN3NJpN.js} +1 -1
- package/dist/ui/assets/scale-B8PGb3fG.js +1 -0
- package/dist/ui/assets/{session-command-memory-Cep9cwKm.js → session-command-memory-fxxu3Wnc.js} +2 -2
- package/dist/ui/assets/{session-jsonl-CFn8rdop.js → session-jsonl-DqM_T9qM.js} +1 -1
- package/dist/ui/assets/{session-jsonl-j0zMWVNK.js → session-jsonl-uhra4EyF.js} +1 -1
- package/dist/ui/assets/{session-search-index-la9-q_G1.js → session-search-index-WLg0B1n9.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-BTYJL90t.js → setup-feature-flags-remote-DsedGlqO.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-D8Ea_olZ.js → setup-model-catalog-BaHnMPAr.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-BtuCuxCi.js → silent-renew-backoff-Cz36onHW.js} +1 -1
- package/dist/ui/assets/slicc-version-Bh28vgoq.js +1 -0
- package/dist/ui/assets/{soundscape-CGUkUoeQ.js → soundscape-DpLfdWAx.js} +1 -1
- package/dist/ui/assets/{speak-CxwK7WUc.js → speak-Dp62zWsH.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-7If5XMR2.js → sprinkle-manager-TUVhRNTd.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-BZE6UauM.js → sprinkle-renderer-_bgzFOiQ.js} +1 -1
- package/dist/ui/assets/{ssh-BWaaGyTo.js → ssh-B2--kdSm.js} +1 -1
- package/dist/ui/assets/{stdio-tty-BB4qV92F.js → stdio-tty-CipJs8Mm.js} +1 -1
- package/dist/ui/assets/{sudo-Bur3ckJR.js → sudo-BixYLnUe.js} +1 -1
- package/dist/ui/assets/{supervisor-BoiwgqlW.js → supervisor-BzEoeHmO.js} +1 -1
- package/dist/ui/assets/{sync-dialog-CoFg-wC1.js → sync-dialog-DjCbk8PZ.js} +1 -1
- package/dist/ui/assets/sync-exec-dispatch-B-gdI8lu.js +1 -0
- package/dist/ui/assets/{sync-sab-responder-BmZDqqnK.js → sync-sab-responder-DlSgon7c.js} +1 -1
- package/dist/ui/assets/{tab-8LaHojfd.js → tab-D9i-XOmT.js} +1 -1
- package/dist/ui/assets/{transformers-env-CvumQVfQ.js → transformers-env-fMmfvl9A.js} +1 -1
- package/dist/ui/assets/{tray-leader-B4zwhLBC.js → tray-leader-Civqj6Af.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-gvronesJ.js → tray-leave-runtime-DUB01L_f.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-DOIJd5vJ.js → tray-sidecar-DJ3B4ZZD.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-DbUZ5LnM.js → upgrade-detection-DcRmserK.js} +1 -1
- package/dist/ui/assets/{v86-DKE8ZbX9.js → v86-16ZWsI-9.js} +1 -1
- package/dist/ui/assets/{voice-reply-CMQ06Wn-.js → voice-reply-DHB34F8u.js} +1 -1
- package/dist/ui/assets/{wc-attach-CtS_GXt-.js → wc-attach-rAGS8A86.js} +2 -2
- package/dist/ui/assets/{wc-browser-DjJiSTyC.js → wc-browser-CF8fTc0L.js} +1 -1
- package/dist/ui/assets/{wc-computers-hk2xbTfE.js → wc-computers-BvweN5uT.js} +1 -1
- package/dist/ui/assets/{wc-detached-Cwjv2dxL.js → wc-detached-BJ2kdj4y.js} +1 -1
- package/dist/ui/assets/{wc-extension-ClEdff6M.js → wc-extension-lag5g2h7.js} +2 -2
- package/dist/ui/assets/{wc-follower-Bf76brRQ.js → wc-follower-BzTrl0Hz.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-BZYWuEQu.js → wc-follower-oauth-D2wN117J.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-Cs0ORVhQ.js → wc-gelatiere-C4CnQD7I.js} +1 -1
- package/dist/ui/assets/{wc-live-C-qevd3g.js → wc-live-BNbI6L9J.js} +5 -5
- package/dist/ui/assets/{wc-nav-Rophsgk9.js → wc-nav-BIi9hImo.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-Caj_waOY.js → wc-onboarding-CfQR54oE.js} +2 -2
- package/dist/ui/assets/{wc-permissions-D9yyGqLl.js → wc-permissions-xwNOm31c.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-BfxhJIh1.js → wc-placeholder-6cTL5ycx.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-DqxZuJUL.js → wc-secret-request-Dk9-Zayw.js} +1 -1
- package/dist/ui/assets/{wc-settings-Bh44ZTl-.js → wc-settings-BZUIpIkQ.js} +3 -3
- package/dist/ui/assets/{wc-shell-CJLjywlF.js → wc-shell-DUdnAC6w.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-Cz7Vv65u.js → wc-shortcut-config-Bjeruhfk.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-DVTcJSN3.js → wc-sprinkles-nkF26rMw.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-CE_ns2-x.js → wc-transcript-export-JKEZQlks.js} +2 -2
- package/dist/ui/assets/{wc-tray-DSEM6WbT.js → wc-tray-BC9oZ-Hi.js} +4 -4
- package/dist/ui/assets/welcome-detection-Cx7Dj-60.js +1 -0
- package/dist/ui/assets/{whisper-session-BycheH59.js → whisper-session-CJU1CC6o.js} +2 -2
- package/dist/ui/assets/{xai-grok-Xy7OSykN.js → xai-grok-CEMCdE1G.js} +1 -1
- package/dist/ui/assets/{xai-grok-CW0J74cE.js → xai-grok-hat56jyb.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/llm-proxy-sw.js +1 -1
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +2 -2
- package/dist/ui/assets/SKILL-dd0KSoC6.js +0 -1
- package/dist/ui/assets/frames-D35rgB_q.js +0 -1
- package/dist/ui/assets/provider-store-access-BmLF3yiQ.js +0 -1
- package/dist/ui/assets/provider-store-access-qocbyVYP.js +0 -1
- package/dist/ui/assets/run-Cf2apntf.js +0 -18
- package/dist/ui/assets/scale-D09IlqOK.js +0 -1
- package/dist/ui/assets/slicc-version-_RfsCQCx.js +0 -1
- package/dist/ui/assets/sync-exec-dispatch-DSTbkRmG.js +0 -1
- package/dist/ui/assets/welcome-detection-BxKU2eoh.js +0 -1
|
@@ -1,96 +1,96 @@
|
|
|
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
|
-
`),
|
|
3
|
-
`);async function
|
|
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
|
|
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-Cs4HX6Fx.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-V_6BgZy1.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-Bh28vgoq.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-CipJs8Mm.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-6ovYBhVp.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-C000GN6m.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"./keyboard-TcuVIW9F.js";import{n as aa,t as oa}from"./hf-defaults-BwJdGLgk.js";import{t as sa}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as ca}from"./local-llm-BshBZAmq.js";import{i as la,n as ua,r as da,t as fa}from"./tar-BWIPCxI2.js";import{a as pa,c as ma,i as ha,o as ga,r as _a,s as va}from"./v86-vm-DCm7zA2r.js";import{n as ya,r as ba}from"./lick-urls-CgPiVwD-.js";let xa=null;function Sa(e){xa=e!==null&&Number.isFinite(e)&&e>0?e:null}function Ca(){if(xa!==null)return xa;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const wa=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function Ta(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=wa.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 Ea(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 Da(e,t){return e.some(e=>Ea(e,t))}const Oa=`slicc-transcript`,ka=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],Aa=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 ja(e){return Aa.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Ma=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Na=new Set(ka),Pa=/^[0-9a-fA-F]{64}$/,Fa=/^\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 Ia(e){return typeof e==`string`&&Pa.test(e)}function La(e){return Fa.test(e)&&Number.isFinite(Date.parse(e))}function Ra(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 za(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ra(n,t)}:{ok:!0}}function Ba(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 Va(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 Ha(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=za(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?Va(e,t):n}function Ua(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 Wa(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 Ga(e,t){let n=Ua(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Wa(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ka(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`?La(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 qa(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 Ja(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Ga(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function Ya(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=za(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=qa(e,t);if(!n.ok)return n}let r=Ka(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=Ba(i,Ha,`${t}.content`);return a.ok?Ja(e,t):a}function Xa(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=za(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Ba(r,Ya,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Za(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 Qa(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`}:Ia(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 $a=[`attachment-file-missing`,`attachment-association-unavailable`];function eo(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?za(e.missingReason,$a,`${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 to(e,t){return e.present?Qa(e,t):eo(e,t)}function no(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Za(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=za(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?to(e,t):r}function ro(e,t){let n=za(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 io(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=za(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?ro(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function ao(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 oo(e,t){return typeof e!=`string`||!Na.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function so(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 co(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=za(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Ba(e.missing,oo,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function lo(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=za(e.state,[`active`,`frozen`],`session.state`);return t.ok?co(e.completeness):t}function uo(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)?Ba(n,io,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function fo(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Ba(t,Xa,`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=Ba(r,ao,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Ba(a,no,`attachments`):{ok:!1,error:`attachments must be an array`}}function po(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 mo(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 ho(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 go(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 ho(e))t.add(n)}return t}function _o(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 vo(e){return _o(e,go(e))}function yo(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 bo(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=yo(e,t);if(!r.ok)return r}}return{ok:!0}}function xo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return bo(e,n)}function So(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 Co(e,t){let n=So(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 wo(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(ho(e)))}return t}function To(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 Eo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return To(e,n,wo(t))}function Do(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 Oo(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=Do(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function ko(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=po(t);if(!o.ok)return o;let s=mo(t);if(!s.ok)return s;let c=vo(t);if(!c.ok)return c;let l=xo(t,n);if(!l.ok)return l;let u=Co(n,t);if(!u.ok)return u;let d=Eo(r,t);return d.ok?Oo(a,n):d}function Ao(e){let t=fo(e);return t.ok?ko(e):t}function jo(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=so(e.export);if(!t.ok)return t;let n=lo(e.session);if(!n.ok)return n;let r=uo(e.privacy);return r.ok?Ao(e):r}async function Mo(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:No(a),sourceUrl:a}}function No(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Po=`slicc-sprinkle-routes`;function Fo(){try{let e=localStorage.getItem(Po);return e?JSON.parse(e):{}}catch{return{}}}function Io(e){try{localStorage.setItem(Po,JSON.stringify(e))}catch{}}function Lo(e){return Fo()[e]}function Ro(e,t){let n=Fo();n[e]=t,Io(n)}function zo(e){let t=Fo();delete t[e],Io(t)}function Bo(){return Fo()}function Vo(e,t,n){return gt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Ho(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(Vo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Uo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Ho(t,`browser`,yt,e.browser),network:Ho(t,`network`,ht,e.network),secrets:Ho(t,`secrets`,bt,e.secrets),devices:Ho(t,`devices`,xt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Ho(t,`mounts`,_t,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Ho(t,`approvals`,St,e.approvals)}}function Wo(e={}){return Uo({adapter:`connect`,pageGestures:e.pageGestures})}function Go(e){let t=Ct(()=>import(`./extension-ops-OtrqWANJ.js`).then(t=>t.createExtensionOps(e)));return Uo({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 Ko(e={}){let t=Ct(()=>import(`./rest-ops-j0P6ql7f.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Uo({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 qo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Ko({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Go({adapter:e,pageGestures:n});case`connect`:return Wo({pageGestures:n})}}const Jo=e(`quick-llm`);async function Yo(e){let t=f();if(!t)return Jo.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?$o(n,e.modelId)??$o(n,r):Xo(n,r),!i)return Jo.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`]=es());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 Jo.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Xo(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Qo(r.id),a=n.filter(e=>Zo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Zo(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 Qo(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 $o(e,t){return p(e).find(e=>e.id===t)}function es(){return Tt(`ui-quick-llm`)}const ts=e(`sudo-suggest`),ns=[`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
|
+
`),rs=[`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
|
+
`);async function is(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`?ns:rs,i=null;try{i=await Yo({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){ts.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return as(i)||n}function as(e){if(!e)return null;let t=(e.split(`
|
|
4
|
+
`,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}const os=e(`sudo:capability-gesture`);function ss(e,t={}){let n=t.suggest??is;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 os.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),mt();if(!e)return os.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):(os.warn(`capability broker approvals.request failed — denying`,{message:o.message}),mt())}}}const cs=e(`sudo:tray-first`);function ls(e,t={}){let n=t.suggest??is,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){cs.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 ds(e?.decision,o)}catch(e){cs.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}const us=[`user-timeout`,`cone-timeout`,`unavailable`];function ds(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=us.find(e=>e===n.reason);return i?{decision:`deny`,reason:i}:{decision:`deny`}}function fs(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ps(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var ms=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ps,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 hs(e){return ne(gs(e))}function gs(e){let t=ss(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:ls(t)}let _s=null;function vs(e){return _s=e,()=>{_s===e&&(_s=null)}}function ys(){if(!_s)throw new Ma(`session-not-found`);return _s}const bs=`focus`,xs={type:`leaf`,surfaceId:`chat`};function Ss(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 Cs={focus:{name:`focus`,tree:Ss({left:xs},{left:3,middle:1})}};function ws(e){return Cs[e]??null}const Ts=`progress`;async function Es(){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 Ds(){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 Os(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 ks(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 As(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 js=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function Ms(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;js.has(n)&&t++}return!1}function Ns(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Ps=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=ks(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 Fs(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 Es():r?await Os(r,e):await Ds();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=As(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 Mo(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`?Ns(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(Ms(e))return n===`umount`?this.umountHelp():this.help();let r=ks(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
|
|
5
5
|
`,stderr:``,exitCode:0};let t=this.options.fs.getMountIndex();return{stdout:e.map(e=>{let n=t.getState(e);if(!n)return e;if(n.status===`ready`)return`${e} (indexed: ${n.indexed} entries)`;if(n.status===`indexing`)return`${e} (indexing: ${n.indexed} entries...)`;if(n.status===`error`)switch(n.abortCause){case`depth-exceeded`:return`${e} (index skipped: directory nesting exceeded the depth limit — reads use the slow path; raise SLICC_MOUNT_INDEX_MAX_DEPTH or 'mount unmount ${e}')`;case`entries-exceeded`:return`${e} (index skipped: mounted tree is too large — reads use the slow path; raise SLICC_MOUNT_INDEX_MAX_ENTRIES or 'mount unmount ${e}')`;case`cycle-detected`:return`${e} (index skipped: self-referential mount cycle detected — run 'mount unmount ${e}' to remove it)`;default:return`${e} (index error: ${n.error})`}return`${e} (pending index)`}).join(`
|
|
6
6
|
`)+`
|
|
7
|
-
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount list: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleInfo(e,t){if(
|
|
8
|
-
`,exitCode:1};let r=this.resolvePath(n.positional[0],t);try{let{formatMountInfo:e,probeMountInfo:t}=await import(`./probe-info-Cfr3jYru.js`),i=await t(this.options.fs,r);return{stdout:n.json?`${JSON.stringify(i,null,2)}\n`:e(i),stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount info: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleRefresh(e,t,n){let r=
|
|
7
|
+
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount list: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleInfo(e,t){if(Ms(e))return this.help();let n=ks(e);if(n.positional.length===0)return{stdout:``,stderr:`mount info: path required
|
|
8
|
+
`,exitCode:1};let r=this.resolvePath(n.positional[0],t);try{let{formatMountInfo:e,probeMountInfo:t}=await import(`./probe-info-Cfr3jYru.js`),i=await t(this.options.fs,r);return{stdout:n.json?`${JSON.stringify(i,null,2)}\n`:e(i),stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount info: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleRefresh(e,t,n){let r=ks(e);if(r.positional.length===0)return{stdout:``,stderr:`mount refresh: path required
|
|
9
9
|
`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e=await this.options.fs.refreshMount(i,{bodies:r.bodies,env:n});return{stdout:`Refreshed ${i}: +${e.added.length} -${e.removed.length} ~${e.changed.length} (${e.unchanged} unchanged, ${e.errors.length} errors)\n`,stderr:e.errors.map(e=>` ${e.path}: ${e.message}\n`).join(``),exitCode:+(e.errors.length>0)}}catch(e){return{stdout:``,stderr:`mount refresh: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}resolvePath(e,t){let n;return n=e.startsWith(`/`)?e:`${t.replace(/\/$/,``)}/${e}`,n.length>1&&(n=n.replace(/\/+$/,``)),n}usageError(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}umountHelp(){return{stdout:[`Usage: umount [--clear-cache] <path>`,``,"Unmount a mount point. `umount <path>` is an alias for","`mount unmount <path>` — same behaviour, shorter to type.",``,`Options:`,` --clear-cache Also drop cached listings and bodies for a remote mount`,``,`Examples:`,` umount /mnt/myapp`,` umount --clear-cache /mnt/s3`,``,`See also: mount --help, mount list`].join(`
|
|
10
10
|
`)+`
|
|
11
11
|
`,stderr:``,exitCode:0}}help(){return{stdout:[`Usage: mount [OPTIONS] <target-path>`,` mount unmount [--clear-cache] <path>`,` mount list`,` mount --list`,` mount refresh [--bodies] <path>`,` mount info [--json] <path>`,``,`Mount a local directory, S3 bucket, or AEM authoring source into the`,`virtual filesystem.`,``,`Without --source, opens a directory picker (local mount). With --source, mounts`,`a remote source (S3-compatible, da.live, or the Helix 6 Source Bus).`,``,`A da:// source is checked against the site config first: sites upgraded to`,`Helix 6 are re-routed to the Source Bus, because admin.da.live no longer`,`holds their content. Use --backend to force either endpoint.`,``,`Options:`,` --source <url> Remote source: s3://bucket[/prefix], da://org/repo,`,` or aem://org/site`,` --profile <name> Profile name (default: "default")`,` --backend <da|aem> Force the Adobe backend instead of probing the site config`,` --no-probe Skip the root-level probe on mount`,` --max-body-mb <n> Override body size limit (MB)`,``,`Sub-commands:`," unmount [--clear-cache] <path> Remove a mount point (also spelled `umount <path>`)",` list, --list, -l Show active mount points`,` refresh [--bodies] <path> Re-index or revalidate a mount`,` info [--json] <path> Probe volume semantics (case, Unicode, exec bit)`,``,`Examples:`,` mount /mnt/myapp`,` mount --source s3://my-bucket --profile default /mnt/s3`,` mount --source da://my-org/my-repo /mnt/da`,` mount --source aem://my-org/my-site /mnt/aem`,` mount list`,` mount info /tmp`,` mount info --json /mnt/kb`,` mount refresh /mnt/myapp`,` mount unmount /mnt/myapp`,` umount /mnt/myapp`].join(`
|
|
12
12
|
`)+`
|
|
13
|
-
`,stderr:``,exitCode:0}}};async function
|
|
14
|
-
`,exitCode:0};if(r)await
|
|
15
|
-
`)}return
|
|
16
|
-
`,exitCode:1};let i=n.slice(0,a).filter(e=>!e.startsWith(`-`))[0];return
|
|
17
|
-
`,exitCode:1};if(r){let r=n.indexOf(`-b`),a=n.slice(r+1).filter(e=>!e.startsWith(`-`)),s=a.length>1?a[1]:void 0;try{await ln({fs:e.lfs,dir:t,ref:o,object:s,checkout:!1,force:i})}catch(e){return
|
|
13
|
+
`,stderr:``,exitCode:0}}};async function Fs(e){let t=`pendingMount:term:${e}`,n;try{n=await Rt(t)}catch{return null}if(!n)return null;try{await It(n)}catch{return null}return He.fromHandle(n,{mountId:Ye()})}async function Is(e,t,n){let r=n.includes(`-A`)||n.includes(`--all`),i=n.includes(`-u`)||n.includes(`--update`),a=n.includes(`-f`)||n.includes(`--force`),o=n.filter(e=>!e.startsWith(`-`));if(!r&&!i&&o.length===0)return{stdout:``,stderr:`Nothing specified, nothing added.
|
|
14
|
+
`,exitCode:0};if(r)await Ls(e,t,a);else if(o.includes(`.`))await Rs(e,t,a);else if(i)await zs(e,t,a);else for(let n of o)await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:n,force:a});return{stdout:``,stderr:``,exitCode:0}}async function Ls(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&(a===0?await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}async function Rs(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&a!==0&&await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n})}async function zs(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,a,o,s]of r)a!==0&&o!==s&&(o===0?await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}const Bs={boolean:[`dry-run`,`force`,`d`,`x`,`X`,`quiet`],alias:{n:`dry-run`,f:`force`,q:`quiet`}},I={init:{string:[`initial-branch`],alias:{b:`initial-branch`}},clone:{string:[`branch`,`depth`,`origin`,`upload-pack`],boolean:[`single-branch`,`quiet`],alias:{b:`branch`,o:`origin`,q:`quiet`},default:{"single-branch":!0}},commit:{string:[`message`,`author`,`date`,`file`,`cleanup`],boolean:[`amend`,`all`,`allow-empty`],alias:{m:`message`,a:`all`,F:`file`}},log:{string:[`max-count`,`format`,`author`,`committer`,`grep`,`since`,`until`,`skip`,`follow`],boolean:[`oneline`,`stat`,`reverse`,`all`,`color`],alias:{n:`max-count`,pretty:`format`},"--":!0},branch:{string:[`list`,`set-upstream-to`,`track`,`contains`,`no-contains`,`merged`,`no-merged`,`points-at`],boolean:[`color`],alias:{l:`list`,u:`set-upstream-to`,t:`track`}},checkout:{string:[`b`,`B`,`orphan`,`track`,`start-point`,`conflict`],"--":!0},clean:Bs,diff:{string:[`format`,`diff-filter`,`unified`],boolean:[`staged`,`cached`,`name-only`,`name-status`,`stat`,`no-index`,`color`],alias:{pretty:`format`,U:`unified`},"--":!0},show:{string:[`format`],boolean:[`stat`,`color`],alias:{pretty:`format`}},status:{boolean:[`short`,`porcelain`,`color`],alias:{s:`short`}},merge:{string:[`message`,`strategy`,`strategy-option`],boolean:[`ff`,`ff-only`,`abort`,`edit`,`quiet`],alias:{m:`message`,s:`strategy`,X:`strategy-option`,q:`quiet`}},"cherry-pick":{boolean:[`no-commit`,`x`],alias:{n:`no-commit`}},revert:{boolean:[`no-commit`],alias:{n:`no-commit`}},rebase:{string:[`onto`,`strategy`,`strategy-option`],boolean:[`continue`,`abort`,`skip`,`interactive`,`rebase-merges`,`autosquash`],alias:{i:`interactive`,s:`strategy`,X:`strategy-option`}},"merge-file":{string:[`L`],boolean:[`stdout`,`quiet`,`diff3`,`ours`,`theirs`,`union`],alias:{p:`stdout`,q:`quiet`}},tag:{string:[`message`,`file`,`list`,`contains`,`points-at`],boolean:[`delete`,`annotate`,`force`],alias:{m:`message`,F:`file`,l:`list`,d:`delete`,a:`annotate`,f:`force`}},fetch:{string:[`depth`,`o`,`refmap`,`upload-pack`,`negotiation-tip`,`server-option`],boolean:[`prune`,`quiet`],alias:{p:`prune`,q:`quiet`}},pull:{string:[`depth`,`s`,`strategy`,`X`,`strategy-option`,`upload-pack`],boolean:[`ff-only`,`ff`,`quiet`],alias:{q:`quiet`}},push:{string:[`o`,`push-option`,`receive-pack`,`repo`,`exec`,`signed`,`4`,`6`],boolean:[`force`,`set-upstream`,`quiet`,`verbose`,`dry-run`,`tags`,`progress`],alias:{f:`force`,u:`set-upstream`,q:`quiet`,v:`verbose`}},"symbolic-ref":{string:[`m`],boolean:[`delete`,`quiet`,`short`,`recurse`],alias:{d:`delete`,q:`quiet`}},"ls-tree":{boolean:[`r`,`d`,`name-only`]},"ls-remote":{boolean:[`heads`,`tags`,`symref`,`exit-code`],alias:{h:`heads`,t:`tags`}}},Vs=/^(--?)([^=]+)(=.*)?$/;function Hs(e){let t=new Set(e.string??[]);for(let n of e.boolean??[])t.add(n),t.add(`no-${n}`);for(let[n,r]of Object.entries(e.alias??{})){t.add(n);for(let e of Array.isArray(r)?r:[r])t.add(e)}return t}function Us(e){let t=new Set(e.string??[]);for(let[n,r]of Object.entries(e.alias??{})){let e=[n,...Array.isArray(r)?r:[r]];if(e.some(e=>t.has(e)))for(let n of e)t.add(n)}return t}function Ws(){let e=new Set([`c`,`C`,`git-dir`,`work-tree`]);for(let t of Object.values(I))for(let n of Us(t))e.add(n);return e}function Gs(e,t,n){for(let r of e){if(!t.has(r))return r;if(n.has(r))return}}function Ks(e,t){let n=Hs(t),r=Us(t),i=e.indexOf(`--`),a=i===-1?e:e.slice(0,i);for(let e=0;e<a.length;e++){let t=a[e];if(!t.startsWith(`-`)||t===`-`)continue;let i=Vs.exec(t);if(!i)continue;let o=i[2];if(i[1]===`-`&&o.length>1&&!i[3]&&!n.has(o)){let e=Gs(o,n,r);if(e)return e;continue}if(!n.has(o))return o;!i[3]&&r.has(o)&&e+1<a.length&&e++}}function qs(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function Js(e,t){if(!t)return;let n=Ks(e,t);return n?qs(n):void 0}function L(e,t){let n=e[t];if(n===void 0)return;let r=String(Array.isArray(n)?n[n.length-1]:n);return r===``?void 0:r}function Ys(e){let t=/Could not read packfile at (.+?)\.(?:\s|$)/.exec(e);return t?`unable to read the packfile ${t[1]}: it could not be loaded in one piece — it may be missing or corrupted, or larger than the 100 MB hostfs whole-file limit if this repo is a --mount`:e.startsWith(`Could not read packfile data.`)?`unable to read packfile data: a packfile could not be loaded in one piece — it may be missing or corrupted, or larger than the 100 MB hostfs whole-file limit if this repo is a --mount`:null}function Xs(e,t){if(!(e instanceof Error))return Qs(String(e),t);let n=e;if(e.name===`MultipleGitError`||e.name===`AggregateError`||typeof AggregateError<`u`&&e instanceof AggregateError){let e=Array.isArray(n.errors)?n.errors:Array.isArray(n.data?.errors)?n.data?.errors:[];if(e.length>0)return e.map(e=>Xs(e,t)).join(`
|
|
15
|
+
`)}return Qs(Ys(e.message)??e.message,t)}function Zs(e){let t=e.trim();if(!t)return!1;try{let e=/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(t)?t:t.includes(`@`)&&t.includes(`:`)?`ssh://${t.replace(`:`,`/`)}`:`https://${t}`,n=new URL(e).hostname.toLowerCase();return n===`github.com`||n.endsWith(`.github.com`)}catch{return/(?:^|[@/])github\.com(?:[/:]|$)/i.test(t)}}function Qs(e,t){if(!/\b401\b|Unauthorized/i.test(e))return e;if(t!==void 0){if(!Zs(t))return e}else if(!/github\.com/i.test(e))return`${e}\nhint: Authentication failed (401). Check credentials for this remote. If this is GitHub, stored \`git config github.token\` may be a stale snapshot — re-run \`oauth-token github\` (or Settings → Providers → GitHub).`;return`${e}\nhint: GitHub returned 401. Stored \`git config github.token\` may be a stale snapshot — git renews the OAuth broker on network ops, but a hand-written token is not refreshed. Re-run \`oauth-token github\` (or Settings → Providers → GitHub). If you must set \`github.token\` manually, capture stdout only (never \`2>&1\`) and prefer leaving the bridge to the OAuth login.`}const $s={refresh:!1},ec=new Set([`never`,`false`,`0`,`off`,`no`]),tc=new Set([`always`,`true`,`1`,`on`,`yes`]),nc=/^(--?)([^=]+)(=.*)?$/,rc=Ws();function ic(e){if(e===!1)return`never`;if(e===!0)return`always`;if(typeof e==`number`)return e===0?`never`:e===1?`always`:void 0;if(typeof e!=`string`||e.length===0)return;let t=e.toLowerCase();if(t===`never`||t===`false`||t===`0`||t===`off`||t===`no`)return`never`;if(t===`always`||t===`true`||t===`1`||t===`on`||t===`yes`)return`always`;if(t===`auto`)return`auto`}function ac(e){let t,n=e.indexOf(`--`),r=n===-1?e:e.slice(0,n);for(let e=0;e<r.length;e++){if(sc(r,e))continue;let n=r[e];if(n===`--no-color`){t=`never`;continue}if(n===`--color`){t=`always`;continue}n.startsWith(`--color=`)&&(t=ic(n.slice(8))??t)}return t}function oc(e){let t=e.indexOf(`--`),n=[];for(let r=0;r<e.length;r++){if(t!==-1&&r>=t){n.push(...e.slice(r));break}let i=e[r];if(sc(e,r,t)){n.push(i);continue}if(i.startsWith(`--color=`)){let e=cc(i.slice(8));e&&n.push(e);continue}n.push(i)}return n}function sc(e,t,n=-1){if(t===0||n!==-1&&t-1>=n)return!1;let r=e[t-1],i=nc.exec(r);return!i||i[3]?!1:rc.has(i[2])}function cc(e){let t=e.toLowerCase();if(ec.has(t))return`--no-color`;if(tc.has(t))return`--color`}function lc(e){let t=e.stdoutIsTTY&&e.term!==`dumb`,n=e=>{if(e===`always`)return!0;if(e===`never`)return!1;if(e===`auto`)return t},r=n(e.cliWhen);if(r!==void 0)return r;let i=n(ic(e.colorUi));return i===void 0?!e.noColorEnv&&t:i}function uc(e,t,n){return e?`\x1b[${t}m${n}\x1b[0m`:n}async function dc(e,t,n){let r=n.includes(`-d`)||n.includes(`-D`)||n.includes(`--delete`),i=n.includes(`-a`)||n.includes(`--all`);if(n.includes(`--show-current`)){let n=await A({fs:e.lfs,dir:t});return{stdout:n?`${n}\n`:``,stderr:``,exitCode:0}}let a=n.find(e=>!e.startsWith(`-`));if(r&&a)return await vn({fs:e.lfs,dir:t,ref:a}),{stdout:`Deleted branch ${a}\n`,stderr:``,exitCode:0};if(a&&!r)return await ln({fs:e.lfs,dir:t,ref:a}),{stdout:``,stderr:``,exitCode:0};let o=await Ht({fs:e.lfs,dir:t}),s=await A({fs:e.lfs,dir:t}),c=``;for(let t of o)c+=t===s?`* ${uc(e.useColor,`32`,t)}\n`:` ${t}\n`;if(i)try{let n=await Ht({fs:e.lfs,dir:t,remote:`origin`});for(let t of n)c+=` ${uc(e.useColor,`31`,`remotes/origin/${t}`)}\n`}catch{}return{stdout:c,stderr:``,exitCode:0}}async function fc(e,t,n){let r=n.includes(`-b`),i=n.includes(`-f`)||n.includes(`--force`),a=n.indexOf(`--`);if(a!==-1){let r=n.slice(a+1);if(r.length===0)return{stdout:``,stderr:`error: you must specify path(s) to restore
|
|
16
|
+
`,exitCode:1};let i=n.slice(0,a).filter(e=>!e.startsWith(`-`))[0];return _c(e,t,r,i)}let o=n.find(e=>!e.startsWith(`-`));if(!o)return{stdout:``,stderr:`error: you must specify path(s) or a branch to checkout
|
|
17
|
+
`,exitCode:1};if(r){let r=n.indexOf(`-b`),a=n.slice(r+1).filter(e=>!e.startsWith(`-`)),s=a.length>1?a[1]:void 0;try{await ln({fs:e.lfs,dir:t,ref:o,object:s,checkout:!1,force:i})}catch(e){return gc(e,o)}try{await pc(e,t,o,i)}catch(n){if(!i)try{await vn({fs:e.lfs,dir:t,ref:o})}catch{}return gc(n,o)}return await e.fs.flush(),{stdout:`Switched to a new branch '${o}'\n`,stderr:``,exitCode:0}}try{await pc(e,t,o,i)}catch(e){return gc(e,o)}return await e.fs.flush(),{stdout:`Switched to branch '${o}'\n`,stderr:``,exitCode:0}}async function pc(e,t,n,r){let i;try{i=await E({fs:e.lfs,dir:t,ref:`HEAD`})}catch{i=void 0}let a=new Set(await D({fs:e.lfs,cache:e.cache,dir:t}));await _n({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:r});let o=await E({fs:e.lfs,dir:t,ref:n}),s=new Set(await D({fs:e.lfs,cache:e.cache,dir:t,ref:o}));await mc(e,t,a,s),!(!r&&i===o)&&await hc(e,t,o,a,s)}async function mc(e,t,n,r){for(let i of n)if(!r.has(i)){try{await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i})}catch{}try{await e.fs.rm(`${t}/${i}`)}catch{}}}async function hc(e,t,n,r,i){for(let a of i){if(!r.has(a))continue;let i=`${t}/${a}`;try{let t=await e.fs.lstat(i);if(t.type===`symlink`||t.type===`directory`)continue}catch{continue}let{blob:o}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:a}),s=a.lastIndexOf(`/`);s!==-1&&await e.fs.mkdir(`${t}/${a.slice(0,s)}`,{recursive:!0}),await e.fs.writeFile(i,o),await An({fs:e.lfs,cache:e.cache,dir:t,filepath:a,ref:n})}}function gc(e,t){if(e instanceof Error&&e.name===`MultipleGitError`)return{stdout:``,stderr:`error: unable to checkout '${t}':\n${Xs(e).split(`
|
|
18
18
|
`).map(e=>` ${e}`).join(`
|
|
19
|
-
`)}\n`,exitCode:1};throw e}async function
|
|
20
|
-
`).find(e=>e.trim().length>0)?.split(/[\t ]/)[0];if(!i||!
|
|
21
|
-
`,exitCode:128};let c=await
|
|
22
|
-
`)[0];return{stdout:`[${s??`HEAD`} ${r.slice(0,7)}] ${l}\n`,stderr:``,exitCode:0}}catch(e){return
|
|
19
|
+
`)}\n`,exitCode:1};throw e}async function _c(e,t,n,r){let i=r??`HEAD`,a=await E({fs:e.lfs,dir:t,ref:i});for(let r of n){let{blob:n}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:a,filepath:r}),i=r.lastIndexOf(`/`);i!==-1&&await e.fs.mkdir(`${t}/${r.slice(0,i)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${r}`,n),await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:r})}return await e.fs.flush(),{stdout:``,stderr:``,exitCode:0}}function vc(e={}){let{favor:t,diff3:n,labels:r}=e;return({contents:e,branches:i})=>{let[a,o,s]=e,c=ze(o??``,a??``,s??``,{favor:t,diff3:n,labels:{current:r?.current??i[1]??`ours`,base:r?.base??i[0]??`base`,other:r?.other??i[2]??`theirs`}});return{cleanMerge:t!==void 0||c.conflicts===0,mergedText:c.content}}}async function yc(e,t,n){let r=bc(n),i=await Cc(e,t,r.base);for(let n of r.steps)if(n.kind===`first-parent`)for(let r=0;r<n.count;r++)i=await Tc(e,t,i,1);else i=await Tc(e,t,i,n.count);return i}function bc(e){if(e.includes(`@{`))throw Error(`reflog selectors are unsupported`);let t=/^(.+?)(?:(~[0-9]*|\^[0-9]*))*$/.exec(e);if(!t)throw Error(`invalid revision`);let n=t[1],r=e.slice(n.length),i=r.match(/~[0-9]*|\^[0-9]*/g)??[];if(i.join(``)!==r)throw Error(`invalid revision`);return{base:n,steps:i.map(e=>{let t=e.length===1?1:Number(e.slice(1));return{kind:e[0]===`~`?`first-parent`:`parent`,count:t}})}}async function xc(e,t,n){try{return await yc(e,t,n)}catch{return}}const Sc=/^[0-9a-f]{4,40}$/i;async function Cc(e,t,n){if(n===`FETCH_HEAD`)return await wc(e,t);try{return await E({fs:e.lfs,dir:t,ref:n})}catch(e){if(!Sc.test(n))throw e}return await En({fs:e.lfs,cache:e.cache,dir:t,oid:n})}async function wc(e,t){let n=await On({fs:e.lfs,filepath:t}),r;try{let t=await e.lfs.readFile(`${n}/.git/FETCH_HEAD`,{encoding:`utf8`});r=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw Error(`Could not find FETCH_HEAD.`)}let i=r.split(`
|
|
20
|
+
`).find(e=>e.trim().length>0)?.split(/[\t ]/)[0];if(!i||!Sc.test(i)||i.length!==40)throw Error(`Could not find FETCH_HEAD.`);return i.toLowerCase()}async function Tc(e,t,n,r){if(r<1)return n;let{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n}),a=i.parent[r-1];if(!a)throw Error(`missing parent`);return a}function Ec(e){return e.replace(/^\.\//,``).replace(/\/+$/,``)}function Dc(e,t){return t.length===0||t.some(t=>{let n=Ec(t);return n===``||e===n||e.startsWith(`${n}/`)})}function Oc(e,t){return t.length===0||t.some(t=>{let n=Ec(t);return n===``||e===n||e.startsWith(`${n}/`)||n.startsWith(`${e}/`)})}async function kc(e,t,n){let{flags:r,positionals:i}=M(n,I[`cherry-pick`]),a=r[`no-commit`]===!0,o=r.x===!0,s=i[0];if(!s)return{stdout:``,stderr:`error: empty commit set passed
|
|
21
|
+
`,exitCode:128};let c=await xc(e,t,s);if(c===void 0)return{stdout:``,stderr:`fatal: bad revision '${s}'\n`,exitCode:128};try{let n=await Tn({fs:e.lfs,cache:e.cache,dir:t,oid:c,abortOnConflict:!1,noUpdateBranch:a,committer:await e.resolveAuthor(t),mergeDriver:vc()});if(a)return{stdout:``,stderr:``,exitCode:0};let r=n,{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n});if(o){let n=i.message.replace(/\s+$/,``);r=await dn({fs:e.lfs,cache:e.cache,dir:t,message:`${n}\n\n(cherry picked from commit ${c})\n`,author:i.author,committer:await e.resolveAuthor(t),amend:!0})}let s=await A({fs:e.lfs,dir:t}),l=i.message.split(`
|
|
22
|
+
`)[0];return{stdout:`[${s??`HEAD`} ${r.slice(0,7)}] ${l}\n`,stderr:``,exitCode:0}}catch(e){return Ac(e,c)}}function Ac(e,t){let n=t.slice(0,7);if(e instanceof Error&&e.name===`MergeConflictError`){let t=e.data?.filepaths??[],r=``;for(let e of t)r+=`CONFLICT (content): Merge conflict in ${e}\n`;return r+=`error: could not apply ${n}...\n`,r+=`hint: after resolving the conflicts, mark them with 'git add <paths>',
|
|
23
23
|
`,r+=`hint: then commit the result.
|
|
24
|
-
`,{stdout:``,stderr:r,exitCode:1}}return e instanceof Error&&e.name===`CherryPickMergeCommitError`?{stdout:``,stderr:`error: commit ${t} is a merge but no -m option was given.\nfatal: cherry-pick failed\n`,exitCode:128}:e instanceof Error&&e.name===`CherryPickRootCommitError`?{stdout:``,stderr:`error: ${e.message}\nfatal: cherry-pick failed\n`,exitCode:128}:{stdout:``,stderr:`fatal: ${
|
|
25
|
-
`,exitCode:128};let d=await O({fs:e.lfs,cache:e.cache,dir:t
|
|
26
|
-
`,exitCode:128};let c=a[0],l=a[1];if(!l){let e=c.match(/\/([^/]+?)(\.git)?$/);l=e?e[1]:`repo`}let u=b(l.startsWith(`/`)?l:`${t}/${l}`),d=L(o,`depth`),f=L(o,`branch`),p=o[`single-branch`]!==!1,m=s?``:`Cloning into '${l}'...\n`,h=
|
|
27
|
-
`)?r:`${r}\n`)}async function
|
|
28
|
-
`,exitCode:1};let c=await dn({fs:e.lfs,cache:e.cache,dir:t,message:r,author:await e.resolveAuthor(t),amend:a,noUpdateBranch:void 0,...i?{parent:[await E({fs:e.lfs,dir:t,ref:`HEAD`}),i]}:{}});i&&await
|
|
29
|
-
`,exitCode:1}}function
|
|
30
|
-
`,exitCode:1};let s=n.indexOf(o),c;for(let e=s+1;e<n.length;e++)if(!n[e].startsWith(`-`)){c=n[e];break}return c===void 0?
|
|
31
|
-
`,exitCode:1};if(n===`credential.token`||n===`github.token`)return await e.setGithubToken(``),{stdout:``,stderr:``,exitCode:0};if(r){let t=await e.getGlobalFs();try{let e=await t.readTextFile($n),r=Zn(e,n);await t.writeFile($n,r)}catch{}}else try{let r=`${t}/.git/config`,i=await e.fs.readTextFile(r),a=Zn(i,n);await e.fs.writeFile(r,a)}catch{}return{stdout:``,stderr:``,exitCode:0}}async function
|
|
32
|
-
`)){let e=i.trim();if(!e||e.startsWith(`#`)||e.startsWith(`;`))continue;let a=e.match(/^\[(\w+)(?:\s+"([^"]*)")?\]$/);if(a){n=a[1].toLowerCase(),r=a[2]??``;continue}let o=e.match(/^(\w+)\s*=\s*(.*)$/);if(o&&n){let e=o[1],i=o[2].trim(),a=r?`${n}.${r}.${e}`:`${n}.${e}`;t+=`${a}=${i}\n`}}return t}const
|
|
33
|
-
`,exitCode:129};let[i,a]=await Promise.all([
|
|
34
|
-
`)}\n`;if(t.stat)return Le(e.map(
|
|
24
|
+
`,{stdout:``,stderr:r,exitCode:1}}return e instanceof Error&&e.name===`CherryPickMergeCommitError`?{stdout:``,stderr:`error: commit ${t} is a merge but no -m option was given.\nfatal: cherry-pick failed\n`,exitCode:128}:e instanceof Error&&e.name===`CherryPickRootCommitError`?{stdout:``,stderr:`error: ${e.message}\nfatal: cherry-pick failed\n`,exitCode:128}:{stdout:``,stderr:`fatal: ${Xs(e)}\n`,exitCode:128}}async function jc(e,t,n){let r=M(n,Bs),i=!!r.flags[`dry-run`],a=!!r.flags.force,o=!!r.flags.d,s=!!r.flags.x,c=!!r.flags.X,l=!!r.flags.quiet,u=r.positionals;if(!i&&!a)return{stdout:``,stderr:`fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean
|
|
25
|
+
`,exitCode:128};let d=await O({fs:e.lfs,cache:e.cache,dir:t,...$s}),f=Mc(d),p=d.filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e),m;if(c||s){let n=(await O({fs:e.lfs,cache:e.cache,dir:t,ignored:!0,...$s})).filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e);if(c){let e=new Set(p);m=n.filter(t=>!e.has(t))}else m=n}else m=p;u.length>0&&(m=m.filter(e=>u.some(t=>Pc(e,t))));let h=new Set,g=new Set;for(let e of m){let t=Nc(e,f);t===null?h.add(e):o&&g.add(t)}let _=[...[...h].sort().map(e=>({display:e,target:e,isDir:!1})),...[...g].sort().map(e=>({display:`${e}/`,target:e,isDir:!0}))],v=``;if(!l){let e=i?`Would remove`:`Removing`;for(let t of _)v+=`${e} ${t.display}\n`}if(!i)for(let n of _){let r=`${t}/${n.target}`;try{await e.fs.rm(r,{recursive:n.isDir})}catch{}}return{stdout:v,stderr:``,exitCode:0}}function Mc(e){let t=new Set([``]);for(let[n,r,,i]of e){if(r===0&&i===0)continue;let e=n.lastIndexOf(`/`);for(;e>0;)t.add(n.slice(0,e)),e=n.lastIndexOf(`/`,e-1)}return t}function Nc(e,t){let n=e.split(`/`);if(n.length===1)return null;for(let e=1;e<n.length;e++){let r=n.slice(0,e).join(`/`);if(!t.has(r))return r}return null}function Pc(e,t){let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n||e.startsWith(`${n}/`)}let Fc=null;function Ic(){return Fc||=g(),Fc}async function*Lc(e,t,n){t&&t({phase:`Receiving`,loaded:e.length,total:n??e.length}),yield e}function Rc(){return{request:async e=>{let{url:t,method:n=`GET`,headers:r={},body:i,onProgress:a}=e,o;if(i){let e=[];for await(let t of i)e.push(t);let t=e.reduce((e,t)=>e+t.length,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(t,r),r+=t.length;let a=``;for(let e=0;e<n.length;e+=32768)a+=String.fromCharCode(...n.subarray(e,e+32768));o=a}let s=await Ic()(t,{method:n,headers:r,body:o}),c=parseInt(s.headers[`content-length`]??`0`,10)||void 0,l=Lc(s.body,a,c);return{url:s.url,method:n,headers:s.headers,body:l,statusCode:s.status,statusMessage:s.statusText}}}}const zc=Rc();async function Bc(e,t,n){let r=Js(n,I.clone);if(r)return r;let{flags:i,positionals:a}=M(n,I.clone),o=i,s=o.quiet===!0;if(a.length===0)return{stdout:``,stderr:`fatal: You must specify a repository to clone.
|
|
26
|
+
`,exitCode:128};let c=a[0],l=a[1];if(!l){let e=c.match(/\/([^/]+?)(\.git)?$/);l=e?e[1]:`repo`}let u=b(l.startsWith(`/`)?l:`${t}/${l}`),d=L(o,`depth`),f=L(o,`branch`),p=o[`single-branch`]!==!1,m=s?``:`Cloning into '${l}'...\n`,h=Vc(c,t);if(h)return Hc(e,h,u,c,l,m,f,s);try{await un({fs:e.lfs,cache:e.cache,http:zc,dir:u,url:c,corsProxy:e.corsProxy,depth:d?parseInt(d,10):1,ref:f,singleBranch:p,noCheckout:!1,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:s?void 0:e=>{e.phase===`Receiving objects`&&(m+=`Receiving objects: ${e.loaded}/${e.total}\n`)}})}catch(e){return Wc(e,u,c)}if(await e.fs.flush(),!s)try{let t=await D({fs:e.lfs,cache:e.cache,dir:u});t.length>0&&(m+=`Checked out ${t.length} files.\n`)}catch{}return{stdout:s?``:`${m}done.\n`,stderr:``,exitCode:0}}function Vc(e,t){if(e.startsWith(`file://`))try{return b(decodeURIComponent(new URL(e).pathname))}catch{return null}return e.startsWith(`/`)?b(e):e.startsWith(`./`)||e.startsWith(`../`)?b(x(t,e)):null}async function Hc(e,t,n,r,i,a,o,s=!1){if(n===t||n.startsWith(`${t}/`))return Wc(Error(`destination is inside the source repository`),n);try{await e.lfs.stat(`${t}/.git`);try{if((await e.lfs.readdir(n)).length>0)return Wc(Error(`destination path '${i}' already exists and is not an empty directory.`),n)}catch{await e.lfs.mkdir(n,{recursive:!0})}let c=o??await A({fs:e.lfs,dir:t});if(await Uc(e,`${t}/.git`,`${n}/.git`),c&&await _n({fs:e.lfs,cache:e.cache,dir:n,ref:c,force:!0}),await bn({fs:e.lfs,dir:n,remote:`origin`,url:r,force:!0}),await e.fs.flush(),!s){let t=await D({fs:e.lfs,cache:e.cache,dir:n});t.length>0&&(a+=`Checked out ${t.length} files.\n`)}return{stdout:s?``:`${a}done.\n`,stderr:``,exitCode:0}}catch(e){return Wc(e,n,r)}}async function Uc(e,t,n){let r=await e.lfs.lstat(t);if(r.isDirectory()){await e.lfs.mkdir(n,{recursive:!0});for(let r of await e.lfs.readdir(t))await Uc(e,`${t}/${r}`,`${n}/${r}`)}else r.isSymbolicLink()?await e.lfs.symlink(await e.lfs.readlink(t),n):await e.lfs.writeFile(n,await e.lfs.readFile(t))}function Wc(e,t,n){return{stdout:``,stderr:`fatal: ${Xs(e,n).replace(/'\/__opfs__\/[^']*<path>'/g,`'${t}'`).replace(/\/__opfs__\/[^\s'"<]*<path>/g,t).replace(/<path>/g,t)}\n`,exitCode:128}}const Gc=[`MERGE_HEAD`,`MERGE_MSG`,`MERGE_MODE`,`AUTO_MERGE`];async function Kc(e,t){return`${await On({fs:e.lfs,filepath:t})}/.git`}async function qc(e,t){try{return(await e.fs.readTextFile(t)).trim()}catch{return}}async function Jc(e,t){try{await e.fs.rm(t)}catch{}}async function Yc(e,t){try{return await qc(e,`${await Kc(e,t)}/MERGE_HEAD`)}catch{return}}async function Xc(e,t){return await Yc(e,t)!==void 0}async function Zc(e,t){try{return await qc(e,`${await Kc(e,t)}/MERGE_MSG`)}catch{return}}async function Qc(e,t,n){let r=await Kc(e,t);await e.fs.writeFile(`${r}/ORIG_HEAD`,`${n}\n`)}async function $c(e,t,n,r){let i=await Kc(e,t);await e.fs.writeFile(`${i}/MERGE_HEAD`,`${n}\n`),await e.fs.writeFile(`${i}/MERGE_MSG`,r.endsWith(`
|
|
27
|
+
`)?r:`${r}\n`)}async function el(e,t){let n;try{n=await Kc(e,t)}catch{return}await Promise.all(Gc.map(t=>Jc(e,`${n}/${t}`)))}async function tl(e,t){let n=await D({fs:e.lfs,cache:e.cache,dir:t}),r=[];for(let i of n)try{(await e.fs.readTextFile(`${t}/${i}`)).includes(`<<<<<<<`)&&r.push(i)}catch{}return r}const nl=new Set([`message`,`author`,`date`,`file`,`cleanup`,`amend`,`all`,`allow-empty`,`m`,`a`,`F`]);async function rl(e,t,n){let r=hl(n),i=M(r,I.commit).flags,a=await Yc(e,t),o=await pl(e,t,i);if(typeof o!=`string`){if(a){let n=await Zc(e,t);if(n)return await il(e,t,i,n,a)}return o}return await il(e,t,i,o,a)}async function il(e,t,n,r,i){let a=n.amend===!0,o=n.all===!0,s=n[`allow-empty`]===!0;if(o&&await ml(e,t),!s&&!a&&!i&&!(await O({fs:e.lfs,cache:e.cache,dir:t})).some(([,e,,t])=>t!==e))return{stdout:``,stderr:`nothing to commit, working tree clean
|
|
28
|
+
`,exitCode:1};let c=await dn({fs:e.lfs,cache:e.cache,dir:t,message:r,author:await e.resolveAuthor(t),amend:a,noUpdateBranch:void 0,...i?{parent:[await E({fs:e.lfs,dir:t,ref:`HEAD`}),i]}:{}});i&&await el(e,t);let l=c.slice(0,7);return{stdout:`[${await A({fs:e.lfs,dir:t})??`HEAD`} ${l}] ${r}\n`,stderr:``,exitCode:0}}function al(e,t){let n=e[t];if(n!==void 0&&n!==!0&&n!==!1)return L(e,t)}function ol(e){return Object.keys(e).find(e=>!nl.has(e))}function sl(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function cl(e){return{stdout:``,stderr:`error: switch \`${e}\` requires a value\n`,exitCode:1}}function ll(e){let t=ol(e);return t?sl(t):`message`in e||`m`in e?cl(`m`):`file`in e||`F`in e?cl(`F`):{stdout:``,stderr:"error: option `-m' or `-F' is required\n",exitCode:1}}function ul(){return{stdout:``,stderr:`Aborting commit due to empty commit message.
|
|
29
|
+
`,exitCode:1}}function dl(e){return{stdout:``,stderr:`error: could not read log file '${e}': No such file or directory\n`,exitCode:128}}async function fl(e,t,n){if(n===`-`)return e.stdin;let r=n.startsWith(`/`)?n:`${t}/${n}`;try{return await e.fs.readTextFile(r)}catch{return dl(n)}}async function pl(e,t,n){let r=al(n,`message`);if(r!==void 0)return r;let i=al(n,`file`);if(i!==void 0){let n=await fl(e,t,i);return typeof n==`string`&&n===``?ul():n}return ll(n)}async function ml(e,t){let n=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,a,o]of n)i!==0&&a!==o&&(a===0?await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:r}):await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:r}))}function hl(e){let t=[];for(let n=0;n<e.length;n++){let r=e[n];if(r.startsWith(`-`)&&!r.startsWith(`--`)&&r.length>2&&!r.includes(`=`)){let e=r.slice(1);for(let n of e)t.push(`-${n}`)}else t.push(r)}return t}async function gl(e,t,n){let r=n.includes(`--list`)||n.includes(`-l`),i=n.includes(`--unset`),a=n.includes(`--global`),o=n.find(e=>!e.startsWith(`-`)&&e.includes(`.`));if(r)return bl(e,t,a);if(i)return _l(e,t,o,a);if(!o)return{stdout:``,stderr:`usage: git config [--global] [--list] [--unset] <key> [<value>]
|
|
30
|
+
`,exitCode:1};let s=n.indexOf(o),c;for(let e=s+1;e<n.length;e++)if(!n[e].startsWith(`-`)){c=n[e];break}return c===void 0?yl(e,t,o,a):vl(e,t,o,c,a)}async function _l(e,t,n,r){if(!n)return{stdout:``,stderr:`error: key required for --unset
|
|
31
|
+
`,exitCode:1};if(n===`credential.token`||n===`github.token`)return await e.setGithubToken(``),{stdout:``,stderr:``,exitCode:0};if(r){let t=await e.getGlobalFs();try{let e=await t.readTextFile($n),r=Zn(e,n);await t.writeFile($n,r)}catch{}}else try{let r=`${t}/.git/config`,i=await e.fs.readTextFile(r),a=Zn(i,n);await e.fs.writeFile(r,a)}catch{}return{stdout:``,stderr:``,exitCode:0}}async function vl(e,t,n,r,i){return n===`credential.token`||n===`github.token`?(await e.setGithubToken(r),{stdout:``,stderr:``,exitCode:0}):(i?await Xn(await e.getGlobalFs(),n,r):await nn({fs:e.lfs,dir:t,path:n,value:r}),n===`user.name`&&e.setDefaultAuthorName(r),n===`user.email`&&e.setDefaultAuthorEmail(r),{stdout:``,stderr:``,exitCode:0})}async function yl(e,t,n,r){if(n===`credential.token`||n===`github.token`){let t=e.getGithubToken();return{stdout:t?`${t}\n`:``,stderr:``,exitCode:+!t}}let i;return r?i=await Qn(await e.getGlobalFs(),n):(i=await $t({fs:e.lfs,dir:t,path:n}),i||=await Qn(await e.getGlobalFs(),n)),{stdout:i?`${i}\n`:``,stderr:``,exitCode:+!i}}async function bl(e,t,n){let r=``;if(!n)try{let n=`${t}/.git/config`,i=await e.fs.readTextFile(n);r+=xl(i)}catch{}try{let t=await(await e.getGlobalFs()).readTextFile($n);r+=xl(t)}catch{}return{stdout:r,stderr:``,exitCode:0}}function xl(e){let t=``,n=``,r=``;for(let i of e.split(`
|
|
32
|
+
`)){let e=i.trim();if(!e||e.startsWith(`#`)||e.startsWith(`;`))continue;let a=e.match(/^\[(\w+)(?:\s+"([^"]*)")?\]$/);if(a){n=a[1].toLowerCase(),r=a[2]??``;continue}let o=e.match(/^(\w+)\s*=\s*(.*)$/);if(o&&n){let e=o[1],i=o[2].trim(),a=r?`${n}.${r}.${e}`:`${n}.${e}`;t+=`${a}=${i}\n`}}return t}const Sl=`/dev/null`,Cl={bytes:new Uint8Array,text:``,binary:!1};async function wl(e,t,n,r){if(n.length!==2)return{stdout:``,stderr:`usage: git diff --no-index [<options>] <path> <path>
|
|
33
|
+
`,exitCode:129};let[i,a]=await Promise.all([Al(e,t,n[0]),Al(e,t,n[1])]);[i,a]=await jl(e,t,i,a);let o=i.kind===`missing`?i:a.kind===`missing`?a:void 0;if(o)return{stdout:``,stderr:`error: Could not access '${o.given}'\n`,exitCode:1};let s=(i.kind===`dir`&&a.kind===`dir`?await Fl(e,i,a):[await Nl(e,i,a)]).filter(e=>!Tl(e.oldBlob.bytes,e.newBlob.bytes));return s.length===0?{stdout:``,stderr:``,exitCode:0}:{stdout:El(s,r,e.useColor),stderr:``,exitCode:1}}function Tl(e,t){if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}function El(e,t,n){if(t.nameOnly)return`${e.map(e=>e.absent===`new`?Sl:e.newName).join(`
|
|
34
|
+
`)}\n`;if(t.stat)return Le(e.map(Ol),{color:n});let r=``;for(let i of e){if(i.oldBlob.binary||i.newBlob.binary){r+=`diff --git a/${i.oldName} b/${i.newName}\n`,r+=`Binary files ${Dl(i,`old`)} and ${Dl(i,`new`)} differ\n`;continue}r+=Re({oldContent:i.oldBlob.text,newContent:i.newBlob.text,oldName:i.oldName,newName:i.newName,absent:i.absent,context:t.context,color:n})}return r}function Dl(e,t){return e.absent===t?Sl:t===`old`?`a/${e.oldName}`:`b/${e.newName}`}function Ol(e){return{name:kl(e.absent===`old`?Sl:e.oldName,e.absent===`new`?Sl:e.newName),oldContent:e.oldBlob.text,newContent:e.newBlob.text,binary:e.oldBlob.binary||e.newBlob.binary?{oldSize:e.oldBlob.bytes.byteLength,newSize:e.newBlob.bytes.byteLength}:void 0}}function kl(e,t){if(e===t)return e;let n=0,r=Math.min(e.length,t.length);for(let i=0;i<r&&e[i]===t[i];i++)e[i]===`/`&&(n=i+1);let i=n>0?n-1:0,a=0;for(let n=e.length-1,r=t.length-1;n>=i&&r>=i&&e[n]===t[r];n--,r--)e[n]===`/`&&(a=e.length-n);if(n+a===0)return`${e} => ${t}`;let o=e.slice(n,Math.max(n,e.length-a)),s=t.slice(n,Math.max(n,t.length-a));return`${e.slice(0,n)}{${o} => ${s}}${e.slice(e.length-a)}`}async function Al(e,t,n){if(n===Sl)return{kind:`null`,given:n};let r=b(n.startsWith(`/`)?n:`${t}/${n}`);try{return(await e.fs.stat(r)).type===`directory`?{kind:`dir`,abs:r,given:n}:{kind:`file`,abs:r,given:n}}catch{return{kind:`missing`,given:n}}}async function jl(e,t,n,r){return n.kind===`dir`&&(r.kind===`file`||r.kind===`null`)?[await Al(e,t,`${n.given}/${Ml(r.given)}`),r]:r.kind===`dir`&&(n.kind===`file`||n.kind===`null`)?[n,await Al(e,t,`${r.given}/${Ml(n.given)}`)]:[n,r]}function Ml(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}async function Nl(e,t,n){let[r,i]=await Promise.all([Pl(e,t),Pl(e,n)]),a=t.kind===`null`?`old`:n.kind===`null`?`new`:void 0,o=Rl(t.kind===`null`?n.given:t.given);return{oldName:a?o:Rl(t.given),newName:a?o:Rl(n.given),absent:a,oldBlob:r,newBlob:i}}function Pl(e,t){return t.kind===`file`?Ll(e,t.abs):Promise.resolve(Cl)}async function Fl(e,t,n){let[r,i]=await Promise.all([Il(e,t.abs),Il(e,n.abs)]),a=[...new Set([...r,...i])].sort(),o=[];for(let s of a){let a=Rl(`${t.given}/${s}`),c=Rl(`${n.given}/${s}`);i.has(s)?r.has(s)?o.push({oldName:a,newName:c,oldBlob:await Ll(e,`${t.abs}/${s}`),newBlob:await Ll(e,`${n.abs}/${s}`)}):o.push({oldName:c,newName:c,absent:`old`,oldBlob:Cl,newBlob:await Ll(e,`${n.abs}/${s}`)}):o.push({oldName:a,newName:a,absent:`new`,oldBlob:await Ll(e,`${t.abs}/${s}`),newBlob:Cl})}return o}async function Il(e,t){let n=new Set,r=async i=>{let a=await e.fs.readDir(i?`${t}/${i}`:t);for(let e of a){let t=i?`${i}/${e.name}`:e.name;e.type===`directory`?await r(t):n.add(t)}};return await r(``),n}async function Ll(e,t){let n=await e.fs.readFile(t,{encoding:`binary`}),r=typeof n==`string`?new TextEncoder().encode(n):n,i=r.subarray(0,8e3).includes(0);return{bytes:r,text:i?``:new TextDecoder().decode(r),binary:i}}function Rl(e){return e.replace(/^\/+/,``)}function zl(e){return(t,n)=>{let r=[];for(let i of n){let n=i.find(e=>typeof e==`string`),a=i.map(e=>typeof e==`string`);(n===void 0||e(n,a))&&r.push(t(i))}return Promise.all(r)}}async function Bl(e,t,n){let r=eu(n),i=Js(r,I.diff);if(i)return i;let{flags:a,positionals:o,doubleDashRest:s}=M(r,I.diff),c=a.staged===!0||a.cached===!0,l=o.length>=2?o.slice(2):[],u={nameOnly:a[`name-only`]===!0,nameStatus:a[`name-status`]===!0,stat:a.stat===!0,pathspecs:[...l,...s],context:tu(a.unified)};if(a[`no-index`]===!0||a.index===!1)return wl(e,t,o,u);if(o.length>=2)return Kl(e,t,o[0],o[1],u);if(o.length===1){let n=nu(o[0]);if(n)return ql(e,t,n[0],n[1],u);let r=ru(o[0]);return r?Kl(e,t,r[0],r[1],u):c?Hl(e,t,o[0],u):Yl(e,t,o[0],u)}return $l(e,c?await Vl(e,t,u.pathspecs):await Ul(e,t,u.pathspecs),u)}async function Vl(e,t,n=[],r=`HEAD`){let i=[];return await Wt({fs:e.lfs,cache:e.cache,dir:t,trees:[yn({ref:r}),wn()],iterate:zl(e=>Oc(e,n)),map:async(r,[a,o])=>{if(r===`.`||r===`.git`||r.startsWith(`.git/`)||!Dc(r,n))return;let s=a?await a.type():void 0,c=o?await o.type():void 0;if(s===`tree`||c===`tree`)return;let l=a?await a.oid():void 0,u=o?await o.oid():void 0;if(l===u)return;let d=await Gl(e,t,l),f=await Gl(e,t,u);i.push({filepath:r,oldContent:d,newContent:f,oldPresent:!!l,newPresent:!!u})}}),i}async function Hl(e,t,n,r){let i;try{i=await yc(e,t,n)}catch{return au(n)}return $l(e,await Vl(e,t,r.pathspecs,i),r)}async function Ul(e,t,n=[]){let r=[];return await Wt({fs:e.lfs,cache:e.cache,dir:t,trees:[wn(),Sn($s)],iterate:zl((e,[t])=>t===!0&&Oc(e,n)),map:async(i,[a,o])=>{if(i===`.`)return;if(!a)return null;let s=await a.type();if(s===`tree`)return;if(s!==`blob`||!Dc(i,n))return null;let c=await a.oid(),l=await Wl(o);if(l&&c&&(await Vt({object:l})).oid===c)return null;let u=await Gl(e,t,c),d=l?new TextDecoder().decode(l):``;return u!==d&&r.push({filepath:i,oldContent:u,newContent:d,oldPresent:!!c,newPresent:!!l}),null}}),r.sort((e,t)=>e.filepath<t.filepath?-1:+(e.filepath>t.filepath)),r}async function Wl(e){if(e)try{return await e.type()===`blob`?await e.content()??void 0:void 0}catch{return}}async function Gl(e,t,n){if(!n)return``;try{let{blob:r}=await Ut({fs:e.lfs,dir:t,oid:n,cache:e.cache});return new TextDecoder().decode(r)}catch{return``}}async function Kl(e,t,n,r,i){try{return await Jl(e,t,await yc(e,t,n),await yc(e,t,r),i)}catch{return au(await iu(e,t,[n,r])??n)}}async function ql(e,t,n,r,i){let a=n||`HEAD`,o=r||`HEAD`;try{let n=await yc(e,t,a),r=await yc(e,t,o),s=await cn({fs:e.lfs,cache:e.cache,dir:t,oids:[n,r]});return s[0]?await Jl(e,t,s[0],r,i):{stdout:``,stderr:`fatal: '${a}...${o}' has no merge base\n`,exitCode:128}}catch{return au(await iu(e,t,[a,o])??a)}}async function Jl(e,t,n,r,i){let a=[];return await Wt({fs:e.lfs,cache:e.cache,dir:t,trees:[yn({ref:n}),yn({ref:r})],iterate:zl(e=>Oc(e,i.pathspecs??[])),map:async(e,[t,n])=>{if(await Zl(t,n))return null;let r=await Ql(e,t,n,i.pathspecs??[]);r&&a.push(r)}}),$l(e,a,i)}async function Yl(e,t,n,r){let i;try{i=await yc(e,t,n)}catch{return au(n)}let a=new Set(await D({fs:e.lfs,dir:t,cache:e.cache})),o=Xl(a),s=[];return await Wt({fs:e.lfs,cache:e.cache,dir:t,trees:[yn({ref:i}),Sn($s)],iterate:zl((e,[t])=>(t===!0||a.has(e)||o.has(e))&&Oc(e,r.pathspecs??[])),map:async(e,[t,n])=>{if(!t&&!a.has(e)&&!o.has(e))return null;let i=await Ql(e,t,n,r.pathspecs??[]);i&&s.push(i)}}),$l(e,s,r)}function Xl(e){let t=new Set;for(let n of e){let e=n.indexOf(`/`);for(;e>0;)t.add(n.slice(0,e)),e=n.indexOf(`/`,e+1)}return t}async function Zl(e,t){if(!e||!t||await e.type()!==`tree`||await t.type()!==`tree`)return!1;let n=await e.oid();return!!n&&n===await t.oid()}async function Ql(e,t,n,r){if(e===`.`||!Dc(e,r))return null;let i=t?await t.type():void 0,a=n?await n.type():void 0;if(i===`tree`||a===`tree`)return null;let o=t?await t.oid():void 0,s=n?await n.oid():void 0;if(o===s)return null;let c=t?await t.content():void 0,l=n?await n.content():void 0;return{filepath:e,oldContent:c?new TextDecoder().decode(c):``,newContent:l?new TextDecoder().decode(l):``,oldPresent:!!o,newPresent:!!s}}function $l(e,t,n){return t.length===0?{stdout:``,stderr:``,exitCode:0}:n.nameStatus?{stdout:`${t.map(e=>{let t=e.oldPresent??e.oldContent!==``,n=e.newPresent??e.newContent!==``;return`${t?n?`M`:`D`:`A`}\t${e.filepath}`}).join(`
|
|
35
35
|
`)}\n`,stderr:``,exitCode:0}:n.nameOnly?{stdout:`${t.map(e=>e.filepath).join(`
|
|
36
|
-
`)}\n`,stderr:``,exitCode:0}:n.stat?
|
|
37
|
-
`)[0]}\n`:(i+=`${
|
|
38
|
-
`)}\n\n`),r.showStat&&(i+=await
|
|
39
|
-
`)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,r.toLocaleString()).replace(/%ar/g,
|
|
40
|
-
`,exitCode:129};let u=await
|
|
41
|
-
`,exitCode:128};if(await
|
|
36
|
+
`)}\n`,stderr:``,exitCode:0}:n.stat?ou(t,e.useColor):{stdout:t.map(t=>Re({oldContent:t.oldContent,newContent:t.newContent,oldName:t.filepath,newName:t.filepath,context:n.context,color:e.useColor})).join(``),stderr:``,exitCode:0}}function eu(e){let t=e.indexOf(`--`);return e.map((e,n)=>(t===-1||n<t)&&/^-U\d+$/.test(e)?`--unified=${e.slice(2)}`:e)}function tu(e){let t=Array.isArray(e)?e[e.length-1]:e;if(t===void 0||typeof t==`boolean`||t===``)return;let n=Number.parseInt(String(t),10);return Number.isInteger(n)&&n>=0?n:void 0}function nu(e){let t=e.indexOf(`...`);return t===-1?null:[e.slice(0,t),e.slice(t+3)]}function ru(e){if(e.includes(`...`))return null;let t=/^(.+)\.\.([^.]*)$/.exec(e);return t?.[1]!==void 0&&t[2]!==void 0?[t[1],t[2]]:null}async function iu(e,t,n){for(let r of n)try{await yc(e,t,r)}catch{return r}return null}function au(e){return{stdout:``,stderr:`fatal: ambiguous argument '${e}'\n`,exitCode:128}}function ou(e,t=!1){return{stdout:Le(e.map(e=>({name:e.filepath,oldContent:e.oldContent,newContent:e.newContent})),{color:t}),stderr:``,exitCode:0}}async function su(e,t,n,r){let i=[];if(await Wt({fs:e.lfs,cache:e.cache,dir:t,trees:[yn({ref:n})],map:async(e,[t])=>{if(e===`.`||!t||await t.type()!==`blob`)return;let n=await t.content();n&&i.push({filepath:e,content:new TextDecoder().decode(n)})}}),i.length===0)return``;if(r)return ou(i.map(e=>({filepath:e.filepath,oldContent:``,newContent:e.content})),e.useColor).stdout;let a=``;for(let t of i)a+=Re({oldContent:``,newContent:t.content,oldName:t.filepath,newName:t.filepath,color:e.useColor});return a}async function cu(e,t,n){let r=Js(n,I.fetch);if(r)return r;let{flags:i,positionals:a}=M(n,I.fetch),o=i,s=a[0]??`origin`,c=a[1],l=o.prune===!0,u=o.quiet===!0,d=L(o,`depth`),f=u?``:`Fetching ${s}\n`,p=await kn({fs:e.lfs,cache:e.cache,http:zc,dir:t,remote:s,ref:c,corsProxy:e.corsProxy,prune:l,depth:d?parseInt(d,10):void 0,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:u?void 0:e=>{f+=`${e.phase}: ${e.loaded}/${e.total}\n`}});return p.fetchHead&&(await lu(e,t,p.fetchHead,p.fetchHeadDescription),u||(f+=`From ${s}\n`,f+=` ${p.fetchHead.slice(0,7)}..${p.fetchHeadDescription??``}\n`)),{stdout:f,stderr:``,exitCode:0}}async function lu(e,t,n,r){let i=await On({fs:e.lfs,filepath:t}),a=r??``;await e.fs.writeFile(`${i}/.git/FETCH_HEAD`,`${n}\t\t${a}\n`)}async function uu(e,t,n){let r=M(n,I.init).flags,i=L(r,`initial-branch`)??e.getConfigOverrides()?.get(`init.defaultbranch`)??`main`;return await Dn({fs:e.lfs,dir:t,defaultBranch:i}),{stdout:`Initialized empty Git repository in ${t}/.git/\n`,stderr:``,exitCode:0}}function du(e,t){let n=e.entry.commit.committer.timestamp,r=t.entry.commit.committer.timestamp;return n===r?e.tipRank===t.tipRank?e.seq<t.seq:e.tipRank<t.tipRank:n>r}var fu=class{heap=[];pushed=0;push(e,t){this.heap.push({entry:e,tipRank:t,seq:this.pushed++});let n=this.heap.length-1;for(;n>0;){let e=n-1>>1;if(!du(this.heap[n],this.heap[e]))break;this.swap(n,e),n=e}}pop(){let e=this.heap[0];if(e===void 0)return;let t=this.heap.pop();return t!==void 0&&this.heap.length>0&&(this.heap[0]=t,this.siftDown()),e}siftDown(){for(let e=0;;){let t=e*2+1,n=e;if(t<this.heap.length&&du(this.heap[t],this.heap[n])&&(n=t),t+1<this.heap.length&&du(this.heap[t+1],this.heap[n])&&(n=t+1),n===e)return;this.swap(e,n),e=n}}swap(e,t){let n=this.heap[e];this.heap[e]=this.heap[t],this.heap[t]=n}};async function pu(e,t,n){try{return await E({fs:e.lfs,dir:t,ref:n})}catch{return}}async function mu(e,t,n,r){try{return await k({fs:e.lfs,dir:t,oid:n,cache:r})}catch{return}}async function hu(e,t,n,r,i){let a=await Ht({fs:e.lfs,dir:t});for(let[o,s]of a.entries()){let a=await pu(e,t,s);if(a===void 0||r.has(a))continue;r.add(a);let c=await mu(e,t,a,i);c&&n.push(c,o)}}async function*gu(e,t,n){let r=new Set,i=new fu;for(await hu(e,t,i,r,n.cache);;){let a=i.pop();if(a===void 0)return;yield a.entry;for(let o of a.entry.commit.parent){if(r.has(o))continue;r.add(o);let s=await mu(e,t,o,n.cache);s&&i.push(s,a.tipRank)}}}async function _u(e,t,n){let r=[];if(n.limit<=0)return r;for await(let i of gu(e,t,{cache:n.cache}))if(r.push(i),r.length>=n.limit)break;return r}async function vu(e,t,n){let{flags:r,positionals:i,doubleDashRest:a}=M(n,I.log),o=r,s=L(o,`max-count`),c=o.oneline===!0,l=o.stat===!0,u=o.reverse===!0,d=o.all===!0,f=L(o,`format`),p=L(o,`author`),m=L(o,`grep`),h=L(o,`follow`),g=await yu(e,t,{all:d,maxCount:s?parseInt(s,10):void 0,revision:i[0],pathspecs:a,followFile:h});return p&&(g=g.filter(e=>e.commit.author.name.includes(p))),m&&(g=g.filter(e=>e.commit.message.includes(m))),u&&(g=g.slice().reverse()),{stdout:await Ou(e,t,g,{format:f,oneline:c,showStat:l}),stderr:``,exitCode:0}}async function yu(e,t,n){let r=n.revision?Mu(n.revision):null,i=r?.[1]??n.revision,a=Nu(e.cache),o=n.maxCount??10;if(n.pathspecs.length>0&&!n.all&&!r&&!n.followFile)return await Tu(e,t,{ref:i,pathspecs:n.pathspecs,limit:o,caches:a});if(n.all&&n.pathspecs.length>0)return await Su(e,t,{pathspecs:n.pathspecs,limit:o,caches:a,exclude:r?await xu(e,t,r[0],a):void 0});let s=n.all?await _u(e,t,{limit:n.maxCount??bu,cache:a.git}):await hn({fs:e.lfs,dir:t,cache:a.git,...i?{ref:i}:{},...!r&&n.pathspecs.length===0?{depth:n.maxCount??10}:{},...n.followFile?{filepath:n.followFile,follow:!0}:{}});if(r){let n=await xu(e,t,r[0],a);s=s.filter(e=>!n.has(e.oid))}return n.pathspecs.length>0?await Du(e,t,s,n.pathspecs,o,a):r?s.slice(0,o):s}const bu=50;async function xu(e,t,n,r){let i=await hn({fs:e.lfs,dir:t,cache:r.git,ref:n});return new Set(i.map(e=>e.oid))}async function Su(e,t,n){let r=[],i=[],a=async()=>{if(i.length>0){let a=n.limit-r.length;r.push(...await Du(e,t,i,n.pathspecs,a,n.caches)),i=[]}return r.length>=n.limit};for await(let o of gu(e,t,{cache:n.caches.git}))if(!n.exclude?.has(o.oid)&&(i.push(o),i.length>=64&&await a()))return r;return await a(),r}function Cu(e){let t=e.replace(/^\.\//,``).replace(/\/+$/,``);return t===`.`?``:t}function wu(e){let t=[...new Set(e.map(Cu))];return t.some(e=>e===``)?null:t}async function Tu(e,t,n){let r=n.ref?{ref:n.ref}:{},i=wu(n.pathspecs);return i===null?await hn({fs:e.lfs,dir:t,cache:n.caches.git,...r,depth:n.limit}):i.length===1?(await hn({fs:e.lfs,dir:t,cache:n.caches.git,...r,filepath:i[0],depth:n.limit,force:!0})).slice(0,n.limit):await Eu(e,t,{refArg:r,specs:i,limit:n.limit,caches:n.caches})}async function Eu(e,t,n){let r=[],i=0,a=Math.max(n.limit*4,32);for(;;){let o=await hn({fs:e.lfs,dir:t,cache:n.caches.git,...n.refArg,depth:a});for(let e of o)n.caches.commitTrees.set(e.oid,e.commit.tree);for(let a of o.slice(i))if(await Lu(e,t,a,n.specs,n.caches)&&(r.push(a),r.length>=n.limit))return r;if(o.length<a)return r;i=o.length,a*=2}}async function Du(e,t,n,r,i,a){let o=wu(r);if(o===null)return n.slice(0,i);for(let e of n)a.commitTrees.set(e.oid,e.commit.tree);let s=[];for(let r of n)if(await Lu(e,t,r,o,a)&&s.push(r),s.length>=i)break;return s}async function Ou(e,t,n,r){let i=``;for(let a of n){let{commit:n,oid:o}=a;r.format?i+=`${ku(o,n,r.format)}\n`:r.oneline?i+=`${uc(e.useColor,`33`,o.slice(0,7))} ${n.message.split(`
|
|
37
|
+
`)[0]}\n`:(i+=`${uc(e.useColor,`33`,`commit ${o}`)}\n`,i+=`Author: ${n.author.name} <${n.author.email}>\n`,i+=`Date: ${new Date(n.author.timestamp*1e3).toLocaleString()}\n\n`,i+=` ${n.message.replace(/\n/g,`
|
|
38
|
+
`)}\n\n`),r.showStat&&(i+=await ju(e,t,a))}return i}function ku(e,t,n){let r=new Date(t.author.timestamp*1e3);return n.replace(/%H/g,e).replace(/%h/g,e.slice(0,7)).replace(/%s/g,t.message.split(`
|
|
39
|
+
`)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,r.toLocaleString()).replace(/%ar/g,Au(r))}function Au(e){let t=Date.now()-e.getTime(),n=Math.floor(t/1e3),r=Math.floor(n/60),i=Math.floor(r/60),a=Math.floor(i/24),o=Math.floor(a/7),s=Math.floor(a/30),c=Math.floor(a/365);return n<60?`${n} seconds ago`:r<60?`${r} minute${r===1?``:`s`} ago`:i<24?`${i} hour${i===1?``:`s`} ago`:a<7?`${a} day${a===1?``:`s`} ago`:o<4?`${o} week${o===1?``:`s`} ago`:s<12?`${s} month${s===1?``:`s`} ago`:`${c} year${c===1?``:`s`} ago`}async function ju(e,t,n){let{commit:r,oid:i}=n,a=r.parent.length>0?r.parent[0]:void 0;return a?(await Kl(e,t,a,i,{nameOnly:!1,stat:!0})).stdout:await su(e,t,i,!0)}function Mu(e){let t=/^(.+)\.\.([^.]*)$/.exec(e);return t?.[2]?[t[1],t[2]]:null}function Nu(e){return{git:e,commitTrees:new Map,trees:new Map,entries:new Map}}async function Pu(e,t,n,r){let i=r.trees.get(n);if(i)return i;let{tree:a}=await qt({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.trees.set(n,a),a}async function Fu(e,t,n,r){let i=r.commitTrees.get(n);if(i)return i;let{commit:a}=await k({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.commitTrees.set(n,a.tree),a.tree}async function Iu(e,t,n,r,i){let a=`${n}\u0000${r}`;if(i.entries.has(a))return i.entries.get(a);let o=r.split(`/`),s=n,c;for(let n=0;n<o.length&&s!==void 0;n++){let r=(await Pu(e,t,s,i)).find(e=>e.path===o[n]);if(!r)break;if(n===o.length-1){c=r.oid;break}s=r.type===`tree`?r.oid:void 0}return i.entries.set(a,c),c}async function Lu(e,t,n,r,i){let a=n.commit.parent[0],o=a?await Fu(e,t,a,i):void 0;for(let a of r)if(await Iu(e,t,n.commit.tree,a,i)!==(o===void 0?void 0:await Iu(e,t,o,a,i)))return!0;return!1}async function Ru(e,t,n){let r=n.includes(`--modified`)||n.includes(`-m`),i=n.includes(`--others`)||n.includes(`-o`),a=n.includes(`--deleted`)||n.includes(`-d`),o=n.filter(e=>!e.startsWith(`-`)).map(e=>e.replace(/\/+$/,``)).filter(e=>e.length>0),s=await O({fs:e.lfs,cache:e.cache,dir:t,...$s}),c=[],l=i?`others`:r?`modified`:a?`deleted`:`cached`;for(let[e,t,n,r]of s)Bu(l,t,n,r)&&(o.length>0&&!zu(e,o)||c.push(e));return c.sort(),{stdout:c.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}function zu(e,t){for(let n of t)if(e===n||e.startsWith(n+`/`))return!0;return!1}function Bu(e,t,n,r){switch(e){case`others`:return t===0&&r===0&&n===2;case`modified`:return n!==0&&n!==r&&t!==0;case`deleted`:return n===0&&(t!==0||r!==0);case`cached`:if(r!==0||t!==0){if(n===0&&r===0&&t!==0)return!1;if(r!==0||t!==0&&n!==0)return!0}return!1}}async function Vu(e,t,n){let r=n.includes(`--heads`)||n.includes(`-h`),i=n.includes(`--tags`)||n.includes(`-t`),a=n.includes(`--symref`),o=n.filter(e=>!e.startsWith(`-`)),s=o[0]??`origin`,c=o.slice(1),l=(await Xt({fs:e.lfs,dir:t}).catch(()=>[])).find(e=>e.remote===s)?.url??s;try{let t=r&&!i?`refs/heads/`:i&&!r?`refs/tags/`:void 0,o=(await gn({http:zc,url:l,corsProxy:e.corsProxy,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),prefix:t,symrefs:a,peelTags:i})).filter(e=>Hu(e.ref,c)).map(e=>`${a&&e.target?`ref: ${e.target}\t${e.ref}\n`:``}${e.oid}\t${e.ref}\n`).join(``);return{stdout:o,stderr:``,exitCode:n.includes(`--exit-code`)&&!o?2:0}}catch(e){return{stdout:``,stderr:`fatal: ${Qs(e instanceof Error?e.message:String(e),l)}\n`,exitCode:128}}}function Hu(e,t){return t.length===0||t.some(t=>{let n=t.replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*/g,`.*`);return RegExp(`^(?:refs/(?:heads|tags)/)?${n}$`).test(e)})}async function Uu(e,t,n){let{flags:r,positionals:i}=M(n,I[`ls-tree`]),a=r.r===!0,o=r.d===!0,s=r[`name-only`]===!0,c=i[0],l=Wu(i.slice(1));if(!c)return{stdout:``,stderr:`usage: git ls-tree [<options>] <tree-ish> [<path>...]
|
|
40
|
+
`,exitCode:129};let u=await xc(e,t,c);if(u===void 0)return{stdout:``,stderr:`fatal: Not a valid object name ${c}\n`,exitCode:128};let d;try{d=(await qt({fs:e.lfs,cache:e.cache,dir:t,oid:u})).tree}catch{return{stdout:``,stderr:`fatal: Not a valid object name ${c}\n`,exitCode:128}}let f=[];return await Gu(e,t,d,``,l,a,o,s,f),{stdout:f.join(``),stderr:``,exitCode:0}}function Wu(e){let t=[];for(let n of e){let e=n;for(e.startsWith(`./`)&&(e=e.slice(2));e.length>1&&e.endsWith(`/`);)e=e.slice(0,-1);t.push(e)}return t}async function Gu(e,t,n,r,i,a,o,s,c){for(let l of n){let n=r?`${r}/${l.path}`:l.path,u=Ku(n,i);if(u!==`no`){if(l.type===`tree`){let r=u===`exact`&&(o||!a),d=u===`parent`||a;if(r&&c.push(qu(l,n,s)),d){let{tree:r}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:l.oid});await Gu(e,t,r,n,i,a,o,s,c)}}else u!==`parent`&&!o&&c.push(qu(l,n,s))}}}function Ku(e,t){if(t.length===0)return`exact`;let n=!1;for(let r of t){if(r===``||e===r||e.startsWith(`${r}/`))return`exact`;r.startsWith(`${e}/`)&&(n=!0)}return n?`parent`:`no`}function qu(e,t,n){return n?`${t}\n`:`${e.mode.padStart(6,`0`)} ${e.type} ${e.oid}\t${t}\n`}function Ju(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function Yu(e,t){let n,r=!1;for(let t of Ju(e.flags[`strategy-option`]))t===`ours`||t===`theirs`||t===`union`?n=t:t===`diff3`&&(r=!0);return{noFf:e.flags.ff===!1||t.includes(`--no-ff`),ffOnly:e.flags[`ff-only`]===!0||t.includes(`--ff-only`),favor:n,diff3:r}}async function Xu(e,t,n){let r=Js(n,I.merge);if(r)return r;let i=M(n,I.merge);if(i.flags.abort===!0)return Zu(e,t);let a=i.positionals[0];if(!a)return{stdout:``,stderr:`fatal: No branch specified to merge.
|
|
41
|
+
`,exitCode:128};if(await Xc(e,t))return{stdout:``,stderr:`fatal: You have not concluded your merge (MERGE_HEAD exists).
|
|
42
42
|
Please, commit your changes before you merge.
|
|
43
|
-
`,exitCode:128};let o=await
|
|
43
|
+
`,exitCode:128};let o=await xc(e,t,a);if(!o)return{stdout:``,stderr:`fatal: Could not find ${a}.\n`,exitCode:128};let{noFf:s,ffOnly:c,favor:l,diff3:u}=Yu(i,n);try{await Qc(e,t,await E({fs:e.lfs,dir:t,ref:`HEAD`}));let n=await Jt({fs:e.lfs,cache:e.cache,dir:t,ours:await A({fs:e.lfs,dir:t})??void 0,theirs:o,fastForward:!s,fastForwardOnly:c,author:await e.resolveAuthor(t),abortOnConflict:!1,mergeDriver:vc({favor:l,diff3:u})});return n.alreadyMerged?{stdout:`Already up to date.
|
|
44
44
|
`,stderr:``,exitCode:0}:n.fastForward?(await _n({fs:e.lfs,cache:e.cache,dir:t,ref:await A({fs:e.lfs,dir:t})??`HEAD`}),{stdout:`Updating..${n.oid?n.oid.slice(0,7):``}\nFast-forward\n`,stderr:``,exitCode:0}):n.mergeCommit?(await _n({fs:e.lfs,cache:e.cache,dir:t,ref:await A({fs:e.lfs,dir:t})??`HEAD`,force:!0}),{stdout:`Merge made by the 'ort' strategy.
|
|
45
45
|
`,stderr:``,exitCode:0}):{stdout:`Merge complete.
|
|
46
|
-
`,stderr:``,exitCode:0}}catch(n){return n instanceof Error&&n.name===`MergeConflictError`&&await
|
|
47
|
-
`,exitCode:128};try{await mn({fs:e.lfs,cache:e.cache,dir:t,commit:`HEAD`})}catch{}return await _n({fs:e.lfs,cache:e.cache,dir:t,ref:await A({fs:e.lfs,dir:t})??`HEAD`,force:!0}),await
|
|
46
|
+
`,stderr:``,exitCode:0}}catch(n){return n instanceof Error&&n.name===`MergeConflictError`&&await $c(e,t,o,`Merge branch '${a}' into ${await A({fs:e.lfs,dir:t})??`HEAD`}`),Qu(n)}}async function Zu(e,t){if(!await Xc(e,t))return{stdout:``,stderr:`fatal: There is no merge to abort (MERGE_HEAD missing).
|
|
47
|
+
`,exitCode:128};try{await mn({fs:e.lfs,cache:e.cache,dir:t,commit:`HEAD`})}catch{}return await _n({fs:e.lfs,cache:e.cache,dir:t,ref:await A({fs:e.lfs,dir:t})??`HEAD`,force:!0}),await el(e,t),{stdout:``,stderr:``,exitCode:0}}function Qu(e){if(e instanceof Error&&e.name===`MergeConflictError`)return{stdout:(e.data?.filepaths??[]).map(e=>`CONFLICT (content): Merge conflict in ${e}\n`).join(``),stderr:`Automatic merge failed; fix conflicts and then commit the result.
|
|
48
48
|
`,exitCode:1};if(e instanceof Error&&e.name===`MergeNotSupportedError`)return{stdout:``,stderr:`fatal: merge is not possible because you have unmerged files.
|
|
49
49
|
`,exitCode:128};if(e instanceof Error&&e.name===`FastForwardError`)return{stdout:``,stderr:`fatal: Not possible to fast-forward, aborting.
|
|
50
|
-
`,exitCode:128};throw e}async function
|
|
51
|
-
`,exitCode:129};try{let n=await Promise.all(i.slice(0,2).map(n=>
|
|
52
|
-
`,exitCode:128}}}function
|
|
53
|
-
`,exitCode:255};let a=
|
|
50
|
+
`,exitCode:128};throw e}async function $u(e,t,n){let r=n.includes(`--is-ancestor`),i=n.filter(e=>!e.startsWith(`-`));if(i.length<2)return{stdout:``,stderr:`usage: git merge-base <commit> <commit>
|
|
51
|
+
`,exitCode:129};try{let n=await Promise.all(i.slice(0,2).map(n=>yc(e,t,n)));if(r)return n[0]===n[1]?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:``,exitCode:+!await en({fs:e.lfs,cache:e.cache,dir:t,oid:n[1],ancestor:n[0],depth:-1})};let a=await cn({fs:e.lfs,cache:e.cache,dir:t,oids:n});return{stdout:a[0]?`${a[0]}\n`:``,stderr:``,exitCode:+!a[0]}}catch{return{stdout:``,stderr:`fatal: Not a valid object name
|
|
52
|
+
`,exitCode:128}}}function ed(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}async function td(e,t,n){let r=M(n,I[`merge-file`]),i=r.positionals;if(i.length!==3)return{stdout:``,stderr:`usage: git merge-file [<options>] <current-file> <base-file> <other-file>
|
|
53
|
+
`,exitCode:255};let a=ed(r.flags.L);if(a.length>3)return{stdout:``,stderr:`fatal: too many labels on the command line
|
|
54
54
|
`,exitCode:255};let o=[r.flags.ours?`ours`:void 0,r.flags.theirs?`theirs`:void 0,r.flags.union?`union`:void 0].filter(e=>e!==void 0);if(o.length>1)return{stdout:``,stderr:`fatal: --ours, --theirs, and --union are mutually exclusive
|
|
55
|
-
`,exitCode:255};let[s,c,l]=i,u=e=>e.startsWith(`/`)?e:`${t}/${e}`,d,f,p;try{d=await e.fs.readTextFile(u(s)),f=await e.fs.readTextFile(u(c)),p=await e.fs.readTextFile(u(l))}catch(e){return{stdout:``,stderr:`error: ${e instanceof Error?e.message:String(e)}\n`,exitCode:255}}let m=ze(d,f,p,{diff3:!!r.flags.diff3,favor:o[0],labels:{current:a[0]??s,base:a[1]??c,other:a[2]??l}}),h=o.length>0?0:m.conflicts,g=!r.flags.quiet&&h>0?`warning: merge conflict in ${s}\n`:``,_=Math.min(h,127);return r.flags.stdout?{stdout:m.content,stderr:g,exitCode:_}:(await e.fs.writeFile(u(s),m.content),{stdout:``,stderr:g,exitCode:_})}async function
|
|
56
|
-
`),{stdout:d,stderr:``,exitCode:0}}async function
|
|
57
|
-
`,exitCode:128};if(await
|
|
55
|
+
`,exitCode:255};let[s,c,l]=i,u=e=>e.startsWith(`/`)?e:`${t}/${e}`,d,f,p;try{d=await e.fs.readTextFile(u(s)),f=await e.fs.readTextFile(u(c)),p=await e.fs.readTextFile(u(l))}catch(e){return{stdout:``,stderr:`error: ${e instanceof Error?e.message:String(e)}\n`,exitCode:255}}let m=ze(d,f,p,{diff3:!!r.flags.diff3,favor:o[0],labels:{current:a[0]??s,base:a[1]??c,other:a[2]??l}}),h=o.length>0?0:m.conflicts,g=!r.flags.quiet&&h>0?`warning: merge conflict in ${s}\n`:``,_=Math.min(h,127);return r.flags.stdout?{stdout:m.content,stderr:g,exitCode:_}:(await e.fs.writeFile(u(s),m.content),{stdout:``,stderr:g,exitCode:_})}async function nd(e,t,n){let r=Js(n,I.pull);if(r)return r;let{flags:i,positionals:a}=M(n,I.pull),o=a[0]??`origin`,s=a[1],c=i[`ff-only`]===!0||n.includes(`--ff-only`),l=i.ff===!1||n.includes(`--no-ff`),u=i.quiet===!0,d=u?``:`Pulling from ${o}...\n`;return await Yt({fs:e.lfs,cache:e.cache,http:zc,dir:t,remote:o,ref:s,corsProxy:e.corsProxy,author:await e.resolveAuthor(t),fastForwardOnly:c,fastForward:!l,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:u?void 0:e=>{d+=`${e.phase}: ${e.loaded}/${e.total}\n`}}),u||(d+=`Already up to date.
|
|
56
|
+
`),{stdout:d,stderr:``,exitCode:0}}async function rd(e,t,n){let{flags:r,positionals:i}=M(n,I.push),a=r.force===!0,o=r[`set-upstream`]===!0,s=r[`dry-run`]===!0,c=i[0]??`origin`,l=i[1]??await A({fs:e.lfs,dir:t});if(s)return{stdout:`Would push to ${c}...\n ${l} -> ${l}\n`,stderr:``,exitCode:0};let u=`Pushing to ${c}...\n`,d=await Zt({fs:e.lfs,cache:e.cache,http:zc,dir:t,remote:c,ref:l??void 0,corsProxy:e.corsProxy,force:a,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:e=>{u+=`${e.phase}: ${e.loaded}/${e.total}\n`}});if(d.ok)u+=`To ${c}\n`,u+=` ${l} -> ${l}\n`,o&&l&&(await nn({fs:e.lfs,dir:t,path:`branch.${l}.remote`,value:c}),await nn({fs:e.lfs,dir:t,path:`branch.${l}.merge`,value:`refs/heads/${l}`}),u+=`Branch '${l}' set up to track remote branch '${l}' from '${c}'.\n`);else{let n=(await Xt({fs:e.lfs,dir:t}).catch(()=>[])).find(e=>e.remote===c)?.url;return{stdout:``,stderr:`error: failed to push to '${c}': ${Qs(String(d.error),n)}\n`,exitCode:1}}return{stdout:u,stderr:``,exitCode:0}}function id(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}const ad=`.git/rebase-merge`;async function od(e,t,n){let{flags:r,positionals:i}=M(n,I.rebase);for(let e of[`interactive`,`onto`,`rebase-merges`,`autosquash`])if(r[e])return{stdout:``,stderr:`fatal: git rebase --${e} is not supported\n`,exitCode:128};try{return r.abort?await ud(e,t):r.continue?await cd(e,t):r.skip?await ld(e,t):await sd(e,t,i[0],r)}catch(e){return{stdout:``,stderr:`fatal: ${Xs(e)}\n`,exitCode:128}}}async function sd(e,t,n,r){if(!n)return{stdout:``,stderr:`fatal: No upstream specified.
|
|
57
|
+
`,exitCode:128};if(await vd(e,t))return{stdout:``,stderr:`fatal: It seems that there is already a rebase-merge directory,
|
|
58
58
|
and I wonder if you are in the middle of another rebase.
|
|
59
59
|
`,exitCode:128};let i=await A({fs:e.lfs,dir:t});if(!i)return{stdout:``,stderr:`fatal: no such branch/commit (detached HEAD)
|
|
60
|
-
`,exitCode:128};let a=await
|
|
61
|
-
`)[0];try{await Tn({fs:e.lfs,cache:e.cache,dir:t,oid:r,abortOnConflict:!1,committer:await e.resolveAuthor(t),mergeDriver:
|
|
60
|
+
`,exitCode:128};let a=await md(e,t,n);if(!a)return{stdout:``,stderr:`fatal: invalid upstream '${n}'\n`,exitCode:128};let o=await E({fs:e.lfs,dir:t,ref:`HEAD`}),s=await gd(e,t);if(s)return s;let[c]=await cn({fs:e.lfs,cache:e.cache,dir:t,oids:[o,a]});if(c===o)return await _d(e,t,i,a),{stdout:`Fast-forwarded ${i} to ${n}.\n`,stderr:``,exitCode:0};if(c===a)return{stdout:`Current branch ${i} is up to date.\n`,stderr:``,exitCode:0};let l=await hd(e,t,o,c),u=l.find(e=>e.parents>1);if(u)return{stdout:``,stderr:`error: commit ${u.oid} is a merge but no -m option was given.\nfatal: rebase failed\n`,exitCode:128};let d,f=!1;for(let e of id(r[`strategy-option`]))e===`ours`||e===`theirs`||e===`union`?d=e:e===`diff3`&&(f=!0);return await _d(e,t,i,a),dd(e,t,{onto:a,origHead:o,headName:`refs/heads/${i}`,branch:i,todo:l.map(e=>e.oid),favor:d,diff3:f})}async function cd(e,t){let n=await bd(e,t);if(!n)return pd();if(n.current){let{commit:r}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n.current});await dn({fs:e.lfs,cache:e.cache,dir:t,message:r.message,author:r.author,committer:await e.resolveAuthor(t)}),n.current=void 0}return dd(e,t,n)}async function ld(e,t){let n=await bd(e,t);return n?(await _n({fs:e.lfs,cache:e.cache,dir:t,ref:n.branch,force:!0}),n.current=void 0,dd(e,t,n)):pd()}async function ud(e,t){let n=await bd(e,t);return n?(await _d(e,t,n.branch,n.origHead),await Sd(e,t),{stdout:``,stderr:``,exitCode:0}):pd()}async function dd(e,t,n){for(;n.todo.length>0;){let r=n.todo[0],{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=i.message.split(`
|
|
61
|
+
`)[0];try{await Tn({fs:e.lfs,cache:e.cache,dir:t,oid:r,abortOnConflict:!1,committer:await e.resolveAuthor(t),mergeDriver:vc({favor:n.favor,diff3:n.diff3})})}catch(i){if(i instanceof Error&&i.name===`MergeConflictError`){let o=i.data?.filepaths??[];return n.current=r,n.todo=n.todo.slice(1),await xd(e,t,n),fd(r,a,o)}throw i}n.todo=n.todo.slice(1)}return await Sd(e,t),{stdout:`Successfully rebased and updated ${n.headName}.\n`,stderr:``,exitCode:0}}function fd(e,t,n){let r=e.slice(0,7),i=``;for(let e of n)i+=`CONFLICT (content): Merge conflict in ${e}\n`;return i+=`error: could not apply ${r}... ${t}\n`,i+=`hint: Resolve all conflicts manually, mark them as resolved with
|
|
62
62
|
`,i+=`hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
|
|
63
63
|
`,i+=`hint: You can instead skip this commit: run "git rebase --skip".
|
|
64
64
|
`,i+=`hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
|
|
65
|
-
`,{stdout:``,stderr:i,exitCode:1}}function
|
|
66
|
-
`,exitCode:128}}async function
|
|
65
|
+
`,{stdout:``,stderr:i,exitCode:1}}function pd(){return{stdout:``,stderr:`fatal: No rebase in progress?
|
|
66
|
+
`,exitCode:128}}async function md(e,t,n){return await xc(e,t,n)}async function hd(e,t,n,r){let i=await hn({fs:e.lfs,cache:e.cache,dir:t,ref:n}),a=[];for(let e of i){if(e.oid===r)break;a.push({oid:e.oid,parents:e.commit.parent.length})}return a.reverse()}async function gd(e,t){let n=await O({fs:e.lfs,cache:e.cache,dir:t}),r=!1,i=!1;for(let[,e,t,a]of n)(e!==0||a!==0)&&(t===a?e!==a&&(i=!0):r=!0);if(r)return{stdout:``,stderr:`error: cannot rebase: You have unstaged changes.
|
|
67
67
|
error: Please commit or stash them.
|
|
68
68
|
`,exitCode:128};if(i)return{stdout:``,stderr:`error: cannot rebase: Your index contains uncommitted changes.
|
|
69
69
|
error: Please commit or stash them.
|
|
70
|
-
`,exitCode:128}}async function
|
|
71
|
-
`).map(e=>e.replace(/^pick\s+/,``).trim()).filter(e=>e.length>0),o=await
|
|
72
|
-
`)}\n`),n.current?await e.fs.writeFile(`${r}/stopped-sha`,`${n.current}\n`):await
|
|
73
|
-
`,exitCode:128};if(await Gt({fs:e.lfs,dir:t,ref:u,value:l,force:!0}),r)return{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0};let d=new Set(await D({fs:e.lfs,cache:e.cache,dir:t}));for(let n of d)await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n});return await
|
|
70
|
+
`,exitCode:128}}async function _d(e,t,n,r){await Gt({fs:e.lfs,dir:t,ref:`refs/heads/${n}`,value:r,force:!0}),await _n({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:!0})}async function vd(e,t){return e.fs.exists(`${t}/${ad}/onto`)}async function yd(e,t,n){try{return(await e.fs.readTextFile(`${t}/${ad}/${n}`)).trim()}catch{return}}async function bd(e,t){let n=await yd(e,t,`onto`),r=await yd(e,t,`orig-head`),i=await yd(e,t,`head-name`);if(!n||!r||!i)return;let a=(await yd(e,t,`git-rebase-todo`)??``).split(`
|
|
71
|
+
`).map(e=>e.replace(/^pick\s+/,``).trim()).filter(e=>e.length>0),o=await yd(e,t,`strategy-opts`)??``,s,c=!1;for(let e of o.split(/\s+/).filter(e=>e.length>0))e===`ours`||e===`theirs`||e===`union`?s=e:e===`diff3`&&(c=!0);return{onto:n,origHead:r,headName:i,branch:i.replace(/^refs\/heads\//,``),current:await yd(e,t,`stopped-sha`),todo:a,favor:s,diff3:c}}async function xd(e,t,n){let r=`${t}/${ad}`;await e.fs.mkdir(r,{recursive:!0}),await e.fs.writeFile(`${r}/onto`,`${n.onto}\n`),await e.fs.writeFile(`${r}/orig-head`,`${n.origHead}\n`),await e.fs.writeFile(`${r}/head-name`,`${n.headName}\n`),await e.fs.writeFile(`${r}/git-rebase-todo`,`${n.todo.map(e=>`pick ${e}`).join(`
|
|
72
|
+
`)}\n`),n.current?await e.fs.writeFile(`${r}/stopped-sha`,`${n.current}\n`):await Cd(e,`${r}/stopped-sha`);let i=[];n.favor&&i.push(n.favor),n.diff3&&i.push(`diff3`),i.length>0?await e.fs.writeFile(`${r}/strategy-opts`,`${i.join(` `)}\n`):await Cd(e,`${r}/strategy-opts`)}async function Sd(e,t){try{await e.fs.rm(`${t}/${ad}`,{recursive:!0})}catch{}}async function Cd(e,t){try{await e.fs.rm(t)}catch{}}async function wd(e,t,n){let[r,...i]=n;if(r===`add`&&i.length>=2){let[n,r]=i;return await bn({fs:e.lfs,dir:t,remote:n,url:r}),{stdout:``,stderr:``,exitCode:0}}if(r===`remove`||r===`rm`){let n=i[0];if(n)return await fn({fs:e.lfs,dir:t,remote:n}),{stdout:``,stderr:``,exitCode:0}}let a=n.includes(`-v`)||n.includes(`--verbose`),o=await Xt({fs:e.lfs,dir:t}),s=``;for(let{remote:e,url:t}of o)a?(s+=`${e}\t${t} (fetch)\n`,s+=`${e}\t${t} (push)\n`):s+=`${e}\n`;return{stdout:s,stderr:``,exitCode:0}}async function Td(e,t,n){let r=n.includes(`--soft`),i=n.includes(`--hard`),a=n.includes(`--mixed`),o=n.filter(e=>!e.startsWith(`-`)),s=r||i||a;if(!s&&o.length===0){let n=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,,a]of n)a!==i&&await An({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}if(!s){let n=o.filter(e=>e!==`HEAD`);if(n.length===0){let n=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,,a]of n)a!==i&&await An({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}for(let r of n)await An({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}let c=o[0]??`HEAD`,l=await E({fs:e.lfs,dir:t,ref:c}),u=await A({fs:e.lfs,dir:t,fullname:!0});if(!u)return{stdout:``,stderr:`fatal: not on a branch, cannot reset
|
|
73
|
+
`,exitCode:128};if(await Gt({fs:e.lfs,dir:t,ref:u,value:l,force:!0}),r)return{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0};let d=new Set(await D({fs:e.lfs,cache:e.cache,dir:t}));for(let n of d)await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n});return await Dd(e,t,l),i?(await kd(e,t,l,d),await Ed(e,t,l),{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0}):{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0}}async function Ed(e,t,n){try{await mn({fs:e.lfs,cache:e.cache,dir:t,commit:n})}catch{}await el(e,t)}async function Dd(e,t,n){let{tree:r}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:n});await Od(e,t,n,r,``)}async function Od(e,t,n,r,i){for(let a of r){let r=i?`${i}/${a.path}`:a.path;if(a.type===`blob`)await An({fs:e.lfs,cache:e.cache,dir:t,filepath:r,ref:n});else if(a.type===`tree`){let{tree:i}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:a.oid});await Od(e,t,n,i,r)}}}async function kd(e,t,n,r){let i=new Set,{tree:a}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:n});await Ad(e,t,a,``,i);for(let r of i){let{blob:i}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r}),a=r.lastIndexOf(`/`);a!==-1&&await e.fs.mkdir(`${t}/${r.slice(0,a)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${r}`,i)}for(let n of r)if(!i.has(n))try{await e.fs.rm(`${t}/${n}`)}catch{}}async function Ad(e,t,n,r,i){for(let a of n){let n=r?`${r}/${a.path}`:a.path;if(a.type===`blob`)i.add(n);else if(a.type===`tree`){let{tree:r}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:a.oid});await Ad(e,t,r,n,i)}}}async function jd(e,t,n){if(n.includes(`--show-toplevel`))try{return{stdout:`${await On({fs:e.lfs,filepath:t})}\n`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`fatal: not a git repository
|
|
74
74
|
`,exitCode:128}}if(n.includes(`--is-inside-work-tree`))try{return await On({fs:e.lfs,filepath:t}),{stdout:`true
|
|
75
75
|
`,stderr:``,exitCode:0}}catch{return{stdout:`false
|
|
76
|
-
`,stderr:``,exitCode:0}}let r=n.find(e=>!e.startsWith(`-`))??`HEAD`;try{if(n.includes(`--abbrev-ref`))return r===`HEAD`?{stdout:`${await A({fs:e.lfs,dir:t})??`HEAD`}\n`,stderr:``,exitCode:0}:{stdout:`${r.replace(/^refs\/(?:heads|tags|remotes)\//,``)}\n`,stderr:``,exitCode:0};let i=await
|
|
77
|
-
`,exitCode:128};let s=await
|
|
76
|
+
`,stderr:``,exitCode:0}}let r=n.find(e=>!e.startsWith(`-`))??`HEAD`;try{if(n.includes(`--abbrev-ref`))return r===`HEAD`?{stdout:`${await A({fs:e.lfs,dir:t})??`HEAD`}\n`,stderr:``,exitCode:0}:{stdout:`${r.replace(/^refs\/(?:heads|tags|remotes)\//,``)}\n`,stderr:``,exitCode:0};let i=await yc(e,t,r),a=n.find(e=>e===`--short`||e.startsWith(`--short=`)),o=a?.includes(`=`)?Number(a.split(`=`)[1]):7;return{stdout:`${a?i.slice(0,Number.isFinite(o)?o:7):i}\n`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`fatal: ambiguous argument '${r}'\n`,exitCode:128}}}async function Md(e,t,n){let{flags:r,positionals:i}=M(n,I.revert),a=r[`no-commit`]===!0,o=i[0];if(!o)return{stdout:``,stderr:`error: empty commit set passed
|
|
77
|
+
`,exitCode:128};let s=await xc(e,t,o);if(s===void 0)return{stdout:``,stderr:`fatal: bad revision '${o}'\n`,exitCode:128};let c;try{c=await E({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: your current branch does not have any commits yet
|
|
78
78
|
`,exitCode:128}}let{commit:l}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:s});if(l.parent.length!==1)return{stdout:``,stderr:`error: commit ${s} is a merge but no -m option was given.\nfatal: revert failed\n`,exitCode:128};let u=l.parent[0],d=l.message.split(`
|
|
79
|
-
`)[0],f=s.slice(0,7),p=await A({fs:e.lfs,dir:t})??`HEAD`;try{let n=await
|
|
79
|
+
`)[0],f=s.slice(0,7),p=await A({fs:e.lfs,dir:t})??`HEAD`;try{let n=await Nd(e,t,c,s,u,{current:p,base:f,other:`parent of ${f} (${d})`});if(n.length>0){let e=``;for(let t of n)e+=`CONFLICT (content): Merge conflict in ${t}\n`;return e+=`error: could not revert ${f}... ${d}\n`,e+=`hint: after resolving the conflicts, mark them with 'git add <paths>',
|
|
80
80
|
`,e+=`hint: then commit the result.
|
|
81
|
-
`,{stdout:``,stderr:e,exitCode:1}}if(a)return{stdout:``,stderr:``,exitCode:0};let r=await e.resolveAuthor(t),i=`Revert "${d}"\n\nThis reverts commit ${s}.\n`;return{stdout:`[${p} ${(await dn({fs:e.lfs,cache:e.cache,dir:t,message:i,author:r,committer:r})).slice(0,7)}] Revert "${d}"\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`fatal: ${
|
|
82
|
-
`,exitCode:128};for(let n of a){let a=await
|
|
81
|
+
`,{stdout:``,stderr:e,exitCode:1}}if(a)return{stdout:``,stderr:``,exitCode:0};let r=await e.resolveAuthor(t),i=`Revert "${d}"\n\nThis reverts commit ${s}.\n`;return{stdout:`[${p} ${(await dn({fs:e.lfs,cache:e.cache,dir:t,message:i,author:r,committer:r})).slice(0,7)}] Revert "${d}"\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`fatal: ${Xs(e)}\n`,exitCode:128}}}async function Nd(e,t,n,r,i,a){let[o,s,c]=await Promise.all([D({fs:e.lfs,cache:e.cache,dir:t,ref:n}),D({fs:e.lfs,cache:e.cache,dir:t,ref:r}),D({fs:e.lfs,cache:e.cache,dir:t,ref:i})]),l=new Set([...o,...s,...c]),u=new TextEncoder,d=[];for(let o of l){let s=await Pd(e,t,r,o),c=await Pd(e,t,i,o);if(s===c)continue;let l=await Pd(e,t,n,o)??``,f,p=!1;if(l===(s??``))f=c??``;else{let e=ze(l,s??``,c??``,{labels:a});f=e.content,p=e.conflicts>0}if(!p&&c===void 0&&f===``){await Fd(e,t,o);continue}await e.fs.writeFile(`${t}/${o}`,u.encode(f)),p?d.push(o):await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:o})}return d}async function Pd(e,t,n,r){try{let{blob:i}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return new TextDecoder().decode(i)}catch{return}}async function Fd(e,t,n){try{await e.fs.rm(`${t}/${n}`)}catch{}try{await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}catch{}}async function Id(e,t,n){let r=n.includes(`--cached`),i=n.includes(`-r`)||n.includes(`-R`)||n.includes(`--recursive`),a=n.filter(e=>!e.startsWith(`-`));if(a.length===0)return{stdout:``,stderr:`fatal: No pathspec given. Which files should I remove?
|
|
82
|
+
`,exitCode:128};for(let n of a){let a=await Ld(e,t,n,r,i);if(a)return a}return{stdout:``,stderr:``,exitCode:0}}async function Ld(e,t,n,r,i){let a=n.startsWith(`/`)?n:`${t}/${n}`,o=!1;try{o=(await e.fs.stat(a)).type===`directory`}catch{}if(o){if(!i)return{stdout:``,stderr:`fatal: not removing '${n}' recursively without -r\n`,exitCode:128};let a=(await D({fs:e.lfs,cache:e.cache,dir:t})).filter(e=>e===n||e.startsWith(n+`/`));for(let n of a)if(await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(`${t}/${n}`)}catch{}}else if(await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(a)}catch{}return null}async function Rd(e,t,n){let{flags:r,positionals:i}=M(n,I.show),a=r,o=a.stat===!0,s=L(a,`format`),c=i[0];if(c?.includes(`:`))return await zd(e,t,c);let l=c??`HEAD`,u=await xc(e,t,l);if(u===void 0)return{stdout:``,stderr:`fatal: bad object ${l}\n`,exitCode:128};let{commit:d}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:u}),f=Bd(u,d,s,e.useColor),p=d.parent.length>0?d.parent[0]:void 0;if(p){let n=await Kl(e,t,p,u,{nameOnly:!1,stat:o});f+=n.stdout}else{let n=await su(e,t,u,o);f+=n}return{stdout:f,stderr:``,exitCode:0}}async function zd(e,t,n){let r=n.indexOf(`:`),i=n.slice(0,r)||`HEAD`,a=n.slice(r+1),o=await xc(e,t,i);if(o===void 0)return{stdout:``,stderr:`fatal: bad object ${i}\n`,exitCode:128};let s=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:o,filepath:a});return{stdout:new TextDecoder().decode(s.blob),stderr:``,exitCode:0}}function Bd(e,t,n,r=!1){if(n)return n.replace(/%H/g,e).replace(/%h/g,e.slice(0,7)).replace(/%s/g,t.message.split(`
|
|
83
83
|
`)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,new Date(t.author.timestamp*1e3).toLocaleString())+`
|
|
84
|
-
`;let i=`${
|
|
85
|
-
`)}\n\n`,i}async function
|
|
86
|
-
`,exitCode:128}}let a=await D({fs:e.lfs,cache:e.cache,dir:t,ref:`HEAD`}),o=await D({fs:e.lfs,cache:e.cache,dir:t}),s=new Set([...a,...o]),c=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[e,t,,n]of c)t===0&&n!==0&&s.add(e);let{dirtyFiles:l,indexEntries:u}=await
|
|
87
|
-
`,exitCode:1};let d=await
|
|
88
|
-
`)[0]}`,h=await e.resolveAuthor(t),g=Math.floor(Date.now()/1e3),_=await xn({fs:e.lfs,dir:t,commit:{tree:d,parent:f,author:{...h,timestamp:g,timezoneOffset:0},committer:{...h,timestamp:g,timezoneOffset:0},message:m}});return await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:_,force:!0}),await
|
|
89
|
-
`,exitCode:1}}let{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=await E({fs:e.lfs,dir:t,ref:`HEAD`}),o=i.parent[0]??a,{conflicts:s,warnings:c}=await
|
|
90
|
-
`:``;return{stdout:e,stderr:c.join(``)+t,exitCode:1}}return n?(i.parent.length>1?await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:i.parent[1],force:!0}):await
|
|
91
|
-
`,exitCode:1}}if(r===0){let{commit:n}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:a});return n.parent.length>1?await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:n.parent[1],force:!0}):await
|
|
92
|
-
`,exitCode:1}}let{commit:r}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n}),i=r.parent[0];return
|
|
93
|
-
`}let c=await
|
|
84
|
+
`;let i=`${uc(r,`33`,`commit ${e}`)}\n`;return i+=`Author: ${t.author.name} <${t.author.email}>\n`,i+=`Date: ${new Date(t.author.timestamp*1e3).toLocaleString()}\n\n`,i+=` ${t.message.replace(/\n/g,`
|
|
85
|
+
`)}\n\n`,i}async function Vd(e,t,n){let r=n.includes(`--heads`),i=n.includes(`--tags`),a=n.find(e=>!e.startsWith(`-`)),o=``;if(!i){let n=await Ht({fs:e.lfs,dir:t});for(let r of n){let n=await E({fs:e.lfs,dir:t,ref:r}),i=`refs/heads/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}if(!r){let n=await Bt({fs:e.lfs,dir:t});for(let r of n){let n=await E({fs:e.lfs,dir:t,ref:r}),i=`refs/tags/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}return{stdout:o,stderr:``,exitCode:0}}const Hd=new Uint8Array;async function Ud(e,t){return await e.fs.readFile(t,{encoding:`binary`})}function Wd(e,t){if(e===t)return!0;if(e.byteLength!==t.byteLength)return!1;for(let n=0;n<e.byteLength;n++)if(e[n]!==t[n])return!1;return!0}function Gd(e){if(!e.includes(0))try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return}}async function Kd(e,t,n){let r=n[0];if(!r||r.startsWith(`-`))return qd(e,t,n);switch(r){case`push`:case`save`:return qd(e,t,n.slice(1));case`pop`:return Zd(e,t);case`apply`:return Qd(e,t);case`list`:return rf(e,t);case`drop`:return af(e,t,n.slice(1));case`show`:return of(e,t);default:return{stdout:``,stderr:`error: unknown subcommand: ${r}\n`,exitCode:1}}}async function qd(e,t,n){let r=await A({fs:e.lfs,dir:t})??`HEAD`,i;try{i=await E({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: cannot stash without a HEAD commit
|
|
86
|
+
`,exitCode:128}}let a=await D({fs:e.lfs,cache:e.cache,dir:t,ref:`HEAD`}),o=await D({fs:e.lfs,cache:e.cache,dir:t}),s=new Set([...a,...o]),c=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[e,t,,n]of c)t===0&&n!==0&&s.add(e);let{dirtyFiles:l,indexEntries:u}=await Jd(e,t,i,s,a);if(l.length===0)return{stdout:``,stderr:`No local changes to save
|
|
87
|
+
`,exitCode:1};let d=await Xd(e,t,u),f=[i];try{let n=await E({fs:e.lfs,dir:t,ref:`refs/stash`});f.push(n)}catch{}let{commit:p}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:i}),m=`WIP on ${r}: ${i.slice(0,7)} ${p.message.split(`
|
|
88
|
+
`)[0]}`,h=await e.resolveAuthor(t),g=Math.floor(Date.now()/1e3),_=await xn({fs:e.lfs,dir:t,commit:{tree:d,parent:f,author:{...h,timestamp:g,timezoneOffset:0},committer:{...h,timestamp:g,timezoneOffset:0},message:m}});return await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:_,force:!0}),await Yd(e,t,i,l),{stdout:`Saved working directory and index state ${m}\n`,stderr:``,exitCode:0}}async function Jd(e,t,n,r,i){let a=[],o=[];for(let s of r){let r=i.includes(s),c;try{c=await Ud(e,`${t}/${s}`)}catch{}if(r){let{blob:r}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:s});if(c===void 0)a.push({file:s,inHead:!0,existsInWorkdir:!1});else if(Wd(c,r)){let n=await Kt({fs:e.lfs,dir:t,blob:r});o.push({filepath:s,oid:n})}else{a.push({file:s,inHead:!0,existsInWorkdir:!0});let n=await Kt({fs:e.lfs,dir:t,blob:c});o.push({filepath:s,oid:n})}}else if(c!==void 0){a.push({file:s,inHead:!1,existsInWorkdir:!0});let n=await Kt({fs:e.lfs,dir:t,blob:c});o.push({filepath:s,oid:n})}}return{dirtyFiles:a,indexEntries:o}}async function Yd(e,t,n,r){for(let i of r)if(i.inHead){let{blob:r}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:i.file});await e.fs.writeFile(`${t}/${i.file}`,r),await An({fs:e.lfs,cache:e.cache,dir:t,filepath:i.file,ref:n})}else{try{await e.fs.rm(`${t}/${i.file}`)}catch{}try{await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i.file})}catch{}}}async function Xd(e,t,n){let r=new Map;for(let{filepath:e,oid:t}of n){let n=e.split(`/`),i=r;for(let e=0;e<n.length-1;e++){let t=i.get(n[e]);t?.type!==`tree`&&(t={type:`tree`,children:new Map},i.set(n[e],t)),i=t.children}i.set(n[n.length-1],{type:`blob`,oid:t,mode:`100644`})}let i=async n=>{let r=[];for(let[e,t]of n)if(t.type===`blob`)r.push({mode:t.mode,path:e,oid:t.oid,type:`blob`});else{let n=await i(t.children);r.push({mode:`040000`,path:e,oid:n,type:`tree`})}return await an({fs:e.lfs,dir:t,tree:r})};return i(r)}async function Zd(e,t){return $d(e,t,!0)}async function Qd(e,t){return $d(e,t,!1)}async function $d(e,t,n){let r;try{r=await E({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
|
|
89
|
+
`,exitCode:1}}let{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=await E({fs:e.lfs,dir:t,ref:`HEAD`}),o=i.parent[0]??a,{conflicts:s,warnings:c}=await ef(e,t,i.tree,o);if(s.length>0){let e=s.map(e=>`CONFLICT (content): Merge conflict in ${e}\n`).join(``),t=n?`The stash entry is kept in case you need it again.
|
|
90
|
+
`:``;return{stdout:e,stderr:c.join(``)+t,exitCode:1}}return n?(i.parent.length>1?await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:i.parent[1],force:!0}):await sf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{0} (${r.slice(0,7)})\n`,stderr:``,exitCode:0}):{stdout:``,stderr:``,exitCode:0}}async function ef(e,t,n,r){let i=new Map,a=async(n,r)=>{let{tree:o}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:n});for(let n of o){let o=r?`${r}/${n.path}`:n.path;if(n.type===`blob`){let{blob:r}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n.oid});i.set(o,r)}else n.type===`tree`&&await a(n.oid,o)}};await a(n,``);let o=new Set;try{let n=await D({fs:e.lfs,cache:e.cache,dir:t,ref:r});for(let e of n)o.add(e)}catch{}let s=[],c=[];for(let[n,a]of i){let i=o.has(n)?await nf(e,t,r,n):Hd,l;try{l=await Ud(e,`${t}/${n}`)}catch{}let{merged:u,conflicted:d,binary:f}=tf(l,i,a),p=n.lastIndexOf(`/`);p!==-1&&await e.fs.mkdir(`${t}/${n.slice(0,p)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${n}`,u),f&&c.push(`warning: Cannot merge binary files: ${n} (Updated upstream vs Stashed changes)\n`),d?s.push(n):Wd(u,i)||await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}for(let n of o)if(!i.has(n)){try{await e.fs.rm(`${t}/${n}`)}catch{}await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}return{conflicts:s,warnings:c}}function tf(e,t,n){if(e===void 0||Wd(e,n)||Wd(e,t))return{merged:n,conflicted:!1,binary:!1};if(Wd(n,t))return{merged:e,conflicted:!1,binary:!1};let r=Gd(e),i=Gd(t),a=Gd(n);if(r===void 0||i===void 0||a===void 0)return{merged:e,conflicted:!0,binary:!0};let o=ze(r,i,a,{labels:{current:`Updated upstream`,base:`stash base`,other:`Stashed changes`}});return{merged:new TextEncoder().encode(o.content),conflicted:o.conflicts>0,binary:!1}}async function nf(e,t,n,r){try{let{blob:i}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return i}catch{return Hd}}async function rf(e,t){let n=``,r=0;try{let i=await E({fs:e.lfs,dir:t,ref:`refs/stash`});for(;i;){let{commit:a}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:i});if(n+=`stash@{${r}}: ${a.message}\n`,r++,a.parent.length>1)i=a.parent[1];else break}}catch{}return{stdout:n,stderr:``,exitCode:0}}async function af(e,t,n){let r=0,i=n.find(e=>e.startsWith(`stash@{`));if(i){let e=i.match(/stash@\{(\d+)\}/);e&&(r=parseInt(e[1],10))}let a;try{a=await E({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
|
|
91
|
+
`,exitCode:1}}if(r===0){let{commit:n}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:a});return n.parent.length>1?await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:n.parent[1],force:!0}):await sf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{0} (${a.slice(0,7)})\n`,stderr:``,exitCode:0}}let o=[],s=a;for(let n=0;n<r;n++){let{commit:n}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:s});if(o.push({oid:s,commit:n}),n.parent.length<=1)return{stdout:``,stderr:`error: stash@{${r}} not found\n`,exitCode:1};s=n.parent[1]}let c=s,{commit:l}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:c}),u=l.parent.length>1?l.parent[1]:void 0;for(let n=o.length-1;n>=0;n--){let r=o[n],i=[r.commit.parent[0]];u&&i.push(u),u=await xn({fs:e.lfs,dir:t,commit:{...r.commit,parent:i}})}return u?await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:u,force:!0}):await sf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{${r}} (${c.slice(0,7)})\n`,stderr:``,exitCode:0}}async function of(e,t){let n;try{n=await E({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
|
|
92
|
+
`,exitCode:1}}let{commit:r}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n}),i=r.parent[0];return Kl(e,t,i,n,{nameOnly:!1,stat:!0})}async function sf(e,t,n){try{await e.lfs.unlink(`${t}/.git/${n}`)}catch{}}async function cf(e,t,n){let r=n.includes(`--short`)||n.includes(`-s`),i=n.includes(`--porcelain`),a=n.indexOf(`--`),o=a===-1?[]:n.slice(a+1);if(r||i)return df(e,t,o);let s=``;try{let n=await A({fs:e.lfs,dir:t});s+=`On branch ${n??`(no branch)`}\n`}catch{s+=`Not on any branch.
|
|
93
|
+
`}let c=await Xc(e,t);c?(await tl(e,t)).length>0?(s+=`You have unmerged paths.
|
|
94
94
|
`,s+=` (fix conflicts and run "git commit")
|
|
95
95
|
`,s+=` (use "git merge --abort" to abort the merge)
|
|
96
96
|
|
|
@@ -98,25 +98,25 @@ error: Please commit or stash them.
|
|
|
98
98
|
`,s+=` (use "git commit" to conclude merge)
|
|
99
99
|
|
|
100
100
|
`):s+=`
|
|
101
|
-
`;let{staged:l,unstaged:u,untracked:d}=
|
|
101
|
+
`;let{staged:l,unstaged:u,untracked:d}=lf(await O({fs:e.lfs,cache:e.cache,dir:t,...$s}),o);return s+=uf(l,u,d,c,e.useColor),{stdout:s,stderr:``,exitCode:0}}function lf(e,t){let n=[],r=[],i=[];for(let[a,o,s,c]of e)Dc(a,t)&&(o===0&&s===2&&c===0?i.push(a):c===2||o===1&&c===0&&s===0?n.push(a):s!==c&&s!==0?r.push(a):o===1&&s===0&&c===1&&r.push(a+` (deleted)`));return{staged:n,unstaged:r,untracked:i}}function uf(e,t,n,r=!1,i=!1){let a=``;if(e.length>0){a+=`Changes to be committed:
|
|
102
102
|
`,a+=` (use "git restore --staged <file>..." to unstage)
|
|
103
103
|
|
|
104
|
-
`;for(let t of e)a+=`\t${
|
|
104
|
+
`;for(let t of e)a+=`\t${uc(i,`32`,t)}\n`;a+=`
|
|
105
105
|
`}if(t.length>0){a+=`Changes not staged for commit:
|
|
106
106
|
`,a+=` (use "git add <file>..." to update what will be committed)
|
|
107
107
|
|
|
108
|
-
`;for(let e of t)a+=`\t${
|
|
108
|
+
`;for(let e of t)a+=`\t${uc(i,`31`,e)}\n`;a+=`
|
|
109
109
|
`}if(n.length>0){a+=`Untracked files:
|
|
110
110
|
`,a+=` (use "git add <file>..." to include in what will be committed)
|
|
111
111
|
|
|
112
|
-
`;for(let e of n)a+=`\t${
|
|
112
|
+
`;for(let e of n)a+=`\t${uc(i,`31`,e)}\n`;a+=`
|
|
113
113
|
`}return e.length===0&&t.length===0&&n.length===0&&!r&&(a+=`nothing to commit, working tree clean
|
|
114
|
-
`),a}async function
|
|
114
|
+
`),a}async function df(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t,...$s}),i=``;for(let[e,t,a,o]of r){if(!Dc(e,n))continue;let r=ff(t,a,o);r&&(i+=`${r[0]}${r[1]} ${e}\n`)}return{stdout:i,stderr:``,exitCode:0}}function ff(e,t,n){return e===0&&t===2&&n===0?[`?`,`?`]:e===0&&t===2&&n===2?[`A`,` `]:e===0&&t===2&&n===3?[`A`,`M`]:e===1&&t===2&&n===1?[` `,`M`]:e===1&&t===2&&n===2?[`M`,` `]:e===1&&t===2&&n===3?[`M`,`M`]:e===1&&t===0&&n===0?[`D`,` `]:e===1&&t===0&&n===1?[` `,`D`]:null}const pf=`usage: git symbolic-ref <name>
|
|
115
115
|
or: git symbolic-ref <name> <ref>
|
|
116
|
-
or: git symbolic-ref (-d | --delete) <name>`;function
|
|
117
|
-
`,exitCode:128};if(e.delete===!1||t&&(e.short!==void 0||e.recurse!==void 0))return
|
|
118
|
-
`,exitCode:128};let i=await
|
|
119
|
-
`,exitCode:128}}if(s!==void 0||i.length===0){let n=await Bt({fs:e.lfs,dir:t}),r=n,i=s||void 0;if(i){let e=RegExp(`^`+i.replace(/\*/g,`.*`)+`$`);r=n.filter(t=>e.test(t))}return{stdout:r.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}let d=i[0],f=i[1];if(c||l){let n=await e.resolveAuthor(t);await Cn({fs:e.lfs,cache:e.cache,dir:t,ref:d,message:l??d,object:f,tagger:{...n,timestamp:Math.floor(Date.now()/1e3),timezoneOffset:0},force:u})}else await tn({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function Tf(e,t){let n=e===`dir`?16877:e===`symlink`?40960:33188;if(t===void 0)return n;let r=t&4095;return n&61440|r}function Ef(e,t){let n=t.mtimeMs??0;return{type:e,mode:Tf(e,t.mode),size:t.size??0,ino:t.ino??0,mtimeMs:n,ctimeMs:t.ctimeMs??n,uid:t.uid??1,gid:t.gid??1,dev:1,isFile:()=>e===`file`,isDirectory:()=>e===`dir`,isSymbolicLink:()=>e===`symlink`}}function Df(e){return{size:e.size,mtimeMs:e.mtime,ctimeMs:e.ctime,...e.ino===void 0?{}:{ino:e.ino},...e.uid===void 0?{}:{uid:e.uid},...e.gid===void 0?{}:{gid:e.gid},...e.mode===void 0?{}:{mode:e.mode}}}function Of(e){if(typeof e==`string`)return/^utf-?8$/i.test(e);if(e&&typeof e==`object`){let t=e.encoding;if(typeof t==`string`)return/^utf-?8$/i.test(t)}return!1}function kf(e){if(!e||typeof e!=`object`)return null;let{start:t,end:n}=e;return typeof t!=`number`||typeof n!=`number`?null:{start:t,end:n}}const Af=`/objects/pack`,jf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Mf=/\/objects\/[0-9a-f]{2}$/;function Nf(e){return e.endsWith(Af)||Mf.test(e)}function Pf(e){let t=Be(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Ff(e){let t=new Map;return{prime(n,r){if(r.length>e){t.clear();return}t.size+r.length>e&&t.clear();let i=b(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=Pf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(b(e));if(n)return Ef(n.type,n.stats?Df(n.stats):{})},drop(e){t.delete(b(e))},clear(){t.clear()},size(){return t.size}}}function If(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Ff(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,Nf(t)?void 0:{includeStats:!0});return r.prime(t,n),n.map(e=>e.name)},a=(e,t)=>{let n=e.fanouts.get(t);if(n!=null)return n;let r=i(t).then(e=>new Set(e));return e.fanouts.set(t,r),r},o=async e=>{if(!n)return!1;let t=jf.exec(e);if(!t)return!1;try{return!(await a(n,t[1])).has(t[2])}catch{return!1}},s=()=>{n?.packDirs.clear(),n?.fanouts.clear()},c=async(e,t)=>(r.drop(e),await l(t)),l=async e=>{s();try{return await e()}finally{s()}};return{promises:{async readFile(t,n){if(await o(t))throw new Ve(`ENOENT`,`no such file or directory`,t);let r=kf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,Of(n)?{encoding:`utf-8`}:{encoding:`binary`})},async writeFile(t,n,r){await c(t,()=>e.writeFile(t,n))},async unlink(t){await c(t,()=>e.rm(t))},async readdir(e){if(!n||!e.endsWith(Af))return await i(e);let t=n.packDirs.get(e);if(t!=null)return[...await t];let r=i(e);return n.packDirs.set(e,r),[...await r]},async mkdir(t,n){let r=n??void 0;await c(t,()=>e.mkdir(t,r?.recursive===void 0?void 0:{recursive:r.recursive}))},async rmdir(t){r.clear(),await l(()=>e.rm(t))},async stat(t){let n=r.get(t);if(n)return n;let i=await e.stat(t);return Ef(i.type===`directory`?`dir`:`file`,Df(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return Ef(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,Df(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Ve(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Ve(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const Lf={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},Rf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function zf(e){return e.endsWith(`.pack`)||e.endsWith(`.idx`)}function Bf(e){let t=e.replace(/\/{2,}/g,`/`);return t.length>1&&t.endsWith(`/`)?t.slice(0,-1):t}function Vf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Hf(e){let t=e?.code;return typeof t==`string`?t:void 0}function Uf(e){return typeof e==`string`?e.length*2:e.byteLength}function Wf(e,t){return`${t?`u`:`b`} ${e}`}var Gf=class{limits;stats=new Map;lstats=new Map;dirs=new Map;files=new Map;fileBytes=new Map;retainedBytes=0;constructor(e){this.limits=e}hasRoom(){return this.stats.size+this.lstats.size+this.dirs.size+this.files.size<this.limits.maxEntries}retainFile(e,t){let n=Uf(t);return n>this.limits.maxFileBytes||this.retainedBytes+n>this.limits.maxTotalBytes?!1:(this.fileBytes.set(e,n),this.retainedBytes+=n,!0)}dropFile(e){let t=this.fileBytes.get(e);t!==void 0&&(this.fileBytes.delete(e),this.retainedBytes-=t)}forgetSelf(e){this.stats.delete(e),this.lstats.delete(e),this.dirs.delete(e);for(let t of[Wf(e,!0),Wf(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=Bf(e);this.forgetSelf(t);let n=Vf(t);this.dirs.delete(n),this.stats.delete(n),this.lstats.delete(n)}invalidateSubtree(e){let t=Bf(e),n=`${t}/`;for(let e of[this.stats,this.lstats,this.dirs])for(let t of e.keys())t.startsWith(n)&&e.delete(t);for(let e of this.files.keys())e.slice(2).startsWith(n)&&(this.files.delete(e),this.dropFile(e));this.invalidatePath(t)}};function Kf(e,t,n,r){let i=e.get(t);if(i!=null)return i;let a=n();if(!r.admit())return a;e.set(t,a);let o=()=>{e.get(t)===a&&e.delete(t)};return a.then(e=>{r.keep&&!r.keep(e)&&o()},e=>{Rf.has(Hf(e)??``)||o()}),a}function qf(e,t={}){let n=new Gf({...Lf,...t}),r=()=>n.hasRoom(),i=async t=>(await Kf(n.dirs,Bf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(zf(t))return e.readFile(t,i);let a=Wf(Bf(t),Of(i)),o=await Kf(n.files,a,()=>e.readFile(t,i),{admit:r,keep:e=>n.retainFile(a,e)});return typeof o==`string`?o:new Uint8Array(o)},o=(e,t)=>n=>Kf(e,Bf(n),()=>t(n),{admit:r}),s=async(e,t,r=!1)=>{try{return await t()}finally{r?n.invalidateSubtree(e):n.invalidatePath(e)}};return{readFile:a,readdir:i,stat:o(n.stats,t=>e.stat(t)),lstat:o(n.lstats,t=>e.lstat(t)),readlink:t=>e.readlink(t),writeFile:(t,n,r)=>s(t,()=>e.writeFile(t,n,r)),unlink:t=>s(t,()=>e.unlink(t),!0),rmdir:t=>s(t,()=>e.rmdir(t),!0),mkdir:(t,n)=>s(t,()=>e.mkdir(t,n)),symlink:(t,n)=>s(n,()=>e.symlink(t,n))}}const Jf=e(`git-cache`);function Yf(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function Xf(e){return`${e.replace(/\/+$/,``)}/.git`}var Zf=class{fs;cache={};signatures=new Map;inFlight=0;maxResidentPacks;constructor(e,t={}){this.fs=e,this.maxResidentPacks=Math.max(1,t.maxResidentPacks??4)}setDeepVerification(e){this.cache.skipDeepPackVerification=!e}async beforeCommand(e){this.inFlight++;let t=Xf(e),n=this.signatures.get(t);if(n===void 0)return;let r=await this.packSignature(t);n!==r&&this.invalidate(e),this.signatures.set(t,r)}async afterCommand(e,t={}){this.inFlight=Math.max(0,this.inFlight-1);let n=Xf(e);t.wrotePacks&&(this.invalidate(e),this.signatures.delete(n)),this.inFlight===0&&(await this.evictFailedPacks(),await this.trimResidentPacks()),!this.signatures.has(n)&&this.hasCachedPacks(n)&&this.signatures.set(n,await this.packSignature(n))}async evictFailedPacks(){let e=Yf(this.cache);if(e)for(let[t,n]of[...e]){let r;try{r=await n}catch{e.delete(t);continue}if(!r){e.delete(t);continue}if(r.pack)try{await r.pack||(r.pack=null)}catch{r.pack=null}}}hasCachedPacks(e){let t=Yf(this.cache);if(!t)return!1;let n=`${e}/objects/pack/`;for(let e of t.keys())if(e.startsWith(n))return!0;return!1}invalidate(e){let t=`${Xf(e)}/objects/pack/`,n=Yf(this.cache);if(n)for(let e of[...n.keys()])e.startsWith(t)&&n.delete(e)}async residentPackCount(){return(await this.residentPacks()).length}async packSignature(e){let t=[];try{t=(await this.fs.readdir(`${e}/objects/pack`)).filter(e=>e.endsWith(`.idx`)||e.endsWith(`.pack`)).sort()}catch{}let n=`-`;try{n=String((await this.fs.lstat(`${e}/packed-refs`)).mtimeMs)}catch{}return`${t.join(`,`)}|${n}`}async residentPacks(){let e=Yf(this.cache);if(!e)return[];let t=[];for(let[n,r]of e){let e;try{e=await r}catch{continue}e?.pack&&t.push({key:n,index:e,usedAt:e._lastUsedAt??0})}return t.sort((e,t)=>e.usedAt-t.usedAt),t.map(({key:e,index:t})=>({key:e,index:t}))}async trimResidentPacks(){let e=await this.residentPacks();if(e.length<=this.maxResidentPacks)return;let t=e.slice(0,e.length-this.maxResidentPacks);for(let{index:e}of t)e.pack=null;Jf.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const Qf=e(`git-commands`),$f=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),ep=new Set([`clone`,`fetch`,`pull`]),tp=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),np={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function rp(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function ip(e,t){if(e instanceof Map){let n=e.get(t);return n&&n.length>0?n:void 0}let n=e[t];return n&&n.length>0?n:void 0}var ap=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=If(e.fs,{statCacheMax:0}).promises,this.corsProxy=e.corsProxy,this.authorName=e.authorName??`User`,this.authorEmail=e.authorEmail??`user@example.com`,this.globalDbName=e.globalDbName??`slicc-fs-global`,this.cacheManager=new Zf(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=If(this.options.fs,{objectCache:!0}),r=tp.has(e)?qf(n.promises):n.promises,i=this.createOnAuthFailure();return{ctx:{lfs:r,fs:this.options.fs,cache:this.cacheManager.cache,corsProxy:this.corsProxy,getOnAuth:()=>this.getOnAuth(),getOnAuthFailure:()=>i,resolveAuthor:e=>this.resolveAuthor(e,r),getGlobalFs:()=>this.getGlobalFs(),setGithubToken:e=>this.setGithubToken(e),getGithubToken:()=>this.githubToken,setDefaultAuthorName:e=>{this.authorName=e},setDefaultAuthorEmail:e=>{this.authorEmail=e},getConfigOverrides:()=>this.currentConfigOverrides,stdin:this.currentStdin,useColor:t},client:n}}getOnAuth(){let e=this.resolveAuthToken();if(e)return()=>({username:`x-access-token`,password:e})}createOnAuthFailure(){if(!this.options.ensureFreshGithubToken)return;let e=!1;return async()=>{if(e)return;e=!0;try{await this.options.ensureFreshGithubToken?.({force:!0})}catch(e){Qf.warn(`GitHub token force-renew after 401 failed`,{error:e instanceof Error?e.message:String(e)});return}await this.loadGithubToken();let t=this.resolveAuthToken();if(t)return{username:`x-access-token`,password:t}}}resolveAuthToken(e=this.currentEnv){if(this.githubToken)return this.githubToken;if(!e)return;let t=ip(e,`GH_TOKEN`);if(t)return t;let n=ip(e,`GITHUB_TOKEN`);if(n)return n}async githubCredential(e,t){return await this.ensureFreshGithubToken(t),await this.loadGithubToken(),this.resolveAuthToken(e)}async identity(){let e=await this.getGlobalFs();return{name:await Qn(e,`user.name`)??this.authorName,email:await Qn(e,`user.email`)??this.authorEmail}}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t!=null)return t;let n=Ze.create({dbName:this.globalDbName});return e.globalFsByDbName.set(this.globalDbName,n),n}async loadGithubToken(){try{let e=(await(await this.getGlobalFs()).readTextFile(`/workspace/.git/github-token`)).trim();this.githubToken=e||void 0}catch{this.githubToken=void 0}}async ensureFreshGithubToken(e){try{await this.options.ensureFreshGithubToken?.(e)}catch(e){Qf.warn(`GitHub token freshness check failed; continuing with existing auth`,{error:e instanceof Error?e.message:String(e)})}}async setGithubToken(e){let t=e.trim(),n=await this.getGlobalFs();if(!t){try{await n.rm(`/workspace/.git/github-token`)}catch{}this.githubToken=void 0;return}await n.writeFile(`/workspace/.git/github-token`,t),this.githubToken=t}async resolveAuthor(e,t){let n=async n=>{try{return await $t({fs:t,dir:e,path:n})}catch{return}},r=this.currentConfigOverrides,i=await this.getGlobalFs();return{name:r?.get(`user.name`)??await n(`user.name`)??await Qn(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await Qn(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(ic(e),t);if(a.versionRequested&&a.remainingArgs.length===0)return this.version();if(a.helpRequested||a.remainingArgs.length===0)return this.help();let o=a.effectiveCwd,[s,...c]=a.remainingArgs,l=I[s]??{},u=M(c,l),d=Object.hasOwn(l.alias??{},`h`);if(u.flags.help||u.flags.h&&!d)return this.help();this.currentEnv=n,this.currentConfigOverrides=a.configOverrides,this.currentStdin=r??``;let f=this.invocationColor(e,n,a.configOverrides,i),{ctx:p,client:m}=this.contextFor(s,f);try{return this.cacheManager.setDeepVerification(this.shouldVerifyPackfiles()),await this.cacheManager.beforeCommand(o),$f.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${Js(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:ep.has(s)}),this.currentEnv=void 0,this.currentConfigOverrides=void 0,this.currentStdin=``,m.clearStatCache()}}async dispatch(e,t,n,r){switch(e){case`init`:return await cu(t,n,r);case`clone`:return await Rc(t,n,r);case`add`:return await Ps(t,n,r);case`status`:return await of(t,n,r);case`commit`:return await tl(t,n,r);case`log`:return await gu(t,n,r);case`ls-remote`:return await zu(t,n,r);case`branch`:return await lc(t,n,r);case`checkout`:return await uc(t,n,r);case`clean`:return await kc(t,n,r);case`diff`:return await Rl(t,n,r);case`show`:return await Id(t,n,r);case`remote`:return await Sd(t,n,r);case`fetch`:return await ou(t,n,r);case`pull`:return await ed(t,n,r);case`push`:return await td(t,n,r);case`merge`:return await Ju(t,n,r);case`merge-base`:return await Zu(t,n,r);case`cherry-pick`:return await Dc(t,n,r);case`rebase`:return await id(t,n,r);case`revert`:return await Ad(t,n,r);case`merge-file`:return await $u(t,n,r);case`reset`:return await Cd(t,n,r);case`config`:return await ml(t,n,r);case`tag`:return await wf(t,n,r);case`ls-files`:return await Iu(t,n,r);case`ls-tree`:return await Vu(t,n,r);case`show-ref`:return await zd(t,n,r);case`symbolic-ref`:return await Cf(t,n,r);case`stash`:return await Wd(t,n,r);case`rm`:return await Pd(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await kd(t,n,r);case`help`:return this.help();case`version`:return this.version();default:return{stdout:``,stderr:`git: '${e}' is not a git command. See 'git help'.\n`,exitCode:127}}}invocationColor(e,t,n,r){return sc({cliWhen:rc(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&ip(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?ip(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?ip(e,`SLICC_GIT_VERIFY_PACKS`):void 0;return t===void 0?this.options.verifyPackfiles===!0:t!==`0`&&t.toLowerCase()!==`false`}stripGlobalFlags(e,t){let n=M(e,np),r=t;for(let e of rp(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of rp(n.flags.c)){if(e===``)continue;let t=e.indexOf(`=`);if(t<0){i.set(e.toLowerCase(),``);continue}i.set(e.slice(0,t).toLowerCase(),e.slice(t+1))}return{effectiveCwd:r,remainingArgs:n.positionals,helpRequested:!!(n.flags.help||n.flags.h),versionRequested:!!n.flags.version,configOverrides:i}}version(){return{stdout:`git version 2.43.0 (isomorphic-git ${rn()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
|
|
116
|
+
or: git symbolic-ref (-d | --delete) <name>`;function mf(e){let t=Array.isArray(e)?e[e.length-1]:e;return typeof t==`boolean`?t:void 0}function hf(e){let t={};typeof e.m==`string`&&(t.m=e.m);let n=mf(e.delete);n!==void 0&&(t.delete=n);let r=mf(e.d);r!==void 0&&(t.d=r);let i=mf(e.quiet);i!==void 0&&(t.quiet=i);let a=mf(e.q);a!==void 0&&(t.q=a);let o=mf(e.short);o!==void 0&&(t.short=o);let s=mf(e.recurse);return s!==void 0&&(t.recurse=s),t}function gf(){return{stdout:``,stderr:`${pf}\n`,exitCode:129}}function _f(e){return!e.startsWith(`refs/`)||e.length===5||e.includes(`..`)||e.includes(`@{`)||e.split(`/`).some(e=>!e||e.startsWith(`.`)||e.endsWith(`.`)||e.endsWith(`.lock`))?!1:![...e].some(e=>{let t=e.charCodeAt(0);return t<=32||t===127||`~^:?*[\\`.includes(e)})}async function vf(e,t,n){try{let r=await E({fs:e.lfs,dir:t,ref:n,depth:2});return r.startsWith(`refs/`)?{kind:`symbolic`,target:r}:{kind:`direct`}}catch{return{kind:`missing`}}}async function yf(e,t,n,r){let i=await vf(e,t,n);if(i.kind!==`symbolic`)return{stdout:``,stderr:`fatal: ref ${n} is not a symbolic ref\n`,exitCode:i.kind===`direct`?1:128};if(!r)return i.target;let a=new Set([n]),o=i.target;for(;;){if(a.has(o))return{stdout:``,stderr:`fatal: ref ${n} has a circular symbolic target\n`,exitCode:128};a.add(o);let r=await vf(e,t,o);if(r.kind!==`symbolic`)return o;o=r.target}}function bf(e){for(let t of[`refs/heads/`,`refs/tags/`,`refs/remotes/`])if(e.startsWith(t))return e.slice(t.length);return e.startsWith(`refs/`)?e.slice(5):e}function xf(e,t){let n=new Set([`m`,`delete`,`d`,`quiet`,`q`,`short`,`recurse`]),r=Object.keys(e).find(e=>!n.has(e));if(r)return{stdout:``,stderr:`error: unknown option '${r}'\n${pf}\n`,exitCode:129};if(e.m!==void 0)return{stdout:``,stderr:`fatal: option '-m' is not supported because reflogs are not persisted
|
|
117
|
+
`,exitCode:128};if(e.delete===!1||t&&(e.short!==void 0||e.recurse!==void 0))return gf()}async function Sf(e,t,n,r){if(n===`HEAD`)return{stdout:``,stderr:`fatal: deleting 'HEAD' is not allowed
|
|
118
|
+
`,exitCode:128};let i=await vf(e,t,n);return i.kind===`symbolic`?(await pn({fs:e.lfs,dir:t,ref:n}),{stdout:``,stderr:``,exitCode:0}):{stdout:``,stderr:r?``:`fatal: Cannot delete ${n}, not a symbolic ref\n`,exitCode:i.kind===`direct`?1:128}}async function Cf(e,t,n,r){return _f(r)?(await Gt({fs:e.lfs,dir:t,ref:n,value:r,force:!0,symbolic:!0}),{stdout:``,stderr:``,exitCode:0}):{stdout:``,stderr:r.startsWith(`refs/`)?`fatal: Refusing to set '${n}' to invalid ref '${r}'\n`:`fatal: Refusing to point ${n} outside of refs/\n`,exitCode:128}}async function wf(e,t,n,r){let i=await yf(e,t,n,r.recurse!==!1);return typeof i==`string`?{stdout:`${r.short?bf(i):i}\n`,stderr:``,exitCode:0}:r.quiet&&i.exitCode===1?{...i,stderr:``}:i}async function Tf(e,t,n){let{flags:r,positionals:i}=M(n,I[`symbolic-ref`]),a=r.delete===!0,o=xf(r,a);if(o)return o;let s=r.quiet!==void 0||r.short!==void 0||r.recurse!==void 0;return a?i.length===1?Sf(e,t,i[0],!!r.quiet):gf():i.length===2?s?gf():Cf(e,t,i[0],i[1]):i.length===1?wf(e,t,i[0],hf(r)):gf()}async function Ef(e,t,n){let{flags:r,positionals:i}=M(n,I.tag),a=r,o=a.delete===!0,s=L(a,`list`),c=a.annotate===!0,l=L(a,`message`),u=a.force===!0;if(o){let n=i[0];return n?(await on({fs:e.lfs,dir:t,ref:n}),{stdout:`Deleted tag '${n}'\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`fatal: tag name required
|
|
119
|
+
`,exitCode:128}}if(s!==void 0||i.length===0){let n=await Bt({fs:e.lfs,dir:t}),r=n,i=s||void 0;if(i){let e=RegExp(`^`+i.replace(/\*/g,`.*`)+`$`);r=n.filter(t=>e.test(t))}return{stdout:r.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}let d=i[0],f=i[1];if(c||l){let n=await e.resolveAuthor(t);await Cn({fs:e.lfs,cache:e.cache,dir:t,ref:d,message:l??d,object:f,tagger:{...n,timestamp:Math.floor(Date.now()/1e3),timezoneOffset:0},force:u})}else await tn({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function Df(e,t){let n=e===`dir`?16877:e===`symlink`?40960:33188;if(t===void 0)return n;let r=t&4095;return n&61440|r}function Of(e,t){let n=t.mtimeMs??0;return{type:e,mode:Df(e,t.mode),size:t.size??0,ino:t.ino??0,mtimeMs:n,ctimeMs:t.ctimeMs??n,uid:t.uid??1,gid:t.gid??1,dev:1,isFile:()=>e===`file`,isDirectory:()=>e===`dir`,isSymbolicLink:()=>e===`symlink`}}function kf(e){return{size:e.size,mtimeMs:e.mtime,ctimeMs:e.ctime,...e.ino===void 0?{}:{ino:e.ino},...e.uid===void 0?{}:{uid:e.uid},...e.gid===void 0?{}:{gid:e.gid},...e.mode===void 0?{}:{mode:e.mode}}}function Af(e){if(typeof e==`string`)return/^utf-?8$/i.test(e);if(e&&typeof e==`object`){let t=e.encoding;if(typeof t==`string`)return/^utf-?8$/i.test(t)}return!1}function jf(e){if(!e||typeof e!=`object`)return null;let{start:t,end:n}=e;return typeof t!=`number`||typeof n!=`number`?null:{start:t,end:n}}const Mf=`/objects/pack`,Nf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Pf=/\/objects\/[0-9a-f]{2}$/;function Ff(e){return e.endsWith(Mf)||Pf.test(e)}function If(e){let t=Be(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Lf(e){let t=new Map;return{prime(n,r){if(r.length>e){t.clear();return}t.size+r.length>e&&t.clear();let i=b(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=If(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(b(e));if(n)return Of(n.type,n.stats?kf(n.stats):{})},drop(e){t.delete(b(e))},clear(){t.clear()},size(){return t.size}}}function Rf(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Lf(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,Ff(t)?void 0:{includeStats:!0});return r.prime(t,n),n.map(e=>e.name)},a=(e,t)=>{let n=e.fanouts.get(t);if(n!=null)return n;let r=i(t).then(e=>new Set(e));return e.fanouts.set(t,r),r},o=async e=>{if(!n)return!1;let t=Nf.exec(e);if(!t)return!1;try{return!(await a(n,t[1])).has(t[2])}catch{return!1}},s=()=>{n?.packDirs.clear(),n?.fanouts.clear()},c=async(e,t)=>(r.drop(e),await l(t)),l=async e=>{s();try{return await e()}finally{s()}};return{promises:{async readFile(t,n){if(await o(t))throw new Ve(`ENOENT`,`no such file or directory`,t);let r=jf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,Af(n)?{encoding:`utf-8`}:{encoding:`binary`})},async writeFile(t,n,r){await c(t,()=>e.writeFile(t,n))},async unlink(t){await c(t,()=>e.rm(t))},async readdir(e){if(!n||!e.endsWith(Mf))return await i(e);let t=n.packDirs.get(e);if(t!=null)return[...await t];let r=i(e);return n.packDirs.set(e,r),[...await r]},async mkdir(t,n){let r=n??void 0;await c(t,()=>e.mkdir(t,r?.recursive===void 0?void 0:{recursive:r.recursive}))},async rmdir(t){r.clear(),await l(()=>e.rm(t))},async stat(t){let n=r.get(t);if(n)return n;let i=await e.stat(t);return Of(i.type===`directory`?`dir`:`file`,kf(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return Of(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,kf(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Ve(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Ve(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const zf={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},Bf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function Vf(e){return e.endsWith(`.pack`)||e.endsWith(`.idx`)}function Hf(e){let t=e.replace(/\/{2,}/g,`/`);return t.length>1&&t.endsWith(`/`)?t.slice(0,-1):t}function Uf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Wf(e){let t=e?.code;return typeof t==`string`?t:void 0}function Gf(e){return typeof e==`string`?e.length*2:e.byteLength}function Kf(e,t){return`${t?`u`:`b`} ${e}`}var qf=class{limits;stats=new Map;lstats=new Map;dirs=new Map;files=new Map;fileBytes=new Map;retainedBytes=0;constructor(e){this.limits=e}hasRoom(){return this.stats.size+this.lstats.size+this.dirs.size+this.files.size<this.limits.maxEntries}retainFile(e,t){let n=Gf(t);return n>this.limits.maxFileBytes||this.retainedBytes+n>this.limits.maxTotalBytes?!1:(this.fileBytes.set(e,n),this.retainedBytes+=n,!0)}dropFile(e){let t=this.fileBytes.get(e);t!==void 0&&(this.fileBytes.delete(e),this.retainedBytes-=t)}forgetSelf(e){this.stats.delete(e),this.lstats.delete(e),this.dirs.delete(e);for(let t of[Kf(e,!0),Kf(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=Hf(e);this.forgetSelf(t);let n=Uf(t);this.dirs.delete(n),this.stats.delete(n),this.lstats.delete(n)}invalidateSubtree(e){let t=Hf(e),n=`${t}/`;for(let e of[this.stats,this.lstats,this.dirs])for(let t of e.keys())t.startsWith(n)&&e.delete(t);for(let e of this.files.keys())e.slice(2).startsWith(n)&&(this.files.delete(e),this.dropFile(e));this.invalidatePath(t)}};function Jf(e,t,n,r){let i=e.get(t);if(i!=null)return i;let a=n();if(!r.admit())return a;e.set(t,a);let o=()=>{e.get(t)===a&&e.delete(t)};return a.then(e=>{r.keep&&!r.keep(e)&&o()},e=>{Bf.has(Wf(e)??``)||o()}),a}function Yf(e,t={}){let n=new qf({...zf,...t}),r=()=>n.hasRoom(),i=async t=>(await Jf(n.dirs,Hf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(Vf(t))return e.readFile(t,i);let a=Kf(Hf(t),Af(i)),o=await Jf(n.files,a,()=>e.readFile(t,i),{admit:r,keep:e=>n.retainFile(a,e)});return typeof o==`string`?o:new Uint8Array(o)},o=(e,t)=>n=>Jf(e,Hf(n),()=>t(n),{admit:r}),s=async(e,t,r=!1)=>{try{return await t()}finally{r?n.invalidateSubtree(e):n.invalidatePath(e)}};return{readFile:a,readdir:i,stat:o(n.stats,t=>e.stat(t)),lstat:o(n.lstats,t=>e.lstat(t)),readlink:t=>e.readlink(t),writeFile:(t,n,r)=>s(t,()=>e.writeFile(t,n,r)),unlink:t=>s(t,()=>e.unlink(t),!0),rmdir:t=>s(t,()=>e.rmdir(t),!0),mkdir:(t,n)=>s(t,()=>e.mkdir(t,n)),symlink:(t,n)=>s(n,()=>e.symlink(t,n))}}const Xf=e(`git-cache`);function Zf(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function Qf(e){return`${e.replace(/\/+$/,``)}/.git`}var $f=class{fs;cache={};signatures=new Map;inFlight=0;maxResidentPacks;constructor(e,t={}){this.fs=e,this.maxResidentPacks=Math.max(1,t.maxResidentPacks??4)}setDeepVerification(e){this.cache.skipDeepPackVerification=!e}async beforeCommand(e){this.inFlight++;let t=Qf(e),n=this.signatures.get(t);if(n===void 0)return;let r=await this.packSignature(t);n!==r&&this.invalidate(e),this.signatures.set(t,r)}async afterCommand(e,t={}){this.inFlight=Math.max(0,this.inFlight-1);let n=Qf(e);t.wrotePacks&&(this.invalidate(e),this.signatures.delete(n)),this.inFlight===0&&(await this.evictFailedPacks(),await this.trimResidentPacks()),!this.signatures.has(n)&&this.hasCachedPacks(n)&&this.signatures.set(n,await this.packSignature(n))}async evictFailedPacks(){let e=Zf(this.cache);if(e)for(let[t,n]of[...e]){let r;try{r=await n}catch{e.delete(t);continue}if(!r){e.delete(t);continue}if(r.pack)try{await r.pack||(r.pack=null)}catch{r.pack=null}}}hasCachedPacks(e){let t=Zf(this.cache);if(!t)return!1;let n=`${e}/objects/pack/`;for(let e of t.keys())if(e.startsWith(n))return!0;return!1}invalidate(e){let t=`${Qf(e)}/objects/pack/`,n=Zf(this.cache);if(n)for(let e of[...n.keys()])e.startsWith(t)&&n.delete(e)}async residentPackCount(){return(await this.residentPacks()).length}async packSignature(e){let t=[];try{t=(await this.fs.readdir(`${e}/objects/pack`)).filter(e=>e.endsWith(`.idx`)||e.endsWith(`.pack`)).sort()}catch{}let n=`-`;try{n=String((await this.fs.lstat(`${e}/packed-refs`)).mtimeMs)}catch{}return`${t.join(`,`)}|${n}`}async residentPacks(){let e=Zf(this.cache);if(!e)return[];let t=[];for(let[n,r]of e){let e;try{e=await r}catch{continue}e?.pack&&t.push({key:n,index:e,usedAt:e._lastUsedAt??0})}return t.sort((e,t)=>e.usedAt-t.usedAt),t.map(({key:e,index:t})=>({key:e,index:t}))}async trimResidentPacks(){let e=await this.residentPacks();if(e.length<=this.maxResidentPacks)return;let t=e.slice(0,e.length-this.maxResidentPacks);for(let{index:e}of t)e.pack=null;Xf.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const ep=e(`git-commands`),tp=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),np=new Set([`clone`,`fetch`,`pull`]),rp=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),ip={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function ap(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function op(e,t){if(e instanceof Map){let n=e.get(t);return n&&n.length>0?n:void 0}let n=e[t];return n&&n.length>0?n:void 0}var sp=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=Rf(e.fs,{statCacheMax:0}).promises,this.corsProxy=e.corsProxy,this.authorName=e.authorName??`User`,this.authorEmail=e.authorEmail??`user@example.com`,this.globalDbName=e.globalDbName??`slicc-fs-global`,this.cacheManager=new $f(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=Rf(this.options.fs,{objectCache:!0}),r=rp.has(e)?Yf(n.promises):n.promises,i=this.createOnAuthFailure();return{ctx:{lfs:r,fs:this.options.fs,cache:this.cacheManager.cache,corsProxy:this.corsProxy,getOnAuth:()=>this.getOnAuth(),getOnAuthFailure:()=>i,resolveAuthor:e=>this.resolveAuthor(e,r),getGlobalFs:()=>this.getGlobalFs(),setGithubToken:e=>this.setGithubToken(e),getGithubToken:()=>this.githubToken,setDefaultAuthorName:e=>{this.authorName=e},setDefaultAuthorEmail:e=>{this.authorEmail=e},getConfigOverrides:()=>this.currentConfigOverrides,stdin:this.currentStdin,useColor:t},client:n}}getOnAuth(){let e=this.resolveAuthToken();if(e)return()=>({username:`x-access-token`,password:e})}createOnAuthFailure(){if(!this.options.ensureFreshGithubToken)return;let e=!1;return async()=>{if(e)return;e=!0;try{await this.options.ensureFreshGithubToken?.({force:!0})}catch(e){ep.warn(`GitHub token force-renew after 401 failed`,{error:e instanceof Error?e.message:String(e)});return}await this.loadGithubToken();let t=this.resolveAuthToken();if(t)return{username:`x-access-token`,password:t}}}resolveAuthToken(e=this.currentEnv){if(this.githubToken)return this.githubToken;if(!e)return;let t=op(e,`GH_TOKEN`);if(t)return t;let n=op(e,`GITHUB_TOKEN`);if(n)return n}async githubCredential(e,t){return await this.ensureFreshGithubToken(t),await this.loadGithubToken(),this.resolveAuthToken(e)}async identity(){let e=await this.getGlobalFs();return{name:await Qn(e,`user.name`)??this.authorName,email:await Qn(e,`user.email`)??this.authorEmail}}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t!=null)return t;let n=Ze.create({dbName:this.globalDbName});return e.globalFsByDbName.set(this.globalDbName,n),n}async loadGithubToken(){try{let e=(await(await this.getGlobalFs()).readTextFile(`/workspace/.git/github-token`)).trim();this.githubToken=e||void 0}catch{this.githubToken=void 0}}async ensureFreshGithubToken(e){try{await this.options.ensureFreshGithubToken?.(e)}catch(e){ep.warn(`GitHub token freshness check failed; continuing with existing auth`,{error:e instanceof Error?e.message:String(e)})}}async setGithubToken(e){let t=e.trim(),n=await this.getGlobalFs();if(!t){try{await n.rm(`/workspace/.git/github-token`)}catch{}this.githubToken=void 0;return}await n.writeFile(`/workspace/.git/github-token`,t),this.githubToken=t}async resolveAuthor(e,t){let n=async n=>{try{return await $t({fs:t,dir:e,path:n})}catch{return}},r=this.currentConfigOverrides,i=await this.getGlobalFs();return{name:r?.get(`user.name`)??await n(`user.name`)??await Qn(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await Qn(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(oc(e),t);if(a.versionRequested&&a.remainingArgs.length===0)return this.version();if(a.helpRequested||a.remainingArgs.length===0)return this.help();let o=a.effectiveCwd,[s,...c]=a.remainingArgs,l=I[s]??{},u=M(c,l),d=Object.hasOwn(l.alias??{},`h`);if(u.flags.help||u.flags.h&&!d)return this.help();this.currentEnv=n,this.currentConfigOverrides=a.configOverrides,this.currentStdin=r??``;let f=this.invocationColor(e,n,a.configOverrides,i),{ctx:p,client:m}=this.contextFor(s,f);try{return this.cacheManager.setDeepVerification(this.shouldVerifyPackfiles()),await this.cacheManager.beforeCommand(o),tp.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${Xs(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:np.has(s)}),this.currentEnv=void 0,this.currentConfigOverrides=void 0,this.currentStdin=``,m.clearStatCache()}}async dispatch(e,t,n,r){switch(e){case`init`:return await uu(t,n,r);case`clone`:return await Bc(t,n,r);case`add`:return await Is(t,n,r);case`status`:return await cf(t,n,r);case`commit`:return await rl(t,n,r);case`log`:return await vu(t,n,r);case`ls-remote`:return await Vu(t,n,r);case`branch`:return await dc(t,n,r);case`checkout`:return await fc(t,n,r);case`clean`:return await jc(t,n,r);case`diff`:return await Bl(t,n,r);case`show`:return await Rd(t,n,r);case`remote`:return await wd(t,n,r);case`fetch`:return await cu(t,n,r);case`pull`:return await nd(t,n,r);case`push`:return await rd(t,n,r);case`merge`:return await Xu(t,n,r);case`merge-base`:return await $u(t,n,r);case`cherry-pick`:return await kc(t,n,r);case`rebase`:return await od(t,n,r);case`revert`:return await Md(t,n,r);case`merge-file`:return await td(t,n,r);case`reset`:return await Td(t,n,r);case`config`:return await gl(t,n,r);case`tag`:return await Ef(t,n,r);case`ls-files`:return await Ru(t,n,r);case`ls-tree`:return await Uu(t,n,r);case`show-ref`:return await Vd(t,n,r);case`symbolic-ref`:return await Tf(t,n,r);case`stash`:return await Kd(t,n,r);case`rm`:return await Id(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await jd(t,n,r);case`help`:return this.help();case`version`:return this.version();default:return{stdout:``,stderr:`git: '${e}' is not a git command. See 'git help'.\n`,exitCode:127}}}invocationColor(e,t,n,r){return lc({cliWhen:ac(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&op(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?op(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?op(e,`SLICC_GIT_VERIFY_PACKS`):void 0;return t===void 0?this.options.verifyPackfiles===!0:t!==`0`&&t.toLowerCase()!==`false`}stripGlobalFlags(e,t){let n=M(e,ip),r=t;for(let e of ap(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of ap(n.flags.c)){if(e===``)continue;let t=e.indexOf(`=`);if(t<0){i.set(e.toLowerCase(),``);continue}i.set(e.slice(0,t).toLowerCase(),e.slice(t+1))}return{effectiveCwd:r,remainingArgs:n.positionals,helpRequested:!!(n.flags.help||n.flags.h),versionRequested:!!n.flags.version,configOverrides:i}}version(){return{stdout:`git version 2.43.0 (isomorphic-git ${rn()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
|
|
120
120
|
|
|
121
121
|
Available commands:
|
|
122
122
|
init Initialize a new repository
|
|
@@ -151,10 +151,10 @@ Available commands:
|
|
|
151
151
|
config Get and set repository options
|
|
152
152
|
rev-parse Pick out and massage parameters
|
|
153
153
|
|
|
154
|
-
`,stderr:``,exitCode:0}}};const
|
|
155
|
-
`).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var
|
|
156
|
-
`)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(
|
|
157
|
-
`)){let e=n.indexOf(`=`);e>0&&t.set(n.slice(0,e),n.slice(e+1).replace(/\r$/,``))}return t}function
|
|
154
|
+
`,stderr:``,exitCode:0}}};const cp={maxTraversalEntries:1e5,maxTraversalDepth:256,maxTraversalWork:1e5,maxGlobOperations:1e5,maxLiveBytes:67108864,maxInputBytes:33554432,maxArchiveBytes:134217728,maxArchiveCompressedBytes:67108864,maxArchiveEntryBytes:67108864,maxArchiveEntries:1e5};function lp(e,t){return e?{...cp,...t}:t}const up=new Set([`SHLVL`,`_`]);function dp(e){let t=e.split(`\0`);if(t.length<4)return null;let[n=``,r=``,i=``,...a]=t;if(!/^\d+$/.test(n)||!i.startsWith(`/`))return null;let o={};for(let e of a){let t=e.indexOf(`=`);t>0&&(o[e.slice(0,t)]=e.slice(t+1))}let s=r.trim()===``?[]:r.trim().split(/\s+/).map(Number);return{status:Number(n),pipeStatus:s,cwd:i,env:o}}function fp(e,t=[]){let n=new Set([...up,...t]);return Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)))}function pp(e,t){if(t!==`bytes`)return e;let n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t)&255;return new TextDecoder().decode(n)}async function mp(e,t){let n=[],r=er(e=>n.push(e)),i=await t.run([`bash`,`-c`,`__slicc_save() { local __s=\$1 __p=\$2 __c __n; { printf "%s\\0%s\\0%s\\0" "\$__s" "\$__p" "\$PWD"; for __c in {A..Z} {a..z} _; do eval "__slicc_names=(\\"\\\${!\${__c}@}\\")"; for __n in "\${__slicc_names[@]}"; do [[ \${!__n@a} == *x* ]] && printf "%s=%s\\0" "\$__n" "\${!__n}"; done; done; } >&97 2>/dev/null; }; trap '__slicc_save "\$?" "\${PIPESTATUS[*]}"' EXIT; ${e}`],t.env,[[97,r]]),a=n.reduce((e,t)=>e+t.length,0),o=new Uint8Array(a),s=0;for(let e of n)o.set(e,s),s+=e.length;return{stdout:pp(i.stdout,i.stdoutKind),stderr:i.stderr,exitCode:i.exitCode,state:a>0?dp(new TextDecoder().decode(o)):null}}const hp=`/home/user`;async function gp(e){try{let t=await e.readDir(`/home`),n=null,r=null;for(let i of t)if(i.type===`directory`){r??=i.name;try{let t=(await e.stat(`/home/${i.name}/.welcome.json`)).mtime??0;(!n||t>n.mtime)&&(n={name:i.name,mtime:t})}catch{}}let i=n?.name??r;return i?`/home/${i}`:hp}catch{return hp}}function _p(e){return e.replace(/\/+$/,``).split(`/`).pop()||`user`}function vp(e){let t=[],n=``,r=0;for(;r<e.length;){let i=e[r];if(i===`"`){for(r++;r<e.length&&e[r]!==`"`;)n+=e[r],r++;r++}else if(i===`'`){for(r++;r<e.length&&e[r]!==`'`;)n+=e[r],r++;r++}else i===`\\`&&r+1<e.length&&e[r+1]===` `?(n+=` `,r+=2):/\s/.test(i)?(n.length>0&&(t.push(n),n=``),r++):(n+=i,r++)}return n.length>0&&t.push(n),t}var yp=class{aggregator=null;now;explicitSink;scrubLabel;ids=new Map;seq=0;constructor(e={}){this.now=e.now??Date.now,this.explicitSink=e.sink,this.scrubLabel=e.scrubLabel}allocateId(e=`p`){return this.seq+=1,`${e}-${this.seq}`}hasSink(){return this.resolveSink()!==null}setAggregator(e){this.aggregator=e}emit(e){let t=this.aggregator;if(t&&e.id!==t.id)return t.onChild(e),!0;let n=this.resolveSink();if(!n)return e.phase===`end`&&this.ids.delete(e.id),!1;let r=this.ids.get(e.id);if(e.phase===`update`){if(!r)return!1;let t=this.now();return t-r.lastUpdateAt<250?!1:(r.lastUpdateAt=t,this.deliver(r,n,e),!0)}if(e.phase===`start`){let t={lastUpdateAt:-1/0,rawLabel:e.label,label:this.scrubbed(e.label),tail:Promise.resolve()};return this.ids.set(e.id,t),this.deliver(t,n,e),!0}return r?(this.ids.delete(e.id),this.deliver(r,n,e),!0):!1}resolveSink(){if(this.explicitSink)return this.explicitSink;let e=je();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:Ts,progress:e}]})}}scrubbed(e){return this.scrubLabel?bp(this.scrubLabel,e):e}deliver(e,t,n){n.label!==e.rawLabel&&(e.rawLabel=n.label,e.label=this.scrubbed(n.label));let{label:r}=e;if(typeof r==`string`){let e=xp(r);t(e===n.label?n:{...n,label:e});return}e.tail=e.tail.then(async()=>{let i=await r;e.label=i,t({...n,label:xp(i)})})}};async function bp(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function xp(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function Sp(e,t){return t.length?`${e} ${t.join(` `)}`:e}function Cp(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function wp(e,t=Date.now){let n=new Map,r=e=>n.get(e)?.[0];return{start(r,i){if(!e.hasSink())return;let a={id:e.allocateId(`net`),label:Cp(r),startedAt:t()},o=n.get(r);o?o.push(a):n.set(r,[a]),e.emit({id:a.id,label:a.label,fraction:i===void 0?void 0:0,done:0,total:i,unit:`bytes`,phase:`start`})},chunk(n,i,a){let o=r(n);if(!o)return;let s,c;if(a!==void 0&&a>0){s=Math.min(1,i/a);let e=t()-o.startedAt;i>0&&(c=Math.max(0,e/i*(a-i)))}e.emit({id:o.id,label:o.label,fraction:s,etaMs:c,done:i,total:a,unit:`bytes`,phase:`update`})},end(t){let r=n.get(t),i=r?.shift();r&&r.length===0&&n.delete(t),i&&e.emit({id:i.id,label:i.label,fraction:1,etaMs:0,unit:`bytes`,phase:`end`})}}}const Tp={timeout:e=>{let t=0;for(;t<e.length&&e[t].startsWith(`-`)&&e[t]!==`--`;)[`-k`,`--kill-after`,`-s`,`--signal`].includes(e[t])&&(t+=1),t+=1;return e[t]===`--`&&(t+=1),t+1},env:e=>{let t=0;for(;t<e.length&&(e[t].startsWith(`-`)||e[t].includes(`=`));)t+=1;return t},nohup:()=>0,nice:e=>{let t=0;for(;t<e.length&&e[t].startsWith(`-`);)t+=1;return t}},Ep=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function Dp(e){let t=``;for(let n of e.parts)switch(n.type){case`Literal`:case`SingleQuoted`:case`Escaped`:t+=n.value;break;case`DoubleQuoted`:for(let e of n.parts){if(e.type!==`Literal`&&e.type!==`Escaped`)return null;t+=e.value}break;default:return null}return t}function Op(e,t){switch(e.type){case`CommandSubstitution`:return zp(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=Op(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function kp(e,t){let n=0;for(let r of e.parts){let e=Op(r,t);if(e===null)return null;n+=e}return n}function Ap(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=kp(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=kp(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=Dp(e.name);if(r===null||Ep.has(r))return null;if(!t.has(r))return n;n+=1;let i=Tp[r];if(i){let r=e.args.map(Dp);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(Ep.has(a))return null;t.has(a)&&(n+=1)}return n}function jp(e){let t=typeof e.start==`number`?e.start:Number(e.start),n=typeof e.end==`number`?e.end:Number(e.end);if(!Number.isFinite(t)||!Number.isFinite(n)){let t=String(e.start),n=String(e.end);return t.length!==1||n.length!==1?null:Math.abs(n.charCodeAt(0)-t.charCodeAt(0))+1}let r=Math.abs(e.step??1)||1;return Math.floor(Math.abs(n-t)/r)+1}function Mp(e){if(e.parts.length!==1||e.parts[0].type!==`CommandSubstitution`)return null;let t=e.parts[0].body;if(t.statements.length!==1)return null;let n=t.statements[0];if(n.pipelines.length!==1||n.pipelines[0].commands.length!==1)return null;let r=n.pipelines[0].commands[0];if(r.type!==`SimpleCommand`||!r.name||Dp(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=Dp(e);return t===null?NaN:Number(t)});if(i.some(e=>!Number.isFinite(e)))return null;let a=1,o=1,s;if(i.length===1)[s]=i;else if(i.length===2)[a,s]=i;else if(i.length===3)[a,o,s]=i;else return null;if(o===0)return null;let c=Math.floor((s-a)/o)+1;return c>0?c:0}function Np(e){let t=0;for(let n of e){let e=n.type===`Word`?Pp(n.word):jp(n);if(e===null)return null;t+=e}return t}function Pp(e){let t=Mp(e);if(t!==null)return t;let n=1;for(let t of e.parts)switch(t.type){case`Literal`:case`SingleQuoted`:case`Escaped`:break;case`DoubleQuoted`:if(t.parts.some(e=>e.type!==`Literal`&&e.type!==`Escaped`))return null;break;case`BraceExpansion`:{let e=Np(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function Fp(e){let t=0;for(let n of e){let e=Pp(n);if(e===null)return null;t+=e}return t}function Ip(e,t){let n=0;for(let r of e){let e=Rp(r,t);if(e===null)return null;n+=e}return n}function Lp(e,t){switch(e.type){case`SimpleCommand`:return Ap(e,t);case`For`:{if(!e.words)return null;let n=Fp(e.words),r=Ip(e.body,t);return n===null||r===null?null:e.words.filter(e=>Mp(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return Ip(e.body,t);case`FunctionDef`:return 0;default:return null}}function Rp(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=Lp(e,t);if(r===null)return null;n+=r}return n}function zp(e,t){return Ip(e.statements,t)}function Bp(e,t){let n=zp(e,t);return{totalSteps:n!==null&&n>0?n:null}}function Vp(e){return e.split(`
|
|
155
|
+
`).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var Hp=class{plan;emitter;label;now;id;steps=0;startedAt;finished=!1;children=new Map;constructor(e,t,n,r=Date.now){this.plan=e,this.emitter=t,this.label=n,this.now=r,this.id=t.allocateId(`script`),this.startedAt=r(),this.emitter.setAggregator(this),this.publish(`start`)}stepDone(){this.finished||(this.steps+=1,this.publish(`update`))}onChild(e){if(!this.finished){if(e.phase===`end`){this.children.delete(e.id);return}this.children.set(e.id,{fraction:e.fraction,label:e.label}),(e.fraction!==void 0||e.phase===`start`)&&this.publish(`update`)}}end(){this.finished||(this.finished=!0,this.emitter.setAggregator(null),this.emitter.emit({id:this.id,label:this.label,fraction:1,etaMs:0,done:this.steps,total:this.plan.totalSteps??void 0,unit:`iterations`,phase:`end`}))}fraction(){let e=[...this.children.values()].at(-1)?.fraction,t=this.plan.totalSteps;if(t===null)return e;let n=e??0;return Math.min(1,(this.steps+n)/t)}publish(e){let t=this.fraction(),n=this.now()-this.startedAt,r=t!==void 0&&t>0&&t<1?Math.max(0,n/t*(1-t)):t===1?0:void 0,i=[...this.children.values()].at(-1);this.emitter.emit({id:this.id,label:i?`${this.label} · ${i.label}`:this.label,fraction:t,etaMs:r,done:this.steps,total:this.plan.totalSteps??void 0,unit:`iterations`,phase:e})}};const Up=globalThis.setTimeout.bind(globalThis);function Wp(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function Gp(e,t={}){let n=t.now??Date.now,r=t.setTimeout??Up,i=t.isAborted??(()=>!1),a=t.label??Wp,o=e=>new Promise(t=>r(t,e));return async t=>{let r=Math.max(0,t),s=e.allocateId(`sleep`),c=a(r),l=n();e.emit({id:s,label:c,fraction:0,etaMs:r,done:0,total:r,unit:`ms`,phase:`start`});try{let t=0;for(;t<r;){if(i())return;if(await o(Math.min(250,r-t)),t=n()-l,t<r){let n=Math.min(1,t/r);e.emit({id:s,label:c,fraction:n,etaMs:Math.max(0,r-t),done:Math.min(t,r),total:r,unit:`ms`,phase:`update`})}}}finally{e.emit({id:s,label:c,fraction:1,etaMs:0,done:r,total:r,unit:`ms`,phase:`end`})}}}const Kp=globalThis.setTimeout.bind(globalThis);function qp(e){let t=/^(\d+(?:\.\d+)?|\.\d+)([smhd]?)$/.exec(e.trim());return t?Number(t[1])*({"":1e3,s:1e3,m:6e4,h:36e5,d:864e5}[t[2]]??1e3):null}function Jp(e){let t=0;for(;t<e.length;){let n=e[t];if(n===`--`)return t+1<e.length?t+1:-1;if(!n.startsWith(`-`))return t;[`-k`,`--kill-after`,`-s`,`--signal`].includes(n)&&(t+=1),t+=1}return-1}function Yp(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??Kp;return{...e,async execute(n,a){let o=Jp(n),s=o>=0?qp(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=Sp(e.name,n),u=r(),d=!0,f=()=>{if(!d)return;let e=r()-u,n=Math.min(1,e/s);t.emit({id:c,label:l,fraction:n,etaMs:Math.max(0,s-e),done:Math.min(e,s),total:s,unit:`ms`,phase:`update`}),e<s&&i(f,250)};t.emit({id:c,label:l,fraction:0,etaMs:s,done:0,total:s,unit:`ms`,phase:`start`}),i(f,250);try{return await e.execute(n,a)}finally{d=!1,t.emit({id:c,label:l,fraction:1,etaMs:0,done:s,total:s,unit:`ms`,phase:`end`})}}}}const Xp=new Set(`sleep,echo,printf,true,false,test,[,cd,pwd,export,unset,set,shift,local,return,break,continue,exit,:,read,let,declare,typeset,readonly,eval,exec,source,.,alias,unalias,type,command,builtin,wait,trap,basename,dirname,seq,expr`.split(`,`));function Zp(e,t,n={}){if((n.skip??Xp).has(e.name))return e;let r=e.name;return{...e,async execute(n,i){if(!t.hasSink())return e.execute(n,i);let a=t.allocateId(`cmd`),o=Sp(r,n);t.emit({id:a,label:o,phase:`start`});try{return await e.execute(n,i)}finally{t.emit({id:a,label:o,phase:`end`})}}}}const Qp={stdout:``,stderr:``,exitCode:130};function $p(e,t){if(!t)return e();if(t.aborted)return Promise.resolve(Qp);let n,r=new Promise(e=>{n=()=>e(Qp),t.addEventListener(`abort`,n,{once:!0})});return Promise.race([e(),r]).finally(()=>{n&&t.removeEventListener(`abort`,n)})}const em=new Map([[`jsh`,`node`]]);function tm(e,t){return`${em.get(e)??e} ${t.join(` `)}`.trim()}function nm(e){return pt(`sudo`,e)}async function rm(e,t){let n=e.trim();if(!n||ut(ct(t.policy,n),t.defaultDisposition??`allow`)!==`require-approval`)return{allowed:!0};let r=await t.broker.requestApproval({kind:`command`,detail:n,...t.reason?{reason:t.reason}:{}});if(r.decision===`deny`)return{allowed:!1,message:nm(r),exitCode:77};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}const im=`__SLICC_SUDO_REASON`,am=/^#!/;function om(e){let t=[];for(let n of e.split(`
|
|
156
|
+
`)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(am.test(e))continue;let r=e.replace(/^#+/,``).trim();r&&t.push(r)}return Ft(t.join(` `))}function sm(e){return new Promise((t,n)=>{chrome.runtime.sendMessage(e,e=>{let r=chrome.runtime.lastError;if(r){n(Error(r.message??`chrome.runtime.lastError`));return}t(e)})})}const cm=1e4;async function lm(e,t,n){let r={method:e,headers:we({"Content-Type":`application/json`}),signal:AbortSignal.timeout(cm)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(Ce(`/api/secrets${t}`),r),n=await e.json().catch(()=>({}));return{ok:e.ok,status:e.status,data:n}}catch(e){return{ok:!1,status:0,data:{error:um(e)}}}}function um(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${cm/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function dm(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function fm(e,t){let n=e.entries.find(e=>e.name===t)??null;if(n)return n;if(e.warnings.length>0)throw Error(e.warnings.join(`; `));return null}function pm(){return{async list(){let[e,t]=await Promise.all([lm(`GET`,``),lm(`GET`,`/session`)]),n=[],r=[];if(e.ok)for(let t of e.data)n.push({name:t.name,domains:t.domains,persisted:!0});else r.push(dm(`saved`,_m(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(dm(`session`,_m(t.data)));return{entries:n,warnings:r}},async getInfo(e){return fm(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await lm(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await lm(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await lm(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(_m(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await lm(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(_m(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await lm(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(_m(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await lm(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(_m(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function mm(e){let t=t=>e(t);return{async list(){let[e,n]=await Promise.all([t({type:`secrets.list`}),t({type:`secrets.session.list`})]),r=[],i=[];for(let t of e?.entries??[])r.push({name:t.name,domains:t.domains,persisted:!0});for(let e of n?.entries??[])r.push({name:e.name,domains:e.domains,persisted:!1});return e?.entries||i.push(dm(`saved`,e?.error)),n?.entries||i.push(dm(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return fm(await this.list(),e)},async getMasked(e){return((await t({type:`secrets.list-masked-entries`}))?.entries??[]).find(t=>t.name===e)??null},async peek(e){let n=await t({type:`secrets.peek`,name:e});if(n?.error)throw Error(n.error);return n?.record??null},async setSession(e,n,r){let i=await t({type:`secrets.session.set`,name:e,value:n,domains:r});if(!i?.ok)throw Error(i?.error??`secrets.session.set failed`)},async setPersisted(e,n,r){let i=await t({type:`secrets.set`,name:e,value:n,domains:r});if(!i?.ok)throw Error(i?.error??`secrets.set failed`)},async setScope(e,n){let r=await t({type:`secrets.set-domains`,name:e,domains:n});if(!r?.ok)throw Error(r?.error??`secrets.set-domains failed`)},async delete(e){let n=await t({type:`secrets.delete`,name:e});if(!n?.ok)throw Error(n?.error??`secrets.delete failed`);return{removed:n.removed??!0,fromSession:n.fromSession}}}}function hm(){return mm(e=>sm(e))}function gm(){return mm(e=>{let{type:t,...n}=e;return Ae(t,n)})}function _m(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function vm(e){switch(e){case`extension-direct`:return hm();case`extension-delegate`:return gm();default:return pm()}}const ym=`git-credential-slicc`,bm=new Map([[ym,`git`],[`git-upload-pack`,`git`],[`git-receive-pack`,`git`],[`git-upload-archive`,`git`],[`git-remote-http`,`git`],[`git-remote-https`,`git`]]),xm=[`github.com`,`*.github.com`],Sm=/(_TOKEN|_PAT)$/;function Cm(e){let t=new Map;for(let n of e.split(`
|
|
157
|
+
`)){let e=n.indexOf(`=`);e>0&&t.set(n.slice(0,e),n.slice(e+1).replace(/\r$/,``))}return t}function wm(e){let t=e.get(`host`)??``;try{return new URL(`https://${t}`).hostname}catch{return``}}async function Tm(e,t,n,r){for(let r of t){let t=await n.getMasked(r).catch(()=>null);if(t&&t.maskedValue===e)return t.domains}return r}async function Em(e,t,n){let r=await t.githubToken?.(e).catch(()=>void 0);if(!r)return;let i=t.githubDomains?.()??xm;return{token:r,domains:r===e.GH_TOKEN||r===e.GITHUB_TOKEN?await Tm(r,[`GH_TOKEN`,`GITHUB_TOKEN`],n,xm):i}}async function Dm(e,t){let{entries:n}=await t.list().catch(()=>({entries:[]})),r=n.filter(e=>Sm.test(e.name)&&!e.domains.includes(`*`)).filter(t=>Da(t.domains,e)).sort((t,n)=>Number(!t.domains.includes(e))-Number(!n.domains.includes(e))||t.name.localeCompare(n.name));for(let e of r){let n=await t.getMasked(e.name).catch(()=>null);if(n)return{token:n.maskedValue,domains:n.domains}}}async function Om(e,t,n){let r=wm(e);if(e.get(`protocol`)!==`https`||!r)return{stdout:``,stderr:``,exitCode:0};let i=(n.backend??(()=>vm(Oe())))(),a=await Em(t,n,i),o=a&&Da(a.domains,r)?a:await Dm(r,i);return o?{stdout:`username=${e.get(`username`)||`x-access-token`}\npassword=${o.token}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:``,exitCode:0}}async function km(e,t,n){let r=e.get(`password`),i=await n.githubToken?.(t).catch(()=>void 0);return r&&i===r&&await n.githubToken?.(t,{force:!0}).catch(()=>void 0),{stdout:``,stderr:``,exitCode:0}}function Am(e={}){return S(ym,async(t,n)=>{let r=t[0];if(r===void 0||r===`-h`||r===`--help`)return{stdout:`usage: git-credential-slicc <get|store|erase>
|
|
158
158
|
|
|
159
159
|
The git credential helper for native git in the wasm realm, configured by
|
|
160
160
|
default (credential.helper=slicc). Reads git's key=value request on stdin.
|
|
@@ -165,7 +165,7 @@ default (credential.helper=slicc). Reads git's key=value request on stdin.
|
|
|
165
165
|
a host outside the credential's domains, or for plain http.
|
|
166
166
|
store Nothing to do: SLICC keeps its own credentials.
|
|
167
167
|
erase Renews SLICC's GitHub token when it was the one rejected.
|
|
168
|
-
`,stderr:``,exitCode:+(r===void 0)};let i=Object.fromEntries(n.env),a=
|
|
168
|
+
`,stderr:``,exitCode:+(r===void 0)};let i=Object.fromEntries(n.env),a=Cm(P(n.stdin));return r===`get`?Om(a,i,e):r===`erase`?km(a,i,e):{stdout:``,stderr:``,exitCode:0}})}const jm={directory:{title:`Mount local directory`,approve:`Select directory`},"usb-device":{title:`Connect USB device`,approve:`Select USB device`},"serial-port":{title:`Connect serial port`,approve:`Select serial port`},"hid-device":{title:`Connect HID device`,approve:`Select HID device`}};function Mm(e,t=[],n){let r=jm[e],i=t.length?` data-action-data='${JSON.stringify({filters:t}).replace(/'/g,`'`)}'`:``,a=e===`directory`&&n?`<div class="sprinkle-action-card__meta">Target: ${wt(n)}</div>`:``;return`
|
|
169
169
|
<div class="sprinkle-action-card">
|
|
170
170
|
<div class="sprinkle-action-card__header">
|
|
171
171
|
<div class="sprinkle-action-card__title-group">${r.title}${a}</div>
|
|
@@ -176,11 +176,11 @@ default (credential.helper=slicc). Reads git's key=value request on stdin.
|
|
|
176
176
|
<button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="${e}"${i}>${r.approve}</button>
|
|
177
177
|
</div>
|
|
178
178
|
</div>
|
|
179
|
-
`}const jm=Symbol(`mount:timeout`),Mm=Symbol(`mount:no-panel`);async function Nm(e,t){let n=Me.generateId(),r=!1,i=!1,a=Ne({id:n,html:Am(`directory`,[],t),onAction:(e,t)=>Pm(e,t)},e.onUpdate).catch(e=>{if(r)return jm;if(i)return Mm;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Me.cancel(n,`mount: timed out`),e(jm)},3e5)}),c=new Promise(e=>{Me.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Me.cancel(n,`mount: panel did not render the approval card`),e(Mm))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===jm)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===Mm)throw Error(`mount: chat panel did not render the approval card — open the chat panel and retry`);if(!l)throw Error(`mount: tool UI not available`);let u=l;if(u.denied)throw Error(`mount: denied by user`);if(u.cancelled)throw Error(`mount: cancelled`);if(u.error)throw Error(`mount: ${u.error}`);if(!u.handle)throw Error(`mount: no directory selected`);return u.handle}async function Pm(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await Rt(n.idbKey);return e?(await It(e),{approved:!0,handle:e}):{error:`No directory handle found in storage`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}if(n?.cancelled)return{cancelled:!0};if(n?.error)return{error:String(n.error)};try{return{approved:!0,handle:await window.showDirectoryPicker({mode:`readwrite`})}}catch(e){return e instanceof Error&&e.name===`AbortError`?{cancelled:!0}:{error:e instanceof Error?e.message:String(e)}}}function Fm(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function Im(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function Lm(e){for(let t of e.args){let e=Fm(t);if(e===`-o`||e===`--out`)return!0}return!1}function Rm(e){for(let t of e.redirections){let e=t.operator,n=t.fd;if(e===`&>`||e===`&>>`||(e===`>`||e===`>>`||e===`>|`)&&(n==null||n===1))return!0}return!1}function zm(e){Fm(e.name)!==`say`||Lm(e)||(e.args=[Im(`-o`),Im(`-`),...e.args])}function Bm(e,t){if(Array.isArray(e)){for(let n of e)Bm(n,t);return}if(!e||typeof e!=`object`)return;let n=e;if(n.type===`Pipeline`&&Array.isArray(n.commands)){let e=n.commands;for(let n=0;n<e.length;n++){let r=e[n],i=e.length>1&&n<e.length-1,a=t||i||r?.type===`SimpleCommand`&&Rm(r);r?.type===`SimpleCommand`&&a&&zm(r),Bm(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){Bm(n.body,!0);return}for(let e of Object.values(n))Bm(e,t)}const Vm={name:`say-stdio`,transform(e){return Bm(e.ast,!1),{ast:e.ast}}};function Hm(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function Um(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function Wm(e){return e.map(e=>{let t=e.boost?parseFloat(e.boost):NaN,n=Number.isFinite(t)?t:void 0;return{name:e.name,displayName:e.displayName||e.name,description:e.description||``,source:{repo:e.repo,path:e.path||void 0,skill:e.skill||void 0,installAll:Um(e.installAll)},affinity:{apps:Hm(e.apps),tasks:Hm(e.tasks),role:Hm(e.role),purpose:Hm(e.purpose)},priority:n}})}const Gm={apps:3,tasks:2,role:1,purpose:1};function Km(e,t){return e.map(e=>{let n=0,r=[],i=(e.affinity.apps??[]).filter(e=>t.apps.includes(e));i.length&&(n+=i.length*Gm.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*Gm.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=Gm.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=Gm.purpose,r.push(`purpose(${t.purpose})`)),n*=e.priority??1,{entry:e,score:n,matchReasons:r}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score)}function qm(e){let t=`upskill ${e.repo}`;return e.path&&(t+=` --path ${e.path}`),e.installAll?t+=` --all`:e.skill&&(t+=` --skill ${e.skill}`),t}async function Jm(e){let t=new Set;try{let n=await e.readDir(Ci);for(let e of n)e.type===`directory`&&t.add(e.name)}catch{}let n=[`.agents`,`.claude`];try{let r=await e.readDir(`/`);for(let i of r)if(i.type===`directory`)for(let r of n)try{let n=`/${i.name}/${r}/skills`,a=await e.readDir(n);for(let e of a)e.type===`directory`&&t.add(e.name)}catch{}}catch{}return t}function Ym(e){return{purpose:e.purpose??``,role:e.role??``,tasks:Array.isArray(e.tasks)?e.tasks:[],apps:Array.isArray(e.apps)?e.apps:[],name:e.name??``,company:typeof e.company==`string`?e.company:void 0}}function Xm(e){return typeof e!=`string`||!e?null:te(e)||null}function Zm(e,t){if(t.length===0)return e;let n=new Set(t.map(e=>e.name));return[...e.filter(e=>!n.has(e.name)),...t]}async function Qm(e,t){try{let n=Xm(t);if(!n)return[];let r=await e(`${Ti}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?Wm(be(r.body).data):[]}catch{return[]}}async function $m(e){let t;try{t=await e(Ei,{headers:{Accept:`application/json`}})}catch(e){throw Error(Fi(e,Ei))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return Wm(be(t.body).data)}function eh(e,t,n){let r=e.entry.source;if(r.skill){let e=n.get(r.skill);return e?{skillPath:e,skillName:r.skill}:r.path?{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:r.skill}:{error:`skill "${r.skill}" not found in ${t}`}}if(r.path)return{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:e.entry.name};let i=n.get(e.entry.name);return i?{skillPath:i,skillName:e.entry.name}:{error:`skill "${e.entry.name}" not found in ${t} and no explicit path provided`}}async function th(e,t,n,r,i,a,o,s,c){let l=e.entry.source,u=l.path.replace(/^\/|\/$/g,``),d=o<s?` (~${Math.round((s-o)*(Date.now()-c)/o/1e3)}s remaining)`:``,f=[];for(let[e,t]of r)(t===u||t.startsWith(`${u}/`))&&f.push({name:e,path:t});if(f.length===0){let n=`no skills found under "${l.path}" in ${t}`;return{results:[{ok:!1,name:e.entry.name,error:n}],line:`[${o}/${s}] Failed "${e.entry.name}" bundle from ${t}: ${n}${d}\n`}}let p=Date.now(),m=0,h=0,g=[];for(let e of f){if(i.has(e.name))continue;let t=await Ki(e.path,e.name,n,a,!1);t.ok?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.error}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${o}/${s}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${o}/${s}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${o}/${s}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function nh(e,t,n,r,i,a,o,s,c,l){let u=e.entry.source,d=s<c?` (~${Math.round((c-s)*(Date.now()-l)/s/1e3)}s remaining)`:``,f=await qi(n,r,i,u.path);if(f.error)return{results:[{ok:!1,name:e.entry.name,error:f.error}],line:`[${s}/${c}] Failed "${e.entry.name}" bundle from ${t}: ${f.error}${d}\n`};let p=Date.now(),m=0,h=0,g=[];for(let e of f.skills){if(a.has(e.name))continue;let t=await Gi(n,r,e.path,e.name,o,i,!1);t.exitCode===0?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.stderr.trim()}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${s}/${c}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${s}/${c}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${s}/${c}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function rh(e,t,n,r,i,a,o,s){let c=new Map;for(let e of Object.keys(n))if(e.endsWith(`/SKILL.md`)){let t=e.replace(/\/SKILL\.md$/,``);c.set(t.split(`/`).pop()||t,t)}let l=[],u=``;for(let d of t){let t=d.entry.source;if(t.installAll&&t.path){r.count++;let t=await th(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=eh(d,e,c);if(`error`in f){l.push({ok:!1,name:d.entry.name,error:f.error}),r.count++;let t=r.count<i?` (~${Math.round((i-r.count)*(Date.now()-a)/r.count/1e3)}s remaining)`:``;u+=`[${r.count}/${i}] Failed "${d.entry.name}" from ${e}: ${f.error}${t}\n`;continue}let{skillPath:p,skillName:m}=f,h=Date.now(),g=await Ki(p,m,n,s,!1);r.count++;let _=((Date.now()-h)/1e3).toFixed(1),v=(Date.now()-a)/r.count,ee=Math.round((i-r.count)*v/1e3),te=r.count<i?` (~${ee}s remaining)`:``;g.ok?(l.push({ok:!0,name:m}),u+=`[${r.count}/${i}] Installed "${m}" from ${e} (${_}s)${te}\n`):(l.push({ok:!1,name:m,error:g.error}),u+=`[${r.count}/${i}] Failed "${m}" from ${e}: ${g.error}${te}\n`)}return{errors:[],results:l,output:u}}async function ih(e,t,n,r,i,a,o,s,c,l){let u=await Ii(c),d=[],f=``;for(let c of t){let t=c.entry.source;i.count++;let p=i.count<a?` (~${Math.round((a-i.count)*(Date.now()-o)/i.count/1e3)}s remaining)`:``;if(t.installAll&&t.path){let t=await nh(c,e,n,r,u,s,l,i.count,a,o);d.push(...t.results),f+=t.line;continue}let m=t.path?t.path.replace(/^\/|\/$/g,``):c.entry.name,h=t.skill||c.entry.name,g=await Gi(n,r,m,h,l,u,!1);g.exitCode===0?(f+=`[${i.count}/${a}] Installed "${h}" from ${e}${p}\n`,d.push({ok:!0,name:h})):(f+=`[${i.count}/${a}] Failed "${h}" from ${e}: ${g.stderr.trim()}${p}\n`,d.push({ok:!1,name:h,error:g.stderr.trim()}))}return{errors:[],results:d,output:f}}function ah(e,t,n){let r=``;for(let i of e){if(i.status===`rejected`){t.push(`upskill: unexpected error: ${i.reason}`);continue}r+=i.value.output;for(let e of i.value.errors)t.push(e);for(let e of i.value.results)e.ok?n.push(e.name):e.error&&t.push(`upskill: ${e.error}`)}return r}async function oh(e,t,n){let r=Date.now(),i=(e,t=[])=>({installedNames:[],errors:t,skipped:e,log:``,elapsedSeconds:(Date.now()-r)/1e3}),a=null;if(n)a=Ym(n);else try{let t=await e.readDir(`/home`);for(let n of t)try{let t=await e.readTextFile(`/home/${n.name}/.welcome.json`);a=Ym(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([$m(t),Qm(t,a.company),Jm(e)]);o=Zm(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${Ei}: ${e instanceof Error?e.message:String(e)}`])}let c=Km(o,a).filter(e=>!s.has(e.entry.name));if(c.length===0)return i(`all-installed`);let l=new Map;for(let e of c){let t=e.entry.source.repo,n=l.get(t);n?n.push(e):l.set(t,[e])}let u=c.length,d={count:0},f=[],p=[],m=``;m=ah(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await Ni(a,o,t);return c.status===`error`?ih(n,i,a,o,d,u,r,s,t,e):rh(n,i,Oi(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Ui(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function sh(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let ch,lh;async function uh(e){if(ch)return ch;if(lh!==void 0)return lh;lh=(async()=>{let t;try{t=await e(Di,{headers:{Accept:`application/json`}})}catch(e){throw Error(Fi(e,Di))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=be(t.body),r=Array.isArray(n)?n:n.skills??[];return ch=r,r})();try{return await lh}catch(e){throw lh=void 0,e}}async function dh(e,t){let n=await uh(t),r=e.trim().toLowerCase();return r?n.filter(e=>[e.title??``,e.name??``,e.description??``,e.hostname??``,...e.tags??[]].join(` `).toLowerCase().includes(r)).map(e=>({name:e.slug,displayName:e.title||e.name||e.task||e.slug,summary:e.description||``,source:`browseSh`,qualityScore:null,installHint:`upskill browse:${e.hostname}/${e.task}`,sourceRepo:e.hostname})):[]}const fh=/^[A-Za-z0-9._-]+$/;function ph(e){return!e||e===`.`||e===`..`?!1:fh.test(e)}function mh(e){let t;if(e.startsWith(`browse:`))t=e.slice(7);else{let n=e.match(/^https:\/\/browse\.sh\/skills\/([^/?#]+)\/([^/?#]+?)\/?$/);n&&(t=`${n[1]}/${n[2]}`)}if(!t)return null;let n=t.indexOf(`/`);if(n<0)return null;let r=t.slice(0,n),i=t.slice(n+1);if(!r||!i||i.includes(`/`)||!ph(r)||!ph(i))return null;let a=sh(r);return ph(a)?{hostname:a,task:i}:null}function hh(e,t){let n=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(n)for(let e of n[1].split(/\r?\n/)){let n=e.match(/^([A-Za-z_][A-Za-z0-9_-]*)\s*:\s*(.*)$/);if(!n||n[1]!==t)continue;let r=n[2].trim();return(r.startsWith(`"`)&&r.endsWith(`"`)||r.startsWith(`'`)&&r.endsWith(`'`))&&(r=r.slice(1,-1)),r||void 0}}function gh(e,t){let n=e.updated?` · updated ${e.updated}`:``;return[`> [!NOTE] **Imported from browse.sh** — original slug: \`${t}\``,`>`,"> **SLICC adaptation:** use `playwright-cli` — you are running inside the user's real browser session, so the bot-detection workarounds the upstream skill assumes are usually unnecessary.",`>`,`> Source: <https://browse.sh/skills/${t}>${n}`].join(`
|
|
180
|
-
`)}function
|
|
181
|
-
`)}function
|
|
182
|
-
`}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function
|
|
183
|
-
`;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function
|
|
179
|
+
`}const Nm=Symbol(`mount:timeout`),Pm=Symbol(`mount:no-panel`);async function Fm(e,t){let n=Me.generateId(),r=!1,i=!1,a=Ne({id:n,html:Mm(`directory`,[],t),onAction:(e,t)=>Im(e,t)},e.onUpdate).catch(e=>{if(r)return Nm;if(i)return Pm;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Me.cancel(n,`mount: timed out`),e(Nm)},3e5)}),c=new Promise(e=>{Me.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Me.cancel(n,`mount: panel did not render the approval card`),e(Pm))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===Nm)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===Pm)throw Error(`mount: chat panel did not render the approval card — open the chat panel and retry`);if(!l)throw Error(`mount: tool UI not available`);let u=l;if(u.denied)throw Error(`mount: denied by user`);if(u.cancelled)throw Error(`mount: cancelled`);if(u.error)throw Error(`mount: ${u.error}`);if(!u.handle)throw Error(`mount: no directory selected`);return u.handle}async function Im(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await Rt(n.idbKey);return e?(await It(e),{approved:!0,handle:e}):{error:`No directory handle found in storage`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}if(n?.cancelled)return{cancelled:!0};if(n?.error)return{error:String(n.error)};try{return{approved:!0,handle:await window.showDirectoryPicker({mode:`readwrite`})}}catch(e){return e instanceof Error&&e.name===`AbortError`?{cancelled:!0}:{error:e instanceof Error?e.message:String(e)}}}function Lm(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function Rm(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function zm(e){for(let t of e.args){let e=Lm(t);if(e===`-o`||e===`--out`)return!0}return!1}function Bm(e){for(let t of e.redirections){let e=t.operator,n=t.fd;if(e===`&>`||e===`&>>`||(e===`>`||e===`>>`||e===`>|`)&&(n==null||n===1))return!0}return!1}function Vm(e){Lm(e.name)!==`say`||zm(e)||(e.args=[Rm(`-o`),Rm(`-`),...e.args])}function Hm(e,t){if(Array.isArray(e)){for(let n of e)Hm(n,t);return}if(!e||typeof e!=`object`)return;let n=e;if(n.type===`Pipeline`&&Array.isArray(n.commands)){let e=n.commands;for(let n=0;n<e.length;n++){let r=e[n],i=e.length>1&&n<e.length-1,a=t||i||r?.type===`SimpleCommand`&&Bm(r);r?.type===`SimpleCommand`&&a&&Vm(r),Hm(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){Hm(n.body,!0);return}for(let e of Object.values(n))Hm(e,t)}const Um={name:`say-stdio`,transform(e){return Hm(e.ast,!1),{ast:e.ast}}};function Wm(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function Gm(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function Km(e){return e.map(e=>{let t=e.boost?parseFloat(e.boost):NaN,n=Number.isFinite(t)?t:void 0;return{name:e.name,displayName:e.displayName||e.name,description:e.description||``,source:{repo:e.repo,path:e.path||void 0,skill:e.skill||void 0,installAll:Gm(e.installAll)},affinity:{apps:Wm(e.apps),tasks:Wm(e.tasks),role:Wm(e.role),purpose:Wm(e.purpose)},priority:n}})}const qm={apps:3,tasks:2,role:1,purpose:1};function Jm(e,t){return e.map(e=>{let n=0,r=[],i=(e.affinity.apps??[]).filter(e=>t.apps.includes(e));i.length&&(n+=i.length*qm.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*qm.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=qm.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=qm.purpose,r.push(`purpose(${t.purpose})`)),n*=e.priority??1,{entry:e,score:n,matchReasons:r}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score)}function Ym(e){let t=`upskill ${e.repo}`;return e.path&&(t+=` --path ${e.path}`),e.installAll?t+=` --all`:e.skill&&(t+=` --skill ${e.skill}`),t}async function Xm(e){let t=new Set;try{let n=await e.readDir(Ci);for(let e of n)e.type===`directory`&&t.add(e.name)}catch{}let n=[`.agents`,`.claude`];try{let r=await e.readDir(`/`);for(let i of r)if(i.type===`directory`)for(let r of n)try{let n=`/${i.name}/${r}/skills`,a=await e.readDir(n);for(let e of a)e.type===`directory`&&t.add(e.name)}catch{}}catch{}return t}function Zm(e){return{purpose:e.purpose??``,role:e.role??``,tasks:Array.isArray(e.tasks)?e.tasks:[],apps:Array.isArray(e.apps)?e.apps:[],name:e.name??``,company:typeof e.company==`string`?e.company:void 0}}function Qm(e){return typeof e!=`string`||!e?null:te(e)||null}function $m(e,t){if(t.length===0)return e;let n=new Set(t.map(e=>e.name));return[...e.filter(e=>!n.has(e.name)),...t]}async function eh(e,t){try{let n=Qm(t);if(!n)return[];let r=await e(`${Ti}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?Km(be(r.body).data):[]}catch{return[]}}async function th(e){let t;try{t=await e(Ei,{headers:{Accept:`application/json`}})}catch(e){throw Error(Fi(e,Ei))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return Km(be(t.body).data)}function nh(e,t,n){let r=e.entry.source;if(r.skill){let e=n.get(r.skill);return e?{skillPath:e,skillName:r.skill}:r.path?{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:r.skill}:{error:`skill "${r.skill}" not found in ${t}`}}if(r.path)return{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:e.entry.name};let i=n.get(e.entry.name);return i?{skillPath:i,skillName:e.entry.name}:{error:`skill "${e.entry.name}" not found in ${t} and no explicit path provided`}}async function rh(e,t,n,r,i,a,o,s,c){let l=e.entry.source,u=l.path.replace(/^\/|\/$/g,``),d=o<s?` (~${Math.round((s-o)*(Date.now()-c)/o/1e3)}s remaining)`:``,f=[];for(let[e,t]of r)(t===u||t.startsWith(`${u}/`))&&f.push({name:e,path:t});if(f.length===0){let n=`no skills found under "${l.path}" in ${t}`;return{results:[{ok:!1,name:e.entry.name,error:n}],line:`[${o}/${s}] Failed "${e.entry.name}" bundle from ${t}: ${n}${d}\n`}}let p=Date.now(),m=0,h=0,g=[];for(let e of f){if(i.has(e.name))continue;let t=await Ki(e.path,e.name,n,a,!1);t.ok?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.error}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${o}/${s}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${o}/${s}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${o}/${s}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function ih(e,t,n,r,i,a,o,s,c,l){let u=e.entry.source,d=s<c?` (~${Math.round((c-s)*(Date.now()-l)/s/1e3)}s remaining)`:``,f=await qi(n,r,i,u.path);if(f.error)return{results:[{ok:!1,name:e.entry.name,error:f.error}],line:`[${s}/${c}] Failed "${e.entry.name}" bundle from ${t}: ${f.error}${d}\n`};let p=Date.now(),m=0,h=0,g=[];for(let e of f.skills){if(a.has(e.name))continue;let t=await Gi(n,r,e.path,e.name,o,i,!1);t.exitCode===0?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.stderr.trim()}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${s}/${c}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${s}/${c}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${s}/${c}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function ah(e,t,n,r,i,a,o,s){let c=new Map;for(let e of Object.keys(n))if(e.endsWith(`/SKILL.md`)){let t=e.replace(/\/SKILL\.md$/,``);c.set(t.split(`/`).pop()||t,t)}let l=[],u=``;for(let d of t){let t=d.entry.source;if(t.installAll&&t.path){r.count++;let t=await rh(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=nh(d,e,c);if(`error`in f){l.push({ok:!1,name:d.entry.name,error:f.error}),r.count++;let t=r.count<i?` (~${Math.round((i-r.count)*(Date.now()-a)/r.count/1e3)}s remaining)`:``;u+=`[${r.count}/${i}] Failed "${d.entry.name}" from ${e}: ${f.error}${t}\n`;continue}let{skillPath:p,skillName:m}=f,h=Date.now(),g=await Ki(p,m,n,s,!1);r.count++;let _=((Date.now()-h)/1e3).toFixed(1),v=(Date.now()-a)/r.count,ee=Math.round((i-r.count)*v/1e3),te=r.count<i?` (~${ee}s remaining)`:``;g.ok?(l.push({ok:!0,name:m}),u+=`[${r.count}/${i}] Installed "${m}" from ${e} (${_}s)${te}\n`):(l.push({ok:!1,name:m,error:g.error}),u+=`[${r.count}/${i}] Failed "${m}" from ${e}: ${g.error}${te}\n`)}return{errors:[],results:l,output:u}}async function oh(e,t,n,r,i,a,o,s,c,l){let u=await Ii(c),d=[],f=``;for(let c of t){let t=c.entry.source;i.count++;let p=i.count<a?` (~${Math.round((a-i.count)*(Date.now()-o)/i.count/1e3)}s remaining)`:``;if(t.installAll&&t.path){let t=await ih(c,e,n,r,u,s,l,i.count,a,o);d.push(...t.results),f+=t.line;continue}let m=t.path?t.path.replace(/^\/|\/$/g,``):c.entry.name,h=t.skill||c.entry.name,g=await Gi(n,r,m,h,l,u,!1);g.exitCode===0?(f+=`[${i.count}/${a}] Installed "${h}" from ${e}${p}\n`,d.push({ok:!0,name:h})):(f+=`[${i.count}/${a}] Failed "${h}" from ${e}: ${g.stderr.trim()}${p}\n`,d.push({ok:!1,name:h,error:g.stderr.trim()}))}return{errors:[],results:d,output:f}}function sh(e,t,n){let r=``;for(let i of e){if(i.status===`rejected`){t.push(`upskill: unexpected error: ${i.reason}`);continue}r+=i.value.output;for(let e of i.value.errors)t.push(e);for(let e of i.value.results)e.ok?n.push(e.name):e.error&&t.push(`upskill: ${e.error}`)}return r}async function ch(e,t,n){let r=Date.now(),i=(e,t=[])=>({installedNames:[],errors:t,skipped:e,log:``,elapsedSeconds:(Date.now()-r)/1e3}),a=null;if(n)a=Zm(n);else try{let t=await e.readDir(`/home`);for(let n of t)try{let t=await e.readTextFile(`/home/${n.name}/.welcome.json`);a=Zm(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([th(t),eh(t,a.company),Xm(e)]);o=$m(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${Ei}: ${e instanceof Error?e.message:String(e)}`])}let c=Jm(o,a).filter(e=>!s.has(e.entry.name));if(c.length===0)return i(`all-installed`);let l=new Map;for(let e of c){let t=e.entry.source.repo,n=l.get(t);n?n.push(e):l.set(t,[e])}let u=c.length,d={count:0},f=[],p=[],m=``;m=sh(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await Ni(a,o,t);return c.status===`error`?oh(n,i,a,o,d,u,r,s,t,e):ah(n,i,Oi(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Ui(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function lh(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let uh,dh;async function fh(e){if(uh)return uh;if(dh!==void 0)return dh;dh=(async()=>{let t;try{t=await e(Di,{headers:{Accept:`application/json`}})}catch(e){throw Error(Fi(e,Di))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=be(t.body),r=Array.isArray(n)?n:n.skills??[];return uh=r,r})();try{return await dh}catch(e){throw dh=void 0,e}}async function ph(e,t){let n=await fh(t),r=e.trim().toLowerCase();return r?n.filter(e=>[e.title??``,e.name??``,e.description??``,e.hostname??``,...e.tags??[]].join(` `).toLowerCase().includes(r)).map(e=>({name:e.slug,displayName:e.title||e.name||e.task||e.slug,summary:e.description||``,source:`browseSh`,qualityScore:null,installHint:`upskill browse:${e.hostname}/${e.task}`,sourceRepo:e.hostname})):[]}const mh=/^[A-Za-z0-9._-]+$/;function hh(e){return!e||e===`.`||e===`..`?!1:mh.test(e)}function gh(e){let t;if(e.startsWith(`browse:`))t=e.slice(7);else{let n=e.match(/^https:\/\/browse\.sh\/skills\/([^/?#]+)\/([^/?#]+?)\/?$/);n&&(t=`${n[1]}/${n[2]}`)}if(!t)return null;let n=t.indexOf(`/`);if(n<0)return null;let r=t.slice(0,n),i=t.slice(n+1);if(!r||!i||i.includes(`/`)||!hh(r)||!hh(i))return null;let a=lh(r);return hh(a)?{hostname:a,task:i}:null}function _h(e,t){let n=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(n)for(let e of n[1].split(/\r?\n/)){let n=e.match(/^([A-Za-z_][A-Za-z0-9_-]*)\s*:\s*(.*)$/);if(!n||n[1]!==t)continue;let r=n[2].trim();return(r.startsWith(`"`)&&r.endsWith(`"`)||r.startsWith(`'`)&&r.endsWith(`'`))&&(r=r.slice(1,-1)),r||void 0}}function vh(e,t){let n=e.updated?` · updated ${e.updated}`:``;return[`> [!NOTE] **Imported from browse.sh** — original slug: \`${t}\``,`>`,"> **SLICC adaptation:** use `playwright-cli` — you are running inside the user's real browser session, so the bot-detection workarounds the upstream skill assumes are usually unnecessary.",`>`,`> Source: <https://browse.sh/skills/${t}>${n}`].join(`
|
|
180
|
+
`)}function yh(e){return e.replace(/(?:^|\n)> \[!NOTE\] \*\*Imported from browse\.sh\*\*[\s\S]*?(?:\n\n|$)/,`
|
|
181
|
+
`)}function bh(e,t){let n=e.match(/^(---\r?\n[\s\S]*?\r?\n---)(\r?\n|$)/);return n?`${n[1]}${n[2]||`
|
|
182
|
+
`}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function xh(e,t,n){let r=`${e}/${t}`,i=`${Di}/${e}/${t}`,a;try{let e=await n(i,{headers:{Accept:`application/json`}});if(e.status===404)return{ok:!1,error:`browse.sh skill "${r}" not found`};if(e.status!==200)return{ok:!1,error:`browse.sh returned HTTP ${e.status} for "${r}"`};a=be(e.body)}catch(e){return{ok:!1,error:`failed to fetch browse.sh skill "${r}": ${Fi(e,i)}`}}let o;if(a.skillMdUrl)try{let e=await n(a.skillMdUrl,{headers:{Accept:`text/plain`}});e.status===200&&(o=xe(e.body))}catch{}if(!o&&a.skillMd&&(o=a.skillMd),!o)return{ok:!1,error:`browse.sh skill "${r}" has no SKILL.md content`};let s=_h(o,`name`),c=t.replace(/-[A-Za-z0-9]{4,8}$/,``),l=s||c||t;if(!hh(l)||l.length>64)return{ok:!1,error:`refusing to install browse.sh skill with unsafe name "${l}"`};if(!hh(e))return{ok:!1,error:`refusing to install browse.sh skill with unsafe hostname "${e}"`};let u=vh(a,r);return{ok:!0,dirName:`browse-${e}-${l}`,slug:r,content:bh(o,u)}}async function Sh(e,t,n,r,i=!1){let a=await xh(e,t,r);if(!a.ok)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let{dirName:o,slug:s,content:c}=a,l=`${Ci}/${o}`;try{if(await n.stat(l),!i)return{stdout:``,stderr:`upskill: skill "${o}" already exists (use --force to overwrite)\n`,exitCode:1};await Pi(n,l,await Ji(n,o))}catch{}return await n.mkdir(l,{recursive:!0}),await n.writeFile(`${l}/SKILL.md`,c),await zi(n,o,{kind:`browse.sh`,source:s,skill:o,files:[`SKILL.md`]}),await Ui(),{stdout:`Installed skill "${o}" from browse.sh (${s})\n`,stderr:``,exitCode:0}}function Ch(){return"Discovery roots: /workspace/skills plus accessible **/.agents/skills/*, **/.claude/skills/*, **/.claude-plugin/marketplace.json skill collections anywhere in the VFS, and installed agent plugins (`plugin list`).\n"}function wh(e){switch(e){case`native`:return`native`;case`agents`:return`.agents`;case`claude`:return`.claude`;case`marketplace`:return`marketplace`;case`plugin`:return`plugin`}}function Th(e,t){let n=Math.max(4,...e.map(e=>e.name.length)),r=Math.max(20,97-n-2-11-1),i=`NAME`.padEnd(n),a=`─`.repeat(2+n+2+11+1+r),o=`${t}:\n\n`;o+=` ${i} SOURCE DESCRIPTION\n`,o+=`${a}\n`;for(let t of e){let e=t.description||``,i=e.length>r?`${e.slice(0,r-1)}…`:e;o+=` ${t.name.padEnd(n)} ${wh(t.source).padEnd(11)} ${i}\n`}return o+=`\n${Ch()}`,o}function Eh(e){let t=`Skill: ${e.name}\n`;if(t+=`Description: ${e.description||`(none)`}\n`,t+=`Source: ${wh(e.source)}\n`,t+=`Source root: ${e.sourceRoot}\n`,e.skillFilePath&&(t+=`Instructions: ${e.skillFilePath}\n`),e.shadowedPaths?.length){t+=`Shadowed paths:
|
|
183
|
+
`;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function Dh(){return{stdout:`usage: upskill <command> [options]
|
|
184
184
|
|
|
185
185
|
Install skills from GitHub repositories, the Tessl registry, or browse.sh.
|
|
186
186
|
|
|
@@ -196,7 +196,7 @@ Commands:
|
|
|
196
196
|
tessl:<name> Install skill from Tessl registry
|
|
197
197
|
browse:<hostname>/<task> Install site-specific skill from browse.sh
|
|
198
198
|
|
|
199
|
-
${
|
|
199
|
+
${Ch()}
|
|
200
200
|
GitHub Installation:
|
|
201
201
|
upskill owner/repo List available skills in repo
|
|
202
202
|
upskill owner/repo --skill name Install specific skill
|
|
@@ -268,14 +268,14 @@ Examples:
|
|
|
268
268
|
upskill browse:weather.gov/get-forecast-1uezib
|
|
269
269
|
upskill list --outdated
|
|
270
270
|
upskill update --dry-run
|
|
271
|
-
`,stderr:``,exitCode:0}}async function
|
|
271
|
+
`,stderr:``,exitCode:0}}async function Oh(e,t,n,r){let i=e.slice(1).find(e=>e.startsWith(`-`));if(i)return{stdout:``,stderr:`skill: unknown option "${i}" for list\n`,exitCode:1};let a=await n.discoverSkills(t);if(a.length===0)return{stdout:`No discoverable skills found.\n\n${Ch()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0};let{collisions:o}=await lr(t,or(r));return{...ur(`skill`,Th(a,`Discoverable skills`),o,{builtinNames:new Set(rt())}),exitCode:0}}function kh(e){return S(`skill`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return{stdout:`usage: skill <command> [options]
|
|
272
272
|
|
|
273
273
|
Commands:
|
|
274
274
|
list List discoverable skills
|
|
275
275
|
info <name> Show details about a skill
|
|
276
276
|
read <name> Read the SKILL.md instructions
|
|
277
277
|
|
|
278
|
-
${
|
|
278
|
+
${Ch()}
|
|
279
279
|
For installing skills from registries or GitHub, use 'upskill':
|
|
280
280
|
upskill search "query" Search registries (Tessl + browse.sh)
|
|
281
281
|
upskill owner/repo --list List skills in GitHub repo
|
|
@@ -287,64 +287,64 @@ 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-
|
|
291
|
-
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:
|
|
290
|
+
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-orc-rbxr.js`).then(e=>e.r);try{switch(r){case`list`:return Oh(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
|
+
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Eh(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
|
-
`,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
|
|
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 Ah=[{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 jh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=Ah.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 Mh(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function Nh(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 Ph(e,t,n,r){let i=await Nh(e,t);return Ai(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?Mh(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function Fh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await Ph(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 Ih(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 Lh(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await Rh(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 Fh(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 Uh(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 Lh(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 Rh(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||zh(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:Hh(i,a),path:a}}try{return{files:Vh(Bh(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 zh(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 Bh(e){return new Map([...e].filter(([e])=>ki(e)))}function Vh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function Hh(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 Vh(r)}async function Uh(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 Wh(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 xh(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${Ci}/${n}/SKILL.md`,u=await Nh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&yh(new TextDecoder().decode(u))===yh(c.content);if(Mh(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 Gh(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 Kh(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 qh(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?Kh(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 Jh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
|
|
294
294
|
`:`upskill: no install provenance for "${e.name}" — re-run with --from <owner>/<repo> (optionally --path <dir>) to record its source, or reinstall it once
|
|
295
|
-
`}function
|
|
295
|
+
`}function Yh(e,t){return`${e} ${t}${e===1?``:`s`}`}function Xh(e){return`\nSkipped ${Yh(e.length,`skill`)} with no install provenance — not checked:\n ${e.join(`, `)}\n Runtime-bundled skills have no record by design; \`upgrade apply\` keeps those current.
|
|
296
296
|
For the rest, record a source once with \`upskill update <skill> --from <owner>/<repo> --dry-run\`,
|
|
297
297
|
after which a bare \`upskill update\` sweeps them too.
|
|
298
|
-
`}function
|
|
298
|
+
`}function Zh(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
|
|
299
299
|
`:`Skill update:
|
|
300
|
-
`;for(let n of e)a+=
|
|
301
|
-
`)}\n`}async function
|
|
300
|
+
`;for(let n of e)a+=Gh(n,t);if(i.length>0&&(a+=Xh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${Yh(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 Qh(e,t,n){let{targets:r,missing:i,skipped:a}=await qh(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 Wh(e,t,i.name,i.provenance,n.dryRun):await Ih(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function $h(e,t,n){let r=jh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await Qh(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`:Zh([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(Jh).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(Jh).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:Zh(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function eg(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 tg(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 ng(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}${tg(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 rg(e,t,n){let r=await(await import(`./kernel-worker-orc-rbxr.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${Ch()}`,stderr:``,exitCode:0}:{...ur(`upskill`,Th(r,`Discoverable local skills`),i,{builtinNames:new Set(rt())}),exitCode:0}}async function ig(e,t,n){let{results:r,skipped:i}=await Qh(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:ng(r,i),stderr:c,exitCode:+!s}}async function ag(e,t,n,r){let i=eg(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?ig(t,n,i.json):rg(t,i.json,r)}async function og(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 sg(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 cg=[{label:`Tessl`,host:new URL(wi).host,fetch:og},{label:`browse.sh`,host:new URL(Di).host,fetch:ph}];function lg(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 ug(e,t,n=1){let r=await Promise.allSettled(cg.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=lg(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=cg[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>
|
|
305
|
-
`,{stdout:p,stderr:``,exitCode:0}}function
|
|
305
|
+
`,{stdout:p,stderr:``,exitCode:0}}function dg(e,t,n){let r=`upskill ${e}`;return t&&(r+=` --branch ${t}`),n&&(r+=` --path ${n}`),r}async function fg(e,t){let n=[],r;try{r=await t(e,{method:`GET`})}catch(t){return n.push({rel:c,href:e,error:t instanceof Error?t.message:String(t)}),{links:[],failures:n}}let i=[];for(let[e,t]of Object.entries(r.headers||{}))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&i.push(t);if(i.length===0)return{links:[],failures:n};let o=s(i,e),l=[];for(let e of o){if(!e.rel.includes(c))continue;let t=a([e]);t?.verb===`upskill`&&l.push({target:t.target,branch:t.branch,path:t.path,instruction:t.instruction,installHint:dg(t.target,t.branch,t.path)})}return{links:l,failures:n}}function pg(e,t,n){if(!e||t.length===0)return[];let r=[];for(let i of t){if(!i.hostname||lh(i.hostname)!==e)continue;let t=i.name||i.task.replace(/-[A-Za-z0-9]{4,8}$/,``)||i.task,a=`browse-${i.hostname}-${t}`;r.push({slug:i.slug,hostname:i.hostname,task:i.task,title:i.title||i.name||i.task,description:i.description,installed:n.has(a),installHint:`upskill browse:${i.hostname}/${i.task}`})}return r}function mg(e){let t=e.active?` [active]`:``,n=`${e.title||`(untitled)`}${t}\n`;if(n+=` ${e.url}\n`,e.origin.length>0){n+=` Origin-advertised:
|
|
306
306
|
`;for(let t of e.origin)n+=` ${t.installHint}`,t.instruction&&(n+=` # ${t.instruction}`),n+=`
|
|
307
307
|
`}if(e.catalog.length>0){n+=` Browse.sh catalog:
|
|
308
308
|
`;for(let t of e.catalog){let e=t.installed?`✓`:` `;n+=` ${e} ${t.title.padEnd(40)} ${t.installHint}\n`}}e.origin.length===0&&e.catalog.length===0&&!e.failures.length&&(n+=` No skill suggestions for this tab.
|
|
309
309
|
`);for(let t of e.failures)n+=` (discovery failed: ${t.error})\n`;return n+=`
|
|
310
|
-
`,n}async function
|
|
310
|
+
`,n}async function hg(e,t,n,r){if(!n)return{stdout:``,stderr:`upskill: browser APIs unavailable in this environment
|
|
311
311
|
`,exitCode:1};let i;try{i=await n.listPages()}catch{try{i=await n.listAllTargets()}catch(e){return{stdout:``,stderr:`upskill: failed to list browser tabs: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}if(i.length===0)return r?{stdout:JSON.stringify({tabs:[]},null,2)+`
|
|
312
312
|
`,stderr:``,exitCode:0}:{stdout:`No open browser tabs.
|
|
313
|
-
`,stderr:``,exitCode:0};let a=[],o=``;try{a=await
|
|
314
|
-
`,stderr:o,exitCode:0};let l=``;for(let e of c)l+=
|
|
313
|
+
`,stderr:``,exitCode:0};let a=[],o=``;try{a=await fh(t)}catch(e){o=`upskill: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}\n`}let s=await Xm(e),c=[];for(let e of i){let n=``;try{n=new URL(e.url).hostname}catch{}let r=n?lh(n):``,i=[],o=[];if(n&&/^https?:/i.test(e.url)){let n=await fg(e.url,t);i=n.links,o=n.failures}let l=pg(r,a,s);c.push({targetId:e.targetId,title:e.title,url:e.url,hostname:r,active:e.active,origin:i,catalog:l,failures:o})}if(r)return{stdout:JSON.stringify({tabs:c},null,2)+`
|
|
314
|
+
`,stderr:o,exitCode:0};let l=``;for(let e of c)l+=mg(e);return{stdout:l,stderr:o,exitCode:0}}async function gg(e,t,n){if(n){let n=await ch(e,t);return n.skipped===`no-profile`?{stdout:``,stderr:`upskill: no user profile found. Complete the welcome onboarding first, or create /home/<name>/.welcome.json manually.
|
|
315
315
|
`,exitCode:1}:n.skipped===`catalog-fetch`?{stdout:``,stderr:n.errors.map(e=>`${e}\n`).join(``),exitCode:1}:n.skipped===`all-installed`?{stdout:`No new skill recommendations — all matching skills are already installed.
|
|
316
316
|
`,stderr:``,exitCode:0}:{stdout:n.log,stderr:n.errors.map(e=>`${e}\n`).join(``),exitCode:+(n.errors.length>0)}}let r=null;try{let t=await e.readDir(`/home`);for(let n of t)try{let t=await e.readTextFile(`/home/${n.name}/.welcome.json`);r=JSON.parse(t);break}catch{}}catch{}if(!r)return{stdout:``,stderr:`upskill: no user profile found. Complete the welcome onboarding first, or create /home/<name>/.welcome.json manually.
|
|
317
|
-
`,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(Ei,{headers:{Accept:`application/json`}});if(e.status!==200)throw Error(`HTTP ${e.status}`);return
|
|
317
|
+
`,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(Ei,{headers:{Accept:`application/json`}});if(e.status!==200)throw Error(`HTTP ${e.status}`);return Km(be(e.body).data)})(),eh(t,r.company),Xm(e)]);i=$m(n,o),a=s}catch(e){return{stdout:``,stderr:`upskill: failed to fetch skill catalog from ${Ei}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let o=Jm(i,r).filter(e=>!a.has(e.entry.name));if(o.length===0)return{stdout:`No new skill recommendations — all matching skills are already installed.
|
|
318
318
|
`,stderr:``,exitCode:0};let s=`Recommended skills for you:
|
|
319
319
|
|
|
320
|
-
`,c=0;for(let e of o){c++;let t=
|
|
321
|
-
`,{stdout:s,stderr:``,exitCode:0}}function
|
|
320
|
+
`,c=0;for(let e of o){c++;let t=Ym(e.entry.source);s+=` ${c}. ${e.entry.displayName.padEnd(35)} score: ${Math.round(e.score)}\n`,s+=` ${e.entry.description}\n`,s+=` Match: ${e.matchReasons.join(`, `)}\n`,s+=` Install: ${t}\n\n`}return s+=`To install all recommended: upskill recommendations --install
|
|
321
|
+
`,{stdout:s,stderr:``,exitCode:0}}function _g(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
|
-
`,exitCode:1}}function
|
|
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=
|
|
325
|
-
`,stderr:``,exitCode:0}}async function
|
|
326
|
-
`,exitCode:1};let a=await
|
|
323
|
+
`,exitCode:1}}function vg(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=_g(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 yg(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-orc-rbxr.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:Eh(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
|
+
`,stderr:``,exitCode:0}}async function bg(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 xg(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 Sg(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 Cg(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 wg(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:Cg(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:Cg(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 bg(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 xg(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await Sg(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 Tg(e,t,n,r,i){switch(e[0]){case`tabs`:return hg(t,n,r,e.includes(`--json`));case`recommendations`:return gg(t,n,e.includes(`--install`));case`update`:case`upgrade`:return $h(e.slice(1),t,n);case`list`:return ag(e.slice(1),t,n,i);case`info`:case`read`:return yg(e[0],e[1],t);case`search`:return Dg(e,n);default:return null}}function Eg(e,t,n){return S(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Dh();let a=await Tg(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=vg(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Dh();if(o.sourceRef.startsWith(`tessl:`))return Og(o.sourceRef,o.force,e,t);let s=gh(o.sourceRef);if(s)return Sh(s.hostname,s.task,e,t,o.force);let c=Wi(o.sourceRef);return c?wg(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 Dg(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?ug(a,t,i):Dh()}async function Og(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
|
|
326
|
+
`,exitCode:1};let a=await sg(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 kg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
|
|
327
327
|
|
|
328
328
|
Plays an audio file using the Web Audio API.
|
|
329
329
|
-v volume Volume level (0 to 1, default 1)
|
|
330
330
|
-r rate Playback rate (0.25 to 4, default 1)
|
|
331
|
-
`,stderr:``,exitCode:0}}function
|
|
331
|
+
`,stderr:``,exitCode:0}}function Ag(e){return{stdout:``,stderr:`afplay: ${e}\n`,exitCode:1}}function jg(e){return e instanceof Error?e.message:String(e)}const Mg={"-v":`a volume value`,"-r":`a rate value`};function Ng(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<0||t>1?`volume must be between 0 and 1`:null}function Pg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<.25||t>4?`rate must be between 0.25 and 4`:null}function Fg(e,t,n){switch(t){case`-v`:return Ng(n)||(e.volume=Number.parseFloat(n),null);case`-r`:return Pg(n)||(e.rate=Number.parseFloat(n),null);default:return`unknown option: ${t}`}}function Ig(e){let t={volume:1,rate:1,filePath:null};for(let n=0;n<e.length;n++){let r=e[n];if(Object.hasOwn(Mg,r)){let i=n+1<e.length&&!e[n+1].startsWith(`-`)?e[++n]:null;if(i==null)return Ag(`${r} requires ${Mg[r]}`);let a=Fg(t,r,i);if(a)return Ag(a);continue}if(r.startsWith(`-`))return Ag(`unknown option: ${r}`);if(t.filePath!==null)return Ag(`only one file can be specified`);t.filePath=r}return t}let Lg=null;function Rg(){return(!Lg||Lg.state===`closed`)&&(Lg=new AudioContext),Lg}function zg(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function Bg(e,t){let n=t.fs.resolvePath(t.cwd,e);try{return{bytes:new Uint8Array(await t.fs.readFileBuffer(n)),fullPath:n}}catch{return Ag(`cannot open ${e}: No such file`)}}function Vg(e,t){return fr(e).startsWith(`audio/`)?null:Ag(`${t} is not an audio file`)}async function Hg(e,t,n,r,i){try{let n=fr(t);return await i.call(`play-audio`,{bytes:zg(e),mimeType:n,volume:r},{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return Ag(`failed to play ${n}: ${jg(e)}`)}}async function Ug(e,t,n,r){try{let t=Rg();t.state===`suspended`&&await t.resume();let i=await t.decodeAudioData(zg(e)),a=t.createBufferSource();a.buffer=i,a.playbackRate.value=r;let o=t.createGain();return o.gain.value=n,a.connect(o),o.connect(t.destination),new Promise(e=>{a.onended=()=>{e({stdout:``,stderr:``,exitCode:0})},a.start()})}catch(e){return Ag(`failed to play ${t}: ${jg(e)}`)}}async function Wg(e,t,n,r){let i=de()&&typeof AudioContext<`u`,a=y();if(!i&&!a)return Ag(`Web Audio API unavailable in this environment`);let o=await Bg(e,r);return`exitCode`in o?o:Vg(o.fullPath,e)||(i?Ug(o.bytes,e,t,n):Hg(o.bytes,o.fullPath,e,t,a))}function Gg(){return S(`afplay`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return kg();let n=Ig(e);return`exitCode`in n?n:n.filePath?Wg(n.filePath,n.volume,n.rate,t):kg()})}function Kg(){return S(`chime`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?{stdout:`usage: chime
|
|
332
332
|
|
|
333
333
|
Plays a notification chime sound.
|
|
334
334
|
Alias for: afplay /shared/sounds/chime.mp3
|
|
335
|
-
`,stderr:``,exitCode:0}:
|
|
336
|
-
`&&e[n]!==`\r`;)n++;return{text:` `.repeat(n-t),end:n-1}}function
|
|
337
|
-
`||e[r]===`\r`?e[r]:` `,r++;return r<e.length&&(n+=` `,r++),{text:n,end:r}}function
|
|
338
|
-
`,r=!1):s&&
|
|
335
|
+
`,stderr:``,exitCode:0}:Wg(`/shared/sounds/chime.mp3`,1,1,t))}function qg(e={}){return S(`agent`,async(t,n)=>{let{executeAgentCommand:r}=await import(`./agent-command-impl-BQZK9ujN.js`);return r(t,n,e)})}const Jg=[`bg`,`caller`,`disown`,`enable`,`fc`,`fg`,`jobs`,`logout`,`suspend`,`times`,`trap`,`ulimit`];function Yg(){return Jg.map(e=>S(e,async(t,n)=>{let{runBashBuiltin:r}=await import(`./run-B39tlo9Y.js`);return r(e,t,n)}))}function Xg(e,t){e.escaped?e.escaped=!1:t===`\\`?e.escaped=!0:t===`"`&&(e.inString=!1)}function Zg(e,t){let n=t+2;for(;n<e.length&&e[n]!==`
|
|
336
|
+
`&&e[n]!==`\r`;)n++;return{text:` `.repeat(n-t),end:n-1}}function Qg(e,t){let n=` `,r=t+2;for(;r<e.length&&(e[r]!==`*`||e[r+1]!==`/`);)n+=e[r]===`
|
|
337
|
+
`||e[r]===`\r`?e[r]:` `,r++;return r<e.length&&(n+=` `,r++),{text:n,end:r}}function $g(e){let t=``,n={inString:!1,escaped:!1};for(let r=0;r<e.length;r++){let i=e[r],a=e[r+1];if(n.inString){t+=i,Xg(n,i);continue}if(i===`"`){n.inString=!0,t+=i;continue}if(i===`/`&&a===`/`){let n=Zg(e,r);t+=n.text,r=n.end;continue}if(i===`/`&&a===`*`){let n=Qg(e,r);t+=n.text,r=n.end;continue}t+=i}return t}function e_(e){let t=``,n=!1,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(n){t+=a,r?r=!1:a===`\\`?r=!0:a===`"`&&(n=!1);continue}if(a===`"`){n=!0,t+=a;continue}if(a===`,`){let t=i+1;for(;t<e.length&&/\s/.test(e[t]);)t++;if(e[t]===`}`||e[t]===`]`)continue}t+=a}return t}function t_(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function n_(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=JSON.parse(e_($g(t)));if(!t_(n))throw Error(`configuration must contain a JSON object`);return n}function r_(e){if(typeof e==`string`)return e;if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=e.path;return typeof t==`string`?t:null}function i_(e){let t=e.plugins;if(!Array.isArray(t))return null;for(let e of t){let t=r_(e);if(t!==null)return t}return null}async function a_(e,t){let n=b(t);for(;;){if(!n.split(`/`).includes(`node_modules`))for(let t of[`biome.json`,`biome.jsonc`]){let r=x(n,t);if(await e.exists(r))return r}if(n===`/`)return null;n=Fe(n).dir}}async function o_(e,t,n){let r;try{r=await e.readFile(t)}catch(e){return{ok:!1,error:`biome: failed to read configuration ${t}: ${e instanceof Error?e.message:String(e)}`,exitCode:n}}try{let e=n_(r),i=i_(e);return i===null?{ok:!0,resolved:{path:t,configuration:e}}:{ok:!1,error:`biome: unsupported configuration ${t}: path-based plugin ${JSON.stringify(i)} cannot be loaded by @biomejs/js-api@6.0.0`,exitCode:n}}catch(e){return{ok:!1,error:`biome: failed to parse configuration ${t}: ${e instanceof Error?e.message:String(e)}`,exitCode:n}}}async function s_(e,t,n,r){if(r!==null){let n=b(e.resolvePath(t,r));return await e.exists(n)?o_(e,n,2):{ok:!1,error:`biome: configuration file not found: ${n}`,exitCode:2}}let i=await a_(e,n);return i===null?{ok:!0,resolved:null}:o_(e,i,1)}const c_=new Set(`address.article.aside.blockquote.dd.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hr.li.main.nav.ol.p.pre.section.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`)),l_={amp:`&`,apos:`'`,gt:`>`,lt:`<`,nbsp:` `,quot:`"`};function u_(e){let t=e.slice(1,-1);if(!t.startsWith(`#`))return l_[t.toLowerCase()]??e;let n=t[1]?.toLowerCase()===`x`,r=Number.parseInt(t.slice(n?2:1),n?16:10);return!Number.isFinite(r)||r<0||r>1114111||r>=55296&&r<=57343?e:String.fromCodePoint(r)}function d_(e){let t=``,n=0,r=!1;for(let i of e.matchAll(/<!--[\s\S]*?-->|<![^>]*>|<\/?[A-Za-z][^>]*>/g)){let a=e.slice(n,i.index);a&&(t+=a,r=!1);let o=i[0],s=/^<\/?\s*([A-Za-z0-9-]+)/.exec(o)?.[1]?.toLowerCase();s===`br`?(t+=`
|
|
338
|
+
`,r=!1):s&&c_.has(s)&&t.length>0&&!t.endsWith(`
|
|
339
339
|
`)&&(t+=`
|
|
340
|
-
`,r=!0),n=(i.index??0)+o.length}let i=e.slice(n);return i&&(t+=i,r=!1),r&&(t=t.slice(0,-1)),t.replace(/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9A-Fa-f]+));/gi,
|
|
341
|
-
`,
|
|
340
|
+
`,r=!0),n=(i.index??0)+o.length}let i=e.slice(n);return i&&(t+=i,r=!1),r&&(t=t.slice(0,-1)),t.replace(/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9A-Fa-f]+));/gi,u_)}const f_=new Set([`js`,`mjs`,`cjs`,`jsx`,`ts`,`mts`,`cts`,`tsx`,`json`,`jsonc`,`css`,`graphql`,`gql`,`html`,`svelte`,`vue`,`astro`,`jsh`,`bsh`]);function p_(e){let t=e.lastIndexOf(`.`);return t<0?!1:f_.has(e.slice(t+1).toLowerCase())}function m_(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)?`${e.slice(0,-4)}.js`:e}const h_=`async function __slicc() {
|
|
341
|
+
`,g_=new TextEncoder().encode(h_).length;function __(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)}function v_(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(!e||typeof e!=`object`)continue;if(Array.isArray(e)){for(let t of e)n.push(t);continue}let r=e,i=r.span;Array.isArray(i)&&i.length===2&&typeof i[0]==`number`&&typeof i[1]==`number`&&(r.span=[Math.max(0,i[0]-t),Math.max(0,i[1]-t)]),typeof r.sourceCode==`string`&&(r.sourceCode=null);for(let e of Object.keys(r))e!==`span`&&e!==`sourceCode`&&n.push(r[e])}}function y_(e){let t=(e.endsWith(`
|
|
342
342
|
`)?e.slice(0,-1):e).split(`
|
|
343
343
|
`);return t.shift(),t.pop(),t.map(e=>e.startsWith(` `)?e.slice(1):e).join(`
|
|
344
344
|
`)+`
|
|
345
|
-
`}function
|
|
345
|
+
`}function b_(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 x_=new Set([`check`,`lint`,`format`]);function S_(e,t,n){let r=e,i=(Array.isArray(r.message)?r.message.map(e=>e&&typeof e==`object`&&typeof e.content==`string`?e.content:``).join(``):``)||(typeof r.description==`string`?r.description:String(r.description??``)),a=r.location?.span,o=Array.isArray(a)&&typeof a[0]==`number`?a[0]:null;if(o===null)return{severity:typeof r.severity==`string`?r.severity:`unknown`,category:typeof r.category==`string`?r.category:`unknown`,message:i,filePath:t,line:null,column:null};let s=new TextEncoder().encode(n),c=new TextDecoder().decode(s.slice(0,Math.max(0,Math.min(o,s.length)))),l=1;for(let e of c)e===`
|
|
346
346
|
`&&l++;let u=c.lastIndexOf(`
|
|
347
|
-
`),d=Array.from(c.slice(u+1)).length+1;return{severity:typeof r.severity==`string`?r.severity:`unknown`,category:typeof r.category==`string`?r.category:`unknown`,message:i,filePath:t,line:l,column:d}}const
|
|
347
|
+
`),d=Array.from(c.slice(u+1)).length+1;return{severity:typeof r.severity==`string`?r.severity:`unknown`,category:typeof r.category==`string`?r.category:`unknown`,message:i,filePath:t,line:l,column:d}}const C_=`2.5.14`,w_=`6.0.0`,T_=di,E_=`@biomejs/wasm-web@${C_} @biomejs/js-api@${w_} esbuild-wasm@${T_}`,D_={"@biomejs/wasm-web":`@biomejs/wasm-web@${C_}`,"@biomejs/js-api":`@biomejs/js-api@${w_}`,"esbuild-wasm":`esbuild-wasm@${T_}`},O_=`run: ${N} ${E_} (no network fallback)`,k_=`biome - thin wrapper over the ipk-loaded @biomejs/wasm-web
|
|
348
348
|
|
|
349
349
|
Usage:
|
|
350
350
|
biome <subcommand> [options] [files...]
|
|
@@ -386,20 +386,20 @@ Exit codes:
|
|
|
386
386
|
|
|
387
387
|
Install:
|
|
388
388
|
Inert until the backing packages are installed in node_modules:
|
|
389
|
-
${N} ${
|
|
389
|
+
${N} ${E_}
|
|
390
390
|
All three packages must be present in the VFS \`node_modules\` for
|
|
391
391
|
lint/format to run (loading the wasm-web ESM glue also needs the
|
|
392
392
|
esbuild-wasm transpiler). There is no bundled binary, no CDN
|
|
393
393
|
fallback; a missing package exits non-zero with a clear \`ipk add\` hint.
|
|
394
|
-
`;function
|
|
394
|
+
`;function A_(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`biome: ${n} requires a value`);return r}function j_(e){if(!e)throw Error(`biome: --reporter requires a value`);if(e!==`plain`&&e!==`json`)throw Error(`biome: unknown reporter: ${e}`);return e}function M_(e){return e.some((t,n)=>t===`--json`||t===`--reporter=json`||t===`--reporter`&&e[n+1]===`json`)}function N_(e,t,n){let r=t[n];switch(r){case`-h`:case`--help`:return e.showHelp=!0,n;case`-v`:case`--version`:return e.showVersion=!0,n;case`--write`:return e.write=!0,n;case`--check`:return e.check=!0,n;case`--json`:return e.reporter=`json`,n;case`--stdin-file-path`:return e.stdinFilePath=A_(t,n,r),n+1;case`--config-path`:return e.configPath=A_(t,n,r),n+1;case`--reporter`:return e.reporter=j_(A_(t,n,r)),n+1}return r.startsWith(`--stdin-file-path=`)?(e.stdinFilePath=P_(r,`--stdin-file-path`),n):r.startsWith(`--config-path=`)?(e.configPath=P_(r,`--config-path`),n):r.startsWith(`--reporter=`)?(e.reporter=j_(r.slice(11)),n):null}function P_(e,t){let n=e.slice(t.length+1);if(!n)throw Error(`biome: ${t} requires a value`);return n}function F_(e){let t={subcommand:null,paths:[],write:!1,check:!1,stdinFilePath:null,configPath:null,reporter:`plain`,showHelp:!1,showVersion:!1};if(e.length===0)return t.showHelp=!0,t;for(let n=0;n<e.length;n++){let r=e[n],i=N_(t,e,n);if(i!==null){n=i;continue}if(t.subcommand===null&&x_.has(r)){t.subcommand=r;continue}if(r.startsWith(`-`))throw Error(`biome: unknown option: ${r}`);t.paths.push(r)}if(t.write&&t.check)throw Error(`biome: --write and --check cannot be used together`);if(t.check&&t.subcommand!==`format`)throw Error(`biome: --check is only valid with the format subcommand`);return t}async function I_(e,t,n){let r=[],i=[];for(let a of n){let n=e.resolvePath(t,a);if(!await e.exists(n)){i.push(a);continue}(await e.stat?.(n))?.isDirectory?await L_(e,n,r):p_(n)&&r.push(n)}return{files:r,missing:i}}async function L_(e,t,n){let r=await e.readdir?.(t)??[];for(let i of r){if(i===`node_modules`||i.startsWith(`.git`))continue;let r=t===`/`?`/${i}`:`${t}/${i}`;(await e.stat?.(r))?.isDirectory?await L_(e,r,n):p_(r)&&n.push(r)}}async function R_(e){let t;try{t=await dr(`@biomejs/wasm-web/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;try{let n=await e.reader.readFile(t.path),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}async function z_(e){let t;try{t=await dr(`@biomejs/wasm-web/package.json`,e.fromDir,e.reader)}catch{return{ok:!1,missing:`@biomejs/wasm-web`}}if(t.type!==`file`)return{ok:!1,missing:`@biomejs/wasm-web`};try{if((await dr(`@biomejs/js-api/web`,e.fromDir,e.reader)).type!==`file`)return{ok:!1,missing:`@biomejs/js-api`}}catch{return{ok:!1,missing:`@biomejs/js-api`}}try{if((await dr(`esbuild-wasm/package.json`,e.fromDir,e.reader)).type!==`file`)return{ok:!1,missing:`esbuild-wasm`}}catch{return{ok:!1,missing:`esbuild-wasm`}}return{ok:!0,wasmPkgDir:Fe(t.path).dir}}function B_(e,t){let n=m_(b(e));if(t===null)return n;let r=Ie(t),i=Ie(n),a=0;for(;a<r.length&&a<i.length&&r[a]===i[a];)a++;return[...Array.from({length:r.length-a},()=>`..`),...i.slice(a)].join(`/`)}const V_=`
|
|
395
395
|
const fs = require('fs');
|
|
396
|
-
const JSH_WRAP_PREFIX = ${JSON.stringify(
|
|
396
|
+
const JSH_WRAP_PREFIX = ${JSON.stringify(h_)};
|
|
397
397
|
const JSH_WRAP_SUFFIX = ${JSON.stringify(`
|
|
398
398
|
}`)};
|
|
399
|
-
const JSH_WRAP_PREFIX_BYTES = ${
|
|
400
|
-
const shiftBiomeSpans = ${
|
|
401
|
-
const unwrapFormattedJsh = ${
|
|
402
|
-
const biomeDiagnosticToJson = ${
|
|
399
|
+
const JSH_WRAP_PREFIX_BYTES = ${g_};
|
|
400
|
+
const shiftBiomeSpans = ${v_.toString()};
|
|
401
|
+
const unwrapFormattedJsh = ${y_.toString()};
|
|
402
|
+
const biomeDiagnosticToJson = ${S_.toString()};
|
|
403
403
|
function supportsFeature(biome, projectKey, path, feature) {
|
|
404
404
|
const workspace = biome.workspace;
|
|
405
405
|
if (!workspace || typeof workspace.fileFeatures !== 'function') {
|
|
@@ -523,28 +523,28 @@ async function main() {
|
|
|
523
523
|
process.stdout.write(JSON.stringify(results));
|
|
524
524
|
}
|
|
525
525
|
main().catch((err) => { process.stderr.write(String(err && err.message || err) + '\\n'); process.exit(1); });
|
|
526
|
-
`;function
|
|
527
|
-
`,exitCode:1}}try{return{results:JSON.parse(e.stdout),stderr:``,exitCode:0}}catch(t){let n=t instanceof Error?t.message:String(t),r=e.stderr.trim();return{results:[],stderr:r?`biome: failed to parse helper output: ${n} (helper stderr: ${r})\n`:`biome: failed to parse helper output: ${n}\n`,exitCode:1}}}function
|
|
528
|
-
`,exitCode:2};let n=await
|
|
529
|
-
`,exitCode:2},`usage`);let i=await
|
|
526
|
+
`;function H_(e){let t=e.match(/Cannot find module '(@biomejs\/[^']+)'/);if(!t)return null;let n=t[1].split(`/`).slice(0,2).join(`/`);return`biome: ${n} is not installed (run: ${N} ${D_[n]??n}); ${O_}\n`}async function U_(e,t,n,r,i,a,o,s,c){let l={op:t,write:n,check:r,configuration:i,configurationRoot:a,reporter:o,files:s.map(e=>({path:e.path,biomePath:B_(e.path,a),source:e.source,wrap:__(e.path)}))},u=[`node`,`[biome-helper]`,JSON.stringify(l),c];return W_(await ai(V_,u,e,void 0,{filename:`[biome-helper]`}))}function W_(e){if(e.exitCode!==0)return{results:[],stderr:H_(e.stderr)??e.stderr,exitCode:e.exitCode};if(e.stdout.trim()===``){let t=H_(e.stderr)??e.stderr.trim();return{results:[],stderr:t?`biome: helper exited 0 with no output: ${t.replace(/\n$/,``)}\n`:`biome: helper exited 0 with no output (nothing was linted)
|
|
527
|
+
`,exitCode:1}}try{return{results:JSON.parse(e.stdout),stderr:``,exitCode:0}}catch(t){let n=t instanceof Error?t.message:String(t),r=e.stderr.trim();return{results:[],stderr:r?`biome: failed to parse helper output: ${n} (helper stderr: ${r})\n`:`biome: failed to parse helper output: ${n}\n`,exitCode:1}}}function G_(e,t,n,r=``){if(e===`plain`)return t;let i=(t.stderr||t.stdout).trimEnd(),a=i?[{severity:t.exitCode===0?`information`:`error`,category:n,message:i,filePath:r,line:null,column:null}]:[],o={summary:{errors:t.exitCode===0?0:1,warnings:0,filesChecked:0,unformattedFiles:0},diagnostics:a,files:[]};return{stdout:`${JSON.stringify(o)}\n`,stderr:``,exitCode:t.exitCode}}async function K_(e,t){let n=await z_(t);if(!n.ok)return{stdout:``,stderr:`biome: ${n.missing} is not installed (run: ${N} ${D_[n.missing]??n.missing}); ${O_}\n`,exitCode:1};let r=`${n.wasmPkgDir}/biome_wasm_bg.wasm`;return await e.fs.exists(r)?{wasmPath:r}:{stdout:``,stderr:`biome: ${r} not found (reinstall: ${N} ${D_[`@biomejs/wasm-web`]})\n`,exitCode:1}}async function q_(e,t){if(t.paths.length===0&&e.stdin)return{inputs:[{path:t.stdinFilePath??`/stdin.ts`,source:P(e.stdin)}],missingErrText:``};if(t.paths.length===0)return{stdout:``,stderr:`biome: no files or directories specified
|
|
528
|
+
`,exitCode:2};let n=await I_(e.fs,e.cwd,t.paths),r=n.missing.map(e=>`biome: ${e}: no such file or directory\n`).join(``),i=[];for(let t of n.files)i.push({path:t,source:await e.fs.readFile(t)});return i.length===0?{stdout:``,stderr:`${r}biome: no lintable files found\n`,exitCode:+(n.missing.length>0)}:{inputs:i,missingErrText:r}}async function J_(e,t,n,r,i){let a=[],o=[i],s=0,c=0,l=0;for(let i of r.results)t.reporter===`plain`&&i.diagnosticsText&&o.push(d_(i.diagnosticsText)),s+=i.errorCount,c+=i.warningCount,t.write&&i.formatted!==null&&!i.unchanged?(await e.fs.writeFile(i.path,i.formatted),l++):!t.write&&t.subcommand===`format`&&!t.check&&n.length===1&&n[0].path===i.path&&a.push(i.formatted??n[0].source);t.write&&l>0&&o.push(`biome: wrote ${l} file(s)\n`);let u=+(s>0||c>0||i.length>0);if(t.reporter===`json`){let e=i?[{severity:`error`,category:`io`,message:i.trimEnd(),filePath:``,line:null,column:null}]:[],t={summary:{errors:s+e.length,warnings:c,filesChecked:r.results.length,unformattedFiles:r.results.filter(e=>!e.unchanged).length},diagnostics:[...r.results.flatMap(e=>e.diagnostics),...e],files:r.results.map(e=>({path:e.path,unchanged:e.unchanged}))};return{stdout:`${JSON.stringify(t)}\n`,stderr:``,exitCode:u}}return{stdout:a.join(``),stderr:o.join(``),exitCode:u}}async function Y_(e){let t=await R_(e);return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`biome: @biomejs/wasm-web is not installed (run: ${N} @biomejs/wasm-web@${C_}); ${O_}\n`,exitCode:1}}async function X_(e,t){return e.showHelp?G_(e.reporter,{stdout:k_,stderr:``,exitCode:0},`usage`):e.showVersion?G_(e.reporter,await Y_(t),`runtime`):null}function Z_(e,t){let n=e.paths[0];if(!n)return``;try{return t.fs.resolvePath(t.cwd,n)}catch{return``}}async function Q_(e,t){let n=b_(t),r=await X_(e,n);if(r)return r;if(e.subcommand===null)return G_(e.reporter,{stdout:``,stderr:`biome: missing subcommand (expected check, lint, or format)
|
|
529
|
+
`,exitCode:2},`usage`);let i=await q_(t,e);if(`exitCode`in i)return G_(e.reporter,i,`io`);let a=e.paths.length===0&&t.stdin?t.cwd:Fe(i.inputs[0].path).dir,o=await s_(t.fs,t.cwd,a,e.configPath);if(!o.ok)return G_(e.reporter,{stdout:``,stderr:`${o.error}\n`,exitCode:o.exitCode},`configuration`,i.inputs[0].path);let s=await K_(t,n);if(`exitCode`in s)return G_(e.reporter,s,`runtime`,i.inputs[0].path);let c=await U_(t,e.subcommand,e.write,e.check,o.resolved?.configuration??null,o.resolved===null?null:Fe(o.resolved.path).dir,e.reporter,i.inputs,s.wasmPath);return c.exitCode===0?J_(t,e,i.inputs,c,i.missingErrText):G_(e.reporter,{stdout:``,stderr:i.missingErrText+c.stderr,exitCode:c.exitCode},`runtime`,i.inputs[0].path)}function $_(){return S(`biome`,async(e,t)=>{let n;try{n=F_(e)}catch(t){return G_(M_(e)?`json`:`plain`,{stdout:``,stderr:`${t instanceof Error?t.message:String(t)}\n`,exitCode:2},`usage`)}try{return await Q_(n,t)}catch(e){if(n.reporter===`plain`)throw e;return G_(`json`,{stdout:``,stderr:`biome: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1},`runtime`,Z_(n,t))}})}function ev(e=`biscotto`,t={}){return S(e,async(n,r)=>{let{runBiscotto:i}=await import(`./run-BAmXlRlW.js`);return i(e,n,r,t.getParentJid?.(),t.isScoop?.()===!0)})}function tv(e={}){let t=e.getFollowers??re,n=e.getPanelRpc??y,r=e.getEmitter??(()=>null);return{listRuntimeIds(){return t().filter(e=>e.runtime===`slicc-cherry`).map(e=>e.runtimeId)},async emitSliccEvent(e,t,i){let a=r();if(a)try{return await a(e,t,i)?{delivered:!0}:{delivered:!1,reason:`the follower runtime is not connected to the leader`}}catch(e){return{delivered:!1,reason:`direct emit failed: ${e instanceof Error?e.message:String(e)}`}}let o=n();if(!o)return{delivered:!1,reason:`no page bridge to the leader tray (panel-RPC client)`};try{return(await o.call(`cherry-emit`,{runtimeId:e,name:t,detail:i}))?.delivered?{delivered:!0}:{delivered:!1,reason:`the follower runtime is not connected to the leader`}}catch(e){return{delivered:!1,reason:`panel-RPC delivery failed: ${e instanceof Error?e.message:String(e)}`}}}}}const nv=[`--detail`,`--runtime`];function rv(e){return{stdout:``,stderr:`cherry-emit: ${e}\n`,exitCode:1}}function iv(e){let t=C(e,{value:nv});return`error`in t?rv(t.error):{positionals:t.positionals,detailJson:t.values.get(`--detail`),runtime:t.values.get(`--runtime`)}}function av(e,t){return e.length===0?rv(`no cherry follower runtime is connected`):t?e.includes(t)?t:rv(`runtime '${t}' not connected. Available: ${e.join(`, `)}`):e.length>1?rv(`multiple runtimes connected, pass --runtime <id>. Available: ${e.join(`, `)}`):e[0]}function ov(e){if(e===void 0)return{detail:void 0};try{return{detail:JSON.parse(e)}}catch{return rv(`--detail must be valid JSON`)}}function sv(e={}){let t=e.registry??tv();return S(`cherry-emit`,async e=>{if(w(e,{valueFlags:nv}))return{stdout:`cherry-emit - push a slicc.event to a cherry host page through a follower runtime
|
|
530
530
|
|
|
531
531
|
Usage: cherry-emit <name> [--detail <json>] [--runtime <id>]
|
|
532
532
|
|
|
533
533
|
--detail <json> JSON payload delivered as the event detail
|
|
534
534
|
--runtime <id> Target a specific follower runtime (canonical id, e.g. follower-abc).
|
|
535
535
|
Defaults to the sole connected runtime; required when more than one.
|
|
536
|
-
`,stderr:``,exitCode:0};let n=
|
|
536
|
+
`,stderr:``,exitCode:0};let n=iv(e);if(`exitCode`in n)return n;let r=n.positionals[0];if(!r)return rv(`event name is required`);let i=av(t.listRuntimeIds(),n.runtime);if(typeof i!=`string`)return i;let a=ov(n.detailJson);if(`exitCode`in a)return a;let o=await t.emitSliccEvent(i,r,a.detail);return o.delivered?{stdout:`cherry-emit: sent '${r}' to ${i}\n`,stderr:``,exitCode:0}:rv(`failed to deliver '${r}' to ${i}: ${o.reason}`)})}function cv(e){return e instanceof Error?e.message:String(e)}function lv(){return{stdout:`usage: pbcopy
|
|
537
537
|
|
|
538
538
|
Copy stdin to the clipboard.
|
|
539
539
|
Example: echo hello | pbcopy
|
|
540
|
-
`,stderr:``,exitCode:0}}function
|
|
540
|
+
`,stderr:``,exitCode:0}}function uv(){return{stdout:`usage: pbpaste
|
|
541
541
|
|
|
542
542
|
Paste clipboard contents to stdout.
|
|
543
|
-
`,stderr:``,exitCode:0}}function
|
|
543
|
+
`,stderr:``,exitCode:0}}function dv(e){return{stdout:`usage: ${e} [-i|-o]\n\n -i Force copy mode (read from stdin)
|
|
544
544
|
-o Force paste mode (write to stdout)
|
|
545
545
|
(default) Auto-detect: stdin present = copy, no stdin = paste
|
|
546
|
-
Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function
|
|
547
|
-
`,exitCode:2};let i=await
|
|
546
|
+
Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function fv(e,t){let n=!!globalThis.navigator?.clipboard,r=n?null:y();if(!n&&!r)return{stdout:``,stderr:`${t}: clipboard API is unavailable\n`,exitCode:1};try{return n?await navigator.clipboard.writeText(e):await r.call(`clipboard-write-text`,{text:e}),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${t}: failed to write to clipboard: ${cv(e)}\n`,exitCode:1}}}async function pv(e){let t=!!globalThis.navigator?.clipboard,n=t?null:y();if(!t&&!n)return{stdout:``,stderr:`${e}: clipboard API is unavailable\n`,exitCode:1};try{return{stdout:t?await navigator.clipboard.readText():(await n.call(`clipboard-read-text`,void 0)).text,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: failed to read from clipboard: ${cv(t)}\n`,exitCode:1}}}function mv(){return S(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?lv():fv(P(t.stdin),`pbcopy`))}function hv(){return S(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?uv():pv(`pbpaste`))}function gv(e){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return dv(e);let r=t.includes(`-i`),i=t.includes(`-o`);if(r&&i)return{stdout:``,stderr:`${e}: cannot use both -i and -o\n`,exitCode:1};if(i)return pv(e);let a=P(n.stdin);return r||a.length>0?fv(a,e):pv(e)})}function _v(){return S(`cmp`,async(e,t)=>{let n=e.some(e=>e===`-s`||e===`--quiet`||e===`--silent`),r=e.filter(e=>![`-s`,`--quiet`,`--silent`].includes(e));if(r.length!==2||r.some(e=>e.startsWith(`-`)&&e!==`-`))return{stdout:``,stderr:`cmp: usage: cmp [-s|--quiet|--silent] FILE1 FILE2
|
|
547
|
+
`,exitCode:2};let i=await vv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await vv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=yv(i.bytes,a.bytes);return o?n?{stdout:``,stderr:``,exitCode:1}:o.eof?{stdout:``,stderr:`cmp: EOF on ${i.bytes.length<a.bytes.length?r[0]:r[1]} after byte ${o.byte-1}, line ${o.line}\n`,exitCode:1}:{stdout:`${r[0]} ${r[1]} differ: byte ${o.byte}, line ${o.line}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:``,exitCode:0}})}async function vv(e,t){if(t===`-`){let t=_i(e.stdin);return{bytes:Uint8Array.from(t,e=>e.charCodeAt(0)&255)}}try{return{bytes:await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}}catch{return{error:{stdout:``,stderr:`cmp: ${t}: No such file or directory\n`,exitCode:2}}}}function yv(e,t){let n=Math.min(e.length,t.length),r=1;for(let i=0;i<n;i++){if(e[i]!==t[i])return{byte:i+1,line:r,eof:!1};e[i]===10&&r++}return e.length===t.length?null:{byte:n+1,line:r,eof:!0}}function bv(e={}){return S(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-BteWzSfI.js`).then(e=>e.t);return r(t,n,e)})}var xv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function Sv(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 Cv(e){let t=e.toLowerCase();return t.endsWith(`.jpg`)||t.endsWith(`.jpeg`)?`JPEG`:t.endsWith(`.png`)?`PNG`:t.endsWith(`.gif`)?`GIF`:t.endsWith(`.webp`)?`WEBP`:t.endsWith(`.bmp`)?`BMP`:t.endsWith(`.tiff`)||t.endsWith(`.tif`)?`TIFF`:t.endsWith(`.avif`)?`AVIF`:`PNG`}const wv=`AdobeClean-Regular.otf`,Tv=new WeakSet;let Ev=null;function Dv(){return{stdout:`usage: convert [input ...] [operations...] [output]
|
|
548
548
|
|
|
549
549
|
Operations:
|
|
550
550
|
-resize GEOMETRY resize; supports %, !, ^, >, and < modifiers
|
|
@@ -585,7 +585,7 @@ suffix (0-based, as ImageMagick does); page 0 is used when none is given:
|
|
|
585
585
|
convert -density 150 doc.pdf page0.png
|
|
586
586
|
convert doc.pdf[2] -resize 800x page3.png
|
|
587
587
|
Use pdftoppm to rasterize a whole document in one pass.
|
|
588
|
-
`,stderr:``,exitCode:0}}const Ev=new Map([[`-resize`,1],[`-thumbnail`,1],[`-rotate`,1],[`-crop`,1],[`-quality`,1],[`-auto-orient`,0],[`-auto-gamma`,0],[`-auto-level`,0],[`-flip`,0],[`-flop`,0],[`-strip`,0],[`-trim`,0],[`-negate`,0],[`-normalize`,0],[`-background`,1],[`-extent`,1],[`-alpha`,1],[`-colorspace`,1],[`-transparent`,1],[`-blur`,1],[`-sharpen`,1],[`-gravity`,1],[`-fill`,1],[`-undercolor`,1],[`-pointsize`,1],[`-density`,1],[`-annotate`,2]]);var Dv=class{tokens;index=0;density=72;constructor(e){this.tokens=e}parse(){return this.readSequence(!1)}readSequence(e){let t=[],n=[],r=!1;for(;this.index<this.tokens.length;){let i=this.tokens[this.index];if(i===`)`){if(!e)throw Error(`unexpected )`);this.index++,r=!0;break}i===`(`?this.readGroup(t,n):i===`+append`||i===`-append`?this.append(t,i):Ev.has(i)?this.readOperation(t,n,i):this.readInput(t,n,i)}if(e&&!r)throw Error(`missing )`);return this.finishSequence(t,n)}readGroup(e,t){this.index++;let n=this.readSequence(!0);n.operations.unshift(...t.splice(0)),e.push(n)}append(e,t){if(e.length<2)throw Error(`${t} requires at least two images`);let n=[...e];e.splice(0,e.length,{kind:`append`,direction:t===`+append`?`horizontal`:`vertical`,children:n,appendSettings:Ov(n),operations:[]}),this.index++}readOperation(e,t,n){let r=Ev.get(n),i=this.tokens.slice(this.index+1,this.index+1+r);if(i.length!==r||i.some(e=>jv(e)))throw Error(`missing argument for ${n}`);let a={type:n.slice(1),value:i[0]??``,...r===2?{text:i[1]}:{}};a.type===`density`&&(this.density=Av(a.value)),(e.at(-1)?.operations??t).push(a),this.index+=r+1}readInput(e,t,n){if(n.startsWith(`-`)||n.startsWith(`+`))throw Error(`unsupported option ${n}`);e.push({kind:`input`,path:n,operations:t.splice(0),density:this.density}),this.index++}finishSequence(e,t){if(t.length>0)throw Error(`operation requires an input image`);if(e.length===0)throw Error(`expected an input image`);if(e.length>1)throw Error(`multiple input files require +append or -append`);return e[0]}};function Ov(e){let t={};for(let n of e)for(let e of n.operations)e.type===`background`&&(t.background=e.value),e.type===`gravity`&&(t.gravity=e.value);return t}function kv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=Ev.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(jv(t))throw Error(`expected an output file`);return{expression:new Dv(e.slice(0,-1)).parse(),outputPath:t}}function Av(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function jv(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||Ev.has(e)}const Mv=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,Nv=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function Pv(e,t,n){if(!(n===`resize`||n===`thumbnail`?Mv:Nv).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function Fv(e,t,n){t.resize(Pv(e,n,`resize`))}function Iv(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function Lv(e,t,n,r){let i=Pv(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function Rv(e,t){let n=parseInt(t,10);if(isNaN(n)||n<0||n>100)throw Error(`Invalid quality: ${t} (must be 0-100)`);e.quality=n}const zv={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function Bv(e,t){let n=zv[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const Vv={"auto-orient":e=>e.autoOrient(),"auto-gamma":e=>e.autoGamma(),"auto-level":e=>e.autoLevel(),flip:e=>e.flip(),flop:e=>e.flop(),strip:e=>e.strip(),trim:e=>e.trim(),negate:e=>e.negate(),normalize:e=>e.normalize()};function Hv(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function Uv(e,t,n){let r=Hv(t),i=Object.entries(e).find(([e])=>Hv(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function Wv(e,t,n,r){let i=Pv(e,n,`extent`),a=r.background?new e.MagickColor(r.background):void 0;r.gravity!==void 0&&a?t.extent(i,r.gravity,a):r.gravity===void 0?a?t.extent(i,a):t.extent(i):t.extent(i,r.gravity)}function Gv(e,t){let n=`(?:\\d+(?:\\.\\d*)?|\\.\\d+)`,r=e.match(RegExp(`^(${n})(?:x(${n}))?$`));if(!r)throw Error(`Invalid ${t} radius/sigma: ${e}`);return[Number(r[1]),r[2]===void 0?1:Number(r[2])]}function Kv(e,t,n,r){let i=n.value.match(/^([+-]\d+)([+-]\d+)$/);if(!i)throw Error(`Invalid annotate offset: ${n.value} (expected +X+Y)`);let a=new e.Drawables;r.gravity!==void 0&&a.gravity(r.gravity),r.fill!==void 0&&a.fillColor(new e.MagickColor(r.fill)),r.undercolor!==void 0&&a.textUnderColor(new e.MagickColor(r.undercolor)),a.font(Sv),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function qv(e){if(Cv.has(e.Magick))return;let t=wv??=fetch(yv).then(async e=>{if(!e.ok)throw Error(`Failed to load annotation font (${e.status})`);return new Uint8Array(await e.arrayBuffer())});try{e.Magick.addFont(Sv,await t),Cv.add(e.Magick)}catch(e){throw wv===t&&(wv=null),e}}function Jv(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(Jv)}function Yv(e,t,n,r){let i=Vv[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:Fv(e,t,n.value);return;case`thumbnail`:t.thumbnail(Pv(e,n.value,`thumbnail`));return;case`rotate`:Iv(t,n.value);return;case`crop`:Lv(e,t,n.value,r.gravity);return;case`quality`:Rv(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:Wv(e,t,n.value,r);return;case`alpha`:t.alpha(Uv(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=Uv(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...Gv(n.value,`blur`));return;case`sharpen`:t.sharpen(...Gv(n.value,`sharpen`));return;case`gravity`:r.gravity=Bv(e,n.value);return;case`fill`:r.fill=n.value;return;case`undercolor`:r.undercolor=n.value;return;case`pointsize`:{let e=Number(n.value);if(!Number.isFinite(e)||e<=0)throw Error(`Invalid point size: ${n.value}`);r.pointsize=e;return}case`annotate`:Kv(e,t,n,r);return}}function Xv(e,t,n){let{background:r,gravity:i}=t.appendSettings;if(r===void 0&&i===void 0)return;let a=i===void 0?void 0:Bv(e,i),o=r===void 0?void 0:new e.MagickColor(r),s=Math.max(...n.map(e=>e.width)),c=Math.max(...n.map(e=>e.height));for(let r of n){let n=t.direction===`vertical`?s:r.width,i=t.direction===`horizontal`?c:r.height;if(n===r.width&&i===r.height)continue;let l=new e.MagickGeometry(n,i);a!==void 0&&o?r.extent(l,a,o):a===void 0?o&&r.extent(l,o):r.extent(l,a)}}function Zv(e,t,n){let r={};for(let i of n)Yv(e,t,i,r)}function Qv(e,t){let n=null,r=xv(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function $v(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await ey(e,t.children[a],n,async o=>{i.push(o),await $v(e,t,n,r,i,a+1),i.pop()})}async function ey(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{Zv(e,n,t.operations),await r(n)});return}await $v(e,t,n,async n=>{Xv(e,t,n);let i=e.MagickImageCollection.create();i.push(...n);let a=t.direction===`horizontal`?i.appendHorizontally.bind(i):i.appendVertically.bind(i);try{await a(async n=>{Zv(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function ty(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function ny(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=ty(e.path),o=t.fs.resolvePath(t.cwd,i),s=r.get(o);if(s===void 0&&(s=await t.fs.readFileBuffer(o),r.set(o,s)),Qi(s)){let t=await $i(s,(a??0)+1,{scale:ea(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await ny(i,t,n,r);return n}function ry(e=`convert`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Tv();let r;try{r=kv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await ny(r.expression,n),t=await Yi({ipk:bv(n)});Jv(r.expression)&&await qv(t);let i=null;if(await ey(t,r.expression,e,async e=>{i=Qv(e,r.outputPath)}),!i||i.byteLength===0)throw Error(`Failed to generate output image`);let a=n.fs.resolvePath(n.cwd,r.outputPath);return await n.fs.writeFile(a,i),{stdout:``,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function iy(){return globalThis.__slicc_lickManager??null}let ay=null;async function oy(){if(ay)return ay;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return ay=e(),ay}async function sy(){let e=iy();if(e)return{resolveLickTarget:async t=>e.resolveLickTarget?.(t)??{status:`unverifiable`},createWebhook:(t,n,r)=>e.createWebhook(t,n,r),deleteWebhook:t=>e.deleteWebhook(t),listWebhooks:async()=>e.listWebhooks(),createCronTask:(t,n,r)=>e.createCronTask(t,n,r),deleteCronTask:t=>e.deleteCronTask(t),listCronTasks:async()=>e.listCronTasks()};if(ke())return null;let t=await oy(),{listCronTasksAsync:n,listWebhooksAsync:r}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return{resolveLickTarget:e=>t.resolveLickTarget(e),createWebhook:(e,n,r)=>t.createWebhook(e,n,r),deleteWebhook:e=>t.deleteWebhook(e),listWebhooks:()=>r(),createCronTask:(e,n,r)=>t.createCronTask(e,n,r),deleteCronTask:e=>t.deleteCronTask(e),listCronTasks:()=>n()}}function cy(e){if(e.length===0)return`no cones or scoops are registered`;let t=e.slice(0,12),n=e.length>t.length?`, …`:``;return`valid targets: ${t.join(`, `)}${n}`}async function ly(e,t,n){if(!n||!e)return null;let r;try{r=await e.resolveLickTarget(n)}catch{return null}return r.status===`unresolved`?`${t}: --scoop "${n}" matches no live cone or scoop — its licks would be dropped (${cy(r.candidates)})\n`:null}function uy(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function dy(){return{stdout:`usage: crontask <command> [options]
|
|
588
|
+
`,stderr:``,exitCode:0}}const Ov=new Map([[`-resize`,1],[`-thumbnail`,1],[`-rotate`,1],[`-crop`,1],[`-quality`,1],[`-auto-orient`,0],[`-auto-gamma`,0],[`-auto-level`,0],[`-flip`,0],[`-flop`,0],[`-strip`,0],[`-trim`,0],[`-negate`,0],[`-normalize`,0],[`-background`,1],[`-extent`,1],[`-alpha`,1],[`-colorspace`,1],[`-transparent`,1],[`-blur`,1],[`-sharpen`,1],[`-gravity`,1],[`-fill`,1],[`-undercolor`,1],[`-pointsize`,1],[`-density`,1],[`-annotate`,2]]);var kv=class{tokens;index=0;density=72;constructor(e){this.tokens=e}parse(){return this.readSequence(!1)}readSequence(e){let t=[],n=[],r=!1;for(;this.index<this.tokens.length;){let i=this.tokens[this.index];if(i===`)`){if(!e)throw Error(`unexpected )`);this.index++,r=!0;break}i===`(`?this.readGroup(t,n):i===`+append`||i===`-append`?this.append(t,i):Ov.has(i)?this.readOperation(t,n,i):this.readInput(t,n,i)}if(e&&!r)throw Error(`missing )`);return this.finishSequence(t,n)}readGroup(e,t){this.index++;let n=this.readSequence(!0);n.operations.unshift(...t.splice(0)),e.push(n)}append(e,t){if(e.length<2)throw Error(`${t} requires at least two images`);let n=[...e];e.splice(0,e.length,{kind:`append`,direction:t===`+append`?`horizontal`:`vertical`,children:n,appendSettings:Av(n),operations:[]}),this.index++}readOperation(e,t,n){let r=Ov.get(n),i=this.tokens.slice(this.index+1,this.index+1+r);if(i.length!==r||i.some(e=>Nv(e)))throw Error(`missing argument for ${n}`);let a={type:n.slice(1),value:i[0]??``,...r===2?{text:i[1]}:{}};a.type===`density`&&(this.density=Mv(a.value)),(e.at(-1)?.operations??t).push(a),this.index+=r+1}readInput(e,t,n){if(n.startsWith(`-`)||n.startsWith(`+`))throw Error(`unsupported option ${n}`);e.push({kind:`input`,path:n,operations:t.splice(0),density:this.density}),this.index++}finishSequence(e,t){if(t.length>0)throw Error(`operation requires an input image`);if(e.length===0)throw Error(`expected an input image`);if(e.length>1)throw Error(`multiple input files require +append or -append`);return e[0]}};function Av(e){let t={};for(let n of e)for(let e of n.operations)e.type===`background`&&(t.background=e.value),e.type===`gravity`&&(t.gravity=e.value);return t}function jv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=Ov.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(Nv(t))throw Error(`expected an output file`);return{expression:new kv(e.slice(0,-1)).parse(),outputPath:t}}function Mv(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function Nv(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||Ov.has(e)}const Pv=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,Fv=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function Iv(e,t,n){if(!(n===`resize`||n===`thumbnail`?Pv:Fv).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function Lv(e,t,n){t.resize(Iv(e,n,`resize`))}function Rv(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function zv(e,t,n,r){let i=Iv(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function Bv(e,t){let n=parseInt(t,10);if(isNaN(n)||n<0||n>100)throw Error(`Invalid quality: ${t} (must be 0-100)`);e.quality=n}const Vv={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function Hv(e,t){let n=Vv[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const Uv={"auto-orient":e=>e.autoOrient(),"auto-gamma":e=>e.autoGamma(),"auto-level":e=>e.autoLevel(),flip:e=>e.flip(),flop:e=>e.flop(),strip:e=>e.strip(),trim:e=>e.trim(),negate:e=>e.negate(),normalize:e=>e.normalize()};function Wv(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function Gv(e,t,n){let r=Wv(t),i=Object.entries(e).find(([e])=>Wv(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function Kv(e,t,n,r){let i=Iv(e,n,`extent`),a=r.background?new e.MagickColor(r.background):void 0;r.gravity!==void 0&&a?t.extent(i,r.gravity,a):r.gravity===void 0?a?t.extent(i,a):t.extent(i):t.extent(i,r.gravity)}function qv(e,t){let n=`(?:\\d+(?:\\.\\d*)?|\\.\\d+)`,r=e.match(RegExp(`^(${n})(?:x(${n}))?$`));if(!r)throw Error(`Invalid ${t} radius/sigma: ${e}`);return[Number(r[1]),r[2]===void 0?1:Number(r[2])]}function Jv(e,t,n,r){let i=n.value.match(/^([+-]\d+)([+-]\d+)$/);if(!i)throw Error(`Invalid annotate offset: ${n.value} (expected +X+Y)`);let a=new e.Drawables;r.gravity!==void 0&&a.gravity(r.gravity),r.fill!==void 0&&a.fillColor(new e.MagickColor(r.fill)),r.undercolor!==void 0&&a.textUnderColor(new e.MagickColor(r.undercolor)),a.font(wv),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function Yv(e){if(Tv.has(e.Magick))return;let t=Ev??=fetch(xv).then(async e=>{if(!e.ok)throw Error(`Failed to load annotation font (${e.status})`);return new Uint8Array(await e.arrayBuffer())});try{e.Magick.addFont(wv,await t),Tv.add(e.Magick)}catch(e){throw Ev===t&&(Ev=null),e}}function Xv(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(Xv)}function Zv(e,t,n,r){let i=Uv[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:Lv(e,t,n.value);return;case`thumbnail`:t.thumbnail(Iv(e,n.value,`thumbnail`));return;case`rotate`:Rv(t,n.value);return;case`crop`:zv(e,t,n.value,r.gravity);return;case`quality`:Bv(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:Kv(e,t,n.value,r);return;case`alpha`:t.alpha(Gv(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=Gv(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...qv(n.value,`blur`));return;case`sharpen`:t.sharpen(...qv(n.value,`sharpen`));return;case`gravity`:r.gravity=Hv(e,n.value);return;case`fill`:r.fill=n.value;return;case`undercolor`:r.undercolor=n.value;return;case`pointsize`:{let e=Number(n.value);if(!Number.isFinite(e)||e<=0)throw Error(`Invalid point size: ${n.value}`);r.pointsize=e;return}case`annotate`:Jv(e,t,n,r);return}}function Qv(e,t,n){let{background:r,gravity:i}=t.appendSettings;if(r===void 0&&i===void 0)return;let a=i===void 0?void 0:Hv(e,i),o=r===void 0?void 0:new e.MagickColor(r),s=Math.max(...n.map(e=>e.width)),c=Math.max(...n.map(e=>e.height));for(let r of n){let n=t.direction===`vertical`?s:r.width,i=t.direction===`horizontal`?c:r.height;if(n===r.width&&i===r.height)continue;let l=new e.MagickGeometry(n,i);a!==void 0&&o?r.extent(l,a,o):a===void 0?o&&r.extent(l,o):r.extent(l,a)}}function $v(e,t,n){let r={};for(let i of n)Zv(e,t,i,r)}function ey(e,t){let n=null,r=Cv(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function ty(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await ny(e,t.children[a],n,async o=>{i.push(o),await ty(e,t,n,r,i,a+1),i.pop()})}async function ny(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{$v(e,n,t.operations),await r(n)});return}await ty(e,t,n,async n=>{Qv(e,t,n);let i=e.MagickImageCollection.create();i.push(...n);let a=t.direction===`horizontal`?i.appendHorizontally.bind(i):i.appendVertically.bind(i);try{await a(async n=>{$v(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function ry(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function iy(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=ry(e.path),o=t.fs.resolvePath(t.cwd,i),s=r.get(o);if(s===void 0&&(s=await t.fs.readFileBuffer(o),r.set(o,s)),Qi(s)){let t=await $i(s,(a??0)+1,{scale:ea(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await iy(i,t,n,r);return n}function ay(e=`convert`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Dv();let r;try{r=jv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await iy(r.expression,n),t=await Yi({ipk:Sv(n)});Xv(r.expression)&&await Yv(t);let i=null;if(await ny(t,r.expression,e,async e=>{i=ey(e,r.outputPath)}),!i||i.byteLength===0)throw Error(`Failed to generate output image`);let a=n.fs.resolvePath(n.cwd,r.outputPath);return await n.fs.writeFile(a,i),{stdout:``,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function oy(){return globalThis.__slicc_lickManager??null}let sy=null;async function cy(){if(sy)return sy;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return sy=e(),sy}async function ly(){let e=oy();if(e)return{resolveLickTarget:async t=>e.resolveLickTarget?.(t)??{status:`unverifiable`},createWebhook:(t,n,r)=>e.createWebhook(t,n,r),deleteWebhook:t=>e.deleteWebhook(t),listWebhooks:async()=>e.listWebhooks(),createCronTask:(t,n,r)=>e.createCronTask(t,n,r),deleteCronTask:t=>e.deleteCronTask(t),listCronTasks:async()=>e.listCronTasks()};if(ke())return null;let t=await cy(),{listCronTasksAsync:n,listWebhooksAsync:r}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return{resolveLickTarget:e=>t.resolveLickTarget(e),createWebhook:(e,n,r)=>t.createWebhook(e,n,r),deleteWebhook:e=>t.deleteWebhook(e),listWebhooks:()=>r(),createCronTask:(e,n,r)=>t.createCronTask(e,n,r),deleteCronTask:e=>t.deleteCronTask(e),listCronTasks:()=>n()}}function uy(e){if(e.length===0)return`no cones or scoops are registered`;let t=e.slice(0,12),n=e.length>t.length?`, …`:``;return`valid targets: ${t.join(`, `)}${n}`}async function dy(e,t,n){if(!n||!e)return null;let r;try{r=await e.resolveLickTarget(n)}catch{return null}return r.status===`unresolved`?`${t}: --scoop "${n}" matches no live cone or scoop — its licks would be dropped (${uy(r.candidates)})\n`:null}function fy(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function py(){return{stdout:`usage: crontask <command> [options]
|
|
589
589
|
|
|
590
590
|
Commands:
|
|
591
591
|
create [options] Create a new cron task
|
|
@@ -617,14 +617,14 @@ Examples:
|
|
|
617
617
|
crontask create --name every-5min --scoop poller --cron "*/5 * * * *" --filter "() => ({ time: Date.now() })"
|
|
618
618
|
crontask list
|
|
619
619
|
crontask delete abc123
|
|
620
|
-
`,stderr:``,exitCode:0}}async function
|
|
620
|
+
`,stderr:``,exitCode:0}}async function my(e,t,n){let r={method:e,headers:we({"Content-Type":`application/json`})};n&&(r.body=JSON.stringify(n));let i=await fetch(Ce(`/api/crontasks${t}`),r),a=await i.json().catch(()=>({}));return{ok:i.ok,status:i.status,data:a}}const hy=[`--name`,`--cron`,`--filter`,`--scoop`];function gy(e){return{stdout:``,stderr:`crontask: ${e}\n`,exitCode:1}}async function _y(e,t,n){let r=C(e.slice(1),{value:hy});if(`error`in r)return gy(r.error);let i=r.values.get(`--name`),a=r.values.get(`--cron`),o=r.values.get(`--filter`),s=r.values.get(`--scoop`);if(s=ta(s,t),!i)return{stdout:``,stderr:`crontask: --name is required
|
|
621
621
|
`,exitCode:1};if(!a)return{stdout:``,stderr:`crontask: --cron is required
|
|
622
|
-
`,exitCode:1};let c=await
|
|
623
|
-
`,exitCode:1};let e=await
|
|
622
|
+
`,exitCode:1};let c=await dy(await ly(),`crontask create`,r.values.get(`--scoop`));if(c)return{stdout:``,stderr:c,exitCode:1};if(!n()){if(o)return{stdout:``,stderr:`crontask: --filter is not supported in extension mode (CSP restriction)
|
|
623
|
+
`,exitCode:1};let e=await ly();if(!e)return fy(`create`);let t=await e.createCronTask(i,a,s),n=`Created cron task "${t.name}"\n`;return n+=`ID: ${t.id}\n`,n+=`Cron: ${t.cron}\n`,t.scoop&&(n+=`Scoop: ${t.scoop}\n`),t.nextRun&&(n+=`Next run: ${new Date(t.nextRun).toLocaleString()}\n`),{stdout:n,stderr:``,exitCode:0}}let{ok:l,data:u}=await my(`POST`,``,{name:i,cron:a,filter:o,scoop:s});if(!l)return{stdout:``,stderr:`crontask: failed to create: ${u.error??`unknown error`}\n`,exitCode:1};let d=u,f=`Created cron task "${d.name}"\n`;return f+=`ID: ${d.id}\n`,f+=`Cron: ${d.cron}\n`,d.scoop&&(f+=`Scoop: ${d.scoop}\n`),d.filter&&(f+=`Filter: ${d.filter}\n`),d.nextRun&&(f+=`Next run: ${new Date(d.nextRun).toLocaleString()}\n`),{stdout:f,stderr:``,exitCode:0}}function vy(e){let t=`Active cron tasks:
|
|
624
624
|
`;for(let n of e)t+=` ${n.id} ${n.name.padEnd(20)} ${n.cron.padEnd(15)}`,n.scoop&&(t+=` -> ${n.scoop}`),n.filter&&(t+=` [filtered]`),t+=` (${n.status})`,n.nextRun&&(t+=` next: ${new Date(n.nextRun).toLocaleString()}`),t+=`
|
|
625
|
-
`;return t}async function
|
|
626
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
627
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
625
|
+
`;return t}async function yy(e,t){let n=C(e.slice(1),{});if(`error`in n)return gy(n.error);if(!t()){let e=await ly();if(!e)return fy(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
|
|
626
|
+
`,stderr:``,exitCode:0}:{stdout:vy(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await my(`GET`,``);if(!r)return{stdout:``,stderr:`crontask: failed to list: ${i.error??`unknown error`}\n`,exitCode:1};let a=i;return a.length===0?{stdout:`No active cron tasks
|
|
627
|
+
`,stderr:``,exitCode:0}:{stdout:vy(a),stderr:``,exitCode:0}}async function by(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return gy(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`crontask: ${n} requires an ID\n`,exitCode:1};if(!t()){let e=await ly();return e?await e.deleteCronTask(i)?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:fy(`delete`)}let{ok:a,status:o,data:s}=await my(`DELETE`,`/${i}`);return a?{stdout:`Deleted cron task "${i}"\n`,stderr:``,exitCode:0}:o===404?{stdout:``,stderr:`crontask: task "${i}" not found\n`,exitCode:1}:{stdout:``,stderr:`crontask: failed to delete: ${s.error??`unknown error`}\n`,exitCode:1}}function xy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:hy}))return py();try{switch(r){case`create`:return await _y(e,n.env,t);case`list`:return await yy(e,t);case`delete`:case`kill`:return await by(e,t);default:return{stdout:``,stderr:`crontask: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`crontask: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function Sy(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-D6LxdCnL.js`);return r(e,t,n)})}function Cy(e,t={}){if(!Number.isFinite(e)||e<0)return``;if(t.si){if(e<1e3)return`${Math.round(e)} B`;let t=[`kB`,`MB`,`GB`,`TB`],n=e/1e3,r=0;for(;n>=1e3&&r<t.length-1;)n/=1e3,r+=1;return`${n<10?n.toFixed(1):Math.round(n)} ${t[r]}`}if(e<1024)return Number.isInteger(e)?`${e} B`:e>=.1?`${e.toFixed(1)} B`:e>0?`${Math.max(.01,Number(e.toFixed(2)))} B`:`0 B`;let n=[`KB`,`MB`,`GB`,`TB`,`PB`],r=e,i=-1;for(;r>=1024&&i<n.length-1;)r/=1024,i+=1;return`${r.toFixed(1)} ${n[i]}`}function wy(e){return Cy(e,{si:!1})}const Ty=`slicc-fs`;async function Ey(){try{let e=globalThis.indexedDB;if(!e)return!1;let t=e.databases;return typeof t!=`function`||(await t.call(e)).some(e=>e.name===Ty)}catch{return!0}}async function Dy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(Ty)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function Oy(){if(!await Ey())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await Dy();return e===`deleted`?{kind:`deleted`,message:`legacy slicc-fs IDB deleted`}:e===`blocked`?{kind:`blocked`,message:`legacy slicc-fs IDB delete blocked by another connection — close other tabs and retry`}:{kind:`error`,message:`legacy slicc-fs IDB delete failed`}}function ky(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
|
|
628
628
|
|
|
629
629
|
Usage:
|
|
630
630
|
slicc-fs-cleanup Delete the legacy slicc-fs IDB.
|
|
@@ -633,7 +633,7 @@ Usage:
|
|
|
633
633
|
SLICC's filesystem lives in OPFS; the legacy slicc-fs IndexedDB from
|
|
634
634
|
the pre-OPFS era is never read anymore. This command deletes it on
|
|
635
635
|
explicit invocation to reclaim the space.
|
|
636
|
-
`}const
|
|
636
|
+
`}const Ay={deleted:0,absent:0,blocked:1,error:1};function jy(e={}){let t=e.runCleanup??Oy;return S(`slicc-fs-cleanup`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:ky(),stderr:``,exitCode:0};if(e.length>0)return{stdout:``,stderr:`slicc-fs-cleanup: unsupported argument: ${e[0]}\n`,exitCode:1};let n=await t(),r=Ay[n.kind];return r===0?{stdout:`${n.message}\n`,stderr:``,exitCode:r}:{stdout:``,stderr:`slicc-fs-cleanup: ${n.message}\n`,exitCode:r}})}function My(e){return`${e} — report VFS backend and storage usage/quota
|
|
637
637
|
|
|
638
638
|
Usage:
|
|
639
639
|
${e} Show diagnostics (raw bytes).
|
|
@@ -641,16 +641,16 @@ Usage:
|
|
|
641
641
|
${e} --help Show this help.
|
|
642
642
|
|
|
643
643
|
Read-only. Cleanup of the legacy IndexedDB lives in 'slicc-fs-cleanup'.
|
|
644
|
-
`}function
|
|
644
|
+
`}function Ny(){return`diskutil — VFS diagnostics alias
|
|
645
645
|
|
|
646
646
|
Usage:
|
|
647
647
|
diskutil info Show VFS diagnostics (alias for 'df -h').
|
|
648
648
|
diskutil --help Show this help.
|
|
649
649
|
|
|
650
650
|
Read-only. See 'df --help' for the underlying command.
|
|
651
|
-
`}function
|
|
652
|
-
`)}\n`}function
|
|
653
|
-
`,exitCode:1}})}const
|
|
651
|
+
`}function Py(e,t){return e===null?`unavailable`:t?wy(e):`${e}`}async function Fy(e){let t=e.fs?.backend??`unknown`,n=null,r=null,i=null,a=globalThis.navigator?.storage;if(a){try{let e=await a.estimate();n=typeof e.usage==`number`?e.usage:null,r=typeof e.quota==`number`?e.quota:null}catch{}if(typeof a.persisted==`function`)try{i=await a.persisted()}catch{i=null}}let o=null,s=e.legacyIdbExists??Ey;try{o=await s()}catch{o=null}return{backend:t,usage:n,quota:r,persisted:i,legacyIdbPresent:o}}function Iy(e,t){let n=e.usage!==null&&e.quota!==null&&e.quota>0?`${Math.round(e.usage/e.quota*100)}%`:`unavailable`,r=e.persisted===null?`unavailable`:e.persisted?`true`:`false`,i=e.legacyIdbPresent===null?`unavailable`:e.legacyIdbPresent?`present (slicc-fs)`:`absent`;return`${[`Backend: ${e.backend}`,`Usage: ${Py(e.usage,t)}`,`Quota: ${Py(e.quota,t)}`,`Used: ${n}`,`Persisted: ${r}`,`Legacy IDB: ${i}`].join(`
|
|
652
|
+
`)}\n`}function Ly(e={}){return S(`df`,async t=>{if(t.includes(`--help`))return{stdout:My(`df`),stderr:``,exitCode:0};let n=new Set([`-h`,`--human-readable`]),r=t.find(e=>!n.has(e));if(r!==void 0)return{stdout:``,stderr:`df: unsupported argument: ${r}\n`,exitCode:1};let i=t.includes(`-h`)||t.includes(`--human-readable`);return{stdout:Iy(await Fy(e),i),stderr:``,exitCode:0}})}function Ry(e={}){return S(`diskutil`,async t=>{if(t.includes(`--help`))return{stdout:Ny(),stderr:``,exitCode:0};let n=t[0];return n===`info`?{stdout:Iy(await Fy(e),!0),stderr:``,exitCode:0}:{stdout:``,stderr:n?`diskutil: unsupported subcommand: ${n} (try 'diskutil info')\n`:`diskutil: missing subcommand (try 'diskutil info')
|
|
653
|
+
`,exitCode:1}})}const zy=e(`di`),By=new WeakMap;async function Vy(e,t){let n=By.get(e);if(n)return n;let r;if(await e.exists(`/workspace/node_modules/pyodide/pyodide-lock.json`))try{r=await e.readFile(`/workspace/node_modules/pyodide/pyodide-lock.json`)}catch(e){return zy.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${Ir}pyodide-lock.json`,n;try{n=await t(e,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){return zy.error(`failed to fetch pyodide-lock.json from CDN`,e),null}if(n.status<200||n.status>=300)return zy.error(`pyodide-lock.json CDN fetch returned HTTP ${n.status}`),null;r=xe(n.body)}let i;try{i=JSON.parse(r)}catch(e){return zy.error(`pyodide-lock.json was not valid JSON`,e),null}let a=new Map;for(let[e,t]of Object.entries(i.packages??{}))!t||typeof t.file_name!=`string`||a.set(Nr(t.name??e),t);return By.set(e,a),a}async function Hy(e,t,n,r){let i=await Vy(e,t);if(!i)return null;let a=i.get(Nr(n));if(!a?.file_name||!a.version||!a.sha256)return null;if(r&&r!==a.version)throw Error(`di: ${n}==${r} requested but the Pyodide lockfile pins ${a.name??n}==${a.version} (the Pyodide CDN serves only the locked version — omit the version, or use real uv locally)`);return{name:a.name??n,version:a.version,source:`pyodide-cdn`,fileName:a.file_name,sha256:a.sha256,url:`${Ir}${a.file_name}`}}function Uy(e,t){let n=`https://pypi.org/pypi/${encodeURIComponent(e)}`;return t?`${n}/${encodeURIComponent(t)}/json`:`${n}/json`}function Wy(e){if(!e.endsWith(`.whl`))return null;let t=e.slice(0,-4).split(`-`);return t.length<3?null:t[t.length-1]}async function Gy(e,t,n){let r=`di: PyPI lookup for ${t}${n?`==${n}`:``}`,i=Uy(t,n),a;try{a=await e(i,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${r}: network error (${t})`)}if(a.status===404)throw Error(`di: package '${t}'${n?` version '${n}'`:``} not found on PyPI`);if(a.status<200||a.status>=300){let e=a.statusText?` ${a.statusText}`:``;throw Error(`${r} returned HTTP ${a.status}${e}`)}let o;try{o=JSON.parse(xe(a.body))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${r}: response was not valid JSON (${t})`)}let s=o.info?.name??t,c=o.info?.version??n;if(!c)throw Error(`${r}: PyPI did not report a version for '${t}'`);let l=(o.urls??[]).filter(e=>e.packagetype===`bdist_wheel`&&typeof e.filename==`string`&&typeof e.url==`string`);if(l.length===0)throw Error(`di: ${s}==${c} has no wheel on PyPI (sdist/source-only packages are not supported in SLICC's di subset — use real uv locally)`);let u=l.find(e=>Wy(e.filename)===`any`);if(!u){let e=l.map(e=>e.filename).join(`, `);throw Error(`di: ${s}==${c} only ships platform-specific wheels (${e}); SLICC's di subset installs pure-Python (none-any) wheels only — use real uv locally for compiled packages`)}let d=u.digests?.sha256;if(!d)throw Error(`di: PyPI did not provide a sha256 digest for ${u.filename}`);return{name:s,version:c,source:`pypi`,fileName:u.filename,sha256:d,url:u.url}}const Ky=`/workspace/python_wheels`,qy=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function Jy(e){let t=e.trim();if(!t)throw Error(`di: package spec is required`);let n=t,r,i=t.indexOf(`==`);if(i!==-1)n=t.slice(0,i),r=t.slice(i+2);else{let e=t.indexOf(`@`);e!==-1&&(n=t.slice(0,e),r=t.slice(e+1))}if(n=n.trim(),r=r?.trim(),!qy.test(n))throw Error(`di: invalid package name '${n}'`);if(r!==void 0&&r===``)throw Error(`di: empty version in spec '${e}'`);return{name:n,version:r}}function Yy(e){return e instanceof Error?e:Error(String(e))}async function Xy(e,t,n){return await Hy(e,t,n.name,n.version)||Gy(t,n.name,n.version)}async function Zy(e,t,n){let r=await Xy(e,t,n),i=await Gr(t,{url:r.url,sha256:r.sha256,label:`di: download ${r.name}==${r.version}`});await e.mkdir(Ky,{recursive:!0});let a=x(Ky,r.fileName),o=!0;if(await e.exists(a)){let t=await e.readFile(a,{encoding:`binary`}),n=await jr(t);if(n===r.sha256.toLowerCase())o=!1;else throw Error(`di: ${r.fileName} is already staged with different bytes (sha256 ${n} != ${r.sha256.toLowerCase()}); refusing to overwrite`)}else await e.writeFile(a,i);return{name:r.name,version:r.version,source:r.source,fileName:r.fileName,sha256:r.sha256,staged:o}}async function Qy(e,t,n,r){let i=await zr(e,n),a=[],o=[];for(let n of r){let r;try{r=Jy(n)}catch(e){o.push({spec:n,error:Yy(e)});continue}try{a.push(await Zy(e,t,r))}catch(e){o.push({spec:n,error:Yy(e)})}}if(a.length>0){let t=await Hr(e,i),n=t.dependencies,r=await Mr(e,i);for(let e of a)n=kr(n,e.name,e.version),r=Ur(r,{name:e.name,version:e.version,source:e.source,fileName:e.fileName,sha256:e.sha256});await Rr(e,i,{...t,dependencies:n}),await Fr(e,i,r)}return{results:a,errors:o,manifestDir:i}}async function $y(e,t){let n=await Lr(e,t);if(!n)return null;let r=await Hr(e,n),i=await Mr(e,n),a=new Map(i.map(e=>[Nr(e.name),e]));return r.dependencies.map(e=>{let{name:t,version:n}=Pr(e),r=a.get(Nr(t));return{name:t,version:n||r?.version||`?`,source:r?.source??`unknown`}})}const eb=[];function tb(e){return`${e} - minimal Python package manager (pure-Python + Pyodide wheels)
|
|
654
654
|
|
|
655
655
|
Usage:
|
|
656
656
|
${e} add <pkg>[@<version>] [<pkg> ...] resolve, stage, and record wheels
|
|
@@ -663,20 +663,20 @@ Resolution:
|
|
|
663
663
|
staged under /workspace/python_wheels/ and recorded in pyproject.toml + uv.lock.
|
|
664
664
|
|
|
665
665
|
Anything else is not implemented in SLICC's ${e} subset; use real uv locally.
|
|
666
|
-
`}function
|
|
667
|
-
`)}\n`}async function
|
|
666
|
+
`}function nb(e,t){return{stdout:``,stderr:`${e}: '${t}' is not implemented in SLICC's di/uv subset; use real uv locally. Run '${e} --help' for supported verbs.\n`,exitCode:1}}function rb(e){return e instanceof Error?e.message:String(e)}function ib(e){let t=Math.max(4,...e.map(e=>e.name.length)),n=Math.max(7,...e.map(e=>e.version.length));return`${e.map(e=>`${e.name.padEnd(t)} ${e.version.padEnd(n)} (${e.source})`).join(`
|
|
667
|
+
`)}\n`}async function ab(e,t,n,r){let i=C(t,{value:eb});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=i.positionals;if(a.length===0)return{stdout:``,stderr:`${e}: add requires at least one package\n`,exitCode:1};let o;try{o=await Qy(r.fs,r.fetch,n.cwd,a)}catch(t){return{stdout:``,stderr:`${e}: ${rb(t)}\n`,exitCode:1}}let s=o.results.map(t=>t.staged?`${e}: added ${t.name}==${t.version} (${t.source}) -> ${t.fileName}`:`${e}: ${t.name}==${t.version} already staged (${t.source})`),c=o.errors.map(t=>`${e}: failed to add ${t.spec}: ${rb(t.error)}`);return{stdout:s.length>0?`${s.join(`
|
|
668
668
|
`)}\n`:``,stderr:c.length>0?`${c.join(`
|
|
669
|
-
`)}\n`:``,exitCode:o.errors.length===0?0:1}}async function
|
|
670
|
-
`}};let i=
|
|
669
|
+
`)}\n`:``,exitCode:o.errors.length===0?0:1}}async function ob(e,t,n,r){let i=C(t,{value:eb});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=await $y(r.fs,n.cwd);return a===null?{stdout:``,stderr:`${e}: no pyproject.toml found (run '${e} add <pkg>' first)\n`,exitCode:0}:a.length===0?{stdout:`${e}: no dependencies recorded\n`,stderr:``,exitCode:0}:{stdout:ib(a),stderr:``,exitCode:0}}function sb(e,t){return S(e,async(n,r)=>{if(n.length===0)return{stdout:tb(e),stderr:`${e}: missing verb\n`,exitCode:1};if(w(n,{valueFlags:eb}))return{stdout:tb(e),stderr:``,exitCode:0};let i=n[0],a=n.slice(1);return i===`add`?ab(e,a,r,t):i===`list`?ob(e,a,r,t):nb(e,i)})}const cb=`https://cloudflare-dns.com/dns-query`,lb=`https://dns.quad9.net/dns-query`,ub=`usage: dig <name> [type] [@server] [+short] [--json]`,db=[`A`,`AAAA`,`MX`,`TXT`,`CNAME`,`NS`,`SOA`,`SRV`,`PTR`,`CAA`],fb={"1.1.1.1":cb,"1.0.0.1":cb,"cloudflare-dns.com":cb,"8.8.8.8":`https://dns.google/resolve`,"8.8.4.4":`https://dns.google/resolve`,"dns.google":`https://dns.google/resolve`,"9.9.9.9":lb,"149.112.112.112":lb,"dns.quad9.net":lb};function pb(e){let t=e.split(`.`);if(t.length!==4)return;let n=t.map(Number);if(!(t.some(e=>!/^[0-9]+$/.test(e))||n.some(e=>!Number.isInteger(e)||e<0||e>255)))return n}function mb(e){if(e.includes(`%`))return;let t=e;if(e.includes(`.`)){let n=e.lastIndexOf(`:`),r=n>=0?pb(e.slice(n+1)):void 0;if(!r)return;let i=[r[0]*256+r[1],r[2]*256+r[3]].map(e=>e.toString(16));t=`${e.slice(0,n+1)}${i.join(`:`)}`}let n=t.split(`::`);if(n.length>2)return;let r=n[0]?n[0].split(`:`):[],i=n[1]?n[1].split(`:`):[],a=[...r,...i];if(!a.some(e=>!/^[0-9a-f]{1,4}$/i.test(e))){if(n.length===1)return a.length===8?a:void 0;if(!(a.length>=8))return[...r,...Array(8-a.length).fill(`0`),...i]}}function hb(e){let t=pb(e);if(t)return`${t.reverse().join(`.`)}.in-addr.arpa`;let n=mb(e);if(n)return`${n.map(e=>e.padStart(4,`0`)).join(``).split(``).reverse().join(`.`)}.ip6.arpa`}function gb(e){return{kind:`error`,message:`dig: '${e}' is not a valid record type; ${ub}\n`}}function _b(e,t,n){let r=e[t+1]?.trim();if(!r)return{error:{kind:`error`,message:`dig: -x requires an address
|
|
670
|
+
`}};let i=hb(r);return i?n.name?{error:gb(r)}:(n.name=i,n.type=`PTR`,{nextIndex:t+1}):{error:{kind:`error`,message:`dig: '${r}' is not a valid IP address for -x\n`}}}function vb(e,t,n){return n.server?{error:{kind:`error`,message:`dig: multiple @server arguments
|
|
671
671
|
`}}:(n.server=e.slice(1).trim(),n.server?{nextIndex:t}:{error:{kind:`error`,message:`dig: empty @server argument
|
|
672
|
-
`}})}function
|
|
673
|
-
`};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${
|
|
672
|
+
`}})}function yb(e,t,n){let r=e.trim(),i=r.toUpperCase(),a=n.name?.toUpperCase();if(db.includes(i)&&!n.type&&n.name)n.type=i;else if(!n.name)n.name=r;else if(a&&db.includes(a)&&!n.type)n.name=r,n.type=a;else return{error:gb(r)};return{nextIndex:t}}function bb(e,t,n){let r=e[t];return r.startsWith(`+`)?(r===`+short`&&(n.short=!0),{nextIndex:t}):r===`--json`?(n.json=!0,{nextIndex:t}):r===`-x`?_b(e,t,n):r.startsWith(`@`)?vb(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:yb(r,t,n)}function xb(e){if(e.short&&e.json)return{kind:`error`,message:`dig: +short and --json are mutually exclusive
|
|
673
|
+
`};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${ub}\n`};let t=e.server?.toLowerCase(),n=t?fb[t]:void 0,r=e.server&&!n?`dig: note: @${e.server} not supported over DoH; using cloudflare-dns.com\n`:``;return{kind:`query`,name:e.name,type:e.type??`A`,short:e.short,json:e.json,resolverUrl:n??`https://cloudflare-dns.com/dns-query`,fallbackNote:r}}function Sb(e){if(e.includes(`-v`)||e.includes(`--version`))return{kind:`version`};let t={short:!1,json:!1};for(let n=0;n<e.length;n+=1){let r=bb(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return xb(t)}const Cb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},wb=new Set(`#/:<>?@[\\]^|`);function Tb(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||wb.has(e))})}function Eb(e){if(Tb(e))throw Error(`invalid hostname`);if(/^[\x21-\x7e]+$/.test(e))return e;let t=`.invalid`,n=new URL(`https://${e}${t}`);if(n.username||n.password||n.port||n.pathname!==`/`||n.search||n.hash||!n.hostname.endsWith(t)||n.hostname.includes(`:`))throw Error(`invalid hostname`);let r=n.hostname.slice(0,-8);if(!r||r.includes(`.`)||!/^[\x21-\x7e]+$/.test(r))throw Error(`invalid hostname`);return r}function Db(e){if(e===`.`)return``;let t=e.endsWith(`.`)?e.slice(0,-1):e,n=t.split(`.`);if(!t||n.some(e=>e.length===0))throw Error(`invalid DNS name: ${e}`);try{return n.map(Eb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function Ob(e,t){let n=Db(e).split(`.`).filter(e=>e.length>0).map(e=>new TextEncoder().encode(e));if(n.some(e=>e.length>63))throw Error(`invalid DNS name: ${e}`);let r=n.reduce((e,t)=>e+t.length+1,1);if(r>255)throw Error(`invalid DNS name: ${e}`);let i=Cb[t];if(!i)throw Error(`unsupported record type: ${t}`);let a=new Uint8Array(12+r+4),o=new DataView(a.buffer);o.setUint16(2,256),o.setUint16(4,1);let s=12;for(let e of n)a[s]=e.length,a.set(e,s+1),s+=e.length+1;return s+=1,o.setUint16(s,i),o.setUint16(s+2,1),a}function kb(e,n,r){return`${e}?dns=${t(Ob(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function Ab(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function jb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){Ab(e,i,1);let t=e[i];if(t===0)return o||(a=i+1),{name:n.length>0?`${n.join(`.`)}.`:`.`,labels:n,nextOffset:a};if((t&192)==192){Ab(e,i,2);let n=(t&63)<<8|e[i+1];if(n>=i)throw Error(`invalid DNS compression pointer`);if(r.has(n))throw Error(`DNS compression pointer loop`);r.add(n),o||(a=i+2),o=!0,i=n;continue}if(t&192||t>63)throw Error(`invalid DNS label`);if(Ab(e,i+1,t),s+=t+1,s>255)throw Error(`DNS name too long`);n.push(new TextDecoder().decode(e.subarray(i+1,i+1+t))),i+=t+1}throw Error(`invalid DNS name`)}function R(e,t){return Ab(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function Mb(e,t){return Ab(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function Nb(e,t){let n=Array.from({length:8},(n,r)=>R(e,t+r*2)),r=-1,i=0;for(let e=0;e<n.length;){if(n[e]!==0){e+=1;continue}let t=e;for(;t<n.length&&n[t]===0;)t+=1;t-e>i&&([r,i]=[e,t-e]),e=t}let a=n.map(e=>e.toString(16));return i<2?a.join(`:`):`${a.slice(0,r).join(`:`)}::${a.slice(r+i).join(`:`)}`}function Pb(e,t,n){return`"${Array.from(e.subarray(t,n),e=>e===34?`\\"`:e===92?`\\\\`:e>=32&&e<=126?String.fromCharCode(e):`\\${String(e).padStart(3,`0`)}`).join(``)}"`}function Fb(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(Ab(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(Pb(e,r+1,r+1+t)),r+=t+1}return i.join(` `)}function Ib(e,t,n){if(n-t<2)throw Error(`invalid CAA record`);let r=e[t+1];if(t+2+r>n)throw Error(`invalid CAA record`);let i=new TextDecoder,a=i.decode(e.subarray(t+2,t+2+r)),o=i.decode(e.subarray(t+2+r,n));return`${e[t]} ${a} ${JSON.stringify(o)}`}function Lb(e,t,n,r){if(t===1){if(r-n!==4)throw Error(`invalid A record`);return Array.from(e.subarray(n,r)).join(`.`)}if(t===28){if(r-n!==16)throw Error(`invalid AAAA record`);return Nb(e,n)}if([2,5,12].includes(t)){let t=jb(e,n);if(t.nextOffset!==r)throw Error(`invalid DNS name record`);return t.name}if(t===15){if(r-n<3)throw Error(`invalid MX record`);let t=jb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${R(e,n)} ${t.name}`}if(t===16)return Fb(e,n,r);if(t===6){let t=jb(e,n),i=jb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>Mb(e,i.nextOffset+n*4));return`${t.name} ${i.name} ${a.join(` `)}`}if(t===33){if(r-n<7)throw Error(`invalid SRV record`);let t=jb(e,n+6);if(t.nextOffset!==r)throw Error(`invalid SRV record`);return`${R(e,n)} ${R(e,n+2)} ${R(e,n+4)} ${t.name}`}if(t===257)return Ib(e,n,r);let i=Array.from(e.subarray(n,r),e=>e.toString(16).padStart(2,`0`));return`\\# ${r-n} ${i.join(``)}`}function Rb(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=jb(e,a);a=t.nextOffset,Ab(e,a,10);let n=R(e,a),o=R(e,a+2),s=Mb(e,a+4),c=R(e,a+8),l=a+10,u=l+c;Ab(e,l,c);let d=Lb(e,n,l,u);r&&o===1&&i.push({name:t.name,type:n,TTL:s,data:d}),a=u}return{answers:i,nextOffset:a}}function zb(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function Bb(e,t,n,r,i){let a=Db(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>zb(e)===zb(a[t])))||t!==Cb[i]||n!==1)throw Error(`unexpected DNS response question`)}function Vb(e,t,n){Ab(e,0,12);let r=R(e,2);if(R(e,0)!==0||!(r&32768))throw Error(`invalid DNS response`);if(r&512)throw Error(`truncated DNS response`);let i=R(e,4),a=R(e,6),o=R(e,8),s=R(e,10);if(i!==1)throw Error(`invalid DNS question count`);let c=12,l=jb(e,c);c=l.nextOffset,Ab(e,c,4),Bb(l,R(e,c),R(e,c+2),t,n),c+=4;let u=Rb(e,c,a,!0);if(Rb(e,Rb(e,u.nextOffset,o,!1).nextOffset,s,!1).nextOffset!==e.length)throw Error(`trailing DNS message data`);return{Status:r&15,Answer:u.answers}}const Hb={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},Ub={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function Wb(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
|
|
674
674
|
dig -x <address> [@server] [+opts] [--json]
|
|
675
675
|
dig -v | --version
|
|
676
676
|
|
|
677
677
|
Resolve DNS records via DNS-over-HTTPS.
|
|
678
678
|
|
|
679
|
-
Supported types: `+
|
|
679
|
+
Supported types: `+db.join(`, `)+` (default: A).
|
|
680
680
|
|
|
681
681
|
Flags:
|
|
682
682
|
@server use a supported Cloudflare, Google, or Quad9 resolver
|
|
@@ -686,11 +686,11 @@ Flags:
|
|
|
686
686
|
+opts other dig +options are accepted as no-ops
|
|
687
687
|
--json resolver response as pretty-printed JSON
|
|
688
688
|
-h, --help show this help
|
|
689
|
-
`,stderr:``,exitCode:0}}function
|
|
689
|
+
`,stderr:``,exitCode:0}}function Gb(e){return Hb[e]??`TYPE${e}`}function Kb(e,t){let{fallbackNote:n,json:r,name:i,short:a}=t;if(typeof e.Status==`number`&&e.Status!==0)return{stdout:``,stderr:`${n}dig: ${i}: ${Ub[e.Status]??String(e.Status)}\n`,exitCode:1};if(r)return{stdout:`${JSON.stringify(e,null,2)}\n`,stderr:n,exitCode:0};let o=e.Answer??[];return o.length===0?{stdout:a?``:`;; no records found
|
|
690
690
|
`,stderr:n,exitCode:0}:a?{stdout:`${o.map(e=>e.data).join(`
|
|
691
|
-
`)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${
|
|
692
|
-
`)}\n`,stderr:n,exitCode:0}}async function
|
|
693
|
-
`,stderr:``,exitCode:0};if(n.kind===`error`)return{stdout:``,stderr:n.message,exitCode:1};let{fallbackNote:r,name:i,resolverUrl:a,type:o}=n,s=a===
|
|
691
|
+
`)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${Gb(e.type)}\t${e.data}`).join(`
|
|
692
|
+
`)}\n`,stderr:n,exitCode:0}}async function qb(e,t){let n=Sb(e);if(n.kind===`version`)return{stdout:`DiG 9.20.0-slicc (DNS-over-HTTPS)
|
|
693
|
+
`,stderr:``,exitCode:0};if(n.kind===`error`)return{stdout:``,stderr:n.message,exitCode:1};let{fallbackNote:r,name:i,resolverUrl:a,type:o}=n,s=a===lb,c,l;try{c=s?kb(a,i,o):`${a}?name=${encodeURIComponent(i)}&type=${o}`,l=await t(c,{method:`GET`,headers:{Accept:s?`application/dns-message`:`application/dns-json`}})}catch(e){return{stdout:``,stderr:`${r}dig: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}if(l.status<200||l.status>=300)return{stdout:``,stderr:`${r}dig: lookup failed: ${l.status} ${l.statusText}\n`,exitCode:1};try{return Kb(s?Vb(l.body,i,o):JSON.parse(new TextDecoder(`utf-8`).decode(l.body)),n)}catch{return{stdout:``,stderr:`${r}dig: invalid response from resolver\n`,exitCode:1}}}function Jb(){let e=g();return S(`dig`,async t=>t.includes(`--help`)||t.includes(`-h`)?Wb():qb(t,e))}const Yb=[`api-catalog`,`service-desc`,`service-meta`,`status`,`https://llmstxt.org/rel/llms-txt`];async function Xb(e,t={}){let n=t.fetchImpl??fetch,r=t.timeoutMs??3e3,i={links:e,failures:[]},a=[],o=new Set;for(let s of e)for(let e of s.rel)Yb.includes(e)&&(o.has(e)||(o.add(e),a.push(Zb(n,s.href,r,t.signal).then(t=>Qb(i,e,t)).catch(t=>{i.failures.push({rel:e,href:s.href,error:t instanceof Error?t.message:String(t)})}))));return await Promise.all(a),i}async function Zb(e,t,n,r){let i=new AbortController,a=setTimeout(()=>i.abort(Error(`timeout`)),n),o=()=>i.abort(Error(`aborted`));r&&r.addEventListener(`abort`,o,{once:!0});try{let n=await e(t,{signal:i.signal});if(!n.ok)throw Error(`HTTP ${n.status}`);return{contentType:n.headers.get(`content-type`)??``,body:await n.text()}}finally{clearTimeout(a),r&&r.removeEventListener(`abort`,o)}}function Qb(e,t,n){if(t===`https://llmstxt.org/rel/llms-txt`){e.llmsTxt=n.body;return}let r=n.contentType.includes(`json`)||n.contentType.includes(`linkset`),i=n.body;if(r)try{i=JSON.parse(n.body)}catch{i=n.body}switch(t){case`api-catalog`:e.catalog=i;break;case`service-desc`:e.serviceDesc=i;break;case`service-meta`:e.serviceMeta=i;break;case`status`:e.status=i}}const $b=[`--follow`];function ex(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})}}function tx(){return`discover — fetch a URL and parse RFC 8288 Link headers
|
|
694
694
|
|
|
695
695
|
Usage:
|
|
696
696
|
discover <url> Print parsed links (and any SLICC handoff match)
|
|
@@ -704,9 +704,9 @@ Output is always JSON.
|
|
|
704
704
|
Examples:
|
|
705
705
|
discover ${r}/handoff?handoff=demo
|
|
706
706
|
discover --follow ${r}/llms.txt
|
|
707
|
-
`}function
|
|
708
|
-
`,exitCode:2};let r=t.positionals[0],i=g(),o;try{o=await i(r,{method:`GET`})}catch(e){return{stdout:``,stderr:`discover: fetch failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=[];for(let[e,t]of Object.entries(o.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&c.push(t);let l=s(c,r),u=a(l),d={url:r,status:o.status,links:l,handoff:u};if(n&&l.length>0){let e=await
|
|
709
|
-
`,stderr:``,exitCode:0}})}function
|
|
707
|
+
`}function nx(){return S(`discover`,async e=>{if(e.length===0||w(e))return{stdout:tx(),stderr:``,exitCode:0};let t=C(e,{bool:$b});if(`error`in t)return{stdout:``,stderr:`discover: ${t.error}\n`,exitCode:1};let n=t.bools.has(`--follow`);if(t.positionals.length!==1)return{stdout:``,stderr:`discover: expected exactly one URL argument
|
|
708
|
+
`,exitCode:2};let r=t.positionals[0],i=g(),o;try{o=await i(r,{method:`GET`})}catch(e){return{stdout:``,stderr:`discover: fetch failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=[];for(let[e,t]of Object.entries(o.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&c.push(t);let l=s(c,r),u=a(l),d={url:r,status:o.status,links:l,handoff:u};if(n&&l.length>0){let e=await Xb(l,{fetchImpl:ex(i)});d.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}return{stdout:JSON.stringify(d,null,2)+`
|
|
709
|
+
`,stderr:``,exitCode:0}})}function rx(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 ix=`esbuild - thin wrapper over the ipk-loaded esbuild-wasm
|
|
710
710
|
|
|
711
711
|
Usage:
|
|
712
712
|
esbuild [options] <entry> Bundle / transform
|
|
@@ -746,10 +746,10 @@ Install:
|
|
|
746
746
|
Inert until the backing package is installed:
|
|
747
747
|
${N} esbuild-wasm@${di}
|
|
748
748
|
Then \`esbuild --version\` and the bundle/transform commands above.
|
|
749
|
-
`,
|
|
750
|
-
`,exitCode:2};let r;try{r=await ui({ipk:
|
|
751
|
-
`,exitCode:2};let r=e.entries.map(e=>t.fs.resolvePath(t.cwd,e));for(let e of r)if(!await t.fs.exists(e))return{stdout:``,stderr:`esbuild: ${e}: no such file\n`,exitCode:1};let i={entryPoints:r,bundle:!0,write:!1,plugins:[
|
|
752
|
-
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=Sr(n);for(let e=1;e<o.length;e++){let n=o[e],i=_r(r,vr(n.path));await t.fs.writeFile(i,n.text)}return{stdout:``,stderr:a,exitCode:0}}return{stdout:o.map(e=>e.text).join(``),stderr:a,exitCode:0}}catch(e){let t=e;return Array.isArray(t.errors)?{stdout:``,stderr:await
|
|
749
|
+
`,ax=new Set([`iife`,`cjs`,`esm`]),ox=new Set([`browser`,`node`,`neutral`]),sx=new Set([`linked`,`inline`,`external`,`both`]),cx={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function lx(e){if(e.startsWith(`--`)){let t=e.indexOf(`=`);if(t>0)return{key:e.slice(0,t),inlineValue:e.slice(t+1)}}return{key:e,inlineValue:null}}function ux(e,t,n){if(e.inlineValue!==null)return{value:e.inlineValue,advance:0};let r=t[n+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`esbuild: ${e.key} requires a value`);return{value:r,advance:1}}function dx(e,t,n,r){if(t.inlineValue!==null){if(!sx.has(t.inlineValue))throw Error(`esbuild: --sourcemap value must be one of linked|inline|external|both (got "${t.inlineValue}")`);return e.sourcemap=t.inlineValue,0}let i=n[r+1];return typeof i==`string`&&sx.has(i)?(e.sourcemap=i,1):(e.sourcemap=!0,0)}function fx(e,t,n,r){if(t.key===`--outfile`){let{value:i,advance:a}=ux(t,n,r);return e.outfile=i,a}if(t.key===`--format`){let{value:i,advance:a}=ux(t,n,r);if(!ax.has(i))throw Error(`esbuild: --format must be one of iife|cjs|esm (got "${i}")`);return e.format=i,a}if(t.key===`--platform`){let{value:i,advance:a}=ux(t,n,r);if(!ox.has(i))throw Error(`esbuild: --platform must be one of browser|node|neutral (got "${i}")`);return e.platform=i,a}if(t.key===`--target`){let{value:i,advance:a}=ux(t,n,r);return e.target=i.split(`,`).map(e=>e.trim()).filter(Boolean),a}if(t.key===`--loader`){let{value:i,advance:a}=ux(t,n,r);return e.loader=i,a}return-1}function px(e,t,n){if(!e.startsWith(t))return!1;let r=e.slice(t.length),i=r.indexOf(`=`);if(i<1)throw Error(`esbuild: ${t.slice(0,-1)} requires <key>=<value>`);return n[r.slice(0,i)]=r.slice(i+1),!0}function mx(e){let t={entries:[],bundle:!1,transform:!1,outfile:null,format:null,minify:!1,sourcemap:null,target:null,loader:null,external:[],platform:null,define:{},banner:{},footer:{},treeShaking:null,showHelp:!1,showVersion:!1};for(let n=0;n<e.length;n++){let r=e[n],i=cx[r];if(i){t[i]=!0;continue}if(r.startsWith(`--external:`)){t.external.push(r.slice(11));continue}if(px(r,`--define:`,t.define)||px(r,`--banner:`,t.banner)||px(r,`--footer:`,t.footer))continue;let a=lx(r);if(a.key===`--tree-shaking`){if(a.inlineValue===null)t.treeShaking=!0;else if(a.inlineValue===`true`||a.inlineValue===`false`)t.treeShaking=a.inlineValue===`true`;else throw Error(`esbuild: --tree-shaking must be true or false (got "${a.inlineValue}")`);continue}if(a.key===`--sourcemap`){n+=dx(t,a,e,n);continue}let o=fx(t,a,e,n);if(o>=0){n+=o;continue}if(r.startsWith(`-`))throw Error(`esbuild: unknown option: ${r}`);t.entries.push(r)}return t}function hx(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&gx(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if(vx(a.path)){let n=a.importer?.startsWith(`/`)?Sr(a.importer):t;return{path:await xx(e,e.resolvePath(n,a.path))}}return yx(a.path,a.importer,n,_x(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:bx(t.path),resolveDir:Sr(t.path)})}}}function gx(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!vx(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function _x(e,t){let n=t===`require-call`||t===`require-resolve`?`require`:`import`;switch(e??`browser`){case`browser`:return[`browser`,n,`default`];case`node`:return[`node`,n,`default`];case`neutral`:return[n,`default`]}}function vx(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function yx(e,t,n,r){let i=t?.startsWith(`/`)?Sr(t):n.fromDir;try{let t=await dr(e,i,n.reader,{conditions:r});return t.type===`file`?{path:t.path}:{path:e,external:!0}}catch(e){return{errors:[{text:e instanceof Error?e.message:String(e)}]}}}function bx(e){let t=vr(e).toLowerCase(),n=t.lastIndexOf(`.`);if(n<0)return`js`;switch(t.slice(n+1)){case`ts`:return`ts`;case`tsx`:return`tsx`;case`jsx`:return`jsx`;case`mjs`:case`cjs`:case`js`:return`js`;case`json`:return`json`;case`css`:return`css`;case`txt`:return`text`;default:return`js`}}async function xx(e,t){if(await e.exists(t))try{if(!(await e.stat(t)).isDirectory)return t}catch{return t}let n=[`.ts`,`.tsx`,`.jsx`,`.mjs`,`.cjs`,`.js`,`.json`];for(let r of n){let n=`${t}${r}`;if(await e.exists(n))return n}for(let r of n){let n=_r(t,`index${r}`);if(await e.exists(n))return n}return t}async function Sx(e,t,n){let r=[];if(n.length>0){let t=await e(n,{kind:`warning`,color:!1});r.push(t.join(``))}if(t.length>0){let n=await e(t,{kind:`error`,color:!1});r.push(n.join(``))}return r.join(``)}function Cx(){return S(`esbuild`,async(e,t)=>{let n;try{n=mx(e)}catch(e){return{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}if(n.showHelp||e.length===0&&!t.stdin)return{stdout:ix,stderr:``,exitCode:0};if(!n.transform&&!n.bundle&&n.entries.length>1)return{stdout:``,stderr:`esbuild: multiple entry points require --bundle (transform mode accepts at most one entry)
|
|
750
|
+
`,exitCode:2};let r;try{r=await ui({ipk:rx(t)})}catch(e){return{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return n.showVersion?{stdout:`${r.version}\n`,stderr:``,exitCode:0}:n.transform||!n.bundle&&n.entries.length<=1?wx(n,t,r):Tx(n,t,r)})}async function wx(e,t,n){let r,i=`<stdin>`;if(e.entries.length===1){let n=t.fs.resolvePath(t.cwd,e.entries[0]);if(!await t.fs.exists(n))return{stdout:``,stderr:`esbuild: ${e.entries[0]}: no such file\n`,exitCode:1};r=await t.fs.readFile(n),i=n}else if(r=P(t.stdin),!r)return{stdout:ix,stderr:``,exitCode:0};let a={loader:e.loader??bx(i),sourcefile:i,...e.format?{format:e.format}:{},...e.minify?{minify:!0}:{},...e.sourcemap?{sourcemap:e.sourcemap}:{},...e.target?{target:e.target}:{},...e.platform?{platform:e.platform}:{},...Object.keys(e.define).length>0?{define:e.define}:{},...e.treeShaking===null?{}:{treeShaking:e.treeShaking}};try{let i=await n.transform(r,a),o=await Sx(n.formatMessages,[],i.warnings);if(e.outfile){let n=t.fs.resolvePath(t.cwd,e.outfile);return await t.fs.writeFile(n,i.code),i.map&&e.sourcemap&&e.sourcemap!==`inline`&&await t.fs.writeFile(`${n}.map`,i.map),{stdout:``,stderr:o,exitCode:0}}return{stdout:i.code,stderr:o,exitCode:0}}catch(e){let t=e;return Array.isArray(t.errors)?{stdout:``,stderr:await Sx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Tx(e,t,n){if(e.entries.length===0)return{stdout:``,stderr:`esbuild: --bundle requires at least one entry point
|
|
751
|
+
`,exitCode:2};let r=e.entries.map(e=>t.fs.resolvePath(t.cwd,e));for(let e of r)if(!await t.fs.exists(e))return{stdout:``,stderr:`esbuild: ${e}: no such file\n`,exitCode:1};let i={entryPoints:r,bundle:!0,write:!1,plugins:[hx(t.fs,t.cwd,rx(t),e.external,e.platform)],format:e.format??`esm`,...Ex(e)};try{let r=await n.build(i),a=await Sx(n.formatMessages,r.errors,r.warnings),o=r.outputFiles??[];if(e.outfile){if(o.length===0)return{stdout:``,stderr:`esbuild: build produced no output
|
|
752
|
+
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=Sr(n);for(let e=1;e<o.length;e++){let n=o[e],i=_r(r,vr(n.path));await t.fs.writeFile(i,n.text)}return{stdout:``,stderr:a,exitCode:0}}return{stdout:o.map(e=>e.text).join(``),stderr:a,exitCode:0}}catch(e){let t=e;return Array.isArray(t.errors)?{stdout:``,stderr:await Sx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function Ex(e){return{...e.minify?{minify:!0}:{},...e.sourcemap?{sourcemap:e.sourcemap}:{},...e.target?{target:e.target}:{},...e.external.length>0?{external:e.external}:{},...e.platform?{platform:e.platform}:{},...Object.keys(e.define).length>0?{define:e.define}:{},...Object.keys(e.banner).length>0?{banner:e.banner}:{},...Object.keys(e.footer).length>0?{footer:e.footer}:{},...e.treeShaking===null?{}:{treeShaking:e.treeShaking}}}function Dx(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var Ox=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!Zr())throw Error(`Web Serial is unavailable in this browser`);return ri()}async chipInfo(e,t,n){return(await this.ops()).esptoolChipInfo(this.registry(),e,t,n)}async readMac(e,t,n){return(await this.ops()).esptoolReadMac(this.registry(),e,t,n)}async eraseFlash(e,t,n){await(await this.ops()).esptoolEraseFlash(this.registry(),e,t,n)}async flash(e,t,n,r,i){await(await this.ops()).esptoolFlash(this.registry(),e,t,n,r,i)}async readFlash(e,t,n,r,i){return(await this.ops()).esptoolReadFlash(this.registry(),e,t,n,r,i)}async readReg(e,t,n,r){return(await this.ops()).esptoolReadReg(this.registry(),e,t,n,r)}async flashId(e,t,n){return(await this.ops()).esptoolFlashId(this.registry(),e,t,n)}async eraseRegion(e,t,n,r,i){await(await this.ops()).esptoolEraseRegion(this.registry(),e,t,n,r,i)}async run(e,t,n){await(await this.ops()).esptoolRun(this.registry(),e,t,n)}},kx=class e{rpc;constructor(e){this.rpc=e}static INFO_TIMEOUT_MS=12e4;static ERASE_TIMEOUT_MS=3e5;static FLASH_TIMEOUT_MS=6e5;async withProgress(e,t,n){let r=this.rpc.onEvent(`esptool-progress`,n=>{let r=n;!r||r.handle!==e||t(r.line)});try{return await n()}finally{r()}}async chipInfo(t,n,r){return this.withProgress(t,r,()=>this.rpc.call(`esptool-chip-info`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}async readMac(t,n,r){return this.withProgress(t,r,()=>this.rpc.call(`esptool-read-mac`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}async eraseFlash(t,n,r){await this.withProgress(t,r,()=>this.rpc.call(`esptool-erase-flash`,{handle:t,baudRate:n},{timeoutMs:e.ERASE_TIMEOUT_MS}))}async flash(t,n,r,i,a){await this.withProgress(t,a,()=>this.rpc.call(`esptool-flash`,{handle:t,baudRate:n,eraseAll:r,segments:i.map(e=>({address:e.address,bytes:Dx(e.data)}))},{timeoutMs:e.FLASH_TIMEOUT_MS}))}async readFlash(t,n,r,i,a){let{bytes:o}=await this.withProgress(t,a,()=>this.rpc.call(`esptool-read-flash`,{handle:t,baudRate:n,address:r,size:i},{timeoutMs:e.FLASH_TIMEOUT_MS}));return new Uint8Array(o)}async readReg(t,n,r,i){return this.withProgress(t,i,()=>this.rpc.call(`esptool-read-reg`,{handle:t,baudRate:n,address:r},{timeoutMs:e.INFO_TIMEOUT_MS}))}async flashId(t,n,r){return this.withProgress(t,r,()=>this.rpc.call(`esptool-flash-id`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}async eraseRegion(t,n,r,i,a){await this.withProgress(t,a,()=>this.rpc.call(`esptool-erase-region`,{handle:t,baudRate:n,address:r,size:i},{timeoutMs:e.ERASE_TIMEOUT_MS}))}async run(t,n,r){await this.withProgress(t,r,()=>this.rpc.call(`esptool-run`,{handle:t,baudRate:n},{timeoutMs:e.INFO_TIMEOUT_MS}))}};function Ax(e,t){return e&&Zr()?new Ox:t?new kx(t):null}const jx=Symbol(`picker-approval-timeout`);async function Mx(e,t,n){let r=Me.generateId(),i=!1,a=Ne({id:r,html:Mm(e,t),onAction:async(e,t)=>{if(e!==`approve`)return{denied:!0};let n=t;return n?.cancelled?{cancelled:!0}:n?.error?{error:String(n.error)}:n?.granted&&typeof n.handle==`string`?{approved:!0,handle:n.handle,info:n.info??null}:n?.granted&&n?.info?{approved:!0,info:n.info}:{error:`picker returned an unexpected response`}}},n.onUpdate).catch(e=>{if(i)return jx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Me.cancel(r,`${e}: timed out`),t(jx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===jx)throw Error(`${e}: timed out after 120s waiting for user approval`);let l=c;if(l.denied)throw Error(`${e}: denied by user`);if(l.cancelled)throw Error(`${e}: cancelled`);if(l.error)throw Error(`${e}: ${l.error}`);if(!l.approved||!l.info)throw Error(`${e}: no device selected`);return{handle:l.handle??``,info:l.info}}const Nx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function Px(e){return jn(e,Nx)}function z(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 Fx(e){let t=e.replace(/0x/gi,``).replace(/[\s:,]/g,``);if(t.length===0)return new Uint8Array;if(t.length%2!=0||/[^0-9a-f]/i.test(t))throw Error(`invalid hex string: '${e}'`);let n=new Uint8Array(t.length/2);for(let e=0;e<n.length;e++)n[e]=parseInt(t.slice(e*2,e*2+2),16);return n}function Ix(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=z(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=z(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}const Lx=new Set([`none`,`even`,`odd`]),Rx=new Set([`none`,`hardware`]);function zx(e){let t={baudRate:e.has(`--baud`)?z(e.get(`--baud`),`baud`):9600};if(e.has(`--data-bits`)&&(t.dataBits=z(e.get(`--data-bits`),`data-bits`)),e.has(`--stop-bits`)&&(t.stopBits=z(e.get(`--stop-bits`),`stop-bits`)),e.has(`--parity`)){let n=e.get(`--parity`);if(!Lx.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!Rx.has(n))throw Error(`invalid --flow-control: '${n}'`);t.flowControl=n}return e.has(`--buffer-size`)&&(t.bufferSize=z(e.get(`--buffer-size`),`buffer-size`)),t}function Bx(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=z(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=Fx(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=z(e.get(`--timeout-ms`),`timeout-ms`)),t}function Vx(e,t){let n=e.toLowerCase();if(n===`on`||n===`true`||n===`1`)return!0;if(n===`off`||n===`false`||n===`0`)return!1;throw Error(`invalid ${t}: '${e}' (use on/off)`)}function Hx(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=Vx(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=Vx(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=Vx(e.get(`--break`),`break`)),t}function Ux(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 Wx(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Gx(e){return`0x${e.toString(16).padStart(4,`0`)}`}function Kx(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${Gx(e.usbVendorId??0)}:${Gx(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function qx(e){return`cts=${+!!e.clearToSend} dcd=${+!!e.dataCarrierDetect} dsr=${+!!e.dataSetReady} ri=${+!!e.ringIndicator}\n`}function B(e){return{stdout:e,stderr:``,exitCode:0}}function V(e){return{stdout:``,stderr:`serial: ${e}\n`,exitCode:1}}const Jx=`serial - access serial ports via Web Serial
|
|
753
753
|
|
|
754
754
|
Usage: serial <subcommand> [options]
|
|
755
755
|
|
|
@@ -780,9 +780,9 @@ Options:
|
|
|
780
780
|
-h, --help
|
|
781
781
|
|
|
782
782
|
Reads/writes are capped at ${oi} bytes (4 MiB).
|
|
783
|
-
`;function
|
|
784
|
-
`):B(`${t.map(
|
|
785
|
-
`)}\n`)}async function
|
|
783
|
+
`;function Yx(e,t){if(t)return B(e.length?`${Wx(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return B(n)}async function Xx(e){let t=await e.list();return t.length===0?B(`no granted serial ports
|
|
784
|
+
`):B(`${t.map(Kx).join(`
|
|
785
|
+
`)}\n`)}async function Zx(e,t){let n=e.get(`--__resolved`);if(n)return B(`${Kx(await t.info(n))}\n`);let r=Ix(e),i=je();if(i){let e=await Mx(`serial-port`,r,i);if(e.handle)return B(`${Kx(await t.info(e.handle))}\n`);let n=e.info,a=Zr();if(!a)return V(`request: Web Serial unavailable for port re-acquire`);let o=(await a.getPorts()).find(e=>{let t=typeof e.getInfo==`function`?e.getInfo():{};return(n.usbVendorId===void 0||t.usbVendorId===n.usbVendorId)&&(n.usbProductId===void 0||t.usbProductId===n.usbProductId)});if(!o)return V(`request: granted port could not be re-acquired`);let s=ri(),c=s.register(o),l=s.get(c);return l?B(`${Kx(Xr(c,l))}\n`):V(`request: failed to register granted port`)}return B(`${Kx(await t.request(r))}\n`)}async function Qx(e,t,n){let r=e[1];return r?(await n.open(r,zx(t)),B(``)):V(`open: handle required`)}async function $x(e,t){let n=e[1];return n?(await t.close(n),B(``)):V(`close: handle required`)}async function eS(e,t,n,r){let i=e[1];if(!i)return V(`read: handle required`);let a=Bx(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?V(`read --bytes exceeds 4 MiB limit`):Yx(await r.read(i,a),n.has(`--hex`))}async function tS(e,t,n){let r=e[1];if(!r)return V(`write: handle required`);let i=Ux(t);return i.length>4194304?V(`write payload exceeds 4 MiB limit`):B(`${await n.write(r,i)} bytes written\n`)}async function nS(e,t,n){let[,r,i]=e;return!r||!i?V(`signals: handle and get|set required`):i===`get`?B(qx(await n.getSignals(r))):i===`set`?(await n.setSignals(r,Hx(t)),B(``)):V(`signals: unknown action '${i}' (use get|set)`)}async function rS(e,t,n){let{positionals:r,flags:i,bools:a}=Px(e),o=r[0];switch(o){case`list`:return Xx(n);case`request`:return Zx(i,n);case`open`:return Qx(r,i,n);case`close`:return $x(r,n);case`read`:return eS(r,i,a,n);case`write`:return tS(r,t,n);case`signals`:return nS(r,i,n);default:return V(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function iS(){return S(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return B(Jx);let n=ei(de(),y());if(!n)return V(`Web Serial is unavailable in this environment`);try{return await rS(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?V(`user cancelled or no port selected`):V(t)}})}const aS=new Set([`--port`,`--baud`,`--vid`,`--pid`]),oS=115200;function sS(e){return jn(e,aS)}function cS(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function lS(e){return{stdout:e,stderr:``,exitCode:0}}function uS(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const dS=`esptool - flash ESP32 / ESP8266 chips via esptool-js
|
|
786
786
|
|
|
787
787
|
Usage: esptool [--port H] [--baud N] <subcommand> [args]
|
|
788
788
|
|
|
@@ -799,37 +799,37 @@ Subcommands:
|
|
|
799
799
|
|
|
800
800
|
Options:
|
|
801
801
|
--port H Use an existing serial handle from 'serial request'
|
|
802
|
-
--baud N Flash baud rate (default ${
|
|
802
|
+
--baud N Flash baud rate (default ${oS})
|
|
803
803
|
--vid 0x.. Picker filter when --port is omitted
|
|
804
804
|
--pid 0x.. Picker filter when --port is omitted
|
|
805
805
|
--erase write_flash: erase the whole chip before writing
|
|
806
806
|
-h, --help
|
|
807
807
|
|
|
808
808
|
Without --port, the Web Serial picker opens (asks for permission).
|
|
809
|
-
`;async function
|
|
810
|
-
`)}\n`)}case`read_mac`:{let e=await
|
|
811
|
-
`)}\n`)}case`erase_flash`:{let e=await
|
|
809
|
+
`;async function fS(e,t){return e.get(`--port`)||(await t.request(Ix(e))).handle}async function pS(e,t){let n=e.slice(1);if(n.length===0||n.length%2!=0)throw Error(`write_flash expects <addr> <file> pairs`);let r=[];for(let e=0;e<n.length;e+=2){let i=z(n[e],`address`),a=t.fs.resolvePath(t.cwd,n[e+1]),o=await t.fs.readFileBuffer(a);r.push({address:i,data:o})}return r}async function mS(e,t,n,r){let{positionals:i,flags:a,bools:o}=sS(e),s=cS(i[0]??``),c=a.has(`--baud`)?z(a.get(`--baud`),`baud`):oS,l=[],u=e=>l.push(e);switch(s){case`chip_id`:{let e=await fS(a,r),t=await n.chipInfo(e,c,u);return l.push(`Chip type: ${t.chip}`),l.push(`Chip description: ${t.description}`),l.push(`Features: ${t.features.join(`, `)}`),l.push(`Crystal: ${t.crystalMHz}MHz`),l.push(`MAC: ${t.mac}`),lS(`${l.join(`
|
|
810
|
+
`)}\n`)}case`read_mac`:{let e=await fS(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),lS(`${l.join(`
|
|
811
|
+
`)}\n`)}case`erase_flash`:{let e=await fS(a,r);return await n.eraseFlash(e,c,u),lS(l.length?`${l.join(`
|
|
812
812
|
`)}\n`:`flash erased
|
|
813
|
-
`)}case`write_flash`:{let e=await
|
|
813
|
+
`)}case`write_flash`:{let e=await pS(i,t),s=await fS(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),lS(l.length?`${l.join(`
|
|
814
814
|
`)}\n`:`flash written
|
|
815
|
-
`)}case`read_flash`:{if(i.length<4)return
|
|
816
|
-
`)}\n`)}case`read_reg`:{if(i.length<2)return
|
|
817
|
-
`)}\n`)}case`flash_id`:{let e=await
|
|
818
|
-
`)}\n`)}case`erase_region`:{if(i.length<3)return
|
|
815
|
+
`)}case`read_flash`:{if(i.length<4)return uS(`read_flash expects <addr> <size> <outfile>`);let e=z(i[1],`address`),o=z(i[2],`size`),s=t.fs.resolvePath(t.cwd,i[3]),d=await fS(a,r),f=await n.readFlash(d,c,e,o,u);return await t.fs.writeFile(s,f),l.push(`Wrote ${f.byteLength} bytes to ${s}`),lS(`${l.join(`
|
|
816
|
+
`)}\n`)}case`read_reg`:{if(i.length<2)return uS(`read_reg expects <addr>`);let e=z(i[1],`address`),t=await fS(a,r),{value:o}=await n.readReg(t,c,e,u);return l.push(`0x${e.toString(16)} = 0x${(o>>>0).toString(16).padStart(8,`0`)}`),lS(`${l.join(`
|
|
817
|
+
`)}\n`)}case`flash_id`:{let e=await fS(a,r),t=await n.flashId(e,c,u);return l.push(`Manufacturer: 0x${t.manufacturer.toString(16).padStart(2,`0`)}`),l.push(`Device: 0x${t.device.toString(16).padStart(4,`0`)}`),l.push(`Detected flash size: ${t.flashSize??`unknown`}`),lS(`${l.join(`
|
|
818
|
+
`)}\n`)}case`erase_region`:{if(i.length<3)return uS(`erase_region expects <addr> <size>`);let e=z(i[1],`address`),t=z(i[2],`size`),o=await fS(a,r);return await n.eraseRegion(o,c,e,t,u),lS(l.length?`${l.join(`
|
|
819
819
|
`)}\n`:`region erased
|
|
820
|
-
`)}case`run`:{let e=await
|
|
820
|
+
`)}case`run`:{let e=await fS(a,r);return await n.run(e,c,u),lS(l.length?`${l.join(`
|
|
821
821
|
`)}\n`:`running app
|
|
822
|
-
`)}default:return
|
|
822
|
+
`)}default:return uS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function hS(){return S(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return lS(dS);let n=de(),r=y(),i=Ax(n,r),a=ei(n,r);if(!i||!a)return uS(`Web Serial is unavailable in this environment`);try{return await mS(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?uS(`user cancelled or no port selected`):uS(t)}})}function gS(){return S(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-dcwnpB-U.js`);return n(e,t)})}function _S(){return S(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-yplzwsG-.js`);return n(e,t)})}function vS(e){let t=fe().find(t=>t.id===e);return t?t.id:null}function yS(){return fe().map(e=>e.id)}function bS(e){return me(e)}function xS(e,t){if(pe(e,t),ge()[e]!==t)throw Error(`flag ${e} cannot be overridden on this float`)}function SS(e){let t=globalThis.localStorage;if(!t||typeof t.setItem!=`function`)throw Error(`this realm has no localStorage to apply the override`);t.setItem(_e,e)}const CS=`usage: flags set <id> on|off
|
|
823
823
|
flags get <id>
|
|
824
824
|
|
|
825
825
|
set <id> on|off Persist a local override. The next new session reads it.
|
|
826
826
|
get <id> Print the resolved value
|
|
827
|
-
`;function
|
|
827
|
+
`;function wS(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function TS(){return`known flags: ${yS().join(`, `)}\n`}async function ES(e,t){let n=y();if(n&&!de()){let{overridesJson:r}=await n.call(`feature-flag-set`,{id:e,value:t});SS(r)}else xS(e,t);if(bS(e)!==t)throw Error(`flag ${e} is ${bS(e)??`unset`} after set`)}async function DS(e){if(e.length!==2)return wS(`usage: flags set <id> on|off`);let t=vS(e[0]);if(!t)return wS(`flags: unknown flag ${e[0]}\n${TS().trimEnd()}`);let n=e[1].toLowerCase();if(n!==`on`&&n!==`off`)return wS(`flags set: value must be on or off`);try{await ES(t,n)}catch(e){return wS(`flags set: ${e instanceof Error?e.message:String(e)}`)}return{stdout:`${t}=${n}\n`,stderr:``,exitCode:0}}function OS(e){if(e.length!==1)return wS(`usage: flags get <id>`);let t=vS(e[0]);if(!t)return wS(`flags: unknown flag ${e[0]}\n${TS().trimEnd()}`);let n=bS(t);return n===void 0?wS(`flags: ${t} has no value`):{stdout:`${n}\n`,stderr:``,exitCode:0}}function kS(){return S(`flags`,async e=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:CS,stderr:``,exitCode:0};let t=e[0];if(w(e.slice(1)))return{stdout:ot(`flags`,t,CS),stderr:``,exitCode:0};switch(t){case`set`:return DS(e.slice(1));case`get`:return OS(e.slice(1));default:return wS(`flags: unknown subcommand "${t}"\nusage: flags set <id> on|off
|
|
828
828
|
flags get <id>
|
|
829
829
|
|
|
830
830
|
set <id> on|off Persist a local override. The next new session reads it.
|
|
831
|
-
get <id> Print the resolved value`)}})}const
|
|
832
|
-
`);let n=``;for(let[,e]of
|
|
831
|
+
get <id> Print the resolved value`)}})}const AS=new Map;let jS=0;const MS=e=>({stdout:e,stderr:``,exitCode:0}),NS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),PS=[`--path`,`--pattern`,`--scoop`,`--name`];function FS(e){let t=C(e.slice(1),{});if(`error`in t)return NS(t.error);if(AS.size===0)return MS(`No active file watchers.
|
|
832
|
+
`);let n=``;for(let[,e]of AS)n+=`ID: ${e.id}\n`,n+=` Name: ${e.name}\n`,n+=` Path: ${e.basePath}\n`,n+=` Pattern: ${e.pattern}\n`,e.scoop&&(n+=` Scoop: ${e.scoop}\n`),n+=` Created: ${e.createdAt}\n\n`;return MS(n)}function IS(e){let t=C(e.slice(1),{});if(`error`in t)return NS(t.error);let n=t.positionals[0];if(!n)return NS(`delete requires an ID`);let r=AS.get(n);return r?(r.unsubscribe(),AS.delete(n),MS(`Deleted watcher "${r.name}" (${n})\n`)):NS(`watcher not found: ${n}`)}function LS(e){let t=C(e.slice(1),{value:PS});return`error`in t?t:{basePath:t.values.get(`--path`)??``,pattern:t.values.get(`--pattern`)??``,scoop:t.values.get(`--scoop`)??``,name:t.values.get(`--name`)??``}}function RS(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function zS(e,t){let n=LS(e);if(`error`in n)return NS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=ta(r.scoop,t)??``,!r.basePath||!r.pattern)return NS(`--path and --pattern are required`);let a=await dy(await ly(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return NS(`file system watcher not available`);let c=`fsw-${++jS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,RS(r.pattern),e=>{if(!u)return;let t=e.map(e=>({type:e.type,path:e.path}));u({type:`fswatch`,fswatchId:c,fswatchName:l,targetScoop:r.scoop,timestamp:new Date().toISOString(),changes:t,body:{changes:t}})});AS.set(c,{id:c,name:l,basePath:r.basePath,pattern:r.pattern,scoop:r.scoop,unsubscribe:d,createdAt:new Date().toISOString()});let f=`Created file watcher "${l}"\n`;return f+=`ID: ${c}\n`,f+=`Path: ${r.basePath}\n`,f+=`Pattern: ${r.pattern}\n`,r.scoop&&(f+=`Scoop: ${r.scoop}\n`),MS(f)}function BS(){return S(`fswatch`,async(e,t)=>{let n=e[0];if(!n||w(e,{valueFlags:PS}))return MS(`usage: fswatch <command> [options]
|
|
833
833
|
|
|
834
834
|
Commands:
|
|
835
835
|
create --path <path> --pattern <glob> [--scoop <name>] [--name <name>] Watch for file changes
|
|
@@ -841,7 +841,7 @@ Options:
|
|
|
841
841
|
--pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
|
|
842
842
|
--scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
|
|
843
843
|
--name <name> Human-readable name for the watcher
|
|
844
|
-
`);switch(n){case`list`:return
|
|
844
|
+
`);switch(n){case`list`:return FS(e);case`delete`:return IS(e);case`create`:return await zS(e,t.env);default:return NS(`unknown command: ${n}`)}})}function VS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-ZVh0R1Qb.js`);return r(t,n,e)})}function HS(e={}){return S(`go`,async(t,n)=>{let{runGoCommand:r}=await import(`./go-driver-DOU6iF-0.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}function US(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
|
|
845
845
|
hear --devices | --status | --warmup
|
|
846
846
|
|
|
847
847
|
Speech recognition: listens on the microphone until you pause, then
|
|
@@ -860,26 +860,26 @@ Options:
|
|
|
860
860
|
--devices List audio input devices
|
|
861
861
|
--status Show the enhanced model state (downloading/ready + ETA)
|
|
862
862
|
--warmup Start the enhanced model download in the background
|
|
863
|
-
`,stderr:``,exitCode:0}}const
|
|
863
|
+
`,stderr:``,exitCode:0}}const WS={"--devices":`devices`,"--status":`status`,"--warmup":`warmup`},GS={"-i":`a file path`,"-l":`a language tag`,"-T":`a timeout in seconds`,"-d":`a device id`,"--engine":`an engine name`};function KS(e,t,n){switch(t){case`-i`:return e.inputFile=n,null;case`-l`:return e.lang=n,null;case`-d`:return e.deviceId=n,null;case`-T`:{let t=Number.parseFloat(n);return Number.isNaN(t)||t<=0||t>600?`-T requires a timeout between 0 and 600 seconds`:(e.timeoutSeconds=t,null)}case`--engine`:return n!==`builtin`&&n!==`enhanced`?`--engine must be builtin or enhanced`:(e.engine=n,null);default:return`unknown option: ${t}`}}function qS(e){let t={inputFile:null,lang:void 0,timeoutSeconds:30,deviceId:void 0,engine:`auto`,devices:!1,status:!1,warmup:!1};for(let n=0;n<e.length;n++){let r=e[n],i=WS[r];if(i){t[i]=!0;continue}if(!(r in GS))return H(`unknown option: ${r}`);let a=n+1<e.length?e[++n]:null;if(a==null)return H(`${r} requires ${GS[r]}`);let o=KS(t,r,a);if(o)return H(o)}return t}function JS(e){switch(e.state){case`ready`:return`enhanced engine: ready
|
|
864
864
|
`;case`failed`:return`enhanced engine: failed (re-run hear --warmup to retry)
|
|
865
865
|
`;case`idle`:return`enhanced engine: not downloaded (run hear --warmup)
|
|
866
|
-
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`enhanced 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 H(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function
|
|
866
|
+
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`enhanced 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 H(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function YS(e){return e instanceof Error?e.message:String(e)}function XS(e){let t=e.map((e,t)=>`${e.deviceId}\t${e.label||`Microphone ${t+1}`}`);return t.join(`
|
|
867
867
|
`)+(t.length?`
|
|
868
|
-
`:``)}async function
|
|
869
|
-
`,stderr:``,exitCode:0}}catch(e){return H(`transcription failed: ${
|
|
868
|
+
`:``)}async function ZS(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:XS((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:H(`device enumeration unavailable`):{stdout:XS((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return H(YS(e))}}async function QS(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:JS(t?n():e()),stderr:``,exitCode:0}}return{stdout:JS(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return H(YS(e))}}function $S(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function eC(e,t,n,r){if(n.byteLength===0)return H(`no audio on ${r}`);let i=$S(n);try{return{stdout:(e.local?await(await import(`./speech-page-realm-stub-C7EPKrHd.js`)).hearTranscribe(i,t.lang):await e.panelRpc.call(`hear-transcribe`,{bytes:i,lang:t.lang},{timeoutMs:6e5})).transcript+`
|
|
869
|
+
`,stderr:``,exitCode:0}}catch(e){return H(`transcription failed: ${YS(e)}`)}}async function tC(e,t,n){let r=t.inputFile,i=n.fs.resolvePath(n.cwd,r),a;try{a=new Uint8Array(await n.fs.readFileBuffer(i))}catch{return H(`cannot open ${r}: No such file`)}let o=fr(i);return!o.startsWith(`audio/`)&&!o.startsWith(`video/`)?H(`${r} is not an audio file`):eC(e,t,a,r)}async function nC(e,t){let n=Math.round(t.timeoutSeconds*1e3);try{let r={lang:t.lang,timeoutMs:n,deviceId:t.deviceId,engine:t.engine},i=e.local?await(await import(`./speech-page-realm-stub-C7EPKrHd.js`)).hearCapture(r):await e.panelRpc.call(`hear-capture`,r,{timeoutMs:n+3e4});return i.transcript?{stdout:i.transcript+`
|
|
870
870
|
`,stderr:``,exitCode:0}:{stdout:``,stderr:`hear: no speech detected
|
|
871
|
-
`,exitCode:1}}catch(e){return H(
|
|
871
|
+
`,exitCode:1}}catch(e){return H(YS(e))}}function rC(){return S(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return US();let n=qS(e);if(`exitCode`in n)return n;let r={local:de(),panelRpc:y()};if(!r.local&&!r.panelRpc)return H(`speech recognition unavailable in this environment`);if(n.devices)return ZS(r);if(n.status||n.warmup)return QS(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return tC(r,n,t);let i=vi(t.stdin);return n.inputFile===`-`||n.deviceId==null&&!nr(t,i.byteLength)?eC(r,n,i,`stdin`):nC(r,n)})}function iC(e,t,n){return typeof e.onSessionReplaced==`function`?e.onSessionReplaced(t,n):()=>void 0}function aC(e){let{browser:t,targetId:n,listeners:r,enable:i}=e,a=e.transport,o=e.sessionId,s=e=>{for(let[t,n]of r)e.off(t,n),e.on(t,n)},c=e=>{for(let[t,n]of r)e.off(t,n)};s(a);let l=iC(t,n,(e,t)=>{if(t!==a&&c(a),a=t,o=e,s(a),i)try{Promise.resolve(i(a,o)).catch(()=>void 0)}catch{}});return{get sessionId(){return o},get transport(){return a},stop(){l(),c(a)}}}const oC=[`debug`,`log`,`info`,`warning`,`error`],sC=1e3,cC={assert:`error`,trace:`debug`,dir:`log`,dirxml:`log`,table:`log`,count:`info`,timeEnd:`info`,clear:`log`,startGroup:`log`,startGroupCollapsed:`log`,endGroup:`log`,profile:`debug`,profileEnd:`debug`};function lC(e,t,n,r,i){if(t.consoleCleanup.has(r))return;t.consoleMessages.set(r,[]);let a=aC({browser:e,targetId:r,transport:n,sessionId:i,listeners:[[`Runtime.consoleAPICalled`,e=>{let n=e;if(n.sessionId!==a.sessionId)return;let i=n.type??`log`,o=cC[i]??i,s=(n.args??[]).map(e=>String(e.value??e.description??``)).join(` `),c=t.consoleMessages.get(r);c&&(c.push({level:o,text:s,timestamp:Date.now()}),c.length>sC&&c.splice(0,c.length-sC))}]],enable:(e,t)=>e.send(`Runtime.enable`,{},t)});t.consoleCleanup.set(r,()=>a.stop())}const uC=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=n[0]??`log`,s=r.clear===`true`,c=oC.indexOf(o);if(c===-1)return{stdout:``,stderr:`Invalid level "${o}". Valid: ${oC.join(`, `)}\n`,exitCode:1};t.consoleCleanup.has(a.targetId)||await i(a.targetId,async({sessionId:n,transport:r})=>{await r.send(`Runtime.enable`,{},n),lC(e,t,r,a.targetId,n)});let l=(t.consoleMessages.get(a.targetId)??[]).filter(e=>oC.indexOf(e.level)>=c);return s&&t.consoleMessages.set(a.targetId,[]),l.length===0?{stdout:`No console messages
|
|
872
872
|
`,stderr:``,exitCode:0}:{stdout:l.map(e=>`[${e.level}] ${e.text}`).join(`
|
|
873
873
|
`)+`
|
|
874
|
-
`,stderr:``,exitCode:0}};function
|
|
874
|
+
`,stderr:``,exitCode:0}};function dC(e){return e.cookies??[]}function fC(e){return`${e.name}=${e.value}\tDomain=${e.domain}\tPath=${e.path}\tSecure=${e.secure}\tHttpOnly=${e.httpOnly}\tExpires=${e.expires}`}function pC(e){return{name:e.name,value:e.value,...e.domain===void 0?{}:{domain:e.domain},...e.path===void 0?{}:{path:e.path},...e.secure===void 0?{}:{secure:e.secure},...e.httpOnly===void 0?{}:{httpOnly:e.httpOnly},...e.expires===void 0?{}:{expires:e.expires},...e.sameSite===void 0?{}:{sameSite:e.sameSite},...e.url===void 0?{}:{url:e.url}}}function mC(e){return{name:e.name,...e.domain===void 0?{}:{domain:e.domain},...e.path===void 0?{}:{path:e.path},...e.url===void 0?{}:{url:e.url}}}const hC=async({browser:e,flags:t,onTab:n})=>{let r=j(t);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t.domain,a=t.path;return{stdout:await n(r.targetId,async e=>{let t=dC(await e.send(`Network.getCookies`)),n=i||a?t.filter(e=>(!i||String(e.domain??``).includes(i))&&(!a||String(e.path??``).startsWith(a))):t;return n.length===0?`No cookies`:n.map(fC).join(`
|
|
875
875
|
`)})+`
|
|
876
|
-
`,stderr:``,exitCode:0}},
|
|
877
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return{stdout:await r(i.targetId,async e=>{let t=
|
|
876
|
+
`,stderr:``,exitCode:0}},gC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-get requires a cookie name
|
|
877
|
+
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return{stdout:await r(i.targetId,async e=>{let t=dC(await e.send(`Network.getCookies`)).filter(e=>e.name===a);if(t.length===0)throw Error(`Cookie "${a}" not found`);return t.map(fC).join(`
|
|
878
878
|
`)})+`
|
|
879
|
-
`,stderr:``,exitCode:0}},
|
|
880
|
-
`,exitCode:1};let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await Jn(e),i={name:t[0],value:t[1]};n.domain&&(i.domain=n.domain),n.path&&(i.path=n.path),n.secure===`true`&&(i.secure=!0),n.httpOnly===`true`&&(i.httpOnly=!0),n.expires&&(i.expires=parseFloat(n.expires)),n.sameSite&&(i.sameSite=n.sameSite),!i.domain&&!i.path&&(i.url=r.href),await e.send(`Network.setCookie`,
|
|
881
|
-
`,exitCode:1};let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r={name:t[0]};n.domain&&(r.domain=n.domain),n.path&&(r.path=n.path),!r.domain&&!r.path&&(r.url=(await Jn(e)).href),await e.send(`Network.deleteCookies`,
|
|
882
|
-
`,stderr:``,exitCode:0})},
|
|
879
|
+
`,stderr:``,exitCode:0}},_C=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length<2)return{stdout:``,stderr:`cookie-set requires <name> <value>
|
|
880
|
+
`,exitCode:1};let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await Jn(e),i={name:t[0],value:t[1]};n.domain&&(i.domain=n.domain),n.path&&(i.path=n.path),n.secure===`true`&&(i.secure=!0),n.httpOnly===`true`&&(i.httpOnly=!0),n.expires&&(i.expires=parseFloat(n.expires)),n.sameSite&&(i.sameSite=n.sameSite),!i.domain&&!i.path&&(i.url=r.href),await e.send(`Network.setCookie`,pC(i))}),{stdout:`Cookie "${t[0]}" set\n`,stderr:``,exitCode:0})},vC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-delete requires a cookie name
|
|
881
|
+
`,exitCode:1};let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r={name:t[0]};n.domain&&(r.domain=n.domain),n.path&&(r.path=n.path),!r.domain&&!r.path&&(r.url=(await Jn(e)).href),await e.send(`Network.deleteCookies`,mC(r))}),{stdout:`Cookie "${t[0]}" deleted\n`,stderr:``,exitCode:0})},yC=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(`Network.clearBrowserCookies`)}),{stdout:`All cookies cleared
|
|
882
|
+
`,stderr:``,exitCode:0})},bC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`generate-locator requires a ref (e.g. e5)
|
|
883
883
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=t.snapshots.get(a.targetId);if(!s)return{stdout:``,stderr:`No snapshot available. Run "snapshot" first.
|
|
884
884
|
`,exitCode:1};let c=s.refToBackendNodeId.get(o);if(!c){let e=s.refToSelector.get(o);return e?{stdout:`page.locator(${JSON.stringify(e.split(`,`)[0].trim())})\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Unknown ref "${o}"\n`,exitCode:1}}let l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`DOM.enable`,{},e);let n=(await t.send(`DOM.resolveNode`,{backendNodeId:c},e)).object;if(!n?.objectId){let e=s.refToSelector.get(o)?.split(`,`)[0].trim()??``;l=`page.locator(${JSON.stringify(e)})`;return}let r=await t.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
|
|
885
885
|
const el = this;
|
|
@@ -891,7 +891,7 @@ Options:
|
|
|
891
891
|
const id = el.id;
|
|
892
892
|
return JSON.stringify({ testId, label, placeholder, id });
|
|
893
893
|
}`,returnByValue:!0},e),i=JSON.parse(r.result?.value??`{}`);if(i.testId)l=`page.getByTestId(${JSON.stringify(i.testId)})`;else if(i.label)l=`page.getByLabel(${JSON.stringify(i.label)})`;else if(i.placeholder)l=`page.getByPlaceholder(${JSON.stringify(i.placeholder)})`;else if(i.id)l=`page.locator(${JSON.stringify(`#${i.id}`)})`;else{let e=s.refToSelector.get(o)?.split(`,`)[0].trim()??``;l=`page.locator(${JSON.stringify(e)})`}}),{stdout:l+`
|
|
894
|
-
`,stderr:``,exitCode:0}},
|
|
894
|
+
`,stderr:``,exitCode:0}},xC=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=r.hide===`true`,s=r.style??`outline: 3px solid #ff4444; background: rgba(255, 68, 68, 0.1);`;if(o&&!n[0])return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Runtime.evaluate`,{expression:`document.querySelectorAll('[data-slicc-highlight]').forEach(el => {
|
|
895
895
|
el.style.outline = '';
|
|
896
896
|
el.style.background = '';
|
|
897
897
|
el.removeAttribute('data-slicc-highlight');
|
|
@@ -919,14 +919,14 @@ Options:
|
|
|
919
919
|
el.style.cssText += '; ' + styleVal;
|
|
920
920
|
el.setAttribute('data-slicc-highlight','1');
|
|
921
921
|
}
|
|
922
|
-
})()`;await t.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},e)}}),{stdout:o?`Highlight removed from ${c}\n`:`Highlighted ${c}\n`,stderr:``,exitCode:0}},
|
|
923
|
-
`,stderr:``,exitCode:0})};function
|
|
924
|
-
`,exitCode:1};let a=
|
|
925
|
-
`,stderr:``,exitCode:0}},
|
|
926
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=
|
|
927
|
-
`,stderr:``,exitCode:0}};function
|
|
928
|
-
`,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await
|
|
929
|
-
`,stderr:i?`${i}\n`:``,exitCode:+!!a.error}}
|
|
922
|
+
})()`;await t.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},e)}}),{stdout:o?`Highlight removed from ${c}\n`:`Highlighted ${c}\n`,stderr:``,exitCode:0}},SC=async({browser:e,positional:t,flags:n,onTab:r})=>{let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t.length>0?t.join(` `):void 0;return await r(i.targetId,async e=>{await e.send(`Page.enable`),await e.send(`Page.handleJavaScriptDialog`,{accept:!0,...a===void 0?{}:{promptText:a}})}),{stdout:`Accepted dialog${a?` with "${a}"`:``}\n`,stderr:``,exitCode:0}},CC=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.enable`),await e.send(`Page.handleJavaScriptDialog`,{accept:!1})}),{stdout:`Dismissed dialog
|
|
923
|
+
`,stderr:``,exitCode:0})};function wC(e){let t=e instanceof Error?e.message:String(e);return/SyntaxError/.test(t)}function TC(e){return/\bawait\b/.test(e)||/\breturn\b/.test(e)}async function EC(e,t){try{return await e(t)}catch(n){if(!wC(n)||!TC(t))throw n;try{return await e(`(async () => (\n${t}\n))()`)}catch(r){if(!wC(r))throw r;try{return await e(`(async () => {\n${t}\n})()`)}catch(e){throw wC(e)?n:e}}}}function DC(e,t){let n=t.filename,r=t.output;return n!==void 0&&r!==void 0?{error:`${e}: --filename and --output are aliases — pass one, not both\n`}:{path:n??r}}const OC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval requires an expression
|
|
924
|
+
`,exitCode:1};let a=DC(`eval`,r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=n.join(` `),c=await i(o.targetId,async e=>{let t=await Yn(e,r),n=await EC(t?n=>e.evaluateInFrame(t.frameId,n,{world:`main`}):t=>e.evaluate(t),s);return typeof n==`string`?n:JSON.stringify(n,null,2)});return a.path?(await t.writeFile(a.path,c??`null`),{stdout:`Result saved to ${a.path}\n`,stderr:``,exitCode:0}):{stdout:(c??`undefined`)+`
|
|
925
|
+
`,stderr:``,exitCode:0}},kC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval-file requires a file path
|
|
926
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=DC(`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 EC(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
|
+
`,stderr:``,exitCode:0}};function AC(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 jC(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 MC(e,t,n){let r=``;try{r=new URL(e).hostname}catch{return{}}let i=r?lh(r):``;if(!i)return{};let a;try{a=await fh(n)}catch(e){return{warning:`playwright-cli: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}`}}let o=await jC(t),s=[];for(let e of a){if(!e.hostname||lh(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 NC(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 Xb(o,{fetchImpl:AC(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 MC(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 PC=async({fs:e,positional:t,flags:n})=>{if(t.length===0)return{stdout:``,stderr:`fetch requires a URL
|
|
928
|
+
`,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await NC(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 FC(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 IC(e){let[t,n]=ra(`Enter`);await e.send(`Input.dispatchKeyEvent`,t),await e.send(`Input.dispatchKeyEvent`,n)}async function LC(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 RC(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 LC(e,r.objectId,n)}async function zC(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 BC=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=FC(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}},VC=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 IC(e)}),{stdout:`Typed: ${a}\n`,stderr:``,exitCode:0}},HC=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],[o,s]=
|
|
962
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=
|
|
963
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=
|
|
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 IC(e),`Filled ${o} with: ${s} (in iframe)`}let l=n.refToBackendNodeId.get(o);if(l)return await RC(e,l,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await IC(e),`Filled ${o} with: ${s}`;let u=n.refToSelector.get(o);if(!u)throw Error(`Unknown ref "${o}"`);return await zC(e,u,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await IC(e),`Filled ${o} with: ${s}`})+`
|
|
960
|
+
`,stderr:``,exitCode:0}},UC=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]=ra(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}},WC=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=ia(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}},GC=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=ia(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}},KC=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=FC(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}},qC=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}},JC=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}},YC=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}},XC=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}},ZC=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 QC(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 $C(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 ew={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 tw(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return ew[t]??`application/octet-stream`}const nw=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})},rw=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=$C(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}},iw=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=$C(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}},aw=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:ow(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 ow(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 sw=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 QC(n,l),r=l.split(`/`).pop()??l;d.push({name:r,type:tw(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}},cw=e(`playwright-teleport`),lw={origin:``,localStorage:{},sessionStorage:{}};function uw(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 dw(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function fw(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function pw(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function mw(e,t,n){let r=fw(t);if(t&&r===e)return t;let i=fw(n);return n&&i===e?n:e||(t??n)}async function hw(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 cw.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),lw;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return cw.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),lw}}function gw(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 _w(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 vw(e,t,n){let r=dw(t);if(r===0)return;let i=await e.evaluate(_w(t));cw.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),cw.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function yw(e,t,n){let r=dw(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:gw(t)}),a=typeof i.identifier==`string`?i.identifier:null;return cw.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),cw.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 bw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){cw.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function xw(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 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){
|
|
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 Sw(e){return/callback|authorize\/resume|error/i.test(e)}async function Cw(e,t,n){try{let r=await xw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,cw.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){cw.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function ww(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>bw(e,r,`follower`)),cw.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){cw.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function Tw(e){return Array.isArray(e)?e:[]}const U=e(`playwright-teleport`);let Ew=null,Dw=null;function Ow(e){Ew=e}function kw(e){Dw=e}function Aw(){return Dw?.()??null}async function jw(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=>Cw(e,t,`timeout`))}catch(e){U.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await ww(e,t,`timeout`)}if(Mw(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 Mw(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 Nw(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}),Fw(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 Pw(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}),Sw(o)&&await e.withTab(r,e=>Cw(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}),Bw(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 Fw(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=lw;try{a=Tw((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=>hw(e,`leader`)),U.info(`Captured leader storage for follower`,{totalEntries:dw(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=Ew?.();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 yw(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`)&&jw(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(()=>{Pw(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 ww(e,n,`trigger-error`),n.phase=`done`,Mw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function Iw(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=Tw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?uw(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=lw;try{o=await hw(e,`follower`),U.info(`Captured follower storage for leader`,{totalEntries:dw(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 Cw(e,t,`capture`),await bw(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 Lw(e,t,n,r){try{await e.navigate(n),await vw(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 yw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await bw(e,a,`leader`)}}}async function Rw(e,t,n,r,i){let a=e.targetId,o=await yw(e,n,`leader`);try{r&&(U.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:dw(n)}),U.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:dw(n)}),await e.navigate(r))}finally{await bw(e,o,`leader`)}}async function zw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=mw(o,t.originalLeaderUrl,i),c=fw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?pw(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:dw(r)}),U.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:dw(r)}),await Lw(e,r,u,s)):await Rw(e,t,r,s,i)}),s):(U.warn(`No leader tab available for auth-state injection`),s)}async function Bw(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 Iw(e,n),o=dw(i),s=await zw(e,n,t,i,a);n.phase=`done`,Mw(n);let c=t.length>0?` (${uw(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 ww(e,n,`capture-error`),n.phase=`done`,Mw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const Vw=e(`playwright`),Hw=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){Vw.info(`Arming teleport via goto/navigate flags`),Vw.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&&(Mw(u),n.teleportWatchers.delete(o.targetId)),Nw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await NC(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}},Uw=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})},Ww=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})},Gw=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})},Kw=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})},qw=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function Jw(e,t){if(e&&qw.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 Yw(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=aC({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:Jw(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=Jw(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 Xw(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 Zw(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=Xw(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 Qw(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 $w=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),Yw(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}},eT=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),Yw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Qw(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}},tT=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),Yw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Qw(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}},nT=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),Yw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Qw(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}},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),Yw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Qw(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}},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),Yw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Qw(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=Zw(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}},aT=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}},oT=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}},sT=e(`playwright-route`),cT=[{urlPattern:`*`,requestStage:`Request`}];function lT(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function uT(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=>{sT.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=>{sT.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function dT(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:cT},t);let a,o=e=>{a&&uT(a.transport,a.sessionId,n,r,e)};try{a=aC({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:cT},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 fT=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:lT(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(`,`)&&sT.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 dT(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}},pT=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}},mT=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}},hT=`/.playwright`;function gT(e,t){return e?`${t.replace(/\/+$/,``)}${hT}`:hT}async function _T(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 vT(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 yT(e,t,n,r){await _T(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 bT(){return import(`./snapshot-features-Dopnb9Bm.js`)}async function xT(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 ST(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 CT(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 wT(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return ST(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return CT(e,i)}const TT=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 xT(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 bT();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await bT();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}},ET=async e=>{let{findHandlerImpl:t}=await bT();return t(e)},DT=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}},OT=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 kT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await wT(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 AT=new Set([`png`,`jpeg`,`webp`]);function jT(e){let t=e.type;if(t&&AT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const MT=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&&!AT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&jT(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 kT(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 bT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=jT(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 _T(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}},NT=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}},PT=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 FT(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 IT=FT(`localstorage`,`localStorage`),LT=FT(`sessionstorage`,`sessionStorage`),RT=e(`playwright`),zT={width:412,height:915,deviceScaleFactor:2.625};function BT(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;RT.info(`Arming teleport via open/tab-new flags`),RT.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&&(Mw(u),t.teleportWatchers.delete(i)),Nw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const VT=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(zT.width,zT.height,{deviceScaleFactor:zT.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){RT.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=BT(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await NC(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}},HT=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}},UT=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}},WT=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}},GT=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})},KT=e(`playwright-teleport`);function qT(){KT.info(`Listing available follower runtimes`);let e=Aw();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 JT({state:e,flags:t}){let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};KT.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(Mw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
|
|
1190
|
+
`,stderr:``,exitCode:0}}function YT(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 XT(e){return(Aw()?.()??[]).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 ZT({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=YT(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=XT(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(KT.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),Mw(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 KT.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),KT.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}`),Nw(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 QT=async e=>e.flags.list===`true`?qT():e.flags.off===`true`?JT(e):ZT(e),$T={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 eE(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return $T[t]??`application/octet-stream`}function tE(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 nE=new Map([[`teleport`,QT],[`open`,VT],[`tab-new`,VT],[`fetch`,PC],[`goto`,Hw],[`navigate`,Hw],[`snapshot`,TT],[`find`,ET],[`frames`,DT],[`screenshot`,MT],[`click`,BC],[`type`,VC],[`fill`,HC],[`eval`,OC],[`eval-file`,kC],[`press`,UC],[`keydown`,WC],[`keyup`,GC],[`go-back`,Uw],[`go-forward`,Ww],[`reload`,Gw],[`tab-list`,HT],[`tab-close`,UT],[`close`,UT],[`dblclick`,KC],[`hover`,qC],[`select`,JC],[`check`,YC],[`uncheck`,XC],[`drag`,ZC],[`resize`,GT],[`dialog-accept`,SC],[`dialog-dismiss`,CC],[`cookie-list`,hC],[`cookie-get`,gC],[`cookie-set`,_C],[`cookie-delete`,vC],[`cookie-clear`,yC],[`localstorage-list`,IT.list],[`localstorage-get`,IT.get],[`localstorage-set`,IT.set],[`localstorage-delete`,IT.del],[`localstorage-clear`,IT.clear],[`sessionstorage-list`,LT.list],[`sessionstorage-get`,LT.get],[`sessionstorage-set`,LT.set],[`sessionstorage-delete`,LT.del],[`sessionstorage-clear`,LT.clear],[`record`,aT],[`stop-recording`,oT],[`tab-select`,WT],[`pdf`,OT],[`network-state-set`,Kw],[`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=tE(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 QC(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:eE(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`,NT],[`state-load`,PT],[`console`,uC],[`requests`,$w],[`request`,eT],[`request-headers`,tT],[`request-body`,nT],[`response-headers`,rT],[`response-body`,iT],[`mousemove`,nw],[`mousedown`,rw],[`mouseup`,iw],[`mousewheel`,aw],[`drop`,sw],[`route`,fT],[`route-list`,pT],[`unroute`,mT],[`generate-locator`,bC],[`highlight`,xC]]);function rE(){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 iE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function aE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const oE=2e3;function sE(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 cE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<oE)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>=oE?`${(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 lE(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 uE(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 dE(e,t,n){let r=nE.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?uE(e,t,void 0):a}catch(r){return i?.aborted?uE(e,t,r):await lE(n.browser,n.flags,r)}}async function fE(e,t,n,r){let i=C(iE(n),aE(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 pE(e,t,n,r={}){let i=t?In(t,n):null,a=rE();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 fE(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=sE(t,p),h=na(s.env),g=gT(r.isScoop?.()??!1,h),_=await dE(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 vT(t,n,v,i,g));try{await yT(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return cE(t,m,p,_)})}const mE=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)`,[...Jg]]]);function hE(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 mE){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 gE(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:hE(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function _E(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]
|
|
@@ -1256,7 +1256,7 @@ Defaults:
|
|
|
1256
1256
|
--to /workspace/models/<repo>/
|
|
1257
1257
|
--revision main
|
|
1258
1258
|
--concurrency, -j 4 files at once
|
|
1259
|
-
--max-in-flight-mb ${
|
|
1259
|
+
--max-in-flight-mb ${oa/1048576} MB of downloads in flight at once
|
|
1260
1260
|
|
|
1261
1261
|
Notes:
|
|
1262
1262
|
- <repo> is the standard <owner>/<name> form.
|
|
@@ -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 vE(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const yE=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function bE(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 xE(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=bE(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 yE.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 SE(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 CE=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=wy(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${wy(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${SE(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${wy(t)}/s${r}\n`}};function wE(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function TE(e,t,n,r){let i=xE(e);if(`error`in i)return vE(i.error);let a=aa(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=wE(t),l=new CE(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} (${wy(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 ${SE(l.elapsedMs())} (${wy(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${wy(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}):vE(e instanceof Error?e.message:String(e))}}const EE=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function DE(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||w(n,{valueFlags:EE}))return _E(+(n.length===0));let i=n[0];return i===`download`?TE(n.slice(1),r,e,t):vE(`unknown subcommand: ${i}`)}}}const OE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function kE(e){return jn(e,OE)}function AE(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 jE(e){let t={};return e.has(`--vid`)&&(t.vendorId=AE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=AE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=AE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=AE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function ME(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 NE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function PE(e){return e.toString(16).padStart(2,`0`)}function FE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function IE(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${FE(e.usagePage)}:${FE(e.usage??0)}`;return`${e.handle}\t${FE(e.vendorId)}:${FE(e.productId)}${r}\t${t}${n}`}function LE(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 RE(e){return`${e.map(IE).join(`
|
|
1274
|
+
`)}\n`}function zE(e){return`${PE(e.reportId)} ${NE(e.bytes)}`.trimEnd()}function BE(e){return{stdout:e,stderr:``,exitCode:0}}function W(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const VE=`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 HE(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return BE(t)}return BE(e.length?`${NE(e)}\n`:``)}function UE(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function WE(e){let t=await e.list();return t.length===0?BE(`no granted HID devices
|
|
1299
|
+
`):BE(`${t.map(IE).join(`
|
|
1300
|
+
`)}\n`)}async function GE(e,t){let n=e.get(`--__resolved`),r=jE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?W(`request: missing resolved handle`):BE(RE(LE(await Promise.all(e.map(e=>t.info(e))),i)))}let a=je();return a?KE(r,i,a,t):BE(RE(LE(await t.request(r),i)))}async function KE(e,t,n,r){let i=await Mx(`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=LE(s.length>0?s:[],t);return c.length===0?W(`request: granted device could not be re-acquired`):BE(RE(c))}async function qE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),BE(``)):W(`${e}: handle required`)}async function JE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return W(`${e}: handle and report-id required`);let o=AE(a,`report-id`),s=ME(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),BE(``))}async function YE(e,t,n){let[,r,i]=e;return!r||i===void 0?W(`feature-get: handle and report-id required`):HE((await t.receiveFeatureReport(r,AE(i,`report-id`))).bytes,n)}async function XE(e,t,n){let r=e[1];if(!r)return W(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(zE(e))});try{await UE(t.signal)}finally{await a()}return BE(i.length?`${i.join(`
|
|
1301
|
+
`)}\n`:``)}async function ZE(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return W(`query: handle and report-id required`);let s=AE(o,`report-id`),c=ME(t);if(c.length>4194304)return W(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?AE(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?HE(t.bytes,!0):BE(`${zE(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function QE(e,t,n){let{positionals:r,flags:i,bools:a}=kE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return WE(n);case`request`:return GE(i,n);case`open`:case`close`:return qE(o,r,n);case`send`:case`feature-send`:return JE(o,r,t,n);case`feature-get`:return YE(r,n,s);case`watch`:return XE(r,t,n);case`query`:return ZE(r,t,i,n,s);default:return W(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function $E(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return BE(VE);let n=ti(de(),y());if(!n)return W(`WebHID is unavailable in this environment`);try{return await QE(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 eD=1e3,tD=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,nD=`${tD}
|
|
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 ${eD}, 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
|
+
`,rD=`/scoops/`;function iD(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 aD(e,t){return{name:e,uid:t===`cone`?eD:iD(e),role:t}}function oD(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function sD(e,t){return`${e}(${t})`}function cD(e){let t=oD(e),n=t[0];return`uid=${sD(e.uid,e.name)} gid=${sD(n.gid,n.name)} groups=${t.map(e=>sD(e.gid,e.name)).join(`,`)}\n`}async function lD(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(rD)?`scoop`:`cone`,r=e.env.get(`USER`)||uD(t,n);return r?aD(r,n):aD(_p(await gp(dD(e.fs))),`cone`)}function uD(e,t){return e===``?``:t===`cone`?_p(e):e.slice(8).split(`/`)[0]??``}function dD(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 fD(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?aD(t,`cone`):await e.fs.exists(`${rD}${t}`).catch(()=>!1)?aD(t,`scoop`):null}function pD(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=hD[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=mD[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 mD={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},hD={"--user":mD.u,"--group":mD.g,"--groups":mD.G,"--name":mD.n,"--real":mD.r};function gD(e,t){let n=oD(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 cD(e)}}function _D(){return S(`id`,async(e,t)=>{let n=pD(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${tD}\n`,exitCode:1};if(n.mode===`help`)return yD(nD);if(n.mode===`version`)return yD(`id (SLICC) ${$e().version}\n`);let r=n.operand===void 0?await lD(t):await fD(t,n.operand);return r?yD(gD(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function vD(){return S(`whoami`,async(e,t)=>yD(`${(await lD(t)).name}\n`))}function yD(e){return{stdout:e,stderr:``,exitCode:0}}function bD(){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 xD(e={}){return S(`imgcat`,async(t,n)=>{if(t.length===0||w(t))return bD();let r=C(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return bD();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 SD=new Set([`run`,`run-script`]),CD=new Set([`test`,`start`,`stop`,`restart`]),wD=new Set([` `,` `,`
|
|
1329
|
+
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),TD=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
|
|
1330
|
+
`]),ED=/^[A-Za-z_][A-Za-z0-9_]*=/,DD=/^[@A-Za-z0-9._-]+$/,OD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),kD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),AD=new Set([`ipx`,`npx`]);function jD(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function MD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*ND(e){let t=b(e);for(;yield t,t!==`/`;)t=Fe(t).dir}function PD(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 FD(e){return typeof e==`string`?e:void 0}async function ID(e,t){for(let n of ND(t)){let t=x(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await MD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:FD(r.name),version:FD(r.version),scripts:PD(r.scripts)}}return null}function LD(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(wD.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function RD(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(TD.has(i)){r=!0,n++;continue}let a=LD(e,n);if(a.end===a.start){n++;continue}if(r&&!ED.test(a.text)){if(kD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function zD(e,t){return!DD.test(e)||OD.has(e)||AD.has(e)?!1:!t.isRegistered(e)}async function BD(e,t){let n=RD(e).filter(e=>zD(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 VD(e){let t=[];for(let n of ND(e))t.push(x(n,`node_modules`,`.bin`));return t}function HD(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...VD(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 UD(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function WD(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 ${UD(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
|
|
1331
|
+
`)}\n`}function GD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function KD(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}GD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function qD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function JD(e,t,n,r){let i=r.length>0?` ${r.map(jD).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 YD(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 XD(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of VD(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function ZD(e,t,n,r,i,a){let o=i.exec;if(!o)return qD(e,`run requires shell exec support, which this context does not provide`);let s=XD(a.fs,t,i),c=UD(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 BD(a.body,s),{cwd:t.dir,env:HD(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 QD(e,t,n,r){let i;try{i=await ID(r.fs,n.cwd)}catch(t){return qD(e,t instanceof Error?t.message:String(t))}if(!i)return qD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=KD(t);if(o===void 0)return{stdout:WD(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await YD(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 qD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return ZD(e,i,JD(i,o,c,s),a,n,r)}const $D=()=>import(`./installer-CbjJjnwg.js`),eO=new Set([`install`,`i`,`add`]),tO=new Set([`uninstall`,`remove`,`rm`,`un`]),nO=new Set([`list`,`ls`]),rO=new Set([`-g`,`--global`,`--location=global`]),iO=[`-g`,`--global`,`-D`,`--save-dev`];function aO(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 oO(e){let t=C(e,{bool:iO,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 sO(e){let t=!1,n=[];for(let r of e){if(rO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function cO(e){return w(e)}function lO(e){return e instanceof Error?e.message:String(e)}async function uO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function dO(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(n)return cO(r)?{stdout:aO(e),stderr:``,exitCode:0}:pO(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(cO(r))return{stdout:aO(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:aO(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return eO.has(a)?pO(e,o,i,t):tO.has(a)?hO(e,o,i,t):nO.has(a)?gO(e,o,i,t):a===`root`?_O(e,o,i,t):SD.has(a)?QD(e,o,i,{fs:t.fs}):CD.has(a)?QD(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function fO(e,t,n){let{installFromManifest:r,ManifestNotFoundError:i}=await $D(),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: ${lO(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}: ${lO(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 pO(e,t,n,r){let i=oO(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 fO(e,n,r);let{installPackages:c}=await $D(),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: ${lO(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}: ${lO(t.error)}`)];return a&&l.results.length>0&&await uO(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 mO(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 hO(e,t,n,r){let{global:i,specs:a}=sO(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let{uninstallPackages:o}=await $D(),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: ${lO(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}: ${lO(t.error)}`);l.length>0&&u.push(`${e}: ${l.join(`, `)} not installed${i?` globally`:``}`);let d=s.errors.length>0;return i&&await uO(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 gO(e,t,n,r){let{global:i}=sO(t);try{let{listGlobalPackages:e,listLocalPackages:t}=await $D(),a=i?await e(r.fs):await t(r.fs,n.cwd);return{stdout:mO(i?rr:n.cwd,a),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${lO(t)}\n`,exitCode:1}}}async function _O(e,t,n,r){let{global:i}=sO(t);return{stdout:`${i?ir:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}const vO=`0.5.462`,yO=`v86 is not installed in node_modules: run \`${N} v86@${vO}\` (no network fallback)`;let bO=null;async function xO(e={}){return bO||=TO(e.ipk).catch(e=>{throw bO=null,e}),bO}const SO=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function CO(e,t){for(let{js:n,wasm:r}of SO){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 wO(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 CO(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 TO(e){if(Cr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(yO);let t=await wO(e);if(!t)throw Error(yO);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 EO(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const DO={command:`biome`,example:`biome check foo.js`,bootstrap:`${N} ${E_}`},OO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},kO={command:`puppeteer`,example:`puppeteer open https://example.com`},AO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${N} @imagemagick/magick-wasm@${Xi}`},jO={...AO,command:`magick`,example:`magick input.png output.jpg`},MO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},NO={"@biomejs/biome":DO,biome:DO,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${N} esbuild-wasm@${di}`},playwright:OO,"@playwright/test":OO,"playwright-core":OO,puppeteer:kO,"puppeteer-core":kO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:wr},"pdf-poppler":MO,"pdf-to-img":MO,pdf2pic:MO,"pdf-img-convert":MO,poppler:MO,"poppler-utils":MO,imagemagick:AO,"imagemagick-cli":AO,"imagemagick-convert":AO,"magick-cli":jO,"@imagemagick/magick-wasm":jO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${sa}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${sa}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${sa}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${sa}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${N} v86@${vO}`}};function PO(e){return Object.hasOwn(NO,e)?NO[e]:void 0}function FO(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function IO(e,t,n,r){let i=n.length?[r.command,...n].map(FO).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(FO).join(` `)}`),`${a.join(`
|
|
1415
|
+
`)}\n`}const LO=/require\(\s*["']([^"']+)["']\s*\)/;function RO(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 zO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function BO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function VO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*HO(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 UO(e,t,n,r=!1){for(let i of HO(t,r)){let t=x(i,`.bin`,n);if(!await BO(e,t))continue;let r=await zO(e,t),a=LO.exec(r),o=Fe(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function WO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function GO(e,t){if(typeof e==`string`)return{binName:WO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,WO(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 KO(e,t,n,r=!1){for(let i of HO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await BO(e,r))continue;let a;try{a=JSON.parse(await zO(e,r))}catch{return null}let o=GO(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 qO(e,t,n,r=!1){return await UO(e,t,n,r)??await KO(e,t,n,r)}async function JO(e,t,n){for(let r of HO(t))if(await BO(e,x(r,n,`package.json`)))return!0;return!1}function YO(e){return e instanceof Error?e.message:String(e)}function XO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function ZO(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:XO(e,`failed to install '${t}': ${YO(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:XO(e,`failed to install '${t}': ${YO(n)}`)}}}async function QO(e,t,n,r){return await BO(r,n)?null:await VO(r,n)?XO(e,`bin target '${n}' is a directory, not a file`):XO(e,`bin file '${n}' for '${t}' does not exist`)}async function $O(e,t,n,r,i,a){if(await JO(a.fs,i.cwd,t))return{error:XO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:PO(t);if(o)return{error:{stdout:``,stderr:IO(e,t,n,o),exitCode:1}};let s=await ZO(e,t,i,a);if(`error`in s)return s;let c=await qO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:XO(e,`package '${t}' was installed but does not expose an executable bin`)}}function ek(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:RO(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:RO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await qO(t.fs,r.cwd,c,o)}catch(t){return XO(e,YO(t))}let d=``;if(!u){if(o)return XO(e,`no global bin '${c}' found in ${ir}`);let n=await $O(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await QO(e,c,u.binFilePath,t.fs);if(f)return f;let p=si(await zO(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 tk(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-C2HoxcW5.js`);return r(t,n,e)})}const nk=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function rk(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return lk();let n=e.processManager??ik();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
|
|
1430
|
+
`,exitCode:1};let r=ak(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=ok(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
|
|
1431
|
+
`)}\n`:``,exitCode:+!i}})}function ik(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function ak(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=sk(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=ck(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}:nk.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function ok(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 sk(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 ck(e){return e===`-9`?`SIGKILL`:sk(e.slice(1))}function lk(){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 uk=[`top`,`left`,`middle`,`right`,`bottom`],dk=`usage: layout <verb> [args]
|
|
1456
1456
|
|
|
1457
1457
|
list List the built-in presets
|
|
1458
1458
|
set <preset> Switch to a built-in preset
|
|
@@ -1468,13 +1468,13 @@ Examples:
|
|
|
1468
1468
|
load <name> Restore a saved arrangement
|
|
1469
1469
|
delete <name> Delete a saved arrangement
|
|
1470
1470
|
reset Restore the default arrangement
|
|
1471
|
-
edit Alias for \`layout set ${
|
|
1471
|
+
edit Alias for \`layout set ${bs}\` (there is no edit mode)
|
|
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: ${uk.join(`, `)}
|
|
1476
|
+
`,fk=new Set([`files`,`term`,`memory`,`monitor`]),pk=`sprinkle:`;function mk(e){return e===`chat`||fk.has(e)||e.startsWith(pk)?e:`${pk}${e}`}function hk(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 gk=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function _k(e){let t=e[0],n=t?ws(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function vk(e){let t=e[0];return uk.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${uk.join(`|`)}>`}}function yk(e){let[t,n]=e;return!t||!uk.includes(n)?{error:`usage: layout open <surfaceId> <${uk.join(`|`)}>`}:{kind:`open`,surfaceId:mk(t),zone:n}}function bk(e){let t=e[0];return t?{kind:`close`,surfaceId:mk(t)}:{error:`usage: layout close <surfaceId>`}}function xk(e){let[t,n]=e;return!t||!uk.includes(n)?{error:`usage: layout move <surfaceId> <${uk.join(`|`)}>`}:{kind:`move`,surfaceId:mk(t),zone:n}}function Sk(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=hk(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 Ck(e){let t=e[0];if(!t)return{error:gk};let n={};for(let t=1;t<e.length;t+=2){let r=Sk(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:gk}:{kind:`size`,surfaceId:mk(t),size:n}}function wk(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 Tk(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function Ek(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:mk(n)}:{kind:`hide`,panelId:mk(n)}:{error:`usage: layout ${e} <panelId>`}}function Dk(){let e=ws(bs);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function Ok(e){let[t,...n]=e;switch(t){case`set`:return _k(n);case`chat`:return vk(n);case`open`:return yk(n);case`close`:return bk(n);case`move`:return xk(n);case`size`:return Ck(n);case`reset`:return{kind:`reset`};case`edit`:return Dk();case`load`:return Tk(`load`,n);case`save`:return wk(n);case`delete`:return Tk(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return Ek(`show`,n);case`hide`:return Ek(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function kk(){return S(`layout`,async e=>{if(w(e))return{stdout:e[0]?.startsWith(`-`)?dk:ot(`layout`,e[0],dk),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(Cs).join(`, `)}\ndefault: ${bs}\n`,stderr:``,exitCode:0};let t=Ok(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 Ak=ca.id;function jk(){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 Mk(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function Nk(e){return e.map(e=>` • ${e}`)}function Pk(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${Mk(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 Fk(e,t){return{stdout:[`✓ ${e}`,` runtime: ${Mk(t.runtime,!0)}`,` models: ${t.models.length}`,...Nk(t.models)].join(`
|
|
1499
1499
|
`)+`
|
|
1500
|
-
`,stderr:``,exitCode:0}}function
|
|
1500
|
+
`,stderr:``,exitCode:0}}function Ik(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${Mk(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...Nk(t.models)].join(`
|
|
1501
1501
|
`)+`
|
|
1502
|
-
`,stderr:``,exitCode:0}}function
|
|
1503
|
-
`,exitCode:1};let c=await a(s,t(
|
|
1502
|
+
`,stderr:``,exitCode:0}}function Lk(){return S(Ak,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:jk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-Cs4HX6Fx.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-BshBZAmq.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(Ak);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(Ak)??void 0);if(!c.ok)return Pk(s,c);if(o===`discover`){let e=n(Ak)??``;return i(Ak,e,s,c.models.join(`, `)),Ik(s,c)}return Fk(s,c)})}function Rk(){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 zk(e){return e.replace(/<[^>]*>/g,``).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).replace(/&/g,`&`).trimEnd()}function Bk(){let e=g();return S(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return Rk();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:zk(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 Vk(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function Hk(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 Uk(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function Wk(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 Gk(e){let t=[`total: ${wy(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(`${wy(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${Hk(e)}`)}return`${t.join(`
|
|
1510
|
+
`)}\n`}function Kk(e={}){return S(`meminfo`,async t=>{let n=Wk(t);if(`error`in n)return Vk(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??Uk();if(!r&&!e.measure)return Vk(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return Vk(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return Vk(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:Gk(a),stderr:``,exitCode:0}})}function qk(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-CpTqQO9E.js`);return n(t,e)})}function Jk(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const Yk=`/.cache/artificial-analysis.json`,Xk=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],Zk=[`--provider`];function Qk(e){return{stdout:``,stderr:e.endsWith(`
|
|
1522
|
+
`)?e:`${e}\n`,exitCode:1}}async function $k(e){try{let t=await e.readFile(Yk),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function eA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function tA(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 nA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(Yk,JSON.stringify(n))}catch{}}async function rA(e,t=!1){if(e&&!t){let t=await $k(e);if(t)return t}let n={Accept:`application/json`},r=eA();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=tA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await nA(e,c),c}function iA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function aA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=iA(e),a=t.find(e=>iA(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 oA(){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 sA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function cA(e){return`$${e.toFixed(2)}`}const lA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function uA(e){let t=`${e.id} ${e.name??``}`;return!lA.test(t)}function dA(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 fA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),dA(t)??t.replace(/-[\d.]+$/,``)}function pA(e){let t=new Map;for(let n of e){let e=fA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function mA(e,t,n,r,i){let a=i?aA(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 hA(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=`${cA(e.cost.input)} / ${cA(e.cost.output)}`,a=`${sA(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 gA(e){let t=C(e,{bool:Xk,value:Zk});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 _A(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 vA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(uA);if(o.length===0)return[];let s=o.map(e=>mA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=pA(s)),s}function yA(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 bA(e,t){if(w(e,{valueFlags:Zk}))return{stdout:oA(),stderr:``,exitCode:0};let n=gA(e);if(`error`in n)return Qk(`models: ${n.error}`);let r=await import(`./account-store-Cs4HX6Fx.js`).then(e=>e.t);if(r.getAccounts().length===0)return Qk(`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 rA(t,n.forceRefresh);e.length>0&&(l=e)}let u=_A(r,n,s);if(`error`in u)return Qk(u.error);let d=[],f=[];for(let e of u){let t=vA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return Qk(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(hA(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(yA(o,a,s,c)),{stdout:f.join(`
|
|
1540
|
+
`),stderr:``,exitCode:0})}function xA(e){return S(`models`,async t=>bA(t,e))}const SA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function CA(e){return e===`-e`||e===`--eval`||SA.has(e)||!e.startsWith(`-`)}function wA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function TA(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:wA(i)}:{inputType:i,nextIndex:a}}function EA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(CA(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=TA(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 DA(){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 OA(){return{stdout:`${xr}\n`,stderr:``,exitCode:0}}function kA(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 AA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function jA(e){return e instanceof Error?e.stack??e.message:String(e)}async function MA(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(jA(r)))throw r;return li()({source:e,filename:t,fromDir:AA(t,n)})}}async function NA(e,t,n){let r=e;try{r=await MA(e,t,n)}catch(e){return{stdout:``,stderr:`${jA(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:`${jA(e)}\n`,exitCode:1}}}async function PA(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&&SA.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 FA(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=EA(t);if(r.error)return r.error;if(r.help)return DA();if(r.version)return OA();let i=await PA(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=kA(o,r.inputType);if(l)return l;let u=si(a);return r.check?NA(u,o,n.cwd):ai(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const IA=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function LA(){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 RA=[],zA=[`--yes`];function BA(){return S(`nuke`,async e=>{if(w(e,{valueFlags:RA}))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:RA,bool:zA});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await LA(),VA(IA)})(),{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 VA(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 HA(){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 UA(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function WA(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 GA(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 KA(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 qA(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 JA(e,t,n,r){switch(t){case`list`:return WA(e,n);case`add`:return GA(e,n,r);case`remove`:return KA(e,n,r);case`clear`:return qA(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${HA()}`,exitCode:1}}}function YA(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:HA(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return UA(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-Cs4HX6Fx.js`).then(e=>e.t);try{return await JA(a,n,r,i)}catch(e){return UA(e instanceof Error?e.message:String(e))}})}function XA(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-BT443EyM.js`);return n(e,t)})}const ZA=[`--download`,`-d`,`--view`,`-v`],QA=[`--size`],$A={low:256,medium:768,high:1536};function ej(){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 tj(e){if(e in $A){let t=$A[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 nj(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 rj(){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 ij=new Set([`image/png`,`image/webp`]);function aj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function oj(e,t){let n=aj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function sj(e,t,n,r){let i=aj(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=nj(e,t)?ij.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 cj(e){let t=C(e,{bool:ZA,value:QA});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 lj(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function uj(e){return e?` (targetId: ${e})`:``}function dj(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 fj(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),lj(`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 lj(`opened ${a} → ${n}${uj(r)}`)}return G(`open: sprinkle manager not initialized
|
|
1614
|
+
`)}async function pj(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 lj(`opened ${e}${uj(r)}`)}async function mj(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=tj(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 oj(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`+rj())}let u;try{u=await sj(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 lj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function hj(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),lj(`downloaded ${t}`)}async function gj(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 lj(`opened ${e} → ${o}${uj(s)}`)}async function _j(e,t,n,r){if(!gr(e)&&e.endsWith(`.shtml`)&&t.fs)return fj(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 pj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?mj(e,i,t,n.sizeSpec):n.download?hj(e,i,t,r.hasDom):gj(i,t,r.canOpenWindow,r.openExternal)}function vj(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:QA}))return ej();let r=cj(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 ej();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:dj(e,l,u)},f=[];for(let e of s){let t=await _j(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 yj(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-DpN3NJpN.js`);return n(e,t)})}function bj(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function xj(){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 Sj(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 Cj(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 wj(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=Cj(e[++d]),t=`jpeg`;break;case`-r`:n=Sj(e[++d],`-r`);break;case`-f`:r=Sj(e[++d],`-f`);break;case`-l`:i=Sj(e[++d],`-l`);break;case`-scale-to`:a=Sj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=Sj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=Sj(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 Tj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Ej(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Dj(e){return e===`jpeg`?`jpg`:`png`}function Oj(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 kj(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 Aj(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return xj();let r;try{r=wj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await kj(n,r.inputPath),i=Dj(r.format),a=r.outputRoot??Tj(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,...Oj(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:Ej(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 jj(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Mj(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 Nj(){kw(()=>()=>re()),Ow(()=>()=>Mj(re()))}const Pj=`/workspace/.plugins/sources`;function Fj(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function Ij(e,t){let n=C(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function Lj(){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 ${Pj}/.
|
|
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 Rj(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return Fj(Lj());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await Gj(i,a,e);case`list`:case`ls`:return await Yj(i,e);case`info`:return await Xj(i,e);case`validate`:return await Zj(i,a,e,na(n?.env));case`remove`:case`rm`:case`delete`:return await Qj(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 zj(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 Bj(e,t,n){let r=$j(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 Vj(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function Hj(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${Pj}/${t.map(Vj).join(`--`)}`}async function Uj(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 Wj(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function Gj(e,t,n){if(w(e))return Fj(`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
|
+
${Pj}/ 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=Ij(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await zj(n),a=await Bj(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=Hj(a.ref),s=a.ref.display;let e=await Uj(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 Wj(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${eM(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 Wj(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await Jj(u,n),g=await qj(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),Fj(Kj(u,h,g,s??o,l.diagnostics))}function Kj(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:`,eM(i)),c.join(`
|
|
1692
1692
|
`)+`
|
|
1693
|
-
`}async function
|
|
1694
|
-
`);let n=
|
|
1693
|
+
`}async function qj(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 Jj(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 Yj(e,t){if(w(e))return Fj(`usage: plugin list
|
|
1694
|
+
`);let n=Ij(`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 Fj("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 Fj(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
|
|
1695
1695
|
`)+`
|
|
1696
|
-
`)}async function
|
|
1697
|
-
`);let n=
|
|
1696
|
+
`)}async function Xj(e,t){if(w(e))return Fj(`usage: plugin info <name>
|
|
1697
|
+
`);let n=Ij(`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 zj(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${eM(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:`,eM(c.diagnostics)),Fj(d.join(`
|
|
1698
1698
|
`)+`
|
|
1699
|
-
`)}async function
|
|
1700
|
-
`);let i=
|
|
1699
|
+
`)}async function Zj(e,t,n,r){if(w(e))return Fj(`usage: plugin validate <path|repo>
|
|
1700
|
+
`);let i=Ij(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await zj(n),o=await Bj(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/${Hj(o.ref).split(`/`).pop()}`;let e=await Uj(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 Wj(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${eM(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:`,eM(u.diagnostics)),Fj(p.join(`
|
|
1701
1701
|
`)+`
|
|
1702
|
-
`)}async function
|
|
1703
|
-
`);let n=
|
|
1702
|
+
`)}async function Qj(e,t){if(w(e))return Fj(`usage: plugin remove <name>
|
|
1703
|
+
`);let n=Ij(`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(`${Pj}/`);return c&&await Wj(await zj(t),o.root),Fj([`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 $j(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 eM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
|
|
1706
|
+
`)}const tM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],nM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],rM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},iM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],aM=[`-o`,`--columns`];function oM(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:aM}))return bM();let n=e.processManager??sM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
|
|
1707
|
+
`,exitCode:1};let r=C(t,{bool:iM,value:aM});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=nM,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=cM(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?yM(l):l.map(e=>({proc:e,depth:0})),d=lM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>fM(e,i,t,a,d));return{stdout:[uM(i,d),...f].join(`
|
|
1708
1708
|
`)+`
|
|
1709
|
-
`,stderr:``,exitCode:0}})}function
|
|
1709
|
+
`,stderr:``,exitCode:0}})}function sM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function cM(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(!tM.includes(e))return Error(`unknown column '${e}'; supported: ${tM.join(`, `)}`);n.push(e)}return n}function lM(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,hM(e).length);return{full:!0,width:r}}function uM(e,t){return e.map(e=>dM(e,t)).join(` `)}function dM(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 fM(e,t,n,r,i){return t.map(t=>pM(e,t,n,r,i)).join(` `)}function pM(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 rM[e.status];case`start`:return mM(e.startedAt);case`scoop`:return gM(e,i);case`command`:return _M(e,n,r)}}function mM(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 hM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function gM(e,t){let n=hM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function _M(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(vM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function vM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function yM(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 bM(){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 xM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function SM(e,t=xM){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 CM(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 wM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function TM(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 EM(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 DM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function OM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
|
|
1743
|
+
`,stderr:``,exitCode:0}}function kM(){return{stdout:`Python 3.14 (Pyodide)
|
|
1744
|
+
`,stderr:``,exitCode:0}}async function AM(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 jM(e){let t=TM(e),n=await Vr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Br}\n`,exitCode:1}};let r=await EM(t.reader,n);return r?r===Ar?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${DM(r,Ar)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Br}\n`,exitCode:1}}}const MM=new Set(`EsSuBIPqObdR`);function NM(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=>MM.has(e)))break;t++}return t===0?e:e.slice(t)}function PM(e,t={}){return S(e,async(n,r)=>{let i=NM(n),a=i[0];if(a===`--help`||a===`-h`)return OM();if(a===`--version`||a===`-V`)return kM();let o=await AM(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await SM(r.fs),f=CM(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??FM(),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 jM(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=wM();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()}):LM({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 FM(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let IM=null;async function LM(e){if(!IM){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);IM=new e}return ii({pm:IM,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 RM(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function zM(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 BM(){return null}function VM(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=HM(r),o=HM(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 HM(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 UM(){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 WM(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 GM(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 KM(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 qM(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 JM(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function YM(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=zM(await WM(e,a),await GM(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 qM(n,s,JM(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 XM(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=zM(await GM(t,s,o),await WM(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=JM(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await KM(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 ZM(e={}){let t=e.fs,n=e.getSendFsRequest??BM;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return UM();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=VM(e);if(`error`in i)return i.error===`__help__`?UM():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await YM(t,r,i):await XM(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function QM(){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 $M(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 eN(e){return e instanceof Error?e.message:String(e)}let tN=!1,nN=null;function rN(){return tN?Promise.resolve(speechSynthesis.getVoices()):(nN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){tN=!0,e(t);return}let n=()=>{tN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),tN=!0,e(speechSynthesis.getVoices())},1e3)}),nN)}const iN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function aN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function oN(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 sN(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 iN){let n=aN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return q(`${i} requires ${iN[i]}`);let a=oN(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 cN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function lN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>cN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await rN()).map(e=>cN({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=>cN(e)).join(`
|
|
1799
1799
|
`)+`
|
|
1800
|
-
`,stderr:``,exitCode:0}}catch(e){return q(
|
|
1800
|
+
`,stderr:``,exitCode:0}}catch(e){return q(eN(e))}}async function uN(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 rN()).map(e=>({name:e.name}));return[...n,...r]}async function dN(e,t){let n=(await uN(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 fN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:$M(t?n():e()),stderr:``,exitCode:0}}return{stdout:$M(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(eN(e))}}async function pN(e,t){return t.includes(`--list`)?lN(e):t.includes(`--status`)?fN(e,!1):t.includes(`--warmup`)?fN(e,!0):null}async function mN(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: ${eN(e)}`)}}async function hN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(eN(e))}}async function gN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(eN(e))}}async function _N(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(eN(e))}}async function vN(e,t){return e.local?gN(t):_N(e,t)}async function yN(e,t){let n=await vN(e,t);return`exitCode`in n?n:{...yi(n.bytes),stderr:``,exitCode:0}}async function bN(e,t,n,r){let i=await vN(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}: ${eN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function xN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await dN(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)?yN(e,i):n.outFile?bN(e,t,n.outFile,i):e.local?mN(i):hN(e,i)}function SN(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return QM();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 pN(n,e);if(r)return r;let i=sN(e);return`exitCode`in i?i:i.text?i.lang?xN(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):QM()})}function CN(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-DXkhPPQJ.js`);return n(e,t)})}const wN=[`--domain`],TN=[`--persist`];function EN(){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 DN(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 ON(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const kN={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},AN=new Set;function jN(e,t){if(e===t)return!0;try{return ft(e).test(t)}catch{return!1}}function MN(e,t){for(let n of e)if(jN(n,t))return!0;return!1}function NN(e){return{stdout:``,stderr:`${pt(`secret`,e)}\n`,exitCode:1}}function PN(e){let t=Oe(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??vm(t),i=e.grants??AN,a=e.broker,o=()=>(a??=hs(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(MN(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${kN[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&jN(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 FN(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 IN(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}):NN(i)}async function LN(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return NN(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 RN(e,t,n){let r=C(e.slice(1),{value:wN,bool:TN});if(`error`in r)return ON(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=FN(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?
|
|
1848
|
+
`,exitCode:1};let c=DN(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?IN(i,s,c,n):LN(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
|
|
1849
|
+
`,exitCode:1}}function zN(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}async function BN(e,t){let[n,...r]=e.slice(1),i=e=>({stdout:e,stderr:``,exitCode:0});if(n===`set`){let e=C(r,{value:wN,bool:TN}),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}=${zN(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 VN(e,t){let n=C(e.slice(1),{});if(`error`in n)return ON(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 HN(e,t){let n=C(e.slice(1),{});if(`error`in n)return ON(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 UN(e,t){let n=C(e.slice(1),{value:wN});if(`error`in n)return ON(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
|
|
1852
|
+
`,exitCode:1};let i=DN(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}):NN(a)}async function WN(e,t){let n=C(e.slice(1),{});if(`error`in n)return ON(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 GN(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return ON(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 KN(e,t){let n=C(e.slice(1),{});if(`error`in n)return ON(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?Da(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 qN(e,t){let n=C(e.slice(1),{});if(`error`in n)return ON(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 JN(e,t,n){let r=e[0];switch(r){case`set`:return RN(e,t,n);case`get`:case`read`:return VN(e,n);case`shell-env`:return BN(e,n);case`peek`:return HN(e,n);case`scope`:return UN(e,n);case`list`:return WN(e,n);case`delete`:case`rm`:return GN(e,r,n);case`test`:return KN(e,n);case`edit`:return qN(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function YN(e={}){let t=PN(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:wN}))return{stdout:EN(),stderr:``,exitCode:0};try{return await JN(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function XN(){return null}function ZN(){return null}function QN(){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 $N(e){return`error`in e}function eP(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 tP(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 nP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function rP(e,t,n){let r=tP(e,t,n);if(r)return r;let i=nP(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=eP(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
|
|
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 iP(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=rP(e[n],e[n+1],t);if($N(r))return{...t,error:r.error};n+=r.skip}return t}async function aP(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 oP(e){return`exitCode`in e}async function sP(e){let t=Ta(e)??e,n,r=ZN();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 ly();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 cP(){let e=ZN();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
|
|
1907
|
+
`,stderr:``,exitCode:0}:{stdout:uP(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:uP(n),stderr:``,exitCode:0}}function lP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function uP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${lP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function dP(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 fP(e){let t,n=ZN();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(dP).join(``)}`,stderr:``,exitCode:0}}async function pP(e){let t,n,r=ZN();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 mP(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 hP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function gP(e){let t=XN();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 _P(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function vP(e,t){if(!e)return{ok:!0};let n=await ly();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 yP(e,t,n,r,i,a,o){let s;try{s=await gP({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 ly();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await _P(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 bP(e){if(e.stop){let t=e.stop;return hP(()=>sP(t))}if(e.list)return hP(()=>cP());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 hP(()=>fP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return hP(()=>pP(t))}}function xP(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 SP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return mP(t,n)}}async function CP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return QN();let i=iP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await bP(i);if(a)return a;if(!i.directory)return QN();let o=xP(i);if(o)return o;let s=await aP(i.directory,i.entry,t.fs,t.cwd);if(oP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await SP(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 vP(!i.noBridge&&i.bridge,d);return f.ok?yP(i,c,l,f.webhookId,d,u,n):f.result}function wP(e,t){return S(`serve`,(n,r)=>CP(n,r,e,t))}const TP=`usage: session export [--id <id>] [--output <path>]
|
|
1915
|
+
`;function EP(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 DP(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${TP}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${TP}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${TP}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${TP}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${TP}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${TP}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function OP(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 Ma(`transfer-corrupt`);return r}async function kP(e,t){let n=DP(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=EP(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${TP}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await ys().export(a,{}),n=await OP(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 Ma?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function AP(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return kP(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-fxxu3Wnc.js`);return n(e,t,TP)})}function jP(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-BRFnmkzR.js`);return await n(e,t)})}const MP=`leader`;function NP(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function PP(e){return+!!e.leader+e.followers.length}function FP(){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 IP(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function LP(){return[MP,...re().map(e=>e.runtimeId)]}function RP(e){return`unknown runtime "${e}"\nknown runtimes: ${LP().join(`, `)}\nRun \`host\` to see connected followers.`}async function zP(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 BP(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function VP(e){return[...e.map(e=>({name:e,runtimeId:MP})),...NP()]}async function HP(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&&!LP().includes(r))return J(`list`,RP(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=VP([...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(...BP(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 UP(e,t){return!t||Lo(e)?null:(Ro(e,t),Lo(e)===t?t:null)}async function WP(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=UP(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&zo(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 GP(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 KP(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 qP(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 JP(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=Bo(),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
|
|
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 zo(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=Lo(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Ro(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function YP(e){let t=[];return e.leader&&t.push(MP),t.push(...e.followers),t.join(`, `)}async function XP(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&&!LP().includes(o))return J(`send`,RP(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`,RP(s.unknownRuntime));let c=PP(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`} (${YP(s)}).\n`,stderr:``,exitCode:0}}function ZP(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return FP();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:ot(`sprinkle`,n,FP().stdout),stderr:``,exitCode:0};if(n===`chat`)return zP(at(e),t);let r=IP();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
|
|
1945
|
+
`,exitCode:1};switch(n){case`list`:return HP(r,e);case`open`:return WP(r,e,t.env);case`close`:return GP(r,e);case`reload`:return KP(r,e);case`refresh`:return qP(r,e);case`route`:return JP(e);case`send`:return XP(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function QP(){return{stdout:`usage: sqlite3 [database] [sql]
|
|
1946
|
+
`,stderr:``,exitCode:0}}function $P(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 eF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function tF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function nF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function rF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(yr).join(`|`)));return t.length>0?`${t.join(`
|
|
1947
|
+
`)}\n`:``}async function iF(e,t,n){let r=await Er(),i=eF(e,n),a=await tF(r,i,n),o=a.exec(t);return await nF(a,i,n),a.close(),rF(o)}function aF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function oF(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return QP();let{database:r,sql:i}=$P(t,n);if(!i)return aF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await iF(r,i,n),stderr:``,exitCode:0}}catch(t){return aF(e,t)}})}function sF(e){return{stdout:``,stderr:e.endsWith(`
|
|
1948
|
+
`)?e:`${e}\n`,exitCode:1}}function cF(){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 lF(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 uF(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 dF(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 fF(){return S(`ssh`,async(e,t)=>{let n=dF(e);if(`help`in n)return cF();if(`error`in n)return sF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:lF(re()),stderr:``,exitCode:0};if(!n.command)return sF(`ssh: missing command
|
|
1975
|
+
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return sF(`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:uF(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 sF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function pF(e){return{stdout:``,stderr:`${pt(`sudo`,e)}\n`,exitCode:77}}function mF(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
|
|
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=tm(e[0],e.slice(1)),o=i.env?.get(im),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return pF(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 hF(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 gF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function _F(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function vF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await gF(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}': ${hF(e)}\n`}}}function yF(){return S(`rm`,async(e,t)=>{let n={recursive:_F(e,`r`)||_F(e,`R`)||e.includes(`--recursive`),force:_F(e,`f`)||e.includes(`--force`),verbose:_F(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=>vF(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 bF(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 xF(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 SF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await gF(e,r);return{stdout:n.format?`${bF(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 CF(){return S(`stat`,async(e,t)=>{let n=xF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
|
|
1994
|
+
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>SF(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 wF(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function TF(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 gF(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}': ${hF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=wF(a)}return{stdout:o,stderr:``}}function EF(){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=>TF(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 DF(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
|
|
1996
|
+
`,stderr:``,exitCode:0}}function OF(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function kF(e,t){if(e.mode)return OF(`exactly one of -c, -x, or -t is required`);e.mode=t}function AF(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const jF={c:`create`,x:`extract`,t:`list`};function MF(e,t,n,r,i){let a=jF[e];if(a)return{nextIndex:r,error:kF(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:OF(`unsupported option -${e}`)};let o=AF(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:OF(`option -${e} requires an argument`)}}function NF(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=MF(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const PF=/^[cxtzvfC]+$/;function FF(e){let t=e.length>0&&PF.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 OF(`unsupported option ${r}`);let i=NF(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function IF(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):vr(t)}function LF(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function RF(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},...LF(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},...LF(i)});for(let n of await e.fs.readdir(t))await RF(e,_r(t,n),`${a}${n}`,r)}function zF(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?fa(e):e;return da(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function BF(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 VF(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function HF(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 VF(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await VF(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await VF(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await VF(()=>c.utimes(e,n,n))}}async function UF(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 WF(e,t){if(e.paths.length===0)return OF(`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 RF(t,e,IF(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=la(n);return await t.fs.writeFile(i,e.gzip?ua(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
|
|
1997
|
+
`)}\n`:``,stderr:``,exitCode:0}}function GF(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 KF(e,t,n){if(e.paths.length>0)return OF(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=zF(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=BF(t,a,e.path);if(!n)return OF(`blocked suspicious path ${e.path}`);await UF(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await HF(t,[...GF(s),...GF(c)],GF(l),n),{stdout:e.verbose?`${o.join(`
|
|
1999
|
+
`)}\n`:``,stderr:``,exitCode:0}}function qF(e={}){return S(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return DF();let r=FF(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?OF(`-C is only supported in create or extract mode`):r.mode===`create`?WF(r,n):KF(r,n,e.fs):OF(`option -f requires an archive path`):OF(`exactly one of -c, -x, or -t is required`)})}var JF=`/**
|
|
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
|
+
`,YF=`/**
|
|
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 XF(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 ZF=`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 QF(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 $F(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 eI(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 tI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function nI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function rI(e,t,n){let r=tI(t),i=await eI(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,...nI(o)}}}function iI(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 aI(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 oI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function sI(e,t,n,r){let{outputText:i,diagnostics:a}=oI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>iI(e,t)),s=o.length>0?`${o.join(`
|
|
2843
|
+
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function cI(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}}aI(e,a);let{outputText:s,diagnostics:c}=oI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${iI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,$F(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 lI(e,t){let n;try{n=QF(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:ZF,stderr:``,exitCode:0}};let r;try{r=await hr(XF(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 uI(){return S(`tsc`,async(e,t)=>{let n=await lI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await rI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?sI(i,r,a,e):{stdout:ZF,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await cI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const dI=[`**/*.test.{js,ts}`];function fI(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 pI(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 mI(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=fI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=pI(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:[...dI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function hI(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 hI(`${r}${e}${i}`))o.push(t);return o}function gI(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 _I(e,t,n){let r=n.flatMap(hI).map(gI),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 vI=null;async function yI(e){if(vI)return vI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return vI=`
|
|
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(JF,{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(YF,{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(),vI}function bI(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 xI(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 SI(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 CI(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 xI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await SI(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 wI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=bI(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
|
|
2862
|
+
`)}}`,d=bI(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 TI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function EI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...TI}}async function DI(e,t){let n;try{n=mI(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 _I(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(XF(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await yI(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:EI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function OI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function kI(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 CI(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=wI(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||OI(g)}}function AI(){return S(`tst`,async(e,t)=>{let n=await DI(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 kI(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 jI=[],MI=`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 NI(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function PI(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:MI,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:jI})?{stdout:ot(`theme`,n,MI),stderr:``,exitCode:0}:n===`list`?FI(e):n===`current`?II(e):n===`reset`?LI(e):n===`apply`?RI(e.slice(1),t):n===`export`?zI(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${MI}`,exitCode:1}})}async function FI(e){let t=C(e.slice(1),{value:jI});if(`error`in t)return NI(`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 II(e){let t=C(e.slice(1),{value:jI});return`error`in t?NI(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
|
|
2938
|
+
`,stderr:``,exitCode:0}}async function LI(e){let t=C(e.slice(1),{value:jI});if(`error`in t)return NI(`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 RI(e,t){let n=C(e,{value:jI});if(`error`in n)return NI(`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 zI(e,t){let n=C(e,{value:jI});if(`error`in n)return NI(`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 BI=`unknown`,VI=`usage: uname [-amnorsv]`,HI=[`s`,`n`,`r`,`v`,`m`,`o`];function UI(){return{stdout:[VI,` -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 WI(){let{releasedAt:e,buildId:t}=$e();return e?`${t} (${e})`:t}function GI(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:BI}function KI(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:BI}function qI(e){switch(e){case`s`:return`SLICC`;case`n`:return Qe();case`r`:return $e().version;case`v`:return WI();case`m`:return GI();case`o`:return KI()}}function JI(e){return{stdout:``,stderr:`uname: ${e}\n${VI}\n`,exitCode:1}}function YI(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 HI)t.add(e);continue}if(!HI.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function XI(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return UI();let t=YI(e);return`error`in t?JI(t.error):{stdout:`${(t.size>0?HI.filter(e=>t.has(e)):[`s`]).map(qI).join(` `)}\n`,stderr:``,exitCode:0}})}function ZI(){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 QI(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
|
|
2951
|
+
`,stderr:``,exitCode:0}}function $I(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 eL(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 tL(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return QI();let n=$I(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 eL(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 nL=`ai-ecoverse/slicc`,rL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,iL=`packages/vfs-root`,aL=3e4,oL=[`${iL}/workspace/skills/`,`${iL}/shared/sprinkles/`,`${iL}/shared/sounds/`,`${iL}/shared/GELATIERE.md`,`${iL}/shared/wiki/WIKI.md`,`${iL}/etc/`],sL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function cL(){return Object.fromEntries(sL.map(e=>[e,0]))}function lL(e,t,n,r){let i=cL();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 uL(e){if(e[0]!==`apply`)throw Error(rL);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 dL(e){return e.startsWith(`v`)?e:`v${e}`}function fL(e){if(!oL.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 pL(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 ${aL}ms`)),aL)})])}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 mL(e,t){let n=await pL(t,`https://api.github.com/repos/${nL}/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=fL(e.path);t&&i.set(t,e.path)}return i}function hL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${nL}/${encodeURIComponent(e)}/${n}`}function gL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function _L(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function vL(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 yL(e,t,n,r,i){let a=`${t}.upgrade-${dL(n)}-to-${dL(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 bL(e,t,n,r,i,a,o){let s=await vL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:gL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(gL(i,a)||gL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(gL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(_L);if(c!==null&&l!==null&&u!==null){let i=ze(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${dL(n)}:${t}`,other:`${dL(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 yL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await yL(e.fs,t,n,r,o)}}async function xL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function SL(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 vL(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 xL(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 CL(e,t,n){let r=dL(t),i=dL(n),[a,o]=await Promise.all([mL(r,e.fetch),mL(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)?pL(e.fetch,hL(r,a.get(t))).then(e=>Se(e.body)):void 0,o.has(t)?pL(e.fetch,hL(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 bL(e,r,t,n,i,a,l));return await SL(e.fs,u),u}async function wL(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 TL(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${rL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:lL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await wL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=uL(t));let i=await CL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:lL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:lL(n,r,[],[t]),stderr:``,exitCode:1}}})}const EL=`usage: uptime [-p|--pretty] [-s|--since]`,DL=`${EL}
|
|
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
|
+
`,OL=[1,5,15],kL=6e4,AL=60*kL,jL=24*AL;function ML(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function NL(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 PL(e){let t=Math.max(0,e),n=Math.floor(t/jL),r=Math.floor(t%jL/AL),i=Math.floor(t%AL/kL),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function FL(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/jL),`day`),r(Math.floor(t%jL/AL),`hour`),r(Math.floor(t%AL/kL),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function IL(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 LL(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function RL(e,t,n){let r=OL.map(r=>NL(e,t,r*kL,n).toFixed(2));return` ${LL(t)} up ${PL(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function zL(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 BL(e={}){return S(`uptime`,async t=>{let n=zL(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${EL}\n`,exitCode:1};if(n===`help`)return{stdout:DL,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():Ca();if(n===`since`)return VL(`${IL(i)}\n`);if(n===`pretty`)return VL(`${FL(r-i)}\n`);let a=e.processManager??ML();return VL(RL(a?a.list():[],r,i))})}function VL(e){return{stdout:e,stderr:``,exitCode:0}}const HL=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function UL(e){return jn(e,HL)}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 WL(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 GL=new Set([`standard`,`class`,`vendor`]),KL=new Set([`device`,`interface`,`endpoint`,`other`]);function qL(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!GL.has(t))throw Error(`invalid --request-type: '${t}'`);if(!KL.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 JL(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 YL(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function XL(e){return`0x${e.toString(16).padStart(4,`0`)}`}function ZL(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${XL(e.vendorId)}:${XL(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 QL=`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 $L(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?`${YL(e)}\n`:``)}async function eR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
|
|
3008
|
+
`):X(`${t.map(ZL).join(`
|
|
3009
|
+
`)}\n`)}async function tR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${ZL(await t.info(n))}\n`);let r=WL(e),i=je();if(i){let e=await Mx(`usb-device`,r,i);if(e.handle)return X(`${ZL(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(`${ZL(pi(s,o))}\n`)}return X(`${ZL(await t.request(r))}\n`)}async function nR(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 rR(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 iR(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 aR(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 oR(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`):$L((await n.controlIn(i,qL(t),o)).bytes,r)}async function sR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=JL(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,qL(n),a)).bytesWritten} bytes written\n`)}async function cR(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`):$L((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function lR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=JL(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 uR(e,t,n){let{positionals:r,flags:i,bools:a}=UL(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return eR(n);case`request`:return tR(i,n);case`open`:case`close`:case`reset`:return nR(o,r,n,a);case`clear-halt`:return rR(r,n);case`select-config`:return iR(r,n);case`claim`:case`release`:return aR(o,r,n,a);case`control-in`:return oR(r,i,n,s);case`control-out`:return sR(r,t,i,n);case`transfer-in`:return cR(r,i,n,s);case`transfer-out`:return lR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function dR(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(QL);let n=Yr(de(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await uR(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 fR=`/workspace/.v86`,pR=`v86 - run an x86 virtual machine (v86 wasm engine)
|
|
3010
3010
|
|
|
3011
|
-
Requires: ${N} v86@${
|
|
3011
|
+
Requires: ${N} v86@${vO}
|
|
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 ${fR}/{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 ${fR}
|
|
3054
|
+
curl -o ${fR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3055
|
+
curl -o ${fR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3056
|
+
`,mR=`v86: BIOS images not found. Download them once:
|
|
3057
|
+
mkdir -p ${fR}
|
|
3058
|
+
curl -o ${fR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3059
|
+
curl -o ${fR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3060
|
+
or pass -bios / -vgabios with explicit VFS paths.`,hR={"-n":gR,"-name":gR,"--name":gR,"-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)=>_R(e,`cdrom`,t),"-hda":(e,t)=>_R(e,`hda`,t),"-fda":(e,t)=>_R(e,`fda`,t),"-kernel":(e,t)=>_R(e,`kernel`,t),"-initrd":(e,t)=>_R(e,`initrd`,t),"-append":(e,t)=>_R(e,`append`,t),"-bios":(e,t)=>_R(e,`bios`,t),"-vgabios":(e,t)=>_R(e,`vgabios`,t),"-state":(e,t)=>_R(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 gR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function _R(e,t,n){return e[t]=n,null}const vR=[...Object.keys(hR),`--fps`,`--tail`,`--send`,`--to`];function yR(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(hR,r)?hR[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 bR(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 xR(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 SR(e){return _a(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function CR(e){return`exitCode`in e}async function wR(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 TR={a:801,c:306,d:531};function ER(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function DR(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(pR);if(t[0]===`--version`)return OR(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:vR}))return $(ot(`v86`,r,pR,{prefix:`v86`}));let i=at(t.slice(1));try{switch(r){case`start`:return await PR(i,n,e);case`ls`:return IR();case`type`:return await BR(i,n);case`key`:return await VR(i,n);case`mouse`:return await UR(i,n);case`screenshot`:return await WR(i,n);case`text`:return await GR(i,n);case`serve`:return KR(i);case`serial`:return qR(i);case`state`:return await JR(i,n);case`stop`:return await YR(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function OR(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(bR(e))).version} (qemu-flavored CLI)\n`);let n=await wO(bR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(yO)}async function kR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await wR(t,e.bios??`${fR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(mR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await wR(t,e.vgabios??`${fR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(mR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function AR(e,t,n){let r=await kR(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 wR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=TR[e.boot]),e.state){let r=await wR(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 jR=6e4;function MR(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${jR/1e3}s`)),jR);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function NR(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 PR(e,t,n){let r=yR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(_a(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=bR(t),o=n.loadEngine?await n.loadEngine(a):await xO({ipk:a}),s={wasm_fn:EO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await AR(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??ER();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`,()=>{FR(u,d)})}ga(u);try{if(await MR(l),i.netRelay===`fetch`){let e=NR(l,n);if(e)return await FR(u,d),e}ha(u),await l.run()}catch(e){return await FR(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-16ZWsI-9.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 FR(e,t){va(e),ma(e.name),import(`./v86-16ZWsI-9.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 IR(){let e=pa();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 LR(e,t){return`prefer: computer ${e} -c ${t}\n`}async function RR(e,t,n,r){let i=SR(t);if(CR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-BteWzSfI.js`).then(e=>e.t),import(`./registry-DfuJBCKY.js`),import(`./v86-16ZWsI-9.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),zR(await a([`-c`,l,...n],e,{registry:u}),r,l)}function zR(e,t,n){let r=LR(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 BR(e,t){let{name:n,rest:r}=xR(e);if(r.length===0){let e=SR(n);return CR(e)?e:Q(`type: no text supplied`)}return RR(t,n,[`type`,`--`,...r],`type`)}async function VR(e,t){let{name:n,rest:r}=xR(e);if(r.length===0){let e=SR(n);return CR(e)?e:Q(`key: no chord supplied`)}return RR(t,n,[`key`,...r],`key`)}const HR=[`left`,`middle`,`right`];async function UR(e,t){let{name:n,rest:r}=xR(e),i=SR(n);if(CR(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?RR(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>`):RR(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!HR.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),RR(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function WR(e,t){let{name:n,rest:r}=xR(e);return RR(t,n,[`screenshot`,...r],`screenshot`)}async function GR(e,t){let{name:n}=xR(e);return RR(t,n,[`text`],`text`)}function KR(e){let{name:t}=xR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function qR(e){let{name:t,rest:n}=xR(e),r=SR(t);if(CR(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 JR(e,t){let{name:n,rest:r}=xR(e),i=SR(n);if(CR(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 YR(e,t){let{name:n,rest:r}=xR(e),i=SR(n);if(CR(i))return i;let a=t.processManager??ER();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await FR(i,a),$(`VM '${n}' stopped\n`))}function XR(e={}){return S(`wasm`,async(t,n)=>{let{runWasmCommand:r}=await import(`./run-BStZvimF.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}const ZR=[`--name`,`--filter`,`--scoop`],QR={state:`inactive`,session:null};function $R(){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 ez(e){return e().session?.webhookUrl??null}function tz(e,t,n){return t?ya(t,e):n()?ba(self.location.href,e):`(URL unavailable — connect a leader tray)`}function nz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function rz(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 iz(e,t,n){let r=C(e.slice(1),{value:ZR});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=sz(t);if(s)return s;let c=await ly();if(!c)return nz(`create`);let l=await dy(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=cz(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 az(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 ly();if(!r)return nz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
|
|
3091
|
+
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=lz(t);return{stdout:uz(i.map(e=>({id:e.id,name:e.name,url:tz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function oz(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
|
|
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 ly();if(!i)return nz(`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 sz(e){if(e.hasLocalNodeServer())return null;if(!ez(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 cz(e,t){try{return tz(e,ez(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function lz(e){try{return{trayUrlBase:ez(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function uz(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 dz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>QR)};return S(`webhook`,async(e,n)=>{if(e.length===0)return $R();let r=e[0];if(w(e,{valueFlags:r===`create`?ZR:void 0}))return $R();try{switch(r){case`create`:return await iz(e,t,n.env);case`list`:return await az(e,t);case`delete`:return await oz(e,t);case`rotate`:return await rz(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 fz(){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 pz(){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 mz=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 hz(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 gz(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 _z(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 vz(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 yz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function bz(e,t,n,r,i){let a=hz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function xz(e,t,n,r,i,a,o){let s=hz(t,n,r,e);if(!s)return{stop:!0};let c=gz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function Sz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const Cz=[(e,t,n,r)=>{if(!Sz(r,[`--close-status-code`]))return null;let i=hz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=_z(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>Sz(r,[`--close-reason`])?bz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>Sz(r,[`-B`,`--buffer-size`])?xz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>Sz(r,[`--max-messages`])?xz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>Sz(r,[`--protocol`])?bz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!Sz(r,[`--ping-interval`]))return null;let i=hz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>Sz(r,[`--conn-timeout`])?xz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>Sz(r,[`-H`,`--header`])?bz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function wz(e,t,n,r){for(let i of Cz){let a=i(e,t,n,r);if(a)return a}return null}function Tz(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 Ez(e){let t=fz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(mz.has(r)||mz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(vz(t,r)||yz(t,r))continue;let i=wz(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 Tz(t),t}function Dz(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 Oz(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 kz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function Az(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 jz=1e4;function Mz(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function Nz(){let e=!1,t=Mz();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function Pz(e,t){return e.length?e.join(t)+t:``}function Fz(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 Iz(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function Lz(e,t){e.verbose<1||(e.customHeaders.length>0&&Iz(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&&Iz(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&Iz(e,t,`-k/--insecure has no effect in browsers`))}function Rz(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 zz(e,t,n,r){if(n.outLines.length<jz){n.outLines.push(r);return}n.droppedForOverflow===0&&Iz(e,t,`output buffer reached ${jz} 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 Bz(e,n,r){let{bytes:i,isBinary:a}=Az(r);return i.length>e.bufferSize&&(Iz(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):kz(i)}function Vz(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function Hz(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function Uz(e,t){setTimeout(()=>{Hz(t,e.closeStatus??1e3,e.closeReason)},0)}function Wz(e,t,n){let r=Dz(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=Oz(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function Gz(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&Uz(t,e)}async function Kz(e,t,n){let r=[];Lz(e,r);let i=e.nullTerminated?`\0`:`
|
|
3146
|
+
`,a=Rz(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=Mz(),u=Nz(),d=0,f=!1,p=setTimeout(()=>{f=!0,Hz(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}Hz(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=Bz(e,r,t.data);zz(e,r,s,n)}s.received+=1,Vz(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(Iz(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&&Iz(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:Pz(s.outLines,i),stderr:Fz(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&Uz(e,o):Gz(o,e,Wz(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&Iz(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:Pz(s.outLines,i),stderr:Fz(r),exitCode:h}}function qz(e){return{stdout:``,stderr:e,exitCode:2}}function Jz(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function Yz(e,t,n={}){let r=Ez(e);if(r.showHelp)return pz();if(r.error)return qz(r.error);if(!r.url)return qz(`websocat: missing ws:// or wss:// URL (use --help for usage)
|
|
3147
|
+
`);if(!/^wss?:\/\//i.test(r.url))return qz(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=Jz(n);return i?Kz(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
|
|
3148
|
+
`,exitCode:1}}function Xz(){return S(`websocat`,async(e,t)=>Yz(e,{stdin:P(t.stdin)}))}function Zz(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const Qz={commands:new Map,collisions:[]};async function $z(e,t){let n=or(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?lr(e.fs,n):Qz}async function eB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?bi(e.fs):new Map}async function tB(e){return e.scriptCatalog?e.scriptCatalog.getWasmCommands():new Map}function nB(e,t){let n=e.script?`script`:`wasm`;return`${e.glue} (${n}, ${e.pkg}${t?`, ${t}`:``})`}function rB(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 ${nB(r)})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)a.push(` (shadowed ${t})`)}return a}function iB(e,{collision:t,wasm:n,wf:r}){let i=[e];for(let e of t?.shadowedPaths??[])i.push(` (shadowed ${e})`);return n&&i.push(` ${nB(n,`shadowed by .jsh`)}`),r&&i.push(` ${r.path} (workflow, shadowed by .jsh)`),i}function aB(e,t,n,r,i){let{jshPath:a,wasm:o,wf:s}=t;if(n.has(e))return{lines:rB(e,t),found:!0};if(a)return{lines:iB(a,t),found:!0};if(o){let e=[nB(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 oB(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 $z(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await eB(t),u=await tB(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=aB(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 sB=`__slicc_workflows`,cB=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 lB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function uB(e){let t=mB(e);return t===null?{name:null,description:null}:{name:hB(t,`name`),description:hB(t,`description`)}}function dB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function fB(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${dB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function pB(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 mB(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 hB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const gB=e(`workflow-command`),_B=`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.`,vB=new Set([`list`,`status`,`stop`,`save`]);function yB(){return globalThis[sB]}function bB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function xB(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 SB(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=bB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=xB(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 CB(e={}){return S(`workflow`,async(t,n)=>{if(vB.has(t[0])&&w(t.slice(1)))return{stdout:_B+`
|
|
3293
|
+
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return kB(t,n);if(t[0]===`save`)return OB(t,n,e);let r=SB(t);if(r.help)return{stdout:_B+`
|
|
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=uB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
|
|
3296
|
+
`,exitCode:1};let s=lB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=lB(),u=fB({prelude:cB,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?wB(u,a,l,o,n):TB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function wB(e,t,n,r,i){let a;try{a=await ai(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return gB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return AB(r,a,n)}async function TB(e){let t=yB();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 EB=/^[a-z0-9][a-z0-9-]*$/,DB=`/workspace/.workflows`;async function OB(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(!EB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=yB()?.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=`${DB}/${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(DB,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){gB.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 kB(e,t){let n=yB();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 AB(e,t,n){let{result:r,log:i,hadResult:a}=pB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?jB(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 jB(e){return e.split(`
|
|
3307
3307
|
`).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
|
|
3308
|
-
`)}function
|
|
3308
|
+
`)}function MB(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function NB(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 PB(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function FB(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function IB(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function LB(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?PB(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 RB(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+=PB(e[i+r],n);r+=a+`
|
|
3311
|
+
`}return r}function zB(e,t,n,r){let i=Array.from(e,e=>`0x${PB(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 BB(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 VB(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 HB={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},UB=[{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 WB(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=HB[r];if(i){t[i]=!0;continue}let a=UB.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=NB(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 GB(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function KB(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 qB(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?RB(t,a,e.upper):e.include?zB(t,a,e.upper,i?null:IB(r??``)):LB(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function JB(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 YB(){return S(`xxd`,async(e,t)=>{if(GB(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.`,xB=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=WB(e)}catch(e){return MB(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await KB(t,r,a)}catch{return MB(`${r}: No such file or directory`)}if(n.revert){let e=FB(o),r=n.plain?BB(e):VB(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:FB(r),stderr:``,exitCode:0}}let{data:s,base:c}=JB(n,o),l=qB(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 XB(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 XB(e,i,s,r)}return a}function ZB(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
|
|
3325
|
+
`,stderr:``,exitCode:0}}function QB(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return ZB();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 XB(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 $B(e){let t;return S(`mcp`,async(n,r)=>{if(!t){let{createMcpCommand:n}=await import(`./mcp-command-BqHFwAvU.js`);t=n({fs:e.fs,scriptCatalog:e.scriptCatalog,connectionManager:e.mcpConnectionManager})}return t.execute(n,r)})}function eV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function tV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[dO(`ipk`,r),dO(`npm`,r),dO(`i`,r),ek(`ipx`,{fs:t,fetch:n}),ek(`npx`,{fs:t,fetch:n}),sb(`di`,{fs:t,fetch:n}),sb(`uv`,{fs:t,fetch:n}),TL({fs:t,fetch:n})]}function nV(e){let t={buildProcessConfig:e.buildProcessConfig};return[`python3`,`python`,`pyodide`].map(e=>PM(e,t))}function rV(e){let t=e.scriptCatalog;return{buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:t&&(()=>t.getWasmCommands()),gitIdentity:e.gitIdentity}}function iV(e={}){let t=[gE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),ae(),fF(),jP(),wP(e.browserAPI,e.fs),vj(e.browserAPI),Sy(e.browserAPI),xD(e),QB(),tL(),qF(e.fs?{fs:e.fs}:{}),yF(),EF(),CF(),_v(),XR(rV(e)),HS(rV(e)),YB(),oF(`sqlite3`),oF(`sqllite`),uI(),AI(),Cx(),$_(),FA({buildProcessConfig:e.buildProcessConfig}),FA({buildProcessConfig:e.buildProcessConfig},`jsh`),...nV(e),...tV(e),...e.fs?[VS({fs:e.fs})]:[],...e.fs?[qk({fs:e.fs})]:[],...e.fetch?[DE({fetch:e.fetch,streamFetch:e.streamFetch})]:[],gS(),_S(),kS(),dz(e.webhook),Xz(),xy(e.crontask),$B(e),Rj({fs:e.fs,fetch:e.fetch}),BS(),ZP(),yj(),bj(`pdftk`),bj(`pdf`),ev(`biscotto`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),ev(`biscotti`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Aj(`pdftoppm`),Aj(`pdftocairo`),jj(`pdftotext`),ay(`convert`),ay(`magick`),oB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),PI(),XI(),_D(),vD(),ZI(),Jk(),RM(),Bk(),Jb(),XA(),YA(),Lk(),YN(eV(e)),Am(e.gitCredential),ZM({fs:e.fs}),CN(),mv(),hv(),gv(`xclip`),gv(`xsel`),SN(),rC(),Gg(),Kg(),xA(e.fs),st(),BA(),qg({getParentJid:e.getParentJid}),nx(),oM({processManager:e.processManager}),BL({processManager:e.processManager}),rk({processManager:e.processManager}),tk({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Yg(),Kk(),kk(),dR(),$E(),iS(),DR({processManager:e.processManager}),bv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),hS(),sv({registry:e.cherryRuntimeRegistry}),jy(),Ly({fs:e.fs}),Ry({fs:e.fs}),mF(e.sudoCommand),CB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),Zz(),AP()];return e.fs&&(Nj(),t.push(...Gn.map(t=>pE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let aV=null;function oV(e){aV=e}function sV(e){aV?.(e)}var cV=zt();const lV={user:`user`,home:hp},uV=new Set([`root`,`nobody`,`nogroup`]),dV=/^[A-Za-z_][A-Za-z0-9_.-]*$/;function fV(e){return{user:dV.test(e.user)&&!uV.has(e.user)?e.user:lV.user,home:e.home.startsWith(`/`)&&!/[:\n]/.test(e.home)?e.home:lV.home}}function pV(e,t){let{user:n,home:r}=fV(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 _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(
|
|
3329
|
+
`)}function mV(e,t=lV){let n=pV(e,t);return n===void 0?void 0:new TextEncoder().encode(n)}function hV(e){return e===`/etc`?[`group`,`passwd`]:[]}function gV(e){return e?.code===`ENOENT`}const _V=Reflect.get(tt,`DefenseInDepthBox`);function vV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function yV(e,t){if(typeof e!=`string`)return e;let n=vV(t);if(n===`binary`||n===`latin1`){let t=ye(e);if(t)return t}return cV.Buffer.from(e,n)}function bV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}function xV(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 SV(e,t){let n=hV(e).filter(e=>!t.includes(e));return n.length?[...t,...n].sort():t}function CV(e,t){let n=hV(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 wV=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 mV(e,this.identityFn?.()??lV)}isVirtualBinCommand(e){return e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e)}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=bV(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:xV(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=_V?.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=vV(t),a=cV.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=bV(e);if(t.startsWith(`/usr/bin/`)&&this.isVirtualBinCommand(t.slice(9)))return xV(t.slice(9));let n;try{n=await this.vfs.readFile(e,{encoding:`binary`})}catch(t){let n=this.identityFile(e);if(n&&gV(t))return n;throw t}return n instanceof Uint8Array?n:new TextEncoder().encode(n)}identityStat(e,t){let n=this.identityFile(e);if(!(!n||!gV(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 cV.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,yV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),yV(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(bV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return SV(t,n.map(e=>e.name));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),SV(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(bV(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 CV(t,this.mapFastEntriesToDirents(n));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),CV(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||!gV(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 hV(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 TV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?TV(e.getUnderlyingFS?.()):null}async function EV(e){let t=ve(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function DV(){let e=ve(`github`);if(!e)return xm;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??xm,...t??[]]}const OV=e(`almost-bash-shell`),kV=`__SLICC_RUN_PID`,AV=`__SLICC_OUTPUT_TEE__`;function jV(e){let t=e?.get(kV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function MV(e){if(!(kV in e)&&!(AV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[kV]:t,[AV]:n,[im]:r,[jt]:i,[Nt]:a,...o}=e;return o}function NV(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 PV=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(jV(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:hp,PATH:sr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return iV({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:DV},gitIdentity:()=>this.gitCommands.identity(),mcpConnectionManager:e.mcpConnectionManager})}constructor(t){this.options=t,this.vfsAdapter=new wV(t.fs),this.progress=new yp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new sp({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:EV}),this.mountCommands=new Ps({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Fm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=TV(i)??TV(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:wp(this.progress)}),l=_({progress:wp(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),kh(t.fs),Eg(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:Gp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:lp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(Um),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 gp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=_p(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){OV.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(sV(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=om(e),s={env:{...this.lastEnv,...n===void 0?{}:{[kV]:String(n)},...i===void 0?{}:{[AV]:i},...o?{[im]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=NV([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=MV(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-BStZvimF.js`),c=om(e),l={...this.lastEnv,...n===void 0?{}:{[kV]:String(n)},...c?{[im]:c}:{}},u=i===void 0?void 0:this.outputTees.get(i),d=await mp(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=fp(s(d.state.env,l),[kV,im,AV])),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()||bm.has(e))return null;let r=await this.gateCommandDispatch(e,t,n[im]);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`?Yp(t,this.progress):Zp(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(AV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await $p(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(AV);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=Bp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Hp(t,this.progress,Vp(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()||bm.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(im))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=tm(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await rm(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(bm.get(e)??e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)OV.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(jV(i.env)))}let s=(await t.getWasmCommands()).get(r);if(s){let{runWasmCommand:n}=await import(`./run-BStZvimF.js`);return n(s.script?[r,...e]:[`--argv0`,s.argv0,`--module`,s.wasm,s.glue,...s.args??[],...e],i,{processConfig:this.buildJshProcessConfig(jV(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?vp(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{Ma as _,pB as a,Sa as b,Ts as c,ms as d,fs as f,Oa as g,Lo as h,lB as i,vs as l,Ko as m,wV as n,sB as o,qo as p,oV as r,hp as s,PV as t,hs as u,ja as v,jo as y};
|