sliccy 6.238.1 → 6.238.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/.vite/manifest.json +177 -177
- package/dist/ui/assets/SKILL-C-CvOwkC.js +1 -0
- package/dist/ui/assets/{account-store-C4jFzcnJ.js → account-store-31cxummp.js} +1 -1
- package/dist/ui/assets/{account-store-BCtXK44B.js → account-store-CLw42Fru.js} +1 -1
- package/dist/ui/assets/{adobe-C4ooMe21.js → adobe-BAOdeR6A.js} +1 -1
- package/dist/ui/assets/{adobe-DemK72Ow.js → adobe-pjfER-WX.js} +1 -1
- package/dist/ui/assets/{agent-panels-CSihjufA.js → agent-panels-ClWyfRiy.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-MaULAwCk.js → almost-bash-shell-headless-HcCFdtfi.js} +507 -507
- package/dist/ui/assets/{apply-layout-CtPcVAlt.js → apply-layout-DtU7s70A.js} +1 -1
- package/dist/ui/assets/{azure-openai-Cgukt6kz.js → azure-openai-16OjK7MW.js} +1 -1
- package/dist/ui/assets/{azure-openai-D3kSXfVg.js → azure-openai-2TldVerJ.js} +1 -1
- package/dist/ui/assets/{cdp-yUs7BKnl.js → cdp-PMwUQne0.js} +1 -1
- package/dist/ui/assets/{cerebras-CXUqbHeU.js → cerebras-CZvVC6ct.js} +1 -1
- package/dist/ui/assets/{cerebras-DKNgM2vX.js → cerebras-Q_C5CmzI.js} +1 -1
- package/dist/ui/assets/{composer-speech-DKdxsF9o.js → composer-speech-B0V8REcq.js} +1 -1
- package/dist/ui/assets/{connect-surface-DaUDdGjw.js → connect-surface-BGMEPn4t.js} +1 -1
- package/dist/ui/assets/{directed-approval-o-AaFndq.js → directed-approval-pLlyTlwa.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-fuZPCx2X.js → emscripten-vfs-hook-H9599noy.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-BTgbp54d.js → frozen-archive-writer-YfpsS6Au.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-C_Ae4LbS.js → gelatiere-unit-DoZciEc0.js} +1 -1
- package/dist/ui/assets/{github-Dio3imoh.js → github-B0GZ69T6.js} +1 -1
- package/dist/ui/assets/{github-BA6d9eht.js → github-C0JkJ4-X.js} +1 -1
- package/dist/ui/assets/{github-copilot-jJPLzphe.js → github-copilot-6zjU0UsW.js} +1 -1
- package/dist/ui/assets/{github-copilot-QflVq9Sv.js → github-copilot-DbVywZN-.js} +1 -1
- package/dist/ui/assets/{hear-B3M8eRJT.js → hear-PNcT_h1V.js} +1 -1
- package/dist/ui/assets/{help-DcgBLrYQ.js → help-Dgedzig_.js} +7 -5
- package/dist/ui/assets/{js-realm-worker-DRt9zLrg.js → js-realm-worker-DPtEPsQE.js} +2 -2
- package/dist/ui/assets/{jsh-executor-Cd1GQ0OP.js → jsh-executor-qcdlZs_U.js} +2 -2
- package/dist/ui/assets/{kernel-worker-my32WaPE.js → kernel-worker-CkGJtXT8.js} +9 -9
- package/dist/ui/assets/{lick-ws-bridge-7CqP4WuI.js → lick-ws-bridge-BRyT27BZ.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-K4Z32oej.js → lick-ws-bridge-DCphRN_U.js} +1 -1
- package/dist/ui/assets/{live-session-curation-DDbemDZ6.js → live-session-curation-NUhwcw--.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-DvDg9OPs.js → live-session-snapshot-BeRCm1Nl.js} +1 -1
- package/dist/ui/assets/{local-llm-BIaPO0CA.js → local-llm-BXkyCJ_z.js} +1 -1
- package/dist/ui/assets/{local-llm-CRo-6fGR.js → local-llm-CtOUVB_I.js} +1 -1
- package/dist/ui/assets/{main-DDVh6Avm.js → main-Dz8oxllC.js} +3 -3
- package/dist/ui/assets/{main-cherry-DqfkS0P5.js → main-cherry-BIyXJ_3M.js} +1 -1
- package/dist/ui/assets/{mcp-command-Btiuj-jI.js → mcp-command-DFAER6FF.js} +9 -9
- package/dist/ui/assets/{memory-curation-seam-aAPl5vkT.js → memory-curation-seam-DbGKr9Qe.js} +1 -1
- package/dist/ui/assets/{memory-health-Dk9_Owqi.js → memory-health-DhHUtC2W.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-2vEawCxj.js → memory-write-execute-CBCk5a7F.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-DtJKmur-.js → merge-folded-cost-into-frozen-Dw-_UA2z.js} +1 -1
- package/dist/ui/assets/{new-session-Dyoiqjx7.js → new-session-BUSZCuxQ.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-BHaGmQuH.js → oauth-bootstrap-D8AxQ1UY.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-B6ttynZz.js → onboarding-orchestrator-DLdo_5OL.js} +1 -1
- package/dist/ui/assets/{openai-codex-LQisGyNi.js → openai-codex-BWfnGR1c.js} +1 -1
- package/dist/ui/assets/{openai-codex-DD78zvo0.js → openai-codex-C6EGG09A.js} +1 -1
- package/dist/ui/assets/{openrouter-DpgNQbmE.js → openrouter-Cd4M2AC9.js} +1 -1
- package/dist/ui/assets/{openrouter-BSo_vl4k.js → openrouter-Cnz8aWy1.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CQQJEFzf.js → openrouter-free-CWrvYeNH.js} +1 -1
- package/dist/ui/assets/{openrouter-free-B_GqODIL.js → openrouter-free-P0Xql0dR.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-CHeVt7YP.js → openrouter-oauth-CpETMetI.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BnJMmgE0.js → openrouter-oauth-DhzFBQj1.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-CatvINmN.js → panel-rpc-handlers-2KrUyWoh.js} +2 -2
- package/dist/ui/assets/{panelize-shell-Nh9snCaw.js → panelize-shell-BDbzN4ZN.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-DLSOh-vn.js → pi-edit-execution-DruO8N4U.js} +1 -1
- package/dist/ui/assets/{provider-BWoACff3.js → provider-C-FUejo2.js} +1 -1
- package/dist/ui/assets/{provider-D1tmekEg.js → provider-DqpPcXNC.js} +1 -1
- package/dist/ui/assets/{provider-settings-BIeT1Kq1.js → provider-settings-BvpuRRhI.js} +1 -1
- package/dist/ui/assets/provider-store-access-CTsEO0b_.js +1 -0
- package/dist/ui/assets/provider-store-access-DXdBN4uE.js +1 -0
- package/dist/ui/assets/{providers-BAE1vIhe.js → providers-00axKtF9.js} +1 -1
- package/dist/ui/assets/{providers-DuWMGRl5.js → providers-jD6rCt0u.js} +2 -2
- package/dist/ui/assets/{quick-llm-Dl2K77Gl.js → quick-llm-Cx7uDkYg.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-CoEb-6j3.js → realm-inprocess-dFpgqzhW.js} +2 -2
- package/dist/ui/assets/{realm-unhandled-rejections-CYuXlq1n.js → realm-unhandled-rejections-Blp7ZN8C.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-ptnmwsDO.js → realm-unhandled-rejections-DtlG5cWZ.js} +1 -1
- package/dist/ui/assets/{recovery-screen-Dy45LlR9.js → recovery-screen-CBqYteQO.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-4M1-99_r.js → remote-terminal-view-X7kW2LxE.js} +2 -2
- package/dist/ui/assets/{restore-weSKzOvD.js → restore-BqarpWVq.js} +1 -1
- package/dist/ui/assets/{run-Dfqc_wPL.js → run-BL31T-_Z.js} +2 -2
- package/dist/ui/assets/{run-BluNZqg2.js → run-Bmg4J98v.js} +1 -1
- package/dist/ui/assets/{run-_Bioonv1.js → run-CcKwxzLY.js} +1 -1
- package/dist/ui/assets/{run-DvNJEF6S.js → run-DvuN8Fn9.js} +2 -2
- package/dist/ui/assets/{run-CAk52sqo.js → run-l4-ivwOu.js} +1 -1
- package/dist/ui/assets/{session-command-memory-D4W3vYO0.js → session-command-memory-_ama7cso.js} +2 -2
- package/dist/ui/assets/{session-jsonl-Ddr8h01D.js → session-jsonl-CXVf4Wha.js} +1 -1
- package/dist/ui/assets/{session-jsonl-DQLn7BhM.js → session-jsonl-deH2Aa3g.js} +1 -1
- package/dist/ui/assets/{session-search-index-CPuVujaI.js → session-search-index-DF1RrbAV.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-BEN7v8wL.js → setup-feature-flags-remote-DVMDmUlc.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-kHlvq1OQ.js → setup-model-catalog-spckEhB7.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-D70ksoq1.js → silent-renew-backoff-cI7-L6ZH.js} +1 -1
- package/dist/ui/assets/slicc-version-CnSXxWG8.js +1 -0
- package/dist/ui/assets/{snapshot-DOcF3hJX.js → snapshot-HHgn9isb.js} +5 -5
- package/dist/ui/assets/{snapshot-features-DS-wngT-.js → snapshot-features-C59UnBDa.js} +1 -1
- package/dist/ui/assets/{soundscape-B6zBj4Iv.js → soundscape-BiMkGsdL.js} +1 -1
- package/dist/ui/assets/{speak-C-SrEuoh.js → speak-4zKEV89Z.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-DgZx1uoa.js → sprinkle-manager-fCGR1PM3.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-k7sbHOXk.js → sprinkle-renderer-Dz9sFggb.js} +1 -1
- package/dist/ui/assets/{state-vriQRO0O.js → state-Dx_7TiP6.js} +1 -1
- package/dist/ui/assets/{sudo-D7vpuQ10.js → sudo-DIy3Tv_K.js} +1 -1
- package/dist/ui/assets/{supervisor-Dt8Pw9d3.js → supervisor-jHdimydd.js} +1 -1
- package/dist/ui/assets/{sync-dialog-DpwDmSDa.js → sync-dialog-DRMVOJG5.js} +1 -1
- package/dist/ui/assets/{transformers-env-C0Yb__tm.js → transformers-env-x-PCt3wI.js} +1 -1
- package/dist/ui/assets/{tray-leader-BbkPYZsT.js → tray-leader-C5LqCGmj.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-DYyVe7iD.js → tray-leave-runtime-BlIyiXG2.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-DUD4cDKg.js → tray-sidecar-B-QapNna.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-r5LC465b.js → upgrade-detection-CJITafNt.js} +1 -1
- package/dist/ui/assets/{validate-args-BcxRh84E.js → validate-args-hQ6FqlWN.js} +1 -1
- package/dist/ui/assets/{voice-reply-DpcyhU9z.js → voice-reply-Cd-5pJIs.js} +1 -1
- package/dist/ui/assets/{wc-attach-xRsI6vlF.js → wc-attach-CC-5pK7A.js} +2 -2
- package/dist/ui/assets/{wc-browser-LUPp8FMq.js → wc-browser-Db8oxDQT.js} +1 -1
- package/dist/ui/assets/{wc-computers-CiIA2mic.js → wc-computers-CZPS1Eh7.js} +1 -1
- package/dist/ui/assets/{wc-detached-DokY3p96.js → wc-detached-DWYp5wAP.js} +1 -1
- package/dist/ui/assets/{wc-extension-CL7ZNW5r.js → wc-extension-5IglZTwJ.js} +2 -2
- package/dist/ui/assets/{wc-follower-BqChAtCl.js → wc-follower-9iDYp3OE.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-JD5VOYTd.js → wc-follower-oauth-QbGGYO0B.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-DNCUwAp1.js → wc-gelatiere-BjdhvBxs.js} +1 -1
- package/dist/ui/assets/{wc-live-DT9MR1Sa.js → wc-live-BFxhQ5Xo.js} +5 -5
- package/dist/ui/assets/{wc-nav-BD-jmYJB.js → wc-nav-DLvCv4mT.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-CXO7WSqh.js → wc-onboarding-CJR0jxsa.js} +2 -2
- package/dist/ui/assets/{wc-permissions-CZneIa8b.js → wc-permissions-osnYtYLb.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-BOHp8Moc.js → wc-placeholder-C4ikML_h.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-DmgBT7Kf.js → wc-secret-request-B3lpntmP.js} +1 -1
- package/dist/ui/assets/{wc-settings-C4PfwLyN.js → wc-settings-C4ZOprvY.js} +3 -3
- package/dist/ui/assets/{wc-shell-FF40TncL.js → wc-shell-Cx3tnmkh.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-CbT6ZrWU.js → wc-shortcut-config-Cs8WeBXf.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-8eWRimnm.js → wc-sprinkles-DGi3j1Ev.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-DYad8Flt.js → wc-transcript-export-Uk4DpVPz.js} +2 -2
- package/dist/ui/assets/{wc-tray-BUqNTlRe.js → wc-tray-DselVbJr.js} +4 -4
- package/dist/ui/assets/welcome-detection-CN0SSbnT.js +1 -0
- package/dist/ui/assets/{whisper-session-SIUgaNPF.js → whisper-session-BtQ1Vj74.js} +2 -2
- package/dist/ui/assets/{xai-grok-CFA2nbp5.js → xai-grok-0uY_cbQl.js} +1 -1
- package/dist/ui/assets/{xai-grok-DyihJR2q.js → xai-grok-BYbyfA0E.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/SKILL-BOv2yBlr.js +0 -1
- package/dist/ui/assets/provider-store-access-BoYpv_zg.js +0 -1
- package/dist/ui/assets/provider-store-access-C-XzgW97.js +0 -1
- package/dist/ui/assets/slicc-version-BH37H7i7.js +0 -1
- package/dist/ui/assets/welcome-detection-DNCtOSRv.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-BCtXK44B.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"./sha256-DynDhwRL.js";import{t as te}from"./runtime-env-DadgceZk.js";import{t as ne}from"./slugify-BYJ6QVAt.js";import{i as re,n as ie,r as ae,t as oe}from"./host-command-CvUauhDf.js";import{a as se,c as ce,d as y,f as le,i as ue,l as de,n as fe,o as pe,p as me,r as he,s as ge,t as _e,u as ve}from"./snapshot-DOcF3hJX.js";import{n as ye,t as b}from"./panel-rpc-accessor-B4BfPLSo.js";import{a as be,c as xe,n as Se,o as Ce,s as we,t as Te}from"./feature-flags-QlgHaQc1.js";import{t as Ee}from"./providers-BAE1vIhe.js";import{r as De}from"./binary-cache-bSOhqXB1.js";import{i as Oe,n as ke,r as Ae}from"./fetch-body-CuwTaJC_.js";import{s as je,t as Me}from"./api-endpoint-D8lUKmPu.js";import{t as Ne}from"./compat-nGhSz-U1.js";import"./core-C1m4D34S.js";import{n as Pe,t as Fe}from"./mime-types-D7IV6i7k.js";import{n as Ie,t as Le}from"./float-topology-COIC4j_U.js";import{t as Re}from"./secrets-bridge-client-GOCzDscb.js";import{a as ze,i as Be,n as Ve,r as He}from"./tool-ui-DRnUkp2g.js";import{a as Ue,i as We,n as x,t as S}from"./path-utils-DNJG-zQf.js";import{n as Ge,r as Ke,t as qe}from"./merge-file-core-VJlzucJY.js";import{n as Je,t as Ye}from"./types-D8gIX-W-.js";import{i as Xe}from"./mount-index-CQfmUPuZ.js";import{a as Ze,i as Qe,n as $e,o as et,s as tt,t as nt}from"./signed-fetch-DeDG40wV.js";import{o as rt}from"./mount-table-store-DrF_Ifaz.js";import{t as it}from"./remote-cache-UwMD8EkX.js";import{n as at}from"./fs-D_cFUSir.js";import{a as ot}from"./tray-leader-status-CpkFr6n7.js";import{n as st,t as ct}from"./slicc-version-BH37H7i7.js";import{a as lt,i as ut,o as dt,r as C,t as ft}from"./browser-CGX7MbCQ.js";import{t as w}from"./subcommand-flags-BZi7j78Q.js";import{n as pt,r as mt,t as T}from"./subcommand-help-CgO7wRS5.js";import{n as ht}from"./cost-command-TMcbUPyN.js";import{d as gt,g as _t,i as vt,n as yt,o as bt}from"./sudoers-BdBYQPUn.js";import{t as xt}from"./sudo-refusal-DVwTXFRE.js";import{n as St}from"./types-Dj5TU-Qg.js";import{a as Ct,c as wt,i as Tt,l as Et,n as Dt,o as Ot,r as kt,t as At}from"./types-JfhqX7lD.js";import{n as E,t as jt}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as Mt}from"./html-B_Hg2WOy.js";import{n as Nt}from"./llm-session-id-CKpY5F_-.js";import{t as Pt}from"./src-CUSndb9K.js";import{i as Ft,o as It}from"./browser-DuyhpHbR.js";import{a as Lt,c as Rt,i as zt,n as Bt,o as Vt,s as Ht,t as Ut}from"./pipe-status-BBrT3VeG.js";import{i as Wt,r as Gt,t as Kt}from"./mount-picker-popup-BMils9JY.js";import{t as qt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Jt,B as D,C as Yt,D as O,E as Xt,F as Zt,G as Qt,H as k,I as A,J as $t,K as en,L as tn,M as nn,N as rn,O as an,P as on,R as sn,S as cn,T as ln,U as un,V as dn,W as fn,Y as pn,_ as mn,a as hn,b as gn,c as _n,d as vn,f as yn,g as bn,h as xn,i as Sn,j as Cn,k as wn,l as Tn,m as En,n as Dn,o as On,p as j,q as kn,r as An,s as jn,t as Mn,u as Nn,v as Pn,w as Fn,x as In,y as Ln,z as Rn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{C as zn,S as M,a as Bn,b as Vn,c as Hn,d as Un,f as Wn,g as Gn,i as Kn,l as qn,m as Jn,n as Yn,o as Xn,p as Zn,r as Qn,s as $n,t as er,u as tr,x as nr,y as N}from"./state-vriQRO0O.js";import{a as rr,i as ir,r as ar,t as or}from"./git-config-Bdgu8kD2.js";import{a as P,i as sr,r as cr,t as lr}from"./just-bash-compat-B-SPHuh_.js";import{h as ur,i as dr,r as fr}from"./stdio-tty-CipJs8Mm.js";import{i as pr,r as mr}from"./global-prefix-DqCuANmV.js";import{t as hr}from"./wasm-programs-Bd5YaoqY.js";import{a as gr,n as _r,o as vr,r as yr,s as br}from"./jsh-discovery-CnvNKojr.js";import{C as xr,a as Sr,b as Cr,c as wr,d as Tr,f as Er,h as Dr,i as Or,l as kr,m as Ar,n as jr,o as Mr,p as Nr,r as Pr,s as Fr,t as F,u as Ir,v as Lr,y as Rr}from"./shared-D-ZRFYou.js";import{_ as zr,a as Br,b as Vr,d as Hr,f as Ur,g as Wr,h as Gr,i as Kr,l as qr,m as Jr,p as Yr,r as Xr,s as Zr,u as Qr,v as $r,y as ei}from"./require-guards-dUdxJmkR.js";import{_ as ti,a as ni,b as ri,c as ii,d as ai,f as oi,g as si,h as ci,l as li,m as ui,n as di,p as fi,s as pi,t as mi,u as hi,v as gi,x as _i,y as vi}from"./jsh-executor-Cd1GQ0OP.js";import{n as yi,t as bi}from"./esbuild-wasm-DeTghvWH.js";import{n as xi}from"./wasm-compiler-Ct7QZURL.js";import{a as Si,o as Ci,s as wi,t as Ti}from"./usb-device-registry-DFzxaOky.js";import{i as Ei,r as Di,t as Oi}from"./script-catalog-D5joO5l7.js";import{a as ki,c as Ai,o as ji,s as Mi,t as Ni}from"./types-Dzr0qYl3.js";import{a as Pi,c as Fi,d as Ii,f as Li,n as Ri,r as zi,u as Bi}from"./github-zip-CMSbKC3q.js";import{i as Vi,t as Hi}from"./github-auth-D-_-pCrt.js";import{a as Ui,i as Wi,o as Gi,r as Ki,t as qi}from"./provenance-DdmsQ3Nr.js";import{a as Ji,c as Yi,i as Xi,n as Zi,o as Qi,r as $i,s as ea}from"./github-install-NHKpL-_w.js";import{n as ta,t as na}from"./magick-wasm-BbnwhVj1.js";import{i as ra,n as ia,r as aa,t as oa}from"./pdf-raster-BWk6ezTX.js";import{n as sa}from"./lick-target-env-8JxfVcIV.js";import{t as ca}from"./tmpdir-env-ate4iNcK.js";import{n as la,t as ua}from"./keyboard-TcuVIW9F.js";import{n as da,t as fa}from"./hf-defaults-BwJdGLgk.js";import{t as pa}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as ma}from"./local-llm-CRo-6fGR.js";import{i as ha,n as ga,r as _a,t as va}from"./tar-BWIPCxI2.js";import{a as ya,c as ba,i as xa,o as Sa,r as Ca,s as wa}from"./v86-vm-DCm7zA2r.js";import{n as Ta,r as Ea}from"./lick-urls-CgPiVwD-.js";let Da=null;function Oa(e){Da=e!==null&&Number.isFinite(e)&&e>0?e:null}function ka(){if(Da!==null)return Da;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const Aa=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function ja(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=Aa.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 Ma(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 Na(e,t){return e.some(e=>Ma(e,t))}const Pa=`slicc-transcript`,Fa=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],Ia=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 La(e){return Ia.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Ra=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const za=new Set(Fa),Ba=/^[0-9a-fA-F]{64}$/,Va=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function I(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ha(e){return typeof e==`string`&&Ba.test(e)}function Ua(e){return Va.test(e)&&Number.isFinite(Date.parse(e))}function Wa(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 Ga(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Wa(n,t)}:{ok:!0}}function Ka(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 qa(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 Ja(e,t){if(!I(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ga(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?qa(e,t):n}function Ya(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 Xa(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 Za(e,t){let n=Ya(e,t);if(!n.ok)return n;let r=e.cost;return I(r)?Xa(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Qa(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`?Ua(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 $a(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 eo(e,t){let n=e.usage;return n===void 0?{ok:!0}:I(n)?Za(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function to(e,t){if(!I(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ga(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=$a(e,t);if(!n.ok)return n}let r=Qa(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=Ka(i,Ja,`${t}.content`);return a.ok?eo(e,t):a}function no(e,t){if(!I(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=Ga(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Ka(r,to,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function ro(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 io(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`}:Ha(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 ao=[`attachment-file-missing`,`attachment-association-unavailable`];function oo(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Ga(e.missingReason,ao,`${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 so(e,t){return e.present?io(e,t):oo(e,t)}function co(e,t){if(!I(e))return{ok:!1,error:`${t} must be a non-null object`};let n=ro(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=Ga(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?so(e,t):r}function lo(e,t){let n=Ga(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 uo(e,t){if(!I(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=Ga(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return I(r)?lo(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function fo(e,t){return I(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 po(e,t){return typeof e!=`string`||!za.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function mo(e){if(!I(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 I(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 ho(e){if(!I(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Ga(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Ka(e.missing,po,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function go(e){if(!I(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=Ga(e.state,[`active`,`frozen`],`session.state`);return t.ok?ho(e.completeness):t}function _o(e){if(!I(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(!I(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Ka(n,uo,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function vo(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Ka(t,no,`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=Ka(r,fo,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Ka(a,co,`attachments`):{ok:!1,error:`attachments must be an array`}}function yo(e){let t=new Set,n=new Set;for(let r of e){if(!I(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(!(!I(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 bo(e){for(let t of e){if(!I(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(!I(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 xo(e){let t=[];for(let n of e){if(!I(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)I(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function So(e){let t=new Set;for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of xo(e))t.add(n)}return t}function Co(e,t){for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!I(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 wo(e){return Co(e,So(e))}function To(e,t){for(let n of e){if(!I(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 Eo(e,t){for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!I(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=To(e,t);if(!r.ok)return r}}return{ok:!0}}function Do(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);return Eo(e,n)}function Oo(e){let t=new Map;for(let n of e){if(!I(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)I(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function ko(e,t){let n=Oo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!I(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 Ao(e){let t=new Map;for(let n of e){if(!I(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(xo(e)))}return t}function jo(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!I(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 Mo(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);return jo(e,n,Ao(t))}function No(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 Po(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!I(r))continue;let i=r.target;if(!I(i))continue;let a=No(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function Fo(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=yo(t);if(!o.ok)return o;let s=bo(t);if(!s.ok)return s;let c=wo(t);if(!c.ok)return c;let l=Do(t,n);if(!l.ok)return l;let u=ko(n,t);if(!u.ok)return u;let d=Mo(r,t);return d.ok?Po(a,n):d}function Io(e){let t=vo(e);return t.ok?Fo(e):t}function Lo(e){if(!I(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=mo(e.export);if(!t.ok)return t;let n=go(e.session);if(!n.ok)return n;let r=_o(e.privacy);return r.ok?Io(e):r}async function Ro(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:et});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:zo(a),sourceUrl:a}}function zo(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Bo=`slicc-sprinkle-routes`;function Vo(){try{let e=localStorage.getItem(Bo);return e?JSON.parse(e):{}}catch{return{}}}function Ho(e){try{localStorage.setItem(Bo,JSON.stringify(e))}catch{}}function Uo(e){return Vo()[e]}function Wo(e,t){let n=Vo();n[e]=t,Ho(n)}function Go(e){let t=Vo();delete t[e],Ho(t)}function Ko(){return Vo()}function qo(e,t,n){return wt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Jo(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(qo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Yo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Jo(t,`browser`,Dt,e.browser),network:Jo(t,`network`,Ct,e.network),secrets:Jo(t,`secrets`,Ot,e.secrets),devices:Jo(t,`devices`,kt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Jo(t,`mounts`,Tt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Jo(t,`approvals`,At,e.approvals)}}function Xo(e={}){return Yo({adapter:`connect`,pageGestures:e.pageGestures})}function Zo(e){let t=jt(()=>import(`./extension-ops-OtrqWANJ.js`).then(t=>t.createExtensionOps(e)));return Yo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>E(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>E(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>E(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>E(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>E(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>E(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>E(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Qo(e={}){let t=jt(()=>import(`./rest-ops-j0P6ql7f.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Yo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>E(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>E(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>E(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>E(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>E(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>E(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>E(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function $o(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Qo({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Zo({adapter:e,pageGestures:n});case`connect`:return Xo({pageGestures:n})}}const es=e(`quick-llm`);async function ts(e){let t=f();if(!t)return es.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?as(n,e.modelId)??as(n,r):ns(n,r),!i)return es.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`]=os());try{let n=(await Ne(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 es.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function ns(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=is(r.id),a=n.filter(e=>rs(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function rs(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 is(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 as(e,t){return p(e).find(e=>e.id===t)}function os(){return Nt(`ui-quick-llm`)}const ss=e(`sudo-suggest`),cs=[`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 fs=e(`sudo:capability-gesture`);function ps(e,t={}){let n=t.suggest??us;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 fs.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),St();if(!e)return fs.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),St();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?Et(o.value,a):(fs.warn(`capability broker approvals.request failed — denying`,{message:o.message}),St())}}}const ms=e(`sudo:tray-first`);function hs(e,t={}){let n=t.suggest??us,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 St();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){ms.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 _s(e?.decision,o)}catch(e){ms.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}const gs=[`user-timeout`,`cone-timeout`,`unavailable`];function _s(e,t){if(!e||typeof e!=`object`)return St();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 St();let i=gs.find(e=>e===n.reason);return i?{decision:`deny`,reason:i}:{decision:`deny`}}function vs(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ys(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var bs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ys,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(ae(`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 xs(e){return re(Ss(e))}function Ss(e){let t=ps(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:hs(t)}let Cs=null;function ws(e){return Cs=e,()=>{Cs===e&&(Cs=null)}}function Ts(){if(!Cs)throw new Ra(`session-not-found`);return Cs}const Es=`focus`,Ds={type:`leaf`,surfaceId:`chat`};function Os(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 ks={focus:{name:`focus`,tree:Os({left:Ds},{left:3,middle:1})}};function As(e){return ks[e]??null}const js=`progress`;async function Ms(){try{let e=await Gt();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 Kt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Wt(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Ns(){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 Ps(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 Kt(r.idbKey);if(!i)throw Error(`no directory handle found in storage`);return await Wt(i),i}function Fs(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 Is(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 Ls=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function Rs(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;Ls.has(n)&&t++}return!1}function zs(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Bs=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=Fs(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=ze();if(!n){let n=await Vs(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=ye()?null:b(),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=te()?await Ms():r?await Ps(r,e):await Ns();let a=Xe.fromHandle(i,{mountId:rt()});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=rt(),i=new it({mountId:r,ttlMs:3e4}),a=new Qe({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??$e(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??nt(),i=Is(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 Ro(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=rt(),c=new it({mountId:s,ttlMs:3e4}),l={source:a===`aem`?zs(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 tt(l):new Ze(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(Rs(e))return n===`umount`?this.umountHelp():this.help();let r=Fs(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-CLw42Fru.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"./sha256-DynDhwRL.js";import{t as te}from"./runtime-env-DadgceZk.js";import{t as ne}from"./slugify-BYJ6QVAt.js";import{i as re,n as ie,r as ae,t as oe}from"./host-command-CvUauhDf.js";import{a as se,c as ce,d as y,f as le,i as ue,l as de,m as fe,n as pe,o as me,p as he,r as ge,s as _e,t as ve,u as ye}from"./snapshot-HHgn9isb.js";import{n as be,t as b}from"./panel-rpc-accessor-B4BfPLSo.js";import{a as xe,c as Se,n as Ce,o as we,s as Te,t as Ee}from"./feature-flags-QlgHaQc1.js";import{t as De}from"./providers-00axKtF9.js";import{r as Oe}from"./binary-cache-bSOhqXB1.js";import{i as ke,n as Ae,r as je}from"./fetch-body-CuwTaJC_.js";import{s as Me,t as Ne}from"./api-endpoint-D8lUKmPu.js";import{t as Pe}from"./compat-nGhSz-U1.js";import"./core-C1m4D34S.js";import{n as Fe,t as Ie}from"./mime-types-D7IV6i7k.js";import{n as Le,t as Re}from"./float-topology-COIC4j_U.js";import{t as ze}from"./secrets-bridge-client-GOCzDscb.js";import{a as Be,i as Ve,n as He,r as Ue}from"./tool-ui-DRnUkp2g.js";import{a as We,i as Ge,n as x,t as S}from"./path-utils-DNJG-zQf.js";import{n as Ke,r as qe,t as Je}from"./merge-file-core-VJlzucJY.js";import{n as Ye,t as Xe}from"./types-D8gIX-W-.js";import{i as Ze}from"./mount-index-CQfmUPuZ.js";import{a as Qe,i as $e,n as et,o as tt,s as nt,t as rt}from"./signed-fetch-DeDG40wV.js";import{o as it}from"./mount-table-store-DrF_Ifaz.js";import{t as at}from"./remote-cache-UwMD8EkX.js";import{n as ot}from"./fs-D_cFUSir.js";import{a as st}from"./tray-leader-status-CpkFr6n7.js";import{n as ct,t as lt}from"./slicc-version-CnSXxWG8.js";import{a as ut,i as dt,o as ft,r as C,t as pt}from"./browser-CGX7MbCQ.js";import{t as w}from"./subcommand-flags-BZi7j78Q.js";import{n as mt,r as ht,t as T}from"./subcommand-help-CgO7wRS5.js";import{n as gt}from"./cost-command-TMcbUPyN.js";import{d as _t,g as vt,i as yt,n as bt,o as xt}from"./sudoers-BdBYQPUn.js";import{t as St}from"./sudo-refusal-DVwTXFRE.js";import{n as Ct}from"./types-Dj5TU-Qg.js";import{a as wt,c as Tt,i as Et,l as Dt,n as Ot,o as kt,r as At,t as jt}from"./types-JfhqX7lD.js";import{n as E,t as Mt}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as Nt}from"./html-B_Hg2WOy.js";import{n as Pt}from"./llm-session-id-CKpY5F_-.js";import{t as Ft}from"./src-CUSndb9K.js";import{i as It,o as Lt}from"./browser-DuyhpHbR.js";import{a as Rt,c as zt,i as Bt,n as Vt,o as Ht,s as Ut,t as Wt}from"./pipe-status-BBrT3VeG.js";import{i as Gt,r as Kt,t as qt}from"./mount-picker-popup-BMils9JY.js";import{t as Jt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Yt,B as D,C as Xt,D as O,E as Zt,F as Qt,G as $t,H as k,I as A,J as en,K as tn,L as nn,M as rn,N as an,O as on,P as sn,R as cn,S as ln,T as un,U as dn,V as fn,W as pn,Y as mn,_ as hn,a as gn,b as _n,c as vn,d as yn,f as bn,g as xn,h as Sn,i as Cn,j as wn,k as Tn,l as En,m as Dn,n as On,o as kn,p as j,q as An,r as jn,s as Mn,t as Nn,u as Pn,v as Fn,w as In,x as Ln,y as Rn,z as zn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{C as Bn,S as M,a as Vn,b as Hn,c as Un,d as Wn,f as Gn,g as Kn,i as qn,l as Jn,m as Yn,n as Xn,o as Zn,p as Qn,r as $n,s as er,t as tr,u as nr,x as rr,y as N}from"./state-Dx_7TiP6.js";import{a as ir,i as ar,r as or,t as sr}from"./git-config-Bdgu8kD2.js";import{a as P,i as cr,r as lr,t as ur}from"./just-bash-compat-B-SPHuh_.js";import{h as dr,i as fr,r as pr}from"./stdio-tty-CipJs8Mm.js";import{i as mr,r as hr}from"./global-prefix-DqCuANmV.js";import{t as gr}from"./wasm-programs-Bd5YaoqY.js";import{a as _r,n as vr,o as yr,r as br,s as xr}from"./jsh-discovery-CnvNKojr.js";import{C as Sr,a as Cr,b as wr,c as Tr,d as Er,f as Dr,h as Or,i as kr,l as Ar,m as jr,n as Mr,o as Nr,p as Pr,r as Fr,s as Ir,t as F,u as Lr,v as Rr,y as zr}from"./shared-D-ZRFYou.js";import{_ as Br,a as Vr,b as Hr,d as Ur,f as Wr,g as Gr,h as Kr,i as qr,l as Jr,m as Yr,p as Xr,r as Zr,s as Qr,u as $r,v as ei,y as ti}from"./require-guards-dUdxJmkR.js";import{_ as ni,a as ri,b as ii,c as ai,d as oi,f as si,g as ci,h as li,l as ui,m as di,n as fi,p as pi,s as mi,t as hi,u as gi,v as _i,x as vi,y as yi}from"./jsh-executor-qcdlZs_U.js";import{n as bi,t as xi}from"./esbuild-wasm-DeTghvWH.js";import{n as Si}from"./wasm-compiler-Ct7QZURL.js";import{a as Ci,o as wi,s as Ti,t as Ei}from"./usb-device-registry-DFzxaOky.js";import{i as Di,r as Oi,t as ki}from"./script-catalog-D5joO5l7.js";import{a as Ai,c as ji,o as Mi,s as Ni,t as Pi}from"./types-Dzr0qYl3.js";import{a as Fi,c as Ii,d as Li,f as Ri,n as zi,r as Bi,u as Vi}from"./github-zip-CMSbKC3q.js";import{i as Hi,t as Ui}from"./github-auth-D-_-pCrt.js";import{a as Wi,i as Gi,o as Ki,r as qi,t as Ji}from"./provenance-DdmsQ3Nr.js";import{a as Yi,c as Xi,i as Zi,n as Qi,o as $i,r as ea,s as ta}from"./github-install-NHKpL-_w.js";import{n as na,t as ra}from"./magick-wasm-BbnwhVj1.js";import{i as ia,n as aa,r as oa,t as sa}from"./pdf-raster-BWk6ezTX.js";import{n as ca}from"./lick-target-env-8JxfVcIV.js";import{t as la}from"./tmpdir-env-ate4iNcK.js";import{n as ua,t as da}from"./keyboard-TcuVIW9F.js";import{n as fa,t as pa}from"./hf-defaults-BwJdGLgk.js";import{t as ma}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as ha}from"./local-llm-CtOUVB_I.js";import{i as ga,n as _a,r as va,t as ya}from"./tar-BWIPCxI2.js";import{a as ba,c as xa,i as Sa,o as Ca,r as wa,s as Ta}from"./v86-vm-DCm7zA2r.js";import{n as Ea,r as Da}from"./lick-urls-CgPiVwD-.js";let Oa=null;function ka(e){Oa=e!==null&&Number.isFinite(e)&&e>0?e:null}function Aa(){if(Oa!==null)return Oa;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ja=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function Ma(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ja.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 Na(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 Pa(e,t){return e.some(e=>Na(e,t))}const Fa=`slicc-transcript`,Ia=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],La=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 Ra(e){return La.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var za=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Ba=new Set(Ia),Va=/^[0-9a-fA-F]{64}$/,Ha=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function I(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ua(e){return typeof e==`string`&&Va.test(e)}function Wa(e){return Ha.test(e)&&Number.isFinite(Date.parse(e))}function Ga(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 Ka(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ga(n,t)}:{ok:!0}}function qa(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 Ja(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 Ya(e,t){if(!I(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ka(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?Ja(e,t):n}function Xa(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 Za(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 Qa(e,t){let n=Xa(e,t);if(!n.ok)return n;let r=e.cost;return I(r)?Za(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function $a(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`?Wa(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 eo(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 to(e,t){let n=e.usage;return n===void 0?{ok:!0}:I(n)?Qa(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function no(e,t){if(!I(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ka(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=eo(e,t);if(!n.ok)return n}let r=$a(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=qa(i,Ya,`${t}.content`);return a.ok?to(e,t):a}function ro(e,t){if(!I(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=Ka(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?qa(r,no,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function io(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 ao(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`}:Ua(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 oo=[`attachment-file-missing`,`attachment-association-unavailable`];function so(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Ka(e.missingReason,oo,`${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 co(e,t){return e.present?ao(e,t):so(e,t)}function lo(e,t){if(!I(e))return{ok:!1,error:`${t} must be a non-null object`};let n=io(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=Ka(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?co(e,t):r}function uo(e,t){let n=Ka(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 fo(e,t){if(!I(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=Ka(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return I(r)?uo(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function po(e,t){return I(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 mo(e,t){return typeof e!=`string`||!Ba.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function ho(e){if(!I(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 I(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 go(e){if(!I(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Ka(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?qa(e.missing,mo,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function _o(e){if(!I(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=Ka(e.state,[`active`,`frozen`],`session.state`);return t.ok?go(e.completeness):t}function vo(e){if(!I(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(!I(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?qa(n,fo,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function yo(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=qa(t,ro,`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=qa(r,po,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?qa(a,lo,`attachments`):{ok:!1,error:`attachments must be an array`}}function bo(e){let t=new Set,n=new Set;for(let r of e){if(!I(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(!(!I(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 xo(e){for(let t of e){if(!I(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(!I(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 So(e){let t=[];for(let n of e){if(!I(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)I(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function Co(e){let t=new Set;for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of So(e))t.add(n)}return t}function wo(e,t){for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!I(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 To(e){return wo(e,Co(e))}function Eo(e,t){for(let n of e){if(!I(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 Do(e,t){for(let n of e){if(!I(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!I(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=Eo(e,t);if(!r.ok)return r}}return{ok:!0}}function Oo(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);return Do(e,n)}function ko(e){let t=new Map;for(let n of e){if(!I(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)I(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function Ao(e,t){let n=ko(t);for(let t=0;t<e.length;t++){let r=e[t];if(!I(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 jo(e){let t=new Map;for(let n of e){if(!I(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(So(e)))}return t}function Mo(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!I(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 No(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);return Mo(e,n,jo(t))}function Po(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 Fo(e,t){let n=new Set;for(let e of t)I(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!I(r))continue;let i=r.target;if(!I(i))continue;let a=Po(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function Io(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=bo(t);if(!o.ok)return o;let s=xo(t);if(!s.ok)return s;let c=To(t);if(!c.ok)return c;let l=Oo(t,n);if(!l.ok)return l;let u=Ao(n,t);if(!u.ok)return u;let d=No(r,t);return d.ok?Fo(a,n):d}function Lo(e){let t=yo(e);return t.ok?Io(e):t}function Ro(e){if(!I(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=ho(e.export);if(!t.ok)return t;let n=_o(e.session);if(!n.ok)return n;let r=vo(e.privacy);return r.ok?Lo(e):r}async function zo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:tt});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:Bo(a),sourceUrl:a}}function Bo(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Vo=`slicc-sprinkle-routes`;function Ho(){try{let e=localStorage.getItem(Vo);return e?JSON.parse(e):{}}catch{return{}}}function Uo(e){try{localStorage.setItem(Vo,JSON.stringify(e))}catch{}}function Wo(e){return Ho()[e]}function Go(e,t){let n=Ho();n[e]=t,Uo(n)}function Ko(e){let t=Ho();delete t[e],Uo(t)}function qo(){return Ho()}function Jo(e,t,n){return Tt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Yo(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(Jo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Xo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Yo(t,`browser`,Ot,e.browser),network:Yo(t,`network`,wt,e.network),secrets:Yo(t,`secrets`,kt,e.secrets),devices:Yo(t,`devices`,At,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Yo(t,`mounts`,Et,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Yo(t,`approvals`,jt,e.approvals)}}function Zo(e={}){return Xo({adapter:`connect`,pageGestures:e.pageGestures})}function Qo(e){let t=Mt(()=>import(`./extension-ops-OtrqWANJ.js`).then(t=>t.createExtensionOps(e)));return Xo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>E(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>E(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>E(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>E(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>E(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>E(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>E(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function $o(e={}){let t=Mt(()=>import(`./rest-ops-j0P6ql7f.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Xo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>E(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>E(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>E(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>E(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>E(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>E(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>E(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function es(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return $o({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Qo({adapter:e,pageGestures:n});case`connect`:return Zo({pageGestures:n})}}const ts=e(`quick-llm`);async function ns(e){let t=f();if(!t)return ts.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?os(n,e.modelId)??os(n,r):rs(n,r),!i)return ts.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`]=ss());try{let n=(await Pe(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 ts.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function rs(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=as(r.id),a=n.filter(e=>is(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function is(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 as(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 os(e,t){return p(e).find(e=>e.id===t)}function ss(){return Pt(`ui-quick-llm`)}const cs=e(`sudo-suggest`),ls=[`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
|
+
`),us=[`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 ds(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`?ls:us,i=null;try{i=await ns({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){cs.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return fs(i)||n}function fs(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 ps=e(`sudo:capability-gesture`);function ms(e,t={}){let n=t.suggest??ds;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 ps.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),Ct();if(!e)return ps.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),Ct();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?Dt(o.value,a):(ps.warn(`capability broker approvals.request failed — denying`,{message:o.message}),Ct())}}}const hs=e(`sudo:tray-first`);function gs(e,t={}){let n=t.suggest??ds,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 Ct();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){hs.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 vs(e?.decision,o)}catch(e){hs.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}const _s=[`user-timeout`,`cone-timeout`,`unavailable`];function vs(e,t){if(!e||typeof e!=`object`)return Ct();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 Ct();let i=_s.find(e=>e===n.reason);return i?{decision:`deny`,reason:i}:{decision:`deny`}}function ys(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function bs(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var xs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??bs,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(ae(`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 Ss(e){return re(Cs(e))}function Cs(e){let t=ms(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:gs(t)}let ws=null;function Ts(e){return ws=e,()=>{ws===e&&(ws=null)}}function Es(){if(!ws)throw new za(`session-not-found`);return ws}const Ds=`focus`,Os={type:`leaf`,surfaceId:`chat`};function ks(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 As={focus:{name:`focus`,tree:ks({left:Os},{left:3,middle:1})}};function js(e){return As[e]??null}const Ms=`progress`;async function Ns(){try{let e=await Kt();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 qt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Gt(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Ps(){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 Fs(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 qt(r.idbKey);if(!i)throw Error(`no directory handle found in storage`);return await Gt(i),i}function Is(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 Ls(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 Rs=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function zs(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;Rs.has(n)&&t++}return!1}function Bs(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Vs=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=Is(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=Be();if(!n){let n=await Hs(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=be()?null:b(),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=te()?await Ns():r?await Fs(r,e):await Ps();let a=Ze.fromHandle(i,{mountId:it()});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=it(),i=new at({mountId:r,ttlMs:3e4}),a=new $e({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??et(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??rt(),i=Ls(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 zo(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=it(),c=new at({mountId:s,ttlMs:3e4}),l={source:a===`aem`?Bs(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 nt(l):new Qe(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(zs(e))return n===`umount`?this.umountHelp():this.help();let r=Is(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(zs(e))return this.help();let n=Is(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=Is(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
|
|
13
|
+
`,stderr:``,exitCode:0}}};async function Hs(e){let t=`pendingMount:term:${e}`,n;try{n=await qt(t)}catch{return null}if(!n)return null;try{await Gt(n)}catch{return null}return Ze.fromHandle(n,{mountId:it()})}async function Us(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 Ws(e,t,a);else if(o.includes(`.`))await Gs(e,t,a);else if(i)await Ks(e,t,a);else for(let n of o)await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:n,force:a});return{stdout:``,stderr:``,exitCode:0}}async function Ws(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&(a===0?await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}async function Gs(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&a!==0&&await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n})}async function Ks(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[i,a,o,s]of r)a!==0&&o!==s&&(o===0?await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}const qs={boolean:[`dry-run`,`force`,`d`,`x`,`X`,`quiet`],alias:{n:`dry-run`,f:`force`,q:`quiet`}},L={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:qs,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`}}},Js=/^(--?)([^=]+)(=.*)?$/;function Ys(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 Xs(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 Zs(){let e=new Set([`c`,`C`,`git-dir`,`work-tree`]);for(let t of Object.values(L))for(let n of Xs(t))e.add(n);return e}function Qs(e,t,n){for(let r of e){if(!t.has(r))return r;if(n.has(r))return}}function $s(e,t){let n=Ys(t),r=Xs(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=Js.exec(t);if(!i)continue;let o=i[2];if(i[1]===`-`&&o.length>1&&!i[3]&&!n.has(o)){let e=Qs(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 ec(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function tc(e,t){if(!t)return;let n=$s(e,t);return n?ec(n):void 0}function R(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 nc(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 rc(e,t){if(!(e instanceof Error))return ac(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=>rc(e,t)).join(`
|
|
15
|
+
`)}return ac(nc(e.message)??e.message,t)}function ic(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 ac(e,t){if(!/\b401\b|Unauthorized/i.test(e))return e;if(t!==void 0){if(!ic(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 oc={refresh:!1},sc=new Set([`never`,`false`,`0`,`off`,`no`]),cc=new Set([`always`,`true`,`1`,`on`,`yes`]),lc=/^(--?)([^=]+)(=.*)?$/,uc=Zs();function dc(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 fc(e){let t,n=e.indexOf(`--`),r=n===-1?e:e.slice(0,n);for(let e=0;e<r.length;e++){if(mc(r,e))continue;let n=r[e];if(n===`--no-color`){t=`never`;continue}if(n===`--color`){t=`always`;continue}n.startsWith(`--color=`)&&(t=dc(n.slice(8))??t)}return t}function pc(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(mc(e,r,t)){n.push(i);continue}if(i.startsWith(`--color=`)){let e=hc(i.slice(8));e&&n.push(e);continue}n.push(i)}return n}function mc(e,t,n=-1){if(t===0||n!==-1&&t-1>=n)return!1;let r=e[t-1],i=lc.exec(r);return!i||i[3]?!1:uc.has(i[2])}function hc(e){let t=e.toLowerCase();if(sc.has(t))return`--no-color`;if(cc.has(t))return`--color`}function gc(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(dc(e.colorUi));return i===void 0?!e.noColorEnv&&t:i}function _c(e,t,n){return e?`\x1b[${t}m${n}\x1b[0m`:n}async function vc(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 j({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 Dn({fs:e.lfs,dir:t,ref:a}),{stdout:`Deleted branch ${a}\n`,stderr:``,exitCode:0};if(a&&!r)return await vn({fs:e.lfs,dir:t,ref:a}),{stdout:``,stderr:``,exitCode:0};let o=await Zt({fs:e.lfs,dir:t}),s=await j({fs:e.lfs,dir:t}),c=``;for(let t of o)c+=t===s?`* ${_c(e.useColor,`32`,t)}\n`:` ${t}\n`;if(i)try{let n=await Zt({fs:e.lfs,dir:t,remote:`origin`});for(let t of n)c+=` ${_c(e.useColor,`31`,`remotes/origin/${t}`)}\n`}catch{}return{stdout:c,stderr:``,exitCode:0}}async function yc(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 wc(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 vn({fs:e.lfs,dir:t,ref:o,object:s,checkout:!1,force:i})}catch(e){return Cc(e,o)}try{await bc(e,t,o,i)}catch(n){if(!i)try{await Dn({fs:e.lfs,dir:t,ref:o})}catch{}return Cc(n,o)}return await e.fs.flush(),{stdout:`Switched to a new branch '${o}'\n`,stderr:``,exitCode:0}}try{await bc(e,t,o,i)}catch(e){return Cc(e,o)}return await e.fs.flush(),{stdout:`Switched to branch '${o}'\n`,stderr:``,exitCode:0}}async function bc(e,t,n,r){let i;try{i=await D({fs:e.lfs,dir:t,ref:`HEAD`})}catch{i=void 0}let a=new Set(await O({fs:e.lfs,cache:e.cache,dir:t}));await En({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:r});let o=await D({fs:e.lfs,dir:t,ref:n}),s=new Set(await O({fs:e.lfs,cache:e.cache,dir:t,ref:o}));await xc(e,t,a,s),!(!r&&i===o)&&await Sc(e,t,o,a,s)}async function xc(e,t,n,r){for(let i of n)if(!r.has(i)){try{await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:i})}catch{}try{await e.fs.rm(`${t}/${i}`)}catch{}}}async function Sc(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 Qt({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 zn({fs:e.lfs,cache:e.cache,dir:t,filepath:a,ref:n})}}function Cc(e,t){if(e instanceof Error&&e.name===`MultipleGitError`)return{stdout:``,stderr:`error: unable to checkout '${t}':\n${rc(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 wc(e,t,n,r){let i=r??`HEAD`,a=await D({fs:e.lfs,dir:t,ref:i});for(let r of n){let{blob:n}=await Qt({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 gn({fs:e.lfs,cache:e.cache,dir:t,filepath:r})}return await e.fs.flush(),{stdout:``,stderr:``,exitCode:0}}function Tc(e={}){let{favor:t,diff3:n,labels:r}=e;return({contents:e,branches:i})=>{let[a,o,s]=e,c=Je(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 Ec(e,t,n){let r=Dc(n),i=await Ac(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 Mc(e,t,i,1);else i=await Mc(e,t,i,n.count);return i}function Dc(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 Oc(e,t,n){try{return await Ec(e,t,n)}catch{return}}const kc=/^[0-9a-f]{4,40}$/i;async function Ac(e,t,n){if(n===`FETCH_HEAD`)return await jc(e,t);try{return await D({fs:e.lfs,dir:t,ref:n})}catch(e){if(!kc.test(n))throw e}return await Fn({fs:e.lfs,cache:e.cache,dir:t,oid:n})}async function jc(e,t){let n=await Ln({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||!kc.test(i)||i.length!==40)throw Error(`Could not find FETCH_HEAD.`);return i.toLowerCase()}async function Mc(e,t,n,r){if(r<1)return n;let{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n}),a=i.parent[r-1];if(!a)throw Error(`missing parent`);return a}function Nc(e){return e.replace(/^\.\//,``).replace(/\/+$/,``)}function Pc(e,t){return t.length===0||t.some(t=>{let n=Nc(t);return n===``||e===n||e.startsWith(`${n}/`)})}function Fc(e,t){return t.length===0||t.some(t=>{let n=Nc(t);return n===``||e===n||e.startsWith(`${n}/`)||n.startsWith(`${e}/`)})}async function Ic(e,t,n){let{flags:r,positionals:i}=M(n,L[`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 Oc(e,t,s);if(c===void 0)return{stdout:``,stderr:`fatal: bad revision '${s}'\n`,exitCode:128};try{let n=await Pn({fs:e.lfs,cache:e.cache,dir:t,oid:c,abortOnConflict:!1,noUpdateBranch:a,committer:await e.resolveAuthor(t),mergeDriver:Tc()});if(a)return{stdout:``,stderr:``,exitCode:0};let r=n,{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n});if(o){let n=i.message.replace(/\s+$/,``);r=await bn({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 j({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 Lc(e,c)}}function Lc(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 k({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=x(l.startsWith(`/`)?l:`${t}/${l}`),d=R(o,`depth`),f=R(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
|
|
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(
|
|
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
|
|
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: ${rc(e)}\n`,exitCode:128}}async function Rc(e,t,n){let r=M(n,qs),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 k({fs:e.lfs,cache:e.cache,dir:t,...oc}),f=zc(d),p=d.filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e),m;if(c||s){let n=(await k({fs:e.lfs,cache:e.cache,dir:t,ignored:!0,...oc})).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=>Vc(e,t))));let h=new Set,g=new Set;for(let e of m){let t=Bc(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 zc(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 Bc(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 Vc(e,t){let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n||e.startsWith(`${n}/`)}let Hc=null;function Uc(){return Hc||=g(),Hc}async function*Wc(e,t,n){t&&t({phase:`Receiving`,loaded:e.length,total:n??e.length}),yield e}function Gc(){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 Uc()(t,{method:n,headers:r,body:o}),c=parseInt(s.headers[`content-length`]??`0`,10)||void 0,l=Wc(s.body,a,c);return{url:s.url,method:n,headers:s.headers,body:l,statusCode:s.status,statusMessage:s.statusText}}}}const Kc=Gc();async function qc(e,t,n){let r=tc(n,L.clone);if(r)return r;let{flags:i,positionals:a}=M(n,L.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=x(l.startsWith(`/`)?l:`${t}/${l}`),d=R(o,`depth`),f=R(o,`branch`),p=o[`single-branch`]!==!1,m=s?``:`Cloning into '${l}'...\n`,h=Jc(c,t);if(h)return Yc(e,h,u,c,l,m,f,s);try{await yn({fs:e.lfs,cache:e.cache,http:Kc,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 Zc(e,u,c)}if(await e.fs.flush(),!s)try{let t=await O({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 Jc(e,t){if(e.startsWith(`file://`))try{return x(decodeURIComponent(new URL(e).pathname))}catch{return null}return e.startsWith(`/`)?x(e):e.startsWith(`./`)||e.startsWith(`../`)?x(S(t,e)):null}async function Yc(e,t,n,r,i,a,o,s=!1){if(n===t||n.startsWith(`${t}/`))return Zc(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 Zc(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 j({fs:e.lfs,dir:t});if(await Xc(e,`${t}/.git`,`${n}/.git`),c&&await En({fs:e.lfs,cache:e.cache,dir:n,ref:c,force:!0}),await kn({fs:e.lfs,dir:n,remote:`origin`,url:r,force:!0}),await e.fs.flush(),!s){let t=await O({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 Zc(e,n,r)}}async function Xc(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 Xc(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 Zc(e,t,n){return{stdout:``,stderr:`fatal: ${rc(e,n).replace(/'\/__opfs__\/[^']*<path>'/g,`'${t}'`).replace(/\/__opfs__\/[^\s'"<]*<path>/g,t).replace(/<path>/g,t)}\n`,exitCode:128}}const Qc=[`MERGE_HEAD`,`MERGE_MSG`,`MERGE_MODE`,`AUTO_MERGE`];async function $c(e,t){return`${await Ln({fs:e.lfs,filepath:t})}/.git`}async function el(e,t){try{return(await e.fs.readTextFile(t)).trim()}catch{return}}async function tl(e,t){try{await e.fs.rm(t)}catch{}}async function nl(e,t){try{return await el(e,`${await $c(e,t)}/MERGE_HEAD`)}catch{return}}async function rl(e,t){return await nl(e,t)!==void 0}async function il(e,t){try{return await el(e,`${await $c(e,t)}/MERGE_MSG`)}catch{return}}async function al(e,t,n){let r=await $c(e,t);await e.fs.writeFile(`${r}/ORIG_HEAD`,`${n}\n`)}async function ol(e,t,n,r){let i=await $c(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 sl(e,t){let n;try{n=await $c(e,t)}catch{return}await Promise.all(Qc.map(t=>tl(e,`${n}/${t}`)))}async function cl(e,t){let n=await O({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 ll=new Set([`message`,`author`,`date`,`file`,`cleanup`,`amend`,`all`,`allow-empty`,`m`,`a`,`F`]);async function ul(e,t,n){let r=Sl(n),i=M(r,L.commit).flags,a=await nl(e,t),o=await bl(e,t,i);if(typeof o!=`string`){if(a){let n=await il(e,t);if(n)return await dl(e,t,i,n,a)}return o}return await dl(e,t,i,o,a)}async function dl(e,t,n,r,i){let a=n.amend===!0,o=n.all===!0,s=n[`allow-empty`]===!0;if(o&&await xl(e,t),!s&&!a&&!i&&!(await k({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 bn({fs:e.lfs,cache:e.cache,dir:t,message:r,author:await e.resolveAuthor(t),amend:a,noUpdateBranch:void 0,...i?{parent:[await D({fs:e.lfs,dir:t,ref:`HEAD`}),i]}:{}});i&&await sl(e,t);let l=c.slice(0,7);return{stdout:`[${await j({fs:e.lfs,dir:t})??`HEAD`} ${l}] ${r}\n`,stderr:``,exitCode:0}}function fl(e,t){let n=e[t];if(n!==void 0&&n!==!0&&n!==!1)return R(e,t)}function pl(e){return Object.keys(e).find(e=>!ll.has(e))}function ml(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function hl(e){return{stdout:``,stderr:`error: switch \`${e}\` requires a value\n`,exitCode:1}}function gl(e){let t=pl(e);return t?ml(t):`message`in e||`m`in e?hl(`m`):`file`in e||`F`in e?hl(`F`):{stdout:``,stderr:"error: option `-m' or `-F' is required\n",exitCode:1}}function _l(){return{stdout:``,stderr:`Aborting commit due to empty commit message.
|
|
29
|
+
`,exitCode:1}}function vl(e){return{stdout:``,stderr:`error: could not read log file '${e}': No such file or directory\n`,exitCode:128}}async function yl(e,t,n){if(n===`-`)return e.stdin;let r=n.startsWith(`/`)?n:`${t}/${n}`;try{return await e.fs.readTextFile(r)}catch{return vl(n)}}async function bl(e,t,n){let r=fl(n,`message`);if(r!==void 0)return r;let i=fl(n,`file`);if(i!==void 0){let n=await yl(e,t,i);return typeof n==`string`&&n===``?_l():n}return gl(n)}async function xl(e,t){let n=await k({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,a,o]of n)i!==0&&a!==o&&(a===0?await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:r}):await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:r}))}function Sl(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 Cl(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 Dl(e,t,a);if(i)return wl(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?El(e,t,o,a):Tl(e,t,o,c,a)}async function wl(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(sr),r=ar(e,n);await t.writeFile(sr,r)}catch{}}else try{let r=`${t}/.git/config`,i=await e.fs.readTextFile(r),a=ar(i,n);await e.fs.writeFile(r,a)}catch{}return{stdout:``,stderr:``,exitCode:0}}async function Tl(e,t,n,r,i){return n===`credential.token`||n===`github.token`?(await e.setGithubToken(r),{stdout:``,stderr:``,exitCode:0}):(i?await ir(await e.getGlobalFs(),n,r):await fn({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 El(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 or(await e.getGlobalFs(),n):(i=await ln({fs:e.lfs,dir:t,path:n}),i||=await or(await e.getGlobalFs(),n)),{stdout:i?`${i}\n`:``,stderr:``,exitCode:+!i}}async function Dl(e,t,n){let r=``;if(!n)try{let n=`${t}/.git/config`,i=await e.fs.readTextFile(n);r+=Ol(i)}catch{}try{let t=await(await e.getGlobalFs()).readTextFile(sr);r+=Ol(t)}catch{}return{stdout:r,stderr:``,exitCode:0}}function Ol(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 kl=`/dev/null`,Al={bytes:new Uint8Array,text:``,binary:!1};async function jl(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([Ll(e,t,n[0]),Ll(e,t,n[1])]);[i,a]=await Rl(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 Hl(e,i,a):[await Bl(e,i,a)]).filter(e=>!Ml(e.oldBlob.bytes,e.newBlob.bytes));return s.length===0?{stdout:``,stderr:``,exitCode:0}:{stdout:Nl(s,r,e.useColor),stderr:``,exitCode:1}}function Ml(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 Nl(e,t,n){if(t.nameOnly)return`${e.map(e=>e.absent===`new`?kl:e.newName).join(`
|
|
34
|
+
`)}\n`;if(t.stat)return Ke(e.map(Fl),{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 ${Pl(i,`old`)} and ${Pl(i,`new`)} differ\n`;continue}r+=qe({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 Pl(e,t){return e.absent===t?kl:t===`old`?`a/${e.oldName}`:`b/${e.newName}`}function Fl(e){return{name:Il(e.absent===`old`?kl:e.oldName,e.absent===`new`?kl: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 Il(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 Ll(e,t,n){if(n===kl)return{kind:`null`,given:n};let r=x(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 Rl(e,t,n,r){return n.kind===`dir`&&(r.kind===`file`||r.kind===`null`)?[await Ll(e,t,`${n.given}/${zl(r.given)}`),r]:r.kind===`dir`&&(n.kind===`file`||n.kind===`null`)?[n,await Ll(e,t,`${r.given}/${zl(n.given)}`)]:[n,r]}function zl(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}async function Bl(e,t,n){let[r,i]=await Promise.all([Vl(e,t),Vl(e,n)]),a=t.kind===`null`?`old`:n.kind===`null`?`new`:void 0,o=Gl(t.kind===`null`?n.given:t.given);return{oldName:a?o:Gl(t.given),newName:a?o:Gl(n.given),absent:a,oldBlob:r,newBlob:i}}function Vl(e,t){return t.kind===`file`?Wl(e,t.abs):Promise.resolve(Al)}async function Hl(e,t,n){let[r,i]=await Promise.all([Ul(e,t.abs),Ul(e,n.abs)]),a=[...new Set([...r,...i])].sort(),o=[];for(let s of a){let a=Gl(`${t.given}/${s}`),c=Gl(`${n.given}/${s}`);i.has(s)?r.has(s)?o.push({oldName:a,newName:c,oldBlob:await Wl(e,`${t.abs}/${s}`),newBlob:await Wl(e,`${n.abs}/${s}`)}):o.push({oldName:c,newName:c,absent:`old`,oldBlob:Al,newBlob:await Wl(e,`${n.abs}/${s}`)}):o.push({oldName:a,newName:a,absent:`new`,oldBlob:await Wl(e,`${t.abs}/${s}`),newBlob:Al})}return o}async function Ul(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 Wl(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 Gl(e){return e.replace(/^\/+/,``)}function Kl(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 ql(e,t,n){let r=su(n),i=tc(r,L.diff);if(i)return i;let{flags:a,positionals:o,doubleDashRest:s}=M(r,L.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:cu(a.unified)};if(a[`no-index`]===!0||a.index===!1)return jl(e,t,o,u);if(o.length>=2)return $l(e,t,o[0],o[1],u);if(o.length===1){let n=lu(o[0]);if(n)return eu(e,t,n[0],n[1],u);let r=uu(o[0]);return r?$l(e,t,r[0],r[1],u):c?Yl(e,t,o[0],u):nu(e,t,o[0],u)}return ou(e,c?await Jl(e,t,u.pathspecs):await Xl(e,t,u.pathspecs),u)}async function Jl(e,t,n=[],r=`HEAD`){let i=[];return await $t({fs:e.lfs,cache:e.cache,dir:t,trees:[On({ref:r}),Nn()],iterate:Kl(e=>Fc(e,n)),map:async(r,[a,o])=>{if(r===`.`||r===`.git`||r.startsWith(`.git/`)||!Pc(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 Ql(e,t,l),f=await Ql(e,t,u);i.push({filepath:r,oldContent:d,newContent:f,oldPresent:!!l,newPresent:!!u})}}),i}async function Yl(e,t,n,r){let i;try{i=await Ec(e,t,n)}catch{return fu(n)}return ou(e,await Jl(e,t,r.pathspecs,i),r)}async function Xl(e,t,n=[]){let r=[];return await $t({fs:e.lfs,cache:e.cache,dir:t,trees:[Nn(),jn(oc)],iterate:Kl((e,[t])=>t===!0&&Fc(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`||!Pc(i,n))return null;let c=await a.oid(),l=await Zl(o);if(l&&c&&(await Xt({object:l})).oid===c)return null;let u=await Ql(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 Zl(e){if(e)try{return await e.type()===`blob`?await e.content()??void 0:void 0}catch{return}}async function Ql(e,t,n){if(!n)return``;try{let{blob:r}=await Qt({fs:e.lfs,dir:t,oid:n,cache:e.cache});return new TextDecoder().decode(r)}catch{return``}}async function $l(e,t,n,r,i){try{return await tu(e,t,await Ec(e,t,n),await Ec(e,t,r),i)}catch{return fu(await du(e,t,[n,r])??n)}}async function eu(e,t,n,r,i){let a=n||`HEAD`,o=r||`HEAD`;try{let n=await Ec(e,t,a),r=await Ec(e,t,o),s=await _n({fs:e.lfs,cache:e.cache,dir:t,oids:[n,r]});return s[0]?await tu(e,t,s[0],r,i):{stdout:``,stderr:`fatal: '${a}...${o}' has no merge base\n`,exitCode:128}}catch{return fu(await du(e,t,[a,o])??a)}}async function tu(e,t,n,r,i){let a=[];return await $t({fs:e.lfs,cache:e.cache,dir:t,trees:[On({ref:n}),On({ref:r})],iterate:Kl(e=>Fc(e,i.pathspecs??[])),map:async(e,[t,n])=>{if(await iu(t,n))return null;let r=await au(e,t,n,i.pathspecs??[]);r&&a.push(r)}}),ou(e,a,i)}async function nu(e,t,n,r){let i;try{i=await Ec(e,t,n)}catch{return fu(n)}let a=new Set(await O({fs:e.lfs,dir:t,cache:e.cache})),o=ru(a),s=[];return await $t({fs:e.lfs,cache:e.cache,dir:t,trees:[On({ref:i}),jn(oc)],iterate:Kl((e,[t])=>(t===!0||a.has(e)||o.has(e))&&Fc(e,r.pathspecs??[])),map:async(e,[t,n])=>{if(!t&&!a.has(e)&&!o.has(e))return null;let i=await au(e,t,n,r.pathspecs??[]);i&&s.push(i)}}),ou(e,s,r)}function ru(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 iu(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 au(e,t,n,r){if(e===`.`||!Pc(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 ou(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?pu(t,e.useColor):{stdout:t.map(t=>qe({oldContent:t.oldContent,newContent:t.newContent,oldName:t.filepath,newName:t.filepath,context:n.context,color:e.useColor})).join(``),stderr:``,exitCode:0}}function su(e){let t=e.indexOf(`--`);return e.map((e,n)=>(t===-1||n<t)&&/^-U\d+$/.test(e)?`--unified=${e.slice(2)}`:e)}function cu(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 lu(e){let t=e.indexOf(`...`);return t===-1?null:[e.slice(0,t),e.slice(t+3)]}function uu(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 du(e,t,n){for(let r of n)try{await Ec(e,t,r)}catch{return r}return null}function fu(e){return{stdout:``,stderr:`fatal: ambiguous argument '${e}'\n`,exitCode:128}}function pu(e,t=!1){return{stdout:Ke(e.map(e=>({name:e.filepath,oldContent:e.oldContent,newContent:e.newContent})),{color:t}),stderr:``,exitCode:0}}async function mu(e,t,n,r){let i=[];if(await $t({fs:e.lfs,cache:e.cache,dir:t,trees:[On({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 pu(i.map(e=>({filepath:e.filepath,oldContent:``,newContent:e.content})),e.useColor).stdout;let a=``;for(let t of i)a+=qe({oldContent:``,newContent:t.content,oldName:t.filepath,newName:t.filepath,color:e.useColor});return a}async function hu(e,t,n){let r=tc(n,L.fetch);if(r)return r;let{flags:i,positionals:a}=M(n,L.fetch),o=i,s=a[0]??`origin`,c=a[1],l=o.prune===!0,u=o.quiet===!0,d=R(o,`depth`),f=u?``:`Fetching ${s}\n`,p=await Rn({fs:e.lfs,cache:e.cache,http:Kc,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 gu(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 gu(e,t,n,r){let i=await Ln({fs:e.lfs,filepath:t}),a=r??``;await e.fs.writeFile(`${i}/.git/FETCH_HEAD`,`${n}\t\t${a}\n`)}async function _u(e,t,n){let r=M(n,L.init).flags,i=R(r,`initial-branch`)??e.getConfigOverrides()?.get(`init.defaultbranch`)??`main`;return await In({fs:e.lfs,dir:t,defaultBranch:i}),{stdout:`Initialized empty Git repository in ${t}/.git/\n`,stderr:``,exitCode:0}}function vu(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 yu=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(!vu(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&&vu(this.heap[t],this.heap[n])&&(n=t),t+1<this.heap.length&&vu(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 bu(e,t,n){try{return await D({fs:e.lfs,dir:t,ref:n})}catch{return}}async function xu(e,t,n,r){try{return await A({fs:e.lfs,dir:t,oid:n,cache:r})}catch{return}}async function Su(e,t,n,r,i){let a=await Zt({fs:e.lfs,dir:t});for(let[o,s]of a.entries()){let a=await bu(e,t,s);if(a===void 0||r.has(a))continue;r.add(a);let c=await xu(e,t,a,i);c&&n.push(c,o)}}async function*Cu(e,t,n){let r=new Set,i=new yu;for(await Su(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 xu(e,t,o,n.cache);s&&i.push(s,a.tipRank)}}}async function wu(e,t,n){let r=[];if(n.limit<=0)return r;for await(let i of Cu(e,t,{cache:n.cache}))if(r.push(i),r.length>=n.limit)break;return r}async function Tu(e,t,n){let{flags:r,positionals:i,doubleDashRest:a}=M(n,L.log),o=r,s=R(o,`max-count`),c=o.oneline===!0,l=o.stat===!0,u=o.reverse===!0,d=o.all===!0,f=R(o,`format`),p=R(o,`author`),m=R(o,`grep`),h=R(o,`follow`),g=await Eu(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 Fu(e,t,g,{format:f,oneline:c,showStat:l}),stderr:``,exitCode:0}}async function Eu(e,t,n){let r=n.revision?zu(n.revision):null,i=r?.[1]??n.revision,a=Bu(e.cache),o=n.maxCount??10;if(n.pathspecs.length>0&&!n.all&&!r&&!n.followFile)return await Mu(e,t,{ref:i,pathspecs:n.pathspecs,limit:o,caches:a});if(n.all&&n.pathspecs.length>0)return await ku(e,t,{pathspecs:n.pathspecs,limit:o,caches:a,exclude:r?await Ou(e,t,r[0],a):void 0});let s=n.all?await wu(e,t,{limit:n.maxCount??Du,cache:a.git}):await wn({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 Ou(e,t,r[0],a);s=s.filter(e=>!n.has(e.oid))}return n.pathspecs.length>0?await Pu(e,t,s,n.pathspecs,o,a):r?s.slice(0,o):s}const Du=50;async function Ou(e,t,n,r){let i=await wn({fs:e.lfs,dir:t,cache:r.git,ref:n});return new Set(i.map(e=>e.oid))}async function ku(e,t,n){let r=[],i=[],a=async()=>{if(i.length>0){let a=n.limit-r.length;r.push(...await Pu(e,t,i,n.pathspecs,a,n.caches)),i=[]}return r.length>=n.limit};for await(let o of Cu(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 Au(e){let t=e.replace(/^\.\//,``).replace(/\/+$/,``);return t===`.`?``:t}function ju(e){let t=[...new Set(e.map(Au))];return t.some(e=>e===``)?null:t}async function Mu(e,t,n){let r=n.ref?{ref:n.ref}:{},i=ju(n.pathspecs);return i===null?await wn({fs:e.lfs,dir:t,cache:n.caches.git,...r,depth:n.limit}):i.length===1?(await wn({fs:e.lfs,dir:t,cache:n.caches.git,...r,filepath:i[0],depth:n.limit,force:!0})).slice(0,n.limit):await Nu(e,t,{refArg:r,specs:i,limit:n.limit,caches:n.caches})}async function Nu(e,t,n){let r=[],i=0,a=Math.max(n.limit*4,32);for(;;){let o=await wn({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 Wu(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 Pu(e,t,n,r,i,a){let o=ju(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 Wu(e,t,r,o,a)&&s.push(r),s.length>=i)break;return s}async function Fu(e,t,n,r){let i=``;for(let a of n){let{commit:n,oid:o}=a;r.format?i+=`${Iu(o,n,r.format)}\n`:r.oneline?i+=`${_c(e.useColor,`33`,o.slice(0,7))} ${n.message.split(`
|
|
37
|
+
`)[0]}\n`:(i+=`${_c(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 Ru(e,t,a))}return i}function Iu(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,Lu(r))}function Lu(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 Ru(e,t,n){let{commit:r,oid:i}=n,a=r.parent.length>0?r.parent[0]:void 0;return a?(await $l(e,t,a,i,{nameOnly:!1,stat:!0})).stdout:await mu(e,t,i,!0)}function zu(e){let t=/^(.+)\.\.([^.]*)$/.exec(e);return t?.[2]?[t[1],t[2]]:null}function Bu(e){return{git:e,commitTrees:new Map,trees:new Map,entries:new Map}}async function Vu(e,t,n,r){let i=r.trees.get(n);if(i)return i;let{tree:a}=await nn({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.trees.set(n,a),a}async function Hu(e,t,n,r){let i=r.commitTrees.get(n);if(i)return i;let{commit:a}=await A({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.commitTrees.set(n,a.tree),a.tree}async function Uu(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 Vu(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 Wu(e,t,n,r,i){let a=n.commit.parent[0],o=a?await Hu(e,t,a,i):void 0;for(let a of r)if(await Uu(e,t,n.commit.tree,a,i)!==(o===void 0?void 0:await Uu(e,t,o,a,i)))return!0;return!1}async function Gu(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 k({fs:e.lfs,cache:e.cache,dir:t,...oc}),c=[],l=i?`others`:r?`modified`:a?`deleted`:`cached`;for(let[e,t,n,r]of s)qu(l,t,n,r)&&(o.length>0&&!Ku(e,o)||c.push(e));return c.sort(),{stdout:c.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}function Ku(e,t){for(let n of t)if(e===n||e.startsWith(n+`/`))return!0;return!1}function qu(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 Ju(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 on({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 Tn({http:Kc,url:l,corsProxy:e.corsProxy,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),prefix:t,symrefs:a,peelTags:i})).filter(e=>Yu(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: ${ac(e instanceof Error?e.message:String(e),l)}\n`,exitCode:128}}}function Yu(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 Xu(e,t,n){let{flags:r,positionals:i}=M(n,L[`ls-tree`]),a=r.r===!0,o=r.d===!0,s=r[`name-only`]===!0,c=i[0],l=Zu(i.slice(1));if(!c)return{stdout:``,stderr:`usage: git ls-tree [<options>] <tree-ish> [<path>...]
|
|
40
|
+
`,exitCode:129};let u=await Oc(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 nn({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 Qu(e,t,d,``,l,a,o,s,f),{stdout:f.join(``),stderr:``,exitCode:0}}function Zu(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 Qu(e,t,n,r,i,a,o,s,c){for(let l of n){let n=r?`${r}/${l.path}`:l.path,u=$u(n,i);if(u!==`no`){if(l.type===`tree`){let r=u===`exact`&&(o||!a),d=u===`parent`||a;if(r&&c.push(ed(l,n,s)),d){let{tree:r}=await nn({fs:e.lfs,cache:e.cache,dir:t,oid:l.oid});await Qu(e,t,r,n,i,a,o,s,c)}}else u!==`parent`&&!o&&c.push(ed(l,n,s))}}}function $u(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 ed(e,t,n){return n?`${t}\n`:`${e.mode.padStart(6,`0`)} ${e.type} ${e.oid}\t${t}\n`}function td(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function nd(e,t){let n,r=!1;for(let t of td(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 rd(e,t,n){let r=tc(n,L.merge);if(r)return r;let i=M(n,L.merge);if(i.flags.abort===!0)return id(e,t);let a=i.positionals[0];if(!a)return{stdout:``,stderr:`fatal: No branch specified to merge.
|
|
41
|
+
`,exitCode:128};if(await rl(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
|
|
44
|
-
`,stderr:``,exitCode:0}:n.fastForward?(await
|
|
43
|
+
`,exitCode:128};let o=await Oc(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}=nd(i,n);try{await al(e,t,await D({fs:e.lfs,dir:t,ref:`HEAD`}));let n=await rn({fs:e.lfs,cache:e.cache,dir:t,ours:await j({fs:e.lfs,dir:t})??void 0,theirs:o,fastForward:!s,fastForwardOnly:c,author:await e.resolveAuthor(t),abortOnConflict:!1,mergeDriver:Tc({favor:l,diff3:u})});return n.alreadyMerged?{stdout:`Already up to date.
|
|
44
|
+
`,stderr:``,exitCode:0}:n.fastForward?(await En({fs:e.lfs,cache:e.cache,dir:t,ref:await j({fs:e.lfs,dir:t})??`HEAD`}),{stdout:`Updating..${n.oid?n.oid.slice(0,7):``}\nFast-forward\n`,stderr:``,exitCode:0}):n.mergeCommit?(await En({fs:e.lfs,cache:e.cache,dir:t,ref:await j({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
|
|
46
|
+
`,stderr:``,exitCode:0}}catch(n){return n instanceof Error&&n.name===`MergeConflictError`&&await ol(e,t,o,`Merge branch '${a}' into ${await j({fs:e.lfs,dir:t})??`HEAD`}`),ad(n)}}async function id(e,t){if(!await rl(e,t))return{stdout:``,stderr:`fatal: There is no merge to abort (MERGE_HEAD missing).
|
|
47
|
+
`,exitCode:128};try{await Cn({fs:e.lfs,cache:e.cache,dir:t,commit:`HEAD`})}catch{}return await En({fs:e.lfs,cache:e.cache,dir:t,ref:await j({fs:e.lfs,dir:t})??`HEAD`,force:!0}),await sl(e,t),{stdout:``,stderr:``,exitCode:0}}function ad(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 od(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=>Ec(e,t,n)));if(r)return n[0]===n[1]?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:``,exitCode:+!await un({fs:e.lfs,cache:e.cache,dir:t,oid:n[1],ancestor:n[0],depth:-1})};let a=await _n({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 sd(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}async function cd(e,t,n){let r=M(n,L[`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=sd(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=
|
|
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=Je(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 ld(e,t,n){let r=tc(n,L.pull);if(r)return r;let{flags:i,positionals:a}=M(n,L.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 an({fs:e.lfs,cache:e.cache,http:Kc,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 ud(e,t,n){let{flags:r,positionals:i}=M(n,L.push),a=r.force===!0,o=r[`set-upstream`]===!0,s=r[`dry-run`]===!0,c=i[0]??`origin`,l=i[1]??await j({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 sn({fs:e.lfs,cache:e.cache,http:Kc,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 fn({fs:e.lfs,dir:t,path:`branch.${l}.remote`,value:c}),await fn({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 on({fs:e.lfs,dir:t}).catch(()=>[])).find(e=>e.remote===c)?.url;return{stdout:``,stderr:`error: failed to push to '${c}': ${ac(String(d.error),n)}\n`,exitCode:1}}return{stdout:u,stderr:``,exitCode:0}}function dd(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}const fd=`.git/rebase-merge`;async function pd(e,t,n){let{flags:r,positionals:i}=M(n,L.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 _d(e,t):r.continue?await hd(e,t):r.skip?await gd(e,t):await md(e,t,i[0],r)}catch(e){return{stdout:``,stderr:`fatal: ${rc(e)}\n`,exitCode:128}}}async function md(e,t,n,r){if(!n)return{stdout:``,stderr:`fatal: No upstream specified.
|
|
57
|
+
`,exitCode:128};if(await Td(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 j({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
|
|
60
|
+
`,exitCode:128};let a=await xd(e,t,n);if(!a)return{stdout:``,stderr:`fatal: invalid upstream '${n}'\n`,exitCode:128};let o=await D({fs:e.lfs,dir:t,ref:`HEAD`}),s=await Cd(e,t);if(s)return s;let[c]=await _n({fs:e.lfs,cache:e.cache,dir:t,oids:[o,a]});if(c===o)return await wd(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 Sd(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 dd(r[`strategy-option`]))e===`ours`||e===`theirs`||e===`union`?d=e:e===`diff3`&&(f=!0);return await wd(e,t,i,a),vd(e,t,{onto:a,origHead:o,headName:`refs/heads/${i}`,branch:i,todo:l.map(e=>e.oid),favor:d,diff3:f})}async function hd(e,t){let n=await Dd(e,t);if(!n)return bd();if(n.current){let{commit:r}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n.current});await bn({fs:e.lfs,cache:e.cache,dir:t,message:r.message,author:r.author,committer:await e.resolveAuthor(t)}),n.current=void 0}return vd(e,t,n)}async function gd(e,t){let n=await Dd(e,t);return n?(await En({fs:e.lfs,cache:e.cache,dir:t,ref:n.branch,force:!0}),n.current=void 0,vd(e,t,n)):bd()}async function _d(e,t){let n=await Dd(e,t);return n?(await wd(e,t,n.branch,n.origHead),await kd(e,t),{stdout:``,stderr:``,exitCode:0}):bd()}async function vd(e,t,n){for(;n.todo.length>0;){let r=n.todo[0],{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=i.message.split(`
|
|
61
|
+
`)[0];try{await Pn({fs:e.lfs,cache:e.cache,dir:t,oid:r,abortOnConflict:!1,committer:await e.resolveAuthor(t),mergeDriver:Tc({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 Od(e,t,n),yd(r,a,o)}throw i}n.todo=n.todo.slice(1)}return await kd(e,t),{stdout:`Successfully rebased and updated ${n.headName}.\n`,stderr:``,exitCode:0}}function yd(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 bd(){return{stdout:``,stderr:`fatal: No rebase in progress?
|
|
66
|
+
`,exitCode:128}}async function xd(e,t,n){return await Oc(e,t,n)}async function Sd(e,t,n,r){let i=await wn({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 Cd(e,t){let n=await k({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
|
|
74
|
-
`,exitCode:128}}if(n.includes(`--is-inside-work-tree`))try{return await
|
|
70
|
+
`,exitCode:128}}async function wd(e,t,n,r){await en({fs:e.lfs,dir:t,ref:`refs/heads/${n}`,value:r,force:!0}),await En({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:!0})}async function Td(e,t){return e.fs.exists(`${t}/${fd}/onto`)}async function Ed(e,t,n){try{return(await e.fs.readTextFile(`${t}/${fd}/${n}`)).trim()}catch{return}}async function Dd(e,t){let n=await Ed(e,t,`onto`),r=await Ed(e,t,`orig-head`),i=await Ed(e,t,`head-name`);if(!n||!r||!i)return;let a=(await Ed(e,t,`git-rebase-todo`)??``).split(`
|
|
71
|
+
`).map(e=>e.replace(/^pick\s+/,``).trim()).filter(e=>e.length>0),o=await Ed(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 Ed(e,t,`stopped-sha`),todo:a,favor:s,diff3:c}}async function Od(e,t,n){let r=`${t}/${fd}`;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 Ad(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 Ad(e,`${r}/strategy-opts`)}async function kd(e,t){try{await e.fs.rm(`${t}/${fd}`,{recursive:!0})}catch{}}async function Ad(e,t){try{await e.fs.rm(t)}catch{}}async function jd(e,t,n){let[r,...i]=n;if(r===`add`&&i.length>=2){let[n,r]=i;return await kn({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 xn({fs:e.lfs,dir:t,remote:n}),{stdout:``,stderr:``,exitCode:0}}let a=n.includes(`-v`)||n.includes(`--verbose`),o=await on({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 Md(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 k({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,,a]of n)a!==i&&await zn({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 k({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,,a]of n)a!==i&&await zn({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}for(let r of n)await zn({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}let c=o[0]??`HEAD`,l=await D({fs:e.lfs,dir:t,ref:c}),u=await j({fs:e.lfs,dir:t,fullname:!0});if(!u)return{stdout:``,stderr:`fatal: not on a branch, cannot reset
|
|
73
|
+
`,exitCode:128};if(await en({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 O({fs:e.lfs,cache:e.cache,dir:t}));for(let n of d)await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:n});return await Pd(e,t,l),i?(await Id(e,t,l,d),await Nd(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 Nd(e,t,n){try{await Cn({fs:e.lfs,cache:e.cache,dir:t,commit:n})}catch{}await sl(e,t)}async function Pd(e,t,n){let{tree:r}=await nn({fs:e.lfs,cache:e.cache,dir:t,oid:n});await Fd(e,t,n,r,``)}async function Fd(e,t,n,r,i){for(let a of r){let r=i?`${i}/${a.path}`:a.path;if(a.type===`blob`)await zn({fs:e.lfs,cache:e.cache,dir:t,filepath:r,ref:n});else if(a.type===`tree`){let{tree:i}=await nn({fs:e.lfs,cache:e.cache,dir:t,oid:a.oid});await Fd(e,t,n,i,r)}}}async function Id(e,t,n,r){let i=new Set,{tree:a}=await nn({fs:e.lfs,cache:e.cache,dir:t,oid:n});await Ld(e,t,a,``,i);for(let r of i){let{blob:i}=await Qt({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 Ld(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 nn({fs:e.lfs,cache:e.cache,dir:t,oid:a.oid});await Ld(e,t,r,n,i)}}}async function Rd(e,t,n){if(n.includes(`--show-toplevel`))try{return{stdout:`${await Ln({fs:e.lfs,filepath:t})}\n`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`fatal: not a git repository
|
|
74
|
+
`,exitCode:128}}if(n.includes(`--is-inside-work-tree`))try{return await Ln({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 j({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 j({fs:e.lfs,dir:t})??`HEAD`}\n`,stderr:``,exitCode:0}:{stdout:`${r.replace(/^refs\/(?:heads|tags|remotes)\//,``)}\n`,stderr:``,exitCode:0};let i=await Ec(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 zd(e,t,n){let{flags:r,positionals:i}=M(n,L.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 Oc(e,t,o);if(s===void 0)return{stdout:``,stderr:`fatal: bad revision '${o}'\n`,exitCode:128};let c;try{c=await D({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 A({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 j({fs:e.lfs,dir:t})??`HEAD`;try{let n=await
|
|
79
|
+
`)[0],f=s.slice(0,7),p=await j({fs:e.lfs,dir:t})??`HEAD`;try{let n=await Bd(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
|
|
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 bn({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: ${rc(e)}\n`,exitCode:128}}}async function Bd(e,t,n,r,i,a){let[o,s,c]=await Promise.all([O({fs:e.lfs,cache:e.cache,dir:t,ref:n}),O({fs:e.lfs,cache:e.cache,dir:t,ref:r}),O({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 Vd(e,t,r,o),c=await Vd(e,t,i,o);if(s===c)continue;let l=await Vd(e,t,n,o)??``,f,p=!1;if(l===(s??``))f=c??``;else{let e=Je(l,s??``,c??``,{labels:a});f=e.content,p=e.conflicts>0}if(!p&&c===void 0&&f===``){await Hd(e,t,o);continue}await e.fs.writeFile(`${t}/${o}`,u.encode(f)),p?d.push(o):await gn({fs:e.lfs,cache:e.cache,dir:t,filepath:o})}return d}async function Vd(e,t,n,r){try{let{blob:i}=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return new TextDecoder().decode(i)}catch{return}}async function Hd(e,t,n){try{await e.fs.rm(`${t}/${n}`)}catch{}try{await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}catch{}}async function Ud(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 Wd(e,t,n,r,i);if(a)return a}return{stdout:``,stderr:``,exitCode:0}}async function Wd(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 O({fs:e.lfs,cache:e.cache,dir:t})).filter(e=>e===n||e.startsWith(n+`/`));for(let n of a)if(await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(`${t}/${n}`)}catch{}}else if(await cn({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(a)}catch{}return null}async function Gd(e,t,n){let{flags:r,positionals:i}=M(n,L.show),a=r,o=a.stat===!0,s=R(a,`format`),c=i[0];if(c?.includes(`:`))return await Kd(e,t,c);let l=c??`HEAD`,u=await Oc(e,t,l);if(u===void 0)return{stdout:``,stderr:`fatal: bad object ${l}\n`,exitCode:128};let{commit:d}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:u}),f=qd(u,d,s,e.useColor),p=d.parent.length>0?d.parent[0]:void 0;if(p){let n=await $l(e,t,p,u,{nameOnly:!1,stat:o});f+=n.stdout}else{let n=await mu(e,t,u,o);f+=n}return{stdout:f,stderr:``,exitCode:0}}async function Kd(e,t,n){let r=n.indexOf(`:`),i=n.slice(0,r)||`HEAD`,a=n.slice(r+1),o=await Oc(e,t,i);if(o===void 0)return{stdout:``,stderr:`fatal: bad object ${i}\n`,exitCode:128};let s=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:o,filepath:a});return{stdout:new TextDecoder().decode(s.blob),stderr:``,exitCode:0}}function qd(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 O({fs:e.lfs,cache:e.cache,dir:t,ref:`HEAD`}),o=await O({fs:e.lfs,cache:e.cache,dir:t}),s=new Set([...a,...o]),c=await k({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
|
|
89
|
-
`,exitCode:1}}let{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=await D({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
|
|
91
|
-
`,exitCode:1}}if(r===0){let{commit:n}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:a});return n.parent.length>1?await
|
|
92
|
-
`,exitCode:1}}let{commit:r}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n}),i=r.parent[0];return
|
|
93
|
-
`}let c=await
|
|
84
|
+
`;let i=`${_c(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 Jd(e,t,n){let r=n.includes(`--heads`),i=n.includes(`--tags`),a=n.find(e=>!e.startsWith(`-`)),o=``;if(!i){let n=await Zt({fs:e.lfs,dir:t});for(let r of n){let n=await D({fs:e.lfs,dir:t,ref:r}),i=`refs/heads/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}if(!r){let n=await Yt({fs:e.lfs,dir:t});for(let r of n){let n=await D({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 Yd=new Uint8Array;async function Xd(e,t){return await e.fs.readFile(t,{encoding:`binary`})}function Zd(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 Qd(e){if(!e.includes(0))try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return}}async function $d(e,t,n){let r=n[0];if(!r||r.startsWith(`-`))return ef(e,t,n);switch(r){case`push`:case`save`:return ef(e,t,n.slice(1));case`pop`:return af(e,t);case`apply`:return of(e,t);case`list`:return df(e,t);case`drop`:return ff(e,t,n.slice(1));case`show`:return pf(e,t);default:return{stdout:``,stderr:`error: unknown subcommand: ${r}\n`,exitCode:1}}}async function ef(e,t,n){let r=await j({fs:e.lfs,dir:t})??`HEAD`,i;try{i=await D({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: cannot stash without a HEAD commit
|
|
86
|
+
`,exitCode:128}}let a=await O({fs:e.lfs,cache:e.cache,dir:t,ref:`HEAD`}),o=await O({fs:e.lfs,cache:e.cache,dir:t}),s=new Set([...a,...o]),c=await k({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 tf(e,t,i,s,a);if(l.length===0)return{stdout:``,stderr:`No local changes to save
|
|
87
|
+
`,exitCode:1};let d=await rf(e,t,u),f=[i];try{let n=await D({fs:e.lfs,dir:t,ref:`refs/stash`});f.push(n)}catch{}let{commit:p}=await A({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 An({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 en({fs:e.lfs,dir:t,ref:`refs/stash`,value:_,force:!0}),await nf(e,t,i,l),{stdout:`Saved working directory and index state ${m}\n`,stderr:``,exitCode:0}}async function tf(e,t,n,r,i){let a=[],o=[];for(let s of r){let r=i.includes(s),c;try{c=await Xd(e,`${t}/${s}`)}catch{}if(r){let{blob:r}=await Qt({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(Zd(c,r)){let n=await tn({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 tn({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 tn({fs:e.lfs,dir:t,blob:c});o.push({filepath:s,oid:n})}}return{dirtyFiles:a,indexEntries:o}}async function nf(e,t,n,r){for(let i of r)if(i.inHead){let{blob:r}=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:i.file});await e.fs.writeFile(`${t}/${i.file}`,r),await zn({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 cn({fs:e.lfs,cache:e.cache,dir:t,filepath:i.file})}catch{}}}async function rf(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 mn({fs:e.lfs,dir:t,tree:r})};return i(r)}async function af(e,t){return sf(e,t,!0)}async function of(e,t){return sf(e,t,!1)}async function sf(e,t,n){let r;try{r=await D({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
|
|
89
|
+
`,exitCode:1}}let{commit:i}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=await D({fs:e.lfs,dir:t,ref:`HEAD`}),o=i.parent[0]??a,{conflicts:s,warnings:c}=await cf(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 en({fs:e.lfs,dir:t,ref:`refs/stash`,value:i.parent[1],force:!0}):await mf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{0} (${r.slice(0,7)})\n`,stderr:``,exitCode:0}):{stdout:``,stderr:``,exitCode:0}}async function cf(e,t,n,r){let i=new Map,a=async(n,r)=>{let{tree:o}=await nn({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 Qt({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 O({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 uf(e,t,r,n):Yd,l;try{l=await Xd(e,`${t}/${n}`)}catch{}let{merged:u,conflicted:d,binary:f}=lf(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):Zd(u,i)||await gn({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 cn({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}return{conflicts:s,warnings:c}}function lf(e,t,n){if(e===void 0||Zd(e,n)||Zd(e,t))return{merged:n,conflicted:!1,binary:!1};if(Zd(n,t))return{merged:e,conflicted:!1,binary:!1};let r=Qd(e),i=Qd(t),a=Qd(n);if(r===void 0||i===void 0||a===void 0)return{merged:e,conflicted:!0,binary:!0};let o=Je(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 uf(e,t,n,r){try{let{blob:i}=await Qt({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return i}catch{return Yd}}async function df(e,t){let n=``,r=0;try{let i=await D({fs:e.lfs,dir:t,ref:`refs/stash`});for(;i;){let{commit:a}=await A({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 ff(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 D({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 A({fs:e.lfs,cache:e.cache,dir:t,oid:a});return n.parent.length>1?await en({fs:e.lfs,dir:t,ref:`refs/stash`,value:n.parent[1],force:!0}):await mf(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 A({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 A({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 An({fs:e.lfs,dir:t,commit:{...r.commit,parent:i}})}return u?await en({fs:e.lfs,dir:t,ref:`refs/stash`,value:u,force:!0}):await mf(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{${r}} (${c.slice(0,7)})\n`,stderr:``,exitCode:0}}async function pf(e,t){let n;try{n=await D({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
|
|
92
|
+
`,exitCode:1}}let{commit:r}=await A({fs:e.lfs,cache:e.cache,dir:t,oid:n}),i=r.parent[0];return $l(e,t,i,n,{nameOnly:!1,stat:!0})}async function mf(e,t,n){try{await e.lfs.unlink(`${t}/.git/${n}`)}catch{}}async function hf(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 vf(e,t,o);let s=``;try{let n=await j({fs:e.lfs,dir:t});s+=`On branch ${n??`(no branch)`}\n`}catch{s+=`Not on any branch.
|
|
93
|
+
`}let c=await rl(e,t);c?(await cl(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}=gf(await k({fs:e.lfs,cache:e.cache,dir:t,...oc}),o);return s+=_f(l,u,d,c,e.useColor),{stdout:s,stderr:``,exitCode:0}}function gf(e,t){let n=[],r=[],i=[];for(let[a,o,s,c]of e)Pc(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 _f(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${_c(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${_c(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${_c(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 vf(e,t,n){let r=await k({fs:e.lfs,cache:e.cache,dir:t,...oc}),i=``;for(let[e,t,a,o]of r){if(!Pc(e,n))continue;let r=yf(t,a,o);r&&(i+=`${r[0]}${r[1]} ${e}\n`)}return{stdout:i,stderr:``,exitCode:0}}function yf(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 bf=`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 Jt({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 jn({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 un({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function Nf(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 Pf(e,t){let n=t.mtimeMs??0;return{type:e,mode:Nf(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 Ff(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 If(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 Lf(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 Rf=`/objects/pack`,zf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Bf=/\/objects\/[0-9a-f]{2}$/;function Vf(e){return e.endsWith(Rf)||Bf.test(e)}function Hf(e){let t=Je(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Uf(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=x(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=Hf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(x(e));if(n)return Pf(n.type,n.stats?Ff(n.stats):{})},drop(e){t.delete(x(e))},clear(){t.clear()},size(){return t.size}}}function Wf(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Uf(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,Vf(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=zf.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 Ye(`ENOENT`,`no such file or directory`,t);let r=Lf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,If(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(Rf))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 Pf(i.type===`directory`?`dir`:`file`,Ff(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return Pf(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,Ff(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Ye(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Ye(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const Gf={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},Kf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function qf(e){return e.endsWith(`.pack`)||e.endsWith(`.idx`)}function Jf(e){let t=e.replace(/\/{2,}/g,`/`);return t.length>1&&t.endsWith(`/`)?t.slice(0,-1):t}function Yf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Xf(e){let t=e?.code;return typeof t==`string`?t:void 0}function Zf(e){return typeof e==`string`?e.length*2:e.byteLength}function Qf(e,t){return`${t?`u`:`b`} ${e}`}var $f=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=Zf(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[Qf(e,!0),Qf(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=Jf(e);this.forgetSelf(t);let n=Yf(t);this.dirs.delete(n),this.stats.delete(n),this.lstats.delete(n)}invalidateSubtree(e){let t=Jf(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 ep(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=>{Kf.has(Xf(e)??``)||o()}),a}function tp(e,t={}){let n=new $f({...Gf,...t}),r=()=>n.hasRoom(),i=async t=>(await ep(n.dirs,Jf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(qf(t))return e.readFile(t,i);let a=Qf(Jf(t),If(i)),o=await ep(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=>ep(e,Jf(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 np=e(`git-cache`);function rp(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function ip(e){return`${e.replace(/\/+$/,``)}/.git`}var ap=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=ip(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=ip(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=rp(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=rp(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=`${ip(e)}/objects/pack/`,n=rp(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=rp(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;np.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const op=e(`git-commands`),sp=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),cp=new Set([`clone`,`fetch`,`pull`]),lp=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),up={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function dp(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function fp(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 pp=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=Wf(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 ap(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=Wf(this.options.fs,{objectCache:!0}),r=lp.has(e)?tp(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){op.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=fp(e,`GH_TOKEN`);if(t)return t;let n=fp(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 ar(e,`user.name`)??this.authorName,email:await ar(e,`user.email`)??this.authorEmail}}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t!=null)return t;let n=at.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){op.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 cn({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 ar(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await ar(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(fc(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=L[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),sp.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${nc(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:cp.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 gu(t,n,r);case`clone`:return await Kc(t,n,r);case`add`:return await Hs(t,n,r);case`status`:return await mf(t,n,r);case`commit`:return await ll(t,n,r);case`log`:return await wu(t,n,r);case`ls-remote`:return await qu(t,n,r);case`branch`:return await _c(t,n,r);case`checkout`:return await vc(t,n,r);case`clean`:return await Lc(t,n,r);case`diff`:return await Kl(t,n,r);case`show`:return await Wd(t,n,r);case`remote`:return await Ad(t,n,r);case`fetch`:return await mu(t,n,r);case`pull`:return await cd(t,n,r);case`push`:return await ld(t,n,r);case`merge`:return await nd(t,n,r);case`merge-base`:return await ad(t,n,r);case`cherry-pick`:return await Fc(t,n,r);case`rebase`:return await fd(t,n,r);case`revert`:return await Rd(t,n,r);case`merge-file`:return await sd(t,n,r);case`reset`:return await jd(t,n,r);case`config`:return await Sl(t,n,r);case`tag`:return await Mf(t,n,r);case`ls-files`:return await Wu(t,n,r);case`ls-tree`:return await Yu(t,n,r);case`show-ref`:return await qd(t,n,r);case`symbolic-ref`:return await jf(t,n,r);case`stash`:return await Qd(t,n,r);case`rm`:return await Hd(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await Ld(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 hc({cliWhen:dc(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&fp(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?fp(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?fp(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,up),r=t;for(let e of dp(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of dp(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 ${fn()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
|
|
116
|
+
or: git symbolic-ref (-d | --delete) <name>`;function xf(e){let t=Array.isArray(e)?e[e.length-1]:e;return typeof t==`boolean`?t:void 0}function Sf(e){let t={};typeof e.m==`string`&&(t.m=e.m);let n=xf(e.delete);n!==void 0&&(t.delete=n);let r=xf(e.d);r!==void 0&&(t.d=r);let i=xf(e.quiet);i!==void 0&&(t.quiet=i);let a=xf(e.q);a!==void 0&&(t.q=a);let o=xf(e.short);o!==void 0&&(t.short=o);let s=xf(e.recurse);return s!==void 0&&(t.recurse=s),t}function Cf(){return{stdout:``,stderr:`${bf}\n`,exitCode:129}}function wf(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 Tf(e,t,n){try{let r=await D({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 Ef(e,t,n,r){let i=await Tf(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 Tf(e,t,o);if(r.kind!==`symbolic`)return o;o=r.target}}function Df(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 Of(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${bf}\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 Cf()}async function kf(e,t,n,r){if(n===`HEAD`)return{stdout:``,stderr:`fatal: deleting 'HEAD' is not allowed
|
|
118
|
+
`,exitCode:128};let i=await Tf(e,t,n);return i.kind===`symbolic`?(await Sn({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 Af(e,t,n,r){return wf(r)?(await en({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 jf(e,t,n,r){let i=await Ef(e,t,n,r.recurse!==!1);return typeof i==`string`?{stdout:`${r.short?Df(i):i}\n`,stderr:``,exitCode:0}:r.quiet&&i.exitCode===1?{...i,stderr:``}:i}async function Mf(e,t,n){let{flags:r,positionals:i}=M(n,L[`symbolic-ref`]),a=r.delete===!0,o=Of(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?kf(e,t,i[0],!!r.quiet):Cf():i.length===2?s?Cf():Af(e,t,i[0],i[1]):i.length===1?jf(e,t,i[0],Sf(r)):Cf()}async function Nf(e,t,n){let{flags:r,positionals:i}=M(n,L.tag),a=r,o=a.delete===!0,s=R(a,`list`),c=a.annotate===!0,l=R(a,`message`),u=a.force===!0;if(o){let n=i[0];return n?(await hn({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 Yt({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 Mn({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 dn({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function Pf(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 Ff(e,t){let n=t.mtimeMs??0;return{type:e,mode:Pf(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 If(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 Lf(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 Rf(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 zf=`/objects/pack`,Bf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Vf=/\/objects\/[0-9a-f]{2}$/;function Hf(e){return e.endsWith(zf)||Vf.test(e)}function Uf(e){let t=Ye(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Wf(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=x(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=Uf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(x(e));if(n)return Ff(n.type,n.stats?If(n.stats):{})},drop(e){t.delete(x(e))},clear(){t.clear()},size(){return t.size}}}function Gf(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Wf(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,Hf(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=Bf.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 Xe(`ENOENT`,`no such file or directory`,t);let r=Rf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,Lf(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(zf))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 Ff(i.type===`directory`?`dir`:`file`,If(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return Ff(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,If(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Xe(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Xe(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const Kf={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},qf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function Jf(e){return e.endsWith(`.pack`)||e.endsWith(`.idx`)}function Yf(e){let t=e.replace(/\/{2,}/g,`/`);return t.length>1&&t.endsWith(`/`)?t.slice(0,-1):t}function Xf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Zf(e){let t=e?.code;return typeof t==`string`?t:void 0}function Qf(e){return typeof e==`string`?e.length*2:e.byteLength}function $f(e,t){return`${t?`u`:`b`} ${e}`}var ep=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=Qf(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[$f(e,!0),$f(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=Yf(e);this.forgetSelf(t);let n=Xf(t);this.dirs.delete(n),this.stats.delete(n),this.lstats.delete(n)}invalidateSubtree(e){let t=Yf(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 tp(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=>{qf.has(Zf(e)??``)||o()}),a}function np(e,t={}){let n=new ep({...Kf,...t}),r=()=>n.hasRoom(),i=async t=>(await tp(n.dirs,Yf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(Jf(t))return e.readFile(t,i);let a=$f(Yf(t),Lf(i)),o=await tp(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=>tp(e,Yf(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 rp=e(`git-cache`);function ip(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function ap(e){return`${e.replace(/\/+$/,``)}/.git`}var op=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=ap(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=ap(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=ip(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=ip(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=`${ap(e)}/objects/pack/`,n=ip(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=ip(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;rp.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const sp=e(`git-commands`),cp=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),lp=new Set([`clone`,`fetch`,`pull`]),up=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),dp={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function fp(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function pp(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 mp=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=Gf(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 op(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=Gf(this.options.fs,{objectCache:!0}),r=up.has(e)?np(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){sp.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=pp(e,`GH_TOKEN`);if(t)return t;let n=pp(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 or(e,`user.name`)??this.authorName,email:await or(e,`user.email`)??this.authorEmail}}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t!=null)return t;let n=ot.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){sp.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 ln({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 or(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await or(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(pc(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=L[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),cp.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${rc(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:lp.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 _u(t,n,r);case`clone`:return await qc(t,n,r);case`add`:return await Us(t,n,r);case`status`:return await hf(t,n,r);case`commit`:return await ul(t,n,r);case`log`:return await Tu(t,n,r);case`ls-remote`:return await Ju(t,n,r);case`branch`:return await vc(t,n,r);case`checkout`:return await yc(t,n,r);case`clean`:return await Rc(t,n,r);case`diff`:return await ql(t,n,r);case`show`:return await Gd(t,n,r);case`remote`:return await jd(t,n,r);case`fetch`:return await hu(t,n,r);case`pull`:return await ld(t,n,r);case`push`:return await ud(t,n,r);case`merge`:return await rd(t,n,r);case`merge-base`:return await od(t,n,r);case`cherry-pick`:return await Ic(t,n,r);case`rebase`:return await pd(t,n,r);case`revert`:return await zd(t,n,r);case`merge-file`:return await cd(t,n,r);case`reset`:return await Md(t,n,r);case`config`:return await Cl(t,n,r);case`tag`:return await Nf(t,n,r);case`ls-files`:return await Gu(t,n,r);case`ls-tree`:return await Xu(t,n,r);case`show-ref`:return await Jd(t,n,r);case`symbolic-ref`:return await Mf(t,n,r);case`stash`:return await $d(t,n,r);case`rm`:return await Ud(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await Rd(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 gc({cliWhen:fc(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&pp(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?pp(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?pp(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,dp),r=t;for(let e of fp(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of fp(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 ${pn()})\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,8 +151,8 @@ 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}}};function
|
|
155
|
-
`)){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}}};function hp(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 gp=1e4;async function _p(e,t,n){let r={method:e,headers:Ne({"Content-Type":`application/json`}),signal:AbortSignal.timeout(gp)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(Me(`/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:vp(e)}}}}function vp(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${gp/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function yp(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function bp(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 xp(){return{async list(){let[e,t]=await Promise.all([_p(`GET`,``),_p(`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(yp(`saved`,Tp(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(yp(`session`,Tp(t.data)));return{entries:n,warnings:r}},async getInfo(e){return bp(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await _p(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await _p(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await _p(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(Tp(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await _p(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(Tp(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await _p(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(Tp(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await _p(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(Tp(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function Sp(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(yp(`saved`,e?.error)),n?.entries||i.push(yp(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return bp(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 Cp(){return Sp(e=>hp(e))}function wp(){return Sp(e=>{let{type:t,...n}=e;return ze(t,n)})}function Tp(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function Ep(e){switch(e){case`extension-direct`:return Cp();case`extension-delegate`:return wp();default:return xp()}}const Dp=`git-credential-slicc`,Op=new Map([[Dp,`git`],[`git-upload-pack`,`git`],[`git-receive-pack`,`git`],[`git-upload-archive`,`git`],[`git-remote-http`,`git`],[`git-remote-https`,`git`]]),kp=[`github.com`,`*.github.com`],Ap=/(_TOKEN|_PAT)$/;function jp(e){let t=new Map;for(let n of e.split(`
|
|
155
|
+
`)){let e=n.indexOf(`=`);e>0&&t.set(n.slice(0,e),n.slice(e+1).replace(/\r$/,``))}return t}function Mp(e){let t=e.get(`host`)??``;try{return new URL(`https://${t}`).hostname}catch{return``}}async function Np(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 Pp(e,t,n){let r=await t.githubToken?.(e).catch(()=>void 0);if(!r)return;let i=t.githubDomains?.()??kp;return{token:r,domains:r===e.GH_TOKEN||r===e.GITHUB_TOKEN?await Np(r,[`GH_TOKEN`,`GITHUB_TOKEN`],n,kp):i}}async function Fp(e,t){let{entries:n}=await t.list().catch(()=>({entries:[]})),r=n.filter(e=>Ap.test(e.name)&&!e.domains.includes(`*`)).filter(t=>Pa(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 Ip(e,t,n){let r=Mp(e);if(e.get(`protocol`)!==`https`||!r)return{stdout:``,stderr:``,exitCode:0};let i=(n.backend??(()=>Ep(Le())))(),a=await Pp(t,n,i),o=a&&Pa(a.domains,r)?a:await Fp(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 Lp(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 Rp(e={}){return C(Dp,async(t,n)=>{let r=t[0];if(r===void 0||r===`-h`||r===`--help`)return{stdout:`usage: git-credential-slicc <get|store|erase>
|
|
156
156
|
|
|
157
157
|
The git credential helper for native git in the wasm realm, configured by
|
|
158
158
|
default (credential.helper=slicc). Reads git's key=value request on stdin.
|
|
@@ -163,10 +163,10 @@ default (credential.helper=slicc). Reads git's key=value request on stdin.
|
|
|
163
163
|
a host outside the credential's domains, or for plain http.
|
|
164
164
|
store Nothing to do: SLICC keeps its own credentials.
|
|
165
165
|
erase Renews SLICC's GitHub token when it was the one rejected.
|
|
166
|
-
`,stderr:``,exitCode:+(r===void 0)};let i=Object.fromEntries(n.env),a=
|
|
167
|
-
`)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(
|
|
168
|
-
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}};const Jp={maxTraversalEntries:1e5,maxTraversalDepth:256,maxTraversalWork:1e5,maxGlobOperations:1e5,maxLiveBytes:67108864,maxInputBytes:33554432,maxArchiveBytes:134217728,maxArchiveCompressedBytes:67108864,maxArchiveEntryBytes:67108864,maxArchiveEntries:1e5};function Yp(e,t){return e?{...Jp,...t}:t}const Xp=new Set([`SHLVL`,`_`]);function Zp(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 Qp(e,t=[]){let n=new Set([...Xp,...t]);return Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)))}function $p(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 em(e,t){let n=[],r=ur(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:$p(i.stdout,i.stdoutKind),stderr:i.stderr,exitCode:i.exitCode,state:a>0?Zp(new TextDecoder().decode(o)):null}}const tm=`__SLICC_RUN_PID`,nm=`__SLICC_OUTPUT_TEE__`;function rm(e){let t=e?.get(tm);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}var im=class{host;constructor(e){this.host=e}async usesGnuBash(){let e=this.host;return!e.gnuBash||e.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await e.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let o=this.host,{runWasmCommand:s,withoutRealmDefaults:c}=await import(`./run-DKWaudm_.js`),l=Kp(e),u={...o.lastEnv,...n===void 0?{}:{[tm]:String(n)},...l?{[Wp]:l}:{}},d=i===void 0?void 0:o.outputTees.get(i),f=await em(e,{env:u,run:(e,i,a)=>s(e,this.wasmContext(i,t,r),{processConfig:o.buildJshProcessConfig(n),gate:o.gateNativeCommand,onOutput:d,fds:a,commands:()=>o.scriptCatalog.getWasmCommands(),gitIdentity:()=>o.gitIdentity()})}),p=o.lastEnv.PATH;return f.state&&(o.adoptCwd(f.state.cwd),o.adoptEnv(Qp(c(f.state.env,u),[tm,Wp,nm]))),o.lastEnv.PATH!==p&&await o.syncJshCommands().catch(()=>void 0),await o.flushPendingCommandGrants(),o.applyPendingEnvWrites(),{stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode,env:{...o.lastEnv},...a&&f.state?{pipeStatus:f.state.pipeStatus}:{}}}wasmContext(e,t,n){let r=this.host;return{fs:r.vfsAdapter,cwd:r.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>r.bash.exec(e,{...t,umask:r.umask})}}};const am=`/home/user`;async function om(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}`:am}catch{return am}}function sm(e){return e.replace(/\/+$/,``).split(`/`).pop()||`user`}function cm(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}const lm=e(`almost-bash-shell`);var um=class{host;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;registeredWasmCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;constructor(e){this.host=e}scriptRegisteredNames(){return[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands]}scanRoots(){return vr(this.host.path())}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async getFilteredJshCommands(){let e=await this.host.scriptCatalog.getJshCommands(this.scanRoots()),t=new Map;for(let[n,r]of e)this.host.builtinCommandNames.has(n)||this.host.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.host.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.host.isCommandAllowed(n)&&t.set(n,r);return t}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?cm(a):[],c;try{let e=await this.host.discoveryFs.readFile(o,{encoding:`utf-8`});c=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.host.lastEnv}}let l=[`node`,o,...s],u=await mi(c,l,{fs:this.host.vfsAdapter,cwd:this.host.cwd,env:new Map(Object.entries(this.host.lastEnv)),stdin:``,exec:(e,t)=>this.host.bash.exec(e,{env:t?.env??this.host.lastEnv,cwd:t?.cwd??this.host.cwd,umask:this.host.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.host.buildJshProcessConfig(t));return{stdout:u.stdout,stderr:u.stderr,exitCode:u.exitCode,env:this.host.lastEnv}}makeScriptCommand(e){let t=this.host,n=t.scriptCatalog,r=t.discoveryFs,i=e,a=async(e,a)=>{let o=a.exec??((e,n)=>t.bash.exec(e,{env:n?.env??Object.fromEntries(a.env),cwd:n?.cwd??a.cwd,args:n?.args,...n?.env===void 0?{}:{replaceEnv:!0}})),s=(await n.getJshCommands(this.scanRoots())).get(i);if(s){let n;try{let e=await r.readFile(s,{encoding:`utf-8`});n=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${s}'\n`,exitCode:127}}return mi(n,[`node`,s,...e],{fs:a.fs,cwd:a.cwd,env:a.env,stdin:a.stdin,exec:o},t.buildJshProcessConfig(rm(a.env)))}let c=(await n.getWasmCommands()).get(i);if(c){let{runWasmCommand:r}=await import(`./run-DKWaudm_.js`);return r(c.script?[i,...e]:[`--argv0`,c.argv0,`--module`,c.wasm,c.glue,...c.args??[],...e],a,{processConfig:t.buildJshProcessConfig(rm(a.env)),gate:t.gateNativeCommand,defaults:c.env,commands:()=>n.getWasmCommands(),gitIdentity:()=>t.gitIdentity()})}let l=(await n.getWorkflowCommands()).get(i);if(l){let t=Di(l.path,e);return o(t[0],{args:t.slice(1),cwd:a.cwd})}return{stdout:``,stderr:`${i}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await a(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${i}: ${t}\n`,exitCode:1}}}}}async doSyncJshCommands(){try{let e=await this.host.scriptCatalog.getJshIndex(this.scanRoots()),t=e.commands;for(let t of e.collisions)lm.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.host.scriptCatalog.getWasmCommands();for(let[e,n]of t)this.host.isCommandAllowed(e)&&(this.host.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.host.bash.registerCommand(this.host.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.host.builtinCommandNames.add(e)));let i=[...r.keys()].filter(e=>this.host.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.host.builtinCommandNames.has(r)||(this.host.bash.registerCommand(this.host.wrapCommandForDispatch(this.makeScriptCommand(r))),t.add(r),this.host.builtinCommandNames.add(r))}}},dm=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=ze();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:js,progress:e}]})}}scrubbed(e){return this.scrubLabel?fm(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=pm(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:pm(i)})})}};async function fm(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function pm(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function mm(e,t){return t.length?`${e} ${t.join(` `)}`:e}function hm(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function gm(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:hm(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 _m={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}},vm=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function ym(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 bm(e,t){switch(e.type){case`CommandSubstitution`:return jm(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=bm(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function xm(e,t){let n=0;for(let r of e.parts){let e=bm(r,t);if(e===null)return null;n+=e}return n}function Sm(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=xm(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=xm(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=ym(e.name);if(r===null||vm.has(r))return null;if(!t.has(r))return n;n+=1;let i=_m[r];if(i){let r=e.args.map(ym);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(vm.has(a))return null;t.has(a)&&(n+=1)}return n}function Cm(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 wm(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||ym(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=ym(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 Tm(e){let t=0;for(let n of e){let e=n.type===`Word`?Em(n.word):Cm(n);if(e===null)return null;t+=e}return t}function Em(e){let t=wm(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=Tm(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function Dm(e){let t=0;for(let n of e){let e=Em(n);if(e===null)return null;t+=e}return t}function Om(e,t){let n=0;for(let r of e){let e=Am(r,t);if(e===null)return null;n+=e}return n}function km(e,t){switch(e.type){case`SimpleCommand`:return Sm(e,t);case`For`:{if(!e.words)return null;let n=Dm(e.words),r=Om(e.body,t);return n===null||r===null?null:e.words.filter(e=>wm(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return Om(e.body,t);case`FunctionDef`:return 0;default:return null}}function Am(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=km(e,t);if(r===null)return null;n+=r}return n}function jm(e,t){return Om(e.statements,t)}function Mm(e,t){let n=jm(e,t);return{totalSteps:n!==null&&n>0?n:null}}function Nm(e){return e.split(`
|
|
169
|
-
`).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var
|
|
166
|
+
`,stderr:``,exitCode:+(r===void 0)};let i=Object.fromEntries(n.env),a=jp(P(n.stdin));return r===`get`?Ip(a,i,e):r===`erase`?Lp(a,i,e):{stdout:``,stderr:``,exitCode:0}})}async function zp(e){let t=De(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function Bp(){let e=De(`github`);if(!e)return kp;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??kp,...t??[]]}const Vp=new Map([[`jsh`,`node`]]);function Hp(e,t){return`${Vp.get(e)??e} ${t.join(` `)}`.trim()}function Up(e){return St(`sudo`,e)}async function Wp(e,t){let n=e.trim();if(!n||yt(_t(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:Up(r),exitCode:77};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}const Gp=`__SLICC_SUDO_REASON`,Kp=/^#!/;function qp(e){let t=[];for(let n of e.split(`
|
|
167
|
+
`)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(Kp.test(e))continue;let r=e.replace(/^#+/,``).trim();r&&t.push(r)}return Ut(t.join(` `))}var Jp=class{options;pendingCommandGrants=[];pendingSudoBypasses=new Map;constructor(e){this.options=e}isTransparentGatingEnabled(){let e=this.options.getSudo();return!!e&&e.transparentGating!==!1}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled()||Op.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(Gp))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.getSudo();if(!r)return null;let i=Hp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Wp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.queueGrant(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}queueGrant(e){this.pendingCommandGrants.push(e)}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.getSudo()?.persistCommandGrant;if(t){await t(e);return}let n=vt(e);if(!n)return;let r=`${bt}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Xe&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
168
|
+
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}};const Yp={maxTraversalEntries:1e5,maxTraversalDepth:256,maxTraversalWork:1e5,maxGlobOperations:1e5,maxLiveBytes:67108864,maxInputBytes:33554432,maxArchiveBytes:134217728,maxArchiveCompressedBytes:67108864,maxArchiveEntryBytes:67108864,maxArchiveEntries:1e5};function Xp(e,t){return e?{...Yp,...t}:t}const Zp=new Set([`SHLVL`,`_`]);function Qp(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 $p(e,t=[]){let n=new Set([...Zp,...t]);return Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)))}function em(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 tm(e,t){let n=[],r=dr(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:em(i.stdout,i.stdoutKind),stderr:i.stderr,exitCode:i.exitCode,state:a>0?Qp(new TextDecoder().decode(o)):null}}const nm=`__SLICC_RUN_PID`,rm=`__SLICC_OUTPUT_TEE__`;function im(e){let t=e?.get(nm);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}var am=class{host;constructor(e){this.host=e}async usesGnuBash(){let e=this.host;return!e.gnuBash||e.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await e.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let o=this.host,{runWasmCommand:s,withoutRealmDefaults:c}=await import(`./run-DKWaudm_.js`),l=qp(e),u={...o.lastEnv,...n===void 0?{}:{[nm]:String(n)},...l?{[Gp]:l}:{}},d=i===void 0?void 0:o.outputTees.get(i),f=await tm(e,{env:u,run:(e,i,a)=>s(e,this.wasmContext(i,t,r),{processConfig:o.buildJshProcessConfig(n),gate:o.gateNativeCommand,onOutput:d,fds:a,commands:()=>o.scriptCatalog.getWasmCommands(),gitIdentity:()=>o.gitIdentity()})}),p=o.lastEnv.PATH;return f.state&&(o.adoptCwd(f.state.cwd),o.adoptEnv($p(c(f.state.env,u),[nm,Gp,rm]))),o.lastEnv.PATH!==p&&await o.syncJshCommands().catch(()=>void 0),await o.flushPendingCommandGrants(),o.applyPendingEnvWrites(),{stdout:f.stdout,stderr:f.stderr,exitCode:f.exitCode,env:{...o.lastEnv},...a&&f.state?{pipeStatus:f.state.pipeStatus}:{}}}wasmContext(e,t,n){let r=this.host;return{fs:r.vfsAdapter,cwd:r.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>r.bash.exec(e,{...t,umask:r.umask})}}};const om=`/home/user`;async function sm(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}`:om}catch{return om}}function cm(e){return e.replace(/\/+$/,``).split(`/`).pop()||`user`}function lm(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}const um=e(`almost-bash-shell`);var dm=class{host;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;registeredWasmCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;constructor(e){this.host=e}scriptRegisteredNames(){return[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands]}scanRoots(){return yr(this.host.path())}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}async getFilteredJshCommands(){let e=await this.host.scriptCatalog.getJshCommands(this.scanRoots()),t=new Map;for(let[n,r]of e)this.host.builtinCommandNames.has(n)||this.host.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.host.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.host.isCommandAllowed(n)&&t.set(n,r);return t}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?lm(a):[],c;try{let e=await this.host.discoveryFs.readFile(o,{encoding:`utf-8`});c=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.host.lastEnv}}let l=[`node`,o,...s],u=await hi(c,l,{fs:this.host.vfsAdapter,cwd:this.host.cwd,env:new Map(Object.entries(this.host.lastEnv)),stdin:``,exec:(e,t)=>this.host.bash.exec(e,{env:t?.env??this.host.lastEnv,cwd:t?.cwd??this.host.cwd,umask:this.host.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.host.buildJshProcessConfig(t));return{stdout:u.stdout,stderr:u.stderr,exitCode:u.exitCode,env:this.host.lastEnv}}makeScriptCommand(e){let t=this.host,n=t.scriptCatalog,r=t.discoveryFs,i=e,a=async(e,a)=>{let o=a.exec??((e,n)=>t.bash.exec(e,{env:n?.env??Object.fromEntries(a.env),cwd:n?.cwd??a.cwd,args:n?.args,...n?.env===void 0?{}:{replaceEnv:!0}})),s=(await n.getJshCommands(this.scanRoots())).get(i);if(s){let n;try{let e=await r.readFile(s,{encoding:`utf-8`});n=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${s}'\n`,exitCode:127}}return hi(n,[`node`,s,...e],{fs:a.fs,cwd:a.cwd,env:a.env,stdin:a.stdin,exec:o},t.buildJshProcessConfig(im(a.env)))}let c=(await n.getWasmCommands()).get(i);if(c){let{runWasmCommand:r}=await import(`./run-DKWaudm_.js`);return r(c.script?[i,...e]:[`--argv0`,c.argv0,`--module`,c.wasm,c.glue,...c.args??[],...e],a,{processConfig:t.buildJshProcessConfig(im(a.env)),gate:t.gateNativeCommand,defaults:c.env,commands:()=>n.getWasmCommands(),gitIdentity:()=>t.gitIdentity()})}let l=(await n.getWorkflowCommands()).get(i);if(l){let t=Oi(l.path,e);return o(t[0],{args:t.slice(1),cwd:a.cwd})}return{stdout:``,stderr:`${i}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await a(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${i}: ${t}\n`,exitCode:1}}}}}async doSyncJshCommands(){try{let e=await this.host.scriptCatalog.getJshIndex(this.scanRoots()),t=e.commands;for(let t of e.collisions)um.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.host.scriptCatalog.getWasmCommands();for(let[e,n]of t)this.host.isCommandAllowed(e)&&(this.host.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.host.bash.registerCommand(this.host.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.host.builtinCommandNames.add(e)));let i=[...r.keys()].filter(e=>this.host.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.host.builtinCommandNames.has(r)||(this.host.bash.registerCommand(this.host.wrapCommandForDispatch(this.makeScriptCommand(r))),t.add(r),this.host.builtinCommandNames.add(r))}}},fm=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=Be();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:Ms,progress:e}]})}}scrubbed(e){return this.scrubLabel?pm(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=mm(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:mm(i)})})}};async function pm(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function mm(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function hm(e,t){return t.length?`${e} ${t.join(` `)}`:e}function gm(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function _m(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:gm(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 vm={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}},ym=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function bm(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 xm(e,t){switch(e.type){case`CommandSubstitution`:return Mm(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=xm(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function Sm(e,t){let n=0;for(let r of e.parts){let e=xm(r,t);if(e===null)return null;n+=e}return n}function Cm(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=Sm(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=Sm(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=bm(e.name);if(r===null||ym.has(r))return null;if(!t.has(r))return n;n+=1;let i=vm[r];if(i){let r=e.args.map(bm);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(ym.has(a))return null;t.has(a)&&(n+=1)}return n}function wm(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 Tm(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||bm(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=bm(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 Em(e){let t=0;for(let n of e){let e=n.type===`Word`?Dm(n.word):wm(n);if(e===null)return null;t+=e}return t}function Dm(e){let t=Tm(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=Em(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function Om(e){let t=0;for(let n of e){let e=Dm(n);if(e===null)return null;t+=e}return t}function km(e,t){let n=0;for(let r of e){let e=jm(r,t);if(e===null)return null;n+=e}return n}function Am(e,t){switch(e.type){case`SimpleCommand`:return Cm(e,t);case`For`:{if(!e.words)return null;let n=Om(e.words),r=km(e.body,t);return n===null||r===null?null:e.words.filter(e=>Tm(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return km(e.body,t);case`FunctionDef`:return 0;default:return null}}function jm(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=Am(e,t);if(r===null)return null;n+=r}return n}function Mm(e,t){return km(e.statements,t)}function Nm(e,t){let n=Mm(e,t);return{totalSteps:n!==null&&n>0?n:null}}function Pm(e){return e.split(`
|
|
169
|
+
`).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var Fm=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 Im=globalThis.setTimeout.bind(globalThis);function Lm(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function Rm(e,t={}){let n=t.now??Date.now,r=t.setTimeout??Im,i=t.isAborted??(()=>!1),a=t.label??Lm,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 zm=globalThis.setTimeout.bind(globalThis);function Bm(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 Vm(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 Hm(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??zm;return{...e,async execute(n,a){let o=Vm(n),s=o>=0?Bm(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=hm(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 Um=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 Wm(e,t,n={}){if((n.skip??Um).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=hm(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 Gm={stdout:``,stderr:``,exitCode:130};function Km(e,t){if(!t)return e();if(t.aborted)return Promise.resolve(Gm);let n,r=new Promise(e=>{n=()=>e(Gm),t.addEventListener(`abort`,n,{once:!0})});return Promise.race([e(),r]).finally(()=>{n&&t.removeEventListener(`abort`,n)})}const qm={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 Jm(e,t=[],n){let r=qm[e],i=t.length?` data-action-data='${JSON.stringify({filters:t}).replace(/'/g,`'`)}'`:``,a=e===`directory`&&n?`<div class="sprinkle-action-card__meta">Target: ${Nt(n)}</div>`:``;return`
|
|
170
170
|
<div class="sprinkle-action-card">
|
|
171
171
|
<div class="sprinkle-action-card__header">
|
|
172
172
|
<div class="sprinkle-action-card__title-group">${r.title}${a}</div>
|
|
@@ -177,11 +177,11 @@ default (credential.helper=slicc). Reads git's key=value request on stdin.
|
|
|
177
177
|
<button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="${e}"${i}>${r.approve}</button>
|
|
178
178
|
</div>
|
|
179
179
|
</div>
|
|
180
|
-
`}const Jm=Symbol(`mount:timeout`),Ym=Symbol(`mount:no-panel`);async function Xm(e,t){let n=Be.generateId(),r=!1,i=!1,a=Ve({id:n,html:qm(`directory`,[],t),onAction:(e,t)=>Zm(e,t)},e.onUpdate).catch(e=>{if(r)return Jm;if(i)return Ym;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Be.cancel(n,`mount: timed out`),e(Jm)},3e5)}),c=new Promise(e=>{Be.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Be.cancel(n,`mount: panel did not render the approval card`),e(Ym))})}),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===Ym)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 Zm(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await Kt(n.idbKey);return e?(await Wt(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 Qm(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function $m(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function eh(e){for(let t of e.args){let e=Qm(t);if(e===`-o`||e===`--out`)return!0}return!1}function th(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 nh(e){Qm(e.name)!==`say`||eh(e)||(e.args=[$m(`-o`),$m(`-`),...e.args])}function rh(e,t){if(Array.isArray(e)){for(let n of e)rh(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`&&th(r);r?.type===`SimpleCommand`&&a&&nh(r),rh(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){rh(n.body,!0);return}for(let e of Object.values(n))rh(e,t)}const ih={name:`say-stdio`,transform(e){return rh(e.ast,!1),{ast:e.ast}}};function ah(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function oh(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function sh(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:oh(e.installAll)},affinity:{apps:ah(e.apps),tasks:ah(e.tasks),role:ah(e.role),purpose:ah(e.purpose)},priority:n}})}const ch={apps:3,tasks:2,role:1,purpose:1};function lh(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*ch.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*ch.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=ch.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=ch.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 uh(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 dh(e){let t=new Set;try{let n=await e.readDir(ki);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 fh(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 ph(e){return typeof e!=`string`||!e?null:ne(e)||null}function mh(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 hh(e,t){try{let n=ph(t);if(!n)return[];let r=await e(`${ji}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?sh(Oe(r.body).data):[]}catch{return[]}}async function gh(e){let t;try{t=await e(Mi,{headers:{Accept:`application/json`}})}catch(e){throw Error(Vi(e,Mi))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return sh(Oe(t.body).data)}function _h(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 vh(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 Qi(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 yh(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 $i(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 Zi(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 bh(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 vh(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=_h(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 Qi(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 xh(e,t,n,r,i,a,o,s,c,l){let u=await Hi(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 yh(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 Zi(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=fh(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=fh(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([gh(t),hh(t,a.company),dh(e)]);o=mh(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${Mi}: ${e instanceof Error?e.message:String(e)}`])}let c=lh(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 zi(a,o,t);return c.status===`error`?xh(n,i,a,o,d,u,r,s,t,e):bh(n,i,Pi(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Yi(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function wh(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let Th,Eh;async function Dh(e){if(Th)return Th;if(Eh!==void 0)return Eh;Eh=(async()=>{let t;try{t=await e(Ni,{headers:{Accept:`application/json`}})}catch(e){throw Error(Vi(e,Ni))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=Oe(t.body),r=Array.isArray(n)?n:n.skills??[];return Th=r,r})();try{return await Eh}catch(e){throw Eh=void 0,e}}async function Oh(e,t){let n=await Dh(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 kh=/^[A-Za-z0-9._-]+$/;function Ah(e){return!e||e===`.`||e===`..`?!1:kh.test(e)}function jh(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(`/`)||!Ah(r)||!Ah(i))return null;let a=wh(r);return Ah(a)?{hostname:a,task:i}:null}function Mh(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 Nh(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(`
|
|
181
|
-
`)}function
|
|
182
|
-
`)}function
|
|
183
|
-
`}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function
|
|
184
|
-
`;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function
|
|
180
|
+
`}const Ym=Symbol(`mount:timeout`),Xm=Symbol(`mount:no-panel`);async function Zm(e,t){let n=Ve.generateId(),r=!1,i=!1,a=He({id:n,html:Jm(`directory`,[],t),onAction:(e,t)=>Qm(e,t)},e.onUpdate).catch(e=>{if(r)return Ym;if(i)return Xm;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Ve.cancel(n,`mount: timed out`),e(Ym)},3e5)}),c=new Promise(e=>{Ve.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Ve.cancel(n,`mount: panel did not render the approval card`),e(Xm))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===Ym)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===Xm)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 Qm(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await qt(n.idbKey);return e?(await Gt(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 $m(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function eh(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function th(e){for(let t of e.args){let e=$m(t);if(e===`-o`||e===`--out`)return!0}return!1}function nh(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 rh(e){$m(e.name)!==`say`||th(e)||(e.args=[eh(`-o`),eh(`-`),...e.args])}function ih(e,t){if(Array.isArray(e)){for(let n of e)ih(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`&&nh(r);r?.type===`SimpleCommand`&&a&&rh(r),ih(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){ih(n.body,!0);return}for(let e of Object.values(n))ih(e,t)}const ah={name:`say-stdio`,transform(e){return ih(e.ast,!1),{ast:e.ast}}};function oh(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function sh(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function ch(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:sh(e.installAll)},affinity:{apps:oh(e.apps),tasks:oh(e.tasks),role:oh(e.role),purpose:oh(e.purpose)},priority:n}})}const lh={apps:3,tasks:2,role:1,purpose:1};function uh(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*lh.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*lh.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=lh.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=lh.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 dh(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 fh(e){let t=new Set;try{let n=await e.readDir(Ai);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 ph(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 mh(e){return typeof e!=`string`||!e?null:ne(e)||null}function hh(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 gh(e,t){try{let n=mh(t);if(!n)return[];let r=await e(`${Mi}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?ch(ke(r.body).data):[]}catch{return[]}}async function _h(e){let t;try{t=await e(Ni,{headers:{Accept:`application/json`}})}catch(e){throw Error(Hi(e,Ni))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return ch(ke(t.body).data)}function vh(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 yh(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 $i(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 bh(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 ea(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 Qi(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 xh(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 yh(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=vh(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 $i(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 Sh(e,t,n,r,i,a,o,s,c,l){let u=await Ui(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 bh(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 Qi(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 Ch(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 wh(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=ph(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=ph(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([_h(t),gh(t,a.company),fh(e)]);o=hh(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${Ni}: ${e instanceof Error?e.message:String(e)}`])}let c=uh(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=Ch(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await Bi(a,o,t);return c.status===`error`?Sh(n,i,a,o,d,u,r,s,t,e):xh(n,i,Fi(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Xi(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function Th(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let Eh,Dh;async function Oh(e){if(Eh)return Eh;if(Dh!==void 0)return Dh;Dh=(async()=>{let t;try{t=await e(Pi,{headers:{Accept:`application/json`}})}catch(e){throw Error(Hi(e,Pi))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=ke(t.body),r=Array.isArray(n)?n:n.skills??[];return Eh=r,r})();try{return await Dh}catch(e){throw Dh=void 0,e}}async function kh(e,t){let n=await Oh(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 Ah=/^[A-Za-z0-9._-]+$/;function jh(e){return!e||e===`.`||e===`..`?!1:Ah.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(`/`)||!jh(r)||!jh(i))return null;let a=Th(r);return jh(a)?{hostname:a,task:i}:null}function Nh(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 Ph(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(`
|
|
181
|
+
`)}function Fh(e){return e.replace(/(?:^|\n)> \[!NOTE\] \*\*Imported from browse\.sh\*\*[\s\S]*?(?:\n\n|$)/,`
|
|
182
|
+
`)}function Ih(e,t){let n=e.match(/^(---\r?\n[\s\S]*?\r?\n---)(\r?\n|$)/);return n?`${n[1]}${n[2]||`
|
|
183
|
+
`}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function Lh(e,t,n){let r=`${e}/${t}`,i=`${Pi}/${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=ke(e.body)}catch(e){return{ok:!1,error:`failed to fetch browse.sh skill "${r}": ${Hi(e,i)}`}}let o;if(a.skillMdUrl)try{let e=await n(a.skillMdUrl,{headers:{Accept:`text/plain`}});e.status===200&&(o=Ae(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=Nh(o,`name`),c=t.replace(/-[A-Za-z0-9]{4,8}$/,``),l=s||c||t;if(!jh(l)||l.length>64)return{ok:!1,error:`refusing to install browse.sh skill with unsafe name "${l}"`};if(!jh(e))return{ok:!1,error:`refusing to install browse.sh skill with unsafe hostname "${e}"`};let u=Ph(a,r);return{ok:!0,dirName:`browse-${e}-${l}`,slug:r,content:Ih(o,u)}}async function Rh(e,t,n,r,i=!1){let a=await Lh(e,t,r);if(!a.ok)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let{dirName:o,slug:s,content:c}=a,l=`${Ai}/${o}`;try{if(await n.stat(l),!i)return{stdout:``,stderr:`upskill: skill "${o}" already exists (use --force to overwrite)\n`,exitCode:1};await Vi(n,l,await ta(n,o))}catch{}return await n.mkdir(l,{recursive:!0}),await n.writeFile(`${l}/SKILL.md`,c),await Ki(n,o,{kind:`browse.sh`,source:s,skill:o,files:[`SKILL.md`]}),await Xi(),{stdout:`Installed skill "${o}" from browse.sh (${s})\n`,stderr:``,exitCode:0}}function zh(){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 Bh(e){switch(e){case`native`:return`native`;case`agents`:return`.agents`;case`claude`:return`.claude`;case`marketplace`:return`marketplace`;case`plugin`:return`plugin`}}function Vh(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)} ${Bh(t.source).padEnd(11)} ${i}\n`}return o+=`\n${zh()}`,o}function Hh(e){let t=`Skill: ${e.name}\n`;if(t+=`Description: ${e.description||`(none)`}\n`,t+=`Source: ${Bh(e.source)}\n`,t+=`Source root: ${e.sourceRoot}\n`,e.skillFilePath&&(t+=`Instructions: ${e.skillFilePath}\n`),e.shadowedPaths?.length){t+=`Shadowed paths:
|
|
184
|
+
`;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function Uh(){return{stdout:`usage: upskill <command> [options]
|
|
185
185
|
|
|
186
186
|
Install skills from GitHub repositories, the Tessl registry, or browse.sh.
|
|
187
187
|
|
|
@@ -197,7 +197,7 @@ Commands:
|
|
|
197
197
|
tessl:<name> Install skill from Tessl registry
|
|
198
198
|
browse:<hostname>/<task> Install site-specific skill from browse.sh
|
|
199
199
|
|
|
200
|
-
${
|
|
200
|
+
${zh()}
|
|
201
201
|
GitHub Installation:
|
|
202
202
|
upskill owner/repo List available skills in repo
|
|
203
203
|
upskill owner/repo --skill name Install specific skill
|
|
@@ -269,14 +269,14 @@ Examples:
|
|
|
269
269
|
upskill browse:weather.gov/get-forecast-1uezib
|
|
270
270
|
upskill list --outdated
|
|
271
271
|
upskill update --dry-run
|
|
272
|
-
`,stderr:``,exitCode:0}}async function
|
|
272
|
+
`,stderr:``,exitCode:0}}async function Wh(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${zh()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0};let{collisions:o}=await br(t,_r(r));return{...xr(`skill`,Vh(a,`Discoverable skills`),o,{builtinNames:new Set(ft())}),exitCode:0}}function Gh(e){return C(`skill`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return{stdout:`usage: skill <command> [options]
|
|
273
273
|
|
|
274
274
|
Commands:
|
|
275
275
|
list List discoverable skills
|
|
276
276
|
info <name> Show details about a skill
|
|
277
277
|
read <name> Read the SKILL.md instructions
|
|
278
278
|
|
|
279
|
-
${
|
|
279
|
+
${zh()}
|
|
280
280
|
For installing skills from registries or GitHub, use 'upskill':
|
|
281
281
|
upskill search "query" Search registries (Tessl + browse.sh)
|
|
282
282
|
upskill owner/repo --list List skills in GitHub repo
|
|
@@ -288,64 +288,64 @@ Examples:
|
|
|
288
288
|
skill list
|
|
289
289
|
skill info bluebubbles
|
|
290
290
|
skill read bluebubbles
|
|
291
|
-
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-
|
|
292
|
-
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:
|
|
291
|
+
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-CkGJtXT8.js`).then(e=>e.r);try{switch(r){case`list`:return Wh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
|
|
292
|
+
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Hh(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
|
|
293
293
|
`,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+`
|
|
294
|
-
`,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
|
|
294
|
+
`,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 Kh=[{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=>Zi(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 qh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=Kh.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 Jh(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function Yh(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 Xh(e,t,n,r){let i=await Yh(e,t);return Li(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?Jh(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function Zh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await Xh(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 Ri(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 Qh(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 Ui(t),d=await Gi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await $h(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await eg(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 Zh(e,`${Ai}/${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 ag(e,{changes:h,writes:g,removals:_}),await Ki(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 $h(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 eg(e,t,n,r,i,a,o){let s=await Bi(e,t,a,i??`main`);if(s.status===`ok`){let i=Fi(s.files),a=n||tg(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:ig(i,a),path:a}}try{return{files:rg(ng(await zi(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 tg(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 ng(e){return new Map([...e].filter(([e])=>Ii(e)))}function rg(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function ig(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);Ii(e)&&r.set(e,i)}return rg(r)}async function ag(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 og(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 Lh(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${Ai}/${n}/SKILL.md`,u=await Yh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&Fh(new TextDecoder().decode(u))===Fh(c.content);if(Jh(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${Ai}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Ki(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function sg(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 cg(e,t,n,r){let i=Zi(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 lg(e,t,n){if(t.length===0){let t=await Wi(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await qi(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?cg(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 ug(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
|
|
295
295
|
`:`upskill: no install provenance for "${e.name}" — re-run with --from <owner>/<repo> (optionally --path <dir>) to record its source, or reinstall it once
|
|
296
|
-
`}function
|
|
296
|
+
`}function dg(e,t){return`${e} ${t}${e===1?``:`s`}`}function fg(e){return`\nSkipped ${dg(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.
|
|
297
297
|
For the rest, record a source once with \`upskill update <skill> --from <owner>/<repo> --dry-run\`,
|
|
298
298
|
after which a bare \`upskill update\` sweeps them too.
|
|
299
|
-
`}function
|
|
299
|
+
`}function pg(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
|
|
300
300
|
`:`Skill update:
|
|
301
|
-
`;for(let n of e)a+=
|
|
302
|
-
`)}\n`}async function
|
|
301
|
+
`;for(let n of e)a+=sg(n,t);if(i.length>0&&(a+=fg(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${dg(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 mg(e,t,n){let{targets:r,missing:i,skipped:a}=await lg(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 og(e,t,i.name,i.provenance,n.dryRun):await Qh(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function hg(e,t,n){let r=qh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await mg(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`:pg([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(ug).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 Xi();let l=a.map(ug).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:pg(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function gg(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 _g(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 vg(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}${_g(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(`
|
|
302
|
+
`)}\n`}async function yg(e,t,n){let r=await(await import(`./kernel-worker-CkGJtXT8.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await br(e,_r(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${zh()}`,stderr:``,exitCode:0}:{...xr(`upskill`,Vh(r,`Discoverable local skills`),i,{builtinNames:new Set(ft())}),exitCode:0}}async function bg(e,t,n){let{results:r,skipped:i}=await mg(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:vg(r,i),stderr:c,exitCode:+!s}}async function xg(e,t,n,r){let i=gg(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?bg(t,n,i.json):yg(t,i.json,r)}async function Sg(e,t){let n=`${ji}/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(Hi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=ke(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=Yi(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 Cg(e,t){let n=`${ji}/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: ${Hi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=ke(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=Yi(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 wg=[{label:`Tessl`,host:new URL(ji).host,fetch:Sg},{label:`browse.sh`,host:new URL(Pi).host,fetch:kh}];function Tg(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 Eg(e,t,n=1){let r=await Promise.allSettled(wg.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Tg(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=wg[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+=`
|
|
303
303
|
`}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:
|
|
304
304
|
`,p+=` From Tessl: upskill <owner/repo> --skill <name>
|
|
305
305
|
`,p+=` From browse.sh: upskill browse:<hostname>/<task>
|
|
306
|
-
`,{stdout:p,stderr:``,exitCode:0}}function
|
|
306
|
+
`,{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 Og(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 kg(e,t,n){if(!e||t.length===0)return[];let r=[];for(let i of t){if(!i.hostname||Th(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 Ag(e){let t=e.active?` [active]`:``,n=`${e.title||`(untitled)`}${t}\n`;if(n+=` ${e.url}\n`,e.origin.length>0){n+=` Origin-advertised:
|
|
307
307
|
`;for(let t of e.origin)n+=` ${t.installHint}`,t.instruction&&(n+=` # ${t.instruction}`),n+=`
|
|
308
308
|
`}if(e.catalog.length>0){n+=` Browse.sh catalog:
|
|
309
309
|
`;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.
|
|
310
310
|
`);for(let t of e.failures)n+=` (discovery failed: ${t.error})\n`;return n+=`
|
|
311
|
-
`,n}async function
|
|
311
|
+
`,n}async function jg(e,t,n,r){if(!n)return{stdout:``,stderr:`upskill: browser APIs unavailable in this environment
|
|
312
312
|
`,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)+`
|
|
313
313
|
`,stderr:``,exitCode:0}:{stdout:`No open browser tabs.
|
|
314
|
-
`,stderr:``,exitCode:0};let a=[],o=``;try{a=await
|
|
315
|
-
`,stderr:o,exitCode:0};let l=``;for(let e of c)l+=
|
|
314
|
+
`,stderr:``,exitCode:0};let a=[],o=``;try{a=await Oh(t)}catch(e){o=`upskill: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}\n`}let s=await fh(e),c=[];for(let e of i){let n=``;try{n=new URL(e.url).hostname}catch{}let r=n?Th(n):``,i=[],o=[];if(n&&/^https?:/i.test(e.url)){let n=await Og(e.url,t);i=n.links,o=n.failures}let l=kg(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)+`
|
|
315
|
+
`,stderr:o,exitCode:0};let l=``;for(let e of c)l+=Ag(e);return{stdout:l,stderr:o,exitCode:0}}async function Mg(e,t,n){if(n){let n=await wh(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.
|
|
316
316
|
`,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.
|
|
317
317
|
`,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.
|
|
318
|
-
`,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(
|
|
318
|
+
`,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(Ni,{headers:{Accept:`application/json`}});if(e.status!==200)throw Error(`HTTP ${e.status}`);return ch(ke(e.body).data)})(),gh(t,r.company),fh(e)]);i=hh(n,o),a=s}catch(e){return{stdout:``,stderr:`upskill: failed to fetch skill catalog from ${Ni}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let o=uh(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.
|
|
319
319
|
`,stderr:``,exitCode:0};let s=`Recommended skills for you:
|
|
320
320
|
|
|
321
|
-
`,c=0;for(let e of o){c++;let t=
|
|
322
|
-
`,{stdout:s,stderr:``,exitCode:0}}function
|
|
321
|
+
`,c=0;for(let e of o){c++;let t=dh(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
|
|
322
|
+
`,{stdout:s,stderr:``,exitCode:0}}function Ng(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
|
|
323
323
|
`,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
|
|
324
|
-
`,exitCode:1}}function
|
|
325
|
-
`,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=
|
|
326
|
-
`,stderr:``,exitCode:0}}async function
|
|
327
|
-
`,exitCode:1};let a=await
|
|
324
|
+
`,exitCode:1}}function Pg(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
|
|
325
|
+
`,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=Ng(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 Fg(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-CkGJtXT8.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 qi(n,t),a=i?Ji(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Hh(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+`
|
|
326
|
+
`,stderr:``,exitCode:0}}async function Ig(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 $i(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 Lg(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 Qi(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 Rg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Qi(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 zg(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 Bg(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await Ui(r),l=await ea(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:zg(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:zg(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 Bi(i,a,r,o);if(e.status===`ok`){let r=await Gi(i,a,o,c,!0,s),l=await Ig(u,i,a,Fi(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 Lg(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await Rg(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 Xi()),{stdout:p,stderr:m,exitCode:+!!m}}async function Vg(e,t,n,r,i){switch(e[0]){case`tabs`:return jg(t,n,r,e.includes(`--json`));case`recommendations`:return Mg(t,n,e.includes(`--install`));case`update`:case`upgrade`:return hg(e.slice(1),t,n);case`list`:return xg(e.slice(1),t,n,i);case`info`:case`read`:return Fg(e[0],e[1],t);case`search`:return Ug(e,n);default:return null}}function Hg(e,t,n){return C(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Uh();let a=await Vg(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Pg(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Uh();if(o.sourceRef.startsWith(`tessl:`))return Wg(o.sourceRef,o.force,e,t);let s=Mh(o.sourceRef);if(s)return Rh(s.hostname,s.task,e,t,o.force);let c=Zi(o.sourceRef);return c?Bg(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 Ug(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?Eg(a,t,i):Uh()}async function Wg(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
|
|
327
|
+
`,exitCode:1};let a=await Cg(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await Ui(r);return Qi(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function Gg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
|
|
328
328
|
|
|
329
329
|
Plays an audio file using the Web Audio API.
|
|
330
330
|
-v volume Volume level (0 to 1, default 1)
|
|
331
331
|
-r rate Playback rate (0.25 to 4, default 1)
|
|
332
|
-
`,stderr:``,exitCode:0}}function
|
|
332
|
+
`,stderr:``,exitCode:0}}function Kg(e){return{stdout:``,stderr:`afplay: ${e}\n`,exitCode:1}}function qg(e){return e instanceof Error?e.message:String(e)}const Jg={"-v":`a volume value`,"-r":`a rate value`};function Yg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<0||t>1?`volume must be between 0 and 1`:null}function Xg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<.25||t>4?`rate must be between 0.25 and 4`:null}function Zg(e,t,n){switch(t){case`-v`:return Yg(n)||(e.volume=Number.parseFloat(n),null);case`-r`:return Xg(n)||(e.rate=Number.parseFloat(n),null);default:return`unknown option: ${t}`}}function Qg(e){let t={volume:1,rate:1,filePath:null};for(let n=0;n<e.length;n++){let r=e[n];if(Object.hasOwn(Jg,r)){let i=n+1<e.length&&!e[n+1].startsWith(`-`)?e[++n]:null;if(i==null)return Kg(`${r} requires ${Jg[r]}`);let a=Zg(t,r,i);if(a)return Kg(a);continue}if(r.startsWith(`-`))return Kg(`unknown option: ${r}`);if(t.filePath!==null)return Kg(`only one file can be specified`);t.filePath=r}return t}let $g=null;function e_(){return(!$g||$g.state===`closed`)&&($g=new AudioContext),$g}function t_(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function n_(e,t){let n=t.fs.resolvePath(t.cwd,e);try{return{bytes:new Uint8Array(await t.fs.readFileBuffer(n)),fullPath:n}}catch{return Kg(`cannot open ${e}: No such file`)}}function r_(e,t){return Cr(e).startsWith(`audio/`)?null:Kg(`${t} is not an audio file`)}async function i_(e,t,n,r,i){try{let n=Cr(t);return await i.call(`play-audio`,{bytes:t_(e),mimeType:n,volume:r},{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return Kg(`failed to play ${n}: ${qg(e)}`)}}async function a_(e,t,n,r){try{let t=e_();t.state===`suspended`&&await t.resume();let i=await t.decodeAudioData(t_(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 Kg(`failed to play ${t}: ${qg(e)}`)}}async function o_(e,t,n,r){let i=be()&&typeof AudioContext<`u`,a=b();if(!i&&!a)return Kg(`Web Audio API unavailable in this environment`);let o=await n_(e,r);return`exitCode`in o?o:r_(o.fullPath,e)||(i?a_(o.bytes,e,t,n):i_(o.bytes,o.fullPath,e,t,a))}function s_(){return C(`afplay`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Gg();let n=Qg(e);return`exitCode`in n?n:n.filePath?o_(n.filePath,n.volume,n.rate,t):Gg()})}function c_(){return C(`chime`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?{stdout:`usage: chime
|
|
333
333
|
|
|
334
334
|
Plays a notification chime sound.
|
|
335
335
|
Alias for: afplay /shared/sounds/chime.mp3
|
|
336
|
-
`,stderr:``,exitCode:0}:
|
|
337
|
-
`&&e[n]!==`\r`;)n++;return{text:` `.repeat(n-t),end:n-1}}function
|
|
338
|
-
`||e[r]===`\r`?e[r]:` `,r++;return r<e.length&&(n+=` `,r++),{text:n,end:r}}function
|
|
339
|
-
`,r=!1):s&&
|
|
336
|
+
`,stderr:``,exitCode:0}:o_(`/shared/sounds/chime.mp3`,1,1,t))}function l_(e={}){return C(`agent`,async(t,n)=>{let{executeAgentCommand:r}=await import(`./agent-command-impl-BQZK9ujN.js`);return r(t,n,e)})}const u_=[`bg`,`caller`,`disown`,`enable`,`fc`,`fg`,`jobs`,`logout`,`suspend`,`times`,`trap`,`ulimit`];function d_(){return u_.map(e=>C(e,async(t,n)=>{let{runBashBuiltin:r}=await import(`./run-DnxVNWPE.js`);return r(e,t,n)}))}function f_(e,t){e.escaped?e.escaped=!1:t===`\\`?e.escaped=!0:t===`"`&&(e.inString=!1)}function p_(e,t){let n=t+2;for(;n<e.length&&e[n]!==`
|
|
337
|
+
`&&e[n]!==`\r`;)n++;return{text:` `.repeat(n-t),end:n-1}}function m_(e,t){let n=` `,r=t+2;for(;r<e.length&&(e[r]!==`*`||e[r+1]!==`/`);)n+=e[r]===`
|
|
338
|
+
`||e[r]===`\r`?e[r]:` `,r++;return r<e.length&&(n+=` `,r++),{text:n,end:r}}function h_(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,f_(n,i);continue}if(i===`"`){n.inString=!0,t+=i;continue}if(i===`/`&&a===`/`){let n=p_(e,r);t+=n.text,r=n.end;continue}if(i===`/`&&a===`*`){let n=m_(e,r);t+=n.text,r=n.end;continue}t+=i}return t}function g_(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 __(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function v_(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=JSON.parse(g_(h_(t)));if(!__(n))throw Error(`configuration must contain a JSON object`);return n}function y_(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 b_(e){let t=e.plugins;if(!Array.isArray(t))return null;for(let e of t){let t=y_(e);if(t!==null)return t}return null}async function x_(e,t){let n=x(t);for(;;){if(!n.split(`/`).includes(`node_modules`))for(let t of[`biome.json`,`biome.jsonc`]){let r=S(n,t);if(await e.exists(r))return r}if(n===`/`)return null;n=We(n).dir}}async function S_(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=v_(r),i=b_(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 C_(e,t,n,r){if(r!==null){let n=x(e.resolvePath(t,r));return await e.exists(n)?S_(e,n,2):{ok:!1,error:`biome: configuration file not found: ${n}`,exitCode:2}}let i=await x_(e,n);return i===null?{ok:!0,resolved:null}:S_(e,i,1)}const w_=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(`.`)),T_={amp:`&`,apos:`'`,gt:`>`,lt:`<`,nbsp:` `,quot:`"`};function E_(e){let t=e.slice(1,-1);if(!t.startsWith(`#`))return T_[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+=`
|
|
339
|
+
`,r=!1):s&&w_.has(s)&&t.length>0&&!t.endsWith(`
|
|
340
340
|
`)&&(t+=`
|
|
341
|
-
`,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,
|
|
342
|
-
`,
|
|
341
|
+
`,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,E_)}const O_=new Set([`js`,`mjs`,`cjs`,`jsx`,`ts`,`mts`,`cts`,`tsx`,`json`,`jsonc`,`css`,`graphql`,`gql`,`html`,`svelte`,`vue`,`astro`,`jsh`,`bsh`]);function k_(e){let t=e.lastIndexOf(`.`);return t<0?!1:O_.has(e.slice(t+1).toLowerCase())}function A_(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)?`${e.slice(0,-4)}.js`:e}const j_=`async function __slicc() {
|
|
342
|
+
`,M_=new TextEncoder().encode(j_).length;function N_(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)}function P_(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 F_(e){let t=(e.endsWith(`
|
|
343
343
|
`)?e.slice(0,-1):e).split(`
|
|
344
344
|
`);return t.shift(),t.pop(),t.map(e=>e.startsWith(` `)?e.slice(1):e).join(`
|
|
345
345
|
`)+`
|
|
346
|
-
`}function
|
|
346
|
+
`}function I_(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 L_=new Set([`check`,`lint`,`format`]);function R_(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===`
|
|
347
347
|
`&&l++;let u=c.lastIndexOf(`
|
|
348
|
-
`),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
|
|
348
|
+
`),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 z_=`2.5.14`,B_=`6.0.0`,V_=xi,H_=`@biomejs/wasm-web@${z_} @biomejs/js-api@${B_} esbuild-wasm@${V_}`,U_={"@biomejs/wasm-web":`@biomejs/wasm-web@${z_}`,"@biomejs/js-api":`@biomejs/js-api@${B_}`,"esbuild-wasm":`esbuild-wasm@${V_}`},W_=`run: ${F} ${H_} (no network fallback)`,G_=`biome - thin wrapper over the ipk-loaded @biomejs/wasm-web
|
|
349
349
|
|
|
350
350
|
Usage:
|
|
351
351
|
biome <subcommand> [options] [files...]
|
|
@@ -387,20 +387,20 @@ Exit codes:
|
|
|
387
387
|
|
|
388
388
|
Install:
|
|
389
389
|
Inert until the backing packages are installed in node_modules:
|
|
390
|
-
${F} ${
|
|
390
|
+
${F} ${H_}
|
|
391
391
|
All three packages must be present in the VFS \`node_modules\` for
|
|
392
392
|
lint/format to run (loading the wasm-web ESM glue also needs the
|
|
393
393
|
esbuild-wasm transpiler). There is no bundled binary, no CDN
|
|
394
394
|
fallback; a missing package exits non-zero with a clear \`ipk add\` hint.
|
|
395
|
-
`;function
|
|
395
|
+
`;function K_(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`biome: ${n} requires a value`);return r}function q_(e){if(!e)throw Error(`biome: --reporter requires a value`);if(e!==`plain`&&e!==`json`)throw Error(`biome: unknown reporter: ${e}`);return e}function J_(e){return e.some((t,n)=>t===`--json`||t===`--reporter=json`||t===`--reporter`&&e[n+1]===`json`)}function Y_(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=K_(t,n,r),n+1;case`--config-path`:return e.configPath=K_(t,n,r),n+1;case`--reporter`:return e.reporter=q_(K_(t,n,r)),n+1}return r.startsWith(`--stdin-file-path=`)?(e.stdinFilePath=X_(r,`--stdin-file-path`),n):r.startsWith(`--config-path=`)?(e.configPath=X_(r,`--config-path`),n):r.startsWith(`--reporter=`)?(e.reporter=q_(r.slice(11)),n):null}function X_(e,t){let n=e.slice(t.length+1);if(!n)throw Error(`biome: ${t} requires a value`);return n}function Z_(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=Y_(t,e,n);if(i!==null){n=i;continue}if(t.subcommand===null&&L_.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 Q_(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 $_(e,n,r):k_(n)&&r.push(n)}return{files:r,missing:i}}async function $_(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 $_(e,r,n):k_(r)&&n.push(r)}}async function ev(e){let t;try{t=await Sr(`@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 tv(e){let t;try{t=await Sr(`@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 Sr(`@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 Sr(`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:We(t.path).dir}}function nv(e,t){let n=A_(x(e));if(t===null)return n;let r=Ge(t),i=Ge(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 rv=`
|
|
396
396
|
const fs = require('fs');
|
|
397
|
-
const JSH_WRAP_PREFIX = ${JSON.stringify(
|
|
397
|
+
const JSH_WRAP_PREFIX = ${JSON.stringify(j_)};
|
|
398
398
|
const JSH_WRAP_SUFFIX = ${JSON.stringify(`
|
|
399
399
|
}`)};
|
|
400
|
-
const JSH_WRAP_PREFIX_BYTES = ${
|
|
401
|
-
const shiftBiomeSpans = ${
|
|
402
|
-
const unwrapFormattedJsh = ${
|
|
403
|
-
const biomeDiagnosticToJson = ${
|
|
400
|
+
const JSH_WRAP_PREFIX_BYTES = ${M_};
|
|
401
|
+
const shiftBiomeSpans = ${P_.toString()};
|
|
402
|
+
const unwrapFormattedJsh = ${F_.toString()};
|
|
403
|
+
const biomeDiagnosticToJson = ${R_.toString()};
|
|
404
404
|
function supportsFeature(biome, projectKey, path, feature) {
|
|
405
405
|
const workspace = biome.workspace;
|
|
406
406
|
if (!workspace || typeof workspace.fileFeatures !== 'function') {
|
|
@@ -524,28 +524,28 @@ async function main() {
|
|
|
524
524
|
process.stdout.write(JSON.stringify(results));
|
|
525
525
|
}
|
|
526
526
|
main().catch((err) => { process.stderr.write(String(err && err.message || err) + '\\n'); process.exit(1); });
|
|
527
|
-
`;function
|
|
528
|
-
`,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
|
|
529
|
-
`,exitCode:2};let n=await
|
|
530
|
-
`,exitCode:2},`usage`);let i=await
|
|
527
|
+
`;function iv(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: ${F} ${U_[n]??n}); ${W_}\n`}async function av(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:nv(e.path,a),source:e.source,wrap:N_(e.path)}))},u=[`node`,`[biome-helper]`,JSON.stringify(l),c];return ov(await hi(rv,u,e,void 0,{filename:`[biome-helper]`}))}function ov(e){if(e.exitCode!==0)return{results:[],stderr:iv(e.stderr)??e.stderr,exitCode:e.exitCode};if(e.stdout.trim()===``){let t=iv(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)
|
|
528
|
+
`,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 sv(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 cv(e,t){let n=await tv(t);if(!n.ok)return{stdout:``,stderr:`biome: ${n.missing} is not installed (run: ${F} ${U_[n.missing]??n.missing}); ${W_}\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: ${F} ${U_[`@biomejs/wasm-web`]})\n`,exitCode:1}}async function lv(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
|
|
529
|
+
`,exitCode:2};let n=await Q_(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 uv(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 dv(e){let t=await ev(e);return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`biome: @biomejs/wasm-web is not installed (run: ${F} @biomejs/wasm-web@${z_}); ${W_}\n`,exitCode:1}}async function fv(e,t){return e.showHelp?sv(e.reporter,{stdout:G_,stderr:``,exitCode:0},`usage`):e.showVersion?sv(e.reporter,await dv(t),`runtime`):null}function pv(e,t){let n=e.paths[0];if(!n)return``;try{return t.fs.resolvePath(t.cwd,n)}catch{return``}}async function mv(e,t){let n=I_(t),r=await fv(e,n);if(r)return r;if(e.subcommand===null)return sv(e.reporter,{stdout:``,stderr:`biome: missing subcommand (expected check, lint, or format)
|
|
530
|
+
`,exitCode:2},`usage`);let i=await lv(t,e);if(`exitCode`in i)return sv(e.reporter,i,`io`);let a=e.paths.length===0&&t.stdin?t.cwd:We(i.inputs[0].path).dir,o=await C_(t.fs,t.cwd,a,e.configPath);if(!o.ok)return sv(e.reporter,{stdout:``,stderr:`${o.error}\n`,exitCode:o.exitCode},`configuration`,i.inputs[0].path);let s=await cv(t,n);if(`exitCode`in s)return sv(e.reporter,s,`runtime`,i.inputs[0].path);let c=await av(t,e.subcommand,e.write,e.check,o.resolved?.configuration??null,o.resolved===null?null:We(o.resolved.path).dir,e.reporter,i.inputs,s.wasmPath);return c.exitCode===0?uv(t,e,i.inputs,c,i.missingErrText):sv(e.reporter,{stdout:``,stderr:i.missingErrText+c.stderr,exitCode:c.exitCode},`runtime`,i.inputs[0].path)}function hv(){return C(`biome`,async(e,t)=>{let n;try{n=Z_(e)}catch(t){return sv(J_(e)?`json`:`plain`,{stdout:``,stderr:`${t instanceof Error?t.message:String(t)}\n`,exitCode:2},`usage`)}try{return await mv(n,t)}catch(e){if(n.reporter===`plain`)throw e;return sv(`json`,{stdout:``,stderr:`biome: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1},`runtime`,pv(n,t))}})}function gv(e=`biscotto`,t={}){return C(e,async(n,r)=>{let{runBiscotto:i}=await import(`./run-BAmXlRlW.js`);return i(e,n,r,t.getParentJid?.(),t.isScoop?.()===!0)})}function _v(e={}){let t=e.getFollowers??ie,n=e.getPanelRpc??b,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 vv=[`--detail`,`--runtime`];function yv(e){return{stdout:``,stderr:`cherry-emit: ${e}\n`,exitCode:1}}function bv(e){let t=w(e,{value:vv});return`error`in t?yv(t.error):{positionals:t.positionals,detailJson:t.values.get(`--detail`),runtime:t.values.get(`--runtime`)}}function xv(e,t){return e.length===0?yv(`no cherry follower runtime is connected`):t?e.includes(t)?t:yv(`runtime '${t}' not connected. Available: ${e.join(`, `)}`):e.length>1?yv(`multiple runtimes connected, pass --runtime <id>. Available: ${e.join(`, `)}`):e[0]}function Sv(e){if(e===void 0)return{detail:void 0};try{return{detail:JSON.parse(e)}}catch{return yv(`--detail must be valid JSON`)}}function Cv(e={}){let t=e.registry??_v();return C(`cherry-emit`,async e=>{if(T(e,{valueFlags:vv}))return{stdout:`cherry-emit - push a slicc.event to a cherry host page through a follower runtime
|
|
531
531
|
|
|
532
532
|
Usage: cherry-emit <name> [--detail <json>] [--runtime <id>]
|
|
533
533
|
|
|
534
534
|
--detail <json> JSON payload delivered as the event detail
|
|
535
535
|
--runtime <id> Target a specific follower runtime (canonical id, e.g. follower-abc).
|
|
536
536
|
Defaults to the sole connected runtime; required when more than one.
|
|
537
|
-
`,stderr:``,exitCode:0};let n=
|
|
537
|
+
`,stderr:``,exitCode:0};let n=bv(e);if(`exitCode`in n)return n;let r=n.positionals[0];if(!r)return yv(`event name is required`);let i=xv(t.listRuntimeIds(),n.runtime);if(typeof i!=`string`)return i;let a=Sv(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}:yv(`failed to deliver '${r}' to ${i}: ${o.reason}`)})}function wv(e){return e instanceof Error?e.message:String(e)}function Tv(){return{stdout:`usage: pbcopy
|
|
538
538
|
|
|
539
539
|
Copy stdin to the clipboard.
|
|
540
540
|
Example: echo hello | pbcopy
|
|
541
|
-
`,stderr:``,exitCode:0}}function
|
|
541
|
+
`,stderr:``,exitCode:0}}function Ev(){return{stdout:`usage: pbpaste
|
|
542
542
|
|
|
543
543
|
Paste clipboard contents to stdout.
|
|
544
|
-
`,stderr:``,exitCode:0}}function
|
|
544
|
+
`,stderr:``,exitCode:0}}function Dv(e){return{stdout:`usage: ${e} [-i|-o]\n\n -i Force copy mode (read from stdin)
|
|
545
545
|
-o Force paste mode (write to stdout)
|
|
546
546
|
(default) Auto-detect: stdin present = copy, no stdin = paste
|
|
547
|
-
Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function
|
|
548
|
-
`,exitCode:2};let i=await
|
|
547
|
+
Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function Ov(e,t){let n=!!globalThis.navigator?.clipboard,r=n?null:b();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: ${wv(e)}\n`,exitCode:1}}}async function kv(e){let t=!!globalThis.navigator?.clipboard,n=t?null:b();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: ${wv(t)}\n`,exitCode:1}}}function Av(){return C(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?Tv():Ov(P(t.stdin),`pbcopy`))}function jv(){return C(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?Ev():kv(`pbpaste`))}function Mv(e){return C(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 kv(e);let a=P(n.stdin);return r||a.length>0?Ov(a,e):kv(e)})}function Nv(){return C(`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
|
|
548
|
+
`,exitCode:2};let i=await Pv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await Pv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=Fv(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 Pv(e,t){if(t===`-`){let t=cr(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 Fv(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 Iv(e={}){return C(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-C1H8fJIP.js`).then(e=>e.t);return r(t,n,e)})}var Lv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function Rv(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 zv(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 Bv=`AdobeClean-Regular.otf`,Vv=new WeakSet;let Hv=null;function Uv(){return{stdout:`usage: convert [input ...] [operations...] [output]
|
|
549
549
|
|
|
550
550
|
Operations:
|
|
551
551
|
-resize GEOMETRY resize; supports %, !, ^, >, and < modifiers
|
|
@@ -586,7 +586,7 @@ suffix (0-based, as ImageMagick does); page 0 is used when none is given:
|
|
|
586
586
|
convert -density 150 doc.pdf page0.png
|
|
587
587
|
convert doc.pdf[2] -resize 800x page3.png
|
|
588
588
|
Use pdftoppm to rasterize a whole document in one pass.
|
|
589
|
-
`,stderr:``,exitCode:0}}const Uv=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 Wv=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):Uv.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:Gv(n),operations:[]}),this.index++}readOperation(e,t,n){let r=Uv.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=qv(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 Gv(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=Uv.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 Wv(e.slice(0,-1)).parse(),outputPath:t}}function qv(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`||Uv.has(e)}const Yv=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,Xv=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function Zv(e,t,n){if(!(n===`resize`||n===`thumbnail`?Yv:Xv).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function Qv(e,t,n){t.resize(Zv(e,n,`resize`))}function $v(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function ey(e,t,n,r){let i=Zv(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function ty(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 ny={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function ry(e,t){let n=ny[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const iy={"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 ay(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function oy(e,t,n){let r=ay(t),i=Object.entries(e).find(([e])=>ay(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function sy(e,t,n,r){let i=Zv(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 cy(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 ly(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(zv),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function uy(e){if(Bv.has(e.Magick))return;let t=Vv??=fetch(Iv).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(zv,await t),Bv.add(e.Magick)}catch(e){throw Vv===t&&(Vv=null),e}}function dy(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(dy)}function fy(e,t,n,r){let i=iy[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:Qv(e,t,n.value);return;case`thumbnail`:t.thumbnail(Zv(e,n.value,`thumbnail`));return;case`rotate`:$v(t,n.value);return;case`crop`:ey(e,t,n.value,r.gravity);return;case`quality`:ty(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:sy(e,t,n.value,r);return;case`alpha`:t.alpha(oy(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=oy(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...cy(n.value,`blur`));return;case`sharpen`:t.sharpen(...cy(n.value,`sharpen`));return;case`gravity`:r.gravity=ry(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`:ly(e,t,n,r);return}}function py(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:ry(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 my(e,t,n){let r={};for(let i of n)fy(e,t,i,r)}function hy(e,t){let n=null,r=Rv(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function gy(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await _y(e,t.children[a],n,async o=>{i.push(o),await gy(e,t,n,r,i,a+1),i.pop()})}async function _y(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{my(e,n,t.operations),await r(n)});return}await gy(e,t,n,async n=>{py(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=>{my(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function vy(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function yy(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=vy(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)),ia(s)){let t=await aa(s,(a??0)+1,{scale:oa(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await yy(i,t,n,r);return n}function by(e=`convert`){return C(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Hv();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 yy(r.expression,n),t=await ta({ipk:Lv(n)});dy(r.expression)&&await uy(t);let i=null;if(await _y(t,r.expression,e,async e=>{i=hy(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 xy(){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 wy(){let e=xy();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(Le())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 Ty(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 Ey(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 (${Ty(r.candidates)})\n`:null}function Dy(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function Oy(){return{stdout:`usage: crontask <command> [options]
|
|
589
|
+
`,stderr:``,exitCode:0}}const Wv=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 Gv=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):Wv.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:Kv(n),operations:[]}),this.index++}readOperation(e,t,n){let r=Wv.get(n),i=this.tokens.slice(this.index+1,this.index+1+r);if(i.length!==r||i.some(e=>Yv(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=Jv(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 Kv(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 qv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=Wv.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(Yv(t))throw Error(`expected an output file`);return{expression:new Gv(e.slice(0,-1)).parse(),outputPath:t}}function Jv(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function Yv(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||Wv.has(e)}const Xv=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,Zv=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function Qv(e,t,n){if(!(n===`resize`||n===`thumbnail`?Xv:Zv).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function $v(e,t,n){t.resize(Qv(e,n,`resize`))}function ey(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function ty(e,t,n,r){let i=Qv(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function ny(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 ry={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function iy(e,t){let n=ry[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const ay={"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 oy(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function sy(e,t,n){let r=oy(t),i=Object.entries(e).find(([e])=>oy(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function cy(e,t,n,r){let i=Qv(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 ly(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 uy(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(Bv),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function dy(e){if(Vv.has(e.Magick))return;let t=Hv??=fetch(Lv).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(Bv,await t),Vv.add(e.Magick)}catch(e){throw Hv===t&&(Hv=null),e}}function fy(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(fy)}function py(e,t,n,r){let i=ay[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:$v(e,t,n.value);return;case`thumbnail`:t.thumbnail(Qv(e,n.value,`thumbnail`));return;case`rotate`:ey(t,n.value);return;case`crop`:ty(e,t,n.value,r.gravity);return;case`quality`:ny(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:cy(e,t,n.value,r);return;case`alpha`:t.alpha(sy(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=sy(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...ly(n.value,`blur`));return;case`sharpen`:t.sharpen(...ly(n.value,`sharpen`));return;case`gravity`:r.gravity=iy(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`:uy(e,t,n,r);return}}function my(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:iy(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 hy(e,t,n){let r={};for(let i of n)py(e,t,i,r)}function gy(e,t){let n=null,r=zv(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function _y(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await vy(e,t.children[a],n,async o=>{i.push(o),await _y(e,t,n,r,i,a+1),i.pop()})}async function vy(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{hy(e,n,t.operations),await r(n)});return}await _y(e,t,n,async n=>{my(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=>{hy(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function yy(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function by(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=yy(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)),aa(s)){let t=await oa(s,(a??0)+1,{scale:sa(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await by(i,t,n,r);return n}function xy(e=`convert`){return C(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Uv();let r;try{r=qv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await by(r.expression,n),t=await na({ipk:Rv(n)});fy(r.expression)&&await dy(t);let i=null;if(await vy(t,r.expression,e,async e=>{i=gy(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 Sy(){return globalThis.__slicc_lickManager??null}let Cy=null;async function wy(){if(Cy)return Cy;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return Cy=e(),Cy}async function Ty(){let e=Sy();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(Re())return null;let t=await wy(),{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 Ey(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 (${Ey(r.candidates)})\n`:null}function Oy(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function ky(){return{stdout:`usage: crontask <command> [options]
|
|
590
590
|
|
|
591
591
|
Commands:
|
|
592
592
|
create [options] Create a new cron task
|
|
@@ -618,14 +618,14 @@ Examples:
|
|
|
618
618
|
crontask create --name every-5min --scoop poller --cron "*/5 * * * *" --filter "() => ({ time: Date.now() })"
|
|
619
619
|
crontask list
|
|
620
620
|
crontask delete abc123
|
|
621
|
-
`,stderr:``,exitCode:0}}async function
|
|
621
|
+
`,stderr:``,exitCode:0}}async function Ay(e,t,n){let r={method:e,headers:Ne({"Content-Type":`application/json`})};n&&(r.body=JSON.stringify(n));let i=await fetch(Me(`/api/crontasks${t}`),r),a=await i.json().catch(()=>({}));return{ok:i.ok,status:i.status,data:a}}const jy=[`--name`,`--cron`,`--filter`,`--scoop`];function My(e){return{stdout:``,stderr:`crontask: ${e}\n`,exitCode:1}}async function Ny(e,t,n){let r=w(e.slice(1),{value:jy});if(`error`in r)return My(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=ca(s,t),!i)return{stdout:``,stderr:`crontask: --name is required
|
|
622
622
|
`,exitCode:1};if(!a)return{stdout:``,stderr:`crontask: --cron is required
|
|
623
|
-
`,exitCode:1};let c=await
|
|
624
|
-
`,exitCode:1};let e=await
|
|
623
|
+
`,exitCode:1};let c=await Dy(await Ty(),`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)
|
|
624
|
+
`,exitCode:1};let e=await Ty();if(!e)return Oy(`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 Ay(`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 Py(e){let t=`Active cron tasks:
|
|
625
625
|
`;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+=`
|
|
626
|
-
`;return t}async function
|
|
627
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
628
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
626
|
+
`;return t}async function Fy(e,t){let n=w(e.slice(1),{});if(`error`in n)return My(n.error);if(!t()){let e=await Ty();if(!e)return Oy(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
|
|
627
|
+
`,stderr:``,exitCode:0}:{stdout:Py(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await Ay(`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
|
|
628
|
+
`,stderr:``,exitCode:0}:{stdout:Py(a),stderr:``,exitCode:0}}async function Iy(e,t){let n=e[0],r=w(e.slice(1),{});if(`error`in r)return My(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 Ty();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}:Oy(`delete`)}let{ok:a,status:o,data:s}=await Ay(`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 Ly(e={}){let t=e.hasLocalNodeServer??(()=>!1);return C(`crontask`,async(e,n)=>{let r=e[0];if(!r||T(e,{valueFlags:jy}))return ky();try{switch(r){case`create`:return await Ny(e,n.env,t);case`list`:return await Fy(e,t);case`delete`:case`kill`:return await Iy(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 Ry(e){return C(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-Bmg4J98v.js`);return r(e,t,n)})}function zy(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 By(e){return zy(e,{si:!1})}const Vy=`slicc-fs`;async function Hy(){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===Vy)}catch{return!0}}async function Uy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(Vy)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function Wy(){if(!await Hy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await Uy();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 Gy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
|
|
629
629
|
|
|
630
630
|
Usage:
|
|
631
631
|
slicc-fs-cleanup Delete the legacy slicc-fs IDB.
|
|
@@ -634,7 +634,7 @@ Usage:
|
|
|
634
634
|
SLICC's filesystem lives in OPFS; the legacy slicc-fs IndexedDB from
|
|
635
635
|
the pre-OPFS era is never read anymore. This command deletes it on
|
|
636
636
|
explicit invocation to reclaim the space.
|
|
637
|
-
`}const
|
|
637
|
+
`}const Ky={deleted:0,absent:0,blocked:1,error:1};function qy(e={}){let t=e.runCleanup??Wy;return C(`slicc-fs-cleanup`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:Gy(),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=Ky[n.kind];return r===0?{stdout:`${n.message}\n`,stderr:``,exitCode:r}:{stdout:``,stderr:`slicc-fs-cleanup: ${n.message}\n`,exitCode:r}})}function Jy(e){return`${e} — report VFS backend and storage usage/quota
|
|
638
638
|
|
|
639
639
|
Usage:
|
|
640
640
|
${e} Show diagnostics (raw bytes).
|
|
@@ -642,16 +642,16 @@ Usage:
|
|
|
642
642
|
${e} --help Show this help.
|
|
643
643
|
|
|
644
644
|
Read-only. Cleanup of the legacy IndexedDB lives in 'slicc-fs-cleanup'.
|
|
645
|
-
`}function
|
|
645
|
+
`}function Yy(){return`diskutil — VFS diagnostics alias
|
|
646
646
|
|
|
647
647
|
Usage:
|
|
648
648
|
diskutil info Show VFS diagnostics (alias for 'df -h').
|
|
649
649
|
diskutil --help Show this help.
|
|
650
650
|
|
|
651
651
|
Read-only. See 'df --help' for the underlying command.
|
|
652
|
-
`}function
|
|
653
|
-
`)}\n`}function
|
|
654
|
-
`,exitCode:1}})}const
|
|
652
|
+
`}function Xy(e,t){return e===null?`unavailable`:t?By(e):`${e}`}async function Zy(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??Hy;try{o=await s()}catch{o=null}return{backend:t,usage:n,quota:r,persisted:i,legacyIdbPresent:o}}function Qy(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: ${Xy(e.usage,t)}`,`Quota: ${Xy(e.quota,t)}`,`Used: ${n}`,`Persisted: ${r}`,`Legacy IDB: ${i}`].join(`
|
|
653
|
+
`)}\n`}function $y(e={}){return C(`df`,async t=>{if(t.includes(`--help`))return{stdout:Jy(`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:Qy(await Zy(e),i),stderr:``,exitCode:0}})}function eb(e={}){return C(`diskutil`,async t=>{if(t.includes(`--help`))return{stdout:Yy(),stderr:``,exitCode:0};let n=t[0];return n===`info`?{stdout:Qy(await Zy(e),!0),stderr:``,exitCode:0}:{stdout:``,stderr:n?`diskutil: unsupported subcommand: ${n} (try 'diskutil info')\n`:`diskutil: missing subcommand (try 'diskutil info')
|
|
654
|
+
`,exitCode:1}})}const tb=e(`di`),nb=new WeakMap;async function rb(e,t){let n=nb.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 tb.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${qr}pyodide-lock.json`,n;try{n=await t(e,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){return tb.error(`failed to fetch pyodide-lock.json from CDN`,e),null}if(n.status<200||n.status>=300)return tb.error(`pyodide-lock.json CDN fetch returned HTTP ${n.status}`),null;r=Ae(n.body)}let i;try{i=JSON.parse(r)}catch(e){return tb.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(Wr(t.name??e),t);return nb.set(e,a),a}async function ib(e,t,n,r){let i=await rb(e,t);if(!i)return null;let a=i.get(Wr(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:`${qr}${a.file_name}`}}function ab(e,t){let n=`https://pypi.org/pypi/${encodeURIComponent(e)}`;return t?`${n}/${encodeURIComponent(t)}/json`:`${n}/json`}function ob(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 sb(e,t,n){let r=`di: PyPI lookup for ${t}${n?`==${n}`:``}`,i=ab(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(Ae(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=>ob(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 cb=`/workspace/python_wheels`,lb=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function ub(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(),!lb.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 db(e){return e instanceof Error?e:Error(String(e))}async function fb(e,t,n){return await ib(e,t,n.name,n.version)||sb(t,n.name,n.version)}async function pb(e,t,n){let r=await fb(e,t,n),i=await ti(t,{url:r.url,sha256:r.sha256,label:`di: download ${r.name}==${r.version}`});await e.mkdir(cb,{recursive:!0});let a=S(cb,r.fileName),o=!0;if(await e.exists(a)){let t=await e.readFile(a,{encoding:`binary`}),n=await ee(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 mb(e,t,n,r){let i=await Xr(e,n),a=[],o=[];for(let n of r){let r;try{r=ub(n)}catch(e){o.push({spec:n,error:db(e)});continue}try{a.push(await pb(e,t,r))}catch(e){o.push({spec:n,error:db(e)})}}if(a.length>0){let t=await $r(e,i),n=t.dependencies,r=await Ur(e,i);for(let e of a)n=Br(n,e.name,e.version),r=ei(r,{name:e.name,version:e.version,source:e.source,fileName:e.fileName,sha256:e.sha256});await Yr(e,i,{...t,dependencies:n}),await Kr(e,i,r)}return{results:a,errors:o,manifestDir:i}}async function hb(e,t){let n=await Jr(e,t);if(!n)return null;let r=await $r(e,n),i=await Ur(e,n),a=new Map(i.map(e=>[Wr(e.name),e]));return r.dependencies.map(e=>{let{name:t,version:n}=Gr(e),r=a.get(Wr(t));return{name:t,version:n||r?.version||`?`,source:r?.source??`unknown`}})}const gb=[];function _b(e){return`${e} - minimal Python package manager (pure-Python + Pyodide wheels)
|
|
655
655
|
|
|
656
656
|
Usage:
|
|
657
657
|
${e} add <pkg>[@<version>] [<pkg> ...] resolve, stage, and record wheels
|
|
@@ -664,20 +664,20 @@ Resolution:
|
|
|
664
664
|
staged under /workspace/python_wheels/ and recorded in pyproject.toml + uv.lock.
|
|
665
665
|
|
|
666
666
|
Anything else is not implemented in SLICC's ${e} subset; use real uv locally.
|
|
667
|
-
`}function
|
|
668
|
-
`)}\n`}async function
|
|
667
|
+
`}function vb(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 yb(e){return e instanceof Error?e.message:String(e)}function bb(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(`
|
|
668
|
+
`)}\n`}async function xb(e,t,n,r){let i=w(t,{value:gb});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 mb(r.fs,r.fetch,n.cwd,a)}catch(t){return{stdout:``,stderr:`${e}: ${yb(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}: ${yb(t.error)}`);return{stdout:s.length>0?`${s.join(`
|
|
669
669
|
`)}\n`:``,stderr:c.length>0?`${c.join(`
|
|
670
|
-
`)}\n`:``,exitCode:o.errors.length===0?0:1}}async function
|
|
671
|
-
`}};let i=
|
|
670
|
+
`)}\n`:``,exitCode:o.errors.length===0?0:1}}async function Sb(e,t,n,r){let i=w(t,{value:gb});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=await hb(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:bb(a),stderr:``,exitCode:0}}function Cb(e,t){return C(e,async(n,r)=>{if(n.length===0)return{stdout:_b(e),stderr:`${e}: missing verb\n`,exitCode:1};if(T(n,{valueFlags:gb}))return{stdout:_b(e),stderr:``,exitCode:0};let i=n[0],a=n.slice(1);return i===`add`?xb(e,a,r,t):i===`list`?Sb(e,a,r,t):vb(e,i)})}const wb=`https://cloudflare-dns.com/dns-query`,Tb=`https://dns.quad9.net/dns-query`,Eb=`usage: dig <name> [type] [@server] [+short] [--json]`,Db=[`A`,`AAAA`,`MX`,`TXT`,`CNAME`,`NS`,`SOA`,`SRV`,`PTR`,`CAA`],Ob={"1.1.1.1":wb,"1.0.0.1":wb,"cloudflare-dns.com":wb,"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":Tb,"149.112.112.112":Tb,"dns.quad9.net":Tb};function kb(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 Ab(e){if(e.includes(`%`))return;let t=e;if(e.includes(`.`)){let n=e.lastIndexOf(`:`),r=n>=0?kb(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 jb(e){let t=kb(e);if(t)return`${t.reverse().join(`.`)}.in-addr.arpa`;let n=Ab(e);if(n)return`${n.map(e=>e.padStart(4,`0`)).join(``).split(``).reverse().join(`.`)}.ip6.arpa`}function Mb(e){return{kind:`error`,message:`dig: '${e}' is not a valid record type; ${Eb}\n`}}function Nb(e,t,n){let r=e[t+1]?.trim();if(!r)return{error:{kind:`error`,message:`dig: -x requires an address
|
|
671
|
+
`}};let i=jb(r);return i?n.name?{error:Mb(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 Pb(e,t,n){return n.server?{error:{kind:`error`,message:`dig: multiple @server arguments
|
|
672
672
|
`}}:(n.server=e.slice(1).trim(),n.server?{nextIndex:t}:{error:{kind:`error`,message:`dig: empty @server argument
|
|
673
|
-
`}})}function
|
|
674
|
-
`};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${
|
|
673
|
+
`}})}function Fb(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:Mb(r)};return{nextIndex:t}}function Ib(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`?Nb(e,t,n):r.startsWith(`@`)?Pb(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:Fb(r,t,n)}function Lb(e){if(e.short&&e.json)return{kind:`error`,message:`dig: +short and --json are mutually exclusive
|
|
674
|
+
`};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${Eb}\n`};let t=e.server?.toLowerCase(),n=t?Ob[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 Rb(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=Ib(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return Lb(t)}const zb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},Bb=new Set(`#/:<>?@[\\]^|`);function Vb(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||Bb.has(e))})}function Hb(e){if(Vb(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 Ub(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(Hb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function Wb(e,t){let n=Ub(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=zb[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 Gb(e,n,r){return`${e}?dns=${t(Wb(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function Kb(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function qb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){Kb(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){Kb(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(Kb(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 z(e,t){return Kb(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function Jb(e,t){return Kb(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function Yb(e,t){let n=Array.from({length:8},(n,r)=>z(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 Xb(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 Zb(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(Kb(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(Xb(e,r+1,r+1+t)),r+=t+1}return i.join(` `)}function Qb(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 $b(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 Yb(e,n)}if([2,5,12].includes(t)){let t=qb(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=qb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${z(e,n)} ${t.name}`}if(t===16)return Zb(e,n,r);if(t===6){let t=qb(e,n),i=qb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>Jb(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=qb(e,n+6);if(t.nextOffset!==r)throw Error(`invalid SRV record`);return`${z(e,n)} ${z(e,n+2)} ${z(e,n+4)} ${t.name}`}if(t===257)return Qb(e,n,r);let i=Array.from(e.subarray(n,r),e=>e.toString(16).padStart(2,`0`));return`\\# ${r-n} ${i.join(``)}`}function ex(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=qb(e,a);a=t.nextOffset,Kb(e,a,10);let n=z(e,a),o=z(e,a+2),s=Jb(e,a+4),c=z(e,a+8),l=a+10,u=l+c;Kb(e,l,c);let d=$b(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 tx(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function nx(e,t,n,r,i){let a=Ub(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>tx(e)===tx(a[t])))||t!==zb[i]||n!==1)throw Error(`unexpected DNS response question`)}function rx(e,t,n){Kb(e,0,12);let r=z(e,2);if(z(e,0)!==0||!(r&32768))throw Error(`invalid DNS response`);if(r&512)throw Error(`truncated DNS response`);let i=z(e,4),a=z(e,6),o=z(e,8),s=z(e,10);if(i!==1)throw Error(`invalid DNS question count`);let c=12,l=qb(e,c);c=l.nextOffset,Kb(e,c,4),nx(l,z(e,c),z(e,c+2),t,n),c+=4;let u=ex(e,c,a,!0);if(ex(e,ex(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 ix={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},ax={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function ox(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
|
|
675
675
|
dig -x <address> [@server] [+opts] [--json]
|
|
676
676
|
dig -v | --version
|
|
677
677
|
|
|
678
678
|
Resolve DNS records via DNS-over-HTTPS.
|
|
679
679
|
|
|
680
|
-
Supported types: `+
|
|
680
|
+
Supported types: `+Db.join(`, `)+` (default: A).
|
|
681
681
|
|
|
682
682
|
Flags:
|
|
683
683
|
@server use a supported Cloudflare, Google, or Quad9 resolver
|
|
@@ -687,11 +687,11 @@ Flags:
|
|
|
687
687
|
+opts other dig +options are accepted as no-ops
|
|
688
688
|
--json resolver response as pretty-printed JSON
|
|
689
689
|
-h, --help show this help
|
|
690
|
-
`,stderr:``,exitCode:0}}function
|
|
690
|
+
`,stderr:``,exitCode:0}}function sx(e){return ix[e]??`TYPE${e}`}function cx(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}: ${ax[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
|
|
691
691
|
`,stderr:n,exitCode:0}:a?{stdout:`${o.map(e=>e.data).join(`
|
|
692
|
-
`)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${
|
|
693
|
-
`)}\n`,stderr:n,exitCode:0}}async function
|
|
694
|
-
`,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===
|
|
692
|
+
`)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${sx(e.type)}\t${e.data}`).join(`
|
|
693
|
+
`)}\n`,stderr:n,exitCode:0}}async function lx(e,t){let n=Rb(e);if(n.kind===`version`)return{stdout:`DiG 9.20.0-slicc (DNS-over-HTTPS)
|
|
694
|
+
`,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===Tb,c,l;try{c=s?Gb(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 cx(s?rx(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 ux(){let e=g();return C(`dig`,async t=>t.includes(`--help`)||t.includes(`-h`)?ox():lx(t,e))}const dx=[`api-catalog`,`service-desc`,`service-meta`,`status`,`https://llmstxt.org/rel/llms-txt`];async function fx(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)dx.includes(e)&&(o.has(e)||(o.add(e),a.push(px(n,s.href,r,t.signal).then(t=>mx(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 px(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 mx(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 hx=[`--follow`];function gx(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 _x(){return`discover — fetch a URL and parse RFC 8288 Link headers
|
|
695
695
|
|
|
696
696
|
Usage:
|
|
697
697
|
discover <url> Print parsed links (and any SLICC handoff match)
|
|
@@ -705,9 +705,9 @@ Output is always JSON.
|
|
|
705
705
|
Examples:
|
|
706
706
|
discover ${r}/handoff?handoff=demo
|
|
707
707
|
discover --follow ${r}/llms.txt
|
|
708
|
-
`}function
|
|
709
|
-
`,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
|
|
710
|
-
`,stderr:``,exitCode:0}})}function
|
|
708
|
+
`}function vx(){return C(`discover`,async e=>{if(e.length===0||T(e))return{stdout:_x(),stderr:``,exitCode:0};let t=w(e,{bool:hx});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
|
|
709
|
+
`,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 fx(l,{fetchImpl:gx(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)+`
|
|
710
|
+
`,stderr:``,exitCode:0}})}function yx(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 bx=`esbuild - thin wrapper over the ipk-loaded esbuild-wasm
|
|
711
711
|
|
|
712
712
|
Usage:
|
|
713
713
|
esbuild [options] <entry> Bundle / transform
|
|
@@ -745,12 +745,12 @@ Module resolution:
|
|
|
745
745
|
|
|
746
746
|
Install:
|
|
747
747
|
Inert until the backing package is installed:
|
|
748
|
-
${F} esbuild-wasm@${
|
|
748
|
+
${F} esbuild-wasm@${xi}
|
|
749
749
|
Then \`esbuild --version\` and the bundle/transform commands above.
|
|
750
|
-
`,
|
|
751
|
-
`,exitCode:2};let r;try{r=await
|
|
752
|
-
`,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:[
|
|
753
|
-
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=
|
|
750
|
+
`,xx=new Set([`iife`,`cjs`,`esm`]),Sx=new Set([`browser`,`node`,`neutral`]),Cx=new Set([`linked`,`inline`,`external`,`both`]),wx={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function Tx(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 Ex(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(!Cx.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`&&Cx.has(i)?(e.sourcemap=i,1):(e.sourcemap=!0,0)}function Ox(e,t,n,r){if(t.key===`--outfile`){let{value:i,advance:a}=Ex(t,n,r);return e.outfile=i,a}if(t.key===`--format`){let{value:i,advance:a}=Ex(t,n,r);if(!xx.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}=Ex(t,n,r);if(!Sx.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}=Ex(t,n,r);return e.target=i.split(`,`).map(e=>e.trim()).filter(Boolean),a}if(t.key===`--loader`){let{value:i,advance:a}=Ex(t,n,r);return e.loader=i,a}return-1}function kx(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 Ax(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=wx[r];if(i){t[i]=!0;continue}if(r.startsWith(`--external:`)){t.external.push(r.slice(11));continue}if(kx(r,`--define:`,t.define)||kx(r,`--banner:`,t.banner)||kx(r,`--footer:`,t.footer))continue;let a=Tx(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=Ox(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 jx(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&Mx(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if(Px(a.path)){let n=a.importer?.startsWith(`/`)?Nr(a.importer):t;return{path:await Lx(e,e.resolvePath(n,a.path))}}return Fx(a.path,a.importer,n,Nx(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:Ix(t.path),resolveDir:Nr(t.path)})}}}function Mx(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!Px(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function Nx(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 Px(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function Fx(e,t,n,r){let i=t?.startsWith(`/`)?Nr(t):n.fromDir;try{let t=await Sr(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 Ix(e){let t=kr(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 Lx(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=Or(t,`index${r}`);if(await e.exists(n))return n}return t}async function Rx(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 zx(){return C(`esbuild`,async(e,t)=>{let n;try{n=Ax(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:bx,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)
|
|
751
|
+
`,exitCode:2};let r;try{r=await bi({ipk:yx(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?Bx(n,t,r):Vx(n,t,r)})}async function Bx(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:bx,stderr:``,exitCode:0};let a={loader:e.loader??Ix(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 Rx(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 Rx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Vx(e,t,n){if(e.entries.length===0)return{stdout:``,stderr:`esbuild: --bundle requires at least one entry point
|
|
752
|
+
`,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:[jx(t.fs,t.cwd,yx(t),e.external,e.platform)],format:e.format??`esm`,...Hx(e)};try{let r=await n.build(i),a=await Rx(n.formatMessages,r.errors,r.warnings),o=r.outputFiles??[];if(e.outfile){if(o.length===0)return{stdout:``,stderr:`esbuild: build produced no output
|
|
753
|
+
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=Nr(n);for(let e=1;e<o.length;e++){let n=o[e],i=Or(r,kr(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 Rx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function Hx(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 Ux(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var Wx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!si())throw Error(`Web Serial is unavailable in this browser`);return pi()}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)}},Gx=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:Ux(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 Kx(e,t){return e&&si()?new Wx:t?new Gx(t):null}const qx=Symbol(`picker-approval-timeout`);async function Jx(e,t,n){let r=Ve.generateId(),i=!1,a=He({id:r,html:Jm(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 qx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Ve.cancel(r,`${e}: timed out`),t(qx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===qx)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 Yx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function Xx(e){return Bn(e,Yx)}function B(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 Zx(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 Qx(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=B(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=B(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}const $x=new Set([`none`,`even`,`odd`]),eS=new Set([`none`,`hardware`]);function tS(e){let t={baudRate:e.has(`--baud`)?B(e.get(`--baud`),`baud`):9600};if(e.has(`--data-bits`)&&(t.dataBits=B(e.get(`--data-bits`),`data-bits`)),e.has(`--stop-bits`)&&(t.stopBits=B(e.get(`--stop-bits`),`stop-bits`)),e.has(`--parity`)){let n=e.get(`--parity`);if(!$x.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!eS.has(n))throw Error(`invalid --flow-control: '${n}'`);t.flowControl=n}return e.has(`--buffer-size`)&&(t.bufferSize=B(e.get(`--buffer-size`),`buffer-size`)),t}function nS(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=B(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=Zx(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=B(e.get(`--timeout-ms`),`timeout-ms`)),t}function rS(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 iS(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=rS(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=rS(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=rS(e.get(`--break`),`break`)),t}function aS(e){let t=cr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function oS(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function sS(e){return`0x${e.toString(16).padStart(4,`0`)}`}function cS(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${sS(e.usbVendorId??0)}:${sS(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function lS(e){return`cts=${+!!e.clearToSend} dcd=${+!!e.dataCarrierDetect} dsr=${+!!e.dataSetReady} ri=${+!!e.ringIndicator}\n`}function V(e){return{stdout:e,stderr:``,exitCode:0}}function H(e){return{stdout:``,stderr:`serial: ${e}\n`,exitCode:1}}const uS=`serial - access serial ports via Web Serial
|
|
754
754
|
|
|
755
755
|
Usage: serial <subcommand> [options]
|
|
756
756
|
|
|
@@ -769,7 +769,7 @@ Open flags:
|
|
|
769
769
|
--parity none|even|odd --flow-control none|hardware --buffer-size N
|
|
770
770
|
|
|
771
771
|
Read flags:
|
|
772
|
-
--bytes N Stop after N bytes (default: ${
|
|
772
|
+
--bytes N Stop after N bytes (default: ${gi} cap)
|
|
773
773
|
--until <hex> Stop once this byte sequence is seen
|
|
774
774
|
--timeout-ms N Stop after N ms (default 1000)
|
|
775
775
|
--hex Hex-dump the bytes instead of emitting raw
|
|
@@ -780,10 +780,10 @@ Signal flags (set):
|
|
|
780
780
|
Options:
|
|
781
781
|
-h, --help
|
|
782
782
|
|
|
783
|
-
Reads/writes are capped at ${
|
|
784
|
-
`;function
|
|
785
|
-
`):V(`${t.map(
|
|
786
|
-
`)}\n`)}async function
|
|
783
|
+
Reads/writes are capped at ${gi} bytes (4 MiB).
|
|
784
|
+
`;function dS(e,t){if(t)return V(e.length?`${oS(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return V(n)}async function fS(e){let t=await e.list();return t.length===0?V(`no granted serial ports
|
|
785
|
+
`):V(`${t.map(cS).join(`
|
|
786
|
+
`)}\n`)}async function pS(e,t){let n=e.get(`--__resolved`);if(n)return V(`${cS(await t.info(n))}\n`);let r=Qx(e),i=Be();if(i){let e=await Jx(`serial-port`,r,i);if(e.handle)return V(`${cS(await t.info(e.handle))}\n`);let n=e.info,a=si();if(!a)return H(`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 H(`request: granted port could not be re-acquired`);let s=pi(),c=s.register(o),l=s.get(c);return l?V(`${cS(oi(c,l))}\n`):H(`request: failed to register granted port`)}return V(`${cS(await t.request(r))}\n`)}async function mS(e,t,n){let r=e[1];return r?(await n.open(r,tS(t)),V(``)):H(`open: handle required`)}async function hS(e,t){let n=e[1];return n?(await t.close(n),V(``)):H(`close: handle required`)}async function gS(e,t,n,r){let i=e[1];if(!i)return H(`read: handle required`);let a=nS(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?H(`read --bytes exceeds 4 MiB limit`):dS(await r.read(i,a),n.has(`--hex`))}async function _S(e,t,n){let r=e[1];if(!r)return H(`write: handle required`);let i=aS(t);return i.length>4194304?H(`write payload exceeds 4 MiB limit`):V(`${await n.write(r,i)} bytes written\n`)}async function vS(e,t,n){let[,r,i]=e;return!r||!i?H(`signals: handle and get|set required`):i===`get`?V(lS(await n.getSignals(r))):i===`set`?(await n.setSignals(r,iS(t)),V(``)):H(`signals: unknown action '${i}' (use get|set)`)}async function yS(e,t,n){let{positionals:r,flags:i,bools:a}=Xx(e),o=r[0];switch(o){case`list`:return fS(n);case`request`:return pS(i,n);case`open`:return mS(r,i,n);case`close`:return hS(r,n);case`read`:return gS(r,i,a,n);case`write`:return _S(r,t,n);case`signals`:return vS(r,i,n);default:return H(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function bS(){return C(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return V(uS);let n=ui(be(),b());if(!n)return H(`Web Serial is unavailable in this environment`);try{return await yS(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?H(`user cancelled or no port selected`):H(t)}})}const xS=new Set([`--port`,`--baud`,`--vid`,`--pid`]),SS=115200;function CS(e){return Bn(e,xS)}function wS(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function TS(e){return{stdout:e,stderr:``,exitCode:0}}function ES(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const DS=`esptool - flash ESP32 / ESP8266 chips via esptool-js
|
|
787
787
|
|
|
788
788
|
Usage: esptool [--port H] [--baud N] <subcommand> [args]
|
|
789
789
|
|
|
@@ -800,37 +800,37 @@ Subcommands:
|
|
|
800
800
|
|
|
801
801
|
Options:
|
|
802
802
|
--port H Use an existing serial handle from 'serial request'
|
|
803
|
-
--baud N Flash baud rate (default ${
|
|
803
|
+
--baud N Flash baud rate (default ${SS})
|
|
804
804
|
--vid 0x.. Picker filter when --port is omitted
|
|
805
805
|
--pid 0x.. Picker filter when --port is omitted
|
|
806
806
|
--erase write_flash: erase the whole chip before writing
|
|
807
807
|
-h, --help
|
|
808
808
|
|
|
809
809
|
Without --port, the Web Serial picker opens (asks for permission).
|
|
810
|
-
`;async function
|
|
811
|
-
`)}\n`)}case`read_mac`:{let e=await
|
|
812
|
-
`)}\n`)}case`erase_flash`:{let e=await
|
|
810
|
+
`;async function OS(e,t){return e.get(`--port`)||(await t.request(Qx(e))).handle}async function kS(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=B(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 AS(e,t,n,r){let{positionals:i,flags:a,bools:o}=CS(e),s=wS(i[0]??``),c=a.has(`--baud`)?B(a.get(`--baud`),`baud`):SS,l=[],u=e=>l.push(e);switch(s){case`chip_id`:{let e=await OS(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}`),TS(`${l.join(`
|
|
811
|
+
`)}\n`)}case`read_mac`:{let e=await OS(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),TS(`${l.join(`
|
|
812
|
+
`)}\n`)}case`erase_flash`:{let e=await OS(a,r);return await n.eraseFlash(e,c,u),TS(l.length?`${l.join(`
|
|
813
813
|
`)}\n`:`flash erased
|
|
814
|
-
`)}case`write_flash`:{let e=await
|
|
814
|
+
`)}case`write_flash`:{let e=await kS(i,t),s=await OS(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),TS(l.length?`${l.join(`
|
|
815
815
|
`)}\n`:`flash written
|
|
816
|
-
`)}case`read_flash`:{if(i.length<4)return
|
|
817
|
-
`)}\n`)}case`read_reg`:{if(i.length<2)return
|
|
818
|
-
`)}\n`)}case`flash_id`:{let e=await
|
|
819
|
-
`)}\n`)}case`erase_region`:{if(i.length<3)return
|
|
816
|
+
`)}case`read_flash`:{if(i.length<4)return ES(`read_flash expects <addr> <size> <outfile>`);let e=B(i[1],`address`),o=B(i[2],`size`),s=t.fs.resolvePath(t.cwd,i[3]),d=await OS(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}`),TS(`${l.join(`
|
|
817
|
+
`)}\n`)}case`read_reg`:{if(i.length<2)return ES(`read_reg expects <addr>`);let e=B(i[1],`address`),t=await OS(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`)}`),TS(`${l.join(`
|
|
818
|
+
`)}\n`)}case`flash_id`:{let e=await OS(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`}`),TS(`${l.join(`
|
|
819
|
+
`)}\n`)}case`erase_region`:{if(i.length<3)return ES(`erase_region expects <addr> <size>`);let e=B(i[1],`address`),t=B(i[2],`size`),o=await OS(a,r);return await n.eraseRegion(o,c,e,t,u),TS(l.length?`${l.join(`
|
|
820
820
|
`)}\n`:`region erased
|
|
821
|
-
`)}case`run`:{let e=await
|
|
821
|
+
`)}case`run`:{let e=await OS(a,r);return await n.run(e,c,u),TS(l.length?`${l.join(`
|
|
822
822
|
`)}\n`:`running app
|
|
823
|
-
`)}default:return
|
|
823
|
+
`)}default:return ES(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function jS(){return C(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return TS(DS);let n=be(),r=b(),i=Kx(n,r),a=ui(n,r);if(!i||!a)return ES(`Web Serial is unavailable in this environment`);try{return await AS(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?ES(`user cancelled or no port selected`):ES(t)}})}function MS(){return C(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-dcwnpB-U.js`);return n(e,t)})}function NS(){return C(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-Cf6ZRThe.js`);return n(e,t)})}function PS(e){let t=xe().find(t=>t.id===e);return t?t.id:null}function FS(){return xe().map(e=>e.id)}function IS(e){return Ce(e)}function LS(e,t){if(Se(e,t),Te()[e]!==t)throw Error(`flag ${e} cannot be overridden on this float`)}function RS(e){let t=globalThis.localStorage;if(!t||typeof t.setItem!=`function`)throw Error(`this realm has no localStorage to apply the override`);t.setItem(Ee,e)}const zS=`usage: flags set <id> on|off
|
|
824
824
|
flags get <id>
|
|
825
825
|
|
|
826
826
|
set <id> on|off Persist a local override. The next new session reads it.
|
|
827
827
|
get <id> Print the resolved value
|
|
828
|
-
`;function
|
|
828
|
+
`;function BS(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function VS(){return`known flags: ${FS().join(`, `)}\n`}async function HS(e,t){let n=b();if(n&&!be()){let{overridesJson:r}=await n.call(`feature-flag-set`,{id:e,value:t});RS(r)}else LS(e,t);if(IS(e)!==t)throw Error(`flag ${e} is ${IS(e)??`unset`} after set`)}async function US(e){if(e.length!==2)return BS(`usage: flags set <id> on|off`);let t=PS(e[0]);if(!t)return BS(`flags: unknown flag ${e[0]}\n${VS().trimEnd()}`);let n=e[1].toLowerCase();if(n!==`on`&&n!==`off`)return BS(`flags set: value must be on or off`);try{await HS(t,n)}catch(e){return BS(`flags set: ${e instanceof Error?e.message:String(e)}`)}return{stdout:`${t}=${n}\n`,stderr:``,exitCode:0}}function WS(e){if(e.length!==1)return BS(`usage: flags get <id>`);let t=PS(e[0]);if(!t)return BS(`flags: unknown flag ${e[0]}\n${VS().trimEnd()}`);let n=IS(t);return n===void 0?BS(`flags: ${t} has no value`):{stdout:`${n}\n`,stderr:``,exitCode:0}}function GS(){return C(`flags`,async e=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:zS,stderr:``,exitCode:0};let t=e[0];if(T(e.slice(1)))return{stdout:ht(`flags`,t,zS),stderr:``,exitCode:0};switch(t){case`set`:return US(e.slice(1));case`get`:return WS(e.slice(1));default:return BS(`flags: unknown subcommand "${t}"\nusage: flags set <id> on|off
|
|
829
829
|
flags get <id>
|
|
830
830
|
|
|
831
831
|
set <id> on|off Persist a local override. The next new session reads it.
|
|
832
|
-
get <id> Print the resolved value`)}})}const
|
|
833
|
-
`);let n=``;for(let[,e]of
|
|
832
|
+
get <id> Print the resolved value`)}})}const KS=new Map;let qS=0;const JS=e=>({stdout:e,stderr:``,exitCode:0}),YS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),XS=[`--path`,`--pattern`,`--scoop`,`--name`];function ZS(e){let t=w(e.slice(1),{});if(`error`in t)return YS(t.error);if(KS.size===0)return JS(`No active file watchers.
|
|
833
|
+
`);let n=``;for(let[,e]of KS)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 JS(n)}function QS(e){let t=w(e.slice(1),{});if(`error`in t)return YS(t.error);let n=t.positionals[0];if(!n)return YS(`delete requires an ID`);let r=KS.get(n);return r?(r.unsubscribe(),KS.delete(n),JS(`Deleted watcher "${r.name}" (${n})\n`)):YS(`watcher not found: ${n}`)}function $S(e){let t=w(e.slice(1),{value:XS});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 eC(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function tC(e,t){let n=$S(e);if(`error`in n)return YS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=ca(r.scoop,t)??``,!r.basePath||!r.pattern)return YS(`--path and --pattern are required`);let a=await Dy(await Ty(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return YS(`file system watcher not available`);let c=`fsw-${++qS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,eC(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}})});KS.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`),JS(f)}function nC(){return C(`fswatch`,async(e,t)=>{let n=e[0];if(!n||T(e,{valueFlags:XS}))return JS(`usage: fswatch <command> [options]
|
|
834
834
|
|
|
835
835
|
Commands:
|
|
836
836
|
create --path <path> --pattern <glob> [--scoop <name>] [--name <name>] Watch for file changes
|
|
@@ -842,7 +842,7 @@ Options:
|
|
|
842
842
|
--pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
|
|
843
843
|
--scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
|
|
844
844
|
--name <name> Human-readable name for the watcher
|
|
845
|
-
`);switch(n){case`list`:return
|
|
845
|
+
`);switch(n){case`list`:return ZS(e);case`delete`:return QS(e);case`create`:return await tC(e,t.env);default:return YS(`unknown command: ${n}`)}})}function rC(e){return C(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-ZVh0R1Qb.js`);return r(t,n,e)})}function iC(e={}){return C(`go`,async(t,n)=>{let{runGoCommand:r}=await import(`./go-driver-CvHJRpyw.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}function aC(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
|
|
846
846
|
hear --devices | --status | --warmup
|
|
847
847
|
|
|
848
848
|
Speech recognition: listens on the microphone until you pause, then
|
|
@@ -861,27 +861,27 @@ Options:
|
|
|
861
861
|
--devices List audio input devices
|
|
862
862
|
--status Show the enhanced model state (downloading/ready + ETA)
|
|
863
863
|
--warmup Start the enhanced model download in the background
|
|
864
|
-
`,stderr:``,exitCode:0}}const
|
|
864
|
+
`,stderr:``,exitCode:0}}const oC={"--devices":`devices`,"--status":`status`,"--warmup":`warmup`},sC={"-i":`a file path`,"-l":`a language tag`,"-T":`a timeout in seconds`,"-d":`a device id`,"--engine":`an engine name`};function cC(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 lC(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=oC[r];if(i){t[i]=!0;continue}if(!(r in sC))return dC(`unknown option: ${r}`);let a=n+1<e.length?e[++n]:null;if(a==null)return dC(`${r} requires ${sC[r]}`);let o=cC(t,r,a);if(o)return dC(o)}return t}function uC(e){switch(e.state){case`ready`:return`enhanced engine: ready
|
|
865
865
|
`;case`failed`:return`enhanced engine: failed (re-run hear --warmup to retry)
|
|
866
866
|
`;case`idle`:return`enhanced engine: not downloaded (run hear --warmup)
|
|
867
|
-
`;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
|
|
867
|
+
`;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 dC(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function fC(e){return e instanceof Error?e.message:String(e)}function pC(e){let t=e.map((e,t)=>`${e.deviceId}\t${e.label||`Microphone ${t+1}`}`);return t.join(`
|
|
868
868
|
`)+(t.length?`
|
|
869
|
-
`:``)}async function
|
|
870
|
-
`,stderr:``,exitCode:0}}catch(e){return
|
|
869
|
+
`:``)}async function mC(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:pC((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:dC(`device enumeration unavailable`):{stdout:pC((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return dC(fC(e))}}async function hC(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:uC(t?n():e()),stderr:``,exitCode:0}}return{stdout:uC(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return dC(fC(e))}}function gC(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function _C(e,t,n,r){if(n.byteLength===0)return dC(`no audio on ${r}`);let i=gC(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+`
|
|
870
|
+
`,stderr:``,exitCode:0}}catch(e){return dC(`transcription failed: ${fC(e)}`)}}async function vC(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 dC(`cannot open ${r}: No such file`)}let o=Cr(i);return!o.startsWith(`audio/`)&&!o.startsWith(`video/`)?dC(`${r} is not an audio file`):_C(e,t,a,r)}async function yC(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+`
|
|
871
871
|
`,stderr:``,exitCode:0}:{stdout:``,stderr:`hear: no speech detected
|
|
872
|
-
`,exitCode:1}}catch(e){return
|
|
872
|
+
`,exitCode:1}}catch(e){return dC(fC(e))}}function bC(){return C(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return aC();let n=lC(e);if(`exitCode`in n)return n;let r={local:be(),panelRpc:b()};if(!r.local&&!r.panelRpc)return dC(`speech recognition unavailable in this environment`);if(n.devices)return mC(r);if(n.status||n.warmup)return hC(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return vC(r,n,t);let i=lr(t.stdin);return n.inputFile===`-`||n.deviceId==null&&!pr(t,i.byteLength)?_C(r,n,i,`stdin`):yC(r,n)})}function xC(e,t,n){return typeof e.onSessionReplaced==`function`?e.onSessionReplaced(t,n):()=>void 0}function SC(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=xC(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 CC=[`debug`,`log`,`info`,`warning`,`error`],wC=1e3,TC={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 EC(e,t,n,r,i){if(t.consoleCleanup.has(r))return;t.consoleMessages.set(r,[]);let a=SC({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=TC[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>wC&&c.splice(0,c.length-wC))}]],enable:(e,t)=>e.send(`Runtime.enable`,{},t)});t.consoleCleanup.set(r,()=>a.stop())}const DC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0]??`log`,s=r.clear===`true`,c=CC.indexOf(o);if(c===-1)return{stdout:``,stderr:`Invalid level "${o}". Valid: ${CC.join(`, `)}\n`,exitCode:1};t.consoleCleanup.has(a.targetId)||await i(a.targetId,async({sessionId:n,transport:r})=>{await r.send(`Runtime.enable`,{},n),EC(e,t,r,a.targetId,n)});let l=(t.consoleMessages.get(a.targetId)??[]).filter(e=>CC.indexOf(e.level)>=c);return s&&t.consoleMessages.set(a.targetId,[]),l.length===0?{stdout:`No console messages
|
|
873
873
|
`,stderr:``,exitCode:0}:{stdout:l.map(e=>`[${e.level}] ${e.text}`).join(`
|
|
874
874
|
`)+`
|
|
875
|
-
`,stderr:``,exitCode:0}};function
|
|
875
|
+
`,stderr:``,exitCode:0}};function OC(e){return e.cookies??[]}function kC(e){return`${e.name}=${e.value}\tDomain=${e.domain}\tPath=${e.path}\tSecure=${e.secure}\tHttpOnly=${e.httpOnly}\tExpires=${e.expires}`}function AC(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 jC(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 MC=async({browser:e,flags:t,onTab:n})=>{let r=N(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=OC(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(kC).join(`
|
|
876
876
|
`)})+`
|
|
877
|
-
`,stderr:``,exitCode:0}},
|
|
878
|
-
`,exitCode:1};let i=N(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=
|
|
877
|
+
`,stderr:``,exitCode:0}},NC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-get requires a cookie name
|
|
878
|
+
`,exitCode:1};let i=N(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=OC(await e.send(`Network.getCookies`)).filter(e=>e.name===a);if(t.length===0)throw Error(`Cookie "${a}" not found`);return t.map(kC).join(`
|
|
879
879
|
`)})+`
|
|
880
|
-
`,stderr:``,exitCode:0}},
|
|
881
|
-
`,exitCode:1};let i=N(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await
|
|
882
|
-
`,exitCode:1};let i=N(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
|
|
883
|
-
`,stderr:``,exitCode:0})};function
|
|
884
|
-
`,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=t.snapshots.get(a.targetId);return s?
|
|
880
|
+
`,stderr:``,exitCode:0}},PC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length<2)return{stdout:``,stderr:`cookie-set requires <name> <value>
|
|
881
|
+
`,exitCode:1};let i=N(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await Wn(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`,AC(i))}),{stdout:`Cookie "${t[0]}" set\n`,stderr:``,exitCode:0})},FC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-delete requires a cookie name
|
|
882
|
+
`,exitCode:1};let i=N(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 Wn(e)).href),await e.send(`Network.deleteCookies`,jC(r))}),{stdout:`Cookie "${t[0]}" deleted\n`,stderr:``,exitCode:0})},IC=async({browser:e,flags:t,onTab:n})=>{let r=N(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
|
|
883
|
+
`,stderr:``,exitCode:0})};function LC(e,t){try{return _e(e,t),null}catch(e){return{stdout:``,stderr:`${e.message}\n`,exitCode:1}}}const RC=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)
|
|
884
|
+
`,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=t.snapshots.get(a.targetId);return s?LC(s,o)||{stdout:await i(a.targetId,async e=>{let{objectId:t,entry:n}=await y(e,s,o),r=JSON.parse(await pe(e,t,`function() {
|
|
885
885
|
const el = this;
|
|
886
886
|
const testId = el.getAttribute('data-testid');
|
|
887
887
|
const label =
|
|
@@ -892,13 +892,13 @@ Options:
|
|
|
892
892
|
return JSON.stringify({ testId, label, placeholder, id });
|
|
893
893
|
}`)??`{}`);return r.testId?`page.getByTestId(${JSON.stringify(r.testId)})`:r.label?`page.getByLabel(${JSON.stringify(r.label)})`:r.placeholder?`page.getByPlaceholder(${JSON.stringify(r.placeholder)})`:r.id?`page.locator(${JSON.stringify(`#${r.id}`)})`:n.name?`page.getByRole(${JSON.stringify(n.role)}, { name: ${JSON.stringify(n.name)} })`:`page.getByRole(${JSON.stringify(n.role)})`})+`
|
|
894
894
|
`,stderr:``,exitCode:0}:{stdout:``,stderr:`No snapshot available. Run "snapshot" first.
|
|
895
|
-
`,exitCode:1}},
|
|
895
|
+
`,exitCode:1}},zC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(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 => {
|
|
896
896
|
el.style.outline = '';
|
|
897
897
|
el.style.background = '';
|
|
898
898
|
el.removeAttribute('data-slicc-highlight');
|
|
899
899
|
})`,returnByValue:!0},e)}),{stdout:`All highlights removed
|
|
900
900
|
`,stderr:``,exitCode:0};if(!n[0])return{stdout:``,stderr:`highlight requires a ref, or use --hide to remove all
|
|
901
|
-
`,exitCode:1};let c=n[0],l=t.snapshots.get(a.targetId);return l?
|
|
901
|
+
`,exitCode:1};let c=n[0],l=t.snapshots.get(a.targetId);return l?LC(l,c)||(await i(a.targetId,async e=>{let{objectId:t}=await y(e,l,c);await pe(e,t,o?`function() {
|
|
902
902
|
this.style.outline = '';
|
|
903
903
|
this.style.background = '';
|
|
904
904
|
this.removeAttribute('data-slicc-highlight');
|
|
@@ -906,61 +906,61 @@ Options:
|
|
|
906
906
|
this.style.cssText += '; ' + s;
|
|
907
907
|
this.setAttribute('data-slicc-highlight', '1');
|
|
908
908
|
}`,o?[]:[s])}),{stdout:o?`Highlight removed from ${c}\n`:`Highlighted ${c}\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`No snapshot available. Run "snapshot" first.
|
|
909
|
-
`,exitCode:1}},
|
|
910
|
-
`,stderr:``,exitCode:0})};function
|
|
911
|
-
`,exitCode:1};let a=
|
|
912
|
-
`,stderr:``,exitCode:0}},
|
|
913
|
-
`,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=
|
|
914
|
-
`,stderr:``,exitCode:0}};function
|
|
915
|
-
`,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await
|
|
916
|
-
`,stderr:i?`${i}\n`:``,exitCode:+!!a.error}};function
|
|
917
|
-
`,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s
|
|
909
|
+
`,exitCode:1}},BC=async({browser:e,positional:t,flags:n,onTab:r})=>{let i=N(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}},VC=async({browser:e,flags:t,onTab:n})=>{let r=N(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
|
|
910
|
+
`,stderr:``,exitCode:0})};function HC(e){let t=e instanceof Error?e.message:String(e);return/SyntaxError/.test(t)}function UC(e){return/\bawait\b/.test(e)||/\breturn\b/.test(e)}async function WC(e,t){try{return await e(t)}catch(n){if(!HC(n)||!UC(t))throw n;try{return await e(`(async () => (\n${t}\n))()`)}catch(r){if(!HC(r))throw r;try{return await e(`(async () => {\n${t}\n})()`)}catch(e){throw HC(e)?n:e}}}}function GC(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 KC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval requires an expression
|
|
911
|
+
`,exitCode:1};let a=GC(`eval`,r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=N(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 Hn(e,r),n=await WC(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`)+`
|
|
912
|
+
`,stderr:``,exitCode:0}},qC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval-file requires a file path
|
|
913
|
+
`,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=GC(`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 Hn(e,r),n=await WC(t?n=>e.evaluateInFrame(t.frameId,n,{world:`main`}):t=>e.evaluate(t),l);return typeof n==`string`?n:JSON.stringify(n,null,2)});if(c){let e=u??`null`;return await t.writeFile(c,e),{stdout:`Result saved to ${c} (${Math.round(new TextEncoder().encode(e).length/1024)} KB)\n`,stderr:``,exitCode:0}}return{stdout:(u??`undefined`)+`
|
|
914
|
+
`,stderr:``,exitCode:0}};function JC(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 YC(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 XC(e,t,n){let r=``;try{r=new URL(e).hostname}catch{return{}}let i=r?Th(r):``;if(!i)return{};let a;try{a=await Oh(n)}catch(e){return{warning:`playwright-cli: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}`}}let o=await YC(t),s=[];for(let e of a){if(!e.hostname||Th(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 ZC(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 fx(o,{fetchImpl:JC(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 XC(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 QC=async({fs:e,positional:t,flags:n})=>{if(t.length===0)return{stdout:``,stderr:`fetch requires a URL
|
|
915
|
+
`,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await ZC(r,{discover:n.discover===`true`,method:n.method??`GET`,fs:e});return{stdout:JSON.stringify(a,null,2)+`
|
|
916
|
+
`,stderr:i?`${i}\n`:``,exitCode:+!!a.error}};function $C(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 ew(e){let[t,n]=ua(`Enter`);await e.send(`Input.dispatchKeyEvent`,t),await e.send(`Input.dispatchKeyEvent`,n)}async function tw(e,t,n){((await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Zn,returnByValue:!0})).result?.value??``)!==n&&await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Vn,arguments:[{value:n}],returnByValue:!0})}async function nw(e,t,n){await e.clickByBackendNodeId(t.backendNodeId),await e.send(`Runtime.callFunctionOn`,{objectId:t.objectId,functionDeclaration:Xn,returnByValue:!0}),await e.insertText(n),await tw(e,t.objectId,n)}const rw=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)
|
|
917
|
+
`,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=$C(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await pe(e,r.objectId,`function() {
|
|
918
918
|
this.scrollIntoView({ block: 'center' });
|
|
919
919
|
this.click();
|
|
920
920
|
}`),t.snapshots.delete(a.targetId),`Clicked ${o} (in iframe)`):(await e.clickByBackendNodeId(r.backendNodeId,s),t.snapshots.delete(a.targetId),`Clicked ${o}`)})+`
|
|
921
|
-
`,stderr:``,exitCode:0}},
|
|
922
|
-
`,exitCode:1};let i=N(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
|
|
923
|
-
`,exitCode:1};let a=N(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=ce(t,a.targetId),i=await y(e,n,o);return i.entry.frameId?(await
|
|
921
|
+
`,stderr:``,exitCode:0}},iw=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`type requires text
|
|
922
|
+
`,exitCode:1};let i=N(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 ew(e)}),{stdout:`Typed: ${a}\n`,stderr:``,exitCode:0}},aw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`fill requires <ref> <text>
|
|
923
|
+
`,exitCode:1};let a=N(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=ce(t,a.targetId),i=await y(e,n,o);return i.entry.frameId?(await pe(e,i.objectId,`function(text) {
|
|
924
924
|
this.scrollIntoView({ block: 'center' });
|
|
925
925
|
this.focus();
|
|
926
926
|
this.value = '';
|
|
927
927
|
this.value = text;
|
|
928
928
|
this.dispatchEvent(new Event('input', { bubbles: true }));
|
|
929
929
|
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
930
|
-
}`,[s]),t.snapshots.delete(a.targetId),r.submit===`true`&&await
|
|
931
|
-
`,stderr:``,exitCode:0}},
|
|
932
|
-
`,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],[o,s]=
|
|
933
|
-
`,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=
|
|
934
|
-
`,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=
|
|
935
|
-
`,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c
|
|
930
|
+
}`,[s]),t.snapshots.delete(a.targetId),r.submit===`true`&&await ew(e),`Filled ${o} with: ${s} (in iframe)`):(await nw(e,i,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await ew(e),`Filled ${o} with: ${s}`)})+`
|
|
931
|
+
`,stderr:``,exitCode:0}},ow=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`press requires a key name
|
|
932
|
+
`,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],[o,s]=ua(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}},sw=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keydown requires a key name
|
|
933
|
+
`,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=da(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}},cw=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keyup requires a key name
|
|
934
|
+
`,exitCode:1};let i=N(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0],o=da(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}},lw=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)
|
|
935
|
+
`,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=$C(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await pe(e,r.objectId,`function() {
|
|
936
936
|
this.scrollIntoView({ block: 'center' });
|
|
937
937
|
this.dispatchEvent(new MouseEvent('dblclick', { bubbles: true }));
|
|
938
938
|
}`),t.snapshots.delete(a.targetId),`Double-clicked ${o} (in iframe)`):(await e.dblclickByBackendNodeId(r.backendNodeId,s,c),t.snapshots.delete(a.targetId),`Double-clicked ${o}`)})+`
|
|
939
|
-
`,stderr:``,exitCode:0}},
|
|
940
|
-
`,exitCode:1};let a=N(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=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await
|
|
939
|
+
`,stderr:``,exitCode:0}},uw=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)
|
|
940
|
+
`,exitCode:1};let a=N(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=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await pe(e,r.objectId,`function() {
|
|
941
941
|
this.scrollIntoView({ block: 'center' });
|
|
942
942
|
this.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
|
943
943
|
}`),`Hovered ${o} (in iframe)`):(await e.hoverByBackendNodeId(r.backendNodeId),`Hovered ${o}`)})+`
|
|
944
|
-
`,stderr:``,exitCode:0}},
|
|
945
|
-
`,exitCode:1};let a=N(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=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await
|
|
944
|
+
`,stderr:``,exitCode:0}},dw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`select requires <ref> <value>
|
|
945
|
+
`,exitCode:1};let a=N(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=ce(t,a.targetId),r=await y(e,n,o);return r.entry.frameId?(await pe(e,r.objectId,`function(value) {
|
|
946
946
|
this.value = value;
|
|
947
947
|
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
948
948
|
}`,[s]),t.snapshots.delete(a.targetId),`Selected "${s}" on ${o} (in iframe)`):(await e.selectByBackendNodeId(r.backendNodeId,s),t.snapshots.delete(a.targetId),`Selected "${s}" on ${o}`)})+`
|
|
949
|
-
`,stderr:``,exitCode:0}};function
|
|
949
|
+
`,stderr:``,exitCode:0}};function fw(e){let t=e?`check`:`uncheck`,n=e?`Checked`:`Unchecked`;return async({state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`${t} requires a ref (e.g. e5)\n`,exitCode:1};let s=N(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0];return{stdout:await o(s.targetId,async t=>{let i=ce(r,s.targetId),a=await y(t,i,c),o=!!a.entry.frameId;return(o?await pe(t,a.objectId,`function(checked) {
|
|
950
950
|
if (this.checked === checked) return 'already';
|
|
951
951
|
this.checked = checked;
|
|
952
952
|
this.dispatchEvent(new Event('change', { bubbles: true }));
|
|
953
953
|
this.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
|
954
954
|
return 'toggled';
|
|
955
955
|
}`,[e]):await t.setCheckedByBackendNodeId(a.backendNodeId,e))===`already`?`${c} already ${n.toLowerCase()}`:(r.snapshots.delete(s.targetId),o?`${n} ${c} (in iframe)`:`${n} ${c}`)})+`
|
|
956
|
-
`,stderr:``,exitCode:0}}}const fw
|
|
956
|
+
`,stderr:``,exitCode:0}}}const pw=fw(!0),mw=fw(!1),hw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`drag requires <startRef> <endRef>
|
|
957
957
|
`,exitCode:1};let a=N(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=ce(t,a.targetId),r=await y(e,n,o);de(r.entry,o,`drag`);let i=await y(e,n,s);return de(i.entry,s,`drag`),await e.dragByBackendNodeIds(r.backendNodeId,i.backendNodeId),t.snapshots.delete(a.targetId),`Dragged ${o} to ${s}`})+`
|
|
958
|
-
`,stderr:``,exitCode:0}};async function
|
|
958
|
+
`,stderr:``,exitCode:0}};async function gw(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 _w(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 vw={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 yw(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return vw[t]??`application/octet-stream`}const bw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousemove requires <x> <y>
|
|
959
959
|
`,exitCode:1};let a=N(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
|
|
960
|
-
`,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})},
|
|
960
|
+
`,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})},xw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=_w(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} pressed\n`,stderr:``,exitCode:0}},Sw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=_w(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} released\n`,stderr:``,exitCode:0}},Cw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousewheel requires <dx> <dy>
|
|
961
961
|
`,exitCode:1};let a=N(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
|
|
962
|
-
`,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:
|
|
963
|
-
`;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
|
|
962
|
+
`,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:ww(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
|
|
963
|
+
`;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 ww(e,t,n,r){return`(() => {
|
|
964
964
|
const dx = ${JSON.stringify(n)}, dy = ${JSON.stringify(r)};
|
|
965
965
|
const canScroll = (el) => {
|
|
966
966
|
const style = getComputedStyle(el);
|
|
@@ -979,9 +979,9 @@ Options:
|
|
|
979
979
|
: (document.scrollingElement || document.documentElement);
|
|
980
980
|
target.scrollBy({ left: dx, top: dy, behavior: 'instant' });
|
|
981
981
|
return true;
|
|
982
|
-
})()`}const
|
|
983
|
-
`,exitCode:1};let s=N(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
|
|
984
|
-
`,exitCode:1};f.push({mimeType:u.slice(0,e),value:u.slice(e+1)})}return{stdout:await o(s.targetId,async e=>{let t=ce(r,s.targetId),{objectId:n}=await y(e,t,c);return await
|
|
982
|
+
})()`}const Tw=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)
|
|
983
|
+
`,exitCode:1};let s=N(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 gw(n,l),r=l.split(`/`).pop()??l;d.push({name:r,type:yw(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"
|
|
984
|
+
`,exitCode:1};f.push({mimeType:u.slice(0,e),value:u.slice(e+1)})}return{stdout:await o(s.targetId,async e=>{let t=ce(r,s.targetId),{objectId:n}=await y(e,t,c);return await pe(e,n,`function(filesData, dataItems) {
|
|
985
985
|
var dt = new DataTransfer();
|
|
986
986
|
for (var i = 0; i < filesData.length; i++) {
|
|
987
987
|
var f = filesData[i];
|
|
@@ -996,7 +996,7 @@ Options:
|
|
|
996
996
|
this.dispatchEvent(new DragEvent('drop', { bubbles: true, cancelable: true, dataTransfer: dt }));
|
|
997
997
|
return this.tagName;
|
|
998
998
|
}`,[d,f]),r.snapshots.delete(s.targetId),`Dropped onto ${c}`})+`
|
|
999
|
-
`,stderr:``,exitCode:0}},
|
|
999
|
+
`,stderr:``,exitCode:0}},Ew=e(`playwright-teleport`),Dw={origin:``,localStorage:{},sessionStorage:{}};function Ow(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 kw(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function Aw(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function jw(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function Mw(e,t,n){let r=Aw(t);if(t&&r===e)return t;let i=Aw(n);return n&&i===e?n:e||(t??n)}async function Nw(e,t){let n=await e.evaluate(`(() => {
|
|
1000
1000
|
const collect = (storage) => {
|
|
1001
1001
|
const items = {};
|
|
1002
1002
|
for (let i = 0; i < storage.length; i++) {
|
|
@@ -1010,7 +1010,7 @@ Options:
|
|
|
1010
1010
|
localStorage: collect(window.localStorage),
|
|
1011
1011
|
sessionStorage: collect(window.sessionStorage),
|
|
1012
1012
|
});
|
|
1013
|
-
})()`);if(typeof n!=`string`||n.length===0)return
|
|
1013
|
+
})()`);if(typeof n!=`string`||n.length===0)return Ew.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),Dw;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return Ew.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),Dw}}function Pw(e){return`(() => {
|
|
1014
1014
|
const snapshot = ${JSON.stringify(e)};
|
|
1015
1015
|
if (!snapshot.origin || window.location.origin !== snapshot.origin) return;
|
|
1016
1016
|
const markerKey = '__slicc_teleport_storage_applied__:' + snapshot.origin;
|
|
@@ -1026,7 +1026,7 @@ Options:
|
|
|
1026
1026
|
apply(window.localStorage, snapshot.localStorage || {});
|
|
1027
1027
|
apply(window.sessionStorage, snapshot.sessionStorage || {});
|
|
1028
1028
|
try { window.sessionStorage.setItem(markerKey, '1'); } catch {}
|
|
1029
|
-
})();`}function
|
|
1029
|
+
})();`}function Fw(e){return`(() => {
|
|
1030
1030
|
const snapshot = ${JSON.stringify(e)};
|
|
1031
1031
|
if (!snapshot.origin || globalThis.location.origin !== snapshot.origin) {
|
|
1032
1032
|
throw new Error('Teleport storage origin mismatch');
|
|
@@ -1044,82 +1044,82 @@ Options:
|
|
|
1044
1044
|
localStorageCount: Object.keys(snapshot.localStorage || {}).length,
|
|
1045
1045
|
sessionStorageCount: Object.keys(snapshot.sessionStorage || {}).length,
|
|
1046
1046
|
});
|
|
1047
|
-
})();`}async function
|
|
1047
|
+
})();`}async function Iw(e,t,n){let r=kw(t);if(r===0)return;let i=await e.evaluate(Fw(t));Ew.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),Ew.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function Lw(e,t,n){let r=kw(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:Pw(t)}),a=typeof i.identifier==`string`?i.identifier:null;return Ew.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),Ew.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 Rw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){Ew.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function zw(e){let t=await e.evaluate(`(() => JSON.stringify({
|
|
1048
1048
|
url: window.location.href,
|
|
1049
1049
|
title: document.title || '',
|
|
1050
1050
|
bodySnippet: document.body?.innerText?.replace(/\\s+/g, ' ').trim().slice(0, 500) || '(empty)',
|
|
1051
|
-
}))()`);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 zw(e){return/callback|authorize\/resume|error/i.test(e)}async function Bw(e,t,n){try{let r=await Rw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,Tw.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){Tw.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function Vw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>Lw(e,r,`follower`)),Tw.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){Tw.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function Hw(e){return Array.isArray(e)?e:[]}const U=e(`playwright-teleport`);let Uw=null,Ww=null;function Gw(e){Uw=e}function Kw(e){Ww=e}function qw(){return Ww?.()??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=>Bw(e,t,`timeout`))}catch(e){U.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await Vw(e,t,`timeout`)}if(Yw(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 Yw(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 Xw(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}),Qw(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 Zw(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}),zw(o)&&await e.withTab(r,e=>Bw(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}),rT(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 Qw(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=Ew;try{a=Hw((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=>Mw(e,`leader`)),U.info(`Captured leader storage for follower`,{totalEntries:Ow(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=Uw?.();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 Iw(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(()=>{Zw(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 Vw(e,n,`trigger-error`),n.phase=`done`,Yw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function $w(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=Hw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?Dw(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=Ew;try{o=await Mw(e,`follower`),U.info(`Captured follower storage for leader`,{totalEntries:Ow(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 Bw(e,t,`capture`),await Lw(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 eT(e,t,n,r){try{await e.navigate(n),await Fw(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 Iw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await Lw(e,a,`leader`)}}}async function tT(e,t,n,r,i){let a=e.targetId,o=await Iw(e,n,`leader`);try{r&&(U.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:Ow(n)}),U.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:Ow(n)}),await e.navigate(r))}finally{await Lw(e,o,`leader`)}}async function nT(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=jw(o,t.originalLeaderUrl,i),c=kw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?Aw(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:Ow(r)}),U.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:Ow(r)}),await eT(e,r,u,s)):await tT(e,t,r,s,i)}),s):(U.warn(`No leader tab available for auth-state injection`),s)}async function rT(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 $w(e,n),o=Ow(i),s=await nT(e,n,t,i,a);n.phase=`done`,Yw(n);let c=t.length>0?` (${Dw(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 Vw(e,n,`capture-error`),n.phase=`done`,Yw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const iT=e(`playwright`),aT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1052
|
-
`,exitCode:1};let o=N(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){
|
|
1053
|
-
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},
|
|
1054
|
-
`,stderr:``,exitCode:0})},
|
|
1055
|
-
`,stderr:``,exitCode:0})},
|
|
1056
|
-
`,stderr:``,exitCode:0})},
|
|
1057
|
-
`,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})},
|
|
1051
|
+
}))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function Bw(e){return/callback|authorize\/resume|error/i.test(e)}async function Vw(e,t,n){try{let r=await zw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,Ew.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){Ew.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function Hw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>Rw(e,r,`follower`)),Ew.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){Ew.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function Uw(e){return Array.isArray(e)?e:[]}const U=e(`playwright-teleport`);let Ww=null,Gw=null;function Kw(e){Ww=e}function qw(e){Gw=e}function Jw(){return Gw?.()??null}async function Yw(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=>Vw(e,t,`timeout`))}catch(e){U.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await Hw(e,t,`timeout`)}if(Xw(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 Xw(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 Zw(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}),$w(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 Qw(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,U.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,U.info(`Follower reached auth provider; waiting for return pattern`),U.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):U.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}U.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),Bw(o)&&await e.withTab(r,e=>Vw(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}),iT(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 $w(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=Dw;try{a=Uw((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=>Nw(e,`leader`)),U.info(`Captured leader storage for follower`,{totalEntries:kw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=Ww?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}U.info(`Selected follower for teleport`),U.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,U.info(`Opened follower tab for teleport`),U.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),U.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){U.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await Lw(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`)&&Yw(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(()=>{Qw(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 Hw(e,n,`trigger-error`),n.phase=`done`,Xw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function eT(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=Uw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?Ow(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=Dw;try{o=await Nw(e,`follower`),U.info(`Captured follower storage for leader`,{totalEntries:kw(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 Vw(e,t,`capture`),await Rw(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 tT(e,t,n,r){try{await e.navigate(n),await Iw(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 Lw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await Rw(e,a,`leader`)}}}async function nT(e,t,n,r,i){let a=e.targetId,o=await Lw(e,n,`leader`);try{r&&(U.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:kw(n)}),U.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:kw(n)}),await e.navigate(r))}finally{await Rw(e,o,`leader`)}}async function rT(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=Mw(o,t.originalLeaderUrl,i),c=Aw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?jw(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:kw(r)}),U.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:kw(r)}),await tT(e,r,u,s)):await nT(e,t,r,s,i)}),s):(U.warn(`No leader tab available for auth-state injection`),s)}async function iT(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 eT(e,n),o=kw(i),s=await rT(e,n,t,i,a);n.phase=`done`,Xw(n);let c=t.length>0?` (${Ow(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 Hw(e,n,`capture-error`),n.phase=`done`,Xw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const aT=e(`playwright`),oT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1052
|
+
`,exitCode:1};let o=N(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){aT.info(`Arming teleport via goto/navigate flags`),aT.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&&(Xw(u),n.teleportWatchers.delete(o.targetId)),Zw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await ZC(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
|
|
1053
|
+
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},sT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=N(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
|
|
1054
|
+
`,stderr:``,exitCode:0})},cT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=N(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
|
|
1055
|
+
`,stderr:``,exitCode:0})},lT=async({browser:e,flags:t,onTab:n})=>{let r=N(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
|
|
1056
|
+
`,stderr:``,exitCode:0})},uT=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=N(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"
|
|
1057
|
+
`,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})},dT=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function fT(e,t){if(e&&dT.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 pT(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=SC({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:fT(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=fT(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 mT(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 hT(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=mT(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 gT(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 _T=async({browser:e,state:t,flags:n,onTab:r})=>{let i=N(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),pT(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
|
|
1058
1058
|
`,stderr:``,exitCode:0}:{stdout:c.map(e=>`${e.index} ${e.method} ${e.url} → ${e.status??`pending`}`).join(`
|
|
1059
1059
|
`)+`
|
|
1060
|
-
`,stderr:``,exitCode:0}},
|
|
1060
|
+
`,stderr:``,exitCode:0}},vT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(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),pT(e,t,r,o.targetId,n)});let s=n[0]??``,c=gT(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)+`
|
|
1061
1061
|
... (truncated)`:e,n=c.responseBodyBase64?`Response Body (base64)`:`Response Body`;l.push(``,`${n}:\n${t}`)}let u=l.join(`
|
|
1062
1062
|
`)+`
|
|
1063
|
-
`,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},
|
|
1063
|
+
`,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},yT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(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),pT(e,t,r,o.targetId,n)});let s=n[0]??``,c=gT(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(`
|
|
1064
1064
|
`)+`
|
|
1065
|
-
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},
|
|
1065
|
+
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},bT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(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),pT(e,t,r,o.targetId,n)});let s=n[0]??``,c=gT(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)
|
|
1066
1066
|
`,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+`
|
|
1067
|
-
`,stderr:``,exitCode:0}},
|
|
1067
|
+
`,stderr:``,exitCode:0}},xT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(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),pT(e,t,r,o.targetId,n)});let s=n[0]??``,c=gT(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)
|
|
1068
1068
|
`,stderr:``,exitCode:0};let l=Object.entries(c.responseHeaders).map(([e,t])=>`${e}: ${t}`).join(`
|
|
1069
1069
|
`)+`
|
|
1070
|
-
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},
|
|
1071
|
-
`,stderr:``,exitCode:0};let l=r.filename,u=
|
|
1070
|
+
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},ST=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=N(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),pT(e,t,r,o.targetId,n)});let s=n[0]??``,c=gT(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)
|
|
1071
|
+
`,stderr:``,exitCode:0};let l=r.filename,u=hT(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)+`
|
|
1072
1072
|
... (truncated)`:d)+`
|
|
1073
|
-
`,stderr:``,exitCode:0}},
|
|
1074
|
-
`,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}},
|
|
1075
|
-
`,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:
|
|
1073
|
+
`,stderr:``,exitCode:0}},CT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a,signal:o})=>{let s=r[0]||`about:blank`,c=i.filter;await ye(e,n),rr(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}},wT=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
|
|
1074
|
+
`,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}},TT=e(`playwright-route`),ET=[{urlPattern:`*`,requestStage:`Request`}];function DT(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function OT(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=>{TT.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=>{TT.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function kT(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:ET},t);let a,o=e=>{a&&OT(a.transport,a.sessionId,n,r,e)};try{a=SC({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:ET},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 AT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
|
|
1075
|
+
`,exitCode:1};let a=N(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:DT(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(`,`)&&TT.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 kT(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}},jT=async({state:e,flags:t})=>{let n=N(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
|
|
1076
1076
|
`,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
|
|
1077
1077
|
`)+`
|
|
1078
|
-
`,stderr:``,exitCode:0}},
|
|
1079
|
-
`,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}},
|
|
1080
|
-
`),d=`${i}/snapshots/page-${
|
|
1078
|
+
`,stderr:``,exitCode:0}},MT=async({state:e,positional:t,flags:n})=>{let r=N(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
|
|
1079
|
+
`,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}},NT=`/.playwright`;function PT(e,t){return e?`${t.replace(/\/+$/,``)}${NT}`:NT}async function FT(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(!Qn(e))throw e}t.sessionDirsCreated.add(n)}}async function IT(e,t,n,r,i){try{return await e.withTab(n,async e=>{let{url:a,title:o,text:s,refs:c}=await ve(e,he(r,n)),l={url:a,title:o,refs:c,content:s,timestamp:Date.now()};r.snapshots.set(n,l);let u=[`Page URL: ${a}`,`Page Title: ${o}`,``,s].join(`
|
|
1080
|
+
`),d=`${i}/snapshots/page-${Jn(new Date)}.yml`;return await t.writeFile(d,u),d})}catch{return null}}async function LT(e,t,n,r){await FT(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(`
|
|
1081
1081
|
`)+`
|
|
1082
|
-
`,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
|
|
1083
|
-
`);return t.snapshots.set(n,{url:r.url,title:r.name,refs:o,content:s,timestamp:Date.now()}),s}async function
|
|
1082
|
+
`,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 RT(){return import(`./snapshot-features-C59UnBDa.js`)}async function zT(e,t,n,r){let i=he(t,n),a=await e.getAccessibilityTreeForFrame(r.frameId,{refFloor:i.floor});se(i,a);let o=new Map,s=me(a,o,``,ge(i,r.frameId),r.frameId).join(`
|
|
1083
|
+
`);return t.snapshots.set(n,{url:r.url,title:r.name,refs:o,content:s,timestamp:Date.now()}),s}async function BT(e,t,n){let{objectId:r,entry:i}=await y(e,t,n);return de(i,n,`screenshot`),await pe(e,r,`function() {
|
|
1084
1084
|
this.scrollIntoView({ block: 'center' });
|
|
1085
1085
|
const r = this.getBoundingClientRect();
|
|
1086
1086
|
return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
|
|
1087
|
-
}`)}const
|
|
1088
|
-
`,exitCode:1};let u=await i(a.targetId,async e=>{let t=await
|
|
1089
|
-
`,stderr:``,exitCode:0}},
|
|
1087
|
+
}`)}const VT=async({browser:e,fs:t,state:n,flags:r,onTab:i})=>{let a=N(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)
|
|
1088
|
+
`,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Hn(e,r);if(t)return zT(e,n,a.targetId,t);let{snapshot:i,output:s}=await fe(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await RT();return c(e,i,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await RT();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+`
|
|
1089
|
+
`,stderr:``,exitCode:0}},HT=async e=>{let{findHandlerImpl:t}=await RT();return t(e)},UT=async({browser:e,flags:t,onTab:n})=>{let r=N(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(`
|
|
1090
1090
|
`)}`)+`
|
|
1091
|
-
`,stderr:``,exitCode:0}},
|
|
1092
|
-
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function
|
|
1093
|
-
`,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await
|
|
1094
|
-
`,stderr:``,exitCode:0}},
|
|
1091
|
+
`,stderr:``,exitCode:0}},WT=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=N(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Jn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Un(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return te()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
|
|
1092
|
+
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function GT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a;try{a=await BT(e,i,r)}catch(e){return{error:e instanceof Error?e.message:String(e)}}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 KT=new Set([`png`,`jpeg`,`webp`]);function qT(e){let t=e.type;if(t&&KT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const JT=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,sessionRoot:o,onTab:s})=>{let c=N(i);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};if(i.type&&!KT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&qT(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
|
|
1093
|
+
`,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await GT(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 RT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=qT(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=Un(f);await t.writeFile(m,h);try{await FT(t,n,o);let e=`${o}/screenshots/screenshot-${Jn(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+`
|
|
1094
|
+
`,stderr:``,exitCode:0}},YT=async({browser:e,fs:t,positional:n,flags:r,sessionRoot:i,onTab:a})=>{let o=N(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}},XT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
|
|
1095
1095
|
`,exitCode:1};let a=N(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() {
|
|
1096
1096
|
var items = ${JSON.stringify(e)};
|
|
1097
1097
|
for (var i = 0; i < items.length; i++) {
|
|
1098
1098
|
localStorage.setItem(items[i].name, items[i].value);
|
|
1099
1099
|
}
|
|
1100
|
-
})()`;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
|
|
1100
|
+
})()`;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 ZT(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=N(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(`
|
|
1101
1101
|
`)})+`
|
|
1102
1102
|
`,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=N(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})+`
|
|
1103
|
-
`,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=N(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=N(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=N(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const ZT
|
|
1104
|
-
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},
|
|
1105
|
-
`,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(`
|
|
1103
|
+
`,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=N(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=N(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=N(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 QT=ZT(`localstorage`,`localStorage`),$T=ZT(`sessionstorage`,`sessionStorage`),eE=e(`playwright`),tE={width:412,height:915,deviceScaleFactor:2.625};function nE(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;eE.info(`Arming teleport via open/tab-new flags`),eE.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&&(Xw(u),t.teleportWatchers.delete(i)),Zw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const rE=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 ye(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),le(n,u),c&&await a(u,async e=>{await e.setViewportOverride(tE.width,tE.height,{deviceScaleFactor:tE.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){eE.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=nE(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await ZC(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
|
|
1104
|
+
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},iE=async({browser:e,state:t})=>{let n=await ue(e,t);return n.length===0?{stdout:`No tabs open
|
|
1105
|
+
`,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}" (tab ${e.number})${r}${i}`}).join(`
|
|
1106
1106
|
`)+`
|
|
1107
|
-
`,stderr:``,exitCode:0}},
|
|
1108
|
-
`,exitCode:1};
|
|
1109
|
-
`,exitCode:1};
|
|
1110
|
-
`,exitCode:1};let
|
|
1107
|
+
`,stderr:``,exitCode:0}},aE=async({browser:e,state:t,flags:n})=>{let r=N(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),t.tabRefs.delete(r.targetId),t.tabNumbers.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},oE=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=r.tab,o=n[0];if(a&&o)return{stdout:``,stderr:`tab-select takes a tab number or --tab=<targetId>, not both
|
|
1108
|
+
`,exitCode:1};if(!a&&!o)return{stdout:``,stderr:`tab-select requires a tab number from tab-list or --tab=<targetId>
|
|
1109
|
+
`,exitCode:1};if(o&&!/^[1-9][0-9]*$/.test(o))return{stdout:``,stderr:`tab-select tab number must be a positive integer
|
|
1110
|
+
`,exitCode:1};let s=await ue(e,t),c;if(a)c=a;else{let e=parseInt(o,10),t=s.find(t=>t.number===e);if(!t)return{stdout:``,stderr:`tab-select: no open tab is numbered ${e} (it was closed, or this shell never listed it). Run tab-list for current numbers, or pass --tab=<targetId>.\n`,exitCode:1};c=t.targetId}await i(c,e=>e.bringToFront());let l=s.find(e=>e.targetId===c)?.number;return{stdout:`Selected ${l===void 0?`tab`:`tab ${l}`} [targetId: ${c}]\n`,stderr:``,exitCode:0}},sE=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
|
|
1111
1111
|
`,exitCode:1};let a=N(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
|
|
1112
|
-
`,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})},
|
|
1112
|
+
`,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})},cE=e(`playwright-teleport`);function lE(){cE.info(`Listing available follower runtimes`);let e=Jw();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
|
|
1113
1113
|
`,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
|
|
1114
1114
|
`,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(`
|
|
1115
1115
|
`)+`
|
|
1116
|
-
`,stderr:``,exitCode:0}}function
|
|
1117
|
-
`,stderr:``,exitCode:0}}function
|
|
1118
|
-
`,exitCode:1};let c=
|
|
1119
|
-
`,exitCode:1};let u=n.runtime;if(u){let e=
|
|
1120
|
-
`};if(!
|
|
1121
|
-
`};try{
|
|
1122
|
-
`}:{targetRef:n,filePaths:r}}const
|
|
1116
|
+
`,stderr:``,exitCode:0}}function uE({state:e,flags:t}){let n=N(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};cE.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(Xw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
|
|
1117
|
+
`,stderr:``,exitCode:0}}function dE(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 fE(e){return(Jw()?.()??[]).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 pE({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=N(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>
|
|
1118
|
+
`,exitCode:1};let c=dE(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
|
|
1119
|
+
`,exitCode:1};let u=n.runtime;if(u){let e=fE(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(cE.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),Xw(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 cE.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),cE.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),rr(i,`about to arm a teleport watcher on tab ${a.targetId}`),Zw(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 mE=async e=>e.flags.list===`true`?lE():e.flags.off===`true`?uE(e):pE(e),hE={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 gE(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return hE[t]??`application/octet-stream`}function _E(e,t){if(e.length===0)return{error:`upload requires at least one file path
|
|
1120
|
+
`};if(!Yn(e[0]))return{targetRef:null,filePaths:e};let n=e[0],r=e.slice(1);if(!t)return{error:`No snapshot available. Run "snapshot" first.
|
|
1121
|
+
`};try{_e(t,n)}catch(e){return{error:`${e instanceof Error?e.message:String(e)}\n`}}return r.length===0?{error:`upload requires at least one file path
|
|
1122
|
+
`}:{targetRef:n,filePaths:r}}const vE=new Map([[`teleport`,mE],[`open`,rE],[`tab-new`,rE],[`fetch`,QC],[`goto`,oT],[`navigate`,oT],[`snapshot`,VT],[`find`,HT],[`frames`,UT],[`screenshot`,JT],[`click`,rw],[`type`,iw],[`fill`,aw],[`eval`,KC],[`eval-file`,qC],[`press`,ow],[`keydown`,sw],[`keyup`,cw],[`go-back`,sT],[`go-forward`,cT],[`reload`,lT],[`tab-list`,iE],[`tab-close`,aE],[`close`,aE],[`dblclick`,lw],[`hover`,uw],[`select`,dw],[`check`,pw],[`uncheck`,mw],[`drag`,hw],[`resize`,sE],[`dialog-accept`,BC],[`dialog-dismiss`,VC],[`cookie-list`,MC],[`cookie-get`,NC],[`cookie-set`,PC],[`cookie-delete`,FC],[`cookie-clear`,IC],[`localstorage-list`,QT.list],[`localstorage-get`,QT.get],[`localstorage-set`,QT.set],[`localstorage-delete`,QT.del],[`localstorage-clear`,QT.clear],[`sessionstorage-list`,$T.list],[`sessionstorage-get`,$T.get],[`sessionstorage-set`,$T.set],[`sessionstorage-delete`,$T.del],[`sessionstorage-clear`,$T.clear],[`record`,CT],[`stop-recording`,wT],[`tab-select`,oE],[`pdf`,WT],[`network-state-set`,uT],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=N(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=_E(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 gw(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:gE(i),base64:t(r)})}u?await o(s.targetId,async e=>{let{objectId:t}=await y(e,c,u);await pe(e,t,`function(filesData) {
|
|
1123
1123
|
const el = this;
|
|
1124
1124
|
if (el.tagName !== 'INPUT' || el.type !== 'file') {
|
|
1125
1125
|
throw new Error('Element ' + el.tagName + ' is not a file input');
|
|
@@ -1150,12 +1150,12 @@ Options:
|
|
|
1150
1150
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
1151
1151
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
1152
1152
|
return el.files.length;
|
|
1153
|
-
})()`,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`,
|
|
1154
|
-
`;return{...r,stderr:r.stderr+c}}async function
|
|
1155
|
-
`,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await
|
|
1156
|
-
`);let a=[];for(let[e,t]of
|
|
1153
|
+
})()`,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`,YT],[`state-load`,XT],[`console`,DC],[`requests`,_T],[`request`,vT],[`request-headers`,yT],[`request-body`,bT],[`response-headers`,xT],[`response-body`,ST],[`mousemove`,bw],[`mousedown`,xw],[`mouseup`,Sw],[`mousewheel`,Cw],[`drop`,Tw],[`route`,AT],[`route-list`,jT],[`unroute`,MT],[`generate-locator`,RC],[`highlight`,zC]]);function yE(){let e=(qn.string??[]).map(e=>`--${e}`),t=new Set(qn.boolean??[]);for(let[e,n]of Object.entries(qn.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 bE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function xE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const SE=2e3;function CE(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 wE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<SE)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>=SE?`${(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.
|
|
1154
|
+
`;return{...r,stderr:r.stderr+c}}async function TE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await nr(e,t.tab,n):null)??r}\n`,exitCode:1}}function EE(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=vE.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?EE(e,t,void 0):a}catch(r){return i?.aborted?EE(e,t,r):await TE(n.browser,n.flags,r)}}async function OE(e,t,n,r){let i=w(bE(n),xE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Kn(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-Dgedzig_.js`);return{answer:{stdout:n(e,t),stderr:``,exitCode:0}}}let o=null;try{let{validateSubcommandArgs:r}=await import(`./validate-args-hQ6FqlWN.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 kE(e,t,n,r={}){let i=t?Gn(t,n):null,a=yE();return C(e,async(o,s)=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`){let{formatHelp:t}=await import(`./help-Dgedzig_.js`);return{stdout:t(e)+`
|
|
1155
|
+
`,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await OE(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=CE(t,p),h=la(s.env),g=PT(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,async e=>{try{return await n(e)}finally{await e.releaseObjects?.().catch(()=>void 0)}},{signal:s.signal}),signal:s.signal}),v=f.tab??null,ee=null;tr.has(c)&&_.exitCode===0&&v&&(ee=await IT(t,n,v,i,g));try{await LT(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return wE(t,m,p,ee&&er.has(c)?{..._,stdout:`${_.stdout}Snapshot: ${ee}\n`}:_)})}const AE=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`,...$n,`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)`,[...u_]]]);function jE(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:
|
|
1156
|
+
`);let a=[];for(let[e,t]of AE){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(`
|
|
1157
1157
|
`)+`
|
|
1158
|
-
`}function
|
|
1158
|
+
`}function ME(e={}){return C(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
|
|
1159
1159
|
|
|
1160
1160
|
Usage: commands [command]
|
|
1161
1161
|
|
|
@@ -1166,7 +1166,7 @@ If a command name is provided, shows help for that command.
|
|
|
1166
1166
|
Otherwise, lists all available commands.
|
|
1167
1167
|
|
|
1168
1168
|
Note: This is an enhanced version of 'help' that shows all custom commands.
|
|
1169
|
-
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:
|
|
1169
|
+
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:jE(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function NE(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
|
|
1170
1170
|
|
|
1171
1171
|
Usage:
|
|
1172
1172
|
hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
|
|
@@ -1183,7 +1183,7 @@ Defaults:
|
|
|
1183
1183
|
--to /workspace/models/<repo>/
|
|
1184
1184
|
--revision main
|
|
1185
1185
|
--concurrency, -j 4 files at once
|
|
1186
|
-
--max-in-flight-mb ${
|
|
1186
|
+
--max-in-flight-mb ${pa/1048576} MB of downloads in flight at once
|
|
1187
1187
|
|
|
1188
1188
|
Notes:
|
|
1189
1189
|
- <repo> is the standard <owner>/<name> form.
|
|
@@ -1197,8 +1197,8 @@ Notes:
|
|
|
1197
1197
|
- Background-job logs get a progress line every few seconds.
|
|
1198
1198
|
- Weights are read by the speech engines via the preview SW from the
|
|
1199
1199
|
target directory; transformers expects <localModelPath>/<repo>/.
|
|
1200
|
-
`,stderr:``,exitCode:e}}function
|
|
1201
|
-
`)}\n`}function
|
|
1200
|
+
`,stderr:``,exitCode:e}}function PE(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const FE=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function IE(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 LE(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=IE(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 FE.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 RE(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 zE=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=By(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${By(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${RE(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${By(t)}/s${r}\n`}};function BE(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function VE(e,t,n,r){let i=LE(e);if(`error`in i)return PE(i.error);let a=fa(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=BE(t),l=new zE(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} (${By(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 ${RE(l.elapsedMs())} (${By(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${By(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}):PE(e instanceof Error?e.message:String(e))}}const HE=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function UE(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||T(n,{valueFlags:HE}))return NE(+(n.length===0));let i=n[0];return i===`download`?VE(n.slice(1),r,e,t):PE(`unknown subcommand: ${i}`)}}}const WE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function GE(e){return Bn(e,WE)}function KE(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 qE(e){let t={};return e.has(`--vid`)&&(t.vendorId=KE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=KE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=KE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=KE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function JE(e){let t=cr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function YE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function XE(e){return e.toString(16).padStart(2,`0`)}function ZE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function QE(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${ZE(e.usagePage)}:${ZE(e.usage??0)}`;return`${e.handle}\t${ZE(e.vendorId)}:${ZE(e.productId)}${r}\t${t}${n}`}function $E(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 eD(e){return`${e.map(QE).join(`
|
|
1201
|
+
`)}\n`}function tD(e){return`${XE(e.reportId)} ${YE(e.bytes)}`.trimEnd()}function nD(e){return{stdout:e,stderr:``,exitCode:0}}function W(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const rD=`hid - access HID devices via WebHID
|
|
1202
1202
|
|
|
1203
1203
|
Usage: hid <subcommand> [options]
|
|
1204
1204
|
|
|
@@ -1221,11 +1221,11 @@ Options:
|
|
|
1221
1221
|
--timeout <ms> query: wait this long for an input report (default 1000)
|
|
1222
1222
|
-h, --help
|
|
1223
1223
|
|
|
1224
|
-
Report payloads are capped at ${
|
|
1225
|
-
`;function
|
|
1226
|
-
`):
|
|
1227
|
-
`)}\n`)}async function
|
|
1228
|
-
`)}\n`:``)}async function
|
|
1224
|
+
Report payloads are capped at ${li} bytes (4 MiB).
|
|
1225
|
+
`;function iD(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return nD(t)}return nD(e.length?`${YE(e)}\n`:``)}function aD(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function oD(e){let t=await e.list();return t.length===0?nD(`no granted HID devices
|
|
1226
|
+
`):nD(`${t.map(QE).join(`
|
|
1227
|
+
`)}\n`)}async function sD(e,t){let n=e.get(`--__resolved`),r=qE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?W(`request: missing resolved handle`):nD(eD($E(await Promise.all(e.map(e=>t.info(e))),i)))}let a=Be();return a?cD(r,i,a,t):nD(eD($E(await t.request(r),i)))}async function cD(e,t,n,r){let i=await Jx(`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=ci();if(!t)return W(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=ni(),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=$E(s.length>0?s:[],t);return c.length===0?W(`request: granted device could not be re-acquired`):nD(eD(c))}async function lD(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),nD(``)):W(`${e}: handle required`)}async function uD(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return W(`${e}: handle and report-id required`);let o=KE(a,`report-id`),s=JE(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),nD(``))}async function dD(e,t,n){let[,r,i]=e;return!r||i===void 0?W(`feature-get: handle and report-id required`):iD((await t.receiveFeatureReport(r,KE(i,`report-id`))).bytes,n)}async function fD(e,t,n){let r=e[1];if(!r)return W(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(tD(e))});try{await aD(t.signal)}finally{await a()}return nD(i.length?`${i.join(`
|
|
1228
|
+
`)}\n`:``)}async function pD(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return W(`query: handle and report-id required`);let s=KE(o,`report-id`),c=JE(t);if(c.length>4194304)return W(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?KE(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?iD(t.bytes,!0):nD(`${tD(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function mD(e,t,n){let{positionals:r,flags:i,bools:a}=GE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return oD(n);case`request`:return sD(i,n);case`open`:case`close`:return lD(o,r,n);case`send`:case`feature-send`:return uD(o,r,t,n);case`feature-get`:return dD(r,n,s);case`watch`:return fD(r,t,n);case`query`:return pD(r,t,i,n,s);default:return W(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function hD(){return C(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return nD(rD);let n=di(be(),b());if(!n)return W(`WebHID is unavailable in this environment`);try{return await mD(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 gD=1e3,_D=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,vD=`${_D}
|
|
1229
1229
|
|
|
1230
1230
|
Print the user and group identity of this SLICC runtime.
|
|
1231
1231
|
|
|
@@ -1240,22 +1240,22 @@ Options:
|
|
|
1240
1240
|
--version Print the SLICC build.
|
|
1241
1241
|
|
|
1242
1242
|
Identity comes from the home directory, which is where the rest of the shell
|
|
1243
|
-
gets it too. A cone is the human user (uid ${
|
|
1243
|
+
gets it too. A cone is the human user (uid ${gD}, one per runtime, since every
|
|
1244
1244
|
cone shares one home); a scoop is a service identity whose uid is derived from
|
|
1245
1245
|
its folder name, so it is stable across reloads and distinct per scoop.
|
|
1246
1246
|
Every user is in a user-private group of the same name, plus the role group
|
|
1247
1247
|
\`cone\` (10) or \`scoop\` (20).
|
|
1248
|
-
`,
|
|
1248
|
+
`,yD=`/scoops/`;function bD(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 xD(e,t){return{name:e,uid:t===`cone`?gD:bD(e),role:t}}function SD(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function CD(e,t){return`${e}(${t})`}function wD(e){let t=SD(e),n=t[0];return`uid=${CD(e.uid,e.name)} gid=${CD(n.gid,n.name)} groups=${t.map(e=>CD(e.gid,e.name)).join(`,`)}\n`}async function TD(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(yD)?`scoop`:`cone`,r=e.env.get(`USER`)||ED(t,n);return r?xD(r,n):xD(cm(await sm(DD(e.fs))),`cone`)}function ED(e,t){return e===``?``:t===`cone`?cm(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 OD(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?xD(t,`cone`):await e.fs.exists(`${yD}${t}`).catch(()=>!1)?xD(t,`scoop`):null}function kD(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=jD[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=AD[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 AD={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},jD={"--user":AD.u,"--group":AD.g,"--groups":AD.G,"--name":AD.n,"--real":AD.r};function MD(e,t){let n=SD(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 wD(e)}}function ND(){return C(`id`,async(e,t)=>{let n=kD(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${_D}\n`,exitCode:1};if(n.mode===`help`)return FD(vD);if(n.mode===`version`)return FD(`id (SLICC) ${ct().version}\n`);let r=n.operand===void 0?await TD(t):await OD(t,n.operand);return r?FD(MD(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function PD(){return C(`whoami`,async(e,t)=>FD(`${(await TD(t)).name}\n`))}function FD(e){return{stdout:e,stderr:``,exitCode:0}}function ID(){return{stdout:`imgcat - preview image and video files in the preview tab
|
|
1249
1249
|
|
|
1250
1250
|
Usage: imgcat <path> [path...]
|
|
1251
1251
|
|
|
1252
1252
|
Options:
|
|
1253
1253
|
-h, --help Show this help message
|
|
1254
|
-
`,stderr:``,exitCode:0}}function
|
|
1255
|
-
`,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=
|
|
1256
|
-
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),
|
|
1257
|
-
`]),
|
|
1258
|
-
`)}\n`}function
|
|
1254
|
+
`,stderr:``,exitCode:0}}function LD(e={}){return C(`imgcat`,async(t,n)=>{if(t.length===0||T(t))return ID();let r=w(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return ID();if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
|
|
1255
|
+
`,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=Ie(t);if(!Fe(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 RD=new Set([`run`,`run-script`]),zD=new Set([`test`,`start`,`stop`,`restart`]),BD=new Set([` `,` `,`
|
|
1256
|
+
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),VD=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
|
|
1257
|
+
`]),HD=/^[A-Za-z_][A-Za-z0-9_]*=/,UD=/^[@A-Za-z0-9._-]+$/,WD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),GD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),KD=new Set([`ipx`,`npx`]);function qD(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function JD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*YD(e){let t=x(e);for(;yield t,t!==`/`;)t=We(t).dir}function XD(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 ZD(e){return typeof e==`string`?e:void 0}async function QD(e,t){for(let n of YD(t)){let t=S(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await JD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:ZD(r.name),version:ZD(r.version),scripts:XD(r.scripts)}}return null}function $D(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(BD.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function eO(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(VD.has(i)){r=!0,n++;continue}let a=$D(e,n);if(a.end===a.start){n++;continue}if(r&&!HD.test(a.text)){if(GD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function tO(e,t){return!UD.test(e)||WD.has(e)||KD.has(e)?!1:!t.isRegistered(e)}async function nO(e,t){let n=eO(e).filter(e=>tO(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 rO(e){let t=[];for(let n of YD(e))t.push(S(n,`node_modules`,`.bin`));return t}function iO(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...rO(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 aO(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function oO(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${S(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${aO(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
|
|
1258
|
+
`)}\n`}function sO(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function cO(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}sO(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function lO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function uO(e,t,n,r){let i=r.length>0?` ${r.map(qD).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 dO(e,t,n,r){if(n===`start`&&await r.exists(S(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function fO(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of rO(t.dir))if(await e.exists(S(r,n)))return!0;return!1}}}async function pO(e,t,n,r,i,a){let o=i.exec;if(!o)return lO(e,`run requires shell exec support, which this context does not provide`);let s=fO(a.fs,t,i),c=aO(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 nO(a.body,s),{cwd:t.dir,env:iO(t,a.event,a.body,i),stdin:cr(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 mO(e,t,n,r){let i;try{i=await QD(r.fs,n.cwd)}catch(t){return lO(e,t instanceof Error?t.message:String(t))}if(!i)return lO(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=cO(t);if(o===void 0)return{stdout:oO(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await dO(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 lO(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${S(i.dir,`package.json`)} defines no scripts)`}`)}return pO(e,i,uO(i,o,c,s),a,n,r)}const hO=()=>import(`./installer-iQBJzSUD.js`),gO=new Set([`install`,`i`,`add`]),_O=new Set([`uninstall`,`remove`,`rm`,`un`]),vO=new Set([`list`,`ls`]),yO=new Set([`-g`,`--global`,`--location=global`]),bO=[`-g`,`--global`,`-D`,`--save-dev`];function xO(e){return`${e} - install packages from the npm registry into node_modules
|
|
1259
1259
|
and run package.json scripts; also install conda/emscripten-forge
|
|
1260
1260
|
packages via '${e} mamba'
|
|
1261
1261
|
|
|
@@ -1331,15 +1331,15 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
|
|
|
1331
1331
|
and deps are recorded in /shared/lib/package.json. Existing fields are
|
|
1332
1332
|
preserved. Idempotent: re-installing an already-satisfied package is a clean
|
|
1333
1333
|
no-op.
|
|
1334
|
-
`}function
|
|
1334
|
+
`}function SO(e){let t=w(e,{bool:bO,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 CO(e){let t=!1,n=[];for(let r of e){if(yO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function wO(e){return T(e)}function TO(e){return e instanceof Error?e.message:String(e)}async function EO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function DO(e,t){let n=e===`i`;return C(e,async(r,i)=>{if(n)return wO(r)?{stdout:xO(e),stderr:``,exitCode:0}:kO(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-CRjKH0VV.js`);return n(e,r.slice(1),i,t)}if(wO(r))return{stdout:xO(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:xO(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return gO.has(a)?kO(e,o,i,t):_O.has(a)?jO(e,o,i,t):vO.has(a)?MO(e,o,i,t):a===`root`?NO(e,o,i,t):RD.has(a)?mO(e,o,i,{fs:t.fs}):zD.has(a)?mO(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function OO(e,t,n){let{installFromManifest:r,ManifestNotFoundError:i}=await hO(),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: ${TO(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}: ${TO(t.error)}`)];return{stdout:o.length>0?`${o.join(`
|
|
1335
1335
|
`)}\n`:``,stderr:s.length>0?`${s.join(`
|
|
1336
|
-
`)}\n`:``,exitCode:a.errors.length===0?0:1}}async function
|
|
1336
|
+
`)}\n`:``,exitCode:a.errors.length===0?0:1}}async function kO(e,t,n,r){let i=SO(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 OO(e,n,r);let{installPackages:c}=await hO(),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: ${TO(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}: ${TO(t.error)}`)];return a&&l.results.length>0&&await EO(r),{stdout:u.length>0?`${u.join(`
|
|
1337
1337
|
`)}\n`:``,stderr:d.length>0?`${d.join(`
|
|
1338
|
-
`)}\n`:``,exitCode:l.errors.length===0?0:1}}function
|
|
1339
|
-
`)}\n`}async function
|
|
1338
|
+
`)}\n`:``,exitCode:l.errors.length===0?0:1}}function AO(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(`
|
|
1339
|
+
`)}\n`}async function jO(e,t,n,r){let{global:i,specs:a}=CO(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let{uninstallPackages:o}=await hO(),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: ${TO(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}: ${TO(t.error)}`);l.length>0&&u.push(`${e}: ${l.join(`, `)} not installed${i?` globally`:``}`);let d=s.errors.length>0;return i&&await EO(r),{stdout:c.length>0?`${c.join(`
|
|
1340
1340
|
`)}\n`:``,stderr:u.length>0?`${u.join(`
|
|
1341
|
-
`)}\n`:``,exitCode:+!!d}}async function
|
|
1342
|
-
`)}\n`}const
|
|
1341
|
+
`)}\n`:``,exitCode:+!!d}}async function MO(e,t,n,r){let{global:i}=CO(t);try{let{listGlobalPackages:e,listLocalPackages:t}=await hO(),a=i?await e(r.fs):await t(r.fs,n.cwd);return{stdout:AO(i?mr:n.cwd,a),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${TO(t)}\n`,exitCode:1}}}async function NO(e,t,n,r){let{global:i}=CO(t);return{stdout:`${i?hr:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}const PO=`0.5.462`,FO=`v86 is not installed in node_modules: run \`${F} v86@${PO}\` (no network fallback)`;let IO=null;async function LO(e={}){return IO||=VO(e.ipk).catch(e=>{throw IO=null,e}),IO}const RO=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function zO(e,t){for(let{js:n,wasm:r}of RO){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 BO(e){let t;try{t=await Sr(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await zO(We(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 VO(e){if(Pr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(FO);let t=await BO(e);if(!t)throw Error(FO);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 Si(t.wasmBytes),version:t.version}}function HO(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const UO={command:`biome`,example:`biome check foo.js`,bootstrap:`${F} ${H_}`},WO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},GO={command:`puppeteer`,example:`puppeteer open https://example.com`},KO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${F} @imagemagick/magick-wasm@${ra}`},qO={...KO,command:`magick`,example:`magick input.png output.jpg`},JO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},YO={"@biomejs/biome":UO,biome:UO,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${F} esbuild-wasm@${xi}`},playwright:WO,"@playwright/test":WO,"playwright-core":WO,puppeteer:GO,"puppeteer-core":GO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:Fr},"pdf-poppler":JO,"pdf-to-img":JO,pdf2pic:JO,"pdf-img-convert":JO,poppler:JO,"poppler-utils":JO,imagemagick:KO,"imagemagick-cli":KO,"imagemagick-convert":KO,"magick-cli":qO,"@imagemagick/magick-wasm":qO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${F} @ffmpeg/core@${ma}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${F} @ffmpeg/core@${ma}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${F} @ffmpeg/core@${ma}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${F} @ffmpeg/core@${ma}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${F} v86@${PO}`}};function XO(e){return Object.hasOwn(YO,e)?YO[e]:void 0}function ZO(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function QO(e,t,n,r){let i=n.length?[r.command,...n].map(ZO).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(ZO).join(` `)}`),`${a.join(`
|
|
1342
|
+
`)}\n`}const $O=/require\(\s*["']([^"']+)["']\s*\)/;function ek(e){return`${e} - run an installed package's executable bin
|
|
1343
1343
|
|
|
1344
1344
|
Usage:
|
|
1345
1345
|
${e} [--force] [--global] <pkg-or-bin> [args...]
|
|
@@ -1352,12 +1352,12 @@ Options:
|
|
|
1352
1352
|
--force Install a package even when a SLICC built-in shadows it
|
|
1353
1353
|
--global Resolve only from the shared global prefix (/shared/lib/node_modules)
|
|
1354
1354
|
-h, --help Show this help message
|
|
1355
|
-
`}async function
|
|
1356
|
-
`)}\n`:``}}catch(n){return{error:
|
|
1357
|
-
`,exitCode:1};let r=
|
|
1358
|
-
`)}\n`:``,exitCode:+!i}})}function
|
|
1359
|
-
`,exitCode:2};let i=
|
|
1360
|
-
`,exitCode:2}:
|
|
1355
|
+
`}async function tk(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function nk(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function rk(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*ik(e,t=!1){if(t){yield hr;return}let n=x(e);for(;yield S(n,`node_modules`),n!==`/`;)n=We(n).dir;yield hr}async function ak(e,t,n,r=!1){for(let i of ik(t,r)){let t=S(i,`.bin`,n);if(!await nk(e,t))continue;let r=await tk(e,t),a=$O.exec(r),o=We(t).dir;return{binFilePath:a?S(o,a[1]):t,argvName:t}}return null}function ok(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function sk(e,t){if(typeof e==`string`)return{binName:ok(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,ok(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 ck(e,t,n,r=!1){for(let i of ik(t,r)){let t=S(i,n),r=S(t,`package.json`);if(!await nk(e,r))continue;let a;try{a=JSON.parse(await tk(e,r))}catch{return null}let o=sk(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:S(t,s),argvName:S(i,`.bin`,o.binName)}}return null}async function lk(e,t,n,r=!1){return await ak(e,t,n,r)??await ck(e,t,n,r)}async function uk(e,t,n){for(let r of ik(t))if(await nk(e,S(r,n,`package.json`)))return!0;return!1}function dk(e){return e instanceof Error?e.message:String(e)}function fk(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function pk(e,t,n,r){try{let{installPackages:i}=await import(`./installer-iQBJzSUD.js`),a=await i([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(a.errors.length>0)return{error:fk(e,`failed to install '${t}': ${dk(a.errors[0].error)}`)};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:o.length>0?`${o.join(`
|
|
1356
|
+
`)}\n`:``}}catch(n){return{error:fk(e,`failed to install '${t}': ${dk(n)}`)}}}async function mk(e,t,n,r){return await nk(r,n)?null:await rk(r,n)?fk(e,`bin target '${n}' is a directory, not a file`):fk(e,`bin file '${n}' for '${t}' does not exist`)}async function hk(e,t,n,r,i,a){if(await uk(a.fs,i.cwd,t))return{error:fk(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:XO(t);if(o)return{error:{stdout:``,stderr:QO(e,t,n,o),exitCode:1}};let s=await pk(e,t,i,a);if(`error`in s)return s;let c=await lk(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:fk(e,`package '${t}' was installed but does not expose an executable bin`)}}function gk(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:ek(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:ek(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await lk(t.fs,r.cwd,c,o)}catch(t){return fk(e,dk(t))}let d=``;if(!u){if(o)return fk(e,`no global bin '${c}' found in ${hr}`);let n=await hk(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await mk(e,c,u.binFilePath,t.fs);if(f)return f;let p=_i(await tk(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await hi(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function _k(e={}){return C(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-DvuN8Fn9.js`);return r(t,n,e)})}const vk=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function yk(e={}){return C(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Tk();let n=e.processManager??bk();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
|
|
1357
|
+
`,exitCode:1};let r=xk(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=Sk(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
|
|
1358
|
+
`)}\n`:``,exitCode:+!i}})}function bk(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function xk(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
|
|
1359
|
+
`,exitCode:2};let i=Ck(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=wk(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
|
|
1360
|
+
`,exitCode:2}:vk.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function Sk(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 Ck(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 wk(e){return e===`-9`?`SIGKILL`:Ck(e.slice(1))}function Tk(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
|
|
1361
1361
|
|
|
1362
1362
|
Send a signal to one or more processes tracked by the kernel.
|
|
1363
1363
|
|
|
@@ -1379,7 +1379,7 @@ Examples:
|
|
|
1379
1379
|
kill -INT 1024 1025 SIGINT both
|
|
1380
1380
|
kill -STOP 1024 pause; \`kill -CONT 1024\` resumes
|
|
1381
1381
|
kill -s SIGKILL 1024 explicit signal name
|
|
1382
|
-
`,stderr:``,exitCode:0}}const
|
|
1382
|
+
`,stderr:``,exitCode:0}}const Ek=[`top`,`left`,`middle`,`right`,`bottom`],Dk=`usage: layout <verb> [args]
|
|
1383
1383
|
|
|
1384
1384
|
list List the built-in presets
|
|
1385
1385
|
set <preset> Switch to a built-in preset
|
|
@@ -1395,13 +1395,13 @@ Examples:
|
|
|
1395
1395
|
load <name> Restore a saved arrangement
|
|
1396
1396
|
delete <name> Delete a saved arrangement
|
|
1397
1397
|
reset Restore the default arrangement
|
|
1398
|
-
edit Alias for \`layout set ${
|
|
1398
|
+
edit Alias for \`layout set ${Ds}\` (there is no edit mode)
|
|
1399
1399
|
docs Describe the layout surfaces
|
|
1400
1400
|
panels List the registered panel ids
|
|
1401
1401
|
|
|
1402
|
-
Zones: ${
|
|
1403
|
-
`,
|
|
1404
|
-
`,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
|
|
1402
|
+
Zones: ${Ek.join(`, `)}
|
|
1403
|
+
`,Ok=new Set([`files`,`term`,`memory`,`monitor`]),kk=`sprinkle:`;function Ak(e){return e===`chat`||Ok.has(e)||e.startsWith(kk)?e:`${kk}${e}`}function jk(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 Mk=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function Nk(e){let t=e[0],n=t?js(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function Pk(e){let t=e[0];return Ek.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${Ek.join(`|`)}>`}}function Fk(e){let[t,n]=e;return!t||!Ek.includes(n)?{error:`usage: layout open <surfaceId> <${Ek.join(`|`)}>`}:{kind:`open`,surfaceId:Ak(t),zone:n}}function Ik(e){let t=e[0];return t?{kind:`close`,surfaceId:Ak(t)}:{error:`usage: layout close <surfaceId>`}}function Lk(e){let[t,n]=e;return!t||!Ek.includes(n)?{error:`usage: layout move <surfaceId> <${Ek.join(`|`)}>`}:{kind:`move`,surfaceId:Ak(t),zone:n}}function Rk(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=jk(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 zk(e){let t=e[0];if(!t)return{error:Mk};let n={};for(let t=1;t<e.length;t+=2){let r=Rk(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:Mk}:{kind:`size`,surfaceId:Ak(t),size:n}}function Bk(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 Vk(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function Hk(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:Ak(n)}:{kind:`hide`,panelId:Ak(n)}:{error:`usage: layout ${e} <panelId>`}}function Uk(){let e=js(Ds);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function Wk(e){let[t,...n]=e;switch(t){case`set`:return Nk(n);case`chat`:return Pk(n);case`open`:return Fk(n);case`close`:return Ik(n);case`move`:return Lk(n);case`size`:return zk(n);case`reset`:return{kind:`reset`};case`edit`:return Uk();case`load`:return Vk(`load`,n);case`save`:return Bk(n);case`delete`:return Vk(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return Hk(`show`,n);case`hide`:return Hk(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function Gk(){return C(`layout`,async e=>{if(T(e))return{stdout:e[0]?.startsWith(`-`)?Dk:ht(`layout`,e[0],Dk),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(As).join(`, `)}\ndefault: ${Ds}\n`,stderr:``,exitCode:0};let t=Wk(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=b();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
|
|
1404
|
+
`,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 Kk=ha.id;function qk(){return`local-llm — inspect and configure the Local LLM provider
|
|
1405
1405
|
|
|
1406
1406
|
Usage:
|
|
1407
1407
|
local-llm Show current config + verify connection
|
|
@@ -1420,21 +1420,21 @@ Common base URLs:
|
|
|
1420
1420
|
llama.cpp http://localhost:8080/v1
|
|
1421
1421
|
vLLM http://localhost:8000/v1
|
|
1422
1422
|
Jan http://localhost:1337/v1
|
|
1423
|
-
`}function
|
|
1423
|
+
`}function Jk(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function Yk(e){return e.map(e=>` • ${e}`)}function Xk(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${Jk(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
|
|
1424
1424
|
`)+`
|
|
1425
|
-
`,exitCode:1}}function
|
|
1425
|
+
`,exitCode:1}}function Zk(e,t){return{stdout:[`✓ ${e}`,` runtime: ${Jk(t.runtime,!0)}`,` models: ${t.models.length}`,...Yk(t.models)].join(`
|
|
1426
1426
|
`)+`
|
|
1427
|
-
`,stderr:``,exitCode:0}}function
|
|
1427
|
+
`,stderr:``,exitCode:0}}function Qk(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${Jk(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...Yk(t.models)].join(`
|
|
1428
1428
|
`)+`
|
|
1429
|
-
`,stderr:``,exitCode:0}}function
|
|
1430
|
-
`,exitCode:1};let c=await a(s,t(
|
|
1429
|
+
`,stderr:``,exitCode:0}}function $k(){return C(Kk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:qk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-CLw42Fru.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-CtOUVB_I.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(Kk);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
|
|
1430
|
+
`,exitCode:1};let c=await a(s,t(Kk)??void 0);if(!c.ok)return Xk(s,c);if(o===`discover`){let e=n(Kk)??``;return i(Kk,e,s,c.models.join(`, `)),Qk(s,c)}return Zk(s,c)})}function eA(){return{stdout:`usage: man <topic>
|
|
1431
1431
|
|
|
1432
1432
|
Fetches documentation for a given topic from sliccy.com.
|
|
1433
|
-
`,stderr:``,exitCode:0}}function
|
|
1433
|
+
`,stderr:``,exitCode:0}}function tA(e){return e.replace(/<[^>]*>/g,``).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).replace(/&/g,`&`).trimEnd()}function nA(){let e=g();return C(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return eA();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
|
|
1434
1434
|
For example, try 'man commands'.
|
|
1435
|
-
`,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:
|
|
1436
|
-
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function
|
|
1437
|
-
`)}\n`}function
|
|
1435
|
+
`,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:tA(new TextDecoder(`utf-8`).decode(t.body))+`
|
|
1436
|
+
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function rA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function iA(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 aA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function oA(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 sA(e){let t=[`total: ${By(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(`${By(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${iA(e)}`)}return`${t.join(`
|
|
1437
|
+
`)}\n`}function cA(e={}){return C(`meminfo`,async t=>{let n=oA(t);if(`error`in n)return rA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
|
|
1438
1438
|
|
|
1439
1439
|
Usage:
|
|
1440
1440
|
meminfo Human-readable breakdown (bytes, scope, types, url)
|
|
@@ -1445,8 +1445,8 @@ Notes:
|
|
|
1445
1445
|
Document-Isolation-Policy). Embedded floats cannot be isolated and
|
|
1446
1446
|
report why instead.
|
|
1447
1447
|
- The browser randomizes measurement timing — expect a short delay.
|
|
1448
|
-
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??
|
|
1449
|
-
`)?e:`${e}\n`,exitCode:1}}async function
|
|
1448
|
+
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??aA();if(!r&&!e.measure)return rA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return rA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return rA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:sA(a),stderr:``,exitCode:0}})}function lA(e){return C(`memory`,async t=>{let{runMemory:n}=await import(`./run-l4-ivwOu.js`);return n(t,e)})}function uA(){return C(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const dA=`/.cache/artificial-analysis.json`,fA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],pA=[`--provider`];function mA(e){return{stdout:``,stderr:e.endsWith(`
|
|
1449
|
+
`)?e:`${e}\n`,exitCode:1}}async function hA(e){try{let t=await e.readFile(dA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function gA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function _A(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 vA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(dA,JSON.stringify(n))}catch{}}async function yA(e,t=!1){if(e&&!t){let t=await hA(e);if(t)return t}let n={Accept:`application/json`},r=gA();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=_A(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await vA(e,c),c}function bA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function xA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=bA(e),a=t.find(e=>bA(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 SA(){return`models - list available LLM models
|
|
1450
1450
|
|
|
1451
1451
|
Usage: models [options]
|
|
1452
1452
|
|
|
@@ -1458,14 +1458,14 @@ Options:
|
|
|
1458
1458
|
--refresh Force re-fetch benchmark data from Artificial Analysis
|
|
1459
1459
|
--no-benchmarks Skip benchmark data enrichment (faster, works offline)
|
|
1460
1460
|
-h, --help Show this help message
|
|
1461
|
-
`}function
|
|
1461
|
+
`}function CA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function wA(e){return`$${e.toFixed(2)}`}const TA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function EA(e){let t=`${e.id} ${e.name??``}`;return!TA.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 OA(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 kA(e){let t=new Map;for(let n of e){let e=OA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function AA(e,t,n,r,i){let a=i?xA(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 jA(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=`${wA(e.cost.input)} / ${wA(e.cost.output)}`,a=`${CA(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(`
|
|
1462
1462
|
`)+`
|
|
1463
|
-
`}function
|
|
1464
|
-
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await
|
|
1463
|
+
`}function MA(e){let t=w(e,{bool:fA,value:pA});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 NA(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 PA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(EA);if(o.length===0)return[];let s=o.map(e=>AA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=kA(s)),s}function FA(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 IA(e,t){if(T(e,{valueFlags:pA}))return{stdout:SA(),stderr:``,exitCode:0};let n=MA(e);if(`error`in n)return mA(`models: ${n.error}`);let r=await import(`./account-store-CLw42Fru.js`).then(e=>e.t);if(r.getAccounts().length===0)return mA(`No provider accounts configured. Run the provider settings to add one.
|
|
1464
|
+
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await yA(t,n.forceRefresh);e.length>0&&(l=e)}let u=NA(r,n,s);if(`error`in u)return mA(u.error);let d=[],f=[];for(let e of u){let t=PA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return mA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(jA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
|
|
1465
1465
|
`,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
|
|
1466
|
-
`),f.push(
|
|
1467
|
-
`),stderr:``,exitCode:0})}function
|
|
1468
|
-
`,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:
|
|
1466
|
+
`),f.push(FA(o,a,s,c)),{stdout:f.join(`
|
|
1467
|
+
`),stderr:``,exitCode:0})}function LA(e){return C(`models`,async t=>IA(t,e))}const RA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function zA(e){return e===`-e`||e===`--eval`||RA.has(e)||!e.startsWith(`-`)}function BA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function VA(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
|
|
1468
|
+
`,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:BA(i)}:{inputType:i,nextIndex:a}}function HA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(zA(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=VA(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 UA(){return{stdout:`usage: node [options] [script.js] [args...]
|
|
1469
1469
|
node [options] -e <code> [args...]
|
|
1470
1470
|
|
|
1471
1471
|
Options:
|
|
@@ -1474,20 +1474,20 @@ Options:
|
|
|
1474
1474
|
--input-type=TYPE module or commonjs (stdin / -e / .js)
|
|
1475
1475
|
-h, --help print this help
|
|
1476
1476
|
-v, --version print Node shim version
|
|
1477
|
-
`,stderr:``,exitCode:0}}function
|
|
1477
|
+
`,stderr:``,exitCode:0}}function WA(){return{stdout:`${Mr}\n`,stderr:``,exitCode:0}}function GA(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
|
|
1478
1478
|
`,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
|
|
1479
|
-
`,exitCode:9}}}function
|
|
1480
|
-
`,exitCode:9}};if(e.length>0&&
|
|
1481
|
-
`,exitCode:9}}}function
|
|
1482
|
-
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=
|
|
1479
|
+
`,exitCode:9}}}function KA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function qA(e){return e instanceof Error?e.stack??e.message:String(e)}async function JA(e,t,n){if(!(wr(e)||zr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await bi()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(qA(r)))throw r;return yi()({source:e,filename:t,fromDir:KA(t,n)})}}async function YA(e,t,n){let r=e;try{r=await JA(e,t,n)}catch(e){return{stdout:``,stderr:`${qA(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:`${qA(e)}\n`,exitCode:1}}}async function XA(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
|
|
1480
|
+
`,exitCode:9}};if(e.length>0&&RA.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"
|
|
1481
|
+
`,exitCode:9}}}function ZA(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=HA(t);if(r.error)return r.error;if(r.help)return UA();if(r.version)return WA();let i=await XA(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
|
|
1482
|
+
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=GA(o,r.inputType);if(l)return l;let u=_i(a);return r.check?YA(u,o,n.cwd):hi(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const QA=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function $A(){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 ej=[],tj=[`--yes`];function nj(){return C(`nuke`,async e=>{if(T(e,{valueFlags:ej}))return{stdout:`Usage: nuke <launch-code>
|
|
1483
1483
|
|
|
1484
1484
|
Completely reset the environment by deleting all local data and reloading.
|
|
1485
1485
|
Destroys the file system, chat history, and scoops database.
|
|
1486
1486
|
Requires the secret launch code to proceed.
|
|
1487
|
-
`,stderr:``,exitCode:0};let t=w(e,{value
|
|
1487
|
+
`,stderr:``,exitCode:0};let t=w(e,{value:ej,bool:tj});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await $A(),rj(QA)})(),{stdout:`Nuking everything…
|
|
1488
1488
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
|
|
1489
1489
|
Run nuke again with the secret launch code to proceed.
|
|
1490
|
-
`,exitCode:1}})}function
|
|
1490
|
+
`,exitCode:1}})}function rj(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 ij(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
|
|
1491
1491
|
|
|
1492
1492
|
Usage:
|
|
1493
1493
|
oauth-domain list List extra domains for every provider
|
|
@@ -1512,13 +1512,13 @@ Examples:
|
|
|
1512
1512
|
oauth-domain add adobe '*.da.live'
|
|
1513
1513
|
oauth-domain list adobe
|
|
1514
1514
|
oauth-domain remove adobe admin.da.live
|
|
1515
|
-
`}function
|
|
1515
|
+
`}function aj(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function oj(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(`
|
|
1516
1516
|
`)}\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)
|
|
1517
1517
|
`,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
|
|
1518
|
-
`)}\n`,stderr:``,exitCode:0}}async function
|
|
1519
|
-
`,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
|
|
1520
|
-
`,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
|
|
1521
|
-
`,exitCode:1}}async function
|
|
1518
|
+
`)}\n`,stderr:``,exitCode:0}}async function sj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
|
|
1519
|
+
`,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 cj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
|
|
1520
|
+
`,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 lj(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>
|
|
1521
|
+
`,exitCode:1}}async function uj(e,t,n,r){switch(t){case`list`:return oj(e,n);case`add`:return sj(e,n,r);case`remove`:return cj(e,n,r);case`clear`:return lj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${ij()}`,exitCode:1}}}function dj(){return C(`oauth-domain`,async e=>{if(e.length===0||T(e))return{stdout:ij(),stderr:``,exitCode:0};let t=w(e);if(`error`in t)return aj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-CLw42Fru.js`).then(e=>e.t);try{return await uj(a,n,r,i)}catch(e){return aj(e instanceof Error?e.message:String(e))}})}function fj(){return C(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-BL31T-_Z.js`);return n(e,t)})}const pj=[`--download`,`-d`,`--view`,`-v`],mj=[`--size`],hj={low:256,medium:768,high:1536};function gj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
|
|
1522
1522
|
|
|
1523
1523
|
VFS paths are served in a new browser tab via the preview service worker.
|
|
1524
1524
|
URLs (http/https/etc.) are opened directly in a new tab.
|
|
@@ -1532,19 +1532,19 @@ Examples:
|
|
|
1532
1532
|
medium (768x768), high (1536x1536), or a custom WxH
|
|
1533
1533
|
box like 512x512. The image is fit inside the box
|
|
1534
1534
|
with aspect ratio preserved and is never upscaled.
|
|
1535
|
-
`,stderr:``,exitCode:0}}function
|
|
1535
|
+
`,stderr:``,exitCode:0}}function _j(e){if(e in hj){let t=hj[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 vj(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 yj(){return`open --view requires --size to bound the inlined image. Use one of:
|
|
1536
1536
|
--size low (256x256)
|
|
1537
1537
|
--size medium (768x768)
|
|
1538
1538
|
--size high (1536x1536)
|
|
1539
1539
|
--size WxH (custom box, e.g. 512x512)
|
|
1540
|
-
`}const
|
|
1541
|
-
`)}async function
|
|
1542
|
-
`);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return
|
|
1543
|
-
`);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:
|
|
1544
|
-
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await
|
|
1545
|
-
`);if(
|
|
1540
|
+
`}const bj=new Set([`image/png`,`image/webp`]);function xj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function Sj(e,t){let n=xj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Cj(e,t,n,r){let i=xj(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=vj(e,t)?bj.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 wj(e){let t=w(e,{bool:pj,value:mj});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 Tj(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function Ej(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 Oj(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),Tj(`opened sprinkle ${e} from ${a}`)}catch(e){return G(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await Tr(t.fs,Nr(a)),n=Hr(a,e),r;try{r=await i(n)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Tj(`opened ${a} → ${n}${Ej(r)}`)}return G(`open: sprinkle manager not initialized
|
|
1541
|
+
`)}async function kj(e,t,n){if(!t)return G(`open: browser APIs are unavailable in this environment
|
|
1542
|
+
`);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Tj(`opened ${e}${Ej(r)}`)}async function Aj(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=Cr(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=_j(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 Sj(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`+yj())}let u;try{u=await Cj(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 Tj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function jj(e,t,n,r){if(!r)return G(`open: --download requires the in-panel terminal (DOM-only)
|
|
1543
|
+
`);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:Cr(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=kr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),Tj(`downloaded ${t}`)}async function Mj(e,t,n,r){if(!n)return G(`open: browser APIs are unavailable in this environment
|
|
1544
|
+
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Tr(t.fs,i?e:Nr(e)),o=Hr(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return Tj(`opened ${e} → ${o}${Ej(s)}`)}async function Nj(e,t,n,r){if(!Dr(e)&&e.endsWith(`.shtml`)&&t.fs)return Oj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
|
|
1545
|
+
`);if(Dr(e))return kj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?Aj(e,i,t,n.sizeSpec):n.download?jj(e,i,t,r.hasDom):Mj(i,t,r.canOpenWindow,r.openExternal)}function Pj(e){return C(`open`,async(t,n)=>{if(t.length===0||T(t,{valueFlags:mj}))return gj();let r=wj(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 gj();let c=globalThis.__slicc_sprinkleManager,l=typeof window<`u`&&typeof document<`u`,u=l?null:b(),d={canOpenWindow:!!e||l||!!u,hasDom:l,sprinkleManager:c,openExternal:Dj(e,l,u)},f=[];for(let e of s){let t=await Nj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
|
|
1546
1546
|
`)+`
|
|
1547
|
-
`,stderr:``,exitCode:0}})}function
|
|
1547
|
+
`,stderr:``,exitCode:0}})}function Fj(){return C(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-CcKwxzLY.js`);return n(e,t)})}function Ij(e=`pdftk`){return C(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function Lj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
|
|
1548
1548
|
|
|
1549
1549
|
Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
|
|
1550
1550
|
is zero-padded to the digit width of the last page (out-1.png for a 9-page
|
|
@@ -1571,8 +1571,8 @@ Examples:
|
|
|
1571
1571
|
pdftoppm -png -r 150 doc.pdf page
|
|
1572
1572
|
pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
|
|
1573
1573
|
pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
|
|
1574
|
-
`,stderr:``,exitCode:0}}function
|
|
1575
|
-
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function
|
|
1574
|
+
`,stderr:``,exitCode:0}}function Rj(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 zj(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 Bj(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=zj(e[++d]),t=`jpeg`;break;case`-r`:n=Rj(e[++d],`-r`);break;case`-f`:r=Rj(e[++d],`-f`);break;case`-l`:i=Rj(e[++d],`-l`);break;case`-scale-to`:a=Rj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=Rj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=Rj(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 Vj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Hj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Uj(e){return e===`jpeg`?`jpg`:`png`}function Wj(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:sa(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function Gj(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!aa(r))throw Error(`${t}: not a PDF file`);return r}function Kj(e=`pdftoppm`){return C(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Lj();let r;try{r=Bj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await Gj(n,r.inputPath),i=Uj(r.format),a=r.outputRoot??Vj(kr(r.inputPath)),o=[];return await ia(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Wj(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:Hj(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(`
|
|
1575
|
+
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function qj(e=`pdftotext`){return C(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Jj(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 Yj(){qw(()=>()=>ie()),Kw(()=>()=>Jj(ie()))}const Xj=`/workspace/.plugins/sources`;function Zj(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function Qj(e,t){let n=w(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function $j(){return`usage: plugin <command> [args]
|
|
1576
1576
|
|
|
1577
1577
|
Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
|
|
1578
1578
|
directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
|
|
@@ -1582,7 +1582,7 @@ Commands:
|
|
|
1582
1582
|
install <path|repo> Validate the plugin and register it. <repo> is a
|
|
1583
1583
|
GitHub reference (owner/repo, owner/repo@branch, or
|
|
1584
1584
|
https://github.com/owner/repo[/tree/branch[/dir]]),
|
|
1585
|
-
downloaded into ${
|
|
1585
|
+
downloaded into ${Xj}/.
|
|
1586
1586
|
Skills surface through the standard skills discovery;
|
|
1587
1587
|
streamable-http MCP servers are added to the MCP
|
|
1588
1588
|
store as "<plugin>:<server>".
|
|
@@ -1604,36 +1604,36 @@ Examples:
|
|
|
1604
1604
|
plugin list
|
|
1605
1605
|
plugin info my-plugin
|
|
1606
1606
|
plugin remove my-plugin
|
|
1607
|
-
`}function
|
|
1607
|
+
`}function eM(e={}){return C(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return Zj($j());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await sM(i,a,e);case`list`:case`ls`:return await dM(i,e);case`info`:return await fM(i,e);case`validate`:return await pM(i,a,e,la(n?.env));case`remove`:case`rm`:case`delete`:return await mM(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 tM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-D_cFUSir.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 nM(e,t,n){let r=hM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-NHKpL-_w.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 rM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function iM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${Xj}/${t.map(rM).join(`--`)}`}async function aM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-CMSbKC3q.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 oM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function sM(e,t,n){if(T(e))return Zj(`usage: plugin install <path|repo>
|
|
1608
1608
|
|
|
1609
1609
|
Loads the Agent Plugins package at <path>, or downloads it from a GitHub
|
|
1610
1610
|
reference (owner/repo, owner/repo@branch, or
|
|
1611
1611
|
https://github.com/owner/repo[/tree/branch[/dir]]) into
|
|
1612
|
-
${
|
|
1612
|
+
${Xj}/ first. Validates plugin.json (closed
|
|
1613
1613
|
schema, name constraints), discovers skills/*/SKILL.md, and validates
|
|
1614
1614
|
mcp.json. On success the plugin is recorded in
|
|
1615
1615
|
/workspace/.plugins/plugins.json — its skills then surface through the
|
|
1616
1616
|
standard skills discovery, and each supported streamable-http MCP server
|
|
1617
1617
|
is registered in the MCP store as "<plugin>:<server>".
|
|
1618
|
-
`);let r=
|
|
1618
|
+
`);let r=Qj(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await tM(n),a=await nM(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=iM(a.ref),s=a.ref.display;let e=await aM(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 oM(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${gM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-Cset-yBv.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await oM(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await uM(u,n),g=await lM(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),Zj(cM(u,h,g,s??o,l.diagnostics))}function cM(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:`,gM(i)),c.join(`
|
|
1619
1619
|
`)+`
|
|
1620
|
-
`}async function
|
|
1621
|
-
`);let n=
|
|
1620
|
+
`}async function lM(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-tvt1tIjf.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 uM(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-tvt1tIjf.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 dM(e,t){if(T(e))return Zj(`usage: plugin list
|
|
1621
|
+
`);let n=Qj(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-Cset-yBv.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return Zj("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 Zj(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
|
|
1622
1622
|
`)+`
|
|
1623
|
-
`)}async function
|
|
1624
|
-
`);let n=
|
|
1623
|
+
`)}async function fM(e,t){if(T(e))return Zj(`usage: plugin info <name>
|
|
1624
|
+
`);let n=Qj(`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-Cset-yBv.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await tM(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${gM(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:`,gM(c.diagnostics)),Zj(d.join(`
|
|
1625
1625
|
`)+`
|
|
1626
|
-
`)}async function
|
|
1627
|
-
`);let i=
|
|
1626
|
+
`)}async function pM(e,t,n,r){if(T(e))return Zj(`usage: plugin validate <path|repo>
|
|
1627
|
+
`);let i=Qj(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await tM(n),o=await nM(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/${iM(o.ref).split(`/`).pop()}`;let e=await aM(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 oM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${gM(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:`,gM(u.diagnostics)),Zj(p.join(`
|
|
1628
1628
|
`)+`
|
|
1629
|
-
`)}async function
|
|
1630
|
-
`);let n=
|
|
1629
|
+
`)}async function mM(e,t){if(T(e))return Zj(`usage: plugin remove <name>
|
|
1630
|
+
`);let n=Qj(`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-Cset-yBv.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-tvt1tIjf.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(`${Xj}/`);return c&&await oM(await tM(t),o.root),Zj([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
|
|
1631
1631
|
`)+`
|
|
1632
|
-
`)}function
|
|
1633
|
-
`)}const
|
|
1634
|
-
`,exitCode:1};let r=w(t,{bool:
|
|
1632
|
+
`)}function hM(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 gM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
|
|
1633
|
+
`)}const _M=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],vM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],yM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},bM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],xM=[`-o`,`--columns`];function SM(e={}){return C(`ps`,async t=>{if(T(t,{valueFlags:xM}))return IM();let n=e.processManager??CM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
|
|
1634
|
+
`,exitCode:1};let r=w(t,{bool:bM,value:xM});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=vM,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=wM(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?FM(l):l.map(e=>({proc:e,depth:0})),d=TM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>OM(e,i,t,a,d));return{stdout:[EM(i,d),...f].join(`
|
|
1635
1635
|
`)+`
|
|
1636
|
-
`,stderr:``,exitCode:0}})}function
|
|
1636
|
+
`,stderr:``,exitCode:0}})}function CM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function wM(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(!_M.includes(e))return Error(`unknown column '${e}'; supported: ${_M.join(`, `)}`);n.push(e)}return n}function TM(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,jM(e).length);return{full:!0,width:r}}function EM(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 OM(e,t,n,r,i){return t.map(t=>kM(e,t,n,r,i)).join(` `)}function kM(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 yM[e.status];case`start`:return AM(e.startedAt);case`scoop`:return MM(e,i);case`command`:return NM(e,n,r)}}function AM(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 jM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function MM(e,t){let n=jM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function NM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(PM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function PM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function FM(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 IM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
|
|
1637
1637
|
|
|
1638
1638
|
List processes tracked by the kernel.
|
|
1639
1639
|
|
|
@@ -1666,9 +1666,9 @@ Examples:
|
|
|
1666
1666
|
ps -a -T full tree
|
|
1667
1667
|
ps -o pid,kind,stat just three columns
|
|
1668
1668
|
ps -o scoop,stat,pid full scoop jid, with STAT and PID
|
|
1669
|
-
`,stderr:``,exitCode:0}}const
|
|
1670
|
-
`,stderr:``,exitCode:0}}function
|
|
1671
|
-
`,stderr:``,exitCode:0}}async function
|
|
1669
|
+
`,stderr:``,exitCode:0}}const LM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function RM(e,t=LM){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 zM(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 BM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function VM(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 HM(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 UM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function WM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
|
|
1670
|
+
`,stderr:``,exitCode:0}}function GM(){return{stdout:`Python 3.14 (Pyodide)
|
|
1671
|
+
`,stderr:``,exitCode:0}}async function KM(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 qM(e){let t=VM(e),n=await Qr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Zr}\n`,exitCode:1}};let r=await HM(t.reader,n);return r?r===Vr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${UM(r,Vr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Zr}\n`,exitCode:1}}}const JM=new Set(`EsSuBIPqObdR`);function YM(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=>JM.has(e)))break;t++}return t===0?e:e.slice(t)}function XM(e,t={}){return C(e,async(n,r)=>{let i=YM(n),a=i[0];if(a===`--help`||a===`-h`)return WM();if(a===`--version`||a===`-V`)return GM();let o=await KM(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await RM(r.fs),f=zM(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??ZM(),h=p?.owner??{kind:`system`},g=p?.getParentPid?.(),_=t.realmFactory??ii(),v=t.pyodideIndexURL??vi(),ee=t.pyodideAssetRoot;if(!ee&&v===void 0){let e=await qM(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=BM();return m?mi({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:ri()}):$M({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 ZM(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let QM=null;async function $M(e){if(!QM){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);QM=new e}return mi({pm:QM,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:ri()})}function eN(){return C(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function tN(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 nN(){return null}function rN(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=iN(r),o=iN(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 iN(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 aN(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
|
|
1672
1672
|
|
|
1673
1673
|
Usage:
|
|
1674
1674
|
rsync [flags] <local-path> <runtime-id>:<remote-path> # push
|
|
@@ -1684,21 +1684,21 @@ Examples:
|
|
|
1684
1684
|
rsync /workspace follower-abc123:/workspace
|
|
1685
1685
|
rsync --delete /shared leader:/shared
|
|
1686
1686
|
rsync follower-abc123:/workspace/project /workspace/project
|
|
1687
|
-
`,stderr:``,exitCode:0}}async function
|
|
1687
|
+
`,stderr:``,exitCode:0}}async function oN(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 sN(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 cN(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 lN(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 uN(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function dN(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=tN(await oN(e,a),await sN(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(`
|
|
1688
1688
|
`)+`
|
|
1689
|
-
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await
|
|
1689
|
+
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await lN(n,s,uN(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(`
|
|
1690
1690
|
`)+`
|
|
1691
1691
|
`,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(`
|
|
1692
1692
|
`)+`
|
|
1693
1693
|
`,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(`
|
|
1694
1694
|
`)+`
|
|
1695
|
-
`,stderr:``,exitCode:0}}async function
|
|
1695
|
+
`,stderr:``,exitCode:0}}async function fN(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=tN(await sN(t,s,o),await oN(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(`
|
|
1696
1696
|
`)+`
|
|
1697
|
-
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=
|
|
1697
|
+
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=uN(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await cN(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(`
|
|
1698
1698
|
`)+`
|
|
1699
|
-
`,stderr:``,exitCode:0}}function
|
|
1699
|
+
`,stderr:``,exitCode:0}}function pN(e={}){let t=e.fs,n=e.getSendFsRequest??nN;return C(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return aN();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
|
|
1700
1700
|
`,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
|
|
1701
|
-
`,exitCode:1};let i=
|
|
1701
|
+
`,exitCode:1};let i=rN(e);if(`error`in i)return i.error===`__help__`?aN():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await dN(t,r,i):await fN(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function mN(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
|
|
1702
1702
|
say --status | --warmup
|
|
1703
1703
|
|
|
1704
1704
|
Speaks the given text. Uses on-device Kokoro voices when the model
|
|
@@ -1717,14 +1717,14 @@ Examples:
|
|
|
1717
1717
|
[web speech] otherwise); kokoro voices lead when ready
|
|
1718
1718
|
--status Show the on-device voice state (downloading/ready + ETA)
|
|
1719
1719
|
--warmup Stage + start the on-device voice download in the background
|
|
1720
|
-
`,stderr:``,exitCode:0}}function
|
|
1720
|
+
`,stderr:``,exitCode:0}}function hN(e){switch(e.state){case`ready`:return`voice engine: ready
|
|
1721
1721
|
`;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
|
|
1722
1722
|
`;case`idle`:return`voice engine: not downloaded (run say --warmup)
|
|
1723
|
-
`;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
|
|
1723
|
+
`;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 gN(e){return e instanceof Error?e.message:String(e)}let _N=!1,vN=null;function yN(){return _N?Promise.resolve(speechSynthesis.getVoices()):(vN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){_N=!0,e(t);return}let n=()=>{_N=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),_N=!0,e(speechSynthesis.getVoices())},1e3)}),vN)}const bN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function xN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function SN(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 CN(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 bN){let n=xN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return q(`${i} requires ${bN[i]}`);let a=SN(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 wN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function TN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>wN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await yN()).map(e=>wN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
|
|
1724
1724
|
`)+`
|
|
1725
|
-
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>
|
|
1725
|
+
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>wN(e)).join(`
|
|
1726
1726
|
`)+`
|
|
1727
|
-
`,stderr:``,exitCode:0}}catch(e){return q(
|
|
1727
|
+
`,stderr:``,exitCode:0}}catch(e){return q(gN(e))}}async function EN(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 yN()).map(e=>({name:e.name}));return[...n,...r]}async function DN(e,t){let n=(await EN(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 ON(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:hN(t?n():e()),stderr:``,exitCode:0}}return{stdout:hN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(gN(e))}}async function kN(e,t){return t.includes(`--list`)?TN(e):t.includes(`--status`)?ON(e,!1):t.includes(`--warmup`)?ON(e,!0):null}async function AN(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: ${gN(e)}`)}}async function jN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(gN(e))}}async function MN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(gN(e))}}async function NN(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(gN(e))}}async function PN(e,t){return e.local?MN(t):NN(e,t)}async function FN(e,t){let n=await PN(e,t);return`exitCode`in n?n:{...ur(n.bytes),stderr:``,exitCode:0}}async function IN(e,t,n,r){let i=await PN(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}: ${gN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function LN(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&&!fr(t)?FN(e,i):n.outFile?IN(e,t,n.outFile,i):e.local?AN(i):jN(e,i)}function RN(){return C(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return mN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:b()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await kN(n,e);if(r)return r;let i=CN(e);return`exitCode`in i?i:i.text?i.lang?LN(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):mN()})}function zN(){return C(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-DXkhPPQJ.js`);return n(e,t)})}const BN=[`--domain`],VN=[`--persist`];function HN(){return`secret — manage secrets for the fetch proxy and mount backends
|
|
1728
1728
|
|
|
1729
1729
|
No approval (session-only, in-memory, never persisted):
|
|
1730
1730
|
secret set <name> <value> --domain <pat> Set a session secret. Free for a
|
|
@@ -1766,23 +1766,23 @@ Examples:
|
|
|
1766
1766
|
secret peek OPENAI_KEY
|
|
1767
1767
|
secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
|
|
1768
1768
|
secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
|
|
1769
|
-
`}function
|
|
1769
|
+
`}function UN(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 WN(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const GN={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},KN=new Set;function qN(e,t){if(e===t)return!0;try{return xt(e).test(t)}catch{return!1}}function JN(e,t){for(let n of e)if(qN(n,t))return!0;return!1}function YN(e){return{stdout:``,stderr:`${St(`secret`,e)}\n`,exitCode:1}}function XN(e){let t=Le(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??Ep(t),i=e.grants??KN,a=e.broker,o=()=>(a??=Ss(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(JN(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${GN[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&qN(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&zt(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&zt(t)&&e.unsetEnv(t)}}}function ZN(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
|
|
1770
1770
|
`)?t.slice(0,-2):t.endsWith(`
|
|
1771
|
-
`)?t.slice(0,-1):t}async function
|
|
1772
|
-
`,exitCode:1};let a=r.positionals[1],o=
|
|
1771
|
+
`)?t.slice(0,-1):t}async function QN(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}):YN(i)}async function $N(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return YN(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 eP(e,t,n){let r=w(e.slice(1),{value:BN,bool:VN});if(`error`in r)return WN(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
|
|
1772
|
+
`,exitCode:1};let a=r.positionals[1],o=ZN(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
|
|
1773
1773
|
`,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]
|
|
1774
1774
|
or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
|
|
1775
|
-
`,exitCode:1};let c=
|
|
1776
|
-
`,exitCode:1}}function
|
|
1777
|
-
`,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
|
|
1778
|
-
`,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
|
|
1779
|
-
`,exitCode:1};let i=
|
|
1780
|
-
`,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}):
|
|
1781
|
-
`,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
|
|
1782
|
-
`,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?
|
|
1775
|
+
`,exitCode:1};let c=UN(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?QN(i,s,c,n):$N(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
|
|
1776
|
+
`,exitCode:1}}function tP(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}async function nP(e,t){let[n,...r]=e.slice(1),i=e=>({stdout:e,stderr:``,exitCode:0});if(n===`set`){let e=w(r,{value:BN,bool:VN}),n=`error`in e?void 0:e.positionals[0];if(!n||!zt(n))return i(``);let a=await t.backend.getMasked(n).catch(()=>null);return i(a?`export ${n}=${tP(a.maskedValue)}\n`:``)}if(n===`delete`||n===`rm`){let e=w(r,{}),t=`error`in e?void 0:e.positionals[0];return i(t&&zt(t)?`unset ${t}\n`:``)}return i(``)}async function rP(e,t){let n=w(e.slice(1),{});if(`error`in n)return WN(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
|
|
1777
|
+
`,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 iP(e,t){let n=w(e.slice(1),{});if(`error`in n)return WN(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
|
|
1778
|
+
`,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 aP(e,t){let n=w(e.slice(1),{value:BN});if(`error`in n)return WN(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
|
|
1779
|
+
`,exitCode:1};let i=UN(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
|
|
1780
|
+
`,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}):YN(a)}async function oP(e,t){let n=w(e.slice(1),{});if(`error`in n)return WN(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
|
|
1781
|
+
`,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 sP(e,t,n){let r=w(e.slice(1),{});if(`error`in r)return WN(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 cP(e,t){let n=w(e.slice(1),{});if(`error`in n)return WN(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
|
|
1782
|
+
`,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?Pa(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 lP(e,t){let n=w(e.slice(1),{});if(`error`in n)return WN(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
|
|
1783
1783
|
(changes are picked up on the next request — no restart needed)
|
|
1784
1784
|
`,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
|
|
1785
|
-
`,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
|
|
1785
|
+
`,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 uP(e,t,n){let r=e[0];switch(r){case`set`:return eP(e,t,n);case`get`:case`read`:return rP(e,n);case`shell-env`:return nP(e,n);case`peek`:return iP(e,n);case`scope`:return aP(e,n);case`list`:return oP(e,n);case`delete`:case`rm`:return sP(e,r,n);case`test`:return cP(e,n);case`edit`:return lP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function dP(e={}){let t=XN(e);return C(`secret`,async(e,n)=>{if(e.length===0||T(e,{valueFlags:BN}))return{stdout:HN(),stderr:``,exitCode:0};try{return await uP(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function fP(){return null}function pP(){return null}function mP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
|
|
1786
1786
|
serve --logs [<token>] [--lines <n>]
|
|
1787
1787
|
serve --truncate [<token>]
|
|
1788
1788
|
|
|
@@ -1818,28 +1818,28 @@ Limits and lifetime:
|
|
|
1818
1818
|
its TTL. Either can be removed sooner with \`serve --stop\`.
|
|
1819
1819
|
- <token> is the "Preview token" printed at mint time or the TOKEN column
|
|
1820
1820
|
of \`serve --list\`; \`--stop\` also accepts the preview URL.
|
|
1821
|
-
`,stderr:``,exitCode:0}}function
|
|
1822
|
-
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function
|
|
1821
|
+
`,stderr:``,exitCode:0}}function hP(e){return`error`in e}function gP(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
|
|
1822
|
+
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function _P(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
|
|
1823
1823
|
`};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)
|
|
1824
1824
|
`};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.
|
|
1825
1825
|
`}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
1826
|
-
`}}function
|
|
1826
|
+
`}}function vP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function yP(e,t,n){let r=_P(e,t,n);if(r)return r;let i=vP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
|
|
1827
1827
|
`};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
|
|
1828
|
-
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=
|
|
1828
|
+
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=gP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
|
|
1829
1829
|
`};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
|
|
1830
1830
|
`}:(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
|
|
1831
1831
|
`}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
|
|
1832
|
-
`}:(n.directory=e,{skip:0})}function
|
|
1833
|
-
`,exitCode:1};if(n.webhookId){let e=await
|
|
1834
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
1835
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
1836
|
-
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(
|
|
1832
|
+
`}:(n.directory=e,{skip:0})}function bP(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=yP(e[n],e[n+1],t);if(hP(r))return{...t,error:r.error};n+=r.skip}return t}async function xP(e,t,n,r){if(!jr(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=Rr(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 SP(e){return`exitCode`in e}async function CP(e){let t=Ma(e)??e,n,r=pP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=b();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
|
|
1833
|
+
`,exitCode:1};if(n.webhookId){let e=await Ty();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 wP(){let e=pP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
|
|
1834
|
+
`,stderr:``,exitCode:0}:{stdout:EP(t),stderr:``,exitCode:0}}let t=b();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
|
|
1835
|
+
`,stderr:``,exitCode:0}:{stdout:EP(n),stderr:``,exitCode:0}}function TP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function EP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${TP(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 OP(e){let t,n=pP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=b();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.
|
|
1836
|
+
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(DP).join(``)}`,stderr:``,exitCode:0}}async function kP(e){let t,n,r=pP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=b();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 AP(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:Cr(s)})}return n}function jP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function MP(e){let t=fP();if(t)return t(e);let n=b();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 NP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function PP(e,t){if(!e)return{ok:!0};let n=await Ty();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 FP(e,t,n,r,i,a,o){let s;try{s=await MP({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 Ty();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await NP(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 IP(e){if(e.stop){let t=e.stop;return jP(()=>CP(t))}if(e.list)return jP(()=>wP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
|
|
1837
1837
|
`,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
|
|
1838
|
-
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return
|
|
1838
|
+
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return jP(()=>OP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return jP(()=>kP(t))}}function LP(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
|
|
1839
1839
|
`,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
|
|
1840
|
-
`,exitCode:1}}async function
|
|
1841
|
-
`:``,f=await
|
|
1842
|
-
`;function
|
|
1840
|
+
`,exitCode:1}}async function RP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return AP(t,n)}}async function zP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return mP();let i=bP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await IP(i);if(a)return a;if(!i.directory)return mP();let o=LP(i);if(o)return o;let s=await xP(i.directory,i.entry,t.fs,t.cwd);if(SP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await RP(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)
|
|
1841
|
+
`:``,f=await PP(!i.noBridge&&i.bridge,d);return f.ok?FP(i,c,l,f.webhookId,d,u,n):f.result}function BP(e,t){return C(`serve`,(n,r)=>zP(n,r,e,t))}const VP=`usage: session export [--id <id>] [--output <path>]
|
|
1842
|
+
`;function HP(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 UP(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${VP}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${VP}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${VP}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${VP}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${VP}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${VP}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function WP(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||Ft(r)!==a.sha256)throw new za(`transfer-corrupt`);return r}async function GP(e,t){let n=UP(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=HP(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${VP}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await Es().export(a,{}),n=await WP(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 za?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function KP(){return C(`session`,async(e,t)=>{if(e[0]===`export`&&!T(e))return GP(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-_ama7cso.js`);return n(e,t,VP)})}function qP(){return C(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-BRFnmkzR.js`);return await n(e,t)})}const JP=`leader`;function YP(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function XP(e){return+!!e.leader+e.followers.length}function ZP(){return{stdout:`usage: sprinkle <subcommand> [args]
|
|
1843
1843
|
|
|
1844
1844
|
list [--runtime <id>] List sprinkles + an instance line per runtime
|
|
1845
1845
|
open <name> Open a sprinkle by name
|
|
@@ -1857,22 +1857,22 @@ Limits and lifetime:
|
|
|
1857
1857
|
chat <html> Show inline HTML in chat (Tool UI)
|
|
1858
1858
|
Use data-action="name" on buttons for callbacks
|
|
1859
1859
|
Pipe HTML: echo "<div>...</div>" | sprinkle chat
|
|
1860
|
-
`,stderr:``,exitCode:0}}function
|
|
1861
|
-
`,exitCode:1};let r=await
|
|
1860
|
+
`,stderr:``,exitCode:0}}function QP(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function $P(){return[JP,...ie().map(e=>e.runtimeId)]}function eF(e){return`unknown runtime "${e}"\nknown runtimes: ${$P().join(`, `)}\nRun \`host\` to see connected followers.`}async function tF(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
|
|
1861
|
+
`,exitCode:1};let r=await Ue({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
|
|
1862
1862
|
`,exitCode:1}:{stdout:JSON.stringify(r)+`
|
|
1863
|
-
`,stderr:``,exitCode:0}}function
|
|
1864
|
-
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=
|
|
1863
|
+
`,stderr:``,exitCode:0}}function nF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function rF(e){return[...e.map(e=>({name:e,runtimeId:JP})),...YP()]}async function iF(e,t){let n=w(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!$P().includes(r))return J(`list`,eF(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
|
|
1864
|
+
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=rF([...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(...nF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
|
|
1865
1865
|
`)+`
|
|
1866
|
-
`,stderr:``,exitCode:0}}function
|
|
1866
|
+
`,stderr:``,exitCode:0}}function aF(e,t){return!t||Wo(e)?null:(Go(e,t),Wo(e)===t?t:null)}async function oF(e,t,n){let r=w(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=ca(void 0,n),o=aF(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&Ko(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 sF(e,t){let n=w(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 cF(e,t){let n=w(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 lF(e,t){let n=w(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 uF(e){let t=w(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=qo(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
|
|
1867
1867
|
`,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
|
|
1868
1868
|
route for follower-forwarded licks too):
|
|
1869
1869
|
`+t.map(([e,t])=>` ${e} -> ${t}`).join(`
|
|
1870
1870
|
`)+`
|
|
1871
|
-
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return
|
|
1872
|
-
`,exitCode:1};switch(n){case`list`:return
|
|
1873
|
-
`,stderr:``,exitCode:0}}function
|
|
1874
|
-
`)}\n`:``}async function
|
|
1875
|
-
`)?e:`${e}\n`,exitCode:1}}function
|
|
1871
|
+
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Ko(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=Wo(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Go(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function dF(e){let t=[];return e.leader&&t.push(JP),t.push(...e.followers),t.join(`, `)}async function fF(e,t){let n=w(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&&!$P().includes(o))return J(`send`,eF(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`,eF(s.unknownRuntime));let c=XP(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`} (${dF(s)}).\n`,stderr:``,exitCode:0}}function pF(){return C(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return ZP();let n=e[0];if(T(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:ht(`sprinkle`,n,ZP().stdout),stderr:``,exitCode:0};if(n===`chat`)return tF(mt(e),t);let r=QP();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
|
|
1872
|
+
`,exitCode:1};switch(n){case`list`:return iF(r,e);case`open`:return oF(r,e,t.env);case`close`:return sF(r,e);case`reload`:return cF(r,e);case`refresh`:return lF(r,e);case`route`:return uF(e);case`send`:return fF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function mF(){return{stdout:`usage: sqlite3 [database] [sql]
|
|
1873
|
+
`,stderr:``,exitCode:0}}function hF(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 gF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function _F(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function vF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function yF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(Ar).join(`|`)));return t.length>0?`${t.join(`
|
|
1874
|
+
`)}\n`:``}async function bF(e,t,n){let r=await Lr(),i=gF(e,n),a=await _F(r,i,n),o=a.exec(t);return await vF(a,i,n),a.close(),yF(o)}function xF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function SF(e=`sqlite3`){return C(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return mF();let{database:r,sql:i}=hF(t,n);if(!i)return xF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await bF(r,i,n),stderr:``,exitCode:0}}catch(t){return xF(e,t)}})}function CF(e){return{stdout:``,stderr:e.endsWith(`
|
|
1875
|
+
`)?e:`${e}\n`,exitCode:1}}function wF(){return{stdout:`ssh - run a command on a connected tray follower
|
|
1876
1876
|
|
|
1877
1877
|
Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
|
|
1878
1878
|
ssh --list
|
|
@@ -1895,11 +1895,11 @@ Examples:
|
|
|
1895
1895
|
ssh --list
|
|
1896
1896
|
ssh follower-abc123 "uname -a"
|
|
1897
1897
|
ssh --cwd /tmp follower-abc123 "ls -la"
|
|
1898
|
-
`,stderr:``,exitCode:0}}function
|
|
1898
|
+
`,stderr:``,exitCode:0}}function TF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
|
|
1899
1899
|
Start one with: slicc <join-url> follow sh -c
|
|
1900
1900
|
`;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(`
|
|
1901
|
-
`)}\n`}function
|
|
1902
|
-
Usage: ssh <runtime-id> <command...>`);let r=b();if(!r)return
|
|
1901
|
+
`)}\n`}function EF(e){if(e.stdin===void 0)return;let n=cr(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 OF(){return C(`ssh`,async(e,t)=>{let n=DF(e);if(`help`in n)return wF();if(`error`in n)return CF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:TF(ie()),stderr:``,exitCode:0};if(!n.command)return CF(`ssh: missing command
|
|
1902
|
+
Usage: ssh <runtime-id> <command...>`);let r=b();if(!r)return CF(`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:EF(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 CF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function kF(e){return{stdout:``,stderr:`${St(`sudo`,e)}\n`,exitCode:77}}function AF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return C(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
|
|
1903
1903
|
`,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
|
|
1904
1904
|
|
|
1905
1905
|
Request human approval to run <command> with elevation. If approved, the
|
|
@@ -1916,14 +1916,14 @@ Options:
|
|
|
1916
1916
|
-h, --help Show this help message and exit.
|
|
1917
1917
|
`,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
|
|
1918
1918
|
`,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
|
|
1919
|
-
`,exitCode:1};let a=
|
|
1920
|
-
`,exitCode:1};let i=await Promise.all(r.map(e=>
|
|
1921
|
-
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>
|
|
1922
|
-
`,exitCode:1};let a=await Promise.all(i.map(e=>
|
|
1923
|
-
`,stderr:``,exitCode:0}}function
|
|
1924
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
1925
|
-
`);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=
|
|
1926
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
1919
|
+
`,exitCode:1};let a=Hp(e[0],e.slice(1)),o=i.env?.get(Gp),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return kF(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 jF(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 MF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function NF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function PF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await MF(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}': ${jF(e)}\n`}}}function FF(){return C(`rm`,async(e,t)=>{let n={recursive:NF(e,`r`)||NF(e,`R`)||e.includes(`--recursive`),force:NF(e,`f`)||e.includes(`--force`),verbose:NF(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
|
|
1920
|
+
`,exitCode:1};let i=await Promise.all(r.map(e=>PF(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 IF(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 LF(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 RF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await MF(e,r);return{stdout:n.format?`${IF(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 zF(){return C(`stat`,async(e,t)=>{let n=LF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
|
|
1921
|
+
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>RF(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 BF(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function VF(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 MF(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}': ${jF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=BF(a)}return{stdout:o,stderr:``}}function HF(){return C(`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
|
|
1922
|
+
`,exitCode:1};let a=await Promise.all(i.map(e=>VF(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 UF(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
|
|
1923
|
+
`,stderr:``,exitCode:0}}function WF(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function GF(e,t){if(e.mode)return WF(`exactly one of -c, -x, or -t is required`);e.mode=t}function KF(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const qF={c:`create`,x:`extract`,t:`list`};function JF(e,t,n,r,i){let a=qF[e];if(a)return{nextIndex:r,error:GF(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:WF(`unsupported option -${e}`)};let o=KF(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:WF(`option -${e} requires an argument`)}}function YF(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=JF(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const XF=/^[cxtzvfC]+$/;function ZF(e){let t=e.length>0&&XF.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 WF(`unsupported option ${r}`);let i=YF(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function QF(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):kr(t)}function $F(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function eI(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},...$F(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},...$F(i)});for(let n of await e.fs.readdir(t))await eI(e,Or(t,n),`${a}${n}`,r)}function tI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?ya(e):e;return va(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function nI(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 Ir(t,i)?i:void 0}async function rI(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function iI(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 rI(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await rI(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await rI(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await rI(()=>c.utimes(e,n,n))}}async function aI(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=Nr(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function oI(e,t){if(e.paths.length===0)return WF(`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 eI(t,e,QF(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=ga(n);return await t.fs.writeFile(i,e.gzip?_a(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
|
|
1924
|
+
`)}\n`:``,stderr:``,exitCode:0}}function sI(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 cI(e,t,n){if(e.paths.length>0)return WF(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=tI(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
|
|
1925
|
+
`);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=nI(t,a,e.path);if(!n)return WF(`blocked suspicious path ${e.path}`);await aI(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await iI(t,[...sI(s),...sI(c)],sI(l),n),{stdout:e.verbose?`${o.join(`
|
|
1926
|
+
`)}\n`:``,stderr:``,exitCode:0}}function lI(e={}){return C(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return UF();let r=ZF(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?WF(`-C is only supported in create or extract mode`):r.mode===`create`?oI(r,n):cI(r,n,e.fs):WF(`option -f requires an archive path`):WF(`exactly one of -c, -x, or -t is required`)})}var uI=`/**
|
|
1927
1927
|
* Standalone assertions - no dependency on test runner
|
|
1928
1928
|
*
|
|
1929
1929
|
* Each assertion:
|
|
@@ -2111,7 +2111,7 @@ function sameMembers(a, b) {
|
|
|
2111
2111
|
}
|
|
2112
2112
|
|
|
2113
2113
|
const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
|
|
2114
|
-
`,
|
|
2114
|
+
`,dI=`/**
|
|
2115
2115
|
* tst - minimal test runner
|
|
2116
2116
|
*
|
|
2117
2117
|
* - Standalone assertions (assert.js works anywhere)
|
|
@@ -2741,7 +2741,7 @@ function scheduleAutoRun() {
|
|
|
2741
2741
|
scheduleAutoRun()
|
|
2742
2742
|
|
|
2743
2743
|
export * from './assert.js'
|
|
2744
|
-
`;function
|
|
2744
|
+
`;function fI(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 pI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
|
|
2745
2745
|
|
|
2746
2746
|
Usage:
|
|
2747
2747
|
tsc [options] [files...]
|
|
@@ -2761,32 +2761,32 @@ Notes:
|
|
|
2761
2761
|
|
|
2762
2762
|
Install:
|
|
2763
2763
|
Inert until the backing package is installed in node_modules:
|
|
2764
|
-
${
|
|
2764
|
+
${Fr}
|
|
2765
2765
|
Then \`tsc --version\` and the transpile commands above. There is no
|
|
2766
2766
|
bundled binary, no CDN fallback; a missing package exits non-zero
|
|
2767
2767
|
with a clear \`ipk add\` hint.
|
|
2768
|
-
`;function
|
|
2769
|
-
`);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
|
|
2770
|
-
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function
|
|
2768
|
+
`;function mI(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 hI(e,t){let n=`${kr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${Nr(e)}/${n}`}async function gI(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=Nr(n)}return null}function _I(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function vI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function yI(e,t,n){let r=_I(t),i=await gI(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,...vI(o)}}}function bI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
|
|
2769
|
+
`);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 xI(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 SI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function CI(e,t,n,r){let{outputText:i,diagnostics:a}=SI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>bI(e,t)),s=o.length>0?`${o.join(`
|
|
2770
|
+
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function wI(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}}xI(e,a);let{outputText:s,diagnostics:c}=SI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${bI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,hI(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 TI(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:pI,stderr:``,exitCode:0}};let r;try{r=await Er(fI(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 EI(){return C(`tsc`,async(e,t)=>{let n=await TI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await yI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?CI(i,r,a,e):{stdout:pI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await wI(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 OI(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 kI(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 AI(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=OI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=kI(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 jI(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 jI(`${r}${e}${i}`))o.push(t);return o}function MI(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 NI(e,t,n){let r=n.flatMap(jI).map(MI),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 PI=null;async function FI(e){if(PI)return PI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return PI=`
|
|
2771
2771
|
if (typeof process !== 'undefined' && !process.versions) {
|
|
2772
2772
|
try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
|
|
2773
2773
|
}
|
|
2774
2774
|
const __tst_assert_exports = (function () {
|
|
2775
2775
|
const module = { exports: {} };
|
|
2776
2776
|
const exports = module.exports;
|
|
2777
|
-
${e.transpileModule(
|
|
2777
|
+
${e.transpileModule(uI,{compilerOptions:t,fileName:`assert.js`}).outputText}
|
|
2778
2778
|
return module.exports;
|
|
2779
2779
|
})();
|
|
2780
2780
|
const __tst_module_exports = (function () {
|
|
2781
2781
|
const module = { exports: {} };
|
|
2782
2782
|
const exports = module.exports;
|
|
2783
|
-
${e.transpileModule(
|
|
2783
|
+
${e.transpileModule(dI,{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"))`)}
|
|
2784
2784
|
return module.exports;
|
|
2785
2785
|
})();
|
|
2786
2786
|
const __tst = __tst_module_exports.default || __tst_module_exports;
|
|
2787
2787
|
__tst.manual = true;
|
|
2788
|
-
`.trim(),
|
|
2789
|
-
`)}}`,d=
|
|
2788
|
+
`.trim(),PI}function II(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 LI(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 RI(e,t,n){let r=x(`${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 zI(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=Nr(n),u=new Map;for(let n of LI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await RI(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 BI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=II(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
|
|
2789
|
+
`)}}`,d=II(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
|
|
2790
2790
|
${f}${e}
|
|
2791
2791
|
const __realmRequire = require;
|
|
2792
2792
|
const { createRequire: __createRequire } = __realmRequire("module");
|
|
@@ -2829,7 +2829,7 @@ await Promise.resolve();
|
|
|
2829
2829
|
await new Promise((resolve) => setTimeout(resolve));
|
|
2830
2830
|
${p}
|
|
2831
2831
|
if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
|
|
2832
|
-
`}const
|
|
2832
|
+
`}const VI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function HI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...VI}}async function UI(e,t){let n;try{n=AI(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
|
|
2833
2833
|
|
|
2834
2834
|
Usage:
|
|
2835
2835
|
tst [options] [glob...]
|
|
@@ -2851,7 +2851,7 @@ Notes:
|
|
|
2851
2851
|
with statement counters. nyc/c8 cannot wrap this runner: it is not a
|
|
2852
2852
|
Node child. Istanbul/Babel are not bundled (webapp size-limit); the
|
|
2853
2853
|
TypeScript AST already in process does the rewrite.
|
|
2854
|
-
`,stderr:``,exitCode:0}};let r=await
|
|
2854
|
+
`,stderr:``,exitCode:0}};let r=await NI(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 Er(fI(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await FI(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:HI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function WI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function GI(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 zI(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=BI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await hi(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||WI(g)}}function KI(){return C(`tst`,async(e,t)=>{let n=await UI(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 GI(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 qI=[],JI=`usage: theme <subcommand> [args]
|
|
2855
2855
|
|
|
2856
2856
|
Subcommands:
|
|
2857
2857
|
list List available preset and custom themes
|
|
@@ -2860,23 +2860,23 @@ Subcommands:
|
|
|
2860
2860
|
reset Reset to the default theme
|
|
2861
2861
|
current Show the currently active theme
|
|
2862
2862
|
export <id> <path> Export a theme to a VFS path
|
|
2863
|
-
`;function
|
|
2864
|
-
`),stderr:``,exitCode:0}}async function
|
|
2865
|
-
`,stderr:``,exitCode:0}}async function
|
|
2863
|
+
`;function YI(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function XI(){return C(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:JI,stderr:``,exitCode:0};let n=e[0];return T(e.slice(1),{valueFlags:qI})?{stdout:ht(`theme`,n,JI),stderr:``,exitCode:0}:n===`list`?ZI(e):n===`current`?QI(e):n===`reset`?$I(e):n===`apply`?eL(e.slice(1),t):n===`export`?tL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${JI}`,exitCode:1}})}async function ZI(e){let t=w(e.slice(1),{value:qI});if(`error`in t)return YI(`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(`
|
|
2864
|
+
`),stderr:``,exitCode:0}}async function QI(e){let t=w(e.slice(1),{value:qI});return`error`in t?YI(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
|
|
2865
|
+
`,stderr:``,exitCode:0}}async function $I(e){let t=w(e.slice(1),{value:qI});if(`error`in t)return YI(`reset`,t.error);let n=b();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
|
|
2866
2866
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
2867
|
-
`,exitCode:1}}async function
|
|
2867
|
+
`,exitCode:1}}async function eL(e,t){let n=w(e,{value:qI});if(`error`in n)return YI(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
|
|
2868
2868
|
`,exitCode:1};let r=b();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
2869
2869
|
`,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)
|
|
2870
2870
|
`,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
|
|
2871
|
-
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function
|
|
2872
|
-
`,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
|
|
2873
|
-
`),stderr:``,exitCode:0}}function
|
|
2871
|
+
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function tL(e,t){let n=w(e,{value:qI});if(`error`in n)return YI(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
|
|
2872
|
+
`,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 nL=`unknown`,rL=`usage: uname [-amnorsv]`,iL=[`s`,`n`,`r`,`v`,`m`,`o`];function aL(){return{stdout:[rL,` -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(`
|
|
2873
|
+
`),stderr:``,exitCode:0}}function oL(){let{releasedAt:e,buildId:t}=ct();return e?`${t} (${e})`:t}function sL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:nL}function cL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:nL}function lL(e){switch(e){case`s`:return`SLICC`;case`n`:return st();case`r`:return ct().version;case`v`:return oL();case`m`:return sL();case`o`:return cL()}}function uL(e){return{stdout:``,stderr:`uname: ${e}\n${rL}\n`,exitCode:1}}function dL(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 iL)t.add(e);continue}if(!iL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function fL(){return C(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return aL();let t=dL(e);return`error`in t?uL(t.error):{stdout:`${(t.size>0?iL.filter(e=>t.has(e)):[`s`]).map(lL).join(` `)}\n`,stderr:``,exitCode:0}})}function pL(){return C(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
|
|
2874
2874
|
Remove FILE. Symbolic links are removed without following their target.
|
|
2875
2875
|
`,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
|
|
2876
2876
|
`:`unlink: extra operand
|
|
2877
|
-
`,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
|
|
2878
|
-
`,stderr:``,exitCode:0}}function
|
|
2879
|
-
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function
|
|
2877
|
+
`,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 mL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
|
|
2878
|
+
`,stderr:``,exitCode:0}}function hL(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
|
|
2879
|
+
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function gL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!Ir(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=Nr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function _L(){return C(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return mL();let n=hL(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=It(a),s=0;for(let[e,n]of Object.entries(o)){let r=await gL(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 vL=`ai-ecoverse/slicc`,yL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,bL=`packages/vfs-root`,xL=3e4,SL=[`${bL}/workspace/skills/`,`${bL}/shared/sprinkles/`,`${bL}/shared/sounds/`,`${bL}/shared/GELATIERE.md`,`${bL}/shared/wiki/WIKI.md`,`${bL}/etc/`],CL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function wL(){return Object.fromEntries(CL.map(e=>[e,0]))}function TL(e,t,n,r){let i=wL();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 EL(e){if(e[0]!==`apply`)throw Error(yL);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 OL(e){if(!SL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)||t.startsWith(`/workspace/skills/`)&&we()?null:t}async function kL(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 ${xL}ms`)),xL)})])}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 AL(e,t){let n=await kL(t,`https://api.github.com/repos/${vL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=ke(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=OL(e.path);t&&i.set(t,e.path)}return i}function jL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${vL}/${encodeURIComponent(e)}/${n}`}function ML(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function NL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function PL(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 FL(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 IL(e,t,n,r,i,a,o){let s=await PL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:ML(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(ML(i,a)||ML(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(ML(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(NL);if(c!==null&&l!==null&&u!==null){let i=Je(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 FL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await FL(e.fs,t,n,r,o)}}async function LL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function RL(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 PL(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 LL(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 zL(e,t,n){let r=DL(t),i=DL(n),[a,o]=await Promise.all([AL(r,e.fetch),AL(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)?kL(e.fetch,jL(r,a.get(t))).then(e=>je(e.body)):void 0,o.has(t)?kL(e.fetch,jL(i,o.get(t))).then(e=>je(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 IL(e,r,t,n,i,a,l));return await RL(e.fs,u),u}async function BL(e){let{version:t,releasedAt:n,buildId:r}=ct(),i=[],a=null,o=e.getLastSeen??lt();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 VL(e){return C(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${yL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:TL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await BL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=EL(t));let i=await zL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:TL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:TL(n,r,[],[t]),stderr:``,exitCode:1}}})}const HL=`usage: uptime [-p|--pretty] [-s|--since]`,UL=`${HL}
|
|
2880
2880
|
|
|
2881
2881
|
Print how long this SLICC has been running. The clock starts when the browser
|
|
2882
2882
|
window was last loaded — a reload is a reboot.
|
|
@@ -2892,7 +2892,7 @@ The load average is the average number of live kernel processes over the last
|
|
|
2892
2892
|
processes are retained in bounded numbers, so a long burst of short commands
|
|
2893
2893
|
can under-report the older windows. The user count is always 1: a SLICC
|
|
2894
2894
|
runtime has one user identity (see \`id\`).
|
|
2895
|
-
`,
|
|
2895
|
+
`,WL=[1,5,15],GL=6e4,KL=60*GL,qL=24*KL;function JL(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function YL(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 XL(e){let t=Math.max(0,e),n=Math.floor(t/qL),r=Math.floor(t%qL/KL),i=Math.floor(t%KL/GL),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function ZL(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/qL),`day`),r(Math.floor(t%qL/KL),`hour`),r(Math.floor(t%KL/GL),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function QL(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 $L(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function eR(e,t,n){let r=WL.map(r=>YL(e,t,r*GL,n).toFixed(2));return` ${$L(t)} up ${XL(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function tR(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 nR(e={}){return C(`uptime`,async t=>{let n=tR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${HL}\n`,exitCode:1};if(n===`help`)return{stdout:UL,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${ct().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():Aa();if(n===`since`)return rR(`${QL(i)}\n`);if(n===`pretty`)return rR(`${ZL(r-i)}\n`);let a=e.processManager??JL();return rR(eR(a?a.list():[],r,i))})}function rR(e){return{stdout:e,stderr:``,exitCode:0}}const iR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function aR(e){return Bn(e,iR)}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 oR(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 sR=new Set([`standard`,`class`,`vendor`]),cR=new Set([`device`,`interface`,`endpoint`,`other`]);function lR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!sR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!cR.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 uR(e){let t=cr(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function dR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function fR(e){return`0x${e.toString(16).padStart(4,`0`)}`}function pR(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${fR(e.vendorId)}:${fR(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 mR=`usb - access USB devices via WebUSB
|
|
2896
2896
|
|
|
2897
2897
|
Usage: usb <subcommand> [options]
|
|
2898
2898
|
|
|
@@ -2930,12 +2930,12 @@ Options:
|
|
|
2930
2930
|
(bridged waits time out after 5 minutes and drop the waiter)
|
|
2931
2931
|
-h, --help
|
|
2932
2932
|
|
|
2933
|
-
Transfers are capped at ${
|
|
2934
|
-
`;function
|
|
2935
|
-
`):X(`${t.map(
|
|
2936
|
-
`)}\n`)}async function
|
|
2933
|
+
Transfers are capped at ${Ei} bytes (4 MiB).
|
|
2934
|
+
`;function hR(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?`${dR(e)}\n`:``)}async function gR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
|
|
2935
|
+
`):X(`${t.map(pR).join(`
|
|
2936
|
+
`)}\n`)}async function _R(e,t){let n=e.get(`--__resolved`);if(n)return X(`${pR(await t.info(n))}\n`);let r=oR(e),i=Be();if(i){let e=await Jx(`usb-device`,r,i);if(e.handle)return X(`${pR(await t.info(e.handle))}\n`);let n=e.info,a=wi();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=Ti().register(o);return X(`${pR(Ci(s,o))}\n`)}return X(`${pR(await t.request(r))}\n`)}async function vR(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 yR(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 bR(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 xR(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 SR(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`):hR((await n.controlIn(i,lR(t),o)).bytes,r)}async function CR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=uR(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,lR(n),a)).bytesWritten} bytes written\n`)}async function wR(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`):hR((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function TR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=uR(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 ER(e,t,n){let{positionals:r,flags:i,bools:a}=aR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return gR(n);case`request`:return _R(i,n);case`open`:case`close`:case`reset`:return vR(o,r,n,a);case`clear-halt`:return yR(r,n);case`select-config`:return bR(r,n);case`claim`:case`release`:return xR(o,r,n,a);case`control-in`:return SR(r,i,n,s);case`control-out`:return CR(r,t,i,n);case`transfer-in`:return wR(r,i,n,s);case`transfer-out`:return TR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function DR(){return C(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(mR);let n=ai(be(),b());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await ER(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 OR=`/workspace/.v86`,kR=`v86 - run an x86 virtual machine (v86 wasm engine)
|
|
2937
2937
|
|
|
2938
|
-
Requires: ${F} v86@${
|
|
2938
|
+
Requires: ${F} v86@${PO}
|
|
2939
2939
|
|
|
2940
2940
|
Usage:
|
|
2941
2941
|
v86 start [boot options] Boot a VM in the background (prints pid)
|
|
@@ -2969,7 +2969,7 @@ Boot options (QEMU-flavored):
|
|
|
2969
2969
|
proxy — no gateway needed, https upstream via the proxy
|
|
2970
2970
|
-vga <MiB> SVGA/VBE video memory (default 8, max 64) —
|
|
2971
2971
|
raise for high-res VESA modes (1080p32 needs ~9)
|
|
2972
|
-
-bios <path> -vgabios <path> BIOS blobs (default ${
|
|
2972
|
+
-bios <path> -vgabios <path> BIOS blobs (default ${OR}/{seabios,vgabios}.bin)
|
|
2973
2973
|
-nographic Serial-only guest (skip VGA)
|
|
2974
2974
|
|
|
2975
2975
|
Notes:
|
|
@@ -2977,19 +2977,19 @@ Notes:
|
|
|
2977
2977
|
(Alpine, FreeDOS, Buildroot Linux) work best.
|
|
2978
2978
|
- The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
|
|
2979
2979
|
- BIOS blobs are not bundled; download once:
|
|
2980
|
-
mkdir -p ${
|
|
2981
|
-
curl -o ${
|
|
2982
|
-
curl -o ${
|
|
2983
|
-
`,
|
|
2984
|
-
mkdir -p ${
|
|
2985
|
-
curl -o ${
|
|
2986
|
-
curl -o ${
|
|
2987
|
-
or pass -bios / -vgabios with explicit VFS paths.`,
|
|
2980
|
+
mkdir -p ${OR}
|
|
2981
|
+
curl -o ${OR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
2982
|
+
curl -o ${OR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
2983
|
+
`,AR=`v86: BIOS images not found. Download them once:
|
|
2984
|
+
mkdir -p ${OR}
|
|
2985
|
+
curl -o ${OR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
2986
|
+
curl -o ${OR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
2987
|
+
or pass -bios / -vgabios with explicit VFS paths.`,jR={"-n":MR,"-name":MR,"--name":MR,"-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)=>NR(e,`cdrom`,t),"-hda":(e,t)=>NR(e,`hda`,t),"-fda":(e,t)=>NR(e,`fda`,t),"-kernel":(e,t)=>NR(e,`kernel`,t),"-initrd":(e,t)=>NR(e,`initrd`,t),"-append":(e,t)=>NR(e,`append`,t),"-bios":(e,t)=>NR(e,`bios`,t),"-vgabios":(e,t)=>NR(e,`vgabios`,t),"-state":(e,t)=>NR(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 MR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function NR(e,t,n){return e[t]=n,null}const PR=[...Object.keys(jR),`--fps`,`--tail`,`--send`,`--to`];function FR(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(jR,r)?jR[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 IR(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 LR(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 RR(e){return wa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function zR(e){return`exitCode`in e}async function BR(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 VR={a:801,c:306,d:531};function HR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function UR(e={}){return C(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(kR);if(t[0]===`--version`)return WR(n,e);let r=t[0];if(T(t.slice(1),{valueFlags:PR}))return $(ht(`v86`,r,kR,{prefix:`v86`}));let i=mt(t.slice(1));try{switch(r){case`start`:return await XR(i,n,e);case`ls`:return QR();case`type`:return await nz(i,n);case`key`:return await rz(i,n);case`mouse`:return await az(i,n);case`screenshot`:return await oz(i,n);case`text`:return await sz(i,n);case`serve`:return cz(i);case`serial`:return lz(i);case`state`:return await uz(i,n);case`stop`:return await dz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function WR(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(IR(e))).version} (qemu-flavored CLI)\n`);let n=await BO(IR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(FO)}async function GR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await BR(t,e.bios??`${OR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(AR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await BR(t,e.vgabios??`${OR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(AR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function KR(e,t,n){let r=await GR(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 BR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=VR[e.boot]),e.state){let r=await BR(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 qR=6e4;function JR(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${qR/1e3}s`)),qR);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function YR(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 XR(e,t,n){let r=FR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(wa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=IR(t),o=n.loadEngine?await n.loadEngine(a):await LO({ipk:a}),s={wasm_fn:HO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await KR(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??HR();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`,()=>{ZR(u,d)})}Ca(u);try{if(await JR(l),i.netRelay===`fetch`){let e=YR(l,n);if(e)return await ZR(u,d),e}Sa(u),await l.run()}catch(e){return await ZR(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 ZR(e,t){Ta(e),xa(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 QR(){let e=ba();if(e.length===0)return $(`no VMs running
|
|
2988
2988
|
`);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(`
|
|
2989
|
-
`)}\n`)}function
|
|
2989
|
+
`)}\n`)}function $R(e,t){return`prefer: computer ${e} -c ${t}\n`}async function ez(e,t,n,r){let i=RR(t);if(zR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-C1H8fJIP.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),tz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function tz(e,t,n){let r=$R(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 nz(e,t){let{name:n,rest:r}=LR(e);if(r.length===0){let e=RR(n);return zR(e)?e:Q(`type: no text supplied`)}return ez(t,n,[`type`,`--`,...r],`type`)}async function rz(e,t){let{name:n,rest:r}=LR(e);if(r.length===0){let e=RR(n);return zR(e)?e:Q(`key: no chord supplied`)}return ez(t,n,[`key`,...r],`key`)}const iz=[`left`,`middle`,`right`];async function az(e,t){let{name:n,rest:r}=LR(e),i=RR(n);if(zR(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?ez(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>`):ez(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!iz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),ez(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function oz(e,t){let{name:n,rest:r}=LR(e);return ez(t,n,[`screenshot`,...r],`screenshot`)}async function sz(e,t){let{name:n}=LR(e);return ez(t,n,[`text`],`text`)}function cz(e){let{name:t}=LR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function lz(e){let{name:t,rest:n}=LR(e),r=RR(t);if(zR(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
|
|
2990
2990
|
`);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(`
|
|
2991
2991
|
`).slice(-Math.max(1,e)).join(`
|
|
2992
|
-
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function
|
|
2992
|
+
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function uz(e,t){let{name:n,rest:r}=LR(e),i=RR(n);if(zR(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 dz(e,t){let{name:n,rest:r}=LR(e),i=RR(n);if(zR(i))return i;let a=t.processManager??HR();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await ZR(i,a),$(`VM '${n}' stopped\n`))}function fz(e={}){return C(`wasm`,async(t,n)=>{let{runWasmCommand:r}=await import(`./run-DKWaudm_.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}const pz=[`--name`,`--filter`,`--scoop`],mz={state:`inactive`,session:null};function hz(){return{stdout:`usage: webhook <command> [options]
|
|
2993
2993
|
|
|
2994
2994
|
Commands:
|
|
2995
2995
|
create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
|
|
@@ -3009,21 +3009,21 @@ Examples:
|
|
|
3009
3009
|
webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
|
|
3010
3010
|
webhook list
|
|
3011
3011
|
webhook delete abc123
|
|
3012
|
-
`,stderr:``,exitCode:0}}function
|
|
3012
|
+
`,stderr:``,exitCode:0}}function gz(e){return e().session?.webhookUrl??null}function _z(e,t,n){return t?Ea(t,e):n()?Da(self.location.href,e):`(URL unavailable — connect a leader tray)`}function vz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function yz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
|
|
3013
3013
|
`,exitCode:1};let t=b();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
|
|
3014
3014
|
`,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.
|
|
3015
3015
|
`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
|
|
3016
|
-
`,exitCode:1}}}async function
|
|
3017
|
-
`,exitCode:1};let s=
|
|
3018
|
-
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=
|
|
3016
|
+
`,exitCode:1}}}async function bz(e,t,n){let r=w(e.slice(1),{value:pz});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=ca(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
|
|
3017
|
+
`,exitCode:1};let s=Cz(t);if(s)return s;let c=await Ty();if(!c)return vz(`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=wz(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 xz(e,t){let n=w(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await Ty();if(!r)return vz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
|
|
3018
|
+
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=Tz(t);return{stdout:Ez(i.map(e=>({id:e.id,name:e.name,url:_z(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function Sz(e,t){let n=w(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
|
|
3019
3019
|
`,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
|
|
3020
|
-
`,exitCode:1};let i=await
|
|
3021
|
-
`,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
|
|
3022
|
-
`,exitCode:1}}return null}function
|
|
3020
|
+
`,exitCode:1};let i=await Ty();if(!i)return vz(`delete`);let a=b();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
|
|
3021
|
+
`,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 Cz(e){if(e.hasLocalNodeServer())return null;if(!gz(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}")`)+`
|
|
3022
|
+
`,exitCode:1}}return null}function wz(e,t){try{return _z(e,gz(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function Tz(e){try{return{trayUrlBase:gz(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Ez(e,t,n,r){let i=`Active webhooks:
|
|
3023
3023
|
`;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
|
|
3024
3024
|
`;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
|
|
3025
3025
|
Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
|
|
3026
|
-
`),i}function
|
|
3026
|
+
`),i}function Dz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>mz)};return C(`webhook`,async(e,n)=>{if(e.length===0)return hz();let r=e[0];if(T(e,{valueFlags:r===`create`?pz:void 0}))return hz();try{switch(r){case`create`:return await bz(e,t,n.env);case`list`:return await xz(e,t);case`delete`:return await Sz(e,t);case`rotate`:return await yz(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 Oz(){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 kz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
|
|
3027
3027
|
|
|
3028
3028
|
Minimal websocat client. Sends stdin lines as WebSocket messages and prints
|
|
3029
3029
|
received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
|
|
@@ -3065,14 +3065,14 @@ EXAMPLES:
|
|
|
3065
3065
|
echo 'Page.navigate {"url":"https://example.com"}' \\
|
|
3066
3066
|
| websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
|
|
3067
3067
|
ws://127.0.0.1:9222/devtools/page/<id>
|
|
3068
|
-
`,stderr:``,exitCode:0}}const
|
|
3069
|
-
`)}function
|
|
3070
|
-
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function
|
|
3068
|
+
`,stderr:``,exitCode:0}}const Az=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 jz(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 Mz(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 Nz(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 Pz(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 Fz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function Iz(e,t,n,r,i){let a=jz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function Lz(e,t,n,r,i,a,o){let s=jz(t,n,r,e);if(!s)return{stop:!0};let c=Mz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function Rz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const zz=[(e,t,n,r)=>{if(!Rz(r,[`--close-status-code`]))return null;let i=jz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=Nz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>Rz(r,[`--close-reason`])?Iz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>Rz(r,[`-B`,`--buffer-size`])?Lz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>Rz(r,[`--max-messages`])?Lz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>Rz(r,[`--protocol`])?Iz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!Rz(r,[`--ping-interval`]))return null;let i=jz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>Rz(r,[`--conn-timeout`])?Lz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>Rz(r,[`-H`,`--header`])?Iz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Bz(e,t,n,r){for(let i of zz){let a=i(e,t,n,r);if(a)return a}return null}function Vz(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)
|
|
3069
|
+
`)}function Hz(e){let t=Oz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(Az.has(r)||Az.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(Pz(t,r)||Fz(t,r))continue;let i=Bz(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 Vz(t),t}function Uz(e,t){if(!e)return[];let n=t?`\0`:`
|
|
3070
|
+
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function Wz(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 Gz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function Kz(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 qz=1e4;function Jz(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function Yz(){let e=!1,t=Jz();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function Xz(e,t){return e.length?e.join(t)+t:``}function Zz(e){return e.length?e.join(`
|
|
3071
3071
|
`)+`
|
|
3072
|
-
`:``}function
|
|
3073
|
-
`,a
|
|
3074
|
-
`);if(!/^wss?:\/\//i.test(r.url))return
|
|
3075
|
-
`,exitCode:1}}function
|
|
3072
|
+
`:``}function Qz(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function $z(e,t){e.verbose<1||(e.customHeaders.length>0&&Qz(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&&Qz(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&Qz(e,t,`-k/--insecure has no effect in browsers`))}function eB(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 tB(e,t,n,r){if(n.outLines.length<qz){n.outLines.push(r);return}n.droppedForOverflow===0&&Qz(e,t,`output buffer reached ${qz} 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 nB(e,n,r){let{bytes:i,isBinary:a}=Kz(r);return i.length>e.bufferSize&&(Qz(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):Gz(i)}function rB(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function iB(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function aB(e,t){setTimeout(()=>{iB(t,e.closeStatus??1e3,e.closeReason)},0)}function oB(e,t,n){let r=Uz(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=Wz(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function sB(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&aB(t,e)}async function cB(e,t,n){let r=[];$z(e,r);let i=e.nullTerminated?`\0`:`
|
|
3073
|
+
`,a=eB(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=Jz(),u=Yz(),d=0,f=!1,p=setTimeout(()=>{f=!0,iB(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}iB(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=nB(e,r,t.data);tB(e,r,s,n)}s.received+=1,rB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(Qz(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&&Qz(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:Xz(s.outLines,i),stderr:Zz(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&aB(e,o):sB(o,e,oB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&Qz(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:Xz(s.outLines,i),stderr:Zz(r),exitCode:h}}function lB(e){return{stdout:``,stderr:e,exitCode:2}}function uB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function dB(e,t,n={}){let r=Hz(e);if(r.showHelp)return kz();if(r.error)return lB(r.error);if(!r.url)return lB(`websocat: missing ws:// or wss:// URL (use --help for usage)
|
|
3074
|
+
`);if(!/^wss?:\/\//i.test(r.url))return lB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=uB(n);return i?cB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
|
|
3075
|
+
`,exitCode:1}}function fB(){return C(`websocat`,async(e,t)=>dB(e,{stdin:P(t.stdin)}))}function pB(){return C(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const mB={commands:new Map,collisions:[]};async function hB(e,t){let n=_r(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?br(e.fs,n):mB}async function gB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?Di(e.fs):new Map}async function _B(e){return e.scriptCatalog?e.scriptCatalog.getWasmCommands():new Map}function vB(e,t){let n=e.script?`script`:`wasm`;return`${e.glue} (${n}, ${e.pkg}${t?`, ${t}`:``})`}function yB(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 ${vB(r)})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)a.push(` (shadowed ${t})`)}return a}function bB(e,{collision:t,wasm:n,wf:r}){let i=[e];for(let e of t?.shadowedPaths??[])i.push(` (shadowed ${e})`);return n&&i.push(` ${vB(n,`shadowed by .jsh`)}`),r&&i.push(` ${r.path} (workflow, shadowed by .jsh)`),i}function xB(e,t,n,r,i){let{jshPath:a,wasm:o,wf:s}=t;if(n.has(e))return{lines:yB(e,t),found:!0};if(a)return{lines:bB(a,t),found:!0};if(o){let e=[vB(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 SB(e={}){let t=e.scriptCatalog!==void 0||e.fs!==void 0?e:typeof e.walk==`function`&&typeof e.exists==`function`?{fs:e}:{};return C(`which`,async(e,n)=>{if(T(e))return{stdout:`which - locate a command
|
|
3076
3076
|
|
|
3077
3077
|
Usage: which <command> [command...]
|
|
3078
3078
|
|
|
@@ -3084,9 +3084,9 @@ Prints the path of the given command(s).
|
|
|
3084
3084
|
|
|
3085
3085
|
Exit code 0 if all commands found, 1 if any not found.
|
|
3086
3086
|
`,stderr:``,exitCode:0};let r=w(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
|
|
3087
|
-
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await
|
|
3087
|
+
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await hB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await gB(t),u=await _B(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=xB(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(`
|
|
3088
3088
|
`)+`
|
|
3089
|
-
`:``,stderr:``,exitCode:+!m}})}const
|
|
3089
|
+
`:``,stderr:``,exitCode:+!m}})}const CB=`__slicc_workflows`,wB=String.raw`
|
|
3090
3090
|
class WorkflowError extends Error {}
|
|
3091
3091
|
class WorkflowDeterminismError extends WorkflowError {}
|
|
3092
3092
|
class WorkflowAgentCapError extends WorkflowError {}
|
|
@@ -3205,40 +3205,40 @@ function log(message) {
|
|
|
3205
3205
|
}
|
|
3206
3206
|
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()); } };
|
|
3207
3207
|
function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
|
|
3208
|
-
`;function
|
|
3208
|
+
`;function TB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function EB(e){let t=AB(e);return t===null?{name:null,description:null}:{name:jB(t,`name`),description:jB(t,`description`)}}function DB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function OB(e){return`const __emit = console.log.bind(console);
|
|
3209
3209
|
const __stringify = JSON.stringify.bind(JSON);
|
|
3210
|
-
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${
|
|
3210
|
+
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 kB(e,t){let n=e.split(`
|
|
3211
3211
|
`);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(`
|
|
3212
|
-
`).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
|
|
3212
|
+
`).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 AB(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 jB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const MB=e(`workflow-command`),NB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
|
|
3213
3213
|
workflow run --script '<inline js>' [...]
|
|
3214
3214
|
workflow list
|
|
3215
3215
|
workflow status <runId>
|
|
3216
3216
|
workflow stop <runId>
|
|
3217
3217
|
workflow save <runId> <name> [--force]
|
|
3218
3218
|
Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
|
|
3219
|
-
pass --wait to block and print the full result.`,
|
|
3220
|
-
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return
|
|
3219
|
+
pass --wait to block and print the full result.`,PB=new Set([`list`,`status`,`stop`,`save`]);function FB(){return globalThis[CB]}function IB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function LB(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 RB(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=IB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=LB(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 zB(e={}){return C(`workflow`,async(t,n)=>{if(PB.has(t[0])&&T(t.slice(1)))return{stdout:NB+`
|
|
3220
|
+
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return GB(t,n);if(t[0]===`save`)return WB(t,n,e);let r=RB(t);if(r.help)return{stdout:NB+`
|
|
3221
3221
|
`,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
|
|
3222
|
-
`,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=
|
|
3223
|
-
`,exitCode:1};let s=
|
|
3224
|
-
`,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
|
|
3225
|
-
`,exitCode:1};if(!
|
|
3222
|
+
`,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=EB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
|
|
3223
|
+
`,exitCode:1};let s=TB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=TB(),u=OB({prelude:wB,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?BB(u,a,l,o,n):VB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function BB(e,t,n,r,i){let a;try{a=await hi(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return MB.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return KB(r,a,n)}async function VB(e){let t=FB();if(!t)return{stdout:``,stderr:`workflow: run manager not available
|
|
3224
|
+
`,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 HB=/^[a-z0-9][a-z0-9-]*$/,UB=`/workspace/.workflows`;async function WB(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]
|
|
3225
|
+
`,exitCode:1};if(!HB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=FB()?.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=`${UB}/${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(UB,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){MB.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 GB(e,t){let n=FB();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
|
|
3226
3226
|
`,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(`
|
|
3227
3227
|
`):`(no runs)`)+`
|
|
3228
3228
|
`,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(`
|
|
3229
3229
|
`)+`
|
|
3230
|
-
`,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
|
|
3230
|
+
`,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 KB(e,t,n){let{result:r,log:i,hadResult:a}=kB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?qB(i)+`
|
|
3231
3231
|
`:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
|
|
3232
3232
|
`),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
|
|
3233
|
-
`,stderr:t.stderr,exitCode:0}}function
|
|
3233
|
+
`,stderr:t.stderr,exitCode:0}}function qB(e){return e.split(`
|
|
3234
3234
|
`).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
|
|
3235
|
-
`)}function
|
|
3235
|
+
`)}function JB(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function YB(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 XB(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function ZB(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function QB(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function $B(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?XB(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(`
|
|
3236
3236
|
`)+`
|
|
3237
|
-
`:``}function
|
|
3238
|
-
`}return r}function
|
|
3237
|
+
`:``}function eV(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+=XB(e[i+r],n);r+=a+`
|
|
3238
|
+
`}return r}function tV(e,t,n,r){let i=Array.from(e,e=>`0x${XB(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
|
|
3239
3239
|
`);return r===null?i.length?o+`
|
|
3240
|
-
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function
|
|
3241
|
-
`)){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
|
|
3240
|
+
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function nV(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 rV(e){let t=[],n=0;for(let r of e.split(`
|
|
3241
|
+
`)){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 iV={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},aV=[{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 oV(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=iV[r];if(i){t[i]=!0;continue}let a=aV.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=YB(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 sV(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function cV(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=cr(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function lV(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?eV(t,a,e.upper):e.include?tV(t,a,e.upper,i?null:QB(r??``)):$B(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function uV(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 dV(){return C(`xxd`,async(e,t)=>{if(sV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
|
|
3242
3242
|
-c cols number of octets per line (default 16; 30 for -p; 12 for -i)
|
|
3243
3243
|
-g bytes number of octets per group (default 2; 0 disables grouping)
|
|
3244
3244
|
-l len stop after len octets
|
|
@@ -3248,9 +3248,9 @@ pass --wait to block and print the full result.`,NB=new Set([`list`,`status`,`st
|
|
|
3248
3248
|
-i output in C include style
|
|
3249
3249
|
-r reverse: convert a hex dump back to binary (-r -p for plain)
|
|
3250
3250
|
-h show this help
|
|
3251
|
-
`,stderr:``,exitCode:0};let n;try{n=
|
|
3252
|
-
`,stderr:``,exitCode:0}}function
|
|
3253
|
-
`,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(/^\.\//,``))||
|
|
3254
|
-
`,exitCode:1};let c=
|
|
3251
|
+
`,stderr:``,exitCode:0};let n;try{n=oV(e)}catch(e){return JB(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await cV(t,r,a)}catch{return JB(`${r}: No such file or directory`)}if(n.revert){let e=ZB(o),r=n.plain?nV(e):rV(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:ZB(r),stderr:``,exitCode:0}}let{data:s,base:c}=uV(n,o),l=lV(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 fV(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=Or(t,o),s=n?`${n}/${o}`:o;a+=await fV(e,i,s,r)}return a}function pV(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
|
|
3252
|
+
`,stderr:``,exitCode:0}}function mV(){return C(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return pV();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
|
|
3253
|
+
`,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(/^\.\//,``))||kr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await fV(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
|
|
3254
|
+
`,exitCode:1};let c=Lt(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function hV(e){let t;return C(`mcp`,async(n,r)=>{if(!t){let{createMcpCommand:n}=await import(`./mcp-command-DFAER6FF.js`);t=n({fs:e.fs,scriptCatalog:e.scriptCatalog,connectionManager:e.mcpConnectionManager})}return t.execute(n,r)})}function gV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function _V(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),gk(`ipx`,{fs:t,fetch:n}),gk(`npx`,{fs:t,fetch:n}),Cb(`di`,{fs:t,fetch:n}),Cb(`uv`,{fs:t,fetch:n}),VL({fs:t,fetch:n})]}function vV(e){let t={buildProcessConfig:e.buildProcessConfig};return[`python3`,`python`,`pyodide`].map(e=>XM(e,t))}function yV(e){let t=e.scriptCatalog;return{buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:t&&(()=>t.getWasmCommands()),gitIdentity:e.gitIdentity}}function bV(e={}){let t=[ME({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),oe(),OF(),qP(),BP(e.browserAPI,e.fs),Pj(e.browserAPI),Ry(e.browserAPI),LD(e),mV(),_L(),lI(e.fs?{fs:e.fs}:{}),FF(),HF(),zF(),Nv(),fz(yV(e)),iC(yV(e)),dV(),SF(`sqlite3`),SF(`sqllite`),EI(),KI(),zx(),hv(),ZA({buildProcessConfig:e.buildProcessConfig}),ZA({buildProcessConfig:e.buildProcessConfig},`jsh`),...vV(e),..._V(e),...e.fs?[rC({fs:e.fs})]:[],...e.fs?[lA({fs:e.fs})]:[],...e.fetch?[UE({fetch:e.fetch,streamFetch:e.streamFetch})]:[],MS(),NS(),GS(),Dz(e.webhook),fB(),Ly(e.crontask),hV(e),eM({fs:e.fs,fetch:e.fetch}),nC(),pF(),Fj(),Ij(`pdftk`),Ij(`pdf`),gv(`biscotto`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),gv(`biscotti`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Kj(`pdftoppm`),Kj(`pdftocairo`),qj(`pdftotext`),xy(`convert`),xy(`magick`),SB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),XI(),fL(),ND(),PD(),pL(),uA(),eN(),nA(),ux(),fj(),dj(),$k(),dP(gV(e)),Rp(e.gitCredential),pN({fs:e.fs}),zN(),Av(),jv(),Mv(`xclip`),Mv(`xsel`),RN(),bC(),s_(),c_(),LA(e.fs),gt(),nj(),l_({getParentJid:e.getParentJid}),vx(),SM({processManager:e.processManager}),nR({processManager:e.processManager}),yk({processManager:e.processManager}),_k({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...d_(),cA(),Gk(),DR(),hD(),bS(),UR({processManager:e.processManager}),Iv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),jS(),Cv({registry:e.cherryRuntimeRegistry}),qy(),$y({fs:e.fs}),eb({fs:e.fs}),AF(e.sudoCommand),zB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),pB(),KP()];return e.fs&&(Yj(),t.push(...$n.map(t=>kE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let xV=null;function SV(e){xV=e}function CV(e){xV?.(e)}var wV=Jt();const TV={user:`user`,home:om},EV=new Set([`root`,`nobody`,`nogroup`]),DV=/^[A-Za-z_][A-Za-z0-9_.-]*$/;function OV(e){return{user:DV.test(e.user)&&!EV.has(e.user)?e.user:TV.user,home:e.home.startsWith(`/`)&&!/[:\n]/.test(e.home)?e.home:TV.home}}function kV(e,t){let{user:n,home:r}=OV(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(`
|
|
3255
3255
|
`);if(e===`/etc/group`)return[`root:x:0:`,`${n}:x:1000:`,`nogroup:x:65534:`,``].join(`
|
|
3256
|
-
`)}function kV(e,t=wV){let n=OV(e,t);return n===void 0?void 0:new TextEncoder().encode(n)}function AV(e){return e===`/etc`?[`group`,`passwd`]:[]}function jV(e){return e?.code===`ENOENT`}const MV=Reflect.get(lt,`DefenseInDepthBox`);function NV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function PV(e,t){if(typeof e!=`string`)return e;let n=NV(t);if(n===`binary`||n===`latin1`){let t=De(e);if(t)return t}return CV.Buffer.from(e,n)}function FV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}function IV(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 LV(e,t){let n=AV(e).filter(e=>!t.includes(e));return n.length?[...t,...n].sort():t}function RV(e,t){let n=AV(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 zV=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=Je(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 kV(e,this.identityFn?.()??wV)}isVirtualBinCommand(e){return e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e)}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=FV(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:IV(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=MV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=x(e),r=await this.readRaw(n),i=NV(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(x(e)))}async readRaw(e){let t=FV(e);if(t.startsWith(`/usr/bin/`)&&this.isVirtualBinCommand(t.slice(9)))return IV(t.slice(9));let n;try{n=await this.vfs.readFile(e,{encoding:`binary`})}catch(t){let n=this.identityFile(e);if(n&&jV(t))return n;throw t}return n instanceof Uint8Array?n:new TextEncoder().encode(n)}identityStat(e,t){let n=this.identityFile(e);if(!(!n||!jV(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(x(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(x(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=x(e);await this.vfs.writeFile(r,PV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(x(e),PV(t,n)))}async exists(e){return this.trusted(async()=>{let t=x(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=x(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=x(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(x(e),t)})}async readdir(e){return this.trusted(async()=>{let t=x(e);if(t===`/usr`)return[`bin`];if(FV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return LV(t,n.map(e=>e.name));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),LV(t,r.map(e=>e.name))})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=x(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(FV(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 RV(t,this.mapFastEntriesToDirents(n));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),RV(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(x(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=x(e),i=x(t),a;try{a=await this.vfs.stat(r)}catch(e){let t=this.identityFile(r);if(!t||!jV(e))throw e;await this.vfs.writeFile(i,t);return}if(a.type===`directory`){if(!n?.recursive)throw new Ye(`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=S(e,r.name),i=S(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 AV(e)){let i=r.has(n)?void 0:this.identityFile(S(e,n));i&&await this.vfs.writeFile(S(t,n),i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(x(e),x(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?x(t):x(S(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(x(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:x(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:x(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,x(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(x(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(x(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(x(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function BV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?BV(e.getUnderlyingFS?.()):null}const VV=e(`almost-bash-shell`);function HV(e){if(!(`__SLICC_RUN_PID`in e)&&!(`__SLICC_OUTPUT_TEE__`in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[tm]:t,[nm]:n,[Wp]:r,[Ut]:i,[Bt]:a,...o}=e;return o}function UV(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 WV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;commandGate;jshRegistry;gnuBashFallback;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(rm(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:am,PATH:_r,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return yV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>this.jshRegistry.scriptRegisteredNames(),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.commandGate.queueGrant(e)},suppressNextGate:e=>this.commandGate.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:zp},gitIdentity:()=>this.gitCommands.identity(),mcpConnectionManager:e.mcpConnectionManager})}constructor(t){this.options=t,this.vfsAdapter=new zV(t.fs),this.progress=new dm({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t),this.commandGate=new qp({getSudo:()=>this.options.sudo,fs:t.fs});let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new pp({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:Rp}),this.mountCommands=new Bs({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Xm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=BV(i)??BV(a);this.scriptCatalog=t.scriptCatalog??new Oi({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||hr(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:gm(this.progress)}),l=_({progress:gm(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),Wh(t.fs),Vg(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...dt(),...ut()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new ft({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:Lm(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:Yp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(ih),this.allowedCommands!==null){let e=this.bash;for(let t of ut())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??[...dt(),...ut()];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.bindCollaborators(t),this.startInitialJshSync()}bindCollaborators(e){let t=this;this.jshRegistry=new um({get bash(){return t.bash},scriptCatalog:this.scriptCatalog,discoveryFs:e.jshDiscoveryFs??e.fs,vfsAdapter:this.vfsAdapter,get cwd(){return t.cwd},get lastEnv(){return t.lastEnv},get umask(){return t.umask},builtinCommandNames:this.builtinCommandNames,isCommandAllowed:e=>this.isCommandAllowed(e),wrapCommandForDispatch:e=>this.wrapCommandForDispatch(e),path:()=>this.lastEnv.PATH,buildJshProcessConfig:e=>this.buildJshProcessConfig(e),gateNativeCommand:this.gateNativeCommand,gitIdentity:()=>this.gitCommands.identity()}),this.gnuBashFallback=new im({gnuBash:e.gnuBash===!0,get lastEnv(){return t.lastEnv},get cwd(){return t.cwd},get umask(){return t.umask},vfsAdapter:this.vfsAdapter,get bash(){return t.bash},scriptCatalog:this.scriptCatalog,outputTees:this.outputTees,gateNativeCommand:this.gateNativeCommand,buildJshProcessConfig:e=>this.buildJshProcessConfig(e),gitIdentity:()=>this.gitCommands.identity(),flushPendingCommandGrants:()=>this.commandGate.flushPendingCommandGrants(),applyPendingEnvWrites:()=>this.applyPendingEnvWrites(),syncJshCommands:()=>this.syncJshCommands(),adoptCwd:e=>{this.cwd=e},adoptEnv:e=>{this.lastEnv=e}})}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 this.jshRegistry.getJshCommandNames()}async syncJshCommands(){return this.jshRegistry.syncJshCommands()}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 di(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`)}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 om(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=sm(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){VV.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.gnuBashFallback.usesGnuBash())return this.gnuBashFallback.runOnGnuBash(e,t,n,r,i,a);let o=Kp(e),s={env:{...this.lastEnv,...n===void 0?{}:{[tm]:String(n)},...i===void 0?{}:{[nm]:i},...o?{[Wp]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=UV([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Vt(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.commandGate.flushPendingCommandGrants(),d=zt(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=HV(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.jshRegistry.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-CSwess-H.js`).then(e=>e.n);return Lt(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()}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.commandGate.isTransparentGatingEnabled()||Dp.has(e))return null;let r=await this.commandGate.gateCommandDispatch(e,t,n[Wp]);return r?{stderr:r.stderr,exitCode:r.exitCode}:null};wrapCommandForDispatch(e){let t=this.commandGate.wrapCommandForSudo(e),n=e.name===`timeout`?Vm(t,this.progress):Um(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(nm),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await Gm(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(nm);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=Mm(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Pm(t,this.progress,Nm(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(Dp.get(e)??e)}createGitCustomCommand(){let e=this.gitCommands;return C(`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 C(`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 C(`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 getWorkflowCommandNames(){return this.jshRegistry.getWorkflowCommandNames()}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{Ra as _,OB as a,Oa as b,js as c,bs as d,vs as f,Pa as g,Uo as h,wB as i,ws as l,Qo as m,zV as n,SB as o,$o as p,xV as r,am as s,WV as t,xs as u,La as v,Lo as y};
|
|
3256
|
+
`)}function AV(e,t=TV){let n=kV(e,t);return n===void 0?void 0:new TextEncoder().encode(n)}function jV(e){return e===`/etc`?[`group`,`passwd`]:[]}function MV(e){return e?.code===`ENOENT`}const NV=Reflect.get(ut,`DefenseInDepthBox`);function PV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function FV(e,t){if(typeof e!=`string`)return e;let n=PV(t);if(n===`binary`||n===`latin1`){let t=Oe(e);if(t)return t}return wV.Buffer.from(e,n)}function IV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}function LV(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 RV(e,t){let n=jV(e).filter(e=>!t.includes(e));return n.length?[...t,...n].sort():t}function zV(e,t){let n=jV(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 BV=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=Ye(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 AV(e,this.identityFn?.()??TV)}isVirtualBinCommand(e){return e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e)}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=IV(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:LV(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=NV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=x(e),r=await this.readRaw(n),i=PV(t),a=wV.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(x(e)))}async readRaw(e){let t=IV(e);if(t.startsWith(`/usr/bin/`)&&this.isVirtualBinCommand(t.slice(9)))return LV(t.slice(9));let n;try{n=await this.vfs.readFile(e,{encoding:`binary`})}catch(t){let n=this.identityFile(e);if(n&&MV(t))return n;throw t}return n instanceof Uint8Array?n:new TextEncoder().encode(n)}identityStat(e,t){let n=this.identityFile(e);if(!(!n||!MV(t)))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:420,size:n.length,mtime:new Date(0)}}async readFileBytes(e){let t=await this.readFileBuffer(e);return wV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(x(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(x(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=x(e);await this.vfs.writeFile(r,FV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(x(e),FV(t,n)))}async exists(e){return this.trusted(async()=>{let t=x(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=x(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=x(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(x(e),t)})}async readdir(e){return this.trusted(async()=>{let t=x(e);if(t===`/usr`)return[`bin`];if(IV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return RV(t,n.map(e=>e.name));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),RV(t,r.map(e=>e.name))})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=x(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(IV(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 zV(t,this.mapFastEntriesToDirents(n));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),zV(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(x(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=x(e),i=x(t),a;try{a=await this.vfs.stat(r)}catch(e){let t=this.identityFile(r);if(!t||!MV(e))throw e;await this.vfs.writeFile(i,t);return}if(a.type===`directory`){if(!n?.recursive)throw new Xe(`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=S(e,r.name),i=S(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 jV(e)){let i=r.has(n)?void 0:this.identityFile(S(e,n));i&&await this.vfs.writeFile(S(t,n),i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(x(e),x(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?x(t):x(S(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(x(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:x(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:x(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,x(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(x(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(x(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(x(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function VV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?VV(e.getUnderlyingFS?.()):null}const HV=e(`almost-bash-shell`);function UV(e){if(!(`__SLICC_RUN_PID`in e)&&!(`__SLICC_OUTPUT_TEE__`in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[nm]:t,[rm]:n,[Gp]:r,[Wt]:i,[Vt]:a,...o}=e;return o}function WV(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 GV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;commandGate;jshRegistry;gnuBashFallback;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(im(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:om,PATH:vr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return bV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>this.jshRegistry.scriptRegisteredNames(),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.commandGate.queueGrant(e)},suppressNextGate:e=>this.commandGate.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:Bp},gitIdentity:()=>this.gitCommands.identity(),mcpConnectionManager:e.mcpConnectionManager})}constructor(t){this.options=t,this.vfsAdapter=new BV(t.fs),this.progress=new fm({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t),this.commandGate=new Jp({getSudo:()=>this.options.sudo,fs:t.fs});let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new mp({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:zp}),this.mountCommands=new Vs({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Zm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=VV(i)??VV(a);this.scriptCatalog=t.scriptCatalog??new ki({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||gr(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:_m(this.progress)}),l=_({progress:_m(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),Gh(t.fs),Hg(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...ft(),...dt()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new pt({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:Rm(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:Xp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(ah),this.allowedCommands!==null){let e=this.bash;for(let t of dt())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??[...ft(),...dt()];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.bindCollaborators(t),this.startInitialJshSync()}bindCollaborators(e){let t=this;this.jshRegistry=new dm({get bash(){return t.bash},scriptCatalog:this.scriptCatalog,discoveryFs:e.jshDiscoveryFs??e.fs,vfsAdapter:this.vfsAdapter,get cwd(){return t.cwd},get lastEnv(){return t.lastEnv},get umask(){return t.umask},builtinCommandNames:this.builtinCommandNames,isCommandAllowed:e=>this.isCommandAllowed(e),wrapCommandForDispatch:e=>this.wrapCommandForDispatch(e),path:()=>this.lastEnv.PATH,buildJshProcessConfig:e=>this.buildJshProcessConfig(e),gateNativeCommand:this.gateNativeCommand,gitIdentity:()=>this.gitCommands.identity()}),this.gnuBashFallback=new am({gnuBash:e.gnuBash===!0,get lastEnv(){return t.lastEnv},get cwd(){return t.cwd},get umask(){return t.umask},vfsAdapter:this.vfsAdapter,get bash(){return t.bash},scriptCatalog:this.scriptCatalog,outputTees:this.outputTees,gateNativeCommand:this.gateNativeCommand,buildJshProcessConfig:e=>this.buildJshProcessConfig(e),gitIdentity:()=>this.gitCommands.identity(),flushPendingCommandGrants:()=>this.commandGate.flushPendingCommandGrants(),applyPendingEnvWrites:()=>this.applyPendingEnvWrites(),syncJshCommands:()=>this.syncJshCommands(),adoptCwd:e=>{this.cwd=e},adoptEnv:e=>{this.lastEnv=e}})}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 this.jshRegistry.getJshCommandNames()}async syncJshCommands(){return this.jshRegistry.syncJshCommands()}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 fi(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`)}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 sm(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=cm(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){HV.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(CV(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.gnuBashFallback.usesGnuBash())return this.gnuBashFallback.runOnGnuBash(e,t,n,r,i,a);let o=qp(e),s={env:{...this.lastEnv,...n===void 0?{}:{[nm]:String(n)},...i===void 0?{}:{[rm]:i},...o?{[Gp]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=WV([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Ht(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.commandGate.flushPendingCommandGrants(),d=Bt(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=UV(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.jshRegistry.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-CSwess-H.js`).then(e=>e.n);return Rt(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()}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.commandGate.isTransparentGatingEnabled()||Op.has(e))return null;let r=await this.commandGate.gateCommandDispatch(e,t,n[Gp]);return r?{stderr:r.stderr,exitCode:r.exitCode}:null};wrapCommandForDispatch(e){let t=this.commandGate.wrapCommandForSudo(e),n=e.name===`timeout`?Hm(t,this.progress):Wm(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(rm),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await Km(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(rm);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=Nm(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Fm(t,this.progress,Pm(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(Op.get(e)??e)}createGitCustomCommand(){let e=this.gitCommands;return C(`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 C(`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 C(`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 getWorkflowCommandNames(){return this.jshRegistry.getWorkflowCommandNames()}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{za as _,kB as a,ka as b,Ms as c,xs as d,ys as f,Fa as g,Wo as h,TB as i,Ts as l,$o as m,BV as n,CB as o,es as p,SV as r,om as s,GV as t,Ss as u,Ra as v,Ro as y};
|