sliccy 6.178.2 → 6.179.1
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/node-server/_shared/tray-sync-protocol.d.ts +18 -3
- package/dist/node-server/_shared/tray-sync-protocol.d.ts.map +1 -1
- package/dist/node-server/_shared/tray-sync-protocol.js.map +1 -1
- package/dist/ui/.vite/manifest.json +191 -182
- package/dist/ui/assets/SKILL-B2bgzyKV.js +1 -0
- package/dist/ui/assets/__vite-browser-external-CVereMU8.js +1 -0
- package/dist/ui/assets/account-store-_Ksq0LeF.js +1 -0
- package/dist/ui/assets/account-store-dO23dNCl.js +2 -0
- package/dist/ui/assets/{adobe-BHZ-TF7E.js → adobe-BIvm4-sf.js} +1 -1
- package/dist/ui/assets/{adobe-Cqd5wrqM.js → adobe-DGXLUuxi.js} +1 -1
- package/dist/ui/assets/{agent-panels-DXCdmUkc.js → agent-panels-1Al9YhTO.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-B29ulBpN.js → almost-bash-shell-headless-D8xvUvg7.js} +231 -231
- package/dist/ui/assets/{apply-layout-BiYaZGTe.js → apply-layout-BInHwmtO.js} +1 -1
- package/dist/ui/assets/{apps-BYK0eeEc.js → apps-Baz0Lnmg.js} +1 -1
- package/dist/ui/assets/{azure-openai-BgA0OxNa.js → azure-openai-BOY1NiG8.js} +1 -1
- package/dist/ui/assets/{azure-openai-DwxTKwka.js → azure-openai-ttpNpc1f.js} +1 -1
- package/dist/ui/assets/{backend-hostfs-CeXHlroV.js → backend-hostfs-BOg3QQ4q.js} +1 -1
- package/dist/ui/assets/bedrock-camp-BQ02i7Bk.js +1 -0
- package/dist/ui/assets/bedrock-camp-CMYc0nQP.js +1 -0
- package/dist/ui/assets/bedrock-camp-extra-models-B0WH9IRx.js +1 -0
- package/dist/ui/assets/bedrock-camp-extra-models-WTCIjj5a.js +1 -0
- package/dist/ui/assets/{bunny-probe-Dk-taSwq.js → bunny-probe-DwyMiB71.js} +1 -1
- package/dist/ui/assets/{bunny-run-CmnXF3U5.js → bunny-run-COGwXgvg.js} +1 -1
- package/dist/ui/assets/{cdp-wm8vfA8s.js → cdp-BKix-G_U.js} +4 -4
- package/dist/ui/assets/{cerebras-BPlfZv3L.js → cerebras-DjoHQ6Xp.js} +1 -1
- package/dist/ui/assets/{cerebras-wuHzITPY.js → cerebras-UE5-6iqM.js} +1 -1
- package/dist/ui/assets/{composer-speech-DI9SI2lY.js → composer-speech-BVzciYHA.js} +1 -1
- package/dist/ui/assets/{connect-surface-zTa8OfFh.js → connect-surface-O3amvWBB.js} +1 -1
- package/dist/ui/assets/{directed-approval-DmDgVpiX.js → directed-approval-_Y76j9C0.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-42E6KJDv.js → ensure-speech-assets-BrVI5VWr.js} +1 -1
- package/dist/ui/assets/{fast-path-DiV4YcEb.js → fast-path-CG_eXz0M.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-C97kBlYw.js → frozen-archive-writer-BqU275cT.js} +1 -1
- package/dist/ui/assets/{fs-BKmepe3Q.js → fs-BCvRe0en.js} +2 -2
- package/dist/ui/assets/{fs-DmgjBIs9.js → fs-CNQgTr1W.js} +1 -1
- package/dist/ui/assets/{gelatiere-store-D1l9WE1j.js → gelatiere-store-Bv8M3zKW.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-jlm5b-JJ.js → gelatiere-unit-ucpnioSj.js} +1 -1
- package/dist/ui/assets/{github-C8jjATg2.js → github-B6d20Xtd.js} +2 -2
- package/dist/ui/assets/{github-auth-CkC7qTEg.js → github-auth-DHDr0MZD.js} +1 -1
- package/dist/ui/assets/{github-copilot-D7QRCTDD.js → github-copilot-DF54WJFJ.js} +1 -1
- package/dist/ui/assets/{github-copilot-DuwasHAz.js → github-copilot-DxvP_gQ2.js} +1 -1
- package/dist/ui/assets/{github-BB3M-XW1.js → github-gkCO9POj.js} +1 -1
- package/dist/ui/assets/{github-install-DT3Wys59.js → github-install-CLwrUeHG.js} +1 -1
- package/dist/ui/assets/{github-zip-CX3GXBmW.js → github-zip-ggx_X_vr.js} +1 -1
- package/dist/ui/assets/{hear-pJ--prvx.js → hear-BO8nJLV8.js} +1 -1
- package/dist/ui/assets/{help-gOzjZhgS.js → help-CPzYQxS7.js} +1 -1
- package/dist/ui/assets/{installer-DeqzzcvC.js → installer-DdfBd9PU.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-QT2JnICz.js → js-realm-worker-BityZEz7.js} +9 -9
- package/dist/ui/assets/{jsh-executor-BBZWMBxV.js → jsh-executor-CKyw9lLY.js} +3 -3
- package/dist/ui/assets/{kernel-worker-B23YxkDH.js → kernel-worker-qQGHaMnf.js} +11 -11
- package/dist/ui/assets/{lick-ws-bridge-CpcUjLS6.js → lick-ws-bridge-BkNkR9Ca.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-DsoQWD5s.js → lick-ws-bridge-DRImkUTH.js} +1 -1
- package/dist/ui/assets/{live-session-curation-BWfx-Nu1.js → live-session-curation-P6SXyKp0.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-BSNfthJ2.js → live-session-snapshot-CyWcObFf.js} +1 -1
- package/dist/ui/assets/{local-llm-vzP-uq7M.js → local-llm-BUnPutW1.js} +1 -1
- package/dist/ui/assets/{local-llm-DGFPI_4T.js → local-llm-CmoETAXe.js} +1 -1
- package/dist/ui/assets/main-D9U5TUrs.js +22 -0
- package/dist/ui/assets/{main-cherry-Bbjw_90k.js → main-cherry-CCD39MP_.js} +1 -1
- package/dist/ui/assets/{memory-curation-seam-BufuSUCj.js → memory-curation-seam-DsTTNESg.js} +1 -1
- package/dist/ui/assets/{memory-health-DdSqq7yP.js → memory-health-unNAzsFb.js} +1 -1
- package/dist/ui/assets/memory-v2-flag-B2nSV4Lc.js +1 -0
- package/dist/ui/assets/{memory-write-execute-BygymnF0.js → memory-write-execute-DaxAnwsF.js} +1 -1
- package/dist/ui/assets/{mount-_sTSuvKx.js → mount-BMvAKuQj.js} +1 -1
- package/dist/ui/assets/{mount-DlogHA7u.js → mount-LPTe0PFr.js} +3 -3
- package/dist/ui/assets/new-session-CoExcd2o.js +2 -0
- package/dist/ui/assets/oauth-bootstrap-C1B2GC97.js +2 -0
- package/dist/ui/assets/{onboarding-orchestrator-CbnB67nZ.js → onboarding-orchestrator-fgBOHrFc.js} +1 -1
- package/dist/ui/assets/{openai-codex-SI0nWQNS.js → openai-codex-BG00vpqV.js} +1 -1
- package/dist/ui/assets/{openai-codex-BtwVt-12.js → openai-codex-D5bGv3v_.js} +1 -1
- package/dist/ui/assets/{openrouter-BFlMjaCH.js → openrouter-BXmUmBsU.js} +1 -1
- package/dist/ui/assets/{openrouter-BruOnSfT.js → openrouter-OxxNLK64.js} +1 -1
- package/dist/ui/assets/{openrouter-free-DPQDCfqQ.js → openrouter-free-gR5o0rCK.js} +1 -1
- package/dist/ui/assets/{openrouter-free-B2pceWVg.js → openrouter-free-uGVhtFc3.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BLskezr8.js → openrouter-oauth-BvV3Fia1.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-C4kwBIwS.js → openrouter-oauth-CT_Zj9YD.js} +1 -1
- package/dist/ui/assets/{opfs-mount-8s9WP18b.js → opfs-mount-UFdaZCov.js} +1 -1
- package/dist/ui/assets/panel-rpc-handlers-82bfFThY.js +2 -0
- package/dist/ui/assets/{panelize-shell-Dg_58ImI.js → panelize-shell-B5r_tYN0.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-C9GYKunH.js → pi-edit-execution-DF1HhU43.js} +1 -1
- package/dist/ui/assets/{provider-DEcfbBkM.js → provider-DIX-yDf1.js} +1 -1
- package/dist/ui/assets/{provider-B_fhkXn7.js → provider-ZlWYE7tn.js} +2 -2
- package/dist/ui/assets/{provider-settings-BLtjMrT0.js → provider-settings-By6-4Hob.js} +1 -1
- package/dist/ui/assets/provider-store-access-DGTGBgAd.js +1 -0
- package/dist/ui/assets/provider-store-access-DblNX0Qr.js +1 -0
- package/dist/ui/assets/providers-BFl9psp8.js +2 -0
- package/dist/ui/assets/providers-CLabs7-N.js +1 -0
- package/dist/ui/assets/py-live-vfs-DaPSes0l.js +168 -0
- package/dist/ui/assets/py-live-vfs-Dx9cFlfE.js +168 -0
- package/dist/ui/assets/{py-realm-worker-A1ICPvEl.js → py-realm-worker-CYwLJW9I.js} +3 -3
- package/dist/ui/assets/{pyodide-DGH4V3SQ.js → pyodide-DKNrUBio.js} +2 -2
- package/dist/ui/assets/{quick-llm-B8uh7EVu.js → quick-llm-D9d7sUsw.js} +1 -1
- package/dist/ui/assets/realm-inprocess-BRBbxPBB.js +30 -0
- package/dist/ui/assets/{recovery-screen-M8szzZB2.js → recovery-screen-CkIyMRc0.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-6ygd42Fb.js → remote-terminal-view-CpbLu8Sz.js} +1 -1
- package/dist/ui/assets/require-guards-Du29-pl4.js +252 -0
- package/dist/ui/assets/{restore-Qq5h6a38.js → restore-BZ9V2jCD.js} +1 -1
- package/dist/ui/assets/run-B0N83lIB.js +86 -0
- package/dist/ui/assets/{run--H9dud5r.js → run-BEOVa96v.js} +2 -2
- package/dist/ui/assets/{run-DK8nktud.js → run-BoSrXXY1.js} +2 -2
- package/dist/ui/assets/{run-CPDsfLJJ.js → run-Bq-Xk94T.js} +2 -2
- package/dist/ui/assets/{run-dNFrBZDI.js → run-CTYkZrli.js} +1 -1
- package/dist/ui/assets/{run-_QNErIec.js → run-DSzWrEfE.js} +2 -2
- package/dist/ui/assets/{run-C3rYy-Lu.js → run-Dgam-lSu.js} +1 -1
- package/dist/ui/assets/{run-C0wVagJ5.js → run-DkxI8mp3.js} +2 -2
- package/dist/ui/assets/{run-Bk0pGJJa.js → run-DnjuDRM3.js} +1 -1
- package/dist/ui/assets/{session-command-memory-CAl1-crq.js → session-command-memory-DyJ_PMwk.js} +2 -2
- package/dist/ui/assets/{session-jsonl-lB9-7rZS.js → session-jsonl-CGBR73CL.js} +1 -1
- package/dist/ui/assets/{session-jsonl-B-4fihPX.js → session-jsonl-px88OtuO.js} +1 -1
- package/dist/ui/assets/{session-search-index-Bn4FhmPW.js → session-search-index-yyM4rIX7.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-opNg3JWs.js → setup-feature-flags-remote-B6HW35ii.js} +1 -1
- package/dist/ui/assets/{signed-fetch-YC2zrriw.js → signed-fetch-D1gxhAgf.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-Bak0vwwf.js → silent-renew-backoff-CgDiUeEr.js} +1 -1
- package/dist/ui/assets/slicc-version-2HAR5Ivl.js +1 -0
- package/dist/ui/assets/{snapshot-features-BqGUjBWl.js → snapshot-features-bBwoXkOR.js} +1 -1
- package/dist/ui/assets/{snapshot-6br_5p-f.js → snapshot-oVV9Iqa-.js} +1 -1
- package/dist/ui/assets/{soundscape-DRViCPly.js → soundscape-C1bpUu46.js} +1 -1
- package/dist/ui/assets/{speak-DRv_vLqY.js → speak-C7tACkSs.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-DeJrE3Hq.js → sprinkle-manager-q03I3INE.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-DYUy10CO.js → sprinkle-renderer-CeFlc9rW.js} +25 -8
- package/dist/ui/assets/{src-CmTUvI8R.js → src-BfoZU01X.js} +74 -74
- package/dist/ui/assets/{ssh-D1zj1EXl.js → ssh-DplyBT74.js} +2 -2
- package/dist/ui/assets/{state-BpyjzTIG.js → state-CDWzXqaM.js} +1 -1
- package/dist/ui/assets/{store-DwUewAuZ.js → store-BSzBYE_Q.js} +1 -1
- package/dist/ui/assets/{store-DQkIRnav.js → store-DQazKd79.js} +1 -1
- package/dist/ui/assets/{sudo-DIegVBwT.js → sudo-Bel-CIaV.js} +1 -1
- package/dist/ui/assets/{supervisor-gHbk5m7z.js → supervisor-Dwyz3Q6J.js} +1 -1
- package/dist/ui/assets/{sync-dialog-CH4PBcVu.js → sync-dialog-BrADzVJ_.js} +1 -1
- package/dist/ui/assets/sync-exec-xhr-bridge-BjD_IfJF.js +1 -0
- package/dist/ui/assets/sync-sab-wire-CkrsRVrw.js +1 -0
- package/dist/ui/assets/tab-8LaHojfd.js +1 -0
- package/dist/ui/assets/{transformers-env-9M9En1_O.js → transformers-env-BdAlKg6J.js} +1 -1
- package/dist/ui/assets/{tray-leader-Bd293BI8.js → tray-leader-Ci2RqIwT.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-wLd1uBMu.js → tray-leave-runtime-BTZJXHF3.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-C35X7Jht.js → tray-sidecar-0neE65_N.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-Tp8fDJAG.js → upgrade-detection-BhD72UZe.js} +1 -1
- package/dist/ui/assets/{upskill-lick-skip-Cr0VVPGj.js → upskill-lick-skip-CdUqlWMq.js} +1 -1
- package/dist/ui/assets/{voice-reply-wJfABSIn.js → voice-reply-DmPQ88Bf.js} +1 -1
- package/dist/ui/assets/wc-attach-Cl4xiVKJ.js +13 -0
- package/dist/ui/assets/{wc-browser-BJemxWhg.js → wc-browser-BvVPGuJC.js} +1 -1
- package/dist/ui/assets/{wc-computers-Cr14YnOg.js → wc-computers-BE8zFCtr.js} +1 -1
- package/dist/ui/assets/{wc-detached-DQ_ZTSZ-.js → wc-detached-B0kP4Z2z.js} +1 -1
- package/dist/ui/assets/{wc-extension-C8pgLDqO.js → wc-extension-WMLYCZ4S.js} +2 -2
- package/dist/ui/assets/wc-follower-D8xNU0aW.js +17 -0
- package/dist/ui/assets/{wc-follower-oauth-BU-XAftl.js → wc-follower-oauth-B1NOOs9Y.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-BiyouLW3.js → wc-gelatiere-D11FUwwn.js} +1 -1
- package/dist/ui/assets/wc-live-BN97yBha.js +428 -0
- package/dist/ui/assets/wc-nav-KGT1hZcx.js +2 -0
- package/dist/ui/assets/{wc-onboarding-FjrDOv_u.js → wc-onboarding-Bnq3tf12.js} +2 -2
- package/dist/ui/assets/{wc-permissions-C63-jLbY.js → wc-permissions-D5ysM8C0.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-Bdbmjijc.js → wc-placeholder-BXQeCEMQ.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-C9iCWgBV.js → wc-secret-request-p-Za4Fvj.js} +1 -1
- package/dist/ui/assets/{wc-settings-1ZJgN4Wk.js → wc-settings-ZR46gu8_.js} +3 -3
- package/dist/ui/assets/{wc-shell-CrMn8BW0.js → wc-shell-BXTMxaKz.js} +149 -149
- package/dist/ui/assets/{wc-shortcut-config-JXEU24sg.js → wc-shortcut-config-BcDpfOL9.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-CBaPR_V8.js → wc-sprinkles-DgakIQNM.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-eyG-SwVe.js → wc-transcript-export-diqfvsUL.js} +2 -2
- package/dist/ui/assets/wc-tray-CtCdghN6.js +5 -0
- package/dist/ui/assets/welcome-detection-wvPklODF.js +1 -0
- package/dist/ui/assets/whisper-session-AsG9i34j.js +2 -0
- package/dist/ui/assets/{xai-grok-C2oyJ5tt.js → xai-grok-CyMPEYvk.js} +1 -1
- package/dist/ui/assets/{xai-grok-G4GFCgrM.js → xai-grok-DeZVR3e9.js} +1 -1
- package/dist/ui/index.html +4 -3
- package/dist/ui/llm-proxy-sw.js +1 -1
- package/dist/ui/packages/webapp/index.html +4 -3
- package/package.json +2 -2
- package/dist/ui/assets/SKILL-CJrjPuRt.js +0 -1
- package/dist/ui/assets/__vite-browser-external-C7Grxh8D.js +0 -1
- package/dist/ui/assets/account-store-LwLxI7v1.js +0 -1
- package/dist/ui/assets/account-store-SI8RQbm0.js +0 -2
- package/dist/ui/assets/bedrock-camp-D-jmLdEX.js +0 -1
- package/dist/ui/assets/bedrock-camp-DmVFQWfL.js +0 -1
- package/dist/ui/assets/main-DFTTAllP.js +0 -22
- package/dist/ui/assets/memory-v2-flag-uChv9nwr.js +0 -1
- package/dist/ui/assets/new-session-C914zfKa.js +0 -2
- package/dist/ui/assets/oauth-bootstrap-B7cPXMSk.js +0 -2
- package/dist/ui/assets/panel-rpc-handlers-BuMdGle_.js +0 -2
- package/dist/ui/assets/provider-store-access-C0w1Xcs2.js +0 -1
- package/dist/ui/assets/provider-store-access-YjQKD2es.js +0 -1
- package/dist/ui/assets/providers-B0rCH1pp.js +0 -1
- package/dist/ui/assets/providers-B9p2VR5L.js +0 -2
- package/dist/ui/assets/realm-inprocess-qhbZWW6z.js +0 -30
- package/dist/ui/assets/run-DUzzkV29.js +0 -82
- package/dist/ui/assets/slicc-version-D1Js64gw.js +0 -1
- package/dist/ui/assets/sync-sab-wire-CN1_ni9J.js +0 -252
- package/dist/ui/assets/tab-0xwFvGm5.js +0 -1
- package/dist/ui/assets/wc-attach-CtVWDKPk.js +0 -13
- package/dist/ui/assets/wc-follower-nosCeVKN.js +0 -17
- package/dist/ui/assets/wc-live-CaopRwn0.js +0 -427
- package/dist/ui/assets/wc-nav-Wn2qDNiX.js +0 -2
- package/dist/ui/assets/wc-tray-dSLNIDh9.js +0 -5
- package/dist/ui/assets/welcome-detection-DuFRP38Z.js +0 -1
- package/dist/ui/assets/whisper-session-DrDhzSqp.js +0 -2
|
@@ -1,18 +1,18 @@
|
|
|
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{d as l,f as u,i as d,u as f}from"./account-store-LwLxI7v1.js";import{a as p,l as m,n as h,o as g}from"./proxied-fetch-CZTz7e5K.js";import{t as _}from"./runtime-env-DadgceZk.js";import{t as v}from"./slugify-BYJ6QVAt.js";import{n as ee,t as te}from"./host-command-B0EUpLfV.js";import{a as ne,i as re,n as ie,r as ae,t as oe}from"./snapshot-6br_5p-f.js";import{n as y,r as se}from"./panel-rpc-DVS1uJpt.js";import{t as ce}from"./providers-B0rCH1pp.js";import{r as le}from"./binary-cache-bSOhqXB1.js";import{i as ue,n as de,r as fe}from"./fetch-body-CuwTaJC_.js";import{s as pe,t as me}from"./api-endpoint-D8lUKmPu.js";import{t as he}from"./compat-uEPf6-XW.js";import{a as ge,i as _e}from"./core-LSLY4su2.js";import{n as ve,t as ye}from"./mime-types-D7IV6i7k.js";import{t as be}from"./secrets-bridge-client-C0Lc0mUg.js";import{a as xe,i as Se,n as Ce,r as we}from"./tool-ui-DRnUkp2g.js";import{a as Te,i as Ee,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as De,r as Oe,t as ke}from"./merge-file-core-VJlzucJY.js";import{r as Ae}from"./workspace-mode-D0kUKBVS.js";import{n as je,t as Me}from"./thinking-level-5x0UAu9N.js";import{n as Ne,t as Pe}from"./types-D8gIX-W-.js";import{i as Fe}from"./mount-index-CQfmUPuZ.js";import{a as Ie,i as Le,n as Re,o as ze,s as Be,t as Ve}from"./signed-fetch-YC2zrriw.js";import{o as He}from"./mount-table-store-DrF_Ifaz.js";import{t as Ue}from"./remote-cache-BE5T1-53.js";import{n as We}from"./fs-DmgjBIs9.js";import{a as Ge}from"./tray-leader-status-CpkFr6n7.js";import{n as Ke,t as qe}from"./slicc-version-D1Js64gw.js";import{a as Je,i as Ye,o as Xe,r as S,t as Ze}from"./browser-DG5MjvHF.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as Qe,r as $e,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as et}from"./cost-command-DZQVtgRS.js";import{d as tt,g as nt,i as rt,n as it,o as at}from"./sudoers-BdBYQPUn.js";import{n as ot,r as st,t as ct}from"./approval-timeout-BQ29Z0gf.js";import{a as lt,c as ut,i as dt,l as ft,n as pt,o as mt,r as ht,t as gt}from"./types-BfwydWt7.js";import{n as T,t as _t}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as vt}from"./html-B_Hg2WOy.js";import{n as yt}from"./llm-session-id-BZyXP_j2.js";import{t as bt}from"./buffer-polyfill-BccMjOKj.js";import{i as xt,o as St}from"./browser-DuyhpHbR.js";import{i as Ct,r as wt,t as Tt}from"./mount-picker-popup-BMils9JY.js";import{t as Et}from"./buffer-B5d1xHaH.js";import{A as Dt,B as E,C as Ot,D,E as kt,F as At,G as jt,H as O,I as k,J as Mt,K as Nt,L as Pt,M as Ft,N as It,O as Lt,P as Rt,R as zt,S as Bt,T as Vt,U as Ht,V as Ut,W as Wt,Y as Gt,_ as Kt,a as qt,b as Jt,c as Yt,d as Xt,f as Zt,g as Qt,h as $t,i as en,j as tn,k as nn,l as rn,m as an,n as on,o as sn,p as A,q as cn,r as ln,s as un,t as dn,u as fn,v as pn,w as mn,x as hn,y as gn,z as _n}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as vn,_ as yn,a as bn,b as xn,c as Sn,d as Cn,f as wn,g as Tn,h as En,i as Dn,l as On,n as kn,o as An,p as jn,r as Mn,s as Nn,t as Pn,u as Fn,v as j,x as M,y as In}from"./state-BpyjzTIG.js";import{a as Ln,i as Rn,r as zn,t as Bn}from"./git-config-Bdgu8kD2.js";import{a as Vn,n as Hn,o as Un,r as Wn,s as Gn}from"./jsh-discovery-CnvNKojr.js";import{A as Kn,C as qn,a as Jn,b as Yn,c as Xn,d as Zn,f as Qn,h as $n,i as er,j as tr,l as nr,m as rr,n as ir,o as ar,p as or,r as sr,s as cr,t as N,u as lr,v as ur,y as dr}from"./shared-C_68vn79.js";import{B as fr,F as pr,G as mr,H as hr,J as gr,K as _r,L as vr,N as yr,P as br,U as xr,V as Sr,W as Cr,X as wr,Y as Tr,Z as Er,q as Dr,z as Or}from"./sync-sab-wire-CN1_ni9J.js";import{_ as kr,b as Ar,c as jr,d as Mr,f as Nr,g as Pr,h as Fr,l as Ir,m as Lr,n as Rr,o as zr,p as Br,s as Vr,t as Hr,u as Ur,v as Wr,y as Gr}from"./jsh-executor-BBZWMBxV.js";import{n as Kr,t as qr}from"./esbuild-wasm-DS_YG2EY.js";import{n as Jr}from"./wasm-compiler-Ct7QZURL.js";import{a as Yr,o as Xr,s as Zr,t as Qr}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as $r,r as ei,t as ti}from"./just-bash-compat-B-SPHuh_.js";import{i as ni,r as ri,t as ii}from"./script-catalog-DZtOMxvi.js";import{a as ai,c as oi,o as si,s as ci,t as li}from"./types-Dzr0qYl3.js";import{a as ui,c as di,d as fi,f as pi,n as mi,r as hi,u as gi}from"./github-zip-CX3GXBmW.js";import{i as _i,t as vi}from"./github-auth-CkC7qTEg.js";import{a as yi,i as bi,o as xi,r as Si,t as Ci}from"./provenance-DdmsQ3Nr.js";import{a as wi,c as Ti,i as Ei,n as Di,o as Oi,r as ki,s as Ai}from"./github-install-DT3Wys59.js";import{n as ji,t as Mi}from"./magick-wasm-DCNZhAyd.js";import{i as Ni,n as Pi,r as Fi,t as Ii}from"./pdf-raster-BWk6ezTX.js";import{n as Li}from"./lick-target-env-8JxfVcIV.js";import{t as Ri}from"./tmpdir-env-ate4iNcK.js";import{a as zi,c as Bi,d as Vi,f as Hi,i as Ui,l as Wi,n as Gi,o as Ki,p as qi,r as Ji,s as Yi,t as Xi,u as Zi}from"./installer-DeqzzcvC.js";import{t as Qi}from"./ffmpeg-wasm-B77gfnB_.js";import{t as $i}from"./local-llm-vzP-uq7M.js";import{t as ea}from"./client-SwBG2bcE.js";import{t as ta}from"./redirect-uri-9iVFGZvL.js";import{a as na,c as ra,i as ia,o as aa,r as oa,s as sa}from"./v86-vm-DCm7zA2r.js";import{n as ca,r as la}from"./lick-urls-CgPiVwD-.js";let ua=null;function da(e){ua=e!==null&&Number.isFinite(e)&&e>0?e:null}function fa(){if(ua!==null)return ua;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const pa=/^([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=pa.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 ha(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 ga(e,t){return e.some(e=>ha(e,t))}const _a=`slicc-transcript`,va=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],ya=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 ba(e){return ya.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var xa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Sa=new Set(va),Ca=/^[0-9a-fA-F]{64}$/,wa=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ta(e){return typeof e==`string`&&Ca.test(e)}function Ea(e){return wa.test(e)&&Number.isFinite(Date.parse(e))}function Da(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 Oa(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Da(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 Aa(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(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Oa(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?Aa(e,t):n}function Ma(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 Na(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 Pa(e,t){let n=Ma(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Na(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Fa(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`?Ea(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 Ia(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 La(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Pa(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function Ra(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Oa(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Ia(e,t);if(!n.ok)return n}let r=Fa(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?La(e,t):a}function za(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=Oa(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?ka(r,Ra,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Ba(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 Va(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`}:Ta(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 Ha=[`attachment-file-missing`,`attachment-association-unavailable`];function Ua(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Oa(e.missingReason,Ha,`${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 Wa(e,t){return e.present?Va(e,t):Ua(e,t)}function Ga(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ba(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=Oa(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Wa(e,t):r}function Ka(e,t){let n=Oa(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 qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=Oa(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?Ka(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function Ja(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function Ya(e,t){return typeof e!=`string`||!Sa.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Xa(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function Za(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Oa(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?ka(e.missing,Ya,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function Qa(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=Oa(e.state,[`active`,`frozen`],`session.state`);return t.ok?Za(e.completeness):t}function $a(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?ka(n,qa,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function eo(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=ka(t,za,`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,Ja,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?ka(a,Ga,`attachments`):{ok:!1,error:`attachments must be an array`}}function to(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function no(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function ro(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function io(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of ro(e))t.add(n)}return t}function ao(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function oo(e){return ao(e,io(e))}function so(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function co(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=so(e,t);if(!r.ok)return r}}return{ok:!0}}function lo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return co(e,n)}function uo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function fo(e,t){let n=uo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function po(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(ro(e)))}return t}function mo(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function ho(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return mo(e,n,po(t))}function go(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 _o(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=go(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function vo(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=to(t);if(!o.ok)return o;let s=no(t);if(!s.ok)return s;let c=oo(t);if(!c.ok)return c;let l=lo(t,n);if(!l.ok)return l;let u=fo(n,t);if(!u.ok)return u;let d=ho(r,t);return d.ok?_o(a,n):d}function yo(e){let t=eo(e);return t.ok?vo(e):t}function bo(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=Xa(e.export);if(!t.ok)return t;let n=Qa(e.session);if(!n.ok)return n;let r=$a(e.privacy);return r.ok?yo(e):r}async function xo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:ze});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:So(a),sourceUrl:a}}function So(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Co=`slicc-sprinkle-routes`;function wo(){try{let e=localStorage.getItem(Co);return e?JSON.parse(e):{}}catch{return{}}}function To(e){try{localStorage.setItem(Co,JSON.stringify(e))}catch{}}function Eo(e){return wo()[e]}function Do(e,t){let n=wo();n[e]=t,To(n)}function Oo(e){let t=wo();delete t[e],To(t)}function ko(){return wo()}function Ao(e,t,n){return ut(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(Ao(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Mo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:jo(t,`browser`,pt,e.browser),network:jo(t,`network`,lt,e.network),secrets:jo(t,`secrets`,mt,e.secrets),devices:jo(t,`devices`,ht,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:jo(t,`mounts`,dt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:jo(t,`approvals`,gt,e.approvals)}}function No(e={}){return Mo({adapter:`connect`,pageGestures:e.pageGestures})}function Po(e){let t=_t(()=>import(`./extension-ops-fZojaKTV.js`).then(t=>t.createExtensionOps(e)));return Mo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Fo(e={}){let t=_t(()=>import(`./rest-ops-FDyHTLt7.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Mo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Io(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Fo({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Po({adapter:e,pageGestures:n});case`connect`:return No({pageGestures:n})}}const Lo=e(`quick-llm`);async function Ro(e){let t=d();if(!t)return Lo.debug(`No API key for active provider — skipping`),null;let n=u(),r=l(),i;if(i=e.modelId?Ho(n,e.modelId)??Ho(n,r):zo(n,r),!i)return Lo.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`]=Uo());try{let n=(await he(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 Lo.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function zo(e,t){let n=f(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Vo(r.id),a=n.filter(e=>Bo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Bo(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 Vo(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 Ho(e,t){return f(e).find(e=>e.id===t)}function Uo(){return yt(`ui-quick-llm`)}const Wo=e(`sudo-suggest`),Go=[`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 Yo=e(`sudo:capability-gesture`);function Xo(e,t={}){let n=t.suggest??qo;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 Yo.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),{decision:`deny`};if(!e)return Yo.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),{decision:`deny`};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?ft(o.value,a):(Yo.warn(`capability broker approvals.request failed — denying`,{message:o.message}),{decision:`deny`})}}}const Zo=e(`sudo:tray-first`);function Qo(e,t={}){let n=t.suggest??qo,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DVS1uJpt.js`).then(e=>e.i);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return{decision:`deny`};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){Zo.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 $o(e?.decision,o)}catch(e){Zo.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}function $o(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;return n.decision===`allow`?{decision:`allow`,...r?{attestation:r}:{}}:n.decision===`always`?{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}}:{decision:`deny`}}function es(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ts(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var ns=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ts,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(ot(`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`}),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`}),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 rs(e){return st(is(e))}function is(e){let t=Xo(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:Qo(t)}let as=null;function os(e){return as=e,()=>{as===e&&(as=null)}}function ss(){if(!as)throw new xa(`session-not-found`);return as}const cs=`focus`,ls={type:`leaf`,surfaceId:`chat`};function us(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 ds={focus:{name:`focus`,tree:us({left:ls},{left:3,middle:1})}};function fs(e){return ds[e]??null}const ps=`progress`;function ms(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}async function hs(){try{let e=await wt();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 Tt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Ct(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function gs(){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)}`)}}function _s(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 vs(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 ys=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function bs(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;ys.has(n)&&t++}return!1}function xs(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Ss=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=_s(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=xe();if(!n){let n=await Cs(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;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);r=await t(n,e)}else r=_()?await hs():await gs();let i=Fe.fromHandle(r,{mountId:He()});return await this.options.fs.mount(e,i,{env:t}),{stdout:`Mounted '${i.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=He(),i=new Ue({mountId:r,ttlMs:3e4}),a=new Le({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Re(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??Ve(),i=vs(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 xo(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=He(),c=new Ue({mountId:s,ttlMs:3e4}),l={source:a===`aem`?xs(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 Be(l):new Ie(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(bs(e))return n===`umount`?this.umountHelp():this.help();let r=_s(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-BE5T1-53.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{d as l,f as u,i as d,u as f}from"./account-store-_Ksq0LeF.js";import{a as p,l as m,n as h,o as g}from"./proxied-fetch-CZTz7e5K.js";import{t as _}from"./runtime-env-DadgceZk.js";import{t as v}from"./slugify-BYJ6QVAt.js";import{n as ee,t as te}from"./host-command-B0EUpLfV.js";import{a as ne,i as re,n as ie,r as ae,t as oe}from"./snapshot-oVV9Iqa-.js";import{n as y,r as se}from"./panel-rpc-DVS1uJpt.js";import{t as ce}from"./providers-CLabs7-N.js";import{r as le}from"./binary-cache-bSOhqXB1.js";import{i as ue,n as de,r as fe}from"./fetch-body-CuwTaJC_.js";import{s as pe,t as me}from"./api-endpoint-D8lUKmPu.js";import{t as he}from"./compat-uEPf6-XW.js";import{a as ge,i as _e}from"./core-LSLY4su2.js";import{n as ve,t as ye}from"./mime-types-D7IV6i7k.js";import{t as be}from"./secrets-bridge-client-C0Lc0mUg.js";import{a as xe,i as Se,n as Ce,r as we}from"./tool-ui-DRnUkp2g.js";import{a as Te,i as Ee,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as De,r as Oe,t as ke}from"./merge-file-core-VJlzucJY.js";import{r as Ae}from"./workspace-mode-D0kUKBVS.js";import{n as je,t as Me}from"./thinking-level-5x0UAu9N.js";import{n as Ne,t as Pe}from"./types-D8gIX-W-.js";import{i as Fe}from"./mount-index-CQfmUPuZ.js";import{a as Ie,i as Le,n as Re,o as ze,s as Be,t as Ve}from"./signed-fetch-D1gxhAgf.js";import{o as He}from"./mount-table-store-DrF_Ifaz.js";import{t as Ue}from"./remote-cache-BE5T1-53.js";import{n as We}from"./fs-CNQgTr1W.js";import{a as Ge}from"./tray-leader-status-CpkFr6n7.js";import{n as Ke,t as qe}from"./slicc-version-2HAR5Ivl.js";import{a as Je,i as Ye,o as Xe,r as S,t as Ze}from"./browser-DG5MjvHF.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as Qe,r as $e,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as et}from"./cost-command-DZQVtgRS.js";import{d as tt,g as nt,i as rt,n as it,o as at}from"./sudoers-BdBYQPUn.js";import{n as ot,r as st,t as ct}from"./approval-timeout-BQ29Z0gf.js";import{a as lt,c as ut,i as dt,l as ft,n as pt,o as mt,r as ht,t as gt}from"./types-BfwydWt7.js";import{n as T,t as _t}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as vt}from"./html-B_Hg2WOy.js";import{n as yt}from"./llm-session-id-BZyXP_j2.js";import{t as bt}from"./buffer-polyfill-BccMjOKj.js";import{i as xt,o as St}from"./browser-DuyhpHbR.js";import{i as Ct,r as wt,t as Tt}from"./mount-picker-popup-BMils9JY.js";import{t as Et}from"./buffer-B5d1xHaH.js";import{A as Dt,B as E,C as Ot,D,E as kt,F as At,G as jt,H as O,I as k,J as Mt,K as Nt,L as Pt,M as Ft,N as It,O as Lt,P as Rt,R as zt,S as Bt,T as Vt,U as Ht,V as Ut,W as Wt,Y as Gt,_ as Kt,a as qt,b as Jt,c as Yt,d as Xt,f as Zt,g as Qt,h as $t,i as en,j as tn,k as nn,l as rn,m as an,n as on,o as sn,p as A,q as cn,r as ln,s as un,t as dn,u as fn,v as pn,w as mn,x as hn,y as gn,z as _n}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as vn,_ as yn,a as bn,b as xn,c as Sn,d as Cn,f as wn,g as Tn,h as En,i as Dn,l as On,n as kn,o as An,p as jn,r as Mn,s as Nn,t as Pn,u as Fn,v as j,x as M,y as In}from"./state-CDWzXqaM.js";import{a as Ln,i as Rn,r as zn,t as Bn}from"./git-config-Bdgu8kD2.js";import{a as Vn,n as Hn,o as Un,r as Wn,s as Gn}from"./jsh-discovery-CnvNKojr.js";import{A as Kn,C as qn,a as Jn,b as Yn,c as Xn,d as Zn,f as Qn,h as $n,i as er,j as tr,l as nr,m as rr,n as ir,o as ar,p as or,r as sr,s as cr,t as N,u as lr,v as ur,y as dr}from"./shared-C_68vn79.js";import{_ as fr,a as pr,b as mr,d as hr,f as gr,g as _r,h as vr,i as yr,l as br,m as xr,p as Sr,r as Cr,s as wr,u as Tr,v as Er,x as Dr,y as Or}from"./require-guards-Du29-pl4.js";import{_ as kr,a as Ar,b as jr,c as Mr,d as Nr,f as Pr,g as Fr,h as Ir,l as Lr,m as Rr,n as zr,p as Br,s as Vr,t as Hr,u as Ur,v as Wr,x as Gr,y as Kr}from"./jsh-executor-CKyw9lLY.js";import{n as qr,t as Jr}from"./esbuild-wasm-DS_YG2EY.js";import{n as Yr}from"./wasm-compiler-Ct7QZURL.js";import{a as Xr,o as Zr,s as Qr,t as $r}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as ei,r as ti,t as ni}from"./just-bash-compat-B-SPHuh_.js";import{i as ri,r as ii,t as ai}from"./script-catalog-DZtOMxvi.js";import{a as oi,c as si,o as ci,s as li,t as ui}from"./types-Dzr0qYl3.js";import{a as di,c as fi,d as pi,f as mi,n as hi,r as gi,u as _i}from"./github-zip-ggx_X_vr.js";import{i as vi,t as yi}from"./github-auth-DHDr0MZD.js";import{a as bi,i as xi,o as Si,r as Ci,t as wi}from"./provenance-DdmsQ3Nr.js";import{a as Ti,c as Ei,i as Di,n as Oi,o as ki,r as Ai,s as ji}from"./github-install-CLwrUeHG.js";import{n as Mi,t as Ni}from"./magick-wasm-DCNZhAyd.js";import{i as Pi,n as Fi,r as Ii,t as Li}from"./pdf-raster-BWk6ezTX.js";import{n as Ri}from"./lick-target-env-8JxfVcIV.js";import{t as zi}from"./tmpdir-env-ate4iNcK.js";import{a as Bi,c as Vi,d as Hi,f as Ui,i as Wi,l as Gi,n as Ki,o as qi,p as Ji,r as Yi,s as Xi,t as Zi,u as Qi}from"./installer-DdfBd9PU.js";import{t as $i}from"./ffmpeg-wasm-B77gfnB_.js";import{t as ea}from"./local-llm-BUnPutW1.js";import{t as ta}from"./client-SwBG2bcE.js";import{t as na}from"./redirect-uri-9iVFGZvL.js";import{a as ra,c as ia,i as aa,o as oa,r as sa,s as ca}from"./v86-vm-DCm7zA2r.js";import{n as la,r as ua}from"./lick-urls-CgPiVwD-.js";let da=null;function fa(e){da=e!==null&&Number.isFinite(e)&&e>0?e:null}function pa(){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 ma=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function ha(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ma.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 ga(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 _a(e,t){return e.some(e=>ga(e,t))}const va=`slicc-transcript`,ya=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],ba=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 xa(e){return ba.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Sa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Ca=new Set(ya),wa=/^[0-9a-fA-F]{64}$/,Ta=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Ea(e){return typeof e==`string`&&wa.test(e)}function Da(e){return Ta.test(e)&&Number.isFinite(Date.parse(e))}function Oa(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:Oa(n,t)}:{ok:!0}}function Aa(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 Ma(e,t){if(!F(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 Na(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 Pa(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 Fa(e,t){let n=Na(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Pa(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ia(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`?Da(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 La(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 Ra(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Fa(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function za(e,t){if(!F(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=La(e,t);if(!n.ok)return n}let r=Ia(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=Aa(i,Ma,`${t}.content`);return a.ok?Ra(e,t):a}function Ba(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=ka(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Aa(r,za,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Va(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 Ha(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`}:Ea(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 Ua=[`attachment-file-missing`,`attachment-association-unavailable`];function Wa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?ka(e.missingReason,Ua,`${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 Ga(e,t){return e.present?Ha(e,t):Wa(e,t)}function Ka(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Va(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?Ga(e,t):r}function qa(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 Ja(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.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 F(r)?qa(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function Ya(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function Xa(e,t){return typeof e!=`string`||!Ca.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function Za(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function Qa(e){if(!F(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)?Aa(e.missing,Xa,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function $a(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=ka(e.state,[`active`,`frozen`],`session.state`);return t.ok?Qa(e.completeness):t}function eo(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Aa(n,Ja,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function to(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Aa(t,Ba,`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=Aa(r,Ya,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Aa(a,Ka,`attachments`):{ok:!1,error:`attachments must be an array`}}function no(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function ro(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function io(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function ao(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of io(e))t.add(n)}return t}function oo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function so(e){return oo(e,ao(e))}function co(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function lo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=co(e,t);if(!r.ok)return r}}return{ok:!0}}function uo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return lo(e,n)}function fo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function po(e,t){let n=fo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function mo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(io(e)))}return t}function ho(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function go(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return ho(e,n,mo(t))}function _o(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 vo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=_o(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function yo(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=no(t);if(!o.ok)return o;let s=ro(t);if(!s.ok)return s;let c=so(t);if(!c.ok)return c;let l=uo(t,n);if(!l.ok)return l;let u=po(n,t);if(!u.ok)return u;let d=go(r,t);return d.ok?vo(a,n):d}function bo(e){let t=to(e);return t.ok?yo(e):t}function xo(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=Za(e.export);if(!t.ok)return t;let n=$a(e.session);if(!n.ok)return n;let r=eo(e.privacy);return r.ok?bo(e):r}async function So(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:ze});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:Co(a),sourceUrl:a}}function Co(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const wo=`slicc-sprinkle-routes`;function To(){try{let e=localStorage.getItem(wo);return e?JSON.parse(e):{}}catch{return{}}}function Eo(e){try{localStorage.setItem(wo,JSON.stringify(e))}catch{}}function Do(e){return To()[e]}function Oo(e,t){let n=To();n[e]=t,Eo(n)}function ko(e){let t=To();delete t[e],Eo(t)}function Ao(){return To()}function jo(e,t,n){return ut(t,n,`${e} adapter does not implement ${t}.${n}`)}function Mo(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 No(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Mo(t,`browser`,pt,e.browser),network:Mo(t,`network`,lt,e.network),secrets:Mo(t,`secrets`,mt,e.secrets),devices:Mo(t,`devices`,ht,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Mo(t,`mounts`,dt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Mo(t,`approvals`,gt,e.approvals)}}function Po(e={}){return No({adapter:`connect`,pageGestures:e.pageGestures})}function Fo(e){let t=_t(()=>import(`./extension-ops-fZojaKTV.js`).then(t=>t.createExtensionOps(e)));return No({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Io(e={}){let t=_t(()=>import(`./rest-ops-FDyHTLt7.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return No({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Lo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Io({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Fo({adapter:e,pageGestures:n});case`connect`:return Po({pageGestures:n})}}const Ro=e(`quick-llm`);async function zo(e){let t=d();if(!t)return Ro.debug(`No API key for active provider — skipping`),null;let n=u(),r=l(),i;if(i=e.modelId?Uo(n,e.modelId)??Uo(n,r):Bo(n,r),!i)return Ro.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`]=Wo());try{let n=(await he(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 Ro.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Bo(e,t){let n=f(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Ho(r.id),a=n.filter(e=>Vo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Vo(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 Ho(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 Uo(e,t){return f(e).find(e=>e.id===t)}function Wo(){return yt(`ui-quick-llm`)}const Go=e(`sudo-suggest`),Ko=[`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
|
+
`),qo=[`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 Jo(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?Ko:qo,i=null;try{i=await zo({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){Go.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return Yo(i)||n}function Yo(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 Xo=e(`sudo:capability-gesture`);function Zo(e,t={}){let n=t.suggest??Jo;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 Xo.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),{decision:`deny`};if(!e)return Xo.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),{decision:`deny`};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?ft(o.value,a):(Xo.warn(`capability broker approvals.request failed — denying`,{message:o.message}),{decision:`deny`})}}}const Qo=e(`sudo:tray-first`);function $o(e,t={}){let n=t.suggest??Jo,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DVS1uJpt.js`).then(e=>e.i);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return{decision:`deny`};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){Qo.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 es(e?.decision,o)}catch(e){Qo.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}function es(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;return n.decision===`allow`?{decision:`allow`,...r?{attestation:r}:{}}:n.decision===`always`?{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}}:{decision:`deny`}}function ts(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ns(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var rs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ns,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(ot(`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`}),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`}),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 is(e){return st(as(e))}function as(e){let t=Zo(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:$o(t)}let os=null;function ss(e){return os=e,()=>{os===e&&(os=null)}}function cs(){if(!os)throw new Sa(`session-not-found`);return os}const ls=`focus`,us={type:`leaf`,surfaceId:`chat`};function ds(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 fs={focus:{name:`focus`,tree:ds({left:us},{left:3,middle:1})}};function ps(e){return fs[e]??null}const ms=`progress`;function hs(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}async function gs(){try{let e=await wt();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 Tt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Ct(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function _s(){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)}`)}}function vs(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 ys(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 bs=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function xs(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;bs.has(n)&&t++}return!1}function Ss(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Cs=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=vs(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=xe();if(!n){let n=await ws(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;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);r=await t(n,e)}else r=_()?await gs():await _s();let i=Fe.fromHandle(r,{mountId:He()});return await this.options.fs.mount(e,i,{env:t}),{stdout:`Mounted '${i.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=He(),i=new Ue({mountId:r,ttlMs:3e4}),a=new Le({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Re(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??Ve(),i=ys(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 So(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=He(),c=new Ue({mountId:s,ttlMs:3e4}),l={source:a===`aem`?Ss(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 Be(l):new Ie(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(xs(e))return n===`umount`?this.umountHelp():this.help();let r=vs(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-BE5T1-53.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(xs(e))return this.help();let n=vs(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=vs(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 Vs(Rs(e.message)??e.message,t)}function Bs(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 Vs(e,t){if(!/\b401\b|Unauthorized/i.test(e))return e;if(t!==void 0){if(!Bs(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 Hs={refresh:!1},Us=new Set([`never`,`false`,`0`,`off`,`no`]),Ws=new Set([`always`,`true`,`1`,`on`,`yes`]),Gs=/^(--?)([^=]+)(=.*)?$/,Ks=
|
|
13
|
+
`,stderr:``,exitCode:0}}};async function ws(e){let t=`pendingMount:term:${e}`,n;try{n=await Tt(t)}catch{return null}if(!n)return null;try{await Ct(n)}catch{return null}return Fe.fromHandle(n,{mountId:He()})}async function Ts(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 Es(e,t,a);else if(o.includes(`.`))await Ds(e,t,a);else if(i)await Os(e,t,a);else for(let n of o)await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n,force:a});return{stdout:``,stderr:``,exitCode:0}}async function Es(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&(a===0?await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}async function Ds(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&a!==0&&await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n})}async function Os(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,a,o,s]of r)a!==0&&o!==s&&(o===0?await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}const ks={boolean:[`dry-run`,`force`,`d`,`x`,`X`,`quiet`],alias:{n:`dry-run`,f:`force`,q:`quiet`}},I={init:{string:[`initial-branch`],alias:{b:`initial-branch`}},clone:{string:[`branch`,`depth`,`origin`,`upload-pack`],boolean:[`single-branch`,`quiet`],alias:{b:`branch`,o:`origin`,q:`quiet`},default:{"single-branch":!0}},commit:{string:[`message`,`author`,`date`,`file`,`cleanup`],boolean:[`amend`,`all`,`allow-empty`],alias:{m:`message`,a:`all`,F:`file`}},log:{string:[`max-count`,`format`,`author`,`committer`,`grep`,`since`,`until`,`skip`,`follow`],boolean:[`oneline`,`stat`,`reverse`,`all`,`color`],alias:{n:`max-count`,pretty:`format`},"--":!0},branch:{string:[`list`,`set-upstream-to`,`track`,`contains`,`no-contains`,`merged`,`no-merged`,`points-at`],boolean:[`color`],alias:{l:`list`,u:`set-upstream-to`,t:`track`}},checkout:{string:[`b`,`B`,`orphan`,`track`,`start-point`,`conflict`],"--":!0},clean:ks,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`}}},As=/^(--?)([^=]+)(=.*)?$/;function js(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 Ms(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 Ns(){let e=new Set([`c`,`C`,`git-dir`,`work-tree`]);for(let t of Object.values(I))for(let n of Ms(t))e.add(n);return e}function Ps(e,t,n){for(let r of e){if(!t.has(r))return r;if(n.has(r))return}}function Fs(e,t){let n=js(t),r=Ms(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=As.exec(t);if(!i)continue;let o=i[2];if(i[1]===`-`&&o.length>1&&!i[3]&&!n.has(o)){let e=Ps(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 Is(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function Ls(e,t){if(!t)return;let n=Fs(e,t);return n?Is(n):void 0}function L(e,t){let n=e[t];if(n===void 0)return;let r=String(Array.isArray(n)?n[n.length-1]:n);return r===``?void 0:r}function Rs(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 zs(e,t){if(!(e instanceof Error))return Vs(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=>zs(e,t)).join(`
|
|
15
|
+
`)}return Vs(Rs(e.message)??e.message,t)}function Bs(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 Vs(e,t){if(!/\b401\b|Unauthorized/i.test(e))return e;if(t!==void 0){if(!Bs(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 Hs={refresh:!1},Us=new Set([`never`,`false`,`0`,`off`,`no`]),Ws=new Set([`always`,`true`,`1`,`on`,`yes`]),Gs=/^(--?)([^=]+)(=.*)?$/,Ks=Ns();function qs(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 Js(e){let t,n=e.indexOf(`--`),r=n===-1?e:e.slice(0,n);for(let e=0;e<r.length;e++){if(Xs(r,e))continue;let n=r[e];if(n===`--no-color`){t=`never`;continue}if(n===`--color`){t=`always`;continue}n.startsWith(`--color=`)&&(t=qs(n.slice(8))??t)}return t}function Ys(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(Xs(e,r,t)){n.push(i);continue}if(i.startsWith(`--color=`)){let e=Zs(i.slice(8));e&&n.push(e);continue}n.push(i)}return n}function Xs(e,t,n=-1){if(t===0||n!==-1&&t-1>=n)return!1;let r=e[t-1],i=Gs.exec(r);return!i||i[3]?!1:Ks.has(i[2])}function Zs(e){let t=e.toLowerCase();if(Us.has(t))return`--no-color`;if(Ws.has(t))return`--color`}function Qs(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(qs(e.colorUi));return i===void 0?!e.noColorEnv&&t:i}function $s(e,t,n){return e?`\x1b[${t}m${n}\x1b[0m`:n}async function ec(e,t,n){let r=n.includes(`-d`)||n.includes(`-D`)||n.includes(`--delete`),i=n.includes(`-a`)||n.includes(`--all`);if(n.includes(`--show-current`)){let n=await A({fs:e.lfs,dir:t});return{stdout:n?`${n}\n`:``,stderr:``,exitCode:0}}let a=n.find(e=>!e.startsWith(`-`));if(r&&a)return await an({fs:e.lfs,dir:t,ref:a}),{stdout:`Deleted branch ${a}\n`,stderr:``,exitCode:0};if(a&&!r)return await Yt({fs:e.lfs,dir:t,ref:a}),{stdout:``,stderr:``,exitCode:0};let o=await kt({fs:e.lfs,dir:t}),s=await A({fs:e.lfs,dir:t}),c=``;for(let t of o)c+=t===s?`* ${$s(e.useColor,`32`,t)}\n`:` ${t}\n`;if(i)try{let n=await kt({fs:e.lfs,dir:t,remote:`origin`});for(let t of n)c+=` ${$s(e.useColor,`31`,`remotes/origin/${t}`)}\n`}catch{}return{stdout:c,stderr:``,exitCode:0}}async function tc(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
16
|
`,exitCode:1};let i=n.slice(0,a).filter(e=>!e.startsWith(`-`))[0];return oc(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
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 Yt({fs:e.lfs,dir:t,ref:o,object:s,checkout:!1,force:i})}catch(e){return ac(e,o)}try{await nc(e,t,o,i)}catch(n){if(!i)try{await an({fs:e.lfs,dir:t,ref:o})}catch{}return ac(n,o)}return await e.fs.flush(),{stdout:`Switched to a new branch '${o}'\n`,stderr:``,exitCode:0}}try{await nc(e,t,o,i)}catch(e){return ac(e,o)}return await e.fs.flush(),{stdout:`Switched to branch '${o}'\n`,stderr:``,exitCode:0}}async function nc(e,t,n,r){let i;try{i=await E({fs:e.lfs,dir:t,ref:`HEAD`})}catch{i=void 0}let a=new Set(await D({fs:e.lfs,cache:e.cache,dir:t}));await rn({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:r});let o=await E({fs:e.lfs,dir:t,ref:n}),s=new Set(await D({fs:e.lfs,cache:e.cache,dir:t,ref:o}));await rc(e,t,a,s),!(!r&&i===o)&&await ic(e,t,o,a,s)}async function rc(e,t,n,r){for(let i of n)if(!r.has(i)){try{await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:i})}catch{}try{await e.fs.rm(`${t}/${i}`)}catch{}}}async function ic(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 At({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 _n({fs:e.lfs,cache:e.cache,dir:t,filepath:a,ref:n})}}function ac(e,t){if(e instanceof Error&&e.name===`MultipleGitError`)return{stdout:``,stderr:`error: unable to checkout '${t}':\n${zs(e).split(`
|
|
18
18
|
`).map(e=>` ${e}`).join(`
|
|
@@ -21,23 +21,23 @@ import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW
|
|
|
21
21
|
`,exitCode:128};let c=await uc(e,t,s);if(c===void 0)return{stdout:``,stderr:`fatal: bad revision '${s}'\n`,exitCode:128};try{let n=await fn({fs:e.lfs,cache:e.cache,dir:t,oid:c,abortOnConflict:!1,noUpdateBranch:a,committer:await e.resolveAuthor(t),mergeDriver:sc()});if(a)return{stdout:``,stderr:``,exitCode:0};let r=n,{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n});if(o){let n=i.message.replace(/\s+$/,``);r=await Zt({fs:e.lfs,cache:e.cache,dir:t,message:`${n}\n\n(cherry picked from commit ${c})\n`,author:i.author,committer:await e.resolveAuthor(t),amend:!0})}let s=await A({fs:e.lfs,dir:t}),l=i.message.split(`
|
|
22
22
|
`)[0];return{stdout:`[${s??`HEAD`} ${r.slice(0,7)}] ${l}\n`,stderr:``,exitCode:0}}catch(e){return yc(e,c)}}function yc(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: ${zs(e)}\n`,exitCode:128}}async function bc(e,t,n){let r=M(n,
|
|
25
|
-
`,exitCode:128};let d=await O({fs:e.lfs,cache:e.cache,dir:t,...Hs}),f=xc(d),p=d.filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e),m;if(c||s){let n=(await O({fs:e.lfs,cache:e.cache,dir:t,ignored:!0,...Hs})).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=>Cc(e,t))));let h=new Set,g=new Set;for(let e of m){let t=Sc(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 xc(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 Sc(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 Cc(e,t){let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n||e.startsWith(`${n}/`)}let wc=null;function Tc(){return wc||=h(),wc}async function*Ec(e,t,n){t&&t({phase:`Receiving`,loaded:e.length,total:n??e.length}),yield e}function Dc(){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 Tc()(t,{method:n,headers:r,body:o}),c=parseInt(s.headers[`content-length`]??`0`,10)||void 0,l=Ec(s.body,a,c);return{url:s.url,method:n,headers:s.headers,body:l,statusCode:s.status,statusMessage:s.statusText}}}}const Oc=Dc();async function kc(e,t,n){let r=
|
|
26
|
-
`,exitCode:128};let c=a[0],l=a[1];if(!l){let e=c.match(/\/([^/]+?)(\.git)?$/);l=e?e[1]:`repo`}let u=b(l.startsWith(`/`)?l:`${t}/${l}`),d=
|
|
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: ${zs(e)}\n`,exitCode:128}}async function bc(e,t,n){let r=M(n,ks),i=!!r.flags[`dry-run`],a=!!r.flags.force,o=!!r.flags.d,s=!!r.flags.x,c=!!r.flags.X,l=!!r.flags.quiet,u=r.positionals;if(!i&&!a)return{stdout:``,stderr:`fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean
|
|
25
|
+
`,exitCode:128};let d=await O({fs:e.lfs,cache:e.cache,dir:t,...Hs}),f=xc(d),p=d.filter(([,e,t,n])=>e===0&&t===2&&n===0).map(([e])=>e),m;if(c||s){let n=(await O({fs:e.lfs,cache:e.cache,dir:t,ignored:!0,...Hs})).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=>Cc(e,t))));let h=new Set,g=new Set;for(let e of m){let t=Sc(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 xc(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 Sc(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 Cc(e,t){let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n||e.startsWith(`${n}/`)}let wc=null;function Tc(){return wc||=h(),wc}async function*Ec(e,t,n){t&&t({phase:`Receiving`,loaded:e.length,total:n??e.length}),yield e}function Dc(){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 Tc()(t,{method:n,headers:r,body:o}),c=parseInt(s.headers[`content-length`]??`0`,10)||void 0,l=Ec(s.body,a,c);return{url:s.url,method:n,headers:s.headers,body:l,statusCode:s.status,statusMessage:s.statusText}}}}const Oc=Dc();async function kc(e,t,n){let r=Ls(n,I.clone);if(r)return r;let{flags:i,positionals:a}=M(n,I.clone),o=i,s=o.quiet===!0;if(a.length===0)return{stdout:``,stderr:`fatal: You must specify a repository to clone.
|
|
26
|
+
`,exitCode:128};let c=a[0],l=a[1];if(!l){let e=c.match(/\/([^/]+?)(\.git)?$/);l=e?e[1]:`repo`}let u=b(l.startsWith(`/`)?l:`${t}/${l}`),d=L(o,`depth`),f=L(o,`branch`),p=o[`single-branch`]!==!1,m=s?``:`Cloning into '${l}'...\n`,h=Ac(c,t);if(h)return jc(e,h,u,c,l,m,f,s);try{await Xt({fs:e.lfs,cache:e.cache,http:Oc,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 Nc(e,u,c)}if(await e.fs.flush(),!s)try{let t=await D({fs:e.lfs,cache:e.cache,dir:u});t.length>0&&(m+=`Checked out ${t.length} files.\n`)}catch{}return{stdout:s?``:`${m}done.\n`,stderr:``,exitCode:0}}function Ac(e,t){if(e.startsWith(`file://`))try{return b(decodeURIComponent(new URL(e).pathname))}catch{return null}return e.startsWith(`/`)?b(e):e.startsWith(`./`)||e.startsWith(`../`)?b(x(t,e)):null}async function jc(e,t,n,r,i,a,o,s=!1){if(n===t||n.startsWith(`${t}/`))return Nc(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 Nc(Error(`destination path '${i}' already exists and is not an empty directory.`),n)}catch{await e.lfs.mkdir(n,{recursive:!0})}let c=o??await A({fs:e.lfs,dir:t});if(await Mc(e,`${t}/.git`,`${n}/.git`),c&&await rn({fs:e.lfs,cache:e.cache,dir:n,ref:c,force:!0}),await sn({fs:e.lfs,dir:n,remote:`origin`,url:r,force:!0}),await e.fs.flush(),!s){let t=await D({fs:e.lfs,cache:e.cache,dir:n});t.length>0&&(a+=`Checked out ${t.length} files.\n`)}return{stdout:s?``:`${a}done.\n`,stderr:``,exitCode:0}}catch(e){return Nc(e,n,r)}}async function Mc(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 Mc(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 Nc(e,t,n){return{stdout:``,stderr:`fatal: ${zs(e,n).replace(/'\/__opfs__\/[^']*<path>'/g,`'${t}'`).replace(/\/__opfs__\/[^\s'"<]*<path>/g,t).replace(/<path>/g,t)}\n`,exitCode:128}}const Pc=[`MERGE_HEAD`,`MERGE_MSG`,`MERGE_MODE`,`AUTO_MERGE`];async function Fc(e,t){return`${await hn({fs:e.lfs,filepath:t})}/.git`}async function Ic(e,t){try{return(await e.fs.readTextFile(t)).trim()}catch{return}}async function Lc(e,t){try{await e.fs.rm(t)}catch{}}async function Rc(e,t){try{return await Ic(e,`${await Fc(e,t)}/MERGE_HEAD`)}catch{return}}async function zc(e,t){return await Rc(e,t)!==void 0}async function Bc(e,t){try{return await Ic(e,`${await Fc(e,t)}/MERGE_MSG`)}catch{return}}async function Vc(e,t,n){let r=await Fc(e,t);await e.fs.writeFile(`${r}/ORIG_HEAD`,`${n}\n`)}async function Hc(e,t,n,r){let i=await Fc(e,t);await e.fs.writeFile(`${i}/MERGE_HEAD`,`${n}\n`),await e.fs.writeFile(`${i}/MERGE_MSG`,r.endsWith(`
|
|
27
27
|
`)?r:`${r}\n`)}async function Uc(e,t){let n;try{n=await Fc(e,t)}catch{return}await Promise.all(Pc.map(t=>Lc(e,`${n}/${t}`)))}async function Wc(e,t){let n=await D({fs:e.lfs,cache:e.cache,dir:t}),r=[];for(let i of n)try{(await e.fs.readTextFile(`${t}/${i}`)).includes(`<<<<<<<`)&&r.push(i)}catch{}return r}const Gc=new Set([`message`,`author`,`date`,`file`,`cleanup`,`amend`,`all`,`allow-empty`,`m`,`a`,`F`]);async function Kc(e,t,n){let r=il(n),i=M(r,I.commit).flags,a=await Rc(e,t),o=await nl(e,t,i);if(typeof o!=`string`){if(a){let n=await Bc(e,t);if(n)return await qc(e,t,i,n,a)}return o}return await qc(e,t,i,o,a)}async function qc(e,t,n,r,i){let a=n.amend===!0,o=n.all===!0,s=n[`allow-empty`]===!0;if(o&&await rl(e,t),!s&&!a&&!i&&!(await O({fs:e.lfs,cache:e.cache,dir:t})).some(([,e,,t])=>t!==e))return{stdout:``,stderr:`nothing to commit, working tree clean
|
|
28
|
-
`,exitCode:1};let c=await Zt({fs:e.lfs,cache:e.cache,dir:t,message:r,author:await e.resolveAuthor(t),amend:a,noUpdateBranch:void 0,...i?{parent:[await E({fs:e.lfs,dir:t,ref:`HEAD`}),i]}:{}});i&&await Uc(e,t);let l=c.slice(0,7);return{stdout:`[${await A({fs:e.lfs,dir:t})??`HEAD`} ${l}] ${r}\n`,stderr:``,exitCode:0}}function Jc(e,t){let n=e[t];if(n!==void 0&&n!==!0&&n!==!1)return
|
|
28
|
+
`,exitCode:1};let c=await Zt({fs:e.lfs,cache:e.cache,dir:t,message:r,author:await e.resolveAuthor(t),amend:a,noUpdateBranch:void 0,...i?{parent:[await E({fs:e.lfs,dir:t,ref:`HEAD`}),i]}:{}});i&&await Uc(e,t);let l=c.slice(0,7);return{stdout:`[${await A({fs:e.lfs,dir:t})??`HEAD`} ${l}] ${r}\n`,stderr:``,exitCode:0}}function Jc(e,t){let n=e[t];if(n!==void 0&&n!==!0&&n!==!1)return L(e,t)}function Yc(e){return Object.keys(e).find(e=>!Gc.has(e))}function Xc(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function Zc(e){return{stdout:``,stderr:`error: switch \`${e}\` requires a value\n`,exitCode:1}}function Qc(e){let t=Yc(e);return t?Xc(t):`message`in e||`m`in e?Zc(`m`):`file`in e||`F`in e?Zc(`F`):{stdout:``,stderr:"error: option `-m' or `-F' is required\n",exitCode:1}}function $c(){return{stdout:``,stderr:`Aborting commit due to empty commit message.
|
|
29
29
|
`,exitCode:1}}function el(e){return{stdout:``,stderr:`error: could not read log file '${e}': No such file or directory\n`,exitCode:128}}async function tl(e,t,n){if(n===`-`)return e.stdin;let r=n.startsWith(`/`)?n:`${t}/${n}`;try{return await e.fs.readTextFile(r)}catch{return el(n)}}async function nl(e,t,n){let r=Jc(n,`message`);if(r!==void 0)return r;let i=Jc(n,`file`);if(i!==void 0){let n=await tl(e,t,i);return typeof n==`string`&&n===``?$c():n}return Qc(n)}async function rl(e,t){let n=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,a,o]of n)i!==0&&a!==o&&(a===0?await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:r}):await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:r}))}function il(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 al(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 ll(e,t,a);if(i)return ol(e,t,o,a);if(!o)return{stdout:``,stderr:`usage: git config [--global] [--list] [--unset] <key> [<value>]
|
|
30
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?cl(e,t,o,a):sl(e,t,o,c,a)}async function ol(e,t,n,r){if(!n)return{stdout:``,stderr:`error: key required for --unset
|
|
31
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(Bn),r=Rn(e,n);await t.writeFile(Bn,r)}catch{}}else try{let r=`${t}/.git/config`,i=await e.fs.readTextFile(r),a=Rn(i,n);await e.fs.writeFile(r,a)}catch{}return{stdout:``,stderr:``,exitCode:0}}async function sl(e,t,n,r,i){return n===`credential.token`||n===`github.token`?(await e.setGithubToken(r),{stdout:``,stderr:``,exitCode:0}):(i?await Ln(await e.getGlobalFs(),n,r):await Ut({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 cl(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 zn(await e.getGlobalFs(),n):(i=await Bt({fs:e.lfs,dir:t,path:n}),i||=await zn(await e.getGlobalFs(),n)),{stdout:i?`${i}\n`:``,stderr:``,exitCode:+!i}}async function ll(e,t,n){let r=``;if(!n)try{let n=`${t}/.git/config`,i=await e.fs.readTextFile(n);r+=ul(i)}catch{}try{let t=await(await e.getGlobalFs()).readTextFile(Bn);r+=ul(t)}catch{}return{stdout:r,stderr:``,exitCode:0}}function ul(e){let t=``,n=``,r=``;for(let i of e.split(`
|
|
32
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 dl=`/dev/null`,fl={bytes:new Uint8Array,text:``,binary:!1};async function pl(e,t,n,r){if(n.length!==2)return{stdout:``,stderr:`usage: git diff --no-index [<options>] <path> <path>
|
|
33
33
|
`,exitCode:129};let[i,a]=await Promise.all([yl(e,t,n[0]),yl(e,t,n[1])]);[i,a]=await bl(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 wl(e,i,a):[await Sl(e,i,a)]).filter(e=>!ml(e.oldBlob.bytes,e.newBlob.bytes));return s.length===0?{stdout:``,stderr:``,exitCode:0}:{stdout:hl(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 hl(e,t,n){if(t.nameOnly)return`${e.map(e=>e.absent===`new`?dl:e.newName).join(`
|
|
34
|
-
`)}\n`;if(t.stat)return De(e.map(_l),{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 ${gl(i,`old`)} and ${gl(i,`new`)} differ\n`;continue}r+=Oe({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 gl(e,t){return e.absent===t?dl:t===`old`?`a/${e.oldName}`:`b/${e.newName}`}function _l(e){return{name:vl(e.absent===`old`?dl:e.oldName,e.absent===`new`?dl: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 vl(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 yl(e,t,n){if(n===dl)return{kind:`null`,given:n};let r=b(n.startsWith(`/`)?n:`${t}/${n}`);try{return(await e.fs.stat(r)).type===`directory`?{kind:`dir`,abs:r,given:n}:{kind:`file`,abs:r,given:n}}catch{return{kind:`missing`,given:n}}}async function bl(e,t,n,r){return n.kind===`dir`&&(r.kind===`file`||r.kind===`null`)?[await yl(e,t,`${n.given}/${xl(r.given)}`),r]:r.kind===`dir`&&(n.kind===`file`||n.kind===`null`)?[n,await yl(e,t,`${r.given}/${xl(n.given)}`)]:[n,r]}function xl(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}async function Sl(e,t,n){let[r,i]=await Promise.all([Cl(e,t),Cl(e,n)]),a=t.kind===`null`?`old`:n.kind===`null`?`new`:void 0,o=Dl(t.kind===`null`?n.given:t.given);return{oldName:a?o:Dl(t.given),newName:a?o:Dl(n.given),absent:a,oldBlob:r,newBlob:i}}function Cl(e,t){return t.kind===`file`?El(e,t.abs):Promise.resolve(fl)}async function wl(e,t,n){let[r,i]=await Promise.all([Tl(e,t.abs),Tl(e,n.abs)]),a=[...new Set([...r,...i])].sort(),o=[];for(let s of a){let a=Dl(`${t.given}/${s}`),c=Dl(`${n.given}/${s}`);i.has(s)?r.has(s)?o.push({oldName:a,newName:c,oldBlob:await El(e,`${t.abs}/${s}`),newBlob:await El(e,`${n.abs}/${s}`)}):o.push({oldName:c,newName:c,absent:`old`,oldBlob:fl,newBlob:await El(e,`${n.abs}/${s}`)}):o.push({oldName:a,newName:a,absent:`new`,oldBlob:await El(e,`${t.abs}/${s}`),newBlob:fl})}return o}async function Tl(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 El(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 Dl(e){return e.replace(/^\/+/,``)}function Ol(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 kl(e,t,n){let r=Ul(n),i=
|
|
34
|
+
`)}\n`;if(t.stat)return De(e.map(_l),{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 ${gl(i,`old`)} and ${gl(i,`new`)} differ\n`;continue}r+=Oe({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 gl(e,t){return e.absent===t?dl:t===`old`?`a/${e.oldName}`:`b/${e.newName}`}function _l(e){return{name:vl(e.absent===`old`?dl:e.oldName,e.absent===`new`?dl: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 vl(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 yl(e,t,n){if(n===dl)return{kind:`null`,given:n};let r=b(n.startsWith(`/`)?n:`${t}/${n}`);try{return(await e.fs.stat(r)).type===`directory`?{kind:`dir`,abs:r,given:n}:{kind:`file`,abs:r,given:n}}catch{return{kind:`missing`,given:n}}}async function bl(e,t,n,r){return n.kind===`dir`&&(r.kind===`file`||r.kind===`null`)?[await yl(e,t,`${n.given}/${xl(r.given)}`),r]:r.kind===`dir`&&(n.kind===`file`||n.kind===`null`)?[n,await yl(e,t,`${r.given}/${xl(n.given)}`)]:[n,r]}function xl(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}async function Sl(e,t,n){let[r,i]=await Promise.all([Cl(e,t),Cl(e,n)]),a=t.kind===`null`?`old`:n.kind===`null`?`new`:void 0,o=Dl(t.kind===`null`?n.given:t.given);return{oldName:a?o:Dl(t.given),newName:a?o:Dl(n.given),absent:a,oldBlob:r,newBlob:i}}function Cl(e,t){return t.kind===`file`?El(e,t.abs):Promise.resolve(fl)}async function wl(e,t,n){let[r,i]=await Promise.all([Tl(e,t.abs),Tl(e,n.abs)]),a=[...new Set([...r,...i])].sort(),o=[];for(let s of a){let a=Dl(`${t.given}/${s}`),c=Dl(`${n.given}/${s}`);i.has(s)?r.has(s)?o.push({oldName:a,newName:c,oldBlob:await El(e,`${t.abs}/${s}`),newBlob:await El(e,`${n.abs}/${s}`)}):o.push({oldName:c,newName:c,absent:`old`,oldBlob:fl,newBlob:await El(e,`${n.abs}/${s}`)}):o.push({oldName:a,newName:a,absent:`new`,oldBlob:await El(e,`${t.abs}/${s}`),newBlob:fl})}return o}async function Tl(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 El(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 Dl(e){return e.replace(/^\/+/,``)}function Ol(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 kl(e,t,n){let r=Ul(n),i=Ls(r,I.diff);if(i)return i;let{flags:a,positionals:o,doubleDashRest:s}=M(r,I.diff),c=a.staged===!0||a.cached===!0,l=o.length>=2?o.slice(2):[],u={nameOnly:a[`name-only`]===!0,nameStatus:a[`name-status`]===!0,stat:a.stat===!0,pathspecs:[...l,...s],context:Wl(a.unified)};if(a[`no-index`]===!0||a.index===!1)return pl(e,t,o,u);if(o.length>=2)return Fl(e,t,o[0],o[1],u);if(o.length===1){let n=Gl(o[0]);if(n)return Il(e,t,n[0],n[1],u);let r=Kl(o[0]);return r?Fl(e,t,r[0],r[1],u):c?jl(e,t,o[0],u):Rl(e,t,o[0],u)}return Hl(e,c?await Al(e,t,u.pathspecs):await Ml(e,t,u.pathspecs),u)}async function Al(e,t,n=[],r=`HEAD`){let i=[];return await jt({fs:e.lfs,cache:e.cache,dir:t,trees:[on({ref:r}),dn()],iterate:Ol(e=>_c(e,n)),map:async(r,[a,o])=>{if(r===`.`||r===`.git`||r.startsWith(`.git/`)||!gc(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 Pl(e,t,l),f=await Pl(e,t,u);i.push({filepath:r,oldContent:d,newContent:f,oldPresent:!!l,newPresent:!!u})}}),i}async function jl(e,t,n,r){let i;try{i=await cc(e,t,n)}catch{return Jl(n)}return Hl(e,await Al(e,t,r.pathspecs,i),r)}async function Ml(e,t,n=[]){let r=[];return await jt({fs:e.lfs,cache:e.cache,dir:t,trees:[dn(),ln(Hs)],iterate:Ol((e,[t])=>t===!0&&_c(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`||!gc(i,n))return null;let c=await a.oid(),l=await Nl(o);if(l&&c&&(await Ot({object:l})).oid===c)return null;let u=await Pl(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 Nl(e){if(e)try{return await e.type()===`blob`?await e.content()??void 0:void 0}catch{return}}async function Pl(e,t,n){if(!n)return``;try{let{blob:r}=await At({fs:e.lfs,dir:t,oid:n,cache:e.cache});return new TextDecoder().decode(r)}catch{return``}}async function Fl(e,t,n,r,i){try{return await Ll(e,t,await cc(e,t,n),await cc(e,t,r),i)}catch{return Jl(await ql(e,t,[n,r])??n)}}async function Il(e,t,n,r,i){let a=n||`HEAD`,o=r||`HEAD`;try{let n=await cc(e,t,a),r=await cc(e,t,o),s=await Jt({fs:e.lfs,cache:e.cache,dir:t,oids:[n,r]});return s[0]?await Ll(e,t,s[0],r,i):{stdout:``,stderr:`fatal: '${a}...${o}' has no merge base\n`,exitCode:128}}catch{return Jl(await ql(e,t,[a,o])??a)}}async function Ll(e,t,n,r,i){let a=[];return await jt({fs:e.lfs,cache:e.cache,dir:t,trees:[on({ref:n}),on({ref:r})],iterate:Ol(e=>_c(e,i.pathspecs??[])),map:async(e,[t,n])=>{if(await Bl(t,n))return null;let r=await Vl(e,t,n,i.pathspecs??[]);r&&a.push(r)}}),Hl(e,a,i)}async function Rl(e,t,n,r){let i;try{i=await cc(e,t,n)}catch{return Jl(n)}let a=new Set(await D({fs:e.lfs,dir:t,cache:e.cache})),o=zl(a),s=[];return await jt({fs:e.lfs,cache:e.cache,dir:t,trees:[on({ref:i}),ln(Hs)],iterate:Ol((e,[t])=>(t===!0||a.has(e)||o.has(e))&&_c(e,r.pathspecs??[])),map:async(e,[t,n])=>{if(!t&&!a.has(e)&&!o.has(e))return null;let i=await Vl(e,t,n,r.pathspecs??[]);i&&s.push(i)}}),Hl(e,s,r)}function zl(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 Bl(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 Vl(e,t,n,r){if(e===`.`||!gc(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 Hl(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?Yl(t,e.useColor):{stdout:t.map(t=>Oe({oldContent:t.oldContent,newContent:t.newContent,oldName:t.filepath,newName:t.filepath,context:n.context,color:e.useColor})).join(``),stderr:``,exitCode:0}}function Ul(e){let t=e.indexOf(`--`);return e.map((e,n)=>(t===-1||n<t)&&/^-U\d+$/.test(e)?`--unified=${e.slice(2)}`:e)}function Wl(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 Gl(e){let t=e.indexOf(`...`);return t===-1?null:[e.slice(0,t),e.slice(t+3)]}function Kl(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 ql(e,t,n){for(let r of n)try{await cc(e,t,r)}catch{return r}return null}function Jl(e){return{stdout:``,stderr:`fatal: ambiguous argument '${e}'\n`,exitCode:128}}function Yl(e,t=!1){return{stdout:De(e.map(e=>({name:e.filepath,oldContent:e.oldContent,newContent:e.newContent})),{color:t}),stderr:``,exitCode:0}}async function Xl(e,t,n,r){let i=[];if(await jt({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 Yl(i.map(e=>({filepath:e.filepath,oldContent:``,newContent:e.content})),e.useColor).stdout;let a=``;for(let t of i)a+=Oe({oldContent:``,newContent:t.content,oldName:t.filepath,newName:t.filepath,color:e.useColor});return a}async function Zl(e,t,n){let r=
|
|
36
|
+
`)}\n`,stderr:``,exitCode:0}:n.stat?Yl(t,e.useColor):{stdout:t.map(t=>Oe({oldContent:t.oldContent,newContent:t.newContent,oldName:t.filepath,newName:t.filepath,context:n.context,color:e.useColor})).join(``),stderr:``,exitCode:0}}function Ul(e){let t=e.indexOf(`--`);return e.map((e,n)=>(t===-1||n<t)&&/^-U\d+$/.test(e)?`--unified=${e.slice(2)}`:e)}function Wl(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 Gl(e){let t=e.indexOf(`...`);return t===-1?null:[e.slice(0,t),e.slice(t+3)]}function Kl(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 ql(e,t,n){for(let r of n)try{await cc(e,t,r)}catch{return r}return null}function Jl(e){return{stdout:``,stderr:`fatal: ambiguous argument '${e}'\n`,exitCode:128}}function Yl(e,t=!1){return{stdout:De(e.map(e=>({name:e.filepath,oldContent:e.oldContent,newContent:e.newContent})),{color:t}),stderr:``,exitCode:0}}async function Xl(e,t,n,r){let i=[];if(await jt({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 Yl(i.map(e=>({filepath:e.filepath,oldContent:``,newContent:e.content})),e.useColor).stdout;let a=``;for(let t of i)a+=Oe({oldContent:``,newContent:t.content,oldName:t.filepath,newName:t.filepath,color:e.useColor});return a}async function Zl(e,t,n){let r=Ls(n,I.fetch);if(r)return r;let{flags:i,positionals:a}=M(n,I.fetch),o=i,s=a[0]??`origin`,c=a[1],l=o.prune===!0,u=o.quiet===!0,d=L(o,`depth`),f=u?``:`Fetching ${s}\n`,p=await gn({fs:e.lfs,cache:e.cache,http:Oc,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 Ql(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 Ql(e,t,n,r){let i=await hn({fs:e.lfs,filepath:t}),a=r??``;await e.fs.writeFile(`${i}/.git/FETCH_HEAD`,`${n}\t\t${a}\n`)}async function $l(e,t,n){let r=M(n,I.init).flags,i=L(r,`initial-branch`)??e.getConfigOverrides()?.get(`init.defaultbranch`)??`main`;return await mn({fs:e.lfs,dir:t,defaultBranch:i}),{stdout:`Initialized empty Git repository in ${t}/.git/\n`,stderr:``,exitCode:0}}function eu(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 tu=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(!eu(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&&eu(this.heap[t],this.heap[n])&&(n=t),t+1<this.heap.length&&eu(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 nu(e,t,n){try{return await E({fs:e.lfs,dir:t,ref:n})}catch{return}}async function ru(e,t,n,r){try{return await k({fs:e.lfs,dir:t,oid:n,cache:r})}catch{return}}async function iu(e,t,n,r,i){let a=await kt({fs:e.lfs,dir:t});for(let[o,s]of a.entries()){let a=await nu(e,t,s);if(a===void 0||r.has(a))continue;r.add(a);let c=await ru(e,t,a,i);c&&n.push(c,o)}}async function*au(e,t,n){let r=new Set,i=new tu;for(await iu(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 ru(e,t,o,n.cache);s&&i.push(s,a.tipRank)}}}async function ou(e,t,n){let r=[];if(n.limit<=0)return r;for await(let i of au(e,t,{cache:n.cache}))if(r.push(i),r.length>=n.limit)break;return r}async function su(e,t,n){let{flags:r,positionals:i,doubleDashRest:a}=M(n,I.log),o=r,s=L(o,`max-count`),c=o.oneline===!0,l=o.stat===!0,u=o.reverse===!0,d=o.all===!0,f=L(o,`format`),p=L(o,`author`),m=L(o,`grep`),h=L(o,`follow`),g=await cu(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 _u(e,t,g,{format:f,oneline:c,showStat:l}),stderr:``,exitCode:0}}async function cu(e,t,n){let r=n.revision?xu(n.revision):null,i=r?.[1]??n.revision,a=Su(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 du(e,t,{pathspecs:n.pathspecs,limit:o,caches:a,exclude:r?await uu(e,t,r[0],a):void 0});let s=n.all?await ou(e,t,{limit:n.maxCount??lu,cache:a.git}):await tn({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 uu(e,t,r[0],a);s=s.filter(e=>!n.has(e.oid))}return n.pathspecs.length>0?await gu(e,t,s,n.pathspecs,o,a):r?s.slice(0,o):s}const lu=50;async function uu(e,t,n,r){let i=await tn({fs:e.lfs,dir:t,cache:r.git,ref:n});return new Set(i.map(e=>e.oid))}async function du(e,t,n){let r=[],i=[],a=async()=>{if(i.length>0){let a=n.limit-r.length;r.push(...await gu(e,t,i,n.pathspecs,a,n.caches)),i=[]}return r.length>=n.limit};for await(let o of au(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 fu(e){let t=e.replace(/^\.\//,``).replace(/\/+$/,``);return t===`.`?``:t}function pu(e){let t=[...new Set(e.map(fu))];return t.some(e=>e===``)?null:t}async function mu(e,t,n){let r=n.ref?{ref:n.ref}:{},i=pu(n.pathspecs);return i===null?await tn({fs:e.lfs,dir:t,cache:n.caches.git,...r,depth:n.limit}):i.length===1?(await tn({fs:e.lfs,dir:t,cache:n.caches.git,...r,filepath:i[0],depth:n.limit,force:!0})).slice(0,n.limit):await hu(e,t,{refArg:r,specs:i,limit:n.limit,caches:n.caches})}async function hu(e,t,n){let r=[],i=0,a=Math.max(n.limit*4,32);for(;;){let o=await tn({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 Eu(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 gu(e,t,n,r,i,a){let o=pu(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 Eu(e,t,r,o,a)&&s.push(r),s.length>=i)break;return s}async function _u(e,t,n,r){let i=``;for(let a of n){let{commit:n,oid:o}=a;r.format?i+=`${vu(o,n,r.format)}\n`:r.oneline?i+=`${$s(e.useColor,`33`,o.slice(0,7))} ${n.message.split(`
|
|
37
37
|
`)[0]}\n`:(i+=`${$s(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
38
|
`)}\n\n`),r.showStat&&(i+=await bu(e,t,a))}return i}function vu(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
39
|
`)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,r.toLocaleString()).replace(/%ar/g,yu(r))}function yu(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 bu(e,t,n){let{commit:r,oid:i}=n,a=r.parent.length>0?r.parent[0]:void 0;return a?(await Fl(e,t,a,i,{nameOnly:!1,stat:!0})).stdout:await Xl(e,t,i,!0)}function xu(e){let t=/^(.+)\.\.([^.]*)$/.exec(e);return t?.[2]?[t[1],t[2]]:null}function Su(e){return{git:e,commitTrees:new Map,trees:new Map,entries:new Map}}async function Cu(e,t,n,r){let i=r.trees.get(n);if(i)return i;let{tree:a}=await Pt({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.trees.set(n,a),a}async function wu(e,t,n,r){let i=r.commitTrees.get(n);if(i)return i;let{commit:a}=await k({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.commitTrees.set(n,a.tree),a.tree}async function Tu(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 Cu(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 Eu(e,t,n,r,i){let a=n.commit.parent[0],o=a?await wu(e,t,a,i):void 0;for(let a of r)if(await Tu(e,t,n.commit.tree,a,i)!==(o===void 0?void 0:await Tu(e,t,o,a,i)))return!0;return!1}async function Du(e,t,n){let r=n.includes(`--modified`)||n.includes(`-m`),i=n.includes(`--others`)||n.includes(`-o`),a=n.includes(`--deleted`)||n.includes(`-d`),o=n.filter(e=>!e.startsWith(`-`)).map(e=>e.replace(/\/+$/,``)).filter(e=>e.length>0),s=await O({fs:e.lfs,cache:e.cache,dir:t,...Hs}),c=[],l=i?`others`:r?`modified`:a?`deleted`:`cached`;for(let[e,t,n,r]of s)ku(l,t,n,r)&&(o.length>0&&!Ou(e,o)||c.push(e));return c.sort(),{stdout:c.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}function Ou(e,t){for(let n of t)if(e===n||e.startsWith(n+`/`))return!0;return!1}function ku(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 Au(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 Lt({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 nn({http:Oc,url:l,corsProxy:e.corsProxy,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),prefix:t,symrefs:a,peelTags:i})).filter(e=>ju(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: ${Vs(e instanceof Error?e.message:String(e),l)}\n`,exitCode:128}}}function ju(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 Mu(e,t,n){let{flags:r,positionals:i}=M(n,I[`ls-tree`]),a=r.r===!0,o=r.d===!0,s=r[`name-only`]===!0,c=i[0],l=Nu(i.slice(1));if(!c)return{stdout:``,stderr:`usage: git ls-tree [<options>] <tree-ish> [<path>...]
|
|
40
|
-
`,exitCode:129};let u=await uc(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 Pt({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 Pu(e,t,d,``,l,a,o,s,f),{stdout:f.join(``),stderr:``,exitCode:0}}function Nu(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 Pu(e,t,n,r,i,a,o,s,c){for(let l of n){let n=r?`${r}/${l.path}`:l.path,u=Fu(n,i);if(u!==`no`){if(l.type===`tree`){let r=u===`exact`&&(o||!a),d=u===`parent`||a;if(r&&c.push(Iu(l,n,s)),d){let{tree:r}=await Pt({fs:e.lfs,cache:e.cache,dir:t,oid:l.oid});await Pu(e,t,r,n,i,a,o,s,c)}}else u!==`parent`&&!o&&c.push(Iu(l,n,s))}}}function Fu(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 Iu(e,t,n){return n?`${t}\n`:`${e.mode.padStart(6,`0`)} ${e.type} ${e.oid}\t${t}\n`}function Lu(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function Ru(e,t){let n,r=!1;for(let t of Lu(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 zu(e,t,n){let r=
|
|
40
|
+
`,exitCode:129};let u=await uc(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 Pt({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 Pu(e,t,d,``,l,a,o,s,f),{stdout:f.join(``),stderr:``,exitCode:0}}function Nu(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 Pu(e,t,n,r,i,a,o,s,c){for(let l of n){let n=r?`${r}/${l.path}`:l.path,u=Fu(n,i);if(u!==`no`){if(l.type===`tree`){let r=u===`exact`&&(o||!a),d=u===`parent`||a;if(r&&c.push(Iu(l,n,s)),d){let{tree:r}=await Pt({fs:e.lfs,cache:e.cache,dir:t,oid:l.oid});await Pu(e,t,r,n,i,a,o,s,c)}}else u!==`parent`&&!o&&c.push(Iu(l,n,s))}}}function Fu(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 Iu(e,t,n){return n?`${t}\n`:`${e.mode.padStart(6,`0`)} ${e.type} ${e.oid}\t${t}\n`}function Lu(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function Ru(e,t){let n,r=!1;for(let t of Lu(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 zu(e,t,n){let r=Ls(n,I.merge);if(r)return r;let i=M(n,I.merge);if(i.flags.abort===!0)return Bu(e,t);let a=i.positionals[0];if(!a)return{stdout:``,stderr:`fatal: No branch specified to merge.
|
|
41
41
|
`,exitCode:128};if(await zc(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
43
|
`,exitCode:128};let o=await uc(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}=Ru(i,n);try{await Vc(e,t,await E({fs:e.lfs,dir:t,ref:`HEAD`}));let n=await Ft({fs:e.lfs,cache:e.cache,dir:t,ours:await A({fs:e.lfs,dir:t})??void 0,theirs:o,fastForward:!s,fastForwardOnly:c,author:await e.resolveAuthor(t),abortOnConflict:!1,mergeDriver:sc({favor:l,diff3:u})});return n.alreadyMerged?{stdout:`Already up to date.
|
|
@@ -52,7 +52,7 @@ Please, commit your changes before you merge.
|
|
|
52
52
|
`,exitCode:128}}}function Uu(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}async function Wu(e,t,n){let r=M(n,I[`merge-file`]),i=r.positionals;if(i.length!==3)return{stdout:``,stderr:`usage: git merge-file [<options>] <current-file> <base-file> <other-file>
|
|
53
53
|
`,exitCode:255};let a=Uu(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=ke(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 Gu(e,t,n){let r=
|
|
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=ke(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 Gu(e,t,n){let r=Ls(n,I.pull);if(r)return r;let{flags:i,positionals:a}=M(n,I.pull),o=a[0]??`origin`,s=a[1],c=i[`ff-only`]===!0||n.includes(`--ff-only`),l=i.ff===!1||n.includes(`--no-ff`),u=i.quiet===!0,d=u?``:`Pulling from ${o}...\n`;return await It({fs:e.lfs,cache:e.cache,http:Oc,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
56
|
`),{stdout:d,stderr:``,exitCode:0}}async function Ku(e,t,n){let{flags:r,positionals:i}=M(n,I.push),a=r.force===!0,o=r[`set-upstream`]===!0,s=r[`dry-run`]===!0,c=i[0]??`origin`,l=i[1]??await A({fs:e.lfs,dir:t});if(s)return{stdout:`Would push to ${c}...\n ${l} -> ${l}\n`,stderr:``,exitCode:0};let u=`Pushing to ${c}...\n`,d=await Rt({fs:e.lfs,cache:e.cache,http:Oc,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 Ut({fs:e.lfs,dir:t,path:`branch.${l}.remote`,value:c}),await Ut({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 Lt({fs:e.lfs,dir:t}).catch(()=>[])).find(e=>e.remote===c)?.url;return{stdout:``,stderr:`error: failed to push to '${c}': ${Vs(String(d.error),n)}\n`,exitCode:1}}return{stdout:u,stderr:``,exitCode:0}}function qu(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}const Ju=`.git/rebase-merge`;async function Yu(e,t,n){let{flags:r,positionals:i}=M(n,I.rebase);for(let e of[`interactive`,`onto`,`rebase-merges`,`autosquash`])if(r[e])return{stdout:``,stderr:`fatal: git rebase --${e} is not supported\n`,exitCode:128};try{return r.abort?await $u(e,t):r.continue?await Zu(e,t):r.skip?await Qu(e,t):await Xu(e,t,i[0],r)}catch(e){return{stdout:``,stderr:`fatal: ${zs(e)}\n`,exitCode:128}}}async function Xu(e,t,n,r){if(!n)return{stdout:``,stderr:`fatal: No upstream specified.
|
|
57
57
|
`,exitCode:128};if(await sd(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.
|
|
@@ -79,7 +79,7 @@ error: Please commit or stash them.
|
|
|
79
79
|
`)[0],f=s.slice(0,7),p=await A({fs:e.lfs,dir:t})??`HEAD`;try{let n=await Sd(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
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 Zt({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: ${zs(e)}\n`,exitCode:128}}}async function Sd(e,t,n,r,i,a){let[o,s,c]=await Promise.all([D({fs:e.lfs,cache:e.cache,dir:t,ref:n}),D({fs:e.lfs,cache:e.cache,dir:t,ref:r}),D({fs:e.lfs,cache:e.cache,dir:t,ref:i})]),l=new Set([...o,...s,...c]),u=new TextEncoder,d=[];for(let o of l){let s=await Cd(e,t,r,o),c=await Cd(e,t,i,o);if(s===c)continue;let l=await Cd(e,t,n,o)??``,f,p=!1;if(l===(s??``))f=c??``;else{let e=ke(l,s??``,c??``,{labels:a});f=e.content,p=e.conflicts>0}if(!p&&c===void 0&&f===``){await wd(e,t,o);continue}await e.fs.writeFile(`${t}/${o}`,u.encode(f)),p?d.push(o):await qt({fs:e.lfs,cache:e.cache,dir:t,filepath:o})}return d}async function Cd(e,t,n,r){try{let{blob:i}=await At({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return new TextDecoder().decode(i)}catch{return}}async function wd(e,t,n){try{await e.fs.rm(`${t}/${n}`)}catch{}try{await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}catch{}}async function Td(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 Ed(e,t,n,r,i);if(a)return a}return{stdout:``,stderr:``,exitCode:0}}async function Ed(e,t,n,r,i){let a=n.startsWith(`/`)?n:`${t}/${n}`,o=!1;try{o=(await e.fs.stat(a)).type===`directory`}catch{}if(o){if(!i)return{stdout:``,stderr:`fatal: not removing '${n}' recursively without -r\n`,exitCode:128};let a=(await D({fs:e.lfs,cache:e.cache,dir:t})).filter(e=>e===n||e.startsWith(n+`/`));for(let n of a)if(await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(`${t}/${n}`)}catch{}}else if(await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(a)}catch{}return null}async function Dd(e,t,n){let{flags:r,positionals:i}=M(n,I.show),a=r,o=a.stat===!0,s=
|
|
82
|
+
`,exitCode:128};for(let n of a){let a=await Ed(e,t,n,r,i);if(a)return a}return{stdout:``,stderr:``,exitCode:0}}async function Ed(e,t,n,r,i){let a=n.startsWith(`/`)?n:`${t}/${n}`,o=!1;try{o=(await e.fs.stat(a)).type===`directory`}catch{}if(o){if(!i)return{stdout:``,stderr:`fatal: not removing '${n}' recursively without -r\n`,exitCode:128};let a=(await D({fs:e.lfs,cache:e.cache,dir:t})).filter(e=>e===n||e.startsWith(n+`/`));for(let n of a)if(await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(`${t}/${n}`)}catch{}}else if(await zt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(a)}catch{}return null}async function Dd(e,t,n){let{flags:r,positionals:i}=M(n,I.show),a=r,o=a.stat===!0,s=L(a,`format`),c=i[0];if(c?.includes(`:`))return await Od(e,t,c);let l=c??`HEAD`,u=await uc(e,t,l);if(u===void 0)return{stdout:``,stderr:`fatal: bad object ${l}\n`,exitCode:128};let{commit:d}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:u}),f=kd(u,d,s,e.useColor),p=d.parent.length>0?d.parent[0]:void 0;if(p){let n=await Fl(e,t,p,u,{nameOnly:!1,stat:o});f+=n.stdout}else{let n=await Xl(e,t,u,o);f+=n}return{stdout:f,stderr:``,exitCode:0}}async function Od(e,t,n){let r=n.indexOf(`:`),i=n.slice(0,r)||`HEAD`,a=n.slice(r+1),o=await uc(e,t,i);if(o===void 0)return{stdout:``,stderr:`fatal: bad object ${i}\n`,exitCode:128};let s=await At({fs:e.lfs,cache:e.cache,dir:t,oid:o,filepath:a});return{stdout:new TextDecoder().decode(s.blob),stderr:``,exitCode:0}}function kd(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
84
|
`;let i=`${$s(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
85
|
`)}\n\n`,i}async function Ad(e,t,n){let r=n.includes(`--heads`),i=n.includes(`--tags`),a=n.find(e=>!e.startsWith(`-`)),o=``;if(!i){let n=await kt({fs:e.lfs,dir:t});for(let r of n){let n=await E({fs:e.lfs,dir:t,ref:r}),i=`refs/heads/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}if(!r){let n=await Dt({fs:e.lfs,dir:t});for(let r of n){let n=await E({fs:e.lfs,dir:t,ref:r}),i=`refs/tags/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}return{stdout:o,stderr:``,exitCode:0}}const jd=new Uint8Array;async function Md(e,t){return await e.fs.readFile(t,{encoding:`binary`})}function Nd(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 Pd(e){if(!e.includes(0))try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return}}async function Fd(e,t,n){let r=n[0];if(!r||r.startsWith(`-`))return Id(e,t,n);switch(r){case`push`:case`save`:return Id(e,t,n.slice(1));case`pop`:return Bd(e,t);case`apply`:return Vd(e,t);case`list`:return Kd(e,t);case`drop`:return qd(e,t,n.slice(1));case`show`:return Jd(e,t);default:return{stdout:``,stderr:`error: unknown subcommand: ${r}\n`,exitCode:1}}}async function Id(e,t,n){let r=await A({fs:e.lfs,dir:t})??`HEAD`,i;try{i=await E({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: cannot stash without a HEAD commit
|
|
@@ -115,8 +115,8 @@ error: Please commit or stash them.
|
|
|
115
115
|
or: git symbolic-ref <name> <ref>
|
|
116
116
|
or: git symbolic-ref (-d | --delete) <name>`;function nf(e){let t=Array.isArray(e)?e[e.length-1]:e;return typeof t==`boolean`?t:void 0}function rf(e){let t={};typeof e.m==`string`&&(t.m=e.m);let n=nf(e.delete);n!==void 0&&(t.delete=n);let r=nf(e.d);r!==void 0&&(t.d=r);let i=nf(e.quiet);i!==void 0&&(t.quiet=i);let a=nf(e.q);a!==void 0&&(t.q=a);let o=nf(e.short);o!==void 0&&(t.short=o);let s=nf(e.recurse);return s!==void 0&&(t.recurse=s),t}function af(){return{stdout:``,stderr:`${tf}\n`,exitCode:129}}function of(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 sf(e,t,n){try{let r=await E({fs:e.lfs,dir:t,ref:n,depth:2});return r.startsWith(`refs/`)?{kind:`symbolic`,target:r}:{kind:`direct`}}catch{return{kind:`missing`}}}async function cf(e,t,n,r){let i=await sf(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 sf(e,t,o);if(r.kind!==`symbolic`)return o;o=r.target}}function lf(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 uf(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${tf}\n`,exitCode:129};if(e.m!==void 0)return{stdout:``,stderr:`fatal: option '-m' is not supported because reflogs are not persisted
|
|
117
117
|
`,exitCode:128};if(e.delete===!1||t&&(e.short!==void 0||e.recurse!==void 0))return af()}async function df(e,t,n,r){if(n===`HEAD`)return{stdout:``,stderr:`fatal: deleting 'HEAD' is not allowed
|
|
118
|
-
`,exitCode:128};let i=await sf(e,t,n);return i.kind===`symbolic`?(await $t({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 ff(e,t,n,r){return of(r)?(await Mt({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 pf(e,t,n,r){let i=await cf(e,t,n,r.recurse!==!1);return typeof i==`string`?{stdout:`${r.short?lf(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,I[`symbolic-ref`]),a=r.delete===!0,o=uf(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?df(e,t,i[0],!!r.quiet):af():i.length===2?s?af():ff(e,t,i[0],i[1]):i.length===1?pf(e,t,i[0],rf(r)):af()}async function hf(e,t,n){let{flags:r,positionals:i}=M(n,I.tag),a=r,o=a.delete===!0,s=
|
|
119
|
-
`,exitCode:128}}if(s!==void 0||i.length===0){let n=await Dt({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 un({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 Ht({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function gf(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 _f(e,t){let n=t.mtimeMs??0;return{type:e,mode:gf(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 vf(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 yf(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 bf(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 xf=`/objects/pack`,Sf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Cf=/\/objects\/[0-9a-f]{2}$/;function wf(e){return e.endsWith(xf)||Cf.test(e)}function Tf(e){let t=Ne(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Ef(e){let t=new Map;return{prime(n,r){if(r.length>e){t.clear();return}t.size+r.length>e&&t.clear();let i=b(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=Tf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(b(e));if(n)return _f(n.type,n.stats?vf(n.stats):{})},drop(e){t.delete(b(e))},clear(){t.clear()},size(){return t.size}}}function Df(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Ef(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,wf(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)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=Sf.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 Pe(`ENOENT`,`no such file or directory`,t);let r=bf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,yf(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(xf))return await i(e);let t=n.packDirs.get(e);if(t)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 _f(i.type===`directory`?`dir`:`file`,vf(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return _f(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,vf(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Pe(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Pe(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const Of={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},kf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function Af(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 Mf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Nf(e){let t=e?.code;return typeof t==`string`?t:void 0}function Pf(e){return typeof e==`string`?e.length*2:e.byteLength}function Ff(e,t){return`${t?`u`:`b`} ${e}`}var If=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=Pf(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[Ff(e,!0),Ff(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=jf(e);this.forgetSelf(t);let n=Mf(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 Lf(e,t,n,r){let i=e.get(t);if(i)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(Nf(e)??``)||o()}),a}function Rf(e,t={}){let n=new If({...Of,...t}),r=()=>n.hasRoom(),i=async t=>(await Lf(n.dirs,jf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(Af(t))return e.readFile(t,i);let a=Ff(jf(t),yf(i)),o=await Lf(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=>Lf(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 zf=e(`git-cache`);function Bf(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function Vf(e){return`${e.replace(/\/+$/,``)}/.git`}var Hf=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=Vf(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=Vf(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=Bf(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=Bf(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=`${Vf(e)}/objects/pack/`,n=Bf(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=Bf(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;zf.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const Uf=e(`git-commands`),Wf=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),Gf=new Set([`clone`,`fetch`,`pull`]),Kf=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),qf={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function Jf(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function Yf(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 Xf=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=Df(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 Hf(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=Df(this.options.fs,{objectCache:!0}),r=Kf.has(e)?Rf(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){Uf.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(){if(this.githubToken)return this.githubToken;let e=this.currentEnv;if(!e)return;let t=Yf(e,`GH_TOKEN`);if(t)return t;let n=Yf(e,`GITHUB_TOKEN`);if(n)return n}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t)return t;let n=We.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){Uf.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 Bt({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 zn(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await zn(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(Ys(e),t);if(a.versionRequested&&a.remainingArgs.length===0)return this.version();if(a.helpRequested||a.remainingArgs.length===0)return this.help();let o=a.effectiveCwd,[s,...c]=a.remainingArgs,l=I[s]??{},u=M(c,l),d=Object.hasOwn(l.alias??{},`h`);if(u.flags.help||u.flags.h&&!d)return this.help();this.currentEnv=n,this.currentConfigOverrides=a.configOverrides,this.currentStdin=r??``;let f=this.invocationColor(e,n,a.configOverrides,i),{ctx:p,client:m}=this.contextFor(s,f);try{return this.cacheManager.setDeepVerification(this.shouldVerifyPackfiles()),await this.cacheManager.beforeCommand(o),Wf.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${zs(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:Gf.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 $l(t,n,r);case`clone`:return await kc(t,n,r);case`add`:return await ws(t,n,r);case`status`:return await Xd(t,n,r);case`commit`:return await Kc(t,n,r);case`log`:return await su(t,n,r);case`ls-remote`:return await Au(t,n,r);case`branch`:return await ec(t,n,r);case`checkout`:return await tc(t,n,r);case`clean`:return await bc(t,n,r);case`diff`:return await kl(t,n,r);case`show`:return await Dd(t,n,r);case`remote`:return await pd(t,n,r);case`fetch`:return await Zl(t,n,r);case`pull`:return await Gu(t,n,r);case`push`:return await Ku(t,n,r);case`merge`:return await zu(t,n,r);case`merge-base`:return await Hu(t,n,r);case`cherry-pick`:return await vc(t,n,r);case`rebase`:return await Yu(t,n,r);case`revert`:return await xd(t,n,r);case`merge-file`:return await Wu(t,n,r);case`reset`:return await md(t,n,r);case`config`:return await al(t,n,r);case`tag`:return await hf(t,n,r);case`ls-files`:return await Du(t,n,r);case`ls-tree`:return await Mu(t,n,r);case`show-ref`:return await Ad(t,n,r);case`symbolic-ref`:return await mf(t,n,r);case`stash`:return await Fd(t,n,r);case`rm`:return await Td(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await bd(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 Qs({cliWhen:Js(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&Yf(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?Yf(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?Yf(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,qf),r=t;for(let e of Jf(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of Jf(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 ${Wt()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
|
|
118
|
+
`,exitCode:128};let i=await sf(e,t,n);return i.kind===`symbolic`?(await $t({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 ff(e,t,n,r){return of(r)?(await Mt({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 pf(e,t,n,r){let i=await cf(e,t,n,r.recurse!==!1);return typeof i==`string`?{stdout:`${r.short?lf(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,I[`symbolic-ref`]),a=r.delete===!0,o=uf(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?df(e,t,i[0],!!r.quiet):af():i.length===2?s?af():ff(e,t,i[0],i[1]):i.length===1?pf(e,t,i[0],rf(r)):af()}async function hf(e,t,n){let{flags:r,positionals:i}=M(n,I.tag),a=r,o=a.delete===!0,s=L(a,`list`),c=a.annotate===!0,l=L(a,`message`),u=a.force===!0;if(o){let n=i[0];return n?(await Kt({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 Dt({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 un({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 Ht({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function gf(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 _f(e,t){let n=t.mtimeMs??0;return{type:e,mode:gf(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 vf(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 yf(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 bf(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 xf=`/objects/pack`,Sf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Cf=/\/objects\/[0-9a-f]{2}$/;function wf(e){return e.endsWith(xf)||Cf.test(e)}function Tf(e){let t=Ne(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Ef(e){let t=new Map;return{prime(n,r){if(r.length>e){t.clear();return}t.size+r.length>e&&t.clear();let i=b(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=Tf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(b(e));if(n)return _f(n.type,n.stats?vf(n.stats):{})},drop(e){t.delete(b(e))},clear(){t.clear()},size(){return t.size}}}function Df(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Ef(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,wf(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)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=Sf.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 Pe(`ENOENT`,`no such file or directory`,t);let r=bf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,yf(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(xf))return await i(e);let t=n.packDirs.get(e);if(t)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 _f(i.type===`directory`?`dir`:`file`,vf(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return _f(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,vf(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Pe(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Pe(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const Of={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},kf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function Af(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 Mf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Nf(e){let t=e?.code;return typeof t==`string`?t:void 0}function Pf(e){return typeof e==`string`?e.length*2:e.byteLength}function Ff(e,t){return`${t?`u`:`b`} ${e}`}var If=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=Pf(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[Ff(e,!0),Ff(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=jf(e);this.forgetSelf(t);let n=Mf(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 Lf(e,t,n,r){let i=e.get(t);if(i)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(Nf(e)??``)||o()}),a}function Rf(e,t={}){let n=new If({...Of,...t}),r=()=>n.hasRoom(),i=async t=>(await Lf(n.dirs,jf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(Af(t))return e.readFile(t,i);let a=Ff(jf(t),yf(i)),o=await Lf(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=>Lf(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 zf=e(`git-cache`);function Bf(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function Vf(e){return`${e.replace(/\/+$/,``)}/.git`}var Hf=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=Vf(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=Vf(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=Bf(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=Bf(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=`${Vf(e)}/objects/pack/`,n=Bf(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=Bf(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;zf.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const Uf=e(`git-commands`),Wf=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),Gf=new Set([`clone`,`fetch`,`pull`]),Kf=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),qf={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function Jf(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function Yf(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 Xf=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=Df(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 Hf(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=Df(this.options.fs,{objectCache:!0}),r=Kf.has(e)?Rf(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){Uf.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(){if(this.githubToken)return this.githubToken;let e=this.currentEnv;if(!e)return;let t=Yf(e,`GH_TOKEN`);if(t)return t;let n=Yf(e,`GITHUB_TOKEN`);if(n)return n}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t)return t;let n=We.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){Uf.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 Bt({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 zn(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await zn(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(Ys(e),t);if(a.versionRequested&&a.remainingArgs.length===0)return this.version();if(a.helpRequested||a.remainingArgs.length===0)return this.help();let o=a.effectiveCwd,[s,...c]=a.remainingArgs,l=I[s]??{},u=M(c,l),d=Object.hasOwn(l.alias??{},`h`);if(u.flags.help||u.flags.h&&!d)return this.help();this.currentEnv=n,this.currentConfigOverrides=a.configOverrides,this.currentStdin=r??``;let f=this.invocationColor(e,n,a.configOverrides,i),{ctx:p,client:m}=this.contextFor(s,f);try{return this.cacheManager.setDeepVerification(this.shouldVerifyPackfiles()),await this.cacheManager.beforeCommand(o),Wf.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${zs(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:Gf.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 $l(t,n,r);case`clone`:return await kc(t,n,r);case`add`:return await Ts(t,n,r);case`status`:return await Xd(t,n,r);case`commit`:return await Kc(t,n,r);case`log`:return await su(t,n,r);case`ls-remote`:return await Au(t,n,r);case`branch`:return await ec(t,n,r);case`checkout`:return await tc(t,n,r);case`clean`:return await bc(t,n,r);case`diff`:return await kl(t,n,r);case`show`:return await Dd(t,n,r);case`remote`:return await pd(t,n,r);case`fetch`:return await Zl(t,n,r);case`pull`:return await Gu(t,n,r);case`push`:return await Ku(t,n,r);case`merge`:return await zu(t,n,r);case`merge-base`:return await Hu(t,n,r);case`cherry-pick`:return await vc(t,n,r);case`rebase`:return await Yu(t,n,r);case`revert`:return await xd(t,n,r);case`merge-file`:return await Wu(t,n,r);case`reset`:return await md(t,n,r);case`config`:return await al(t,n,r);case`tag`:return await hf(t,n,r);case`ls-files`:return await Du(t,n,r);case`ls-tree`:return await Mu(t,n,r);case`show-ref`:return await Ad(t,n,r);case`symbolic-ref`:return await mf(t,n,r);case`stash`:return await Fd(t,n,r);case`rm`:return await Td(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await bd(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 Qs({cliWhen:Js(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&Yf(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?Yf(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?Yf(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,qf),r=t;for(let e of Jf(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of Jf(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 ${Wt()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
|
|
120
120
|
|
|
121
121
|
Available commands:
|
|
122
122
|
init Initialize a new repository
|
|
@@ -155,7 +155,7 @@ Available commands:
|
|
|
155
155
|
${t}
|
|
156
156
|
}
|
|
157
157
|
${ip}=$? ${rp}="\${PIPESTATUS[*]}"`:e}function sp(e){let t=0;for(let n=e.length-1;n>=0&&e[n]===`\\`;n--)t+=1;return t%2==0?e:`${e}\\`}function cp(e){if(!e)return[];let t=e.trim().split(/\s+/).filter(Boolean);if(t.length===0)return[];let n=[];for(let e of t){if(!ap.test(e))return[];let t=Number(e);if(t>255)return[];n.push(t)}return n}function lp(e,t){return t?op(e):e}function up(e,t){if(!t||!e.env)return e;let n=fp(e.env),r=n.exitCode===void 0?e:{...e,exitCode:n.exitCode};return n.pipeStatus.length===0?r:{...r,pipeStatus:n.pipeStatus}}function dp(e,t){return t===void 0?e:{...e,pipeStatus:t}}function fp(e){let t=e[rp],n=e[ip];delete e[rp],delete e[ip];let r;if(n!==void 0&&ap.test(n)){let e=Number(n);e<=255&&(r=e)}return{pipeStatus:cp(t),exitCode:r}}function pp(e){return e.length<2||e.every(e=>e===0)||!e.every(e=>Number.isInteger(e)&&e>=0&&e<=255)?null:`pipeline: ${e.join(` `)}`}function mp(e,t){let n=t?pp(t):null;return n?e?e.endsWith(`
|
|
158
|
-
`)?`${e}${n}`:`${e}\n${n}`:n:e}var hp=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=xe();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:
|
|
158
|
+
`)?`${e}${n}`:`${e}\n${n}`:n:e}var hp=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=xe();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:ms,progress:e}]})}}scrubbed(e){return this.scrubLabel?gp(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=_p(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:_p(i)})})}};async function gp(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function _p(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function vp(e,t){return t.length?`${e} ${t.join(` `)}`:e}function yp(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function bp(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:yp(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 xp={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}},Sp=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function Cp(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 wp(e,t){switch(e.type){case`CommandSubstitution`:return Fp(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=wp(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function Tp(e,t){let n=0;for(let r of e.parts){let e=wp(r,t);if(e===null)return null;n+=e}return n}function Ep(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=Tp(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=Tp(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=Cp(e.name);if(r===null||Sp.has(r))return null;if(!t.has(r))return n;n+=1;let i=xp[r];if(i){let r=e.args.map(Cp);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(Sp.has(a))return null;t.has(a)&&(n+=1)}return n}function Dp(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 Op(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||Cp(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=Cp(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 kp(e){let t=0;for(let n of e){let e=n.type===`Word`?Ap(n.word):Dp(n);if(e===null)return null;t+=e}return t}function Ap(e){let t=Op(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=kp(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function jp(e){let t=0;for(let n of e){let e=Ap(n);if(e===null)return null;t+=e}return t}function Mp(e,t){let n=0;for(let r of e){let e=Pp(r,t);if(e===null)return null;n+=e}return n}function Np(e,t){switch(e.type){case`SimpleCommand`:return Ep(e,t);case`For`:{if(!e.words)return null;let n=jp(e.words),r=Mp(e.body,t);return n===null||r===null?null:e.words.filter(e=>Op(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return Mp(e.body,t);case`FunctionDef`:return 0;default:return null}}function Pp(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=Np(e,t);if(r===null)return null;n+=r}return n}function Fp(e,t){return Mp(e.statements,t)}function Ip(e,t){let n=Fp(e,t);return{totalSteps:n!==null&&n>0?n:null}}function Lp(e){return e.split(`
|
|
159
159
|
`).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var Rp=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 zp=globalThis.setTimeout.bind(globalThis);function Bp(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function Vp(e,t={}){let n=t.now??Date.now,r=t.setTimeout??zp,i=t.isAborted??(()=>!1),a=t.label??Bp,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 Hp=globalThis.setTimeout.bind(globalThis);function Up(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 Wp(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 Gp(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??Hp;return{...e,async execute(n,a){let o=Wp(n),s=o>=0?Up(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=vp(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 Kp=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 qp(e,t,n={}){if((n.skip??Kp).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=vp(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 Jp=new Map([[`jsh`,`node`]]);function Yp(e,t){return`${Jp.get(e)??e} ${t.join(` `)}`.trim()}function Xp(e){return ct(`sudo`,e)}async function Zp(e,t){let n=e.trim();if(!n||rt(tt(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:Xp(r)};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}function Qp(e){let t=e.replace(/\s+/g,` `).trim();if(t.length<=300)return t;let n=Array.from(t);return n.length<=300?t:`${n.slice(0,299).join(``).trimEnd()}…`}const $p=`__SLICC_SUDO_REASON`,em=/^#!/;function tm(e){let t=[];for(let n of e.split(`
|
|
160
160
|
`)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(em.test(e))continue;let r=e.replace(/^#+/,``).trim();r&&t.push(r)}return Qp(t.join(` `))}const nm={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 rm(e,t=[],n){let r=nm[e],i=t.length?` data-action-data='${JSON.stringify({filters:t}).replace(/'/g,`'`)}'`:``,a=e===`directory`&&n?`<div class="sprinkle-action-card__meta">Target: ${vt(n)}</div>`:``;return`
|
|
161
161
|
<div class="sprinkle-action-card">
|
|
@@ -168,10 +168,10 @@ ${ip}=$? ${rp}="\${PIPESTATUS[*]}"`:e}function sp(e){let t=0;for(let n=e.length-
|
|
|
168
168
|
<button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="${e}"${i}>${r.approve}</button>
|
|
169
169
|
</div>
|
|
170
170
|
</div>
|
|
171
|
-
`}const im=Symbol(`mount:timeout`),am=Symbol(`mount:no-panel`);async function om(e,t){let n=Se.generateId(),r=!1,i=!1,a=Ce({id:n,html:rm(`directory`,[],t),onAction:(e,t)=>sm(e,t)},e.onUpdate).catch(e=>{if(r)return im;if(i)return am;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Se.cancel(n,`mount: timed out`),e(im)},3e5)}),c=new Promise(e=>{Se.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Se.cancel(n,`mount: panel did not render the approval card`),e(am))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===im)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===am)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 sm(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await Tt(n.idbKey);return e?(await Ct(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 cm(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function lm(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function um(e){for(let t of e.args){let e=cm(t);if(e===`-o`||e===`--out`)return!0}return!1}function dm(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 fm(e){cm(e.name)!==`say`||um(e)||(e.args=[lm(`-o`),lm(`-`),...e.args])}function pm(e,t){if(Array.isArray(e)){for(let n of e)pm(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`&&dm(r);r?.type===`SimpleCommand`&&a&&fm(r),pm(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){pm(n.body,!0);return}for(let e of Object.values(n))pm(e,t)}const mm={name:`say-stdio`,transform(e){return pm(e.ast,!1),{ast:e.ast}}};function hm(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function gm(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function _m(e){return e.map(e=>{let t=e.boost?parseFloat(e.boost):NaN,n=Number.isFinite(t)?t:void 0;return{name:e.name,displayName:e.displayName||e.name,description:e.description||``,source:{repo:e.repo,path:e.path||void 0,skill:e.skill||void 0,installAll:gm(e.installAll)},affinity:{apps:hm(e.apps),tasks:hm(e.tasks),role:hm(e.role),purpose:hm(e.purpose)},priority:n}})}const vm={apps:3,tasks:2,role:1,purpose:1};function ym(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*vm.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*vm.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=vm.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=vm.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 bm(e){let t=`upskill ${e.repo}`;return e.path&&(t+=` --path ${e.path}`),e.installAll?t+=` --all`:e.skill&&(t+=` --skill ${e.skill}`),t}async function xm(e){let t=new Set;try{let n=await e.readDir(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 Sm(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 Cm(e){return typeof e!=`string`||!e?null:v(e)||null}function wm(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 Tm(e,t){try{let n=Cm(t);if(!n)return[];let r=await e(`${si}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?_m(ue(r.body).data):[]}catch{return[]}}async function Em(e){let t;try{t=await e(ci,{headers:{Accept:`application/json`}})}catch(e){throw Error(_i(e,ci))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return _m(ue(t.body).data)}function Dm(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 Om(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 Oi(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 km(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 ki(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 Di(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 Am(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 Om(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=Dm(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 Oi(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 jm(e,t,n,r,i,a,o,s,c,l){let u=await vi(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 km(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 Di(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 Mm(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 Nm(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=Sm(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=Sm(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([Em(t),Tm(t,a.company),xm(e)]);o=wm(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${ci}: ${e instanceof Error?e.message:String(e)}`])}let c=ym(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=Mm(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await hi(a,o,t);return c.status===`error`?jm(n,i,a,o,d,u,r,s,t,e):Am(n,i,ui(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Ti(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function Pm(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let Fm,Im;async function Lm(e){if(Fm)return Fm;if(Im!==void 0)return Im;Im=(async()=>{let t;try{t=await e(li,{headers:{Accept:`application/json`}})}catch(e){throw Error(_i(e,li))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=ue(t.body),r=Array.isArray(n)?n:n.skills??[];return Fm=r,r})();try{return await Im}catch(e){throw Im=void 0,e}}async function Rm(e,t){let n=await Lm(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 zm=/^[A-Za-z0-9._-]+$/;function Bm(e){return!e||e===`.`||e===`..`?!1:zm.test(e)}function Vm(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(`/`)||!Bm(r)||!Bm(i))return null;let a=Pm(r);return Bm(a)?{hostname:a,task:i}:null}function Hm(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 Um(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(`
|
|
171
|
+
`}const im=Symbol(`mount:timeout`),am=Symbol(`mount:no-panel`);async function om(e,t){let n=Se.generateId(),r=!1,i=!1,a=Ce({id:n,html:rm(`directory`,[],t),onAction:(e,t)=>sm(e,t)},e.onUpdate).catch(e=>{if(r)return im;if(i)return am;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Se.cancel(n,`mount: timed out`),e(im)},3e5)}),c=new Promise(e=>{Se.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Se.cancel(n,`mount: panel did not render the approval card`),e(am))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===im)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===am)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 sm(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await Tt(n.idbKey);return e?(await Ct(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 cm(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function lm(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function um(e){for(let t of e.args){let e=cm(t);if(e===`-o`||e===`--out`)return!0}return!1}function dm(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 fm(e){cm(e.name)!==`say`||um(e)||(e.args=[lm(`-o`),lm(`-`),...e.args])}function pm(e,t){if(Array.isArray(e)){for(let n of e)pm(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`&&dm(r);r?.type===`SimpleCommand`&&a&&fm(r),pm(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){pm(n.body,!0);return}for(let e of Object.values(n))pm(e,t)}const mm={name:`say-stdio`,transform(e){return pm(e.ast,!1),{ast:e.ast}}};function hm(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function gm(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function _m(e){return e.map(e=>{let t=e.boost?parseFloat(e.boost):NaN,n=Number.isFinite(t)?t:void 0;return{name:e.name,displayName:e.displayName||e.name,description:e.description||``,source:{repo:e.repo,path:e.path||void 0,skill:e.skill||void 0,installAll:gm(e.installAll)},affinity:{apps:hm(e.apps),tasks:hm(e.tasks),role:hm(e.role),purpose:hm(e.purpose)},priority:n}})}const vm={apps:3,tasks:2,role:1,purpose:1};function ym(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*vm.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*vm.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=vm.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=vm.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 bm(e){let t=`upskill ${e.repo}`;return e.path&&(t+=` --path ${e.path}`),e.installAll?t+=` --all`:e.skill&&(t+=` --skill ${e.skill}`),t}async function xm(e){let t=new Set;try{let n=await e.readDir(oi);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 Sm(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 Cm(e){return typeof e!=`string`||!e?null:v(e)||null}function wm(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 Tm(e,t){try{let n=Cm(t);if(!n)return[];let r=await e(`${ci}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?_m(ue(r.body).data):[]}catch{return[]}}async function Em(e){let t;try{t=await e(li,{headers:{Accept:`application/json`}})}catch(e){throw Error(vi(e,li))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return _m(ue(t.body).data)}function Dm(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 Om(e,t,n,r,i,a,o,s,c){let l=e.entry.source,u=l.path.replace(/^\/|\/$/g,``),d=o<s?` (~${Math.round((s-o)*(Date.now()-c)/o/1e3)}s remaining)`:``,f=[];for(let[e,t]of r)(t===u||t.startsWith(`${u}/`))&&f.push({name:e,path:t});if(f.length===0){let n=`no skills found under "${l.path}" in ${t}`;return{results:[{ok:!1,name:e.entry.name,error:n}],line:`[${o}/${s}] Failed "${e.entry.name}" bundle from ${t}: ${n}${d}\n`}}let p=Date.now(),m=0,h=0,g=[];for(let e of f){if(i.has(e.name))continue;let t=await ki(e.path,e.name,n,a,!1);t.ok?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.error}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${o}/${s}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${o}/${s}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${o}/${s}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function km(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 Ai(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 Oi(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 Am(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 Om(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=Dm(d,e,c);if(`error`in f){l.push({ok:!1,name:d.entry.name,error:f.error}),r.count++;let t=r.count<i?` (~${Math.round((i-r.count)*(Date.now()-a)/r.count/1e3)}s remaining)`:``;u+=`[${r.count}/${i}] Failed "${d.entry.name}" from ${e}: ${f.error}${t}\n`;continue}let{skillPath:p,skillName:m}=f,h=Date.now(),g=await ki(p,m,n,s,!1);r.count++;let _=((Date.now()-h)/1e3).toFixed(1),v=(Date.now()-a)/r.count,ee=Math.round((i-r.count)*v/1e3),te=r.count<i?` (~${ee}s remaining)`:``;g.ok?(l.push({ok:!0,name:m}),u+=`[${r.count}/${i}] Installed "${m}" from ${e} (${_}s)${te}\n`):(l.push({ok:!1,name:m,error:g.error}),u+=`[${r.count}/${i}] Failed "${m}" from ${e}: ${g.error}${te}\n`)}return{errors:[],results:l,output:u}}async function jm(e,t,n,r,i,a,o,s,c,l){let u=await yi(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 km(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 Oi(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 Mm(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 Nm(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=Sm(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=Sm(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([Em(t),Tm(t,a.company),xm(e)]);o=wm(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${li}: ${e instanceof Error?e.message:String(e)}`])}let c=ym(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=Mm(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await gi(a,o,t);return c.status===`error`?jm(n,i,a,o,d,u,r,s,t,e):Am(n,i,di(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Ei(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function Pm(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let Fm,Im;async function Lm(e){if(Fm)return Fm;if(Im!==void 0)return Im;Im=(async()=>{let t;try{t=await e(ui,{headers:{Accept:`application/json`}})}catch(e){throw Error(vi(e,ui))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=ue(t.body),r=Array.isArray(n)?n:n.skills??[];return Fm=r,r})();try{return await Im}catch(e){throw Im=void 0,e}}async function Rm(e,t){let n=await Lm(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 zm=/^[A-Za-z0-9._-]+$/;function Bm(e){return!e||e===`.`||e===`..`?!1:zm.test(e)}function Vm(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(`/`)||!Bm(r)||!Bm(i))return null;let a=Pm(r);return Bm(a)?{hostname:a,task:i}:null}function Hm(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 Um(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(`
|
|
172
172
|
`)}function Wm(e){return e.replace(/(?:^|\n)> \[!NOTE\] \*\*Imported from browse\.sh\*\*[\s\S]*?(?:\n\n|$)/,`
|
|
173
173
|
`)}function Gm(e,t){let n=e.match(/^(---\r?\n[\s\S]*?\r?\n---)(\r?\n|$)/);return n?`${n[1]}${n[2]||`
|
|
174
|
-
`}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function Km(e,t,n){let r=`${e}/${t}`,i=`${
|
|
174
|
+
`}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function Km(e,t,n){let r=`${e}/${t}`,i=`${ui}/${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=ue(e.body)}catch(e){return{ok:!1,error:`failed to fetch browse.sh skill "${r}": ${vi(e,i)}`}}let o;if(a.skillMdUrl)try{let e=await n(a.skillMdUrl,{headers:{Accept:`text/plain`}});e.status===200&&(o=de(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=Hm(o,`name`),c=t.replace(/-[A-Za-z0-9]{4,8}$/,``),l=s||c||t;if(!Bm(l)||l.length>64)return{ok:!1,error:`refusing to install browse.sh skill with unsafe name "${l}"`};if(!Bm(e))return{ok:!1,error:`refusing to install browse.sh skill with unsafe hostname "${e}"`};let u=Um(a,r);return{ok:!0,dirName:`browse-${e}-${l}`,slug:r,content:Gm(o,u)}}async function qm(e,t,n,r,i=!1){let a=await Km(e,t,r);if(!a.ok)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let{dirName:o,slug:s,content:c}=a,l=`${oi}/${o}`;try{if(await n.stat(l),!i)return{stdout:``,stderr:`upskill: skill "${o}" already exists (use --force to overwrite)\n`,exitCode:1};await _i(n,l,await ji(n,o))}catch{}return await n.mkdir(l,{recursive:!0}),await n.writeFile(`${l}/SKILL.md`,c),await Si(n,o,{kind:`browse.sh`,source:s,skill:o,files:[`SKILL.md`]}),await Ei(),{stdout:`Installed skill "${o}" from browse.sh (${s})\n`,stderr:``,exitCode:0}}function Jm(){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 Ym(e){switch(e){case`native`:return`native`;case`agents`:return`.agents`;case`claude`:return`.claude`;case`marketplace`:return`marketplace`;case`plugin`:return`plugin`}}function Xm(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)} ${Ym(t.source).padEnd(11)} ${i}\n`}return o+=`\n${Jm()}`,o}function Zm(e){let t=`Skill: ${e.name}\n`;if(t+=`Description: ${e.description||`(none)`}\n`,t+=`Source: ${Ym(e.source)}\n`,t+=`Source root: ${e.sourceRoot}\n`,e.skillFilePath&&(t+=`Instructions: ${e.skillFilePath}\n`),e.shadowedPaths?.length){t+=`Shadowed paths:
|
|
175
175
|
`;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function Qm(){return{stdout:`usage: upskill <command> [options]
|
|
176
176
|
|
|
177
177
|
Install skills from GitHub repositories, the Tessl registry, or browse.sh.
|
|
@@ -279,18 +279,18 @@ Examples:
|
|
|
279
279
|
skill list
|
|
280
280
|
skill info bluebubbles
|
|
281
281
|
skill read bluebubbles
|
|
282
|
-
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-
|
|
282
|
+
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-qQGHaMnf.js`).then(e=>e.n);try{switch(r){case`list`:return $m(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
|
|
283
283
|
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Zm(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
|
|
284
284
|
`,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+`
|
|
285
|
-
`,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 th=[{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=>
|
|
285
|
+
`,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 th=[{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=>Di(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 nh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=th.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 rh(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function ih(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 ah(e,t,n,r){let i=await ih(e,t);return pi(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?rh(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function oh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await ah(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 mi(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 sh(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 yi(t),d=await xi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await ch(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await lh(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 oh(e,`${oi}/${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 mh(e,{changes:h,writes:g,removals:_}),await Si(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 ch(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 lh(e,t,n,r,i,a,o){let s=await gi(e,t,a,i??`main`);if(s.status===`ok`){let i=di(s.files),a=n||uh(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:ph(i,a),path:a}}try{return{files:fh(dh(await hi(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 uh(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 dh(e){return new Map([...e].filter(([e])=>fi(e)))}function fh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function ph(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);fi(e)&&r.set(e,i)}return fh(r)}async function mh(e,t){for(let n of t.writes){let t=n.path.slice(0,n.path.lastIndexOf(`/`));await e.mkdir(t,{recursive:!0}),await e.writeFile(n.path,n.content)}for(let n of t.removals)await e.rm(n).catch(()=>{})}async function hh(e,t,n,r,i){let a={skill:n,source:`${r.kind}:${r.source}`,outcome:`current`,changes:[]},[o,s]=r.source.split(`/`);if(!o||!s)return{...a,outcome:`error`,error:`unusable source "${r.source}"`};let c=await Km(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${oi}/${n}/SKILL.md`,u=await ih(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&Wm(new TextDecoder().decode(u))===Wm(c.content);if(rh(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${oi}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Si(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function gh(e,t){if(e.outcome===`error`)return` ${e.skill}: failed — ${e.error}\n`;let n=new Map;for(let t of e.changes)n.set(t.status,(n.get(t.status)??0)+1);let r=e.to&&e.to!==e.from?` → ${e.to.slice(0,7)}`:``;if(e.outcome===`current`)return` ${e.skill}: already current (${e.source}${r})\n`;let i=t?`would update`:`updated`,a=` ${e.skill}: ${i} from ${e.source}${r}\n`;for(let t of e.changes)t.status!==`unchanged`&&(a+=` ${t.status.padEnd(10)} ${t.path}\n`);let o=n.get(`kept-local`)??0;return o>0&&(a+=` (${o} kept-local — dotfiles and local additions are never touched)\n`),a}function _h(e,t,n,r){let i=Di(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 vh(e,t,n){if(t.length===0){let t=await bi(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await Ci(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?_h(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 yh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
|
|
286
286
|
`:`upskill: no install provenance for "${e.name}" — re-run with --from <owner>/<repo> (optionally --path <dir>) to record its source, or reinstall it once
|
|
287
287
|
`}function bh(e,t){return`${e} ${t}${e===1?``:`s`}`}function xh(e){return`\nSkipped ${bh(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.
|
|
288
288
|
For the rest, record a source once with \`upskill update <skill> --from <owner>/<repo> --dry-run\`,
|
|
289
289
|
after which a bare \`upskill update\` sweeps them too.
|
|
290
290
|
`}function Sh(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
|
|
291
291
|
`:`Skill update:
|
|
292
|
-
`;for(let n of e)a+=gh(n,t);if(i.length>0&&(a+=xh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${bh(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 Ch(e,t,n){let{targets:r,missing:i,skipped:a}=await vh(e,n.skills,{skills:n.skills,dryRun:n.dryRun,json:!1,branch:n.branch,from:n.from,path:n.path}),o=[];for(let i of r)o.push(i.provenance.kind===`browse.sh`?await hh(e,t,i.name,i.provenance,n.dryRun):await sh(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function wh(e,t,n){let r=nh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await Ch(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`:Sh([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(yh).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
|
|
293
|
-
`)}\n`}async function Oh(e,t,n){let r=await(await import(`./kernel-worker-
|
|
292
|
+
`;for(let n of e)a+=gh(n,t);if(i.length>0&&(a+=xh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${bh(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 Ch(e,t,n){let{targets:r,missing:i,skipped:a}=await vh(e,n.skills,{skills:n.skills,dryRun:n.dryRun,json:!1,branch:n.branch,from:n.from,path:n.path}),o=[];for(let i of r)o.push(i.provenance.kind===`browse.sh`?await hh(e,t,i.name,i.provenance,n.dryRun):await sh(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function wh(e,t,n){let r=nh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await Ch(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`:Sh([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(yh).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 Ei();let l=a.map(yh).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:Sh(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function Th(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 Eh(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 Dh(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}${Eh(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(`
|
|
293
|
+
`)}\n`}async function Oh(e,t,n){let r=await(await import(`./kernel-worker-qQGHaMnf.js`).then(e=>e.n)).discoverSkills(e),{collisions:i}=await Wn(e,Vn(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${Jm()}`,stderr:``,exitCode:0}:{...Gn(`upskill`,Xm(r,`Discoverable local skills`),i,{builtinNames:new Set(Xe())}),exitCode:0}}async function kh(e,t,n){let{results:r,skipped:i}=await Ch(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:Dh(r,i),stderr:c,exitCode:+!s}}async function Ah(e,t,n,r){let i=Th(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?kh(t,n,i.json):Oh(t,i.json,r)}async function jh(e,t){let n=`${si}/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(vi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=ue(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=Ti(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 Mh(e,t){let n=`${si}/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: ${vi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=ue(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=Ti(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 Nh=[{label:`Tessl`,host:new URL(si).host,fetch:jh},{label:`browse.sh`,host:new URL(ui).host,fetch:Rm}];function Ph(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 Fh(e,t,n=1){let r=await Promise.allSettled(Nh.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Ph(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Nh[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+=`
|
|
294
294
|
`}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:
|
|
295
295
|
`,p+=` From Tessl: upskill <owner/repo> --skill <name>
|
|
296
296
|
`,p+=` From browse.sh: upskill browse:<hostname>/<task>
|
|
@@ -306,16 +306,16 @@ Examples:
|
|
|
306
306
|
`,stderr:o,exitCode:0};let l=``;for(let e of c)l+=zh(e);return{stdout:l,stderr:o,exitCode:0}}async function Vh(e,t,n){if(n){let n=await Nm(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.
|
|
307
307
|
`,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.
|
|
308
308
|
`,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.
|
|
309
|
-
`,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(
|
|
309
|
+
`,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(li,{headers:{Accept:`application/json`}});if(e.status!==200)throw Error(`HTTP ${e.status}`);return _m(ue(e.body).data)})(),Tm(t,r.company),xm(e)]);i=wm(n,o),a=s}catch(e){return{stdout:``,stderr:`upskill: failed to fetch skill catalog from ${li}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let o=ym(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.
|
|
310
310
|
`,stderr:``,exitCode:0};let s=`Recommended skills for you:
|
|
311
311
|
|
|
312
312
|
`,c=0;for(let e of o){c++;let t=bm(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
|
|
313
313
|
`,{stdout:s,stderr:``,exitCode:0}}function Hh(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
|
|
314
314
|
`,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
|
|
315
315
|
`,exitCode:1}}function Uh(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
|
|
316
|
-
`,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=Hh(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 Wh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-
|
|
317
|
-
`,stderr:``,exitCode:0}}async function Gh(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
|
|
318
|
-
`,exitCode:1};let a=await Mh(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await
|
|
316
|
+
`,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=Hh(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 Wh(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-qQGHaMnf.js`).then(e=>e.n);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 Ci(n,t),a=i?wi(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Zm(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+`
|
|
317
|
+
`,stderr:``,exitCode:0}}async function Gh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await ki(p.path,p.name,r,i,a,s?{...s,path:p.path}:void 0),h=f+1,g=((Date.now()-o)/1e3).toFixed(1),_=(Date.now()-o)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.ok?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.error}${v}\n`,l+=`upskill: ${m.error}\n`)}return{output:c,errors:l,successCount:u}}async function Kh(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 Oi(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 qh(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Oi(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 Jh(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 Yh(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await yi(r),l=await Ai(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:Jh(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:Jh(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 gi(i,a,r,o);if(e.status===`ok`){let r=await xi(i,a,o,c,!0,s),l=await Gh(u,i,a,di(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 Kh(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await qh(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 Ei()),{stdout:p,stderr:m,exitCode:+!!m}}async function Xh(e,t,n,r,i){switch(e[0]){case`tabs`:return Bh(t,n,r,e.includes(`--json`));case`recommendations`:return Vh(t,n,e.includes(`--install`));case`update`:case`upgrade`:return wh(e.slice(1),t,n);case`list`:return Ah(e.slice(1),t,n,i);case`info`:case`read`:return Wh(e[0],e[1],t);case`search`:return Qh(e,n);default:return null}}function Zh(e,t,n){return S(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Qm();let a=await Xh(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Uh(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Qm();if(o.sourceRef.startsWith(`tessl:`))return $h(o.sourceRef,o.force,e,t);let s=Vm(o.sourceRef);if(s)return qm(s.hostname,s.task,e,t,o.force);let c=Di(o.sourceRef);return c?Yh(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 Qh(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?Fh(a,t,i):Qm()}async function $h(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
|
|
318
|
+
`,exitCode:1};let a=await Mh(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await yi(r);return Oi(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function eg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
|
|
319
319
|
|
|
320
320
|
Plays an audio file using the Web Audio API.
|
|
321
321
|
-v volume Volume level (0 to 1, default 1)
|
|
@@ -427,7 +427,7 @@ Examples:
|
|
|
427
427
|
`)+`
|
|
428
428
|
`}function d_(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 f_=new Set([`check`,`lint`,`format`]);function p_(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===`
|
|
429
429
|
`&&l++;let u=c.lastIndexOf(`
|
|
430
|
-
`),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 m_=`2.5.13`,h_=`6.0.0`,g_=
|
|
430
|
+
`),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 m_=`2.5.13`,h_=`6.0.0`,g_=Jr,__=`@biomejs/wasm-web@${m_} @biomejs/js-api@${h_} esbuild-wasm@${g_}`,v_={"@biomejs/wasm-web":`@biomejs/wasm-web@${m_}`,"@biomejs/js-api":`@biomejs/js-api@${h_}`,"esbuild-wasm":`esbuild-wasm@${g_}`},y_=`run: ${N} ${__} (no network fallback)`,b_=`biome - thin wrapper over the ipk-loaded @biomejs/wasm-web
|
|
431
431
|
|
|
432
432
|
Usage:
|
|
433
433
|
biome <subcommand> [options] [files...]
|
|
@@ -627,7 +627,7 @@ Usage: cherry-emit <name> [--detail <json>] [--runtime <id>]
|
|
|
627
627
|
-o Force paste mode (write to stdout)
|
|
628
628
|
(default) Auto-detect: stdin present = copy, no stdin = paste
|
|
629
629
|
Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function rv(e,t){let n=!!globalThis.navigator?.clipboard,r=n?null:y();if(!n&&!r)return{stdout:``,stderr:`${t}: clipboard API is unavailable\n`,exitCode:1};try{return n?await navigator.clipboard.writeText(e):await r.call(`clipboard-write-text`,{text:e}),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${t}: failed to write to clipboard: ${$_(e)}\n`,exitCode:1}}}async function iv(e){let t=!!globalThis.navigator?.clipboard,n=t?null:y();if(!t&&!n)return{stdout:``,stderr:`${e}: clipboard API is unavailable\n`,exitCode:1};try{return{stdout:t?await navigator.clipboard.readText():(await n.call(`clipboard-read-text`,void 0)).text,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: failed to read from clipboard: ${$_(t)}\n`,exitCode:1}}}function av(){return S(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?ev():rv(P(t.stdin),`pbcopy`))}function ov(){return S(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?tv():iv(`pbpaste`))}function sv(e){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return nv(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 iv(e);let a=P(n.stdin);return r||a.length>0?rv(a,e):iv(e)})}function cv(){return S(`cmp`,async(e,t)=>{let n=e.some(e=>e===`-s`||e===`--quiet`||e===`--silent`),r=e.filter(e=>![`-s`,`--quiet`,`--silent`].includes(e));if(r.length!==2||r.some(e=>e.startsWith(`-`)&&e!==`-`))return{stdout:``,stderr:`cmp: usage: cmp [-s|--quiet|--silent] FILE1 FILE2
|
|
630
|
-
`,exitCode:2};let i=await lv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await lv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=uv(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 lv(e,t){if(t===`-`){let t
|
|
630
|
+
`,exitCode:2};let i=await lv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await lv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=uv(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 lv(e,t){if(t===`-`){let t=ei(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 uv(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 dv(e={}){return S(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-B0N83lIB.js`).then(e=>e.t);return r(t,n,e)})}var fv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function pv(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 mv(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 hv=`AdobeClean-Regular.otf`,gv=new WeakSet;let _v=null;function vv(){return{stdout:`usage: convert [input ...] [operations...] [output]
|
|
631
631
|
|
|
632
632
|
Operations:
|
|
633
633
|
-resize GEOMETRY resize; supports %, !, ^, >, and < modifiers
|
|
@@ -668,7 +668,7 @@ suffix (0-based, as ImageMagick does); page 0 is used when none is given:
|
|
|
668
668
|
convert -density 150 doc.pdf page0.png
|
|
669
669
|
convert doc.pdf[2] -resize 800x page3.png
|
|
670
670
|
Use pdftoppm to rasterize a whole document in one pass.
|
|
671
|
-
`,stderr:``,exitCode:0}}const yv=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 bv=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):yv.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:xv(n),operations:[]}),this.index++}readOperation(e,t,n){let r=yv.get(n),i=this.tokens.slice(this.index+1,this.index+1+r);if(i.length!==r||i.some(e=>wv(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=Cv(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 xv(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 Sv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=yv.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(wv(t))throw Error(`expected an output file`);return{expression:new bv(e.slice(0,-1)).parse(),outputPath:t}}function Cv(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function wv(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||yv.has(e)}const Tv=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,Ev=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function Dv(e,t,n){if(!(n===`resize`||n===`thumbnail`?Tv:Ev).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function Ov(e,t,n){t.resize(Dv(e,n,`resize`))}function kv(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function Av(e,t,n,r){let i=Dv(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function jv(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 Mv={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function Nv(e,t){let n=Mv[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const Pv={"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 Fv(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function Iv(e,t,n){let r=Fv(t),i=Object.entries(e).find(([e])=>Fv(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function Lv(e,t,n,r){let i=Dv(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 Rv(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 zv(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(hv),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function Bv(e){if(gv.has(e.Magick))return;let t=_v??=fetch(fv).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(hv,await t),gv.add(e.Magick)}catch(e){throw _v===t&&(_v=null),e}}function Vv(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(Vv)}function Hv(e,t,n,r){let i=Pv[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:Ov(e,t,n.value);return;case`thumbnail`:t.thumbnail(Dv(e,n.value,`thumbnail`));return;case`rotate`:kv(t,n.value);return;case`crop`:Av(e,t,n.value,r.gravity);return;case`quality`:jv(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:Lv(e,t,n.value,r);return;case`alpha`:t.alpha(Iv(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=Iv(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...Rv(n.value,`blur`));return;case`sharpen`:t.sharpen(...Rv(n.value,`sharpen`));return;case`gravity`:r.gravity=Nv(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`:zv(e,t,n,r);return}}function Uv(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:Nv(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 Wv(e,t,n){let r={};for(let i of n)Hv(e,t,i,r)}function Gv(e,t){let n=null,r=mv(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function Kv(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await qv(e,t.children[a],n,async o=>{i.push(o),await Kv(e,t,n,r,i,a+1),i.pop()})}async function qv(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{Wv(e,n,t.operations),await r(n)});return}await Kv(e,t,n,async n=>{Uv(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=>{Wv(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function Jv(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function Yv(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=Jv(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)),Pi(s)){let t=await Fi(s,(a??0)+1,{scale:Ii(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await Yv(i,t,n,r);return n}function Xv(e=`convert`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return vv();let r;try{r=Sv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await Yv(r.expression,n),t=await ji({ipk:pv(n)});Vv(r.expression)&&await Bv(t);let i=null;if(await qv(t,r.expression,e,async e=>{i=Gv(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 Zv(){return globalThis.__slicc_lickManager??null}let Qv=null;async function $v(){if(Qv)return Qv;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return Qv=e(),Qv}async function ey(){let e=Zv();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(_e())return null;let t=await $v(),{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 ny(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 ry(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function iy(){return{stdout:`usage: crontask <command> [options]
|
|
671
|
+
`,stderr:``,exitCode:0}}const yv=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 bv=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):yv.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:xv(n),operations:[]}),this.index++}readOperation(e,t,n){let r=yv.get(n),i=this.tokens.slice(this.index+1,this.index+1+r);if(i.length!==r||i.some(e=>wv(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=Cv(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 xv(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 Sv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=yv.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(wv(t))throw Error(`expected an output file`);return{expression:new bv(e.slice(0,-1)).parse(),outputPath:t}}function Cv(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function wv(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||yv.has(e)}const Tv=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,Ev=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function Dv(e,t,n){if(!(n===`resize`||n===`thumbnail`?Tv:Ev).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function Ov(e,t,n){t.resize(Dv(e,n,`resize`))}function kv(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function Av(e,t,n,r){let i=Dv(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function jv(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 Mv={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function Nv(e,t){let n=Mv[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const Pv={"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 Fv(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function Iv(e,t,n){let r=Fv(t),i=Object.entries(e).find(([e])=>Fv(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function Lv(e,t,n,r){let i=Dv(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 Rv(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 zv(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(hv),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function Bv(e){if(gv.has(e.Magick))return;let t=_v??=fetch(fv).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(hv,await t),gv.add(e.Magick)}catch(e){throw _v===t&&(_v=null),e}}function Vv(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(Vv)}function Hv(e,t,n,r){let i=Pv[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:Ov(e,t,n.value);return;case`thumbnail`:t.thumbnail(Dv(e,n.value,`thumbnail`));return;case`rotate`:kv(t,n.value);return;case`crop`:Av(e,t,n.value,r.gravity);return;case`quality`:jv(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:Lv(e,t,n.value,r);return;case`alpha`:t.alpha(Iv(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=Iv(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...Rv(n.value,`blur`));return;case`sharpen`:t.sharpen(...Rv(n.value,`sharpen`));return;case`gravity`:r.gravity=Nv(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`:zv(e,t,n,r);return}}function Uv(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:Nv(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 Wv(e,t,n){let r={};for(let i of n)Hv(e,t,i,r)}function Gv(e,t){let n=null,r=mv(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function Kv(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await qv(e,t.children[a],n,async o=>{i.push(o),await Kv(e,t,n,r,i,a+1),i.pop()})}async function qv(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{Wv(e,n,t.operations),await r(n)});return}await Kv(e,t,n,async n=>{Uv(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=>{Wv(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function Jv(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function Yv(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=Jv(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)),Fi(s)){let t=await Ii(s,(a??0)+1,{scale:Li(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await Yv(i,t,n,r);return n}function Xv(e=`convert`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return vv();let r;try{r=Sv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await Yv(r.expression,n),t=await Mi({ipk:pv(n)});Vv(r.expression)&&await Bv(t);let i=null;if(await qv(t,r.expression,e,async e=>{i=Gv(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 Zv(){return globalThis.__slicc_lickManager??null}let Qv=null;async function $v(){if(Qv)return Qv;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return Qv=e(),Qv}async function ey(){let e=Zv();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(_e())return null;let t=await $v(),{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 ny(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 ry(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function iy(){return{stdout:`usage: crontask <command> [options]
|
|
672
672
|
|
|
673
673
|
Commands:
|
|
674
674
|
create [options] Create a new cron task
|
|
@@ -700,14 +700,14 @@ Examples:
|
|
|
700
700
|
crontask create --name every-5min --scoop poller --cron "*/5 * * * *" --filter "() => ({ time: Date.now() })"
|
|
701
701
|
crontask list
|
|
702
702
|
crontask delete abc123
|
|
703
|
-
`,stderr:``,exitCode:0}}async function ay(e,t,n){let r={method:e,headers:me({"Content-Type":`application/json`})};n&&(r.body=JSON.stringify(n));let i=await fetch(pe(`/api/crontasks${t}`),r),a=await i.json().catch(()=>({}));return{ok:i.ok,status:i.status,data:a}}const oy=[`--name`,`--cron`,`--filter`,`--scoop`];function sy(e){return{stdout:``,stderr:`crontask: ${e}\n`,exitCode:1}}async function cy(e,t,n){let r=C(e.slice(1),{value:oy});if(`error`in r)return sy(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=
|
|
703
|
+
`,stderr:``,exitCode:0}}async function ay(e,t,n){let r={method:e,headers:me({"Content-Type":`application/json`})};n&&(r.body=JSON.stringify(n));let i=await fetch(pe(`/api/crontasks${t}`),r),a=await i.json().catch(()=>({}));return{ok:i.ok,status:i.status,data:a}}const oy=[`--name`,`--cron`,`--filter`,`--scoop`];function sy(e){return{stdout:``,stderr:`crontask: ${e}\n`,exitCode:1}}async function cy(e,t,n){let r=C(e.slice(1),{value:oy});if(`error`in r)return sy(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=Ri(s,t),!i)return{stdout:``,stderr:`crontask: --name is required
|
|
704
704
|
`,exitCode:1};if(!a)return{stdout:``,stderr:`crontask: --cron is required
|
|
705
705
|
`,exitCode:1};let c=await ny(await ey(),`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)
|
|
706
706
|
`,exitCode:1};let e=await ey();if(!e)return ry(`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 ly(e){let t=`Active cron tasks:
|
|
707
707
|
`;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+=`
|
|
708
708
|
`;return t}async function uy(e,t){let n=C(e.slice(1),{});if(`error`in n)return sy(n.error);if(!t()){let e=await ey();if(!e)return ry(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
|
|
709
709
|
`,stderr:``,exitCode:0}:{stdout:ly(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
|
|
710
|
-
`,stderr:``,exitCode:0}:{stdout:ly(a),stderr:``,exitCode:0}}async function dy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return sy(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 ey();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}:ry(`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 fy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:oy}))return iy();try{switch(r){case`create`:return await cy(e,n.env,t);case`list`:return await uy(e,t);case`delete`:case`kill`:return await dy(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 py(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-
|
|
710
|
+
`,stderr:``,exitCode:0}:{stdout:ly(a),stderr:``,exitCode:0}}async function dy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return sy(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 ey();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}:ry(`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 fy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:oy}))return iy();try{switch(r){case`create`:return await cy(e,n.env,t);case`list`:return await uy(e,t);case`delete`:case`kill`:return await dy(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 py(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-Dgam-lSu.js`);return r(e,t,n)})}const my=`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===my)}catch{return!0}}async function gy(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(my)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function _y(){if(!await hy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await gy();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 vy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
|
|
711
711
|
|
|
712
712
|
Usage:
|
|
713
713
|
slicc-fs-cleanup Delete the legacy slicc-fs IDB.
|
|
@@ -733,7 +733,7 @@ Usage:
|
|
|
733
733
|
Read-only. See 'df --help' for the underlying command.
|
|
734
734
|
`}function Cy(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`,`TB`,`PB`],n=e/1024,r=0;for(;n>=1024&&r<t.length-1;)n/=1024,r++;return`${n>=100?n.toFixed(0):n>=10?n.toFixed(1):n.toFixed(2)} ${t[r]}`}function wy(e,t){return e===null?`unavailable`:t?Cy(e):`${e}`}async function Ty(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 Ey(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: ${wy(e.usage,t)}`,`Quota: ${wy(e.quota,t)}`,`Used: ${n}`,`Persisted: ${r}`,`Legacy IDB: ${i}`].join(`
|
|
735
735
|
`)}\n`}function Dy(e={}){return S(`df`,async t=>{if(t.includes(`--help`))return{stdout:xy(`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:Ey(await Ty(e),i),stderr:``,exitCode:0}})}function Oy(e={}){return S(`diskutil`,async t=>{if(t.includes(`--help`))return{stdout:Sy(),stderr:``,exitCode:0};let n=t[0];return n===`info`?{stdout:Ey(await Ty(e),!0),stderr:``,exitCode:0}:{stdout:``,stderr:n?`diskutil: unsupported subcommand: ${n} (try 'diskutil info')\n`:`diskutil: missing subcommand (try 'diskutil info')
|
|
736
|
-
`,exitCode:1}})}const ky=e(`di`),Ay=new WeakMap;async function jy(e,t){let n=Ay.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 ky.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${
|
|
736
|
+
`,exitCode:1}})}const ky=e(`di`),Ay=new WeakMap;async function jy(e,t){let n=Ay.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 ky.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${yr}pyodide-lock.json`,n;try{n=await t(e,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){return ky.error(`failed to fetch pyodide-lock.json from CDN`,e),null}if(n.status<200||n.status>=300)return ky.error(`pyodide-lock.json CDN fetch returned HTTP ${n.status}`),null;r=de(n.body)}let i;try{i=JSON.parse(r)}catch(e){return ky.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(gr(t.name??e),t);return Ay.set(e,a),a}async function My(e,t,n,r){let i=await jy(e,t);if(!i)return null;let a=i.get(gr(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:`${yr}${a.file_name}`}}function Ny(e,t){let n=`https://pypi.org/pypi/${encodeURIComponent(e)}`;return t?`${n}/${encodeURIComponent(t)}/json`:`${n}/json`}function Py(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 Fy(e,t,n){let r=`di: PyPI lookup for ${t}${n?`==${n}`:``}`,i=Ny(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(de(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=>Py(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 Iy=`/workspace/python_wheels`,Ly=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function Ry(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(),!Ly.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 zy(e){return e instanceof Error?e:Error(String(e))}async function By(e,t,n){return await My(e,t,n.name,n.version)||Fy(t,n.name,n.version)}async function Vy(e,t,n){let r=await By(e,t,n),i=await Or(t,{url:r.url,sha256:r.sha256,label:`di: download ${r.name}==${r.version}`});await e.mkdir(Iy,{recursive:!0});let a=x(Iy,r.fileName),o=!0;if(await e.exists(a)){let t=await e.readFile(a,{encoding:`binary`}),n=await mr(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 Hy(e,t,n,r){let i=await Sr(e,n),a=[],o=[];for(let n of r){let r;try{r=Ry(n)}catch(e){o.push({spec:n,error:zy(e)});continue}try{a.push(await Vy(e,t,r))}catch(e){o.push({spec:n,error:zy(e)})}}if(a.length>0){let t=await Tr(e,i),n=t.dependencies,r=await hr(e,i);for(let e of a)n=fr(n,e.name,e.version),r=Er(r,{name:e.name,version:e.version,source:e.source,fileName:e.fileName,sha256:e.sha256});await xr(e,i,{...t,dependencies:n}),await vr(e,i,r)}return{results:a,errors:o,manifestDir:i}}async function Uy(e,t){let n=await br(e,t);if(!n)return null;let r=await Tr(e,n),i=await hr(e,n),a=new Map(i.map(e=>[gr(e.name),e]));return r.dependencies.map(e=>{let{name:t,version:n}=_r(e),r=a.get(gr(t));return{name:t,version:n||r?.version||`?`,source:r?.source??`unknown`}})}const Wy=[];function Gy(e){return`${e} - minimal Python package manager (pure-Python + Pyodide wheels)
|
|
737
737
|
|
|
738
738
|
Usage:
|
|
739
739
|
${e} add <pkg>[@<version>] [<pkg> ...] resolve, stage, and record wheels
|
|
@@ -753,7 +753,7 @@ Anything else is not implemented in SLICC's ${e} subset; use real uv locally.
|
|
|
753
753
|
`}};let i=ab(r);return i?n.name?{error:ob(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 cb(e,t,n){return n.server?{error:{kind:`error`,message:`dig: multiple @server arguments
|
|
754
754
|
`}}:(n.server=e.slice(1).trim(),n.server?{nextIndex:t}:{error:{kind:`error`,message:`dig: empty @server argument
|
|
755
755
|
`}})}function lb(e,t,n){let r=e.trim(),i=r.toUpperCase(),a=n.name?.toUpperCase();if(tb.includes(i)&&!n.type&&n.name)n.type=i;else if(!n.name)n.name=r;else if(a&&tb.includes(a)&&!n.type)n.name=r,n.type=a;else return{error:ob(r)};return{nextIndex:t}}function ub(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`?sb(e,t,n):r.startsWith(`@`)?cb(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:lb(r,t,n)}function db(e){if(e.short&&e.json)return{kind:`error`,message:`dig: +short and --json are mutually exclusive
|
|
756
|
-
`};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${eb}\n`};let t=e.server?.toLowerCase(),n=t?nb[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 fb(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=ub(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return db(t)}const pb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},mb=new Set(`#/:<>?@[\\]^|`);function hb(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||mb.has(e))})}function gb(e){if(hb(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 _b(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(gb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function vb(e,t){let n=_b(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=pb[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 yb(e,n,r){return`${e}?dns=${t(vb(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function bb(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function xb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){bb(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){bb(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(bb(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
|
|
756
|
+
`};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${eb}\n`};let t=e.server?.toLowerCase(),n=t?nb[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 fb(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=ub(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return db(t)}const pb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},mb=new Set(`#/:<>?@[\\]^|`);function hb(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||mb.has(e))})}function gb(e){if(hb(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 _b(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(gb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function vb(e,t){let n=_b(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=pb[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 yb(e,n,r){return`${e}?dns=${t(vb(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function bb(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function xb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){bb(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){bb(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(bb(e,i+1,t),s+=t+1,s>255)throw Error(`DNS name too long`);n.push(new TextDecoder().decode(e.subarray(i+1,i+1+t))),i+=t+1}throw Error(`invalid DNS name`)}function R(e,t){return bb(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function Sb(e,t){return bb(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function Cb(e,t){let n=Array.from({length:8},(n,r)=>R(e,t+r*2)),r=-1,i=0;for(let e=0;e<n.length;){if(n[e]!==0){e+=1;continue}let t=e;for(;t<n.length&&n[t]===0;)t+=1;t-e>i&&([r,i]=[e,t-e]),e=t}let a=n.map(e=>e.toString(16));return i<2?a.join(`:`):`${a.slice(0,r).join(`:`)}::${a.slice(r+i).join(`:`)}`}function wb(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 Tb(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(bb(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(wb(e,r+1,r+1+t)),r+=t+1}return i.join(` `)}function Eb(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 Db(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 Cb(e,n)}if([2,5,12].includes(t)){let t=xb(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=xb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${R(e,n)} ${t.name}`}if(t===16)return Tb(e,n,r);if(t===6){let t=xb(e,n),i=xb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>Sb(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=xb(e,n+6);if(t.nextOffset!==r)throw Error(`invalid SRV record`);return`${R(e,n)} ${R(e,n+2)} ${R(e,n+4)} ${t.name}`}if(t===257)return Eb(e,n,r);let i=Array.from(e.subarray(n,r),e=>e.toString(16).padStart(2,`0`));return`\\# ${r-n} ${i.join(``)}`}function Ob(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=xb(e,a);a=t.nextOffset,bb(e,a,10);let n=R(e,a),o=R(e,a+2),s=Sb(e,a+4),c=R(e,a+8),l=a+10,u=l+c;bb(e,l,c);let d=Db(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 kb(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function Ab(e,t,n,r,i){let a=_b(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>kb(e)===kb(a[t])))||t!==pb[i]||n!==1)throw Error(`unexpected DNS response question`)}function jb(e,t,n){bb(e,0,12);let r=R(e,2);if(R(e,0)!==0||!(r&32768))throw Error(`invalid DNS response`);if(r&512)throw Error(`truncated DNS response`);let i=R(e,4),a=R(e,6),o=R(e,8),s=R(e,10);if(i!==1)throw Error(`invalid DNS question count`);let c=12,l=xb(e,c);c=l.nextOffset,bb(e,c,4),Ab(l,R(e,c),R(e,c+2),t,n),c+=4;let u=Ob(e,c,a,!0);if(Ob(e,Ob(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 Mb={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},Nb={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function Pb(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
|
|
757
757
|
dig -x <address> [@server] [+opts] [--json]
|
|
758
758
|
dig -v | --version
|
|
759
759
|
|
|
@@ -827,12 +827,12 @@ Module resolution:
|
|
|
827
827
|
|
|
828
828
|
Install:
|
|
829
829
|
Inert until the backing package is installed:
|
|
830
|
-
${N} esbuild-wasm@${
|
|
830
|
+
${N} esbuild-wasm@${Jr}
|
|
831
831
|
Then \`esbuild --version\` and the bundle/transform commands above.
|
|
832
832
|
`,Yb=new Set([`iife`,`cjs`,`esm`]),Xb=new Set([`browser`,`node`,`neutral`]),Zb=new Set([`linked`,`inline`,`external`,`both`]),Qb={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function $b(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 tx(e,t,n,r){if(t.inlineValue!==null){if(!Zb.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`&&Zb.has(i)?(e.sourcemap=i,1):(e.sourcemap=!0,0)}function nx(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(!Yb.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(!Xb.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 rx(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 ix(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=Qb[r];if(i){t[i]=!0;continue}if(r.startsWith(`--external:`)){t.external.push(r.slice(11));continue}if(rx(r,`--define:`,t.define)||rx(r,`--banner:`,t.banner)||rx(r,`--footer:`,t.footer))continue;let a=$b(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+=tx(t,a,e,n);continue}let o=nx(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 ax(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&ox(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if(cx(a.path)){let n=a.importer?.startsWith(`/`)?ar(a.importer):t;return{path:await dx(e,e.resolvePath(n,a.path))}}return lx(a.path,a.importer,n,sx(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:ux(t.path),resolveDir:ar(t.path)})}}}function ox(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!cx(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function sx(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 cx(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function lx(e,t,n,r){let i=t?.startsWith(`/`)?ar(t):n.fromDir;try{let t=await qn(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 ux(e){let t=er(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 dx(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=$n(t,`index${r}`);if(await e.exists(n))return n}return t}async function fx(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 px(){return S(`esbuild`,async(e,t)=>{let n;try{n=ix(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:Jb,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)
|
|
833
|
-
`,exitCode:2};let r;try{r=await
|
|
833
|
+
`,exitCode:2};let r;try{r=await qr({ipk:qb(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?mx(n,t,r):hx(n,t,r)})}async function mx(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:Jb,stderr:``,exitCode:0};let a={loader:e.loader??ux(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 fx(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 fx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function hx(e,t,n){if(e.entries.length===0)return{stdout:``,stderr:`esbuild: --bundle requires at least one entry point
|
|
834
834
|
`,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:[ax(t.fs,t.cwd,qb(t),e.external,e.platform)],format:e.format??`esm`,...gx(e)};try{let r=await n.build(i),a=await fx(n.formatMessages,r.errors,r.warnings),o=r.outputFiles??[];if(e.outfile){if(o.length===0)return{stdout:``,stderr:`esbuild: build produced no output
|
|
835
|
-
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=ar(n);for(let e=1;e<o.length;e++){let n=o[e],i=$n(r,er(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 fx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function gx(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 _x(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var vx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!
|
|
835
|
+
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=ar(n);for(let e=1;e<o.length;e++){let n=o[e],i=$n(r,er(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 fx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function gx(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 _x(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var vx=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!Pr())throw Error(`Web Serial is unavailable in this browser`);return Br()}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)}},yx=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:_x(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 bx(e,t){return e&&Pr()?new vx:t?new yx(t):null}const xx=Symbol(`picker-approval-timeout`);async function Sx(e,t,n){let r=Se.generateId(),i=!1,a=Ce({id:r,html:rm(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 xx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Se.cancel(r,`${e}: timed out`),t(xx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===xx)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 Cx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function wx(e){return vn(e,Cx)}function z(e,t){let n=/^0x/i.test(e)?parseInt(e,16):parseInt(e,10);if(!Number.isFinite(n)||Number.isNaN(n))throw Error(`invalid ${t}: '${e}'`);return n}function Tx(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 Ex(e){let t={};return e.has(`--vid`)&&(t.usbVendorId=z(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.usbProductId=z(e.get(`--pid`),`pid`)),Object.keys(t).length>0?[t]:[]}const Dx=new Set([`none`,`even`,`odd`]),Ox=new Set([`none`,`hardware`]);function kx(e){let t={baudRate:e.has(`--baud`)?z(e.get(`--baud`),`baud`):9600};if(e.has(`--data-bits`)&&(t.dataBits=z(e.get(`--data-bits`),`data-bits`)),e.has(`--stop-bits`)&&(t.stopBits=z(e.get(`--stop-bits`),`stop-bits`)),e.has(`--parity`)){let n=e.get(`--parity`);if(!Dx.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!Ox.has(n))throw Error(`invalid --flow-control: '${n}'`);t.flowControl=n}return e.has(`--buffer-size`)&&(t.bufferSize=z(e.get(`--buffer-size`),`buffer-size`)),t}function Ax(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=z(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=Tx(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=z(e.get(`--timeout-ms`),`timeout-ms`)),t}function jx(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 Mx(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=jx(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=jx(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=jx(e.get(`--break`),`break`)),t}function Nx(e){let t=ei(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function Px(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Fx(e){return`0x${e.toString(16).padStart(4,`0`)}`}function Ix(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${Fx(e.usbVendorId??0)}:${Fx(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function Lx(e){return`cts=${+!!e.clearToSend} dcd=${+!!e.dataCarrierDetect} dsr=${+!!e.dataSetReady} ri=${+!!e.ringIndicator}\n`}function B(e){return{stdout:e,stderr:``,exitCode:0}}function V(e){return{stdout:``,stderr:`serial: ${e}\n`,exitCode:1}}const Rx=`serial - access serial ports via Web Serial
|
|
836
836
|
|
|
837
837
|
Usage: serial <subcommand> [options]
|
|
838
838
|
|
|
@@ -851,7 +851,7 @@ Open flags:
|
|
|
851
851
|
--parity none|even|odd --flow-control none|hardware --buffer-size N
|
|
852
852
|
|
|
853
853
|
Read flags:
|
|
854
|
-
--bytes N Stop after N bytes (default: ${
|
|
854
|
+
--bytes N Stop after N bytes (default: ${Ur} cap)
|
|
855
855
|
--until <hex> Stop once this byte sequence is seen
|
|
856
856
|
--timeout-ms N Stop after N ms (default 1000)
|
|
857
857
|
--hex Hex-dump the bytes instead of emitting raw
|
|
@@ -862,10 +862,10 @@ Signal flags (set):
|
|
|
862
862
|
Options:
|
|
863
863
|
-h, --help
|
|
864
864
|
|
|
865
|
-
Reads/writes are capped at ${
|
|
866
|
-
`;function zx(e,t){if(t)return
|
|
867
|
-
`):
|
|
868
|
-
`)}\n`)}async function Vx(e,t){let n=e.get(`--__resolved`);if(n)return
|
|
865
|
+
Reads/writes are capped at ${Ur} bytes (4 MiB).
|
|
866
|
+
`;function zx(e,t){if(t)return B(e.length?`${Px(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return B(n)}async function Bx(e){let t=await e.list();return t.length===0?B(`no granted serial ports
|
|
867
|
+
`):B(`${t.map(Ix).join(`
|
|
868
|
+
`)}\n`)}async function Vx(e,t){let n=e.get(`--__resolved`);if(n)return B(`${Ix(await t.info(n))}\n`);let r=Ex(e),i=xe();if(i){let e=await Sx(`serial-port`,r,i);if(e.handle)return B(`${Ix(await t.info(e.handle))}\n`);let n=e.info,a=Pr();if(!a)return V(`request: Web Serial unavailable for port re-acquire`);let o=(await a.getPorts()).find(e=>{let t=typeof e.getInfo==`function`?e.getInfo():{};return(n.usbVendorId===void 0||t.usbVendorId===n.usbVendorId)&&(n.usbProductId===void 0||t.usbProductId===n.usbProductId)});if(!o)return V(`request: granted port could not be re-acquired`);let s=Br(),c=s.register(o),l=s.get(c);return l?B(`${Ix(Nr(c,l))}\n`):V(`request: failed to register granted port`)}return B(`${Ix(await t.request(r))}\n`)}async function Hx(e,t,n){let r=e[1];return r?(await n.open(r,kx(t)),B(``)):V(`open: handle required`)}async function Ux(e,t){let n=e[1];return n?(await t.close(n),B(``)):V(`close: handle required`)}async function Wx(e,t,n,r){let i=e[1];if(!i)return V(`read: handle required`);let a=Ax(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?V(`read --bytes exceeds 4 MiB limit`):zx(await r.read(i,a),n.has(`--hex`))}async function Gx(e,t,n){let r=e[1];if(!r)return V(`write: handle required`);let i=Nx(t);return i.length>4194304?V(`write payload exceeds 4 MiB limit`):B(`${await n.write(r,i)} bytes written\n`)}async function Kx(e,t,n){let[,r,i]=e;return!r||!i?V(`signals: handle and get|set required`):i===`get`?B(Lx(await n.getSignals(r))):i===`set`?(await n.setSignals(r,Mx(t)),B(``)):V(`signals: unknown action '${i}' (use get|set)`)}async function qx(e,t,n){let{positionals:r,flags:i,bools:a}=wx(e),o=r[0];switch(o){case`list`:return Bx(n);case`request`:return Vx(i,n);case`open`:return Hx(r,i,n);case`close`:return Ux(r,n);case`read`:return Wx(r,i,a,n);case`write`:return Gx(r,t,n);case`signals`:return Kx(r,i,n);default:return V(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function Jx(){return S(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return B(Rx);let n=Lr(se(),y());if(!n)return V(`Web Serial is unavailable in this environment`);try{return await qx(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?V(`user cancelled or no port selected`):V(t)}})}const Yx=new Set([`--port`,`--baud`,`--vid`,`--pid`]),Xx=115200;function Zx(e){return vn(e,Yx)}function Qx(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function $x(e){return{stdout:e,stderr:``,exitCode:0}}function eS(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const tS=`esptool - flash ESP32 / ESP8266 chips via esptool-js
|
|
869
869
|
|
|
870
870
|
Usage: esptool [--port H] [--baud N] <subcommand> [args]
|
|
871
871
|
|
|
@@ -889,21 +889,21 @@ Options:
|
|
|
889
889
|
-h, --help
|
|
890
890
|
|
|
891
891
|
Without --port, the Web Serial picker opens (needs a user gesture).
|
|
892
|
-
`;async function nS(e,t){return e.get(`--port`)||(await t.request(Ex(e))).handle}async function rS(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=
|
|
892
|
+
`;async function nS(e,t){return e.get(`--port`)||(await t.request(Ex(e))).handle}async function rS(e,t){let n=e.slice(1);if(n.length===0||n.length%2!=0)throw Error(`write_flash expects <addr> <file> pairs`);let r=[];for(let e=0;e<n.length;e+=2){let i=z(n[e],`address`),a=t.fs.resolvePath(t.cwd,n[e+1]),o=await t.fs.readFileBuffer(a);r.push({address:i,data:o})}return r}async function iS(e,t,n,r){let{positionals:i,flags:a,bools:o}=Zx(e),s=Qx(i[0]??``),c=a.has(`--baud`)?z(a.get(`--baud`),`baud`):Xx,l=[],u=e=>l.push(e);switch(s){case`chip_id`:{let e=await nS(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}`),$x(`${l.join(`
|
|
893
893
|
`)}\n`)}case`read_mac`:{let e=await nS(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),$x(`${l.join(`
|
|
894
894
|
`)}\n`)}case`erase_flash`:{let e=await nS(a,r);return await n.eraseFlash(e,c,u),$x(l.length?`${l.join(`
|
|
895
895
|
`)}\n`:`flash erased
|
|
896
896
|
`)}case`write_flash`:{let e=await rS(i,t),s=await nS(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),$x(l.length?`${l.join(`
|
|
897
897
|
`)}\n`:`flash written
|
|
898
|
-
`)}case`read_flash`:{if(i.length<4)return eS(`read_flash expects <addr> <size> <outfile>`);let e=
|
|
899
|
-
`)}\n`)}case`read_reg`:{if(i.length<2)return eS(`read_reg expects <addr>`);let e=
|
|
898
|
+
`)}case`read_flash`:{if(i.length<4)return eS(`read_flash expects <addr> <size> <outfile>`);let e=z(i[1],`address`),o=z(i[2],`size`),s=t.fs.resolvePath(t.cwd,i[3]),d=await nS(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}`),$x(`${l.join(`
|
|
899
|
+
`)}\n`)}case`read_reg`:{if(i.length<2)return eS(`read_reg expects <addr>`);let e=z(i[1],`address`),t=await nS(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`)}`),$x(`${l.join(`
|
|
900
900
|
`)}\n`)}case`flash_id`:{let e=await nS(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`}`),$x(`${l.join(`
|
|
901
|
-
`)}\n`)}case`erase_region`:{if(i.length<3)return eS(`erase_region expects <addr> <size>`);let e=
|
|
901
|
+
`)}\n`)}case`erase_region`:{if(i.length<3)return eS(`erase_region expects <addr> <size>`);let e=z(i[1],`address`),t=z(i[2],`size`),o=await nS(a,r);return await n.eraseRegion(o,c,e,t,u),$x(l.length?`${l.join(`
|
|
902
902
|
`)}\n`:`region erased
|
|
903
903
|
`)}case`run`:{let e=await nS(a,r);return await n.run(e,c,u),$x(l.length?`${l.join(`
|
|
904
904
|
`)}\n`:`running app
|
|
905
|
-
`)}default:return eS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function aS(){return S(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return $x(tS);let n=se(),r=y(),i=bx(n,r),a=
|
|
906
|
-
`);let n=``;for(let[,e]of cS)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 uS(n)}function mS(e){let t=C(e.slice(1),{});if(`error`in t)return dS(t.error);let n=t.positionals[0];if(!n)return dS(`delete requires an ID`);let r=cS.get(n);return r?(r.unsubscribe(),cS.delete(n),uS(`Deleted watcher "${r.name}" (${n})\n`)):dS(`watcher not found: ${n}`)}function hS(e){let t=C(e.slice(1),{value:fS});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 gS(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function _S(e,t){let n=hS(e);if(`error`in n)return dS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=
|
|
905
|
+
`)}default:return eS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function aS(){return S(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return $x(tS);let n=se(),r=y(),i=bx(n,r),a=Lr(n,r);if(!i||!a)return eS(`Web Serial is unavailable in this environment`);try{return await iS(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 oS(){return S(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-CTYkZrli.js`);return n(e,t)})}function sS(){return S(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-BoSrXXY1.js`);return n(e,t)})}const cS=new Map;let lS=0;const uS=e=>({stdout:e,stderr:``,exitCode:0}),dS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),fS=[`--path`,`--pattern`,`--scoop`,`--name`];function pS(e){let t=C(e.slice(1),{});if(`error`in t)return dS(t.error);if(cS.size===0)return uS(`No active file watchers.
|
|
906
|
+
`);let n=``;for(let[,e]of cS)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 uS(n)}function mS(e){let t=C(e.slice(1),{});if(`error`in t)return dS(t.error);let n=t.positionals[0];if(!n)return dS(`delete requires an ID`);let r=cS.get(n);return r?(r.unsubscribe(),cS.delete(n),uS(`Deleted watcher "${r.name}" (${n})\n`)):dS(`watcher not found: ${n}`)}function hS(e){let t=C(e.slice(1),{value:fS});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 gS(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function _S(e,t){let n=hS(e);if(`error`in n)return dS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=Ri(r.scoop,t)??``,!r.basePath||!r.pattern)return dS(`--path and --pattern are required`);let a=await ny(await ey(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return dS(`file system watcher not available`);let c=`fsw-${++lS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,gS(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}})});cS.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`),uS(f)}function vS(){return S(`fswatch`,async(e,t)=>{let n=e[0];if(!n||w(e,{valueFlags:fS}))return uS(`usage: fswatch <command> [options]
|
|
907
907
|
|
|
908
908
|
Commands:
|
|
909
909
|
create --path <path> --pattern <glob> [--scoop <name>] [--name <name>] Watch for file changes
|
|
@@ -915,7 +915,7 @@ Options:
|
|
|
915
915
|
--pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
|
|
916
916
|
--scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
|
|
917
917
|
--name <name> Human-readable name for the watcher
|
|
918
|
-
`);switch(n){case`list`:return pS(e);case`delete`:return mS(e);case`create`:return await _S(e,t.env);default:return dS(`unknown command: ${n}`)}})}function yS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-
|
|
918
|
+
`);switch(n){case`list`:return pS(e);case`delete`:return mS(e);case`create`:return await _S(e,t.env);default:return dS(`unknown command: ${n}`)}})}function yS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-DkxI8mp3.js`);return r(t,n,e)})}function bS(e){return typeof e.stdoutIsTTY!=`boolean`||e.stdoutIsTTY}function xS(e,t){return typeof e.stdinIsTTY==`boolean`?e.stdinIsTTY:t===void 0?ei(e.stdin).length===0:t===0}function SS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
|
|
919
919
|
hear --devices | --status | --warmup
|
|
920
920
|
|
|
921
921
|
Speech recognition: listens on the microphone until you pause, then
|
|
@@ -942,7 +942,7 @@ Options:
|
|
|
942
942
|
`:``)}async function jS(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:AS((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:OS(`device enumeration unavailable`):{stdout:AS((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return OS(kS(e))}}async function MS(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:DS(t?n():e()),stderr:``,exitCode:0}}return{stdout:DS(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return OS(kS(e))}}function NS(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function PS(e,t,n,r){if(n.byteLength===0)return OS(`no audio on ${r}`);let i=NS(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+`
|
|
943
943
|
`,stderr:``,exitCode:0}}catch(e){return OS(`transcription failed: ${kS(e)}`)}}async function FS(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 OS(`cannot open ${r}: No such file`)}let o=Jn(i);return!o.startsWith(`audio/`)&&!o.startsWith(`video/`)?OS(`${r} is not an audio file`):PS(e,t,a,r)}async function IS(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+`
|
|
944
944
|
`,stderr:``,exitCode:0}:{stdout:``,stderr:`hear: no speech detected
|
|
945
|
-
`,exitCode:1}}catch(e){return OS(kS(e))}}function LS(){return S(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return SS();let n=ES(e);if(`exitCode`in n)return n;let r={local:se(),panelRpc:y()};if(!r.local&&!r.panelRpc)return OS(`speech recognition unavailable in this environment`);if(n.devices)return jS(r);if(n.status||n.warmup)return MS(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return FS(r,n,t);let i=
|
|
945
|
+
`,exitCode:1}}catch(e){return OS(kS(e))}}function LS(){return S(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return SS();let n=ES(e);if(`exitCode`in n)return n;let r={local:se(),panelRpc:y()};if(!r.local&&!r.panelRpc)return OS(`speech recognition unavailable in this environment`);if(n.devices)return jS(r);if(n.status||n.warmup)return MS(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return FS(r,n,t);let i=ti(t.stdin);return n.inputFile===`-`||n.deviceId==null&&!xS(t,i.byteLength)?PS(r,n,i,`stdin`):IS(r,n)})}function RS(e,t,n){return typeof e.onSessionReplaced==`function`?e.onSessionReplaced(t,n):()=>void 0}function zS(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=RS(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 BS=[`debug`,`log`,`info`,`warning`,`error`],VS=1e3,HS={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 US(e,t,n,r,i){if(t.consoleCleanup.has(r))return;t.consoleMessages.set(r,[]);let a=zS({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=HS[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>VS&&c.splice(0,c.length-VS))}]],enable:(e,t)=>e.send(`Runtime.enable`,{},t)});t.consoleCleanup.set(r,()=>a.stop())}const WS=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0]??`log`,s=r.clear===`true`,c=BS.indexOf(o);if(c===-1)return{stdout:``,stderr:`Invalid level "${o}". Valid: ${BS.join(`, `)}\n`,exitCode:1};t.consoleCleanup.has(a.targetId)||await i(a.targetId,async({sessionId:n,transport:r})=>{await r.send(`Runtime.enable`,{},n),US(e,t,r,a.targetId,n)});let l=(t.consoleMessages.get(a.targetId)??[]).filter(e=>BS.indexOf(e.level)>=c);return s&&t.consoleMessages.set(a.targetId,[]),l.length===0?{stdout:`No console messages
|
|
946
946
|
`,stderr:``,exitCode:0}:{stdout:l.map(e=>`[${e.level}] ${e.text}`).join(`
|
|
947
947
|
`)+`
|
|
948
948
|
`,stderr:``,exitCode:0}};function GS(e){return e.cookies??[]}function KS(e){return`${e.name}=${e.value}\tDomain=${e.domain}\tPath=${e.path}\tSecure=${e.secure}\tHttpOnly=${e.httpOnly}\tExpires=${e.expires}`}function qS(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 JS(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 YS=async({browser:e,flags:t,onTab:n})=>{let r=j(t);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t.domain,a=t.path;return{stdout:await n(r.targetId,async e=>{let t=GS(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(KS).join(`
|
|
@@ -1169,7 +1169,7 @@ Options:
|
|
|
1169
1169
|
url: window.location.href,
|
|
1170
1170
|
title: document.title || '',
|
|
1171
1171
|
bodySnippet: document.body?.innerText?.replace(/\\s+/g, ' ').trim().slice(0, 500) || '(empty)',
|
|
1172
|
-
}))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function tw(e){return/callback|authorize\/resume|error/i.test(e)}async function nw(e,t,n){try{let r=await ew(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,VC.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){VC.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function rw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>$C(e,r,`follower`)),VC.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){VC.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function iw(e){return Array.isArray(e)?e:[]}const V=e(`playwright-teleport`);let aw=null,ow=null;function sw(e){aw=e}function cw(e){ow=e}function lw(){return ow?.()??null}async function uw(e,t){if(V.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),V.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=>nw(e,t,`timeout`))}catch(e){V.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await rw(e,t,`timeout`)}if(dw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){V.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 dw(e){V.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 fw(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);V.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),V.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);V.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(V.info(`Teleport start pattern matched on leader`),V.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),mw(e,t,c,a).catch(e=>{V.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){V.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{V.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function pw(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,V.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,V.info(`Follower reached auth provider; waiting for return pattern`),V.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):V.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}V.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),tw(o)&&await e.withTab(r,e=>nw(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(V.info(`Follower return pattern matched after auth`),V.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),yw(e,t,n,i).catch(e=>{V.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){V.warn(`Error polling follower tab URL`,{error:String(e)})}}async function mw(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,V.info(`Teleport triggered`),V.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=HC;try{a=iw((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),V.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){V.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>JC(e,`leader`)),V.info(`Captured leader storage for follower`,{totalEntries:WC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),V.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){V.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=aw?.();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}V.info(`Selected follower for teleport`),V.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,V.info(`Opened follower tab for teleport`),V.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}),V.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){V.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await QC(e,o,`follower`),V.info(`Navigating follower to intercepted auth URL`),V.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})}),V.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&uw(e,n).catch(e=>{V.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,V.info(`Teleport waiting for follower auth redirect`),V.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{pw(e,t,n,l,s).catch(e=>{V.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){V.error(`Teleport trigger failed`,{error:String(t)}),await rw(e,n,`trigger-error`),n.phase=`done`,dw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function hw(e,t){V.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),V.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){V.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)"`);V.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){V.warn(`Could not read follower page content`,{error:String(e)})}let i=iw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?UC(i):`none`;V.info(`Captured cookies from follower`,{count:i.length}),V.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=HC;try{o=await JC(e,`follower`),V.info(`Captured follower storage for leader`,{totalEntries:WC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),V.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){V.warn(`Could not capture follower storage`,{error:String(e)})}return await nw(e,t,`capture`),await $C(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),V.info(`Closed follower tab after teleport`),V.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){V.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function gw(e,t,n,r){try{await e.navigate(n),await ZC(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){V.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),V.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await QC(e,t,`leader`);try{r&&await e.navigate(r)}finally{await $C(e,a,`leader`)}}}async function _w(e,t,n,r,i){let a=e.targetId,o=await QC(e,n,`leader`);try{r&&(V.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:WC(n)}),V.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:WC(n)}),await e.navigate(r))}finally{await $C(e,o,`leader`)}}async function vw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=qC(o,t.originalLeaderUrl,i),c=GC(t.originalLeaderUrl),l=!!o&&c!==o,u=l?KC(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),V.info(`Injected cookies into leader tab`,{count:n.length}),V.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(V.info(`Hydrating leader storage origin before landing`,{storageEntries:WC(r)}),V.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:WC(r)}),await gw(e,r,u,s)):await _w(e,t,r,s,i)}),s):(V.warn(`No leader tab available for auth-state injection`),s)}async function yw(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,V.info(`Capturing auth state from follower`),V.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 hw(e,n),o=WC(i),s=await vw(e,n,t,i,a);n.phase=`done`,dw(n);let c=t.length>0?` (${UC(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}`;V.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),V.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){V.error(`Teleport auth-state capture failed`,{error:String(t)}),await rw(e,n,`capture-error`),n.phase=`done`,dw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const bw=e(`playwright`),xw=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1172
|
+
}))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function tw(e){return/callback|authorize\/resume|error/i.test(e)}async function nw(e,t,n){try{let r=await ew(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,VC.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){VC.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function rw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>$C(e,r,`follower`)),VC.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){VC.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function iw(e){return Array.isArray(e)?e:[]}const H=e(`playwright-teleport`);let aw=null,ow=null;function sw(e){aw=e}function cw(e){ow=e}function lw(){return ow?.()??null}async function uw(e,t){if(H.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),H.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=>nw(e,t,`timeout`))}catch(e){H.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await rw(e,t,`timeout`)}if(dw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){H.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 dw(e){H.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 fw(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);H.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),H.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);H.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(H.info(`Teleport start pattern matched on leader`),H.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),mw(e,t,c,a).catch(e=>{H.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){H.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{H.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function pw(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,H.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,H.info(`Follower reached auth provider; waiting for return pattern`),H.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):H.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}H.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),tw(o)&&await e.withTab(r,e=>nw(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(H.info(`Follower return pattern matched after auth`),H.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),yw(e,t,n,i).catch(e=>{H.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){H.warn(`Error polling follower tab URL`,{error:String(e)})}}async function mw(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,H.info(`Teleport triggered`),H.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=HC;try{a=iw((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),H.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){H.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>JC(e,`leader`)),H.info(`Captured leader storage for follower`,{totalEntries:WC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.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){H.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=aw?.();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}H.info(`Selected follower for teleport`),H.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,H.info(`Opened follower tab for teleport`),H.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}),H.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){H.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await QC(e,o,`follower`),H.info(`Navigating follower to intercepted auth URL`),H.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})}),H.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&uw(e,n).catch(e=>{H.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,H.info(`Teleport waiting for follower auth redirect`),H.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{pw(e,t,n,l,s).catch(e=>{H.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){H.error(`Teleport trigger failed`,{error:String(t)}),await rw(e,n,`trigger-error`),n.phase=`done`,dw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function hw(e,t){H.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),H.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){H.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)"`);H.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){H.warn(`Could not read follower page content`,{error:String(e)})}let i=iw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?UC(i):`none`;H.info(`Captured cookies from follower`,{count:i.length}),H.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=HC;try{o=await JC(e,`follower`),H.info(`Captured follower storage for leader`,{totalEntries:WC(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.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){H.warn(`Could not capture follower storage`,{error:String(e)})}return await nw(e,t,`capture`),await $C(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),H.info(`Closed follower tab after teleport`),H.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){H.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function gw(e,t,n,r){try{await e.navigate(n),await ZC(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){H.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),H.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await QC(e,t,`leader`);try{r&&await e.navigate(r)}finally{await $C(e,a,`leader`)}}}async function _w(e,t,n,r,i){let a=e.targetId,o=await QC(e,n,`leader`);try{r&&(H.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:WC(n)}),H.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:WC(n)}),await e.navigate(r))}finally{await $C(e,o,`leader`)}}async function vw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=qC(o,t.originalLeaderUrl,i),c=GC(t.originalLeaderUrl),l=!!o&&c!==o,u=l?KC(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),H.info(`Injected cookies into leader tab`,{count:n.length}),H.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(H.info(`Hydrating leader storage origin before landing`,{storageEntries:WC(r)}),H.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:WC(r)}),await gw(e,r,u,s)):await _w(e,t,r,s,i)}),s):(H.warn(`No leader tab available for auth-state injection`),s)}async function yw(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,H.info(`Capturing auth state from follower`),H.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 hw(e,n),o=WC(i),s=await vw(e,n,t,i,a);n.phase=`done`,dw(n);let c=t.length>0?` (${UC(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}`;H.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),H.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){H.error(`Teleport auth-state capture failed`,{error:String(t)}),await rw(e,n,`capture-error`),n.phase=`done`,dw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const bw=e(`playwright`),xw=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1173
1173
|
`,exitCode:1};let o=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){bw.info(`Arming teleport via goto/navigate flags`),bw.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&&(dw(u),n.teleportWatchers.delete(o.targetId)),fw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await pC(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
|
|
1174
1174
|
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},Sw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.back()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated back
|
|
1175
1175
|
`,stderr:``,exitCode:0})},Cw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.forward()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated forward
|
|
@@ -1200,7 +1200,7 @@ Options:
|
|
|
1200
1200
|
`,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}};async function Jw(e,t){if(!t.sessionDirsCreated){for(let t of[`/.playwright`,`/.playwright/snapshots`,`/.playwright/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!wn(e))throw e}t.sessionDirsCreated=!0}}async function Yw(e,t,n,r){try{return await e.withTab(n,async e=>{let{url:i,title:a,text:o,refToSelector:s,refToBackendNodeId:c,refToFrameId:l}=await oe(e),u={url:i,title:a,refToSelector:s,refToBackendNodeId:c,refToFrameId:l,content:o,timestamp:Date.now()};r.snapshots.set(n,u);let d=[`Page URL: ${i}`,`Page Title: ${a}`,``,o].join(`
|
|
1201
1201
|
`),f=`/.playwright/snapshots/page-${Sn(new Date)}.yml`;return await t.writeFile(f,d),f})}catch{return null}}async function Xw(e,t,n){await Jw(e,t);let r=new Date().toISOString(),i=`playwright-cli ${n.command}${n.args.length?` `+n.args.join(` `):``}`,a=n.result.exitCode===0?n.result.stdout.trim()||`OK`:`Error: ${n.result.stderr.trim()}`,o=[`### ${i}`,`- **Time**: ${r}`];if(n.tabUrl||n.targetId){let e=n.tabUrl?`${n.tabUrl}${n.targetId?` (targetId: ${n.targetId})`:``}`:`targetId: ${n.targetId}`;o.push(`- **Tab**: ${e}`)}o.push(`- **Result**: ${a}`),n.snapshotPath&&o.push(``,`[Snapshot](${n.snapshotPath})`),o.push(`---`,``);let s=o.join(`
|
|
1202
1202
|
`)+`
|
|
1203
|
-
`,c=`/.playwright/session.md`,l=``;try{let t=await e.readFile(c);l=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(c,l+s)}function Zw(){return import(`./snapshot-features-
|
|
1203
|
+
`,c=`/.playwright/session.md`,l=``;try{let t=await e.readFile(c);l=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(c,l+s)}function Zw(){return import(`./snapshot-features-bBwoXkOR.js`)}async function Qw(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=ae(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
|
|
1204
1204
|
`);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function $w(e,t){await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let n=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;if(n?.objectId)return(await e.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
|
|
1205
1205
|
this.scrollIntoView({ block: 'center' });
|
|
1206
1206
|
const r = this.getBoundingClientRect();
|
|
@@ -1278,8 +1278,8 @@ Options:
|
|
|
1278
1278
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
1279
1279
|
return el.files.length;
|
|
1280
1280
|
})()`,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`,uT],[`state-load`,dT],[`console`,WS],[`requests`,Mw],[`request`,Nw],[`request-headers`,Pw],[`request-body`,Fw],[`response-headers`,Iw],[`response-body`,Lw],[`mousemove`,IC],[`mousedown`,LC],[`mouseup`,RC],[`mousewheel`,zC],[`drop`,BC],[`route`,Gw],[`route-list`,Kw],[`unroute`,qw],[`generate-locator`,eC],[`highlight`,tC]]);function PT(){let e=(Dn.string??[]).map(e=>`--${e}`),t=new Set(Dn.boolean??[]);for(let[e,n]of Object.entries(Dn.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 FT(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function IT(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const LT=2e3;function RT(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 zT(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<LT)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>=LT?`${(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.
|
|
1281
|
-
`;return{...r,stderr:r.stderr+c}}async function BT(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await On(e,t.tab,n):null)??r}\n`,exitCode:1}}function VT(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 HT(e,t,n){let r=NT.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?VT(e,t,void 0):a}catch(r){return i?.aborted?VT(e,t,r):await BT(n.browser,n.flags,r)}}async function UT(e,t,n,r){let i=C(FT(n),IT(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=En(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-
|
|
1282
|
-
`,stderr:``,exitCode:0}}let s=a[0],c=a.slice(1),l=await UT(e,s,c,i);if(`answer`in l)return l.answer;let{positional:u,flags:d}=l;if(!t||!r)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let f=d.tab??null,p=RT(t,f),m=await HT(e,s,{browser:t,fs:n,state:r,positional:u,flags:d,scratchDir:
|
|
1281
|
+
`;return{...r,stderr:r.stderr+c}}async function BT(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await On(e,t.tab,n):null)??r}\n`,exitCode:1}}function VT(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 HT(e,t,n){let r=NT.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?VT(e,t,void 0):a}catch(r){return i?.aborted?VT(e,t,r):await BT(n.browser,n.flags,r)}}async function UT(e,t,n,r){let i=C(FT(n),IT(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=En(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-CPzYQxS7.js`);return{answer:{stdout:n(e,t),stderr:``,exitCode:0}}}let o=null;try{let{validateSubcommandArgs:r}=await import(`./validate-args-BcxRh84E.js`);o=r(e,t,n,i.positionals)}catch{o=null}return o?{answer:{stdout:``,stderr:o,exitCode:1}}:{positional:i.positionals,flags:a}}function WT(e,t,n){let r=t?Cn(t,n):null,i=PT();return S(e,async(a,o)=>{if(a.length===0||a[0]===`help`||a[0]===`--help`||a[0]===`-h`){let{formatHelp:t}=await import(`./help-CPzYQxS7.js`);return{stdout:t(e)+`
|
|
1282
|
+
`,stderr:``,exitCode:0}}let s=a[0],c=a.slice(1),l=await UT(e,s,c,i);if(`answer`in l)return l.answer;let{positional:u,flags:d}=l;if(!t||!r)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let f=d.tab??null,p=RT(t,f),m=await HT(e,s,{browser:t,fs:n,state:r,positional:u,flags:d,scratchDir:zi(o.env),onTab:(e,n)=>t.withTab(e,n,{signal:o.signal}),signal:o.signal}),h=d.tab??null,g=null;Pn.has(s)&&m.exitCode===0&&h&&(g=await Yw(t,n,h,r));try{await Xw(n,r,{command:s,args:c,result:m,snapshotPath:g,targetId:h})}catch{}return zT(t,p,f,m)})}const GT=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`,`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`,...Mn,`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)`,[...zg]]]);function KT(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:
|
|
1283
1283
|
`);let a=[];for(let[e,t]of GT){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(`
|
|
1284
1284
|
`)+`
|
|
1285
1285
|
`}function qT(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
|
|
@@ -1315,8 +1315,8 @@ Notes:
|
|
|
1315
1315
|
unless --force is passed.
|
|
1316
1316
|
- Weights are read by the speech engines via the preview SW from the
|
|
1317
1317
|
target directory; transformers expects <localModelPath>/<repo>/.
|
|
1318
|
-
`,stderr:``,exitCode:e}}function YT(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const XT=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function ZT(e){let t=null,n=`main`,r=!1,i=[],a=0;for(;a<e.length;){let o=e[a];if(o===`--to`){let n=e[a+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,a+=2;continue}if(o===`--revision`||o===`--rev`){let t=e[a+1];if(typeof t!=`string`)return{error:`${o} requires a value`};n=t,a+=2;continue}if(o===`--force`||o===`-f`){r=!0,a+=1;continue}if(o.startsWith(`--`))return{error:`unknown option: ${o}`};i.push(o),a+=1}if(i.length===0)return{error:`download requires <repo>`};let o=i[0];return XT.test(o)?{repo:o,files:i.slice(1),to:t,revision:n,force:r}:{error:`invalid repo '${o}' — expected <owner>/<name>`}}function QT(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}async function $T(e,t,n){let r=ZT(e);if(`error`in r)return YT(r.error);let i=
|
|
1319
|
-
`)}\n`}function fE(e){return`${sE(e.reportId)} ${oE(e.bytes)}`.trimEnd()}function pE(e){return{stdout:e,stderr:``,exitCode:0}}function
|
|
1318
|
+
`,stderr:``,exitCode:e}}function YT(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const XT=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function ZT(e){let t=null,n=`main`,r=!1,i=[],a=0;for(;a<e.length;){let o=e[a];if(o===`--to`){let n=e[a+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,a+=2;continue}if(o===`--revision`||o===`--rev`){let t=e[a+1];if(typeof t!=`string`)return{error:`${o} requires a value`};n=t,a+=2;continue}if(o===`--force`||o===`-f`){r=!0,a+=1;continue}if(o.startsWith(`--`))return{error:`unknown option: ${o}`};i.push(o),a+=1}if(i.length===0)return{error:`download requires <repo>`};let o=i[0];return XT.test(o)?{repo:o,files:i.slice(1),to:t,revision:n,force:r}:{error:`invalid repo '${o}' — expected <owner>/<name>`}}function QT(e){return e<1024?`${e} B`:e<1048576?`${(e/1024).toFixed(1)} KB`:`${(e/1048576).toFixed(1)} MB`}async function $T(e,t,n){let r=ZT(e);if(`error`in r)return YT(r.error);let i=Ji(r.repo,r.to,t.cwd),a=``;try{let e=await Ui({fetch:n,fs:t.fs,repo:r.repo,targetDir:i,files:r.files,revision:r.revision,force:r.force,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e})=>{a+=`hf: ${e.length} file(s) listed in ${r.repo}@${r.revision}\n`},onFile:e=>{a+=e.status===`downloaded`?`hf: downloaded ${e.file} (${QT(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${i})\n`}}}),o=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${QT(e.totalBytes)} total into ${i}\n`;return{stdout:``,stderr:a+o,exitCode:0}}catch(e){return e instanceof Hi?(a+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:a,exitCode:1}):YT(e instanceof Error?e.message:String(e))}}function eE(e){return{name:`hf`,async execute(t,n){if(t.length===0||w(t,{valueFlags:[`--to`,`--revision`,`--rev`]}))return JT(+(t.length===0));let r=t[0];return r===`download`?$T(t.slice(1),n,e.fetch):YT(`unknown subcommand: ${r}`)}}}const tE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function nE(e){return vn(e,tE)}function rE(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 iE(e){let t={};return e.has(`--vid`)&&(t.vendorId=rE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=rE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=rE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=rE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function aE(e){let t=ei(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function oE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function sE(e){return e.toString(16).padStart(2,`0`)}function cE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function lE(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${cE(e.usagePage)}:${cE(e.usage??0)}`;return`${e.handle}\t${cE(e.vendorId)}:${cE(e.productId)}${r}\t${t}${n}`}function uE(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 dE(e){return`${e.map(lE).join(`
|
|
1319
|
+
`)}\n`}function fE(e){return`${sE(e.reportId)} ${oE(e.bytes)}`.trimEnd()}function pE(e){return{stdout:e,stderr:``,exitCode:0}}function U(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const mE=`hid - access HID devices via WebHID
|
|
1320
1320
|
|
|
1321
1321
|
Usage: hid <subcommand> [options]
|
|
1322
1322
|
|
|
@@ -1339,11 +1339,11 @@ Options:
|
|
|
1339
1339
|
--timeout <ms> query: wait this long for an input report (default 1000)
|
|
1340
1340
|
-h, --help
|
|
1341
1341
|
|
|
1342
|
-
Report payloads are capped at ${
|
|
1342
|
+
Report payloads are capped at ${Ir} bytes (4 MiB).
|
|
1343
1343
|
`;function hE(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return pE(t)}return pE(e.length?`${oE(e)}\n`:``)}function gE(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function _E(e){let t=await e.list();return t.length===0?pE(`no granted HID devices
|
|
1344
1344
|
`):pE(`${t.map(lE).join(`
|
|
1345
|
-
`)}\n`)}async function vE(e,t){let n=e.get(`--__resolved`),r=iE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?
|
|
1346
|
-
`)}\n`:``)}async function wE(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return
|
|
1345
|
+
`)}\n`)}async function vE(e,t){let n=e.get(`--__resolved`),r=iE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?U(`request: missing resolved handle`):pE(dE(uE(await Promise.all(e.map(e=>t.info(e))),i)))}let a=xe();return a?yE(r,i,a,t):pE(dE(uE(await t.request(r),i)))}async function yE(e,t,n,r){let i=await Sx(`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=Fr();if(!t)return U(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=kr(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return U(`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=uE(s.length>0?s:[],t);return c.length===0?U(`request: granted device could not be re-acquired`):pE(dE(c))}async function bE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),pE(``)):U(`${e}: handle required`)}async function xE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return U(`${e}: handle and report-id required`);let o=rE(a,`report-id`),s=aE(n);return s.length>4194304?U(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),pE(``))}async function SE(e,t,n){let[,r,i]=e;return!r||i===void 0?U(`feature-get: handle and report-id required`):hE((await t.receiveFeatureReport(r,rE(i,`report-id`))).bytes,n)}async function CE(e,t,n){let r=e[1];if(!r)return U(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(fE(e))});try{await gE(t.signal)}finally{await a()}return pE(i.length?`${i.join(`
|
|
1346
|
+
`)}\n`:``)}async function wE(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return U(`query: handle and report-id required`);let s=rE(o,`report-id`),c=aE(t);if(c.length>4194304)return U(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?rE(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`?U(`query: no input report within ${l}ms`):i?hE(t.bytes,!0):pE(`${fE(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function TE(e,t,n){let{positionals:r,flags:i,bools:a}=nE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return _E(n);case`request`:return vE(i,n);case`open`:case`close`:return bE(o,r,n);case`send`:case`feature-send`:return xE(o,r,t,n);case`feature-get`:return SE(r,n,s);case`watch`:return CE(r,t,n);case`query`:return wE(r,t,i,n,s);default:return U(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function EE(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return pE(mE);let n=Rr(se(),y());if(!n)return U(`WebHID is unavailable in this environment`);try{return await TE(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?U(`user cancelled or no device selected`):U(t)}})}const DE=1e3,OE=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,kE=`${OE}
|
|
1347
1347
|
|
|
1348
1348
|
Print the user and group identity of this SLICC runtime.
|
|
1349
1349
|
|
|
@@ -1374,7 +1374,7 @@ Options:
|
|
|
1374
1374
|
`,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=ye(t);if(!ve(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 YE=new Set([`run`,`run-script`]),XE=new Set([`test`,`start`,`stop`,`restart`]),ZE=new Set([` `,` `,`
|
|
1375
1375
|
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),QE=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
|
|
1376
1376
|
`]),$E=/^[A-Za-z_][A-Za-z0-9_]*=/,eD=/^[@A-Za-z0-9._-]+$/,tD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),nD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),rD=new Set([`ipx`,`npx`]);function iD(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function aD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*oD(e){let t=b(e);for(;yield t,t!==`/`;)t=Te(t).dir}function sD(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 cD(e){return typeof e==`string`?e:void 0}async function lD(e,t){for(let n of oD(t)){let t=x(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await aD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:cD(r.name),version:cD(r.version),scripts:sD(r.scripts)}}return null}function uD(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(ZE.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function dD(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(QE.has(i)){r=!0,n++;continue}let a=uD(e,n);if(a.end===a.start){n++;continue}if(r&&!$E.test(a.text)){if(nD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function fD(e,t){return!eD.test(e)||tD.has(e)||rD.has(e)?!1:!t.isRegistered(e)}async function pD(e,t){let n=dD(e).filter(e=>fD(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 mD(e){let t=[];for(let n of oD(e))t.push(x(n,`node_modules`,`.bin`));return t}function hD(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...mD(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 gD(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function _D(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${x(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${gD(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
|
|
1377
|
-
`)}\n`}function vD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function yD(e){let t={silent:!1,ifPresent:!1},n=[],r,i=!1;for(let a of e){if(i){n.push(a);continue}if(a===`--`){i=!0;continue}vD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function bD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function xD(e,t,n,r){let i=r.length>0?` ${r.map(iD).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 SD(e,t,n,r){if(n===`start`&&await r.exists(x(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function CD(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of mD(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function wD(e,t,n,r,i,a){let o=i.exec;if(!o)return bD(e,`run requires shell exec support, which this context does not provide`);let s=CD(a.fs,t,i),c=gD(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 pD(a.body,s),{cwd:t.dir,env:hD(t,a.event,a.body,i),stdin
|
|
1377
|
+
`)}\n`}function vD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function yD(e){let t={silent:!1,ifPresent:!1},n=[],r,i=!1;for(let a of e){if(i){n.push(a);continue}if(a===`--`){i=!0;continue}vD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function bD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function xD(e,t,n,r){let i=r.length>0?` ${r.map(iD).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 SD(e,t,n,r){if(n===`start`&&await r.exists(x(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function CD(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of mD(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function wD(e,t,n,r,i,a){let o=i.exec;if(!o)return bD(e,`run requires shell exec support, which this context does not provide`);let s=CD(a.fs,t,i),c=gD(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 pD(a.body,s),{cwd:t.dir,env:hD(t,a.event,a.body,i),stdin:ei(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 TD(e,t,n,r){let i;try{i=await lD(r.fs,n.cwd)}catch(t){return bD(e,t instanceof Error?t.message:String(t))}if(!i)return bD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=yD(t);if(o===void 0)return{stdout:_D(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await SD(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 bD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return wD(e,i,xD(i,o,c,s),a,n,r)}const ED=new Set([`install`,`i`,`add`]),DD=new Set([`uninstall`,`remove`,`rm`,`un`]),OD=new Set([`list`,`ls`]),kD=new Set([`-g`,`--global`,`--location=global`]),AD=[`-g`,`--global`,`-D`,`--save-dev`];function jD(e){return`${e} - install packages from the npm registry into node_modules
|
|
1378
1378
|
and run package.json scripts
|
|
1379
1379
|
|
|
1380
1380
|
Usage:
|
|
@@ -1441,14 +1441,14 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
|
|
|
1441
1441
|
and deps are recorded in /shared/lib/package.json. Existing fields are
|
|
1442
1442
|
preserved. Idempotent: re-installing an already-satisfied package is a clean
|
|
1443
1443
|
no-op.
|
|
1444
|
-
`}function MD(e){let t=C(e,{bool:AD,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 ND(e){let t=!1,n=[];for(let r of e){if(kD.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function PD(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`--help`)||n.includes(`-h`)}function FD(e){return e instanceof Error?e.message:String(e)}async function ID(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}async function LD(e,t,n){let r;try{r=await
|
|
1444
|
+
`}function MD(e){let t=C(e,{bool:AD,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 ND(e){let t=!1,n=[];for(let r of e){if(kD.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function PD(e){let t=e.indexOf(`--`),n=t===-1?e:e.slice(0,t);return n.includes(`--help`)||n.includes(`-h`)}function FD(e){return e instanceof Error?e.message:String(e)}async function ID(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}async function LD(e,t,n){let r;try{r=await Ki({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof Zi?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${FD(t)}\n`,exitCode:1}}if(r.empty&&r.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let i=r.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),a=r.errors.map(t=>`${e}: failed to install ${t.spec}: ${FD(t.error)}`);return{stdout:i.length>0?`${i.join(`
|
|
1445
1445
|
`)}\n`:``,stderr:a.length>0?`${a.join(`
|
|
1446
|
-
`)}\n`:``,exitCode:r.errors.length===0?0:1}}async function RD(e,t,n,r){let i=MD(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 LD(e,n,r);let c;try{c=await
|
|
1446
|
+
`)}\n`:``,exitCode:r.errors.length===0?0:1}}async function RD(e,t,n,r){let i=MD(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 LD(e,n,r);let c;try{c=await Yi(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${FD(t)}\n`,exitCode:1}}let l=c.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),u=c.errors.map(t=>`${e}: failed to install ${t.spec}: ${FD(t.error)}`);return a&&c.results.length>0&&await ID(r),{stdout:l.length>0?`${l.join(`
|
|
1447
1447
|
`)}\n`:``,stderr:u.length>0?`${u.join(`
|
|
1448
1448
|
`)}\n`:``,exitCode:c.errors.length===0?0:1}}function zD(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(`
|
|
1449
|
-
`)}\n`}async function BD(e,t,n,r){let{global:i,specs:a}=ND(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let o;try{o=await
|
|
1449
|
+
`)}\n`}async function BD(e,t,n,r){let{global:i,specs:a}=ND(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let o;try{o=await qi(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${FD(t)}\n`,exitCode:1}}let s=o.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),c=o.results.filter(e=>!e.removed).map(e=>e.name),l=o.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${FD(t.error)}`);c.length>0&&l.push(`${e}: ${c.join(`, `)} not installed${i?` globally`:``}`);let u=o.errors.length>0;return i&&await ID(r),{stdout:s.length>0?`${s.join(`
|
|
1450
1450
|
`)}\n`:``,stderr:l.length>0?`${l.join(`
|
|
1451
|
-
`)}\n`:``,exitCode:+!!u}}async function VD(e,t,n,r){let{global:i}=ND(t);try{let e=i?await
|
|
1451
|
+
`)}\n`:``,exitCode:+!!u}}async function VD(e,t,n,r){let{global:i}=ND(t);try{let e=i?await Wi(r.fs):await Bi(r.fs,n.cwd);return{stdout:zD(i?tr:n.cwd,e),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${FD(t)}\n`,exitCode:1}}}async function HD(e,t,n,r){let{global:i}=ND(t);return{stdout:`${i?Kn:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}function UD(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(PD(r))return{stdout:jD(e),stderr:``,exitCode:0};if(n)return RD(e,r,i,t);if(r.length===0)return{stdout:jD(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return ED.has(a)?RD(e,o,i,t):DD.has(a)?BD(e,o,i,t):OD.has(a)?VD(e,o,i,t):a===`root`?HD(e,o,i,t):YE.has(a)?TD(e,o,i,{fs:t.fs}):XE.has(a)?TD(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run)\n`,exitCode:1}})}const WD=`0.5.461`,GD=`v86 is not installed in node_modules: run \`${N} v86@${WD}\` (no network fallback)`;let KD=null;async function qD(e={}){return KD||=ZD(e.ipk).catch(e=>{throw KD=null,e}),KD}const JD=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function YD(e,t){for(let{js:n,wasm:r}of JD){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 XD(e){let t;try{t=await qn(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await YD(Te(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.461`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function ZD(e){if(or())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(GD);let t=await XD(e);if(!t)throw Error(GD);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 Yr(t.wasmBytes),version:t.version}}function QD(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const $D={command:`biome`,example:`biome check foo.js`,bootstrap:`${N} ${__}`},eO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},tO={command:`puppeteer`,example:`puppeteer open https://example.com`},nO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${N} @imagemagick/magick-wasm@${Ni}`},rO={...nO,command:`magick`,example:`magick input.png output.jpg`},iO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},aO={"@biomejs/biome":$D,biome:$D,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${N} esbuild-wasm@${Jr}`},playwright:eO,"@playwright/test":eO,"playwright-core":eO,puppeteer:tO,"puppeteer-core":tO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:sr},"pdf-poppler":iO,"pdf-to-img":iO,pdf2pic:iO,"pdf-img-convert":iO,poppler:iO,"poppler-utils":iO,imagemagick:nO,"imagemagick-cli":nO,"imagemagick-convert":nO,"magick-cli":rO,"@imagemagick/magick-wasm":rO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${$i}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${$i}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${$i}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${$i}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${N} v86@${WD}`}};function oO(e){return Object.hasOwn(aO,e)?aO[e]:void 0}function sO(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function cO(e,t,n,r){let i=n.length?[r.command,...n].map(sO).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(sO).join(` `)}`),`${a.join(`
|
|
1452
1452
|
`)}\n`}const lO=/require\(\s*["']([^"']+)["']\s*\)/;function uO(e){return`${e} - run an installed package's executable bin
|
|
1453
1453
|
|
|
1454
1454
|
Usage:
|
|
@@ -1462,8 +1462,8 @@ Options:
|
|
|
1462
1462
|
--force Install a package even when a SLICC built-in shadows it
|
|
1463
1463
|
--global Resolve only from the shared global prefix (/shared/lib/node_modules)
|
|
1464
1464
|
-h, --help Show this help message
|
|
1465
|
-
`}async function dO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function fO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function pO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*mO(e,t=!1){if(t){yield Kn;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Te(n).dir;yield Kn}async function hO(e,t,n,r=!1){for(let i of mO(t,r)){let t=x(i,`.bin`,n);if(!await fO(e,t))continue;let r=await dO(e,t),a=lO.exec(r),o=Te(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function gO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function _O(e,t){if(typeof e==`string`)return{binName:gO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,gO(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 vO(e,t,n,r=!1){for(let i of mO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await fO(e,r))continue;let a;try{a=JSON.parse(await dO(e,r))}catch{return null}let o=_O(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:x(t,s),argvName:x(i,`.bin`,o.binName)}}return null}async function yO(e,t,n,r=!1){return await hO(e,t,n,r)??await vO(e,t,n,r)}async function bO(e,t,n){for(let r of mO(t))if(await fO(e,x(r,n,`package.json`)))return!0;return!1}function xO(e){return e instanceof Error?e.message:String(e)}function SO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function CO(e,t,n,r){try{let i=await
|
|
1466
|
-
`)}\n`:``}}catch(n){return{error:SO(e,`failed to install '${t}': ${xO(n)}`)}}}async function wO(e,t,n,r){return await fO(r,n)?null:await pO(r,n)?SO(e,`bin target '${n}' is a directory, not a file`):SO(e,`bin file '${n}' for '${t}' does not exist`)}async function TO(e,t,n,r,i,a){if(await bO(a.fs,i.cwd,t))return{error:SO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:oO(t);if(o)return{error:{stdout:``,stderr:cO(e,t,n,o),exitCode:1}};let s=await CO(e,t,i,a);if(`error`in s)return s;let c=await yO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:SO(e,`package '${t}' was installed but does not expose an executable bin`)}}function EO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:uO(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:uO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await yO(t.fs,r.cwd,c,o)}catch(t){return SO(e,xO(t))}let d=``;if(!u){if(o)return SO(e,`no global bin '${c}' found in ${Kn}`);let n=await TO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await wO(e,c,u.binFilePath,t.fs);if(f)return f;let p=
|
|
1465
|
+
`}async function dO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function fO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function pO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*mO(e,t=!1){if(t){yield Kn;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Te(n).dir;yield Kn}async function hO(e,t,n,r=!1){for(let i of mO(t,r)){let t=x(i,`.bin`,n);if(!await fO(e,t))continue;let r=await dO(e,t),a=lO.exec(r),o=Te(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function gO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function _O(e,t){if(typeof e==`string`)return{binName:gO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,gO(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 vO(e,t,n,r=!1){for(let i of mO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await fO(e,r))continue;let a;try{a=JSON.parse(await dO(e,r))}catch{return null}let o=_O(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:x(t,s),argvName:x(i,`.bin`,o.binName)}}return null}async function yO(e,t,n,r=!1){return await hO(e,t,n,r)??await vO(e,t,n,r)}async function bO(e,t,n){for(let r of mO(t))if(await fO(e,x(r,n,`package.json`)))return!0;return!1}function xO(e){return e instanceof Error?e.message:String(e)}function SO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function CO(e,t,n,r){try{let i=await Yi([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(i.errors.length>0)return{error:SO(e,`failed to install '${t}': ${xO(i.errors[0].error)}`)};let a=i.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:a.length>0?`${a.join(`
|
|
1466
|
+
`)}\n`:``}}catch(n){return{error:SO(e,`failed to install '${t}': ${xO(n)}`)}}}async function wO(e,t,n,r){return await fO(r,n)?null:await pO(r,n)?SO(e,`bin target '${n}' is a directory, not a file`):SO(e,`bin file '${n}' for '${t}' does not exist`)}async function TO(e,t,n,r,i,a){if(await bO(a.fs,i.cwd,t))return{error:SO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:oO(t);if(o)return{error:{stdout:``,stderr:cO(e,t,n,o),exitCode:1}};let s=await CO(e,t,i,a);if(`error`in s)return s;let c=await yO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:SO(e,`package '${t}' was installed but does not expose an executable bin`)}}function EO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:uO(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:uO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await yO(t.fs,r.cwd,c,o)}catch(t){return SO(e,xO(t))}let d=``;if(!u){if(o)return SO(e,`no global bin '${c}' found in ${Kn}`);let n=await TO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await wO(e,c,u.binFilePath,t.fs);if(f)return f;let p=Wr(await dO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await Hr(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function DO(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-BEOVa96v.js`);return r(t,n,e)})}const OO=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function kO(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return FO();let n=e.processManager??AO();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
|
|
1467
1467
|
`,exitCode:1};let r=jO(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=MO(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
|
|
1468
1468
|
`)}\n`:``,exitCode:+!i}})}function AO(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function jO(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
|
|
1469
1469
|
`,exitCode:2};let i=NO(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=PO(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
|
|
@@ -1505,13 +1505,13 @@ Examples:
|
|
|
1505
1505
|
load <name> Restore a saved arrangement
|
|
1506
1506
|
delete <name> Delete a saved arrangement
|
|
1507
1507
|
reset Restore the default arrangement
|
|
1508
|
-
edit Alias for \`layout set ${
|
|
1508
|
+
edit Alias for \`layout set ${ls}\` (there is no edit mode)
|
|
1509
1509
|
docs Describe the layout surfaces
|
|
1510
1510
|
panels List the registered panel ids
|
|
1511
1511
|
|
|
1512
1512
|
Zones: ${IO.join(`, `)}
|
|
1513
|
-
`,RO=new Set([`files`,`term`,`memory`,`monitor`]),zO=`sprinkle:`;function BO(e){return e===`chat`||RO.has(e)||e.startsWith(zO)?e:`${zO}${e}`}function VO(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 HO=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function UO(e){let t=e[0],n=t?
|
|
1514
|
-
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const nk
|
|
1513
|
+
`,RO=new Set([`files`,`term`,`memory`,`monitor`]),zO=`sprinkle:`;function BO(e){return e===`chat`||RO.has(e)||e.startsWith(zO)?e:`${zO}${e}`}function VO(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 HO=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function UO(e){let t=e[0],n=t?ps(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function WO(e){let t=e[0];return IO.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${IO.join(`|`)}>`}}function GO(e){let[t,n]=e;return!t||!IO.includes(n)?{error:`usage: layout open <surfaceId> <${IO.join(`|`)}>`}:{kind:`open`,surfaceId:BO(t),zone:n}}function KO(e){let t=e[0];return t?{kind:`close`,surfaceId:BO(t)}:{error:`usage: layout close <surfaceId>`}}function qO(e){let[t,n]=e;return!t||!IO.includes(n)?{error:`usage: layout move <surfaceId> <${IO.join(`|`)}>`}:{kind:`move`,surfaceId:BO(t),zone:n}}function JO(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=VO(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 YO(e){let t=e[0];if(!t)return{error:HO};let n={};for(let t=1;t<e.length;t+=2){let r=JO(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:HO}:{kind:`size`,surfaceId:BO(t),size:n}}function XO(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 ZO(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function QO(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:BO(n)}:{kind:`hide`,panelId:BO(n)}:{error:`usage: layout ${e} <panelId>`}}function $O(){let e=ps(ls);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function ek(e){let[t,...n]=e;switch(t){case`set`:return UO(n);case`chat`:return WO(n);case`open`:return GO(n);case`close`:return KO(n);case`move`:return qO(n);case`size`:return YO(n);case`reset`:return{kind:`reset`};case`edit`:return $O();case`load`:return ZO(`load`,n);case`save`:return XO(n);case`delete`:return ZO(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return QO(`show`,n);case`hide`:return QO(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function tk(){return S(`layout`,async e=>{if(w(e))return{stdout:e[0]?.startsWith(`-`)?LO:$e(`layout`,e[0],LO),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(fs).join(`, `)}\ndefault: ${ls}\n`,stderr:``,exitCode:0};let t=ek(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=y();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
|
|
1514
|
+
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const nk=ea.id;function rk(){return`local-llm — inspect and configure the Local LLM provider
|
|
1515
1515
|
|
|
1516
1516
|
Usage:
|
|
1517
1517
|
local-llm Show current config + verify connection
|
|
@@ -1536,14 +1536,14 @@ Common base URLs:
|
|
|
1536
1536
|
`)+`
|
|
1537
1537
|
`,stderr:``,exitCode:0}}function ck(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${ik(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...ak(t.models)].join(`
|
|
1538
1538
|
`)+`
|
|
1539
|
-
`,stderr:``,exitCode:0}}function lk(){return S(nk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:rk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-
|
|
1539
|
+
`,stderr:``,exitCode:0}}function lk(){return S(nk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:rk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-_Ksq0LeF.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-BUnPutW1.js`).then(e=>e.n),o=e[0]??`status`;if(o!==`status`&&o!==`discover`)return{stdout:``,stderr:`Unknown subcommand: ${o}. See \`local-llm --help\`.\n`,exitCode:2};let s=r(nk);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
|
|
1540
1540
|
`,exitCode:1};let c=await a(s,t(nk)??void 0);if(!c.ok)return ok(s,c);if(o===`discover`){let e=n(nk)??``;return i(nk,e,s,c.models.join(`, `)),ck(s,c)}return sk(s,c)})}function uk(){return{stdout:`usage: man <topic>
|
|
1541
1541
|
|
|
1542
1542
|
Fetches documentation for a given topic from sliccy.com.
|
|
1543
1543
|
`,stderr:``,exitCode:0}}function dk(e){return e.replace(/<[^>]*>/g,``).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).replace(/&/g,`&`).trimEnd()}function fk(){let e=h();return S(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return uk();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
|
|
1544
1544
|
For example, try 'man commands'.
|
|
1545
1545
|
`,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:dk(new TextDecoder(`utf-8`).decode(t.body))+`
|
|
1546
|
-
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const pk=[`--silent`,`-s`,`--interactive`,`-i`],mk=e(`mcp-command`),hk=`/workspace/.mcp/aliases`;function
|
|
1546
|
+
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const pk=[`--silent`,`-s`,`--interactive`,`-i`],mk=e(`mcp-command`),hk=`/workspace/.mcp/aliases`;function W(e){return{stdout:e,stderr:``,exitCode:0}}function G(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function gk(e){return G(`mcp: ${e}`)}function _k(){return`usage: mcp <command> [args]
|
|
1547
1547
|
|
|
1548
1548
|
Commands:
|
|
1549
1549
|
add <url> <name> Register an MCP server. Runs OAuth if required.
|
|
@@ -1565,7 +1565,7 @@ Examples:
|
|
|
1565
1565
|
mcp search forecast
|
|
1566
1566
|
mcp auth weather
|
|
1567
1567
|
mcp delete weather
|
|
1568
|
-
`}function vk(e={}){return S(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return
|
|
1568
|
+
`}function vk(e={}){return S(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return W(_k());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await yk(r,e);case`list`:case`ls`:return await xk(r,e);case`delete`:case`rm`:return await Tk(r,e);case`invoke`:return await Ek(r,e);case`search`:return await Ck(r,e);case`refresh`:return await Kk(r,e);case`auth`:return await qk(r,e);default:return G(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return mk.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof ta?G(`mcp ${n}: ${t}`,124):G(`mcp ${n}: ${t}`)}})}async function yk(e,t){if(w(e))return W(`usage: mcp add <url> <name>
|
|
1569
1569
|
|
|
1570
1570
|
Probes <url> with an unauthenticated MCP \`initialize\`. If the server
|
|
1571
1571
|
returns 401, runs OAuth discovery → dynamic client registration → PKCE
|
|
@@ -1574,20 +1574,20 @@ authorization-code flow, stores the access token, and retries.
|
|
|
1574
1574
|
On success, the server is persisted to /workspace/.mcp/servers.json and
|
|
1575
1575
|
an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
|
|
1576
1576
|
short name resolves on the PATH.
|
|
1577
|
-
`);let n=C(e,{});if(`error`in n)return gk(n.error);if(n.positionals.length<2)return
|
|
1577
|
+
`);let n=C(e,{});if(`error`in n)return gk(n.error);if(n.positionals.length<2)return G(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return G(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return G(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-BSzBYE_Q.js`).then(e=>e.r);if(await a(i,t.fs))return G(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-SwBG2bcE.js`).then(e=>e.n),l=new s({url:r,fetchImpl:t.fetchImpl}),u;try{await l.initialize()}catch(e){if(!(e instanceof c))throw e;u=await bk(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>Yk(i)}),await l.initialize()}let d=await l.toolsList(),f=await l.appsList(),p=new Date().toISOString();await o(i,{url:r,protocolVersion:l.getNegotiatedProtocolVersion(),tools:d,apps:f,addedAt:p,lastRefreshedAt:p,...u?{auth:u}:{}},t.fs),await eA(i,t);let m=await rA(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-DIX-yDf1.js`);e({name:i,serverUrl:r,auth:u})}return W([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${hk}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
|
|
1578
1578
|
`)+`
|
|
1579
|
-
`)}async function bk(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-
|
|
1580
|
-
`);let n=C(e,{});if(`error`in n)return gk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-
|
|
1579
|
+
`)}async function bk(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-_Ksq0LeF.js`).then(e=>e.t),c=await Zk(r.oauthFetchImpl),l=r.oauthLauncher??await Xk(),u=await i(e,n,c);mk.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await na(ge()),f=await a(u,d,c),p=u.supportedScopes&&u.supportedScopes.length>0?u.supportedScopes.join(` `):void 0,m=await o({asMetadata:u,clientId:f.clientId,scope:p,redirectUri:d,launcher:l,fetchImpl:c}),h=`mcp:${t}`;return await s({providerId:h,accessToken:m.accessToken,refreshToken:m.refreshToken,tokenExpiresAt:m.expiresAt,scopes:m.scope}),{providerId:h,authorizationServer:u.issuer,clientId:f.clientId,redirectUri:d,scope:m.scope??p,registrationClientUri:f.registrationClientUri}}async function xk(e,t){if(w(e))return W(`usage: mcp list
|
|
1580
|
+
`);let n=C(e,{});if(`error`in n)return gk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-DIX-yDf1.js`);await r();let{listServers:i}=await import(`./store-BSzBYE_Q.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return W("No MCP servers configured. Use `mcp add <url> <name>`.\n");let s=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of o){let t=a[e];s.push([e,t.url,t.auth?`yes`:`no`,String(t.tools?.length??0),String(t.apps?.length??0),t.addedAt?t.addedAt.slice(0,10):`-`])}return W(Sk(s))}function Sk(e){let t=e[0].map((t,n)=>e.reduce((e,t)=>Math.max(e,(t[n]??``).length),0));return e.map(e=>e.map((e,n)=>e.padEnd(t[n])).join(` `).trimEnd()).join(`
|
|
1581
1581
|
`)+`
|
|
1582
|
-
`}async function Ck(e,t){if(w(e))return
|
|
1582
|
+
`}async function Ck(e,t){if(w(e))return W(`usage: mcp search <query>
|
|
1583
1583
|
|
|
1584
1584
|
Case-insensitive substring search across the cached tools of every
|
|
1585
1585
|
registered MCP server. Matches tool name OR description and prints a
|
|
1586
1586
|
table of (server, tool, description, match-field) rows.
|
|
1587
|
-
`);let n=C(e,{});if(`error`in n)return gk(n.error);if(n.positionals.length===0)return
|
|
1588
|
-
`);let n=C(e,{});if(`error`in n)return gk(n.error);let r=n.positionals[0];if(!r)return
|
|
1587
|
+
`);let n=C(e,{});if(`error`in n)return gk(n.error);if(n.positionals.length===0)return G(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-DIX-yDf1.js`);await a();let{listServers:o}=await import(`./store-BSzBYE_Q.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return W("No MCP servers configured. Use `mcp add <url> <name>`.\n");let l=[];for(let e of c){let t=s[e].tools??[];for(let n of t){let t=n.description??``,r=n.name.toLowerCase().includes(i),a=t.toLowerCase().includes(i);if(!r&&!a)continue;let o=r&&a?`name+description`:r?`name`:`description`;l.push({server:e,tool:n.name,description:t,match:o})}}if(l.length===0)return W(`No tools matched "${r}".\n`);l.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let u=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of l)u.push([e.server,e.tool,wk(e.description),e.match]);return W(Sk(u))}function wk(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function Tk(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp delete: expected <name>`):W(`usage: mcp delete <name>
|
|
1588
|
+
`);let n=C(e,{});if(`error`in n)return gk(n.error);let r=n.positionals[0];if(!r)return G(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-DIX-yDf1.js`);await i(r);let{deleteServer:o}=await import(`./store-BSzBYE_Q.js`).then(e=>e.r),s=await o(r,t.fs);await tA(r,t),await nA(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-_Ksq0LeF.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){mk.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?G(`mcp delete: no server, alias, or account found for "${r}"`):W([`Removed MCP server "${r}"`,` servers.json: ${s?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${l?`removed`:`not present`}`,` provider: ${u?`unregistered`:`not registered`}`].join(`
|
|
1589
1589
|
`)+`
|
|
1590
|
-
`)}async function Ek(e,t){if(e.length===0)return
|
|
1590
|
+
`)}async function Ek(e,t){if(e.length===0)return G(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return W(kk());let n=C([e[0]],{});if(`error`in n)return gk(n.error);let r=n.positionals[0];if(!r)return G(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-DIX-yDf1.js`);await a(r);let{getServer:o}=await import(`./store-BSzBYE_Q.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return G(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||w(i.slice(0,1)))return W(Ak(r,s,c));let l=C([i[0]],{});if(`error`in l)return gk(l.error);let u=l.positionals[0];if(!u)return G(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return G(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=Dk(i.slice(1));if(w(p))return W(Mk(r,d));let h=Nk(p,d.inputSchema);if(!h.ok)return G(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-SwBG2bcE.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>Yk(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=Gk(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function Dk(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=Ok(a.slice(10));e.ok?r=e.value:n.push(e.error),i+=1;continue}if(a===`--timeout`){let t=e[i+1];if(t===void 0||t.startsWith(`--`)){n.push(`mcp invoke: --timeout requires a value (got ${t===void 0?`nothing`:`"${t}"`}); using default.`),i+=1;continue}let a=Ok(t);a.ok?r=a.value:n.push(a.error),i+=2;continue}t.push(a),i+=1}return{timeoutMs:r,remaining:t,warnings:n}}function Ok(e){if(!/^-?\d+$/.test(e))return{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (expected positive integer seconds); using default.`};let t=Number(e);return!Number.isFinite(t)||t<1?{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (must be >= 1 second); using default.`}:{ok:!0,value:t*1e3}}function kk(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
|
|
1591
1591
|
|
|
1592
1592
|
mcp invoke <name> List tools on <name>.
|
|
1593
1593
|
mcp invoke <name> <tool> --help Show flags for <tool>.
|
|
@@ -1616,11 +1616,11 @@ Arguments are coerced according to the tool's JSON Schema:
|
|
|
1616
1616
|
`}function Nk(e,t){let n=jk(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=zk(),o=0;for(;o<e.length;){let t=Pk(e,o,r,a);if(!t.ok)return t;o=t.nextIndex}for(let e of i)if(!Object.hasOwn(a,e))return{ok:!1,error:`missing required flag --${e}`};return{ok:!0,value:a}}function Pk(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=Hk(i),s=Fk(a,n);if(!s.ok)return s;let{rootKey:c,dottedPath:l,meta:u}=s,d=u.type,f=d??`string`,p=f===`array`,m=(p?u.items?.type:void 0)??`string`;if(l&&d!==void 0&&d!==`object`)return{ok:!1,error:`unknown flag: --${a}`};let h=Ik(e,t,a,o,f,l);if(!h.ok)return h;if(h.bareBoolean)return r[c]=!0,{ok:!0,nextIndex:h.nextIndex};let g=l?`string`:p?m:f,_=Uk(h.raw,g);if(!_.ok)return{ok:!1,error:`--${a}: ${_.error}`};let v=Lk(r,c,l,_.value,p);return v.ok?{ok:!0,nextIndex:h.nextIndex}:v}function Fk(e,t){if(Object.hasOwn(t,e))return{ok:!0,rootKey:e,dottedPath:null,meta:t[e]??{}};let n=e.indexOf(`.`);if(n<=0)return{ok:!1,error:`unknown flag: --${e}`};let r=e.slice(0,n),i=e.slice(n+1);if(!Object.hasOwn(t,r)||i.length===0)return{ok:!1,error:`unknown flag: --${e}`};let a=i.split(`.`);return Bk(r)||a.some(e=>e.length===0||Bk(e))?{ok:!1,error:`unknown flag: --${e}`}:{ok:!0,rootKey:r,dottedPath:a,meta:t[r]??{}}}function Ik(e,t,n,r,i,a){if(r!==void 0)return{ok:!0,raw:r,nextIndex:t+1,bareBoolean:!1};let o=e[t+1];return!a&&i===`boolean`&&(o===void 0||o.startsWith(`--`))?{ok:!0,raw:``,nextIndex:t+1,bareBoolean:!0}:o===void 0?{ok:!1,error:`flag --${n} requires a value`}:{ok:!0,raw:o,nextIndex:t+2,bareBoolean:!1}}function Lk(e,t,n,r,i){if(n)return Rk(e,t,n,r);if(i){let n=e[t];return Array.isArray(n)?n.push(r):e[t]=[r],{ok:!0}}let a=e[t];return Vk(a)&&Vk(r)?(Object.assign(a,r),{ok:!0}):(e[t]=r,{ok:!0})}function Rk(e,t,n,r){if(Bk(t)||n.some(e=>e.length===0||Bk(e)))return{ok:!1,error:`unknown flag: --${t}.${n.join(`.`)}`};let i=Object.hasOwn(e,t)?e[t]:void 0;if(i===void 0)e[t]=zk();else if(!Vk(i))return{ok:!1,error:`--${t}: cannot nest into a ${typeof i} value`};let a=e[t];for(let e=0;e<n.length-1;e++){let r=n[e],i=Object.hasOwn(a,r)?a[r]:void 0;if(i===void 0)a[r]=zk();else if(!Vk(i))return{ok:!1,error:`--${t}.${n.slice(0,e+1).join(`.`)}: cannot nest into a ${typeof i} value`};a=a[r]}return a[n[n.length-1]]=r,{ok:!0}}function zk(){return Object.create(null)}function Bk(e){return e===`__proto__`||e===`prototype`||e===`constructor`}function Vk(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&e!==Object.prototype}function Hk(e){let t=e.indexOf(`=`);return t>2?{key:e.slice(2,t),inlineValue:e.slice(t+1)}:{key:e.slice(2),inlineValue:void 0}}function Uk(e,t){switch(t){case`integer`:return/^-?\d+$/.test(e)?{ok:!0,value:Number(e)}:{ok:!1,error:`expected integer, got "${e}"`};case`number`:{let t=Number(e);return Number.isFinite(t)?{ok:!0,value:t}:{ok:!1,error:`expected number, got "${e}"`}}case`boolean`:return e===`true`||e===`1`||e===`yes`?{ok:!0,value:!0}:e===`false`||e===`0`||e===`no`?{ok:!0,value:!1}:{ok:!1,error:`expected boolean, got "${e}"`};case`object`:return Wk(e);default:return{ok:!0,value:e}}}function Wk(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:`expected object JSON, got "${e}"`}}return Vk(t)?{ok:!0,value:t}:{ok:!1,error:`expected object JSON, got "${e}"`}}function Gk(e){let t=e??{},n=Array.isArray(t.content)?t.content:[],r=[];for(let e of n)if(!(!e||typeof e!=`object`))switch(e.type){case`text`:typeof e.text==`string`&&r.push(e.text);break;case`image`:r.push(`[image: ${e.mimeType??`unknown mime`}]`);break;case`resource`:{let t=e.resource?.uri??e.uri??`unknown uri`;r.push(`[resource: ${t}]`);break}default:r.push(`[${e.type??`unknown`}]`)}let i=r.join(`
|
|
1617
1617
|
`),a=i.endsWith(`
|
|
1618
1618
|
`)?``:`
|
|
1619
|
-
`;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function Kk(e,t){if(e.length===0||w(e))return e.length===0?
|
|
1619
|
+
`;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function Kk(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp refresh: expected <name>`):W(`usage: mcp refresh <name>
|
|
1620
1620
|
|
|
1621
1621
|
Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
|
|
1622
1622
|
OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
|
|
1623
|
-
`);let n=C(e,{});if(`error`in n)return gk(n.error);let r=n.positionals[0];if(!r)return
|
|
1623
|
+
`);let n=C(e,{});if(`error`in n)return gk(n.error);let r=n.positionals[0];if(!r)return G(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-DIX-yDf1.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-BSzBYE_Q.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return G(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-SwBG2bcE.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>Yk(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return G(`mcp refresh: server "${r}" returned 401 — token may have expired. Run \`mcp auth ${r}\` to re-authenticate.`);throw e}let d=await u.toolsList(),f=await u.appsList();await o(r,{...s,protocolVersion:u.getNegotiatedProtocolVersion(),tools:d,apps:f,lastRefreshedAt:new Date().toISOString()},t.fs);let p=await rA(r,f,t);return W(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function qk(e,t){if(w(e))return W(`usage: mcp auth <name> [--silent | --interactive]
|
|
1624
1624
|
|
|
1625
1625
|
Re-authenticate an existing MCP server. By default, attempts a silent
|
|
1626
1626
|
token renewal using the persisted refresh_token; if that returns no
|
|
@@ -1632,7 +1632,7 @@ Options:
|
|
|
1632
1632
|
-i, --interactive Skip silent renewal and open the OAuth popup
|
|
1633
1633
|
directly. Use after revoking a refresh token or
|
|
1634
1634
|
when the AS no longer accepts the cached one.
|
|
1635
|
-
`);let n=C(e,{bool:pk});if(`error`in n)return gk(n.error);let r=n.positionals[0];if(!r)return
|
|
1635
|
+
`);let n=C(e,{bool:pk});if(`error`in n)return gk(n.error);let r=n.positionals[0];if(!r)return G(`mcp auth: expected <name>`);let i=n.bools.has(`--silent`)||n.bools.has(`-s`),a=n.bools.has(`--interactive`)||n.bools.has(`-i`);if(i&&a)return G(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-DIX-yDf1.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-BSzBYE_Q.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return G(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return G(`mcp auth: server "${r}" does not use OAuth`);if(!s)return G(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-CLabs7-N.js`).then(e=>e.r),f=d(u);if(!f)return G(`mcp auth: provider "${u}" is not registered`);if(a)return await Jk(r,f,t);if(!f.onSilentRenew)return i?G(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await Jk(r,f,t);let p=null;try{p=await f.onSilentRenew()}catch(e){let t=e instanceof Error?e.message:String(e);if(i)return G(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);mk.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?W(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?G(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await Jk(r,f,t)}async function Jk(e,t,n){if(!t.onOAuthLogin)return G(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await Xk(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?W(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):G(`mcp auth: interactive login for "${e}" did not complete`)}async function Yk(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-_Ksq0LeF.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-CLabs7-N.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){mk.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function Xk(){let{createOAuthLauncher:e}=await import(`./oauth-service-Gh6Z-BhZ.js`);return e()}async function Zk(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-CZTz7e5K.js`).then(e=>e.i),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function Qk(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-CNQgTr1W.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return await t.create({dbName:n})}function $k(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
|
|
1636
1636
|
// Auto-generated by \`mcp add ${e}\`; do not edit by hand.
|
|
1637
1637
|
const { promisify } = require('util');
|
|
1638
1638
|
const { exec } = require('child_process');
|
|
@@ -1661,7 +1661,7 @@ try {
|
|
|
1661
1661
|
if (stdout) process.stdout.write(stdout);
|
|
1662
1662
|
if (stderr) process.stderr.write(stderr);
|
|
1663
1663
|
process.exit(exitCode);
|
|
1664
|
-
`}async function eA(e,t){let n=await Qk(t.fs);await n.mkdir(hk,{recursive:!0}),await n.writeFile(`${hk}/${e}.jsh`,$k(e)),t.scriptCatalog?.invalidateJsh()}async function tA(e,t){let n=await Qk(t.fs),r=`${hk}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){mk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function nA(e,t){let{removeAppSprinkles:n}=await import(`./apps-
|
|
1664
|
+
`}async function eA(e,t){let n=await Qk(t.fs);await n.mkdir(hk,{recursive:!0}),await n.writeFile(`${hk}/${e}.jsh`,$k(e)),t.scriptCatalog?.invalidateJsh()}async function tA(e,t){let n=await Qk(t.fs),r=`${hk}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){mk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function nA(e,t){let{removeAppSprinkles:n}=await import(`./apps-Baz0Lnmg.js`);await n(e,t.fs)}async function rA(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-Baz0Lnmg.js`);return(await r(e,t,n.fs)).length}catch(t){return mk.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function iA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function aA(e){if(e<1024)return`${e} B`;let t=[`KB`,`MB`,`GB`],n=e,r=`B`;for(let e of t){if(n<1024)break;n/=1024,r=e}return`${n.toFixed(1)} ${r}`}function oA(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 sA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function cA(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 lA(e){let t=[`total: ${aA(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(`${aA(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${oA(e)}`)}return`${t.join(`
|
|
1665
1665
|
`)}\n`}function uA(e={}){return S(`meminfo`,async t=>{let n=cA(t);if(`error`in n)return iA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
|
|
1666
1666
|
|
|
1667
1667
|
Usage:
|
|
@@ -1673,7 +1673,7 @@ Notes:
|
|
|
1673
1673
|
Document-Isolation-Policy). Embedded floats cannot be isolated and
|
|
1674
1674
|
report why instead.
|
|
1675
1675
|
- The browser randomizes measurement timing — expect a short delay.
|
|
1676
|
-
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??sA();if(!r&&!e.measure)return iA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return iA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return iA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:lA(a),stderr:``,exitCode:0}})}function dA(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-
|
|
1676
|
+
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??sA();if(!r&&!e.measure)return iA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return iA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return iA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:lA(a),stderr:``,exitCode:0}})}function dA(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-DSzWrEfE.js`);return n(t,e)})}function fA(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const pA=`/.cache/artificial-analysis.json`,mA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],hA=[`--provider`];function gA(e){return{stdout:``,stderr:e.endsWith(`
|
|
1677
1677
|
`)?e:`${e}\n`,exitCode:1}}async function _A(e){try{let t=await e.readFile(pA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function vA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function yA(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 bA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(pA,JSON.stringify(n))}catch{}}async function xA(e,t=!1){if(e&&!t){let t=await _A(e);if(t)return t}let n={Accept:`application/json`},r=vA();r&&(n[`x-api-key`]=r);let i=h(),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=yA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await bA(e,c),c}function SA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function CA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=SA(e),a=t.find(e=>SA(e.slug)===i);if(a)return a;let o=t.filter(e=>n.includes(e.slug)||e.slug.includes(n));if(o.length!==0)return o.sort((e,t)=>t.slug.length-e.slug.length),o[0]}function wA(){return`models - list available LLM models
|
|
1678
1678
|
|
|
1679
1679
|
Usage: models [options]
|
|
@@ -1688,7 +1688,7 @@ Options:
|
|
|
1688
1688
|
-h, --help Show this help message
|
|
1689
1689
|
`}function TA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function EA(e){return`$${e.toFixed(2)}`}const DA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function OA(e){let t=`${e.id} ${e.name??``}`;return!DA.test(t)}function kA(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 AA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),kA(t)??t.replace(/-[\d.]+$/,``)}function jA(e){let t=new Map;for(let n of e){let e=AA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function MA(e,t,n,r,i){let a=i?CA(e.id,i):void 0,o={id:e.id,name:e.name,provider:t,cost:e.cost??{input:0,output:0,cacheRead:0,cacheWrite:0},contextWindow:e.contextWindow??0,maxTokens:e.maxTokens??0,reasoning:!!e.reasoning,input:e.input??[`text`],selected:e.id===n&&t===r};return a?.intelligence_index!=null&&(o.intelligence=a.intelligence_index),a?.coding_index!=null&&(o.codingScore=a.coding_index),a?.speed_tps!=null&&(o.speed=a.speed_tps),o}function NA(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=`${EA(e.cost.input)} / ${EA(e.cost.output)}`,a=`${TA(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(`
|
|
1690
1690
|
`)+`
|
|
1691
|
-
`}function PA(e){let t=C(e,{bool:mA,value:hA});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 FA(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 IA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(OA);if(o.length===0)return[];let s=o.map(e=>MA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=jA(s)),s}function LA(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 RA(e,t){if(w(e,{valueFlags:hA}))return{stdout:wA(),stderr:``,exitCode:0};let n=PA(e);if(`error`in n)return gA(`models: ${n.error}`);let r=await import(`./account-store-
|
|
1691
|
+
`}function PA(e){let t=C(e,{bool:mA,value:hA});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 FA(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 IA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(OA);if(o.length===0)return[];let s=o.map(e=>MA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=jA(s)),s}function LA(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 RA(e,t){if(w(e,{valueFlags:hA}))return{stdout:wA(),stderr:``,exitCode:0};let n=PA(e);if(`error`in n)return gA(`models: ${n.error}`);let r=await import(`./account-store-_Ksq0LeF.js`).then(e=>e.t);if(r.getAccounts().length===0)return gA(`No provider accounts configured. Run the provider settings to add one.
|
|
1692
1692
|
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await xA(t,n.forceRefresh);e.length>0&&(l=e)}let u=FA(r,n,s);if(`error`in u)return gA(u.error);let d=[],f=[];for(let e of u){let t=IA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return gA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(NA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
|
|
1693
1693
|
`,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
|
|
1694
1694
|
`),f.push(LA(o,a,s,c)),{stdout:f.join(`
|
|
@@ -1704,10 +1704,10 @@ Options:
|
|
|
1704
1704
|
-v, --version print Node shim version
|
|
1705
1705
|
`,stderr:``,exitCode:0}}function KA(){return{stdout:`${ir}\n`,stderr:``,exitCode:0}}function qA(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
|
|
1706
1706
|
`,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
|
|
1707
|
-
`,exitCode:9}}}function JA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function YA(e){return e instanceof Error?e.stack??e.message:String(e)}async function XA(e,t,n){if(!(Yn(e)||dr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await
|
|
1707
|
+
`,exitCode:9}}}function JA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function YA(e){return e instanceof Error?e.stack??e.message:String(e)}async function XA(e,t,n){if(!(Yn(e)||dr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await qr()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(YA(r)))throw r;return Kr()({source:e,filename:t,fromDir:JA(t,n)})}}async function ZA(e,t,n){let r=e;try{r=await XA(e,t,n)}catch(e){return{stdout:``,stderr:`${YA(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:`${YA(e)}\n`,exitCode:1}}}async function QA(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
|
|
1708
1708
|
`,exitCode:9}};if(e.length>0&&BA.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"
|
|
1709
1709
|
`,exitCode:9}}}function $A(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=WA(t);if(r.error)return r.error;if(r.help)return GA();if(r.version)return KA();let i=await QA(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
|
|
1710
|
-
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=qA(o,r.inputType);if(l)return l;let u=
|
|
1710
|
+
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=qA(o,r.inputType);if(l)return l;let u=Wr(a);return r.check?ZA(u,o,n.cwd):Hr(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const ej=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function tj(){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 nj=[],rj=[`--yes`];function ij(){return S(`nuke`,async e=>{if(w(e,{valueFlags:nj}))return{stdout:`Usage: nuke <launch-code>
|
|
1711
1711
|
|
|
1712
1712
|
Completely reset the environment by deleting all local data and reloading.
|
|
1713
1713
|
Destroys the file system, chat history, and scoops database.
|
|
@@ -1746,7 +1746,7 @@ Examples:
|
|
|
1746
1746
|
`)}\n`,stderr:``,exitCode:0}}async function lj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
|
|
1747
1747
|
`,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 uj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
|
|
1748
1748
|
`,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 dj(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>
|
|
1749
|
-
`,exitCode:1}}async function fj(e,t,n,r){switch(t){case`list`:return cj(e,n);case`add`:return lj(e,n,r);case`remove`:return uj(e,n,r);case`clear`:return dj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${oj()}`,exitCode:1}}}function pj(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:oj(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return sj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-
|
|
1749
|
+
`,exitCode:1}}async function fj(e,t,n,r){switch(t){case`list`:return cj(e,n);case`add`:return lj(e,n,r);case`remove`:return uj(e,n,r);case`clear`:return dj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${oj()}`,exitCode:1}}}function pj(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:oj(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return sj(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-_Ksq0LeF.js`).then(e=>e.t);try{return await fj(a,n,r,i)}catch(e){return sj(e instanceof Error?e.message:String(e))}})}function mj(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-Bq-Xk94T.js`);return n(e,t)})}const hj=[`--download`,`-d`,`--view`,`-v`],gj=[`--size`],_j={low:256,medium:768,high:1536};function vj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
|
|
1750
1750
|
|
|
1751
1751
|
VFS paths are served in a new browser tab via the preview service worker.
|
|
1752
1752
|
URLs (http/https/etc.) are opened directly in a new tab.
|
|
@@ -1765,14 +1765,14 @@ Examples:
|
|
|
1765
1765
|
--size medium (768x768)
|
|
1766
1766
|
--size high (1536x1536)
|
|
1767
1767
|
--size WxH (custom box, e.g. 512x512)
|
|
1768
|
-
`}const Sj=new Set([`image/png`,`image/webp`]);function Cj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function wj(e,t){let n=Cj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Tj(e,t,n,r){let i=Cj(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=bj(e,t)?Sj.has(t)?t:`image/png`:`image/jpeg`,p=await u.convertToBlob(f===`image/jpeg`?{type:`image/jpeg`,quality:.85}:{type:f});return{bytes:new Uint8Array(await p.arrayBuffer()),mime:f,width:c,height:l,nativeWidth:i,nativeHeight:a}}finally{o.close?.()}}function Ej(e){let t=C(e,{bool:hj,value:gj});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 Dj(e){return{ok:!0,message:e}}function
|
|
1769
|
-
`)}async function jj(e,t,n){if(!t)return
|
|
1770
|
-
`);let r;try{r=await n(e)}catch(e){return
|
|
1771
|
-
`);let i;try{i=await n.fs.stat(t)}catch{return
|
|
1772
|
-
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Xn(t.fs,i?e:ar(e)),o=
|
|
1768
|
+
`}const Sj=new Set([`image/png`,`image/webp`]);function Cj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function wj(e,t){let n=Cj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function Tj(e,t,n,r){let i=Cj(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=bj(e,t)?Sj.has(t)?t:`image/png`:`image/jpeg`,p=await u.convertToBlob(f===`image/jpeg`?{type:`image/jpeg`,quality:.85}:{type:f});return{bytes:new Uint8Array(await p.arrayBuffer()),mime:f,width:c,height:l,nativeWidth:i,nativeHeight:a}}finally{o.close?.()}}function Ej(e){let t=C(e,{bool:hj,value:gj});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 Dj(e){return{ok:!0,message:e}}function K(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function Oj(e){return e?` (targetId: ${e})`:``}function kj(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 Aj(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),Dj(`opened sprinkle ${e} from ${a}`)}catch(e){return K(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await Xn(t.fs,ar(a)),n=Dr(a,e),r;try{r=await i(n)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return Dj(`opened ${a} → ${n}${Oj(r)}`)}return K(`open: sprinkle manager not initialized
|
|
1769
|
+
`)}async function jj(e,t,n){if(!t)return K(`open: browser APIs are unavailable in this environment
|
|
1770
|
+
`);let r;try{r=await n(e)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return Dj(`opened ${e}${Oj(r)}`)}async function Mj(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return K(`open: no such file: ${e}\n`)}if(!a.isFile)return K(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return K(`open: failed to read: ${e}\n`)}let s=Jn(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=yj(i),!l))return K(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await wj(c,s)}catch(t){return K(`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 K(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+xj())}let u;try{u=await Tj(c,s,l.maxW,l.maxH)}catch(t){return K(`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 Dj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function Nj(e,t,n,r){if(!r)return K(`open: --download requires the in-panel terminal (DOM-only)
|
|
1771
|
+
`);let i;try{i=await n.fs.stat(t)}catch{return K(`open: no such file: ${e}\n`)}if(!i.isFile)return K(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return K(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:Jn(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=er(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),Dj(`downloaded ${t}`)}async function Pj(e,t,n,r){if(!n)return K(`open: browser APIs are unavailable in this environment
|
|
1772
|
+
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Xn(t.fs,i?e:ar(e)),o=Dr(e,a),s;try{s=await r(o)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return Dj(`opened ${e} → ${o}${Oj(s)}`)}async function Fj(e,t,n,r){if(!Qn(e)&&e.endsWith(`.shtml`)&&t.fs)return Aj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return K(`open: browser APIs are unavailable in this environment
|
|
1773
1773
|
`);if(Qn(e))return jj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?Mj(e,i,t,n.sizeSpec):n.download?Nj(e,i,t,r.hasDom):Pj(i,t,r.canOpenWindow,r.openExternal)}function Ij(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:gj}))return vj();let r=Ej(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 vj();let c=globalThis.__slicc_sprinkleManager,l=typeof window<`u`&&typeof document<`u`,u=l?null:y(),d={canOpenWindow:!!e||l||!!u,hasDom:l,sprinkleManager:c,openExternal:kj(e,l,u)},f=[];for(let e of s){let t=await Fj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
|
|
1774
1774
|
`)+`
|
|
1775
|
-
`,stderr:``,exitCode:0}})}function Lj(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-
|
|
1775
|
+
`,stderr:``,exitCode:0}})}function Lj(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-DnjuDRM3.js`);return n(e,t)})}function Rj(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function zj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
|
|
1776
1776
|
|
|
1777
1777
|
Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
|
|
1778
1778
|
is zero-padded to the digit width of the last page (out-1.png for a 9-page
|
|
@@ -1799,8 +1799,8 @@ Examples:
|
|
|
1799
1799
|
pdftoppm -png -r 150 doc.pdf page
|
|
1800
1800
|
pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
|
|
1801
1801
|
pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
|
|
1802
|
-
`,stderr:``,exitCode:0}}function Bj(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 Vj(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 Hj(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=Vj(e[++d]),t=`jpeg`;break;case`-r`:n=Bj(e[++d],`-r`);break;case`-f`:r=Bj(e[++d],`-f`);break;case`-l`:i=Bj(e[++d],`-l`);break;case`-scale-to`:a=Bj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=Bj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=Bj(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 Uj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Wj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Gj(e){return e===`jpeg`?`jpg`:`png`}function Kj(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:
|
|
1803
|
-
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Yj(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Xj(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 Zj(){cw(()=>()=>ee()),sw(()=>()=>Xj(ee()))}const Qj=`/workspace/.plugins/sources`;function $j(e){return{stdout:e,stderr:``,exitCode:0}}function
|
|
1802
|
+
`,stderr:``,exitCode:0}}function Bj(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 Vj(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 Hj(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=Vj(e[++d]),t=`jpeg`;break;case`-r`:n=Bj(e[++d],`-r`);break;case`-f`:r=Bj(e[++d],`-f`);break;case`-l`:i=Bj(e[++d],`-l`);break;case`-scale-to`:a=Bj(e[++d],`-scale-to`);break;case`-scale-to-x`:o=Bj(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=Bj(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 Uj(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function Wj(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function Gj(e){return e===`jpeg`?`jpg`:`png`}function Kj(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Li(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function qj(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Fi(r))throw Error(`${t}: not a PDF file`);return r}function Jj(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return zj();let r;try{r=Hj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await qj(n,r.inputPath),i=Gj(r.format),a=r.outputRoot??Uj(er(r.inputPath)),o=[];return await Pi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Kj(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:Wj(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(`
|
|
1803
|
+
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function Yj(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Xj(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 Zj(){cw(()=>()=>ee()),sw(()=>()=>Xj(ee()))}const Qj=`/workspace/.plugins/sources`;function $j(e){return{stdout:e,stderr:``,exitCode:0}}function q(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function eM(e,t){let n=C(t,{});return`error`in n?q(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function tM(){return`usage: plugin <command> [args]
|
|
1804
1804
|
|
|
1805
1805
|
Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
|
|
1806
1806
|
directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
|
|
@@ -1832,7 +1832,7 @@ Examples:
|
|
|
1832
1832
|
plugin list
|
|
1833
1833
|
plugin info my-plugin
|
|
1834
1834
|
plugin remove my-plugin
|
|
1835
|
-
`}function nM(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return $j(tM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await lM(i,a,e);case`list`:case`ls`:return await pM(i,e);case`info`:return await mM(i,e);case`validate`:return await hM(i,a,e,
|
|
1835
|
+
`}function nM(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return $j(tM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await lM(i,a,e);case`list`:case`ls`:return await pM(i,e);case`info`:return await mM(i,e);case`validate`:return await hM(i,a,e,zi(n?.env));case`remove`:case`rm`:case`delete`:return await gM(i,e);default:return q(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return q(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function rM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-CNQgTr1W.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 iM(e,t,n){let r=_M(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-CLwrUeHG.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 aM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function oM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${Qj}/${t.map(aM).join(`--`)}`}async function sM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-ggx_X_vr.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 cM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function lM(e,t,n){if(w(e))return $j(`usage: plugin install <path|repo>
|
|
1836
1836
|
|
|
1837
1837
|
Loads the Agent Plugins package at <path>, or downloads it from a GitHub
|
|
1838
1838
|
reference (owner/repo, owner/repo@branch, or
|
|
@@ -1843,19 +1843,19 @@ mcp.json. On success the plugin is recorded in
|
|
|
1843
1843
|
/workspace/.plugins/plugins.json — its skills then surface through the
|
|
1844
1844
|
standard skills discovery, and each supported streamable-http MCP server
|
|
1845
1845
|
is registered in the MCP store as "<plugin>:<server>".
|
|
1846
|
-
`);let r=eM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return
|
|
1846
|
+
`);let r=eM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return q(`plugin install: expected <path|repo>`);let i=await rM(n),a=await iM(r.positionals[0],t,i);if(a.kind===`error`)return q(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return q(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=oM(a.ref),s=a.ref.display;let e=await sM(a.ref,o,i,n.fetch);if(e)return q(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-Dw-TPPKt.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await cM(i,o),q(`plugin install: plugin at ${s??o} was rejected:\n${vM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-DQazKd79.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await cM(i,o),q(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await fM(u,n),g=await dM(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),$j(uM(u,h,g,s??o,l.diagnostics))}function uM(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:`,vM(i)),c.join(`
|
|
1847
1847
|
`)+`
|
|
1848
|
-
`}async function dM(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-
|
|
1849
|
-
`);let n=eM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-
|
|
1848
|
+
`}async function dM(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-BSzBYE_Q.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 fM(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-BSzBYE_Q.js`).then(e=>e.r),{McpClient:a}=await import(`./client-SwBG2bcE.js`).then(e=>e.n),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 pM(e,t){if(w(e))return $j(`usage: plugin list
|
|
1849
|
+
`);let n=eM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-DQazKd79.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return $j("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 $j(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
|
|
1850
1850
|
`)+`
|
|
1851
1851
|
`)}async function mM(e,t){if(w(e))return $j(`usage: plugin info <name>
|
|
1852
|
-
`);let n=eM(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return
|
|
1852
|
+
`);let n=eM(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return q(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-DQazKd79.js`),a=await i(r,t.fs);if(!a)return q(`plugin info: no installed plugin named "${r}"`);let o=await rM(t),{loadPluginFromDirectory:s}=await import(`./loader-Dw-TPPKt.js`),c=await s(o,a.root);if(!c.ok)return q(`plugin info: plugin at ${a.root} no longer loads:\n${vM(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:`,vM(c.diagnostics)),$j(d.join(`
|
|
1853
1853
|
`)+`
|
|
1854
1854
|
`)}async function hM(e,t,n,r){if(w(e))return $j(`usage: plugin validate <path|repo>
|
|
1855
|
-
`);let i=eM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return
|
|
1855
|
+
`);let i=eM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return q(`plugin validate: expected <path|repo>`);let a=await rM(n),o=await iM(i.positionals[0],t,a);if(o.kind===`error`)return q(`plugin validate: ${o.message}`);let s,c=null;if(o.kind===`github`){if(!n.fetch)return q(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);c=`${r}/.plugin-validate/${oM(o.ref).split(`/`).pop()}`;let e=await sM(o.ref,c,a,n.fetch);if(e)return q(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-Dw-TPPKt.js`),u;try{u=await l(a,s)}finally{c&&await cM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${vM(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:`,vM(u.diagnostics)),$j(p.join(`
|
|
1856
1856
|
`)+`
|
|
1857
1857
|
`)}async function gM(e,t){if(w(e))return $j(`usage: plugin remove <name>
|
|
1858
|
-
`);let n=eM(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return
|
|
1858
|
+
`);let n=eM(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return q(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-DQazKd79.js`),o=await i(r,t.fs);if(!o)return q(`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-BSzBYE_Q.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(`${Qj}/`);return c&&await cM(await rM(t),o.root),$j([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
|
|
1859
1859
|
`)+`
|
|
1860
1860
|
`)}function _M(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 vM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
|
|
1861
1861
|
`)}const yM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],bM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],xM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},SM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],CM=[`-o`,`--columns`];function wM(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:CM}))return RM();let n=e.processManager??TM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
|
|
@@ -1896,7 +1896,7 @@ Examples:
|
|
|
1896
1896
|
ps -o scoop,stat,pid full scoop jid, with STAT and PID
|
|
1897
1897
|
`,stderr:``,exitCode:0}}const zM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function BM(e,t=zM){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 VM(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 HM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function UM(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 WM(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 GM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function KM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
|
|
1898
1898
|
`,stderr:``,exitCode:0}}function qM(){return{stdout:`Python 3.14 (Pyodide)
|
|
1899
|
-
`,stderr:``,exitCode:0}}async function JM(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 YM(e){let t=UM(e),n=await
|
|
1899
|
+
`,stderr:``,exitCode:0}}async function JM(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 YM(e){let t=UM(e),n=await wr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Cr}\n`,exitCode:1}};let r=await WM(t.reader,n);return r?r===pr?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${GM(r,pr)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Cr}\n`,exitCode:1}}}function XM(e,t={}){return S(e,async(n,r)=>{if(n.includes(`--help`)||n.includes(`-h`))return KM();if(n.includes(`--version`)||n.includes(`-V`))return qM();let i=await JM(e,n,r);if(i.kind===`result`)return i.result;let{code:a,filename:o,sysArgv:s,procArgv:c}=i,l=await BM(r.fs),u=VM(r.fs,l),d=t.buildProcessConfig?.(r.env),f=d?.processManager??ZM(),p=d?.owner??{kind:`system`},m=d?.getParentPid?.(),h=t.realmFactory??jr(),g=t.pyodideIndexURL??Gr(),_=t.pyodideAssetRoot;if(!_&&g===void 0){let e=await YM(r);if(e.kind===`result`)return e.result;_=e.assetRoot}let v=o===`<stdin>`?``:P(r.stdin),ee=HM();return f?Vr({pm:f,realmFactory:h,owner:p,kind:`py`,code:a,argv:c,realmArgv:s,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:o,ctx:r,stdin:v,pyodideIndexURL:g,pyodideAssetRoot:_,pyodideMountDirs:l,opfsMountDbName:ee,mountPoints:u,procKind:`py`,ppid:m,syncFsBridgeEnabled:Ar()}):$M({realmFactory:h,owner:p,code:a,argv:c,realmArgv:s,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:o,ctx:r,stdin:v,pyodideIndexURL:g,pyodideAssetRoot:_,pyodideMountDirs:l,opfsMountDbName:ee,mountPoints:u})})}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 Vr({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:Ar()})}function eN(){return S(`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
|
|
1900
1900
|
|
|
1901
1901
|
Usage:
|
|
1902
1902
|
rsync [flags] <local-path> <runtime-id>:<remote-path> # push
|
|
@@ -1948,11 +1948,11 @@ Examples:
|
|
|
1948
1948
|
`,stderr:``,exitCode:0}}function hN(e){switch(e.state){case`ready`:return`voice engine: ready
|
|
1949
1949
|
`;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
|
|
1950
1950
|
`;case`idle`:return`voice engine: not downloaded (run say --warmup)
|
|
1951
|
-
`;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
|
|
1951
|
+
`;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 gN(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function _N(e){return e instanceof Error?e.message:String(e)}let vN=!1,yN=null;function bN(){return vN?Promise.resolve(speechSynthesis.getVoices()):(yN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){vN=!0,e(t);return}let n=()=>{vN=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),vN=!0,e(speechSynthesis.getVoices())},1e3)}),yN)}const xN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function SN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function CN(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 wN(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 xN){let n=SN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return gN(`${i} requires ${xN[i]}`);let a=CN(t,i,n);if(a)return gN(a)}else if(i.startsWith(`-`)&&i!==`--list`)return gN(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function TN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function EN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>TN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await bN()).map(e=>TN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
|
|
1952
1952
|
`)+`
|
|
1953
|
-
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>
|
|
1953
|
+
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>TN(e)).join(`
|
|
1954
1954
|
`)+`
|
|
1955
|
-
`,stderr:``,exitCode:0}}catch(e){return
|
|
1955
|
+
`,stderr:``,exitCode:0}}catch(e){return gN(_N(e))}}async function DN(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 bN()).map(e=>({name:e.name}));return[...n,...r]}async function ON(e,t){let n=(await DN(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:gN(`voice "${t}" not found. Use --list to see available voices.`)}}async function kN(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 gN(_N(e))}}async function AN(e,t){return t.includes(`--list`)?EN(e):t.includes(`--status`)?kN(e,!1):t.includes(`--warmup`)?kN(e,!0):null}async function jN(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return gN(`speech synthesis error: ${_N(e)}`)}}async function MN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return gN(_N(e))}}async function NN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return gN(_N(e))}}async function PN(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 gN(_N(e))}}async function FN(e,t){return e.local?NN(t):PN(e,t)}async function IN(e,t){let n=await FN(e,t);return`exitCode`in n?n:{...ni(n.bytes),stderr:``,exitCode:0}}async function LN(e,t,n,r){let i=await FN(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 gN(`failed to write ${n}: ${_N(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function RN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await ON(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&&!bS(t)?IN(e,i):n.outFile?LN(e,t,n.outFile,i):e.local?jN(i):MN(e,i)}function zN(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return mN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return gN(`Web Speech API unavailable in this environment`);let r=await AN(n,e);if(r)return r;let i=wN(e);return`exitCode`in i?i:i.text?i.lang?RN(n,t,{...i,lang:i.lang}):gN(`-l language tag is required`):mN()})}function BN(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-BiNJCwLY.js`);return n(e,t)})}function VN(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 HN=1e4;async function UN(e,t,n){let r={method:e,headers:me({"Content-Type":`application/json`}),signal:AbortSignal.timeout(HN)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(pe(`/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:WN(e)}}}}function WN(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${HN/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function GN(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function KN(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 qN(){return{async list(){let[e,t]=await Promise.all([UN(`GET`,``),UN(`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(GN(`saved`,ZN(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(GN(`session`,ZN(t.data)));return{entries:n,warnings:r}},async getInfo(e){return KN(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await UN(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await UN(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await UN(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(ZN(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await UN(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(ZN(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await UN(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(ZN(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await UN(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(ZN(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function JN(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(GN(`saved`,e?.error)),n?.entries||i.push(GN(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return KN(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 YN(){return JN(e=>VN(e))}function XN(){return JN(e=>{let{type:t,...n}=e;return be(t,n)})}function ZN(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function QN(e){switch(e){case`extension-direct`:return YN();case`extension-delegate`:return XN();default:return qN()}}const $N=[`--domain`],eP=[`--persist`];function tP(){return`secret — manage secrets for the fetch proxy and mount backends
|
|
1956
1956
|
|
|
1957
1957
|
No approval (session-only, in-memory, never persisted):
|
|
1958
1958
|
secret set <name> <value> --domain <pat> Set a session secret. Free for a
|
|
@@ -1989,23 +1989,23 @@ Examples:
|
|
|
1989
1989
|
secret peek OPENAI_KEY
|
|
1990
1990
|
secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
|
|
1991
1991
|
secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
|
|
1992
|
-
`}function
|
|
1992
|
+
`}function nP(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 rP(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const iP={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},aP=new Set;function oP(e,t){if(e===t)return!0;try{return at(e).test(t)}catch{return!1}}function sP(e,t){for(let n of e)if(oP(n,t))return!0;return!1}function cP(e){return{stdout:``,stderr:`${ct(`secret`,e)}\n`,exitCode:1}}function lP(e){let t=ge(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??QN(t),i=e.grants??aP,a=e.broker,o=()=>(a??=is(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(sP(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${iP[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&oP(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&hs(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&hs(t)&&e.unsetEnv(t)}}}function uP(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
|
|
1993
1993
|
`)?t.slice(0,-2):t.endsWith(`
|
|
1994
|
-
`)?t.slice(0,-1):t}async function
|
|
1995
|
-
`,exitCode:1};let a=r.positionals[1],o=
|
|
1994
|
+
`)?t.slice(0,-1):t}async function dP(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}):cP(i)}async function fP(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return cP(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 pP(e,t,n){let r=C(e.slice(1),{value:$N,bool:eP});if(`error`in r)return rP(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
|
|
1995
|
+
`,exitCode:1};let a=r.positionals[1],o=uP(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
|
|
1996
1996
|
`,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]
|
|
1997
1997
|
or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
|
|
1998
|
-
`,exitCode:1};let c=
|
|
1999
|
-
`,exitCode:1}}async function
|
|
2000
|
-
`,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
|
|
2001
|
-
`,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
|
|
2002
|
-
`,exitCode:1};let i=
|
|
2003
|
-
`,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}):
|
|
2004
|
-
`,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
|
|
2005
|
-
`,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?
|
|
1998
|
+
`,exitCode:1};let c=nP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?dP(i,s,c,n):fP(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
|
|
1999
|
+
`,exitCode:1}}async function mP(e,t){let n=C(e.slice(1),{});if(`error`in n)return rP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
|
|
2000
|
+
`,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 hP(e,t){let n=C(e.slice(1),{});if(`error`in n)return rP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
|
|
2001
|
+
`,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 gP(e,t){let n=C(e.slice(1),{value:$N});if(`error`in n)return rP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
|
|
2002
|
+
`,exitCode:1};let i=nP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
|
|
2003
|
+
`,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}):cP(a)}async function _P(e,t){let n=C(e.slice(1),{});if(`error`in n)return rP(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
|
|
2004
|
+
`,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 vP(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return rP(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 yP(e,t){let n=C(e.slice(1),{});if(`error`in n)return rP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
|
|
2005
|
+
`,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?_a(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 bP(e,t){let n=C(e.slice(1),{});if(`error`in n)return rP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
|
|
2006
2006
|
(changes are picked up on the next request — no restart needed)
|
|
2007
2007
|
`,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
|
|
2008
|
-
`,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
|
|
2008
|
+
`,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 xP(e,t,n){let r=e[0];switch(r){case`set`:return pP(e,t,n);case`get`:case`read`:return mP(e,n);case`peek`:return hP(e,n);case`scope`:return gP(e,n);case`list`:return _P(e,n);case`delete`:case`rm`:return vP(e,r,n);case`test`:return yP(e,n);case`edit`:return bP(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function SP(e={}){let t=lP(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:$N}))return{stdout:tP(),stderr:``,exitCode:0};try{return await xP(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function CP(){return null}function wP(){return null}function TP(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
|
|
2009
2009
|
serve --logs [<token>] [--lines <n>]
|
|
2010
2010
|
serve --truncate [<token>]
|
|
2011
2011
|
|
|
@@ -2041,28 +2041,28 @@ Limits and lifetime:
|
|
|
2041
2041
|
its TTL. Either can be removed sooner with \`serve --stop\`.
|
|
2042
2042
|
- <token> is the "Preview token" printed at mint time or the TOKEN column
|
|
2043
2043
|
of \`serve --list\`; \`--stop\` also accepts the preview URL.
|
|
2044
|
-
`,stderr:``,exitCode:0}}function
|
|
2045
|
-
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function
|
|
2044
|
+
`,stderr:``,exitCode:0}}function EP(e){return`error`in e}function DP(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
|
|
2045
|
+
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function OP(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
|
|
2046
2046
|
`};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)
|
|
2047
2047
|
`};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.
|
|
2048
2048
|
`}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
2049
|
-
`}}function
|
|
2049
|
+
`}}function kP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function AP(e,t,n){let r=OP(e,t,n);if(r)return r;let i=kP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
|
|
2050
2050
|
`};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
|
|
2051
|
-
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=
|
|
2051
|
+
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=DP(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
|
|
2052
2052
|
`};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
|
|
2053
2053
|
`}:(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
|
|
2054
2054
|
`}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
|
|
2055
|
-
`}:(n.directory=e,{skip:0})}function
|
|
2056
|
-
`,exitCode:1};if(n.webhookId){let e=await ey();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
|
|
2057
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
2058
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
2059
|
-
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(
|
|
2055
|
+
`}:(n.directory=e,{skip:0})}function jP(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=AP(e[n],e[n+1],t);if(EP(r))return{...t,error:r.error};n+=r.skip}return t}async function MP(e,t,n,r){if(!rr(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=ur(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 NP(e){return`exitCode`in e}async function PP(e){let t=ha(e)??e,n,r=wP();if(r)n=await r({type:`stop`,previewToken:t});else{let e=y();if(!e)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};n=await e.call(`tray-revoke-preview`,{previewToken:t})}if(!n.revoked)return{stdout:``,stderr:`serve: preview token not found or already revoked
|
|
2056
|
+
`,exitCode:1};if(n.webhookId){let e=await ey();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 FP(){let e=wP();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
|
|
2057
|
+
`,stderr:``,exitCode:0}:{stdout:LP(t),stderr:``,exitCode:0}}let t=y();if(!t)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let n=(await t.call(`tray-list-previews`,void 0)).previews??[];return n.length===0?{stdout:`No active previews
|
|
2058
|
+
`,stderr:``,exitCode:0}:{stdout:LP(n),stderr:``,exitCode:0}}function IP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function LP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${IP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function RP(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 zP(e){let t,n=wP();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=y();if(!n)return{stdout:``,stderr:"serve --logs: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};t=(await n.call(`tray-preview-logs`,{previewToken:e.previewToken})).lifecycleRecords}return e.lines!==void 0&&(t=t.slice(-e.lines)),t.length===0?{stdout:`No preview lifecycle records. The recorder is leader-memory-only and resets on leader restart.
|
|
2059
|
+
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(RP).join(``)}`,stderr:``,exitCode:0}}async function BP(e){let t,n,r=wP();if(r){let i=await r({type:`truncate`,previewToken:e});t=i.cleared??0,n=i.rearmed??0}else{let r=y();if(!r)return{stdout:``,stderr:"serve --truncate: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let i=await r.call(`tray-preview-truncate`,{previewToken:e});t=i.cleared,n=i.rearmed}return{stdout:`Cleared ${t} preview lifecycle record${t===1?``:`s`}; re-armed ${n} preview announcement${n===1?``:`s`}.\n`,stderr:``,exitCode:0}}async function VP(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:Jn(s)})}return n}function HP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function UP(e){let t=CP();if(t)return t(e);let n=y();if(!n)throw Error("no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.");return e.ttlMs===void 0?n.call(`tray-open-preview`,e):n.call(`tray-open-preview`,e,{timeoutMs:6e5})}async function WP(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function GP(e,t){if(!e)return{ok:!0};let n=await ey();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 KP(e,t,n,r,i,a,o){let s;try{s=await UP({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 ey();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await WP(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 qP(e){if(e.stop){let t=e.stop;return HP(()=>PP(t))}if(e.list)return HP(()=>FP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
|
|
2060
2060
|
`,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
|
|
2061
|
-
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return
|
|
2061
|
+
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return HP(()=>zP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return HP(()=>BP(t))}}function JP(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
|
|
2062
2062
|
`,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
|
|
2063
|
-
`,exitCode:1}}async function
|
|
2064
|
-
`:``,f=await
|
|
2065
|
-
`;function
|
|
2063
|
+
`,exitCode:1}}async function YP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return VP(t,n)}}async function XP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return TP();let i=jP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await qP(i);if(a)return a;if(!i.directory)return TP();let o=JP(i);if(o)return o;let s=await MP(i.directory,i.entry,t.fs,t.cwd);if(NP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await YP(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)
|
|
2064
|
+
`:``,f=await GP(!i.noBridge&&i.bridge,d);return f.ok?KP(i,c,l,f.webhookId,d,u,n):f.result}function ZP(e,t){return S(`serve`,(n,r)=>XP(n,r,e,t))}const QP=`usage: session export [--id <id>] [--output <path>]
|
|
2065
|
+
`;function $P(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 eF(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${QP}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${QP}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${QP}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${QP}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${QP}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${QP}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function tF(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||bt(r)!==a.sha256)throw new Sa(`transfer-corrupt`);return r}async function nF(e,t){let n=eF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=$P(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${QP}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await cs().export(a,{}),n=await tF(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 Sa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function rF(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return nF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-DyJ_PMwk.js`);return n(e,t,QP)})}function iF(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-YU9tYQ-s.js`);return await n(e,t)})}const aF=`leader`;function oF(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function sF(e){return+!!e.leader+e.followers.length}function cF(){return{stdout:`usage: sprinkle <subcommand> [args]
|
|
2066
2066
|
|
|
2067
2067
|
list [--runtime <id>] List sprinkles + an instance line per runtime
|
|
2068
2068
|
open <name> Open a sprinkle by name
|
|
@@ -2080,22 +2080,22 @@ Limits and lifetime:
|
|
|
2080
2080
|
chat <html> Show inline HTML in chat (Tool UI)
|
|
2081
2081
|
Use data-action="name" on buttons for callbacks
|
|
2082
2082
|
Pipe HTML: echo "<div>...</div>" | sprinkle chat
|
|
2083
|
-
`,stderr:``,exitCode:0}}function
|
|
2083
|
+
`,stderr:``,exitCode:0}}function lF(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function uF(){return[aF,...ee().map(e=>e.runtimeId)]}function dF(e){return`unknown runtime "${e}"\nknown runtimes: ${uF().join(`, `)}\nRun \`host\` to see connected followers.`}async function fF(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
|
|
2084
2084
|
`,exitCode:1};let r=await we({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
|
|
2085
2085
|
`,exitCode:1}:{stdout:JSON.stringify(r)+`
|
|
2086
|
-
`,stderr:``,exitCode:0}}function
|
|
2087
|
-
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=
|
|
2086
|
+
`,stderr:``,exitCode:0}}function pF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function mF(e){return[...e.map(e=>({name:e,runtimeId:aF})),...oF()]}async function hF(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!uF().includes(r))return J(`list`,dF(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
|
|
2087
|
+
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=mF([...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(...pF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
|
|
2088
2088
|
`)+`
|
|
2089
|
-
`,stderr:``,exitCode:0}}function
|
|
2089
|
+
`,stderr:``,exitCode:0}}function gF(e,t){return!t||Do(e)?null:(Oo(e,t),Do(e)===t?t:null)}async function _F(e,t,n){let r=C(t.slice(1),{});if(`error`in r)return J(`open`,r.error);let i=r.positionals[0];if(!i)return J(`open`,`name required`);let a=Ri(void 0,n),o=gF(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 vF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`close`,n.error);let r=n.positionals[0];return r?(e.close(r),{stdout:`Sprinkle "${r}" closed.\n`,stderr:``,exitCode:0}):J(`close`,`name required`)}async function yF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`reload`,n.error);let r=n.positionals[0];if(!r)return J(`reload`,`name required`);try{return await e.reload(r),{stdout:`Sprinkle "${r}" reloaded.\n`,stderr:``,exitCode:0}}catch(e){return J(`reload`,e instanceof Error?e.message:String(e))}}async function bF(e,t){let n=C(t.slice(1),{});if(`error`in n)return J(`refresh`,n.error);await e.refresh();let r=e.available().length;return{stdout:`Found ${r} sprinkle${r===1?``:`s`}.\n`,stderr:``,exitCode:0}}function xF(e){let t=C(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return J(`route`,t.error);let n=t.positionals[0];if(!n){let e=Ao(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
|
|
2090
2090
|
`,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
|
|
2091
2091
|
route for follower-forwarded licks too):
|
|
2092
2092
|
`+t.map(([e,t])=>` ${e} -> ${t}`).join(`
|
|
2093
2093
|
`)+`
|
|
2094
|
-
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return
|
|
2095
|
-
`,exitCode:1};switch(n){case`list`:return
|
|
2096
|
-
`,stderr:``,exitCode:0}}function
|
|
2097
|
-
`)}\n`:``}async function
|
|
2098
|
-
`)?e:`${e}\n`,exitCode:1}}function
|
|
2094
|
+
`,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=Do(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Oo(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function SF(e){let t=[];return e.leader&&t.push(aF),t.push(...e.followers),t.join(`, `)}async function CF(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`send`,n.error);let r=n.positionals[0];if(!r)return J(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return J(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return J(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!uF().includes(o))return J(`send`,dF(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`,dF(s.unknownRuntime));let c=sF(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`} (${SF(s)}).\n`,stderr:``,exitCode:0}}function wF(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return cF();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:$e(`sprinkle`,n,cF().stdout),stderr:``,exitCode:0};if(n===`chat`)return fF(Qe(e),t);let r=lF();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
|
|
2095
|
+
`,exitCode:1};switch(n){case`list`:return hF(r,e);case`open`:return _F(r,e,t.env);case`close`:return vF(r,e);case`reload`:return yF(r,e);case`refresh`:return bF(r,e);case`route`:return xF(e);case`send`:return CF(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function TF(){return{stdout:`usage: sqlite3 [database] [sql]
|
|
2096
|
+
`,stderr:``,exitCode:0}}function EF(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 DF(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function OF(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function kF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function AF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(nr).join(`|`)));return t.length>0?`${t.join(`
|
|
2097
|
+
`)}\n`:``}async function jF(e,t,n){let r=await lr(),i=DF(e,n),a=await OF(r,i,n),o=a.exec(t);return await kF(a,i,n),a.close(),AF(o)}function MF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function NF(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return TF();let{database:r,sql:i}=EF(t,n);if(!i)return MF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await jF(r,i,n),stderr:``,exitCode:0}}catch(t){return MF(e,t)}})}function PF(e){return{stdout:``,stderr:e.endsWith(`
|
|
2098
|
+
`)?e:`${e}\n`,exitCode:1}}function FF(){return{stdout:`ssh - run a command on a connected tray follower
|
|
2099
2099
|
|
|
2100
2100
|
Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
|
|
2101
2101
|
ssh --list
|
|
@@ -2118,11 +2118,11 @@ Examples:
|
|
|
2118
2118
|
ssh --list
|
|
2119
2119
|
ssh follower-abc123 "uname -a"
|
|
2120
2120
|
ssh --cwd /tmp follower-abc123 "ls -la"
|
|
2121
|
-
`,stderr:``,exitCode:0}}function
|
|
2121
|
+
`,stderr:``,exitCode:0}}function IF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
|
|
2122
2122
|
Start one with: slicc <join-url> follow sh -c
|
|
2123
2123
|
`;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}`)}return`${n.join(`
|
|
2124
|
-
`)}\n`}function
|
|
2125
|
-
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return
|
|
2124
|
+
`)}\n`}function LF(e){if(e.stdin===void 0)return;let n=ei(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 RF(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 zF(){return S(`ssh`,async(e,t)=>{let n=RF(e);if(`help`in n)return FF();if(`error`in n)return PF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:IF(ee()),stderr:``,exitCode:0};if(!n.command)return PF(`ssh: missing command
|
|
2125
|
+
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return PF(`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:LF(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 PF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function BF(e){return{stdout:``,stderr:`${ct(`sudo`,e)}\n`,exitCode:1}}function VF(e={}){let{broker:t,persistGrant:n,suppressNextGate:r}=e;return S(`sudo`,async(e,i)=>{if(e.length===0)return{stdout:``,stderr:`sudo: usage: sudo <command> [args...]
|
|
2126
2126
|
`,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
|
|
2127
2127
|
|
|
2128
2128
|
Request human approval to run <command> with elevation. If approved, the
|
|
@@ -2136,14 +2136,14 @@ Options:
|
|
|
2136
2136
|
-h, --help Show this help message and exit.
|
|
2137
2137
|
`,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
|
|
2138
2138
|
`,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
|
|
2139
|
-
`,exitCode:1};let a=Yp(e[0],e.slice(1)),o=i.env?.get($p),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return
|
|
2140
|
-
`,exitCode:1};let i=await Promise.all(r.map(e=>
|
|
2141
|
-
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>
|
|
2142
|
-
`,exitCode:1};let a=await Promise.all(i.map(e=>
|
|
2143
|
-
`,stderr:``,exitCode:0}}function
|
|
2144
|
-
`)}\n`:``,stderr:``,exitCode:0}}async function
|
|
2145
|
-
`);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let i=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(i,{recursive:!0});let a=[];for(let e of r){let n=
|
|
2146
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
2139
|
+
`,exitCode:1};let a=Yp(e[0],e.slice(1)),o=i.env?.get($p),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return BF(s);if(s.decision===`always`){let e=s.pattern?.trim()||a;if(n)try{await n(e)}catch{}}return r&&r(a),i.exec(e[0],{cwd:i.cwd,args:e.slice(1)})})}function HF(e){let t=e instanceof Error?e.message:String(e);return/ENOENT|no such file/i.test(t)?`No such file or directory`:/ENOTEMPTY|not empty/i.test(t)?`Directory not empty`:t.replace(/^\w+:\s*/,``)}async function UF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function WF(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function GF(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await UF(e,r);return i.isDirectory&&!i.isSymbolicLink&&!n.recursive?{stdout:``,stderr:`rm: cannot remove '${t}': Is a directory\n`}:(await e.fs.rm(r,{recursive:n.recursive,force:n.force}),{stdout:n.verbose?`removed '${t}'\n`:``,stderr:``})}catch(e){return{stdout:``,stderr:n.force?``:`rm: cannot remove '${t}': ${HF(e)}\n`}}}function KF(){return S(`rm`,async(e,t)=>{let n={recursive:WF(e,`r`)||WF(e,`R`)||e.includes(`--recursive`),force:WF(e,`f`)||e.includes(`--force`),verbose:WF(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
|
|
2140
|
+
`,exitCode:1};let i=await Promise.all(r.map(e=>GF(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 qF(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 JF(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 YF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await UF(e,r);return{stdout:n.format?`${qF(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 XF(){return S(`stat`,async(e,t)=>{let n=JF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
|
|
2141
|
+
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>YF(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 ZF(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function QF(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 UF(e,a);if(!t.isDirectory||t.isSymbolicLink)throw Error(`Not a directory`);await e.fs.rm(a,{recursive:!1,force:!1}),r&&(o+=`rmdir: removing directory, '${a}'\n`)}catch(e){return{stdout:o,stderr:`rmdir: failed to remove '${t}': ${HF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=ZF(a)}return{stdout:o,stderr:``}}function $F(){return S(`rmdir`,async(e,t)=>{let n=e.some(e=>e===`-p`||e===`--parents`),r=e.some(e=>e===`-v`||e===`--verbose`),i=e.filter(e=>!e.startsWith(`-`));if(i.length===0)return{stdout:``,stderr:`rmdir: missing operand
|
|
2142
|
+
`,exitCode:1};let a=await Promise.all(i.map(e=>QF(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 eI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
|
|
2143
|
+
`,stderr:``,exitCode:0}}function tI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function nI(e,t){if(e.mode)return tI(`exactly one of -c, -x, or -t is required`);e.mode=t}function rI(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const iI={c:`create`,x:`extract`,t:`list`};function aI(e,t,n,r,i){let a=iI[e];if(a)return{nextIndex:r,error:nI(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:tI(`unsupported option -${e}`)};let o=rI(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:tI(`option -${e} requires an argument`)}}function oI(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=aI(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}function sI(e){let t={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let n=0;n<e.length;n++){let r=e[n];if(!r.startsWith(`-`)||r===`-`){t.paths.push(r);continue}if(r.startsWith(`--`))return tI(`unsupported option ${r}`);let i=oI(e,n,t);if(i.error)return i.error;n=i.nextIndex}return t}function cI(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):er(t)}async function lI(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){r.push({path:n,bytes:await e.fs.readFileBuffer(t)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`;r.push({path:a,bytes:new Uint8Array,directory:!0});for(let n of await e.fs.readdir(t))await lI(e,$n(t,n),`${a}${n}`,r)}function uI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?Xi(e):e;return Gi(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function dI(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 cr(t,i)?i:void 0}async function fI(e,t){if(e.paths.length===0)return tI(`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 lI(t,e,cI(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=Qi(n);return await t.fs.writeFile(i,e.gzip?Vi(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
|
|
2144
|
+
`)}\n`:``,stderr:``,exitCode:0}}async function pI(e,t){if(e.paths.length>0)return tI(`${e.mode} mode does not accept input paths`);let n=t.fs.resolvePath(t.cwd,e.archive),r=uI(await t.fs.readFileBuffer(n),e.gzip);if(e.mode===`list`){let e=r.map(e=>e.path).join(`
|
|
2145
|
+
`);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let i=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(i,{recursive:!0});let a=[];for(let e of r){let n=dI(t,i,e.path);if(!n)return tI(`blocked suspicious path ${e.path}`);if(e.directory)await t.fs.mkdir(n,{recursive:!0});else{let r=ar(n);r!==`/`&&await t.fs.mkdir(r,{recursive:!0}),await t.fs.writeFile(n,e.bytes)}a.push(e.path)}return{stdout:e.verbose?`${a.join(`
|
|
2146
|
+
`)}\n`:``,stderr:``,exitCode:0}}function mI(){return S(`tar`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return eI();let n=sI(e);return`exitCode`in n?n:n.mode?n.archive?n.mode===`list`&&n.directory!==`.`?tI(`-C is only supported in create or extract mode`):n.mode===`create`?fI(n,t):pI(n,t):tI(`option -f requires an archive path`):tI(`exactly one of -c, -x, or -t is required`)})}var hI=`/**
|
|
2147
2147
|
* Standalone assertions - no dependency on test runner
|
|
2148
2148
|
*
|
|
2149
2149
|
* Each assertion:
|
|
@@ -2331,7 +2331,7 @@ function sameMembers(a, b) {
|
|
|
2331
2331
|
}
|
|
2332
2332
|
|
|
2333
2333
|
const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
|
|
2334
|
-
`,
|
|
2334
|
+
`,gI=`/**
|
|
2335
2335
|
* tst - minimal test runner
|
|
2336
2336
|
*
|
|
2337
2337
|
* - Standalone assertions (assert.js works anywhere)
|
|
@@ -2961,7 +2961,7 @@ function scheduleAutoRun() {
|
|
|
2961
2961
|
scheduleAutoRun()
|
|
2962
2962
|
|
|
2963
2963
|
export * from './assert.js'
|
|
2964
|
-
`;function
|
|
2964
|
+
`;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 vI=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
|
|
2965
2965
|
|
|
2966
2966
|
Usage:
|
|
2967
2967
|
tsc [options] [files...]
|
|
@@ -2985,28 +2985,28 @@ Install:
|
|
|
2985
2985
|
Then \`tsc --version\` and the transpile commands above. There is no
|
|
2986
2986
|
bundled binary, no CDN fallback; a missing package exits non-zero
|
|
2987
2987
|
with a clear \`ipk add\` hint.
|
|
2988
|
-
`;function
|
|
2989
|
-
`);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
|
|
2990
|
-
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function
|
|
2988
|
+
`;function yI(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 bI(e,t){let n=`${er(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${ar(e)}/${n}`}async function xI(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=ar(n)}return null}function SI(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function CI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function wI(e,t,n){let r=SI(t),i=await xI(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,...CI(o)}}}function TI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
|
|
2989
|
+
`);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 EI(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 DI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function OI(e,t,n,r){let{outputText:i,diagnostics:a}=DI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>TI(e,t)),s=o.length>0?`${o.join(`
|
|
2990
|
+
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function kI(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}}EI(e,a);let{outputText:s,diagnostics:c}=DI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${TI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,bI(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 AI(e,t){let n;try{n=yI(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:vI,stderr:``,exitCode:0}};let r;try{r=await Zn(_I(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 jI(){return S(`tsc`,async(e,t)=>{let n=await AI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await wI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?OI(i,r,a,e):{stdout:vI,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await kI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const MI=[`**/*.test.{js,ts}`];function NI(e,t){let n,r=1;if(e===`--reporter`)n=t,r=2;else if(e.startsWith(`--reporter=`))n=e.slice(11);else return null;if(n!==`tap`&&n!==`spec`)throw Error(`tst: --reporter must be tap or spec`);return{reporter:n,consumed:r}}function PI(e,t){return e===`--coverage`?{consumed:1}:e===`--coverage-dir`&&t!==void 0?{coverageDir:t,consumed:2}:e.startsWith(`--coverage-dir=`)?{coverageDir:e.slice(15),consumed:1}:null}function FI(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=NI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=PI(s,e[o+1]);if(l){i=!0,l.coverageDir!==void 0&&(a=l.coverageDir),l.consumed===2&&(o+=1);continue}if(s.startsWith(`-`))throw Error(`tst: unknown option: ${s}`);t.push(s)}return{globs:t.length>0?t:[...MI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function II(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 II(`${r}${e}${i}`))o.push(t);return o}function LI(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 RI(e,t,n){let r=n.flatMap(II).map(LI),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 zI=null;async function BI(e){if(zI)return zI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return zI=`
|
|
2991
2991
|
if (typeof process !== 'undefined' && !process.versions) {
|
|
2992
2992
|
try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
|
|
2993
2993
|
}
|
|
2994
2994
|
const __tst_assert_exports = (function () {
|
|
2995
2995
|
const module = { exports: {} };
|
|
2996
2996
|
const exports = module.exports;
|
|
2997
|
-
${e.transpileModule(
|
|
2997
|
+
${e.transpileModule(hI,{compilerOptions:t,fileName:`assert.js`}).outputText}
|
|
2998
2998
|
return module.exports;
|
|
2999
2999
|
})();
|
|
3000
3000
|
const __tst_module_exports = (function () {
|
|
3001
3001
|
const module = { exports: {} };
|
|
3002
3002
|
const exports = module.exports;
|
|
3003
|
-
${e.transpileModule(
|
|
3003
|
+
${e.transpileModule(gI,{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"))`)}
|
|
3004
3004
|
return module.exports;
|
|
3005
3005
|
})();
|
|
3006
3006
|
const __tst = __tst_module_exports.default || __tst_module_exports;
|
|
3007
3007
|
__tst.manual = true;
|
|
3008
|
-
`.trim(),
|
|
3009
|
-
`)}}`,d=
|
|
3008
|
+
`.trim(),zI}function VI(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 HI(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 UI(e,t,n){let r=b(`${t}/${n}`),i=[r];r.endsWith(`.js`)&&i.push(`${r.slice(0,-3)}.ts`),/\.[a-zA-Z0-9]+$/.test(r)||i.push(`${r}.ts`,`${r}.js`);for(let t of i)if(await e.exists(t))return t;return null}async function WI(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=ar(n),u=new Map;for(let n of HI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await UI(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 GI(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=VI(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
|
|
3009
|
+
`)}}`,d=VI(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
|
|
3010
3010
|
${f}${e}
|
|
3011
3011
|
const __realmRequire = require;
|
|
3012
3012
|
const { createRequire: __createRequire } = __realmRequire("module");
|
|
@@ -3049,7 +3049,7 @@ await Promise.resolve();
|
|
|
3049
3049
|
await new Promise((resolve) => setTimeout(resolve));
|
|
3050
3050
|
${p}
|
|
3051
3051
|
if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
|
|
3052
|
-
`}const
|
|
3052
|
+
`}const KI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function qI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...KI}}async function JI(e,t){let n;try{n=FI(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
|
|
3053
3053
|
|
|
3054
3054
|
Usage:
|
|
3055
3055
|
tst [options] [glob...]
|
|
@@ -3071,7 +3071,7 @@ Notes:
|
|
|
3071
3071
|
with statement counters. nyc/c8 cannot wrap this runner: it is not a
|
|
3072
3072
|
Node child. Istanbul/Babel are not bundled (webapp size-limit); the
|
|
3073
3073
|
TypeScript AST already in process does the rewrite.
|
|
3074
|
-
`,stderr:``,exitCode:0}};let r=await
|
|
3074
|
+
`,stderr:``,exitCode:0}};let r=await RI(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 Zn(_I(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await BI(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:qI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function YI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function XI(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 WI(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=GI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await Hr(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||YI(g)}}function ZI(){return S(`tst`,async(e,t)=>{let n=await JI(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 XI(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=[],$I=`usage: theme <subcommand> [args]
|
|
3075
3075
|
|
|
3076
3076
|
Subcommands:
|
|
3077
3077
|
list List available preset and custom themes
|
|
@@ -3080,23 +3080,23 @@ Subcommands:
|
|
|
3080
3080
|
reset Reset to the default theme
|
|
3081
3081
|
current Show the currently active theme
|
|
3082
3082
|
export <id> <path> Export a theme to a VFS path
|
|
3083
|
-
`;function
|
|
3084
|
-
`),stderr:``,exitCode:0}}async function
|
|
3085
|
-
`,stderr:``,exitCode:0}}async function
|
|
3083
|
+
`;function eL(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function tL(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:$I,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:QI})?{stdout:$e(`theme`,n,$I),stderr:``,exitCode:0}:n===`list`?nL(e):n===`current`?rL(e):n===`reset`?iL(e):n===`apply`?aL(e.slice(1),t):n===`export`?oL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${$I}`,exitCode:1}})}async function nL(e){let t=C(e.slice(1),{value:QI});if(`error`in t)return eL(`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(`
|
|
3084
|
+
`),stderr:``,exitCode:0}}async function rL(e){let t=C(e.slice(1),{value:QI});return`error`in t?eL(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
|
|
3085
|
+
`,stderr:``,exitCode:0}}async function iL(e){let t=C(e.slice(1),{value:QI});if(`error`in t)return eL(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
|
|
3086
3086
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
3087
|
-
`,exitCode:1}}async function
|
|
3087
|
+
`,exitCode:1}}async function aL(e,t){let n=C(e,{value:QI});if(`error`in n)return eL(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
|
|
3088
3088
|
`,exitCode:1};let r=y();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
3089
3089
|
`,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)
|
|
3090
3090
|
`,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
|
|
3091
|
-
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function
|
|
3092
|
-
`,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
|
|
3093
|
-
`),stderr:``,exitCode:0}}function
|
|
3091
|
+
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function oL(e,t){let n=C(e,{value:QI});if(`error`in n)return eL(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
|
|
3092
|
+
`,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 sL=`unknown`,cL=`usage: uname [-amnorsv]`,lL=[`s`,`n`,`r`,`v`,`m`,`o`];function uL(){return{stdout:[cL,` -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(`
|
|
3093
|
+
`),stderr:``,exitCode:0}}function dL(){let{releasedAt:e,buildId:t}=Ke();return e?`${t} (${e})`:t}function fL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:sL}function pL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:sL}function mL(e){switch(e){case`s`:return`SLICC`;case`n`:return Ge();case`r`:return Ke().version;case`v`:return dL();case`m`:return fL();case`o`:return pL()}}function hL(e){return{stdout:``,stderr:`uname: ${e}\n${cL}\n`,exitCode:1}}function gL(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 lL)t.add(e);continue}if(!lL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function _L(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return uL();let t=gL(e);return`error`in t?hL(t.error):{stdout:`${(t.size>0?lL.filter(e=>t.has(e)):[`s`]).map(mL).join(` `)}\n`,stderr:``,exitCode:0}})}function vL(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
|
|
3094
3094
|
Remove FILE. Symbolic links are removed without following their target.
|
|
3095
3095
|
`,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
|
|
3096
3096
|
`:`unlink: extra operand
|
|
3097
|
-
`,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
|
|
3098
|
-
`,stderr:``,exitCode:0}}function
|
|
3099
|
-
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function
|
|
3097
|
+
`,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 yL(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
|
|
3098
|
+
`,stderr:``,exitCode:0}}function bL(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
|
|
3099
|
+
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function xL(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!cr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=ar(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function SL(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return yL();let n=bL(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=xt(a),s=0;for(let[e,n]of Object.entries(o)){let r=await xL(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 CL=`ai-ecoverse/slicc`,wL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,TL=`packages/vfs-root`,EL=3e4,DL=[`${TL}/workspace/skills/`,`${TL}/shared/sprinkles/`,`${TL}/shared/sounds/`,`${TL}/shared/GELATIERE.md`,`${TL}/shared/wiki/WIKI.md`,`${TL}/etc/`],OL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function kL(){return Object.fromEntries(OL.map(e=>[e,0]))}function AL(e,t,n,r){let i=kL();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 jL(e){if(e[0]!==`apply`)throw Error(wL);let t=new Map;for(let n of e.slice(1)){let e=n.match(/^--(from|to)=(.+)$/);if(!e)throw Error(`unsupported argument: ${n}`);t.set(e[1],e[2])}let n=t.get(`from`)??``,r=t.get(`to`)??``,i=/^v?[0-9][0-9A-Za-z.+_-]*$/;if(!i.test(n)||!i.test(r))throw Error(`both --from and --to must be release versions`);return{from:n,to:r}}function ML(e){return e.startsWith(`v`)?e:`v${e}`}function NL(e){if(!DL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)?null:t}async function PL(e,t){let n,r;try{n=await Promise.race([e(t,{method:`GET`,headers:{Accept:`application/json`}}),new Promise((e,t)=>{r=setTimeout(()=>t(Error(`request timed out after ${EL}ms`)),EL)})])}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 FL(e,t){let n=await PL(t,`https://api.github.com/repos/${CL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=ue(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=NL(e.path);t&&i.set(t,e.path)}return i}function IL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${CL}/${encodeURIComponent(e)}/${n}`}function LL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function RL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function zL(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 BL(e,t,n,r,i){let a=`${t}.upgrade-${ML(n)}-to-${ML(r)}.conflict`;if(!i.has(a)&&!await e.exists(a))return i.add(a),a;for(let t=1;;t+=1){let n=`${a}.${t}`;if(!i.has(n)&&!await e.exists(n))return i.add(n),n}}async function VL(e,t,n,r,i,a,o){let s=await zL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:LL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(LL(i,a)||LL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(LL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(RL);if(c!==null&&l!==null&&u!==null){let i=ke(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${ML(n)}:${t}`,other:`${ML(r)}:${t}`}}),a=new TextEncoder().encode(i.content);return i.conflicts===0?{path:t,classification:`merged-clean`,content:a}:{path:t,classification:`needs-review`,content:a,sidecar:await BL(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await BL(e.fs,t,n,r,o)}}async function HL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function UL(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 zL(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 HL(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 WL(e,t,n){let r=ML(t),i=ML(n),[a,o]=await Promise.all([FL(r,e.fetch),FL(i,e.fetch)]),s=[...new Set([...a.keys(),...o.keys()])].sort(),c=await Promise.all(s.map(async t=>{let[n,s]=await Promise.all([a.has(t)?PL(e.fetch,IL(r,a.get(t))).then(e=>fe(e.body)):void 0,o.has(t)?PL(e.fetch,IL(i,o.get(t))).then(e=>fe(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 VL(e,r,t,n,i,a,l));return await UL(e.fs,u),u}async function GL(e){let{version:t,releasedAt:n,buildId:r}=Ke(),i=[],a=null,o=e.getLastSeen??qe();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 KL(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${wL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:AL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await GL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=jL(t));let i=await WL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:AL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:AL(n,r,[],[t]),stderr:``,exitCode:1}}})}const qL=`usage: uptime [-p|--pretty] [-s|--since]`,JL=`${qL}
|
|
3100
3100
|
|
|
3101
3101
|
Print how long this SLICC has been running. The clock starts when the browser
|
|
3102
3102
|
window was last loaded — a reload is a reboot.
|
|
@@ -3112,7 +3112,7 @@ The load average is the average number of live kernel processes over the last
|
|
|
3112
3112
|
processes are retained in bounded numbers, so a long burst of short commands
|
|
3113
3113
|
can under-report the older windows. The user count is always 1: a SLICC
|
|
3114
3114
|
runtime has one user identity (see \`id\`).
|
|
3115
|
-
`,
|
|
3115
|
+
`,YL=[1,5,15],XL=6e4,ZL=60*XL,QL=24*ZL;function $L(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function eR(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 tR(e){let t=Math.max(0,e),n=Math.floor(t/QL),r=Math.floor(t%QL/ZL),i=Math.floor(t%ZL/XL),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function nR(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/ZL),`hour`),r(Math.floor(t%ZL/XL),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function rR(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 iR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function aR(e,t,n){let r=YL.map(r=>eR(e,t,r*XL,n).toFixed(2));return` ${iR(t)} up ${tR(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function oR(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 sR(e={}){return S(`uptime`,async t=>{let n=oR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${qL}\n`,exitCode:1};if(n===`help`)return{stdout:JL,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${Ke().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():pa();if(n===`since`)return cR(`${rR(i)}\n`);if(n===`pretty`)return cR(`${nR(r-i)}\n`);let a=e.processManager??$L();return cR(aR(a?a.list():[],r,i))})}function cR(e){return{stdout:e,stderr:``,exitCode:0}}const lR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function uR(e){return vn(e,lR)}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 dR(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 fR=new Set([`standard`,`class`,`vendor`]),pR=new Set([`device`,`interface`,`endpoint`,`other`]);function mR(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!fR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!pR.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 hR(e){let t=ei(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function gR(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function _R(e){return`0x${e.toString(16).padStart(4,`0`)}`}function vR(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${_R(e.vendorId)}:${_R(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 yR=`usb - access USB devices via WebUSB
|
|
3116
3116
|
|
|
3117
3117
|
Usage: usb <subcommand> [options]
|
|
3118
3118
|
|
|
@@ -3150,10 +3150,10 @@ Options:
|
|
|
3150
3150
|
(bridged waits time out after 5 minutes and drop the waiter)
|
|
3151
3151
|
-h, --help
|
|
3152
3152
|
|
|
3153
|
-
Transfers are capped at ${
|
|
3154
|
-
`;function
|
|
3155
|
-
`):X(`${t.map(
|
|
3156
|
-
`)}\n`)}async function
|
|
3153
|
+
Transfers are capped at ${$r} bytes (4 MiB).
|
|
3154
|
+
`;function bR(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?`${gR(e)}\n`:``)}async function xR(e){let t=await e.list();return t.length===0?X(`no granted USB devices
|
|
3155
|
+
`):X(`${t.map(vR).join(`
|
|
3156
|
+
`)}\n`)}async function SR(e,t){let n=e.get(`--__resolved`);if(n)return X(`${vR(await t.info(n))}\n`);let r=dR(e),i=xe();if(i){let e=await Sx(`usb-device`,r,i);if(e.handle)return X(`${vR(await t.info(e.handle))}\n`);let n=e.info,a=Zr();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=Qr().register(o);return X(`${vR(Xr(s,o))}\n`)}return X(`${vR(await t.request(r))}\n`)}async function CR(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 wR(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 TR(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 ER(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 DR(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`):bR((await n.controlIn(i,mR(t),o)).bytes,r)}async function OR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=hR(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,mR(n),a)).bytesWritten} bytes written\n`)}async function kR(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`):bR((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function AR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=hR(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 jR(e,t,n){let{positionals:r,flags:i,bools:a}=uR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return xR(n);case`request`:return SR(i,n);case`open`:case`close`:case`reset`:return CR(o,r,n,a);case`clear-halt`:return wR(r,n);case`select-config`:return TR(r,n);case`claim`:case`release`:return ER(o,r,n,a);case`control-in`:return DR(r,i,n,s);case`control-out`:return OR(r,t,i,n);case`transfer-in`:return kR(r,i,n,s);case`transfer-out`:return AR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function MR(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(yR);let n=Mr(se(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await jR(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 NR=`/workspace/.v86`,PR=`v86 - run an x86 virtual machine (v86 wasm engine)
|
|
3157
3157
|
|
|
3158
3158
|
Requires: ${N} v86@${WD}
|
|
3159
3159
|
|
|
@@ -3189,7 +3189,7 @@ Boot options (QEMU-flavored):
|
|
|
3189
3189
|
proxy — no gateway needed, https upstream via the proxy
|
|
3190
3190
|
-vga <MiB> SVGA/VBE video memory (default 8, max 64) —
|
|
3191
3191
|
raise for high-res VESA modes (1080p32 needs ~9)
|
|
3192
|
-
-bios <path> -vgabios <path> BIOS blobs (default ${
|
|
3192
|
+
-bios <path> -vgabios <path> BIOS blobs (default ${NR}/{seabios,vgabios}.bin)
|
|
3193
3193
|
-nographic Serial-only guest (skip VGA)
|
|
3194
3194
|
|
|
3195
3195
|
Notes:
|
|
@@ -3197,19 +3197,19 @@ Notes:
|
|
|
3197
3197
|
(Alpine, FreeDOS, Buildroot Linux) work best.
|
|
3198
3198
|
- The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
|
|
3199
3199
|
- BIOS blobs are not bundled; download once:
|
|
3200
|
-
mkdir -p ${
|
|
3201
|
-
curl -o ${
|
|
3202
|
-
curl -o ${
|
|
3203
|
-
`,
|
|
3204
|
-
mkdir -p ${
|
|
3205
|
-
curl -o ${
|
|
3206
|
-
curl -o ${
|
|
3207
|
-
or pass -bios / -vgabios with explicit VFS paths.`,
|
|
3200
|
+
mkdir -p ${NR}
|
|
3201
|
+
curl -o ${NR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3202
|
+
curl -o ${NR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3203
|
+
`,FR=`v86: BIOS images not found. Download them once:
|
|
3204
|
+
mkdir -p ${NR}
|
|
3205
|
+
curl -o ${NR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3206
|
+
curl -o ${NR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3207
|
+
or pass -bios / -vgabios with explicit VFS paths.`,IR={"-n":LR,"-name":LR,"--name":LR,"-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)=>RR(e,`cdrom`,t),"-hda":(e,t)=>RR(e,`hda`,t),"-fda":(e,t)=>RR(e,`fda`,t),"-kernel":(e,t)=>RR(e,`kernel`,t),"-initrd":(e,t)=>RR(e,`initrd`,t),"-append":(e,t)=>RR(e,`append`,t),"-bios":(e,t)=>RR(e,`bios`,t),"-vgabios":(e,t)=>RR(e,`vgabios`,t),"-state":(e,t)=>RR(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 LR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function RR(e,t,n){return e[t]=n,null}const zR=[...Object.keys(IR),`--fps`,`--tail`,`--send`,`--to`];function BR(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(IR,r)?IR[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 VR(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 HR(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 UR(e){return sa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function WR(e){return`exitCode`in e}async function GR(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 KR={a:801,c:306,d:531};function qR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function JR(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(PR);if(t[0]===`--version`)return YR(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:zR}))return $($e(`v86`,r,PR,{prefix:`v86`}));let i=Qe(t.slice(1));try{switch(r){case`start`:return await tz(i,n,e);case`ls`:return rz();case`type`:return await sz(i,n);case`key`:return await cz(i,n);case`mouse`:return await uz(i,n);case`screenshot`:return await dz(i,n);case`text`:return await fz(i,n);case`serve`:return pz(i);case`serial`:return mz(i);case`state`:return await hz(i,n);case`stop`:return await gz(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function YR(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(VR(e))).version} (qemu-flavored CLI)\n`);let n=await XD(VR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(GD)}async function XR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await GR(t,e.bios??`${NR}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(FR.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await GR(t,e.vgabios??`${NR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(FR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function ZR(e,t,n){let r=await XR(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 GR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=KR[e.boot]),e.state){let r=await GR(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 $R(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 ez(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??h();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 tz(e,t,n){let r=BR(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(sa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=VR(t),o=n.loadEngine?await n.loadEngine(a):await qD({ipk:a}),s={wasm_fn:QD(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await ZR(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??qR();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`,()=>{nz(u,d)})}oa(u);try{if(await $R(l),i.netRelay===`fetch`){let e=ez(l,n);if(e)return await nz(u,d),e}aa(u),await l.run()}catch(e){return await nz(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-BOapztuq.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 nz(e,t){ca(e),ia(e.name),import(`./v86-BOapztuq.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 rz(){let e=ra();if(e.length===0)return $(`no VMs running
|
|
3208
3208
|
`);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(`
|
|
3209
|
-
`)}\n`)}function
|
|
3209
|
+
`)}\n`)}function iz(e,t){return`prefer: computer ${e} -c ${t}\n`}async function az(e,t,n,r){let i=UR(t);if(WR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-B0N83lIB.js`).then(e=>e.t),import(`./registry-DfuJBCKY.js`),import(`./v86-BOapztuq.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),oz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function oz(e,t,n){let r=iz(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 sz(e,t){let{name:n,rest:r}=HR(e);if(r.length===0){let e=UR(n);return WR(e)?e:Q(`type: no text supplied`)}return az(t,n,[`type`,`--`,...r],`type`)}async function cz(e,t){let{name:n,rest:r}=HR(e);if(r.length===0){let e=UR(n);return WR(e)?e:Q(`key: no chord supplied`)}return az(t,n,[`key`,...r],`key`)}const lz=[`left`,`middle`,`right`];async function uz(e,t){let{name:n,rest:r}=HR(e),i=UR(n);if(WR(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?az(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>`):az(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!lz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),az(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function dz(e,t){let{name:n,rest:r}=HR(e);return az(t,n,[`screenshot`,...r],`screenshot`)}async function fz(e,t){let{name:n}=HR(e);return az(t,n,[`text`],`text`)}function pz(e){let{name:t}=HR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function mz(e){let{name:t,rest:n}=HR(e),r=UR(t);if(WR(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
|
|
3210
3210
|
`);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(`
|
|
3211
3211
|
`).slice(-Math.max(1,e)).join(`
|
|
3212
|
-
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function
|
|
3212
|
+
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function hz(e,t){let{name:n,rest:r}=HR(e),i=UR(n);if(WR(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 gz(e,t){let{name:n,rest:r}=HR(e),i=UR(n);if(WR(i))return i;let a=t.processManager??qR();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await nz(i,a),$(`VM '${n}' stopped\n`))}const _z=[`--name`,`--filter`,`--scoop`],vz={state:`inactive`,session:null};function yz(){return{stdout:`usage: webhook <command> [options]
|
|
3213
3213
|
|
|
3214
3214
|
Commands:
|
|
3215
3215
|
create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
|
|
@@ -3229,21 +3229,21 @@ Examples:
|
|
|
3229
3229
|
webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
|
|
3230
3230
|
webhook list
|
|
3231
3231
|
webhook delete abc123
|
|
3232
|
-
`,stderr:``,exitCode:0}}function
|
|
3232
|
+
`,stderr:``,exitCode:0}}function bz(e){return e().session?.webhookUrl??null}function xz(e,t,n){return t?la(t,e):n()?ua(self.location.href,e):`(URL unavailable — connect a leader tray)`}function Sz(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function Cz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
|
|
3233
3233
|
`,exitCode:1};let t=y();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
|
|
3234
3234
|
`,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.
|
|
3235
3235
|
`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
|
|
3236
|
-
`,exitCode:1}}}async function
|
|
3237
|
-
`,exitCode:1};let s=
|
|
3238
|
-
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=
|
|
3236
|
+
`,exitCode:1}}}async function wz(e,t,n){let r=C(e.slice(1),{value:_z});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=Ri(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
|
|
3237
|
+
`,exitCode:1};let s=Dz(t);if(s)return s;let c=await ey();if(!c)return Sz(`create`);let l=await ny(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=Oz(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 Tz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await ey();if(!r)return Sz(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
|
|
3238
|
+
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=kz(t);return{stdout:Az(i.map(e=>({id:e.id,name:e.name,url:xz(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function Ez(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook delete: ${n.error}\n`,exitCode:1};let r=n.positionals[0];if(n.positionals.length>1)return{stdout:``,stderr:`webhook delete: requires exactly one ID
|
|
3239
3239
|
`,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
|
|
3240
|
-
`,exitCode:1};let i=await ey();if(!i)return
|
|
3241
|
-
`,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
|
|
3242
|
-
`,exitCode:1}}return null}function
|
|
3240
|
+
`,exitCode:1};let i=await ey();if(!i)return Sz(`delete`);let a=y();try{if(a){if((await a.call(`tray-webhook-revoke`,{webhookId:r}))?.ok!==!0)throw Error(`revocation not acknowledged`)}else if(t.getLeaderStatus().session?.webhookUrl?.includes(`/wh/`))throw Error(`no leader panel`)}catch{return{stdout:``,stderr:`webhook delete: revocation failed; registration retained, reconnect the leader and retry
|
|
3241
|
+
`,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 Dz(e){if(e.hasLocalNodeServer())return null;if(!bz(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}")`)+`
|
|
3242
|
+
`,exitCode:1}}return null}function Oz(e,t){try{return xz(e,bz(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function kz(e){try{return{trayUrlBase:bz(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function Az(e,t,n,r){let i=`Active webhooks:
|
|
3243
3243
|
`;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
|
|
3244
3244
|
`;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
|
|
3245
3245
|
Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
|
|
3246
|
-
`),i}function
|
|
3246
|
+
`),i}function jz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>vz)};return S(`webhook`,async(e,n)=>{if(e.length===0)return yz();let r=e[0];if(w(e,{valueFlags:r===`create`?_z:void 0}))return yz();try{switch(r){case`create`:return await wz(e,t,n.env);case`list`:return await Tz(e,t);case`delete`:return await Ez(e,t);case`rotate`:return await Cz(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 Mz(){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 Nz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
|
|
3247
3247
|
|
|
3248
3248
|
Minimal websocat client. Sends stdin lines as WebSocket messages and prints
|
|
3249
3249
|
received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
|
|
@@ -3285,14 +3285,14 @@ EXAMPLES:
|
|
|
3285
3285
|
echo 'Page.navigate {"url":"https://example.com"}' \\
|
|
3286
3286
|
| websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
|
|
3287
3287
|
ws://127.0.0.1:9222/devtools/page/<id>
|
|
3288
|
-
`,stderr:``,exitCode:0}}const
|
|
3289
|
-
`)}function
|
|
3290
|
-
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function
|
|
3288
|
+
`,stderr:``,exitCode:0}}const Pz=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 Fz(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 Iz(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 Lz(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 Rz(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 zz(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function Bz(e,t,n,r,i){let a=Fz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function Vz(e,t,n,r,i,a,o){let s=Fz(t,n,r,e);if(!s)return{stop:!0};let c=Iz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function Hz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const Uz=[(e,t,n,r)=>{if(!Hz(r,[`--close-status-code`]))return null;let i=Fz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=Lz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>Hz(r,[`--close-reason`])?Bz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>Hz(r,[`-B`,`--buffer-size`])?Vz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>Hz(r,[`--max-messages`])?Vz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>Hz(r,[`--protocol`])?Bz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!Hz(r,[`--ping-interval`]))return null;let i=Fz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>Hz(r,[`--conn-timeout`])?Vz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>Hz(r,[`-H`,`--header`])?Bz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Wz(e,t,n,r){for(let i of Uz){let a=i(e,t,n,r);if(a)return a}return null}function Gz(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)
|
|
3289
|
+
`)}function Kz(e){let t=Mz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(Pz.has(r)||Pz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(Rz(t,r)||zz(t,r))continue;let i=Wz(t,e,n,r);if(i){if(`stop`in i)return t;n=i.nextIndex;continue}if(r.startsWith(`-`))return t.error=`websocat: unknown flag '${r}'\n`,t;if(t.url)return t.error=`websocat: extra positional argument '${r}' — advanced mode is not supported\n`,t;t.url=r}return Gz(t),t}function qz(e,t){if(!e)return[];let n=t?`\0`:`
|
|
3290
|
+
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function Jz(e,t,n){let r=e.trim();if(!r)return e;let i=r.search(/\s/),a=i===-1?r:r.slice(0,i),o=i===-1?``:r.slice(i+1).trim(),s=[];if(o)try{s=JSON.parse(o)}catch{s=[o]}let c={id:t,method:a,params:s};return n||(c.jsonrpc=`2.0`),JSON.stringify(c)}function Yz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function Xz(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 Zz=1e4;function Qz(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function $z(){let e=!1,t=Qz();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function eB(e,t){return e.length?e.join(t)+t:``}function tB(e){return e.length?e.join(`
|
|
3291
3291
|
`)+`
|
|
3292
|
-
`:``}function
|
|
3293
|
-
`,a=
|
|
3294
|
-
`);if(!/^wss?:\/\//i.test(r.url))return
|
|
3295
|
-
`,exitCode:1}}function
|
|
3292
|
+
`:``}function nB(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function rB(e,t){e.verbose<1||(e.customHeaders.length>0&&nB(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&&nB(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&nB(e,t,`-k/--insecure has no effect in browsers`))}function iB(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 aB(e,t,n,r){if(n.outLines.length<Zz){n.outLines.push(r);return}n.droppedForOverflow===0&&nB(e,t,`output buffer reached ${Zz} 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 oB(e,n,r){let{bytes:i,isBinary:a}=Xz(r);return i.length>e.bufferSize&&(nB(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):Yz(i)}function sB(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function cB(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function lB(e,t){setTimeout(()=>{cB(t,e.closeStatus??1e3,e.closeReason)},0)}function uB(e,t,n){let r=qz(n,t.nullTerminated),i=1,a=0,o=t.oneMessage?r.slice(0,1):r;for(let n of o){let r=n;t.jsonrpc&&(r=Jz(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function dB(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&lB(t,e)}async function fB(e,t,n){let r=[];rB(e,r);let i=e.nullTerminated?`\0`:`
|
|
3293
|
+
`,a=iB(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=Qz(),u=$z(),d=0,f=!1,p=setTimeout(()=>{f=!0,cB(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}cB(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=oB(e,r,t.data);aB(e,r,s,n)}s.received+=1,sB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(nB(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&&nB(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:eB(s.outLines,i),stderr:tB(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&lB(e,o):dB(o,e,uB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&nB(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:eB(s.outLines,i),stderr:tB(r),exitCode:h}}function pB(e){return{stdout:``,stderr:e,exitCode:2}}function mB(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function hB(e,t,n={}){let r=Kz(e);if(r.showHelp)return Nz();if(r.error)return pB(r.error);if(!r.url)return pB(`websocat: missing ws:// or wss:// URL (use --help for usage)
|
|
3294
|
+
`);if(!/^wss?:\/\//i.test(r.url))return pB(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=mB(n);return i?fB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
|
|
3295
|
+
`,exitCode:1}}function gB(){return S(`websocat`,async(e,t)=>hB(e,{stdin:P(t.stdin)}))}function _B(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const vB={commands:new Map,collisions:[]};async function yB(e,t){let n=Vn(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?Wn(e.fs,n):vB}async function bB(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?ri(e.fs):new Map}function xB(e,t,n,r,i,a,o){if(i.has(e)){let i=[`/usr/bin/${e}`];if((t||r)&&i.push(` (shadowed by built-in ${e})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)i.push(` (shadowed ${t})`)}return{lines:i,found:!0}}if(t){let e=[t];if(n)for(let t of n.shadowedPaths)e.push(` (shadowed ${t})`);return r&&e.push(` ${r.path} (workflow, shadowed by .jsh)`),{lines:e,found:!0}}return r?{lines:[`${r.path} (workflow)`],found:!0}:a.has(e)&&!o.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 S(`which`,async(e,n)=>{if(w(e))return{stdout:`which - locate a command
|
|
3296
3296
|
|
|
3297
3297
|
Usage: which <command> [command...]
|
|
3298
3298
|
|
|
@@ -3303,9 +3303,9 @@ Prints the path of the given command(s).
|
|
|
3303
3303
|
|
|
3304
3304
|
Exit code 0 if all commands found, 1 if any not found.
|
|
3305
3305
|
`,stderr:``,exitCode:0};let r=C(e,{});if(`error`in r)return{stdout:``,stderr:`which: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return{stdout:``,stderr:`which: missing argument
|
|
3306
|
-
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await
|
|
3306
|
+
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await yB(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await bB(t),u=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,d=new Set(t.getScriptRegisteredNames?.()??[]),f=[],p=!0;for(let e of r.positionals){let t=s.get(e),n=l.get(e),r=xB(e,t,c.get(e),n,u,a,d);f.push(...r.lines),r.found||(p=!1)}return{stdout:f.length>0?f.join(`
|
|
3307
3307
|
`)+`
|
|
3308
|
-
`:``,stderr:``,exitCode:+!p}})}const
|
|
3308
|
+
`:``,stderr:``,exitCode:+!p}})}const CB=`__slicc_workflows`,wB=String.raw`
|
|
3309
3309
|
class WorkflowError extends Error {}
|
|
3310
3310
|
class WorkflowDeterminismError extends WorkflowError {}
|
|
3311
3311
|
class WorkflowAgentCapError extends WorkflowError {}
|
|
@@ -3418,40 +3418,40 @@ function log(message) {
|
|
|
3418
3418
|
}
|
|
3419
3419
|
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()); } };
|
|
3420
3420
|
function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
|
|
3421
|
-
`;function
|
|
3421
|
+
`;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);
|
|
3422
3422
|
const __stringify = JSON.stringify.bind(JSON);
|
|
3423
|
-
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${
|
|
3423
|
+
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(`
|
|
3424
3424
|
`);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(`
|
|
3425
|
-
`).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
|
|
3425
|
+
`).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]
|
|
3426
3426
|
workflow run --script '<inline js>' [...]
|
|
3427
3427
|
workflow list
|
|
3428
3428
|
workflow status <runId>
|
|
3429
3429
|
workflow stop <runId>
|
|
3430
3430
|
workflow save <runId> <name> [--force]
|
|
3431
3431
|
Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
|
|
3432
|
-
pass --wait to block and print the full result.`,
|
|
3433
|
-
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return
|
|
3432
|
+
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 S(`workflow`,async(t,n)=>{if(PB.has(t[0])&&w(t.slice(1)))return{stdout:NB+`
|
|
3433
|
+
`,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+`
|
|
3434
3434
|
`,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
|
|
3435
|
-
`,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=
|
|
3436
|
-
`,exitCode:1};let s=
|
|
3437
|
-
`,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
|
|
3438
|
-
`,exitCode:1};if(!
|
|
3435
|
+
`,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)
|
|
3436
|
+
`,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 Hr(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
|
|
3437
|
+
`,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]
|
|
3438
|
+
`,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
|
|
3439
3439
|
`,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(`
|
|
3440
3440
|
`):`(no runs)`)+`
|
|
3441
3441
|
`,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(`
|
|
3442
3442
|
`)+`
|
|
3443
|
-
`,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
|
|
3443
|
+
`,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)+`
|
|
3444
3444
|
`:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
|
|
3445
3445
|
`),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
|
|
3446
|
-
`,stderr:t.stderr,exitCode:0}}function
|
|
3446
|
+
`,stderr:t.stderr,exitCode:0}}function qB(e){return e.split(`
|
|
3447
3447
|
`).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
|
|
3448
|
-
`)}function
|
|
3448
|
+
`)}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(`
|
|
3449
3449
|
`)+`
|
|
3450
|
-
`:``}function
|
|
3451
|
-
`}return r}function
|
|
3450
|
+
`:``}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+`
|
|
3451
|
+
`}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(`,
|
|
3452
3452
|
`);return r===null?i.length?o+`
|
|
3453
|
-
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function
|
|
3454
|
-
`)){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
|
|
3453
|
+
`:``:`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(`
|
|
3454
|
+
`)){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=ei(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 S(`xxd`,async(e,t)=>{if(sV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
|
|
3455
3455
|
-c cols number of octets per line (default 16; 30 for -p; 12 for -i)
|
|
3456
3456
|
-g bytes number of octets per group (default 2; 0 disables grouping)
|
|
3457
3457
|
-l len stop after len octets
|
|
@@ -3461,8 +3461,8 @@ pass --wait to block and print the full result.`,NB=new Set([`list`,`status`,`st
|
|
|
3461
3461
|
-i output in C include style
|
|
3462
3462
|
-r reverse: convert a hex dump back to binary (-r -p for plain)
|
|
3463
3463
|
-h show this help
|
|
3464
|
-
`,stderr:``,exitCode:0};let n;try{n=
|
|
3465
|
-
`,stderr:``,exitCode:0}}function
|
|
3466
|
-
`,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(/^\.\//,``))||er(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await
|
|
3467
|
-
`,exitCode:1};let c=St(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function mV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function hV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[UD(`ipk`,r),UD(`npm`,r),UD(`i`,r),EO(`ipx`,{fs:t,fetch:n}),EO(`npx`,{fs:t,fetch:n}),Zy(`di`,{fs:t,fetch:n}),Zy(`uv`,{fs:t,fetch:n}),GL({fs:t,fetch:n})]}function gV(e={}){let t=[qT({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),te(),RF(),rF(),XP(e.browserAPI,e.fs),Ij(e.browserAPI),py(e.browserAPI),JE(e),pV(),xL(),pI(),GF(),QF(),YF(),cv(),uV(),MF(`sqlite3`),MF(`sqllite`),AI(),XI(),px(),W_(),$A({buildProcessConfig:e.buildProcessConfig}),$A({buildProcessConfig:e.buildProcessConfig},`jsh`),XM(`python3`,{buildProcessConfig:e.buildProcessConfig}),XM(`python`,{buildProcessConfig:e.buildProcessConfig}),...hV(e),...e.fs?[yS({fs:e.fs})]:[],...e.fs?[dA({fs:e.fs})]:[],...e.fetch?[eE({fetch:e.fetch})]:[],oS(),sS(),Az(e.webhook),hB(),fy(e.crontask),vk({fs:e.fs,scriptCatalog:e.scriptCatalog}),nM({fs:e.fs,fetch:e.fetch}),vS(),CF(),Lj(),Rj(`pdftk`),Rj(`pdf`),G_(`biscotto`),G_(`biscotti`),Jj(`pdftoppm`),Jj(`pdftocairo`),Yj(`pdftotext`),Xv(`convert`),Xv(`magick`),xB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),eL(),gL(),WE(),GE(),_L(),fA(),eN(),fk(),Rb(),mj(),pj(),lk(),xP(mV(e)),pN({fs:e.fs}),zN(),av(),ov(),sv(`xclip`),sv(`xsel`),RN(),LS(),gg(),_g(),zA(e.fs),et(),ij(),Lg({getParentJid:e.getParentJid}),Kb(),wM({processManager:e.processManager}),oR({processManager:e.processManager}),kO({processManager:e.processManager}),DO({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Bg(),uA(),tk(),jR(),EE(),Jx(),qR({processManager:e.processManager}),dv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),aS(),Q_({registry:e.cherryRuntimeRegistry}),by(),Dy({fs:e.fs}),Oy({fs:e.fs}),BF(e.sudoCommand),RB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),gB(),nF()];return e.fs&&(Zj(),t.push(...Mn.map(t=>WT(t,e.browserAPI,e.fs)))),t}let _V=null;function vV(e){_V=e}function yV(e){_V?.(e)}var bV=Et();const xV=Reflect.get(Je,`DefenseInDepthBox`);function SV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function CV(e,t){if(typeof e!=`string`)return e;let n=SV(t);if(n===`binary`||n===`latin1`){let t=le(e);if(t)return t}return bV.Buffer.from(e,n)}var wV=class{vfs;registeredCommandsFn=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}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=Ne(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}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){if(e===`/usr`||e===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(e.startsWith(`/usr/bin/`)){let t=e.slice(9);if(t.length>0&&!t.includes(`/`)&&this.getVirtualBinCommands().includes(t))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,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=xV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=SV(t),o=bV.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&g(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return bV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(b(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(b(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e);await this.vfs.writeFile(r,CV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),CV(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)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};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)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};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(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 this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new Pe(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function TV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?TV(e.getUnderlyingFS?.()):null}async function EV(e){let t=ce(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const DV=e(`almost-bash-shell`),OV=`__SLICC_RUN_PID`,kV=`__SLICC_OUTPUT_TEE__`;function AV(e){let t=e?.get(OV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function jV(e){if(!(OV in e)&&!(kV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[OV]:t,[kV]:n,[$p]:r,[rp]:i,[ip]:a,...o}=e;return o}var MV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(AV(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:$f,PATH:Hn,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return gV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands],fs:e.fs,fetch:t,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]}})}constructor(t){this.options=t,this.vfsAdapter=new wV(t.fs),this.progress=new hp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new Xf({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:EV}),this.mountCommands=new Ss({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:om});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=TV(i)??TV(a);this.scriptCatalog=t.scriptCatalog??new ii({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=h({progress:bp(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),eh(t.fs),Zh(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Xe(),...Ye()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Ze({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:Vp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:Qf(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(mm),this.allowedCommands!==null){let e=this.bash;for(let t of Ye())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 p=u.map(e=>e.name),m=f??[...Xe(),...Ye()];this.builtinCommandNames=new Set([...m,...p]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}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 Rr(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,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return Un(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await ep(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=tp(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});if(r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){DV.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){yV(e.trim().split(/\s+/)[0]||`unknown`),p(),await this.waitForInitialJshSync(t);let o=tm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[OV]:String(n)},...i===void 0?{}:{[kV]:i},...o?{[$p]:o}:{}},cwd:this.cwd,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH;this.activeRunSignal=t;let l=this.beginScriptRun(e),u;try{u=await this.bash.exec(lp(e,a),s)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(l)}if(await this.flushPendingCommandGrants(),u=up(u,a),u.env&&(this.lastEnv=jV(u.env)),u.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.pendingEnvWrites.size>0){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}if(u.env?.PWD&&(this.cwd=u.env.PWD),u.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(u.exitCode!==0&&u.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return dp(await e(u,this.cwd,this.vfsAdapter),u.pipeStatus)}return u}isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?Gp(t,this.progress):qp(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(kV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await n.execute(e,t);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(kV);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=Ip(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Rp(t,this.progress,Lp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())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($p))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=Yp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Zp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:1}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=nt(e);if(!n)return;let r=`${it}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Pe&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
3468
|
-
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)
|
|
3464
|
+
`,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=$n(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...]
|
|
3465
|
+
`,stderr:``,exitCode:0}}function mV(){return S(`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
|
|
3466
|
+
`,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(/^\.\//,``))||er(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
|
|
3467
|
+
`,exitCode:1};let c=St(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function hV(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function gV(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[UD(`ipk`,r),UD(`npm`,r),UD(`i`,r),EO(`ipx`,{fs:t,fetch:n}),EO(`npx`,{fs:t,fetch:n}),Zy(`di`,{fs:t,fetch:n}),Zy(`uv`,{fs:t,fetch:n}),KL({fs:t,fetch:n})]}function _V(e={}){let t=[qT({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),te(),zF(),iF(),ZP(e.browserAPI,e.fs),Ij(e.browserAPI),py(e.browserAPI),JE(e),mV(),SL(),mI(),KF(),$F(),XF(),cv(),dV(),NF(`sqlite3`),NF(`sqllite`),jI(),ZI(),px(),W_(),$A({buildProcessConfig:e.buildProcessConfig}),$A({buildProcessConfig:e.buildProcessConfig},`jsh`),XM(`python3`,{buildProcessConfig:e.buildProcessConfig}),XM(`python`,{buildProcessConfig:e.buildProcessConfig}),...gV(e),...e.fs?[yS({fs:e.fs})]:[],...e.fs?[dA({fs:e.fs})]:[],...e.fetch?[eE({fetch:e.fetch})]:[],oS(),sS(),jz(e.webhook),gB(),fy(e.crontask),vk({fs:e.fs,scriptCatalog:e.scriptCatalog}),nM({fs:e.fs,fetch:e.fetch}),vS(),wF(),Lj(),Rj(`pdftk`),Rj(`pdf`),G_(`biscotto`),G_(`biscotti`),Jj(`pdftoppm`),Jj(`pdftocairo`),Yj(`pdftotext`),Xv(`convert`),Xv(`magick`),SB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),tL(),_L(),WE(),GE(),vL(),fA(),eN(),fk(),Rb(),mj(),pj(),lk(),SP(hV(e)),pN({fs:e.fs}),BN(),av(),ov(),sv(`xclip`),sv(`xsel`),zN(),LS(),gg(),_g(),zA(e.fs),et(),ij(),Lg({getParentJid:e.getParentJid}),Kb(),wM({processManager:e.processManager}),sR({processManager:e.processManager}),kO({processManager:e.processManager}),DO({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Bg(),uA(),tk(),MR(),EE(),Jx(),JR({processManager:e.processManager}),dv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),aS(),Q_({registry:e.cherryRuntimeRegistry}),by(),Dy({fs:e.fs}),Oy({fs:e.fs}),VF(e.sudoCommand),zB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),_B(),rF()];return e.fs&&(Zj(),t.push(...Mn.map(t=>WT(t,e.browserAPI,e.fs)))),t}let vV=null;function yV(e){vV=e}function bV(e){vV?.(e)}var xV=Et();const SV=Reflect.get(Je,`DefenseInDepthBox`);function CV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function wV(e,t){if(typeof e!=`string`)return e;let n=CV(t);if(n===`binary`||n===`latin1`){let t=le(e);if(t)return t}return xV.Buffer.from(e,n)}var TV=class{vfs;registeredCommandsFn=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}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=Ne(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}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){if(e===`/usr`||e===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(e.startsWith(`/usr/bin/`)){let t=e.slice(9);if(t.length>0&&!t.includes(`/`)&&this.getVirtualBinCommands().includes(t))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,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=SV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=CV(t),o=xV.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&g(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return xV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(b(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(b(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e);await this.vfs.writeFile(r,wV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),wV(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)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};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)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};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(t===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(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 this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new Pe(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function EV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?EV(e.getUnderlyingFS?.()):null}async function DV(e){let t=ce(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const OV=e(`almost-bash-shell`),kV=`__SLICC_RUN_PID`,AV=`__SLICC_OUTPUT_TEE__`;function jV(e){let t=e?.get(kV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function MV(e){if(!(kV in e)&&!(AV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[kV]:t,[AV]:n,[$p]:r,[rp]:i,[ip]:a,...o}=e;return o}var NV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(jV(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:$f,PATH:Hn,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t){return _V({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands],fs:e.fs,fetch:t,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,buildProcessConfig:this.resolveJshProcessConfig,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]}})}constructor(t){this.options=t,this.vfsAdapter=new TV(t.fs),this.progress=new hp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new Xf({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:DV}),this.mountCommands=new Cs({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:om});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=EV(i)??EV(a);this.scriptCatalog=t.scriptCatalog??new ai({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=h({progress:bp(this.progress)}),l=this.buildSupplementalCommands(t,c),u=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),eh(t.fs),Zh(t.fs,c,t.browserAPI),...l].filter(e=>this.isCommandAllowed(e.name)),d=[...Xe(),...Ye()],f=this.allowedCommands?d.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new Ze({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:f,customCommands:u,sleep:Vp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:Qf(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(mm),this.allowedCommands!==null){let e=this.bash;for(let t of Ye())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 p=u.map(e=>e.name),m=f??[...Xe(),...Ye()];this.builtinCommandNames=new Set([...m,...p]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}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 zr(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,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return Un(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await ep(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=tp(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});if(r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){OV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){bV(e.trim().split(/\s+/)[0]||`unknown`),p(),await this.waitForInitialJshSync(t);let o=tm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[kV]:String(n)},...i===void 0?{}:{[AV]:i},...o?{[$p]:o}:{}},cwd:this.cwd,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH;this.activeRunSignal=t;let l=this.beginScriptRun(e),u;try{u=await this.bash.exec(lp(e,a),s)}finally{this.activeRunSignal===t&&(this.activeRunSignal=void 0),this.endScriptRun(l)}if(await this.flushPendingCommandGrants(),u=up(u,a),u.env&&(this.lastEnv=MV(u.env)),u.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.pendingEnvWrites.size>0){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}if(u.env?.PWD&&(this.cwd=u.env.PWD),u.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(u.exitCode!==0&&u.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return dp(await e(u,this.cwd,this.vfsAdapter),u.pipeStatus)}return u}isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?Gp(t,this.progress):qp(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t),a=this.outputTees;return{...n,async execute(e,t){let o=t.env?.get(AV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await n.execute(e,t);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(AV);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=Ip(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Rp(t,this.progress,Lp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())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($p))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=Yp(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await Zp(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:1}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=nt(e);if(!n)return;let r=`${it}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Pe&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
3468
|
+
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)OV.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands();for(let[e,n]of t)this.isCommandAllowed(e)&&(this.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.builtinCommandNames.add(e)));for(let e of n.keys())if(!this.registeredWorkflowCommands.has(e)){if(this.registeredJshCommands.has(e)){this.registeredWorkflowCommands.add(e);continue}this.builtinCommandNames.has(e)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredWorkflowCommands.add(e),this.builtinCommandNames.add(e))}}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:t?.env??Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return Hr(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(jV(i.env)))}let s=(await t.getWorkflowCommands()).get(r);if(s){let t=ii(s.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return S(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,P(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return S(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createUmountCustomCommand(){let e=this.mountCommands;return S(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?np(a):[],c=this.options.jshDiscoveryFs??this.options.fs,l;try{let e=await c.readFile(o,{encoding:`utf-8`});l=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.lastEnv}}let u=[`node`,o,...s],d=await Hr(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{fa as C,xo as S,Io as _,kB as a,Sa as b,mp as c,ms as d,ss as f,Lo as g,ts as h,TB as i,$f as l,rs as m,TV as n,CB as o,is as p,yV as r,Qp as s,NV as t,hs as u,Do as v,xa as x,va as y};
|