sliccy 6.234.2 → 6.235.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/.vite/manifest.json +177 -177
- package/dist/ui/assets/{SKILL-BcBnRJhU.js → SKILL-Btc2ZGeK.js} +1 -1
- package/dist/ui/assets/SKILL-Dyvlv3-H.js +1 -0
- package/dist/ui/assets/{account-store-B89MQ7Me.js → account-store-BGMKtG5Y.js} +1 -1
- package/dist/ui/assets/{account-store-BXz6ZFZh.js → account-store-Dp3-Xn7L.js} +1 -1
- package/dist/ui/assets/{adobe-DIbRzVFr.js → adobe-BAk2XFoI.js} +1 -1
- package/dist/ui/assets/{adobe-BNVxZtfN.js → adobe-Bjzb-4li.js} +1 -1
- package/dist/ui/assets/agent-command-impl-BQZK9ujN.js +7 -0
- package/dist/ui/assets/{agent-help-B-gfDDn0.js → agent-help-BWtxl_zJ.js} +39 -0
- package/dist/ui/assets/{agent-panels-BtNjX3Iu.js → agent-panels-CKLY91Ka.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-C84faNVw.js → almost-bash-shell-headless-Di8IjgQ4.js} +514 -513
- package/dist/ui/assets/{apply-layout-CL42RRRY.js → apply-layout-CS-toayl.js} +1 -1
- package/dist/ui/assets/{azure-openai-CYrp6e51.js → azure-openai-BPzPHwaS.js} +1 -1
- package/dist/ui/assets/{azure-openai-Bw_ryG1R.js → azure-openai-wdTg5Wbz.js} +1 -1
- package/dist/ui/assets/{cdp-BKI1JXvP.js → cdp-DDvgfoMG.js} +1 -1
- package/dist/ui/assets/{cerebras-oijJ50j1.js → cerebras-CfXNiSS5.js} +1 -1
- package/dist/ui/assets/{cerebras-DMu4SzZq.js → cerebras-dGdYGjQw.js} +1 -1
- package/dist/ui/assets/{composer-speech-CPwX-84w.js → composer-speech-BdRosU9N.js} +1 -1
- package/dist/ui/assets/{connect-surface-CdGGwWaQ.js → connect-surface-BlQdWnMB.js} +1 -1
- package/dist/ui/assets/{cost-command-BUgEVZCe.js → cost-command-05RLVzlt.js} +5 -0
- package/dist/ui/assets/{directed-approval-D5pWaIEI.js → directed-approval-Bd7qek3T.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-C8j2YqYo.js → emscripten-vfs-hook-jCFXNkwf.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-ClCZhviP.js → frozen-archive-writer-C3tdnTfy.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-B_ypTSv1.js → gelatiere-unit-DcStO6Pk.js} +1 -1
- package/dist/ui/assets/{github-BYAzMsMt.js → github-BVvS9yXo.js} +1 -1
- package/dist/ui/assets/{github-BXOZZRCn.js → github-Bv7TQyhc.js} +1 -1
- package/dist/ui/assets/{github-copilot-BotqkEF-.js → github-copilot-COXEglZJ.js} +1 -1
- package/dist/ui/assets/{github-copilot-C2vPEEMD.js → github-copilot-DtuKtM8B.js} +1 -1
- package/dist/ui/assets/{hear-DI9HbHzF.js → hear-CraiWDpz.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-0A397O1r.js → js-realm-worker-9AElT3xJ.js} +9 -7
- package/dist/ui/assets/{jsh-executor-P6raP_yT.js → jsh-executor-D8okn0pR.js} +2 -2
- package/dist/ui/assets/jsh-runtime-extensions-pb2O5sX7.js +1 -0
- package/dist/ui/assets/{kernel-worker-CsBgMxu3.js → kernel-worker-DefIX_AF.js} +76 -74
- package/dist/ui/assets/{lick-ws-bridge-DZftnR2M.js → lick-ws-bridge-DIhQXDNu.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-DzcpLAp7.js → lick-ws-bridge-DqvDNYdO.js} +1 -1
- package/dist/ui/assets/{live-session-curation-SAu12XT0.js → live-session-curation-xBvullFQ.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-BDwg0Tlk.js → live-session-snapshot-BBO9svAu.js} +1 -1
- package/dist/ui/assets/{local-llm-C8XsApDI.js → local-llm-B4YA09uv.js} +1 -1
- package/dist/ui/assets/{local-llm-D3YpFMfx.js → local-llm-DvCg__dx.js} +1 -1
- package/dist/ui/assets/{main-cherry-C9cG558r.js → main-cherry-CfObHKlY.js} +1 -1
- package/dist/ui/assets/{main-CCA3V0ON.js → main-v-uHzakV.js} +3 -3
- package/dist/ui/assets/{mcp-command-CP16m6me.js → mcp-command-CQkRyZv1.js} +9 -9
- package/dist/ui/assets/{memory-curation-seam-DWY1vBcQ.js → memory-curation-seam-CNje6hJ8.js} +1 -1
- package/dist/ui/assets/{memory-health-CVTso24P.js → memory-health-C_wI3AOx.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-dtfCDQsE.js → memory-write-execute-D052wKe_.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-BHSCGyqy.js → merge-folded-cost-into-frozen-f-UEXAfF.js} +1 -1
- package/dist/ui/assets/{new-session-DFNOHhAo.js → new-session-BT6tsmB6.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-DZI6iVTw.js → oauth-bootstrap-nVNcu8ih.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-B1gI1wq2.js → onboarding-orchestrator-aAGs543b.js} +1 -1
- package/dist/ui/assets/{openai-codex-gx5UzFOb.js → openai-codex-BrF7dQqU.js} +1 -1
- package/dist/ui/assets/{openai-codex-BpEo8zt_.js → openai-codex-DIt1eAL_.js} +1 -1
- package/dist/ui/assets/{openrouter-DyETIhiO.js → openrouter-DxYCIi6r.js} +1 -1
- package/dist/ui/assets/{openrouter-D_srHh9D.js → openrouter-DzDP8Nsr.js} +1 -1
- package/dist/ui/assets/{openrouter-free-CN9R-pFM.js → openrouter-free-B1NcCkBD.js} +1 -1
- package/dist/ui/assets/{openrouter-free-Bp2tU9FR.js → openrouter-free-BCfkQSXH.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-I5LUYqtH.js → openrouter-oauth-CDUTjZL0.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-Wr0i5Fiz.js → openrouter-oauth-CWrCuOZo.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-Dw1XhS-W.js → panel-rpc-handlers-CFeJoi6l.js} +2 -2
- package/dist/ui/assets/{panelize-shell-J_kHfXn-.js → panelize-shell-Dsl0LtcU.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-Ba_D9vY1.js → pi-edit-execution-D9KvDmkY.js} +1 -1
- package/dist/ui/assets/{provider-CT6lmTmO.js → provider-BeHuaFUs.js} +1 -1
- package/dist/ui/assets/{provider-eTbuK6t4.js → provider-Dp-AUJYR.js} +1 -1
- package/dist/ui/assets/{provider-settings-CGcZJy3v.js → provider-settings-gkKLdxqj.js} +1 -1
- package/dist/ui/assets/provider-store-access-BpYc7sxi.js +1 -0
- package/dist/ui/assets/provider-store-access-DmCK1m2H.js +1 -0
- package/dist/ui/assets/{providers-BWWdnCv2.js → providers-Cu-JTUhF.js} +1 -1
- package/dist/ui/assets/{providers-DN5CpwM4.js → providers-g8bqtt3g.js} +2 -2
- package/dist/ui/assets/{quick-llm-B_FBAVnD.js → quick-llm-BiIGx8uX.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-CklkqHBO.js → realm-inprocess-CvVF0qXA.js} +6 -4
- package/dist/ui/assets/{realm-unhandled-rejections-BJVGg28T.js → realm-unhandled-rejections-CCFHXO-I.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-BmnkdM7-.js → realm-unhandled-rejections-DuMO2BTT.js} +1 -1
- package/dist/ui/assets/{recovery-screen-r6qGFDLy.js → recovery-screen-MOiv9sFc.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-7SVEwYar.js → remote-terminal-view-CasqnGQw.js} +2 -2
- package/dist/ui/assets/{restore-DB4t9f2x.js → restore-30lG0Rle.js} +1 -1
- package/dist/ui/assets/{run-DpSfWot-.js → run-BXY4xm9Y.js} +2 -2
- package/dist/ui/assets/{run-CCUKvvPv.js → run-CTXs0tgt.js} +2 -2
- package/dist/ui/assets/{run-CGYW74BK.js → run-CogNNkBe.js} +1 -1
- package/dist/ui/assets/{run-DtwP8Z1e.js → run-D5V1rBmu.js} +1 -1
- package/dist/ui/assets/{session-command-memory-2wvzOG50.js → session-command-memory-DUB-rTlJ.js} +2 -2
- package/dist/ui/assets/{session-jsonl-B8gD6pZp.js → session-jsonl-By4E4Ifw.js} +1 -1
- package/dist/ui/assets/{session-jsonl-C0eT3g_O.js → session-jsonl-_6flcE_u.js} +1 -1
- package/dist/ui/assets/{session-search-index-Bw64dUdP.js → session-search-index-CHeeecsJ.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-B0JEOr5f.js → setup-feature-flags-remote-CL50wmO5.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-Ch5t-zZI.js → setup-model-catalog-C1iT0LX3.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-BAtE5l_Z.js → silent-renew-backoff-BMztJHje.js} +1 -1
- package/dist/ui/assets/slicc-version-65AwHbmH.js +1 -0
- package/dist/ui/assets/{soundscape-vLyu8uzw.js → soundscape-Bqt7hhbo.js} +1 -1
- package/dist/ui/assets/{speak-BUcAR0ZB.js → speak-Bt6rUel5.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-BkrX-0Pb.js → sprinkle-manager-BO_EiUuv.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-ZIQYuRcN.js → sprinkle-renderer-B-5D8jG7.js} +1 -1
- package/dist/ui/assets/{sudo-I-a8kg43.js → sudo-BXYhcyYn.js} +1 -1
- package/dist/ui/assets/{supervisor-DWP52nCg.js → supervisor-D9GsUUZz.js} +1 -1
- package/dist/ui/assets/{sync-dialog-DYuqB9Lu.js → sync-dialog-CQAslMYT.js} +1 -1
- package/dist/ui/assets/{transformers-env-DbjuwG_9.js → transformers-env-CfJzmxee.js} +1 -1
- package/dist/ui/assets/{tray-leader-CCNQOH9C.js → tray-leader-DDtu7vPC.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-c3qFkoS8.js → tray-leave-runtime-18EOUa0y.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-wKixyWJ4.js → tray-sidecar-Czj8OIo2.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-GsJZdqlG.js → upgrade-detection-DFrbhD5b.js} +1 -1
- package/dist/ui/assets/{voice-reply-DsYDHs69.js → voice-reply-_4YMaQsn.js} +1 -1
- package/dist/ui/assets/{wc-attach-BVezjUnL.js → wc-attach-Dq6xz6VP.js} +2 -2
- package/dist/ui/assets/{wc-browser-CUlOCHE2.js → wc-browser-DarLxgVl.js} +1 -1
- package/dist/ui/assets/{wc-computers-Bir1XsVN.js → wc-computers-Dgt_14kH.js} +1 -1
- package/dist/ui/assets/{wc-detached-D9SVxLko.js → wc-detached-BIwL6lvs.js} +1 -1
- package/dist/ui/assets/{wc-extension-kZR1QlCq.js → wc-extension-kAXUuhKY.js} +2 -2
- package/dist/ui/assets/{wc-follower-bZrkGbcr.js → wc-follower-BxZs23i2.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-MyuhwC3y.js → wc-follower-oauth-SwN-s0h6.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-7UUwz3A6.js → wc-gelatiere-DJiVHjQS.js} +1 -1
- package/dist/ui/assets/{wc-live-DaAEDDJl.js → wc-live-CWROGoQx.js} +5 -5
- package/dist/ui/assets/{wc-nav-C-HOv75d.js → wc-nav-CcrWWixX.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-DMIVj7fy.js → wc-onboarding-BEnUTFQr.js} +2 -2
- package/dist/ui/assets/{wc-permissions-1T9jRzTT.js → wc-permissions-DsjjTDGc.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-QPYKjI3m.js → wc-placeholder-DJSoiPYz.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-DYWBWDa9.js → wc-secret-request-CASq9SdH.js} +1 -1
- package/dist/ui/assets/{wc-settings-BYGHXGHu.js → wc-settings-DzZ3vKZK.js} +3 -3
- package/dist/ui/assets/{wc-shell-CHKiGJ-8.js → wc-shell-BW5oZjMk.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-CzEcbhZJ.js → wc-shortcut-config-CxjODcHO.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-CP5YwHx0.js → wc-sprinkles-BGacrZ0g.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-vCxTrrQa.js → wc-transcript-export-D6yGycOu.js} +2 -2
- package/dist/ui/assets/{wc-tray-BYX4KK6K.js → wc-tray-CE-PDIL5.js} +4 -4
- package/dist/ui/assets/welcome-detection-BOdQEeMJ.js +1 -0
- package/dist/ui/assets/{whisper-session-Bl9hvJ5_.js → whisper-session-D9dh1Wpf.js} +2 -2
- package/dist/ui/assets/{xai-grok-DArMCgVP.js → xai-grok-DFPGp-w8.js} +1 -1
- package/dist/ui/assets/{xai-grok-D_nGI-2s.js → xai-grok-DZo25qHM.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +1 -1
- package/dist/ui/assets/SKILL-Dk6kide7.js +0 -1
- package/dist/ui/assets/jsh-runtime-extensions-vA6JAYXY.js +0 -1
- package/dist/ui/assets/provider-store-access-B-sq52Ov.js +0 -1
- package/dist/ui/assets/provider-store-access-gJH6TPH8.js +0 -1
- package/dist/ui/assets/slicc-version-VGI-VLHB.js +0 -1
- package/dist/ui/assets/welcome-detection-BDF7lypt.js +0 -1
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{C as l,d as u,f as d,i as f,u as p}from"./account-store-B89MQ7Me.js";import{c as m,d as h,n as g,r as _,s as v}from"./proxied-fetch-F-dCBEfh.js";import{t as ee}from"./runtime-env-DadgceZk.js";import{t as te}from"./slugify-BYJ6QVAt.js";import{i as ne,n as re,r as ie,t as ae}from"./host-command-CwRNpVLr.js";import{a as oe,i as se,n as ce,r as le,t as ue}from"./snapshot-D6YGbggk.js";import{n as de,t as y}from"./panel-rpc-accessor-B4BfPLSo.js";import{a as fe,c as pe,n as me,o as he,s as ge,t as _e}from"./feature-flags-QlgHaQc1.js";import{t as ve}from"./providers-BWWdnCv2.js";import{r as ye}from"./binary-cache-bSOhqXB1.js";import{i as be,n as xe,r as Se}from"./fetch-body-CuwTaJC_.js";import{s as Ce,t as we}from"./api-endpoint-D8lUKmPu.js";import{t as Te}from"./compat-nGhSz-U1.js";import"./core-C1m4D34S.js";import{n as Ee,t as De}from"./mime-types-D7IV6i7k.js";import{n as Oe,t as ke}from"./float-topology-COIC4j_U.js";import{t as Ae}from"./secrets-bridge-client-GOCzDscb.js";import{a as je,i as Me,n as Ne,r as Pe}from"./tool-ui-DRnUkp2g.js";import{a as Fe,i as Ie,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as Le,r as Re,t as ze}from"./merge-file-core-VJlzucJY.js";import{r as Be}from"./workspace-mode-D0kUKBVS.js";import{n as Ve,t as He}from"./thinking-level-5x0UAu9N.js";import{n as Ue,t as We}from"./types-D8gIX-W-.js";import{i as Ge}from"./mount-index-CQfmUPuZ.js";import{a as Ke,i as qe,n as Je,o as Ye,s as Xe,t as Ze}from"./signed-fetch-DeDG40wV.js";import{o as Qe}from"./mount-table-store-DrF_Ifaz.js";import{t as $e}from"./remote-cache-UwMD8EkX.js";import{n as et}from"./fs-CKSBDyCr.js";import{a as tt}from"./tray-leader-status-CpkFr6n7.js";import{n as nt,t as rt}from"./slicc-version-VGI-VLHB.js";import{a as it,i as at,o as ot,r as S,t as st}from"./browser-Jlk38XAj.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as ct,r as lt,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as ut}from"./cost-command-BUgEVZCe.js";import{d as dt,g as ft,i as pt,n as mt,o as ht}from"./sudoers-BdBYQPUn.js";import{t as gt}from"./sudo-refusal-DVwTXFRE.js";import{n as _t}from"./types-Dj5TU-Qg.js";import{a as vt,c as yt,i as bt,l as xt,n as St,o as Ct,r as wt,t as Tt}from"./types-JfhqX7lD.js";import{n as T,t as Et}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as Dt}from"./html-B_Hg2WOy.js";import{n as Ot}from"./llm-session-id-BZyXP_j2.js";import{t as kt}from"./src-CUSndb9K.js";import{i as At,o as jt}from"./browser-DuyhpHbR.js";import{a as Mt,c as Nt,n as Pt,o as Ft,r as It,s as Lt,t as Rt}from"./reason-l_1I9RdR.js";import{i as zt,r as Bt,t as Vt}from"./mount-picker-popup-BMils9JY.js";import{t as Ht}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Ut,B as E,C as Wt,D,E as Gt,F as Kt,G as qt,H as O,I as k,J as Jt,K as Yt,L as Xt,M as Zt,N as Qt,O as $t,P as en,R as tn,S as nn,T as rn,U as an,V as on,W as sn,Y as cn,_ as ln,a as un,b as dn,c as fn,d as pn,f as mn,g as hn,h as gn,i as _n,j as vn,k as yn,l as bn,m as xn,n as Sn,o as Cn,p as A,q as wn,r as Tn,s as En,t as Dn,u as On,v as kn,w as An,x as jn,y as Mn,z as Nn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as Pn,_ as Fn,a as In,b as Ln,c as Rn,d as zn,f as Bn,g as Vn,h as Hn,i as Un,l as Wn,n as Gn,o as Kn,p as qn,r as Jn,s as Yn,t as Xn,u as Zn,v as j,x as M,y as Qn}from"./state-Tykh4Vum.js";import{a as $n,i as er,r as tr,t as nr}from"./git-config-Bdgu8kD2.js";import{i as rr,m as ir,r as ar}from"./stdio-tty-CA5sZxWL.js";import{i as or,r as sr}from"./global-prefix-DqCuANmV.js";import{t as cr}from"./wasm-programs-Bd5YaoqY.js";import{a as lr,n as ur,o as dr,r as fr,s as pr}from"./jsh-discovery-CnvNKojr.js";import{C as mr,a as hr,b as gr,c as _r,d as vr,f as yr,h as br,i as xr,l as Sr,m as Cr,n as wr,o as Tr,p as Er,r as Dr,s as Or,t as N,u as kr,v as Ar,y as jr}from"./shared-D-ZRFYou.js";import{_ as Mr,a as Nr,b as Pr,d as Fr,f as Ir,g as Lr,h as Rr,i as zr,l as Br,m as Vr,p as Hr,r as Ur,s as Wr,u as Gr,v as Kr,x as qr,y as Jr}from"./require-guards-DnafTLJr.js";import{_ as Yr,a as Xr,b as Zr,c as Qr,d as $r,f as ei,g as ti,h as ni,l as ri,m as ii,n as ai,p as oi,s as si,t as ci,u as li,v as ui,x as di,y as fi}from"./jsh-executor-P6raP_yT.js";import{n as pi,t as mi}from"./esbuild-wasm-DeTghvWH.js";import{n as hi}from"./wasm-compiler-Ct7QZURL.js";import{a as gi,o as _i,s as vi,t as yi}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as bi,r as xi,t as Si}from"./just-bash-compat-B-SPHuh_.js";import{i as Ci,r as wi,t as Ti}from"./script-catalog-WaCMvXY3.js";import{a as Ei,c as Di,o as Oi,s as ki,t as Ai}from"./types-Dzr0qYl3.js";import{a as ji,c as Mi,d as Ni,f as Pi,n as Fi,r as Ii,u as Li}from"./github-zip-CUIsX5nN.js";import{i as Ri,t as zi}from"./github-auth-CSG4xZUZ.js";import{a as Bi,i as Vi,o as Hi,r as Ui,t as Wi}from"./provenance-DdmsQ3Nr.js";import{a as Gi,c as Ki,i as qi,n as Ji,o as Yi,r as Xi,s as Zi}from"./github-install-HX3c8n0G.js";import{n as Qi,t as $i}from"./magick-wasm-BbnwhVj1.js";import{i as ea,n as ta,r as na,t as ra}from"./pdf-raster-BWk6ezTX.js";import{n as ia}from"./lick-target-env-8JxfVcIV.js";import{t as aa}from"./tmpdir-env-ate4iNcK.js";import{n as oa,t as sa}from"./hf-defaults-BwJdGLgk.js";import{t as ca}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as la}from"./local-llm-C8XsApDI.js";import{i as ua,n as da,r as fa,t as pa}from"./tar-BWIPCxI2.js";import{a as ma,c as ha,i as ga,o as _a,r as va,s as ya}from"./v86-vm-DCm7zA2r.js";import{n as ba,r as xa}from"./lick-urls-CgPiVwD-.js";let Sa=null;function Ca(e){Sa=e!==null&&Number.isFinite(e)&&e>0?e:null}function wa(){if(Sa!==null)return Sa;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const Ta=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function Ea(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=Ta.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 Da(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 Oa(e,t){return e.some(e=>Da(e,t))}const ka=`slicc-transcript`,Aa=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],ja=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 Ma(e){return ja.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Na=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Pa=new Set(Aa),Fa=/^[0-9a-fA-F]{64}$/,Ia=/^\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 La(e){return typeof e==`string`&&Fa.test(e)}function Ra(e){return Ia.test(e)&&Number.isFinite(Date.parse(e))}function za(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 Ba(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:za(n,t)}:{ok:!0}}function Va(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 Ha(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 Ua(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ba(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?Ha(e,t):n}function Wa(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 Ga(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 Ka(e,t){let n=Wa(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Ga(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function qa(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Ra(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 Ja(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 Ya(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Ka(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function Xa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ba(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Ja(e,t);if(!n.ok)return n}let r=qa(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Va(i,Ua,`${t}.content`);return a.ok?Ya(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=Ba(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Va(r,Xa,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Qa(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 $a(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`}:La(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 eo=[`attachment-file-missing`,`attachment-association-unavailable`];function to(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Ba(e.missingReason,eo,`${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 no(e,t){return e.present?$a(e,t):to(e,t)}function ro(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Qa(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=Ba(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?no(e,t):r}function io(e,t){let n=Ba(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 ao(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=Ba(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?io(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function oo(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 so(e,t){return typeof e!=`string`||!Pa.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function co(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 lo(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Ba(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Va(e.missing,so,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function uo(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=Ba(e.state,[`active`,`frozen`],`session.state`);return t.ok?lo(e.completeness):t}function fo(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)?Va(n,ao,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function po(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Va(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=Va(r,oo,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Va(a,ro,`attachments`):{ok:!1,error:`attachments must be an array`}}function mo(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 ho(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 go(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 _o(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 go(e))t.add(n)}return t}function vo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||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 yo(e){return vo(e,_o(e))}function bo(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 xo(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=bo(e,t);if(!r.ok)return r}}return{ok:!0}}function So(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return xo(e,n)}function Co(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 wo(e,t){let n=Co(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 To(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(go(e)))}return t}function Eo(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 Do(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return Eo(e,n,To(t))}function Oo(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 ko(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=Oo(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function Ao(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=mo(t);if(!o.ok)return o;let s=ho(t);if(!s.ok)return s;let c=yo(t);if(!c.ok)return c;let l=So(t,n);if(!l.ok)return l;let u=wo(n,t);if(!u.ok)return u;let d=Do(r,t);return d.ok?ko(a,n):d}function jo(e){let t=po(e);return t.ok?Ao(e):t}function Mo(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=co(e.export);if(!t.ok)return t;let n=uo(e.session);if(!n.ok)return n;let r=fo(e.privacy);return r.ok?jo(e):r}async function No(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:Ye});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:Po(a),sourceUrl:a}}function Po(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Fo=`slicc-sprinkle-routes`;function Io(){try{let e=localStorage.getItem(Fo);return e?JSON.parse(e):{}}catch{return{}}}function Lo(e){try{localStorage.setItem(Fo,JSON.stringify(e))}catch{}}function Ro(e){return Io()[e]}function zo(e,t){let n=Io();n[e]=t,Lo(n)}function Bo(e){let t=Io();delete t[e],Lo(t)}function Vo(){return Io()}function Ho(e,t,n){return yt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Uo(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(Ho(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Wo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Uo(t,`browser`,St,e.browser),network:Uo(t,`network`,vt,e.network),secrets:Uo(t,`secrets`,Ct,e.secrets),devices:Uo(t,`devices`,wt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Uo(t,`mounts`,bt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Uo(t,`approvals`,Tt,e.approvals)}}function Go(e={}){return Wo({adapter:`connect`,pageGestures:e.pageGestures})}function Ko(e){let t=Et(()=>import(`./extension-ops-OtrqWANJ.js`).then(t=>t.createExtensionOps(e)));return Wo({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 qo(e={}){let t=Et(()=>import(`./rest-ops-j0P6ql7f.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Wo({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 Jo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return qo({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Ko({adapter:e,pageGestures:n});case`connect`:return Go({pageGestures:n})}}const Yo=e(`quick-llm`);async function Xo(e){let t=f();if(!t)return Yo.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?es(n,e.modelId)??es(n,r):Zo(n,r),!i)return Yo.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`]=ts());try{let n=(await Te(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Yo.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Zo(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=$o(r.id),a=n.filter(e=>Qo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Qo(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 $o(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 es(e,t){return p(e).find(e=>e.id===t)}function ts(){return Ot(`ui-quick-llm`)}const ns=e(`sudo-suggest`),rs=[`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 ss=e(`sudo:capability-gesture`);function cs(e,t={}){let n=t.suggest??as;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 ss.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),_t();if(!e)return ss.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),_t();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?xt(o.value,a):(ss.warn(`capability broker approvals.request failed — denying`,{message:o.message}),_t())}}}const ls=e(`sudo:tray-first`);function us(e,t={}){let n=t.suggest??as,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-CR9k3qWE.js`).then(e=>e.r);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return _t();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){ls.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 fs(e?.decision,o)}catch(e){ls.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}const ds=[`user-timeout`,`cone-timeout`,`unavailable`];function fs(e,t){if(!e||typeof e!=`object`)return _t();let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;if(n.decision===`allow`)return{decision:`allow`,...r?{attestation:r}:{}};if(n.decision===`always`)return{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}};if(n.decision!==`deny`)return _t();let i=ds.find(e=>e===n.reason);return i?{decision:`deny`,reason:i}:{decision:`deny`}}function ps(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ms(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var hs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ms,this.setTimer=e.setTimer??((e,t)=>setTimeout(e,t)),this.clearTimer=e.clearTimer??(e=>clearTimeout(e)),this.onAutoSettle=e.onAutoSettle??(()=>{})}notifyAutoSettle(e,t,n){try{this.onAutoSettle(e,t,n)}catch{}}register(e,t,n){let r=this.newId();return{id:r,pending:new Promise(i=>{let a=null;Number.isFinite(this.timeoutMs)&&this.timeoutMs>0&&(a=this.setTimer(()=>{let e=this.pending.get(r);e&&(this.pending.delete(r),e.resolve(ie(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function gs(e){return ne(_s(e))}function _s(e){let t=cs(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:us(t)}let vs=null;function ys(e){return vs=e,()=>{vs===e&&(vs=null)}}function bs(){if(!vs)throw new Na(`session-not-found`);return vs}const xs=`focus`,Ss={type:`leaf`,surfaceId:`chat`};function Cs(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 ws={focus:{name:`focus`,tree:Cs({left:Ss},{left:3,middle:1})}};function Ts(e){return ws[e]??null}const Es=`progress`;async function Ds(){try{let e=await Bt();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 Vt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await zt(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Os(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function ks(e,t){let n;try{({grants:n}=await e.call(`permission-request`,{kinds:[`filesystem`],description:`A command in the terminal asks to mount a local directory at ${t}.`},{timeoutMs:3e5}))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(t.replace(/^permission-request: /,``))}let r=n.find(e=>e.kind===`filesystem`);if(!r||!(`idbKey`in r))throw Error(`no directory selected`);let i=await Vt(r.idbKey);if(!i)throw Error(`no directory handle found in storage`);return await zt(i),i}function As(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 js(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 Ms=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function Ns(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;Ms.has(n)&&t++}return!1}function Ps(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Fs=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=As(e);if(i.positional.length===0)return this.usageError(`mount: mount point required`);let a=this.resolvePath(i.positional[0],t);return i.backendError===void 0?i.source?i.source.startsWith(`s3://`)?this.mountS3(a,i):i.source.startsWith(`da://`)||i.source.startsWith(`aem://`)?this.mountAdobe(a,i):this.usageError(`mount: invalid source '${i.source}' — expected s3://..., da://... or aem://...`):this.mountLocal(a,n):this.usageError(`mount: invalid --backend '${i.backendError}' — expected 'da' or 'aem'`)}async executeUmount(e,t){return this.handleUnmount(e,t,`umount`)}async mountLocal(e,t){try{if((this.options.isScoop??(()=>!1))())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n=je();if(!n){let n=await Is(e);if(n)return await this.options.fs.mount(e,n,{env:t}),{stdout:`Mounted '${n.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}let r=de()?null:y(),i;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);i=await t(n,e)}else i=ee()?await Ds():r?await ks(r,e):await Os();let a=Ge.fromHandle(i,{mountId:Qe()});return await this.options.fs.mount(e,a,{env:t}),{stdout:`Mounted '${a.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async mountS3(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=Qe(),i=new $e({mountId:r,ttlMs:3e4}),a=new qe({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Je(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??Ze(),i=js(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 No(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=Qe(),c=new $e({mountId:s,ttlMs:3e4}),l={source:a===`aem`?Ps(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 Xe(l):new Ke(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(Ns(e))return n===`umount`?this.umountHelp():this.help();let r=As(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-UwMD8EkX.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
|
|
1
|
+
import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{C as l,d as u,f as d,i as f,u as p}from"./account-store-BGMKtG5Y.js";import{c as m,d as h,n as g,r as _,s as v}from"./proxied-fetch-F-dCBEfh.js";import{t as ee}from"./runtime-env-DadgceZk.js";import{t as te}from"./slugify-BYJ6QVAt.js";import{i as ne,n as re,r as ie,t as ae}from"./host-command-CwRNpVLr.js";import{a as oe,i as se,n as ce,r as le,t as ue}from"./snapshot-D6YGbggk.js";import{n as de,t as y}from"./panel-rpc-accessor-B4BfPLSo.js";import{a as fe,c as pe,n as me,o as he,s as ge,t as _e}from"./feature-flags-QlgHaQc1.js";import{t as ve}from"./providers-Cu-JTUhF.js";import{r as ye}from"./binary-cache-bSOhqXB1.js";import{i as be,n as xe,r as Se}from"./fetch-body-CuwTaJC_.js";import{s as Ce,t as we}from"./api-endpoint-D8lUKmPu.js";import{t as Te}from"./compat-nGhSz-U1.js";import"./core-C1m4D34S.js";import{n as Ee,t as De}from"./mime-types-D7IV6i7k.js";import{n as Oe,t as ke}from"./float-topology-COIC4j_U.js";import{t as Ae}from"./secrets-bridge-client-GOCzDscb.js";import{a as je,i as Me,n as Ne,r as Pe}from"./tool-ui-DRnUkp2g.js";import{a as Fe,i as Ie,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as Le,r as Re,t as ze}from"./merge-file-core-VJlzucJY.js";import{n as Be,t as Ve}from"./types-D8gIX-W-.js";import{i as He}from"./mount-index-CQfmUPuZ.js";import{a as Ue,i as We,n as Ge,o as Ke,s as qe,t as Je}from"./signed-fetch-DeDG40wV.js";import{o as Ye}from"./mount-table-store-DrF_Ifaz.js";import{t as Xe}from"./remote-cache-UwMD8EkX.js";import{n as Ze}from"./fs-CKSBDyCr.js";import{a as Qe}from"./tray-leader-status-CpkFr6n7.js";import{n as $e,t as et}from"./slicc-version-65AwHbmH.js";import{a as tt,i as nt,o as rt,r as S,t as it}from"./browser-Jlk38XAj.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as at,r as ot,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as st}from"./cost-command-05RLVzlt.js";import{d as ct,g as lt,i as ut,n as dt,o as ft}from"./sudoers-BdBYQPUn.js";import{t as pt}from"./sudo-refusal-DVwTXFRE.js";import{n as mt}from"./types-Dj5TU-Qg.js";import{a as ht,c as gt,i as _t,l as vt,n as yt,o as bt,r as xt,t as St}from"./types-JfhqX7lD.js";import{n as T,t as Ct}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as wt}from"./html-B_Hg2WOy.js";import{n as Tt}from"./llm-session-id-BZyXP_j2.js";import{t as Et}from"./src-CUSndb9K.js";import{i as Dt,o as Ot}from"./browser-DuyhpHbR.js";import{a as kt,c as At,n as jt,o as Mt,r as Nt,s as Pt,t as Ft}from"./reason-l_1I9RdR.js";import{i as It,r as Lt,t as Rt}from"./mount-picker-popup-BMils9JY.js";import{t as zt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Bt,B as E,C as Vt,D,E as Ht,F as Ut,G as Wt,H as O,I as k,J as Gt,K as Kt,L as qt,M as Jt,N as Yt,O as Xt,P as Zt,R as Qt,S as $t,T as en,U as tn,V as nn,W as rn,Y as an,_ as on,a as sn,b as cn,c as ln,d as un,f as dn,g as fn,h as pn,i as mn,j as hn,k as gn,l as _n,m as vn,n as yn,o as bn,p as A,q as xn,r as Sn,s as Cn,t as wn,u as Tn,v as En,w as Dn,x as On,y as kn,z as An}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as jn,_ as Mn,a as Nn,b as Pn,c as Fn,d as In,f as Ln,g as Rn,h as zn,i as Bn,l as Vn,n as Hn,o as Un,p as Wn,r as Gn,s as Kn,t as qn,u as Jn,v as j,x as M,y as Yn}from"./state-Tykh4Vum.js";import{a as Xn,i as Zn,r as Qn,t as $n}from"./git-config-Bdgu8kD2.js";import{i as er,m as tr,r as nr}from"./stdio-tty-CA5sZxWL.js";import{i as rr,r as ir}from"./global-prefix-DqCuANmV.js";import{t as ar}from"./wasm-programs-Bd5YaoqY.js";import{a as or,n as sr,o as cr,r as lr,s as ur}from"./jsh-discovery-CnvNKojr.js";import{C as dr,a as fr,b as pr,c as mr,d as hr,f as gr,h as _r,i as vr,l as yr,m as br,n as xr,o as Sr,p as Cr,r as wr,s as Tr,t as N,u as Er,v as Dr,y as Or}from"./shared-D-ZRFYou.js";import{_ as kr,a as Ar,b as jr,d as Mr,f as Nr,g as Pr,h as Fr,i as Ir,l as Lr,m as Rr,p as zr,r as Br,s as Vr,u as Hr,v as Ur,x as Wr,y as Gr}from"./require-guards-DnafTLJr.js";import{_ as Kr,a as qr,b as Jr,c as Yr,d as Xr,f as Zr,g as Qr,h as $r,l as ei,m as ti,n as ni,p as ri,s as ii,t as ai,u as oi,v as si,x as ci,y as li}from"./jsh-executor-D8okn0pR.js";import{n as ui,t as di}from"./esbuild-wasm-DeTghvWH.js";import{n as fi}from"./wasm-compiler-Ct7QZURL.js";import{a as pi,o as mi,s as hi,t as gi}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as _i,r as vi,t as yi}from"./just-bash-compat-B-SPHuh_.js";import{i as bi,r as xi,t as Si}from"./script-catalog-WaCMvXY3.js";import{a as Ci,c as wi,o as Ti,s as Ei,t as Di}from"./types-Dzr0qYl3.js";import{a as Oi,c as ki,d as Ai,f as ji,n as Mi,r as Ni,u as Pi}from"./github-zip-CUIsX5nN.js";import{i as Fi,t as Ii}from"./github-auth-CSG4xZUZ.js";import{a as Li,i as Ri,o as zi,r as Bi,t as Vi}from"./provenance-DdmsQ3Nr.js";import{a as Hi,c as Ui,i as Wi,n as Gi,o as Ki,r as qi,s as Ji}from"./github-install-HX3c8n0G.js";import{n as Yi,t as Xi}from"./magick-wasm-BbnwhVj1.js";import{i as Zi,n as Qi,r as $i,t as ea}from"./pdf-raster-BWk6ezTX.js";import{n as ta}from"./lick-target-env-8JxfVcIV.js";import{t as na}from"./tmpdir-env-ate4iNcK.js";import{n as ra,t as ia}from"./hf-defaults-BwJdGLgk.js";import{t as aa}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as oa}from"./local-llm-B4YA09uv.js";import{i as sa,n as ca,r as la,t as ua}from"./tar-BWIPCxI2.js";import{a as da,c as fa,i as pa,o as ma,r as ha,s as ga}from"./v86-vm-DCm7zA2r.js";import{n as _a,r as va}from"./lick-urls-CgPiVwD-.js";let ya=null;function ba(e){ya=e!==null&&Number.isFinite(e)&&e>0?e:null}function xa(){if(ya!==null)return ya;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const Sa=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function Ca(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=Sa.exec(t.split(`.`)[0]??``);if(!n||!t.includes(`.`))return null;let r=n[1].toLowerCase();return`${[r.slice(0,8),r.slice(8,12),r.slice(12,16),r.slice(16,20),r.slice(20)].join(`-`)}.${n[2].toLowerCase()}`}[`ghp_`,`gho_`,`ghu_`,`ghs_`,`ghr_`,`github_pat_`,`sk-`,`pk-`,`xoxb-`,`xoxp-`,`xoxa-`,`xoxs-`,`AKIA`,`ABIA`,`ACCA`,`ASIA`,`sk-ant-`,`Bearer `].sort((e,t)=>t.length-e.length);function wa(e,t){let n=e.toLowerCase(),r=t.toLowerCase();if(n===`*`)return!0;if(!n.startsWith(`*.`))return n===r;let i=n.slice(1);return r.length>i.length&&r.endsWith(i)}function Ta(e,t){return e.some(e=>wa(e,t))}const Ea=`slicc-transcript`,Da=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],Oa=new Set(`/export/format./export/producer/application./session/id./session/state./session/completeness/status./session/completeness/missing/*./conversations/*/id./conversations/*/kind./conversations/*/parentConversationId./conversations/*/messages/*/id./conversations/*/messages/*/role./conversations/*/messages/*/timestamp./conversations/*/messages/*/toolCallId./conversations/*/messages/*/content/*/type./conversations/*/messages/*/content/*/id./conversations/*/messages/*/content/*/name./conversations/*/messages/*/content/*/attachmentId./delegations/*/sourceConversationId./delegations/*/targetConversationId./delegations/*/toolCallId./attachments/*/id./attachments/*/path./attachments/*/sha256./attachments/*/sourceConversationId./attachments/*/sourceMessageId./attachments/*/handling./attachments/*/missingReason`.split(`.`));function ka(e){return Oa.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Aa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const ja=new Set(Da),Ma=/^[0-9a-fA-F]{64}$/,Na=/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/;function F(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Pa(e){return typeof e==`string`&&Ma.test(e)}function Fa(e){return Na.test(e)&&Number.isFinite(Date.parse(e))}function Ia(e,t){let n=t.map(e=>`"${e}"`),r=n[n.length-1];return n.length===2?`${e} must be ${n[0]} or ${r}`:`${e} must be ${n.slice(0,-1).join(`, `)}, or ${r}`}function La(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ia(n,t)}:{ok:!0}}function Ra(e,t,n){for(let r=0;r<e.length;r++){let i=t(e[r],`${n}[${r}]`);if(!i.ok)return i}return{ok:!0}}function za(e,t){let n=e.type;if(n===`text`){if(typeof e.text!=`string`)return{ok:!1,error:`${t}.text must be a string`}}else if(n===`tool-call`){if(typeof e.id!=`string`||e.id===``)return{ok:!1,error:`${t}.id must be a non-empty string`};if(typeof e.name!=`string`||e.name===``)return{ok:!1,error:`${t}.name must be a non-empty string`};if(!(`input`in e))return{ok:!1,error:`${t}.input must be present`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Ba(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=La(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?za(e,t):n}function Va(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`totalTokens`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isInteger(r)||r<0)return{ok:!1,error:`${t}.${n} must be a non-negative integer`}}return{ok:!0}}function Ha(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function Ua(e,t){let n=Va(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Ha(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Wa(e,t){if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.sequence!=`number`)return{ok:!1,error:`${t}.sequence must be a number`};let n=e.sequence;return!Number.isInteger(n)||n<1?{ok:!1,error:`${t}.sequence must be a positive integer`}:typeof e.timestamp==`string`?Fa(e.timestamp)?{ok:!0}:{ok:!1,error:`${t}.timestamp must be a valid ISO 8601 date-time string`}:{ok:!1,error:`${t}.timestamp must be a string`}}function Ga(e,t){let n=e.toolCallId;return typeof n!=`string`||n===``?{ok:!1,error:`${t}.toolCallId must be a non-empty string for tool-result messages`}:{ok:!0}}function Ka(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Ua(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=La(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Ga(e,t);if(!n.ok)return n}let r=Wa(e,t);if(!r.ok)return r;let i=e.content;if(!Array.isArray(i))return{ok:!1,error:`${t}.content must be an array`};let a=Ra(i,Ba,`${t}.content`);return a.ok?Ka(e,t):a}function Ja(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.name!=`string`)return{ok:!1,error:`${t}.name must be a string`};let n=La(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Ra(r,qa,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Ya(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Xa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?{ok:!1,error:`${t}.path must be non-empty when present`}:Pa(r)?!Number.isInteger(i)||i<0?{ok:!1,error:`${t}.byteLength must be a non-negative integer when present`}:e.missingReason===void 0?{ok:!0}:{ok:!1,error:`${t}.missingReason must be absent when present is true`}:{ok:!1,error:`${t}.sha256 must be a 64-char hex string when present`}}const Za=[`attachment-file-missing`,`attachment-association-unavailable`];function Qa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?La(e.missingReason,Za,`${t}.missingReason`):{ok:!1,error:`${t}.byteLength must be zero when not present`}:{ok:!1,error:`${t}.sha256 must be empty when not present`}:{ok:!1,error:`${t}.path must be empty when not present`}}function $a(e,t){return e.present?Xa(e,t):Qa(e,t)}function eo(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ya(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=La(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?$a(e,t):r}function to(e,t){let n=La(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function no(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=La(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?to(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function ro(e,t){return F(e)?typeof e.sourceConversationId==`string`?typeof e.targetConversationId==`string`?{ok:!0}:{ok:!1,error:`${t}.targetConversationId must be a string`}:{ok:!1,error:`${t}.sourceConversationId must be a string`}:{ok:!1,error:`${t} must be a non-null object`}}function io(e,t){return typeof e!=`string`||!ja.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function ao(e){if(!F(e))return{ok:!1,error:`export must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`export.id must be a string`};if(typeof e.generatedAt!=`string`)return{ok:!1,error:`export.generatedAt must be a string`};if(e.format!==`slicc-transcript`)return{ok:!1,error:`export.format must equal "slicc-transcript"`};let t=e.producer;return F(t)?t.application===`slicc`?typeof t.version==`string`?{ok:!0}:{ok:!1,error:`export.producer.version must be a string`}:{ok:!1,error:`export.producer.application must equal "slicc"`}:{ok:!1,error:`export.producer must be a non-null object`}}function oo(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=La(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Ra(e.missing,io,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function so(e){if(!F(e))return{ok:!1,error:`session must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`session.id must be a string`};if(typeof e.title!=`string`)return{ok:!1,error:`session.title must be a string`};let t=La(e.state,[`active`,`frozen`],`session.state`);return t.ok?oo(e.completeness):t}function co(e){if(!F(e))return{ok:!1,error:`privacy must be a non-null object`};if(e.reasoningExcluded!==!0)return{ok:!1,error:`privacy.reasoningExcluded must be true`};let t=e.excludedReasoningBlocks;if(typeof t!=`number`)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a number`};if(!Number.isInteger(t)||t<0)return{ok:!1,error:`privacy.excludedReasoningBlocks must be a non-negative integer`};if(e.binaryAttachments!==`included-unchanged`)return{ok:!1,error:`privacy.binaryAttachments must equal "included-unchanged"`};if(!F(e.redactionCounts))return{ok:!1,error:`privacy.redactionCounts must be a non-null object`};let n=e.redactions;return Array.isArray(n)?Ra(n,no,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function lo(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Ra(t,Ja,`conversations`);if(!n.ok)return n;let r=e.delegations;if(!Array.isArray(r))return{ok:!1,error:`delegations must be an array`};let i=Ra(r,ro,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Ra(a,eo,`attachments`):{ok:!1,error:`attachments must be an array`}}function uo(e){let t=new Set,n=new Set;for(let r of e){if(!F(r)||typeof r.id!=`string`)continue;if(t.has(r.id))return{ok:!1,error:`duplicate conversation id "${r.id}"`};t.add(r.id);let e=r.messages;if(Array.isArray(e)){for(let t of e)if(!(!F(t)||typeof t.id!=`string`)){if(n.has(t.id))return{ok:!1,error:`duplicate message id "${t.id}"`};n.add(t.id)}}}return{ok:!0}}function fo(e){for(let t of e){if(!F(t))continue;let e=t.messages;if(!Array.isArray(e))continue;let n=typeof t.id==`string`?t.id:`?`,r=0;for(let t of e){if(!F(t)||typeof t.sequence!=`number`)continue;let e=t.sequence;if(e<=r)return{ok:!1,error:`sequences in conversation "${n}" must be strictly increasing`};r=e}}return{ok:!0}}function po(e){let t=[];for(let n of e){if(!F(n))continue;let e=n.content;if(Array.isArray(e))for(let n of e)F(n)&&n.type===`tool-call`&&typeof n.id==`string`&&t.push(n.id)}return t}function mo(e){let t=new Set;for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of po(e))t.add(n)}return t}function ho(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n)||n.role!==`tool-result`)continue;let e=n.toolCallId;if(typeof e==`string`&&e!==``&&!t.has(e))return{ok:!1,error:`tool-result message references unknown toolCallId "${e}"`}}}return{ok:!0}}function go(e){return ho(e,mo(e))}function _o(e,t){for(let n of e){if(!F(n)||n.type!==`attachment-ref`)continue;let e=n.attachmentId;if(typeof e!=`string`||!t.has(e))return{ok:!1,error:`attachment-ref references unknown attachmentId "${e}"`}}return{ok:!0}}function vo(e,t){for(let n of e){if(!F(n))continue;let e=n.messages;if(Array.isArray(e))for(let n of e){if(!F(n))continue;let e=n.content;if(!Array.isArray(e))continue;let r=_o(e,t);if(!r.ok)return r}}return{ok:!0}}function yo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return vo(e,n)}function bo(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=new Set,r=n.messages;if(Array.isArray(r))for(let t of r)F(t)&&typeof t.id==`string`&&e.add(t.id);t.set(n.id,e)}return t}function xo(e,t){let n=bo(t);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.sourceConversationId,a=r.sourceMessageId;if(typeof i!=`string`||typeof a!=`string`)continue;let o=n.get(i);if(!o)return{ok:!1,error:`attachments[${t}].sourceConversationId "${i}" does not exist`};if(!o.has(a))return{ok:!1,error:`attachments[${t}].sourceMessageId "${a}" does not exist in conversation "${i}"`}}return{ok:!0}}function So(e){let t=new Map;for(let n of e){if(!F(n)||typeof n.id!=`string`)continue;let e=Array.isArray(n.messages)?n.messages:[];t.set(n.id,new Set(po(e)))}return t}function Co(e,t,n){for(let r=0;r<e.length;r++){let i=e[r];if(!F(i))continue;let a=i.sourceConversationId,o=i.targetConversationId;if(typeof a!=`string`||!t.has(a))return{ok:!1,error:`delegations[${r}].sourceConversationId "${a}" does not exist`};if(typeof o!=`string`||!t.has(o))return{ok:!1,error:`delegations[${r}].targetConversationId "${o}" does not exist`};let s=i.toolCallId;if(typeof s==`string`&&s!==``&&!n.get(a)?.has(s))return{ok:!1,error:`delegations[${r}].toolCallId "${s}" does not exist in source conversation "${a}"`}}return{ok:!0}}function wo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return Co(e,n,So(t))}function To(e,t,n){if(e.kind!==`attachment`)return{ok:!0};let r=e.attachmentId;return typeof r!=`string`||!t.has(r)?{ok:!1,error:`${n}.attachmentId "${r}" does not reference a known attachment`}:{ok:!0}}function Eo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);for(let t=0;t<e.length;t++){let r=e[t];if(!F(r))continue;let i=r.target;if(!F(i))continue;let a=To(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function Do(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=uo(t);if(!o.ok)return o;let s=fo(t);if(!s.ok)return s;let c=go(t);if(!c.ok)return c;let l=yo(t,n);if(!l.ok)return l;let u=xo(n,t);if(!u.ok)return u;let d=wo(r,t);return d.ok?Eo(a,n):d}function Oo(e){let t=lo(e);return t.ok?Do(e):t}function ko(e){if(!F(e))return{ok:!1,error:`document must be a non-null object`};if(e.schemaVersion!==1)return{ok:!1,error:`schemaVersion must equal 1`};let t=ao(e.export);if(!t.ok)return t;let n=so(e.session);if(!n.ok)return n;let r=co(e.privacy);return r.ok?Oo(e):r}async function Ao(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:Ke});if(r.status===401||r.status===403)throw Error(`not authorized to read the site config for ${e}/${t} — log in via Settings → Providers → Adobe, or pass --backend to skip the probe`);if(r.status===404)throw Error(`no site config for ${e}/${t} — check the org and site names`);if(r.status>=400)throw Error(`site config probe failed for ${e}/${t}: ${r.status}`);let i;try{i=await r.json()}catch(n){throw Error(`site config for ${e}/${t} is not JSON: ${n instanceof Error?n.message:String(n)}`)}let a=i.content?.source?.url;return{backend:jo(a),sourceUrl:a}}function jo(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Mo=`slicc-sprinkle-routes`;function No(){try{let e=localStorage.getItem(Mo);return e?JSON.parse(e):{}}catch{return{}}}function Po(e){try{localStorage.setItem(Mo,JSON.stringify(e))}catch{}}function Fo(e){return No()[e]}function Io(e,t){let n=No();n[e]=t,Po(n)}function Lo(e){let t=No();delete t[e],Po(t)}function Ro(){return No()}function zo(e,t,n){return gt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Bo(e,t,n,r){let i=n.filter(e=>typeof r?.[e]==`function`),a=n.map(n=>{let i=r?.[n];return[n,typeof i==`function`?i:()=>Promise.resolve(zo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Vo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Bo(t,`browser`,yt,e.browser),network:Bo(t,`network`,ht,e.network),secrets:Bo(t,`secrets`,bt,e.secrets),devices:Bo(t,`devices`,xt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Bo(t,`mounts`,_t,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Bo(t,`approvals`,St,e.approvals)}}function Ho(e={}){return Vo({adapter:`connect`,pageGestures:e.pageGestures})}function Uo(e){let t=Ct(()=>import(`./extension-ops-OtrqWANJ.js`).then(t=>t.createExtensionOps(e)));return Vo({adapter:e.adapter,pageGestures:e.pageGestures,network:{crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Wo(e={}){let t=Ct(()=>import(`./rest-ops-j0P6ql7f.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Vo({adapter:`node-rest`,pageGestures:e.pageGestures,network:{localNodeServer:()=>Promise.resolve({ok:!0,value:{available:!0}}),crossOriginFetch:e=>T(`network`,`crossOriginFetch`,async()=>(await t()).crossOriginFetch(e))},secrets:{listMaskedEnv:()=>T(`secrets`,`listMaskedEnv`,async()=>(await t()).secrets.listMaskedEnv()),getMasked:e=>T(`secrets`,`getMasked`,async()=>(await t()).secrets.getMasked(e)),set:e=>T(`secrets`,`set`,async()=>(await t()).secrets.set(e)),delete:e=>T(`secrets`,`delete`,async()=>(await t()).secrets.delete(e))},mounts:{signRequest:e=>T(`mounts`,`signRequest`,async()=>(await t()).signRequest(e))},approvals:{request:e=>T(`approvals`,`request`,async()=>(await t()).requestApproval(e))}})}function Go(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Wo({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Uo({adapter:e,pageGestures:n});case`connect`:return Ho({pageGestures:n})}}const Ko=e(`quick-llm`);async function qo(e){let t=f();if(!t)return Ko.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?Zo(n,e.modelId)??Zo(n,r):Jo(n,r),!i)return Ko.debug(`No model available for provider`,{providerId:n}),null;let a={role:`user`,content:e.prompt,timestamp:Date.now()},o={};i.provider===`adobe`&&(o[`X-Session-Id`]=Qo());try{let n=(await Te(i,{systemPrompt:e.system,messages:[a]},{apiKey:t,maxTokens:e.maxTokens??60,temperature:e.temperature??.3,signal:e.signal,headers:Object.keys(o).length>0?o:void 0})).content.filter(e=>e.type===`text`).map(e=>e.text).join(``).trim();return n.length>0?n:null}catch(e){return Ko.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Jo(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Xo(r.id),a=n.filter(e=>Yo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Yo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Xo(e){let t=e.toLowerCase();return t.includes(`claude`)?`claude`:t.includes(`gemini`)?`gemini`:t.includes(`grok`)?`grok`:/^(gpt|o\d)/.test(t)?`gpt`:`unknown`}function Zo(e,t){return p(e).find(e=>e.id===t)}function Qo(){return Tt(`ui-quick-llm`)}const $o=e(`sudo-suggest`),es=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
|
|
2
|
+
`),ts=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
|
|
3
|
+
`);async function ns(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim();if(e.kind===`guest-message`||e.kind===`guest-tool`)return n;let r=e.kind===`command`?es:ts,i=null;try{i=await qo({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){$o.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return rs(i)||n}function rs(e){if(!e)return null;let t=(e.split(`
|
|
4
|
+
`,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}const is=e(`sudo:capability-gesture`);function as(e,t={}){let n=t.suggest??ns;return{async requestApproval(t,r){let i=r?.signal,a;if(t.suggestedPattern)a=t.suggestedPattern;else try{a=await n(t,i)}catch{a=t.detail}if(i?.aborted)return is.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),mt();if(!e)return is.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),mt();let o=await e.approvals.request({kind:t.kind,detail:t.detail,suggestedPattern:a,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{},...i?{signal:i}:{}});return o.ok?vt(o.value,a):(is.warn(`capability broker approvals.request failed — denying`,{message:o.message}),mt())}}}const os=e(`sudo:tray-first`);function ss(e,t={}){let n=t.suggest??ns,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-CR9k3qWE.js`).then(e=>e.r);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return mt();let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){os.debug?.(`panel-RPC client lookup threw — using native broker`,{error:e instanceof Error?e.message:String(e)})}if(c)try{let e=await c.call(`sudo-request`,{request:s,mode:`tray-first`},{timeoutMs:r});if(e?.handled!==!1)return ls(e?.decision,o)}catch(e){os.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}const cs=[`user-timeout`,`cone-timeout`,`unavailable`];function ls(e,t){if(!e||typeof e!=`object`)return mt();let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;if(n.decision===`allow`)return{decision:`allow`,...r?{attestation:r}:{}};if(n.decision===`always`)return{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}};if(n.decision!==`deny`)return mt();let i=cs.find(e=>e===n.reason);return i?{decision:`deny`,reason:i}:{decision:`deny`}}function us(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ds(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var fs=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ds,this.setTimer=e.setTimer??((e,t)=>setTimeout(e,t)),this.clearTimer=e.clearTimer??(e=>clearTimeout(e)),this.onAutoSettle=e.onAutoSettle??(()=>{})}notifyAutoSettle(e,t,n){try{this.onAutoSettle(e,t,n)}catch{}}register(e,t,n){let r=this.newId();return{id:r,pending:new Promise(i=>{let a=null;Number.isFinite(this.timeoutMs)&&this.timeoutMs>0&&(a=this.setTimer(()=>{let e=this.pending.get(r);e&&(this.pending.delete(r),e.resolve(ie(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function ps(e){return ne(ms(e))}function ms(e){let t=as(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:ss(t)}let hs=null;function gs(e){return hs=e,()=>{hs===e&&(hs=null)}}function _s(){if(!hs)throw new Aa(`session-not-found`);return hs}const vs=`focus`,ys={type:`leaf`,surfaceId:`chat`};function bs(e,t={},n={}){return{zones:{top:null,left:null,middle:null,right:null,bottom:null,...e},rowFr:{top:1,center:1,bottom:1,...n},colFr:{left:1,middle:1,right:1,...t}}}const xs={focus:{name:`focus`,tree:bs({left:ys},{left:3,middle:1})}};function Ss(e){return xs[e]??null}const Cs=`progress`;async function ws(){try{let e=await Lt();if(e.cancelled)throw Error(`mount: cancelled`);if(e.error)throw Error(`mount: ${e.error}`);if(e.handleInIdb&&typeof e.idbKey==`string`){let t=await Rt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await It(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Ts(){if(typeof window>`u`||!(`showDirectoryPicker`in window))throw Error(`mount: local picker requires a user gesture in the panel (unavailable in this runtime). Ask the agent to mount it instead.`);try{return await window.showDirectoryPicker({mode:`readwrite`})}catch(e){throw e instanceof Error&&e.name===`AbortError`?Error(`mount: cancelled`):Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function Es(e,t){let n;try{({grants:n}=await e.call(`permission-request`,{kinds:[`filesystem`],description:`A command in the terminal asks to mount a local directory at ${t}.`},{timeoutMs:3e5}))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(t.replace(/^permission-request: /,``))}let r=n.find(e=>e.kind===`filesystem`);if(!r||!(`idbKey`in r))throw Error(`no directory selected`);let i=await Rt(r.idbKey);if(!i)throw Error(`no directory handle found in storage`);return await It(i),i}function Ds(e){let t={positional:[],noProbe:!1,clearCache:!1,bodies:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n];if(r===`--source`)t.source=e[++n];else if(r===`--profile`)t.profile=e[++n];else if(r===`--backend`){let r=e[++n];r===`da`||r===`aem`?t.backend=r:t.backendError=r}else r===`--no-probe`?t.noProbe=!0:r===`--max-body-mb`?t.maxBodyMb=Number(e[++n]):r===`--clear-cache`?t.clearCache=!0:r===`--bodies`?t.bodies=!0:r===`--json`?t.json=!0:t.positional.push(r)}return t}function Os(e){let t=e.match(/^(da|aem):\/\/([^/]+)\/([^/]+)(?:\/(.*))?$/);return t?{scheme:t[1],org:t[2],name:t[3],path:(t[4]??``).replace(/^\/+/,``).replace(/\/+$/,``)}:null}const ks=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function As(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;ks.has(n)&&t++}return!1}function js(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Ms=class{options;signedFetchS3;signedFetchDa;constructor(e){this.options=e,this.signedFetchS3=e.signedFetchS3,this.signedFetchDa=e.signedFetchDa}async execute(e,t,n){let r=e[0];if(r===`--help`||r===`-h`)return this.help();if(r===`unmount`||r===`-u`)return this.handleUnmount(e.slice(1),t,`mount unmount`);if(r===`list`||r===`-l`||r===`--list`)return this.handleList();if(r===`refresh`)return this.handleRefresh(e.slice(1),t,n);if(r===`info`)return this.handleInfo(e.slice(1),t);let i=Ds(e);if(i.positional.length===0)return this.usageError(`mount: mount point required`);let a=this.resolvePath(i.positional[0],t);return i.backendError===void 0?i.source?i.source.startsWith(`s3://`)?this.mountS3(a,i):i.source.startsWith(`da://`)||i.source.startsWith(`aem://`)?this.mountAdobe(a,i):this.usageError(`mount: invalid source '${i.source}' — expected s3://..., da://... or aem://...`):this.mountLocal(a,n):this.usageError(`mount: invalid --backend '${i.backendError}' — expected 'da' or 'aem'`)}async executeUmount(e,t){return this.handleUnmount(e,t,`umount`)}async mountLocal(e,t){try{if((this.options.isScoop??(()=>!1))())throw Error(`mount: cannot mount local directories from a scoop (no UI). Ask the cone.`);let n=je();if(!n){let n=await Ns(e);if(n)return await this.options.fs.mount(e,n,{env:t}),{stdout:`Mounted '${n.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}let r=de()?null:y(),i;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);i=await t(n,e)}else i=ee()?await ws():r?await Es(r,e):await Ts();let a=He.fromHandle(i,{mountId:Ye()});return await this.options.fs.mount(e,a,{env:t}),{stdout:`Mounted '${a.describe().displayName}' → ${e}\nIndexing in background for fast file discovery.\nNote: External changes are not auto-detected — use 'mount refresh ${e}' after modifying files outside the browser.\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`mount: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async mountS3(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=Ye(),i=new Xe({mountId:r,ttlMs:3e4}),a=new We({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Ge(n)});if(!t.noProbe)try{await a.readDir(`/`)}catch(e){return await a.close(),{stdout:``,stderr:`mount: probe failed for ${t.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,a),{stdout:`Mounted '${a.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:``,exitCode:0}}async mountAdobe(e,t){if(!t.source)return this.usageError(`mount: --source required`);let n=t.profile??`default`,r=this.signedFetchDa??Je(),i=Os(t.source);if(!i)return this.usageError(`mount: invalid source '${t.source}' — expected da://org/repo or aem://org/site`);let a=i.scheme===`aem`?`aem`:`da`,o=``;if(t.backend)a=t.backend;else if(i.scheme===`da`)try{a=(await Ao(i.org,i.name,r)).backend,a===`aem`&&(o=`mount: ${i.org}/${i.name} is on Helix 6 — its content lives in the Source Bus at https://api.aem.live/${i.org}/sites/${i.name}/source, not admin.da.live. Mounting through aem://${i.org}/${i.name}. Pass --backend da to force the old endpoint.\n`)}catch(e){return{stdout:``,stderr:`mount: could not determine the content source for ${t.source} — ${e instanceof Error?e.message:String(e)}. Pass --backend da or --backend aem to skip this probe.\n`,exitCode:1}}let s=Ye(),c=new Xe({mountId:s,ttlMs:3e4}),l={source:a===`aem`?js(i):`da://${i.org}/${i.name}${i.path?`/${i.path}`:``}`,profile:n,cache:c,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:s,signedFetch:r},u=a===`aem`?new qe(l):new Ue(l);if(!t.noProbe)try{await u.readDir(`/`)}catch(e){return await u.close(),{stdout:``,stderr:o+`mount: probe failed for ${l.source} — ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return await this.options.fs.mount(e,u),{stdout:`Mounted '${u.describe().displayName}' → ${e} (profile: ${n})\n`,stderr:o,exitCode:0}}async handleUnmount(e,t,n){if(As(e))return n===`umount`?this.umountHelp():this.help();let r=Ds(e);if(r.positional.length===0)return{stdout:``,stderr:`${n}: path required\n`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e,t;if(r.clearCache){let{getAllMountEntries:n}=await import(`./mount-table-store-DrF_Ifaz.js`).then(e=>e.r),r=(await n()).find(e=>e.targetPath===i),a=r?.descriptor.kind;r&&(a===`s3`||a===`da`||a===`aem`)&&(e=r.descriptor.mountId,t=r.descriptor.kind)}await this.options.fs.unmount(i);let n=``;if(r.clearCache&&e&&t){let{RemoteMountCache:t}=await import(`./remote-cache-UwMD8EkX.js`).then(e=>e.n);await new t({mountId:e,ttlMs:3e4}).clearMount(),n=` (cache cleared)`}else r.clearCache&&(n=` (no remote cache to clear)`);return{stdout:`Unmounted ${i}${n}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${n}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async handleList(){try{let e=this.options.fs.listMounts();if(e.length===0)return{stdout:`No active mounts
|
|
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(As(e))return this.help();let n=Ds(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=Ds(e);if(r.positional.length===0)return{stdout:``,stderr:`mount refresh: path required
|
|
9
9
|
`,exitCode:1};let i=this.resolvePath(r.positional[0],t);try{let e=await this.options.fs.refreshMount(i,{bodies:r.bodies,env:n});return{stdout:`Refreshed ${i}: +${e.added.length} -${e.removed.length} ~${e.changed.length} (${e.unchanged} unchanged, ${e.errors.length} errors)\n`,stderr:e.errors.map(e=>` ${e.path}: ${e.message}\n`).join(``),exitCode:+(e.errors.length>0)}}catch(e){return{stdout:``,stderr:`mount refresh: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}resolvePath(e,t){let n;return n=e.startsWith(`/`)?e:`${t.replace(/\/$/,``)}/${e}`,n.length>1&&(n=n.replace(/\/+$/,``)),n}usageError(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}umountHelp(){return{stdout:[`Usage: umount [--clear-cache] <path>`,``,"Unmount a mount point. `umount <path>` is an alias for","`mount unmount <path>` — same behaviour, shorter to type.",``,`Options:`,` --clear-cache Also drop cached listings and bodies for a remote mount`,``,`Examples:`,` umount /mnt/myapp`,` umount --clear-cache /mnt/s3`,``,`See also: mount --help, mount list`].join(`
|
|
10
10
|
`)+`
|
|
11
11
|
`,stderr:``,exitCode:0}}help(){return{stdout:[`Usage: mount [OPTIONS] <target-path>`,` mount unmount [--clear-cache] <path>`,` mount list`,` mount --list`,` mount refresh [--bodies] <path>`,` mount info [--json] <path>`,``,`Mount a local directory, S3 bucket, or AEM authoring source into the`,`virtual filesystem.`,``,`Without --source, opens a directory picker (local mount). With --source, mounts`,`a remote source (S3-compatible, da.live, or the Helix 6 Source Bus).`,``,`A da:// source is checked against the site config first: sites upgraded to`,`Helix 6 are re-routed to the Source Bus, because admin.da.live no longer`,`holds their content. Use --backend to force either endpoint.`,``,`Options:`,` --source <url> Remote source: s3://bucket[/prefix], da://org/repo,`,` or aem://org/site`,` --profile <name> Profile name (default: "default")`,` --backend <da|aem> Force the Adobe backend instead of probing the site config`,` --no-probe Skip the root-level probe on mount`,` --max-body-mb <n> Override body size limit (MB)`,``,`Sub-commands:`," unmount [--clear-cache] <path> Remove a mount point (also spelled `umount <path>`)",` list, --list, -l Show active mount points`,` refresh [--bodies] <path> Re-index or revalidate a mount`,` info [--json] <path> Probe volume semantics (case, Unicode, exec bit)`,``,`Examples:`,` mount /mnt/myapp`,` mount --source s3://my-bucket --profile default /mnt/s3`,` mount --source da://my-org/my-repo /mnt/da`,` mount --source aem://my-org/my-site /mnt/aem`,` mount list`,` mount info /tmp`,` mount info --json /mnt/kb`,` mount refresh /mnt/myapp`,` mount unmount /mnt/myapp`,` umount /mnt/myapp`].join(`
|
|
12
12
|
`)+`
|
|
13
|
-
`,stderr:``,exitCode:0}}};async function
|
|
14
|
-
`,exitCode:0};if(r)await
|
|
15
|
-
`)}return
|
|
16
|
-
`,exitCode:1};let i=n.slice(0,a).filter(e=>!e.startsWith(`-`))[0];return
|
|
17
|
-
`,exitCode:1};if(r){let r=n.indexOf(`-b`),a=n.slice(r+1).filter(e=>!e.startsWith(`-`)),s=a.length>1?a[1]:void 0;try{await
|
|
13
|
+
`,stderr:``,exitCode:0}}};async function Ns(e){let t=`pendingMount:term:${e}`,n;try{n=await Rt(t)}catch{return null}if(!n)return null;try{await It(n)}catch{return null}return He.fromHandle(n,{mountId:Ye()})}async function Ps(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 Fs(e,t,a);else if(o.includes(`.`))await Is(e,t,a);else if(i)await Ls(e,t,a);else for(let n of o)await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:n,force:a});return{stdout:``,stderr:``,exitCode:0}}async function Fs(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&(a===0?await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}async function Is(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,,a,o]of r)a!==o&&a!==0&&await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n})}async function Ls(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[i,a,o,s]of r)a!==0&&o!==s&&(o===0?await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i}):await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:i,force:n}))}const Rs={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:Rs,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`}}},zs=/^(--?)([^=]+)(=.*)?$/;function Bs(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 Vs(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 Hs(){let e=new Set([`c`,`C`,`git-dir`,`work-tree`]);for(let t of Object.values(I))for(let n of Vs(t))e.add(n);return e}function Us(e,t,n){for(let r of e){if(!t.has(r))return r;if(n.has(r))return}}function Ws(e,t){let n=Bs(t),r=Vs(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=zs.exec(t);if(!i)continue;let o=i[2];if(i[1]===`-`&&o.length>1&&!i[3]&&!n.has(o)){let e=Us(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 Gs(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function Ks(e,t){if(!t)return;let n=Ws(e,t);return n?Gs(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 qs(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 Js(e,t){if(!(e instanceof Error))return Xs(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=>Js(e,t)).join(`
|
|
15
|
+
`)}return Xs(qs(e.message)??e.message,t)}function Ys(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 Xs(e,t){if(!/\b401\b|Unauthorized/i.test(e))return e;if(t!==void 0){if(!Ys(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 Zs={refresh:!1},Qs=new Set([`never`,`false`,`0`,`off`,`no`]),$s=new Set([`always`,`true`,`1`,`on`,`yes`]),ec=/^(--?)([^=]+)(=.*)?$/,tc=Hs();function nc(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 rc(e){let t,n=e.indexOf(`--`),r=n===-1?e:e.slice(0,n);for(let e=0;e<r.length;e++){if(ac(r,e))continue;let n=r[e];if(n===`--no-color`){t=`never`;continue}if(n===`--color`){t=`always`;continue}n.startsWith(`--color=`)&&(t=nc(n.slice(8))??t)}return t}function ic(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(ac(e,r,t)){n.push(i);continue}if(i.startsWith(`--color=`)){let e=oc(i.slice(8));e&&n.push(e);continue}n.push(i)}return n}function ac(e,t,n=-1){if(t===0||n!==-1&&t-1>=n)return!1;let r=e[t-1],i=ec.exec(r);return!i||i[3]?!1:tc.has(i[2])}function oc(e){let t=e.toLowerCase();if(Qs.has(t))return`--no-color`;if($s.has(t))return`--color`}function sc(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(nc(e.colorUi));return i===void 0?!e.noColorEnv&&t:i}function cc(e,t,n){return e?`\x1b[${t}m${n}\x1b[0m`:n}async function lc(e,t,n){let r=n.includes(`-d`)||n.includes(`-D`)||n.includes(`--delete`),i=n.includes(`-a`)||n.includes(`--all`);if(n.includes(`--show-current`)){let n=await A({fs:e.lfs,dir:t});return{stdout:n?`${n}\n`:``,stderr:``,exitCode:0}}let a=n.find(e=>!e.startsWith(`-`));if(r&&a)return await vn({fs:e.lfs,dir:t,ref:a}),{stdout:`Deleted branch ${a}\n`,stderr:``,exitCode:0};if(a&&!r)return await ln({fs:e.lfs,dir:t,ref:a}),{stdout:``,stderr:``,exitCode:0};let o=await Ht({fs:e.lfs,dir:t}),s=await A({fs:e.lfs,dir:t}),c=``;for(let t of o)c+=t===s?`* ${cc(e.useColor,`32`,t)}\n`:` ${t}\n`;if(i)try{let n=await Ht({fs:e.lfs,dir:t,remote:`origin`});for(let t of n)c+=` ${cc(e.useColor,`31`,`remotes/origin/${t}`)}\n`}catch{}return{stdout:c,stderr:``,exitCode:0}}async function uc(e,t,n){let r=n.includes(`-b`),i=n.includes(`-f`)||n.includes(`--force`),a=n.indexOf(`--`);if(a!==-1){let r=n.slice(a+1);if(r.length===0)return{stdout:``,stderr:`error: you must specify path(s) to restore
|
|
16
|
+
`,exitCode:1};let i=n.slice(0,a).filter(e=>!e.startsWith(`-`))[0];return hc(e,t,r,i)}let o=n.find(e=>!e.startsWith(`-`));if(!o)return{stdout:``,stderr:`error: you must specify path(s) or a branch to checkout
|
|
17
|
+
`,exitCode:1};if(r){let r=n.indexOf(`-b`),a=n.slice(r+1).filter(e=>!e.startsWith(`-`)),s=a.length>1?a[1]:void 0;try{await ln({fs:e.lfs,dir:t,ref:o,object:s,checkout:!1,force:i})}catch(e){return mc(e,o)}try{await dc(e,t,o,i)}catch(n){if(!i)try{await vn({fs:e.lfs,dir:t,ref:o})}catch{}return mc(n,o)}return await e.fs.flush(),{stdout:`Switched to a new branch '${o}'\n`,stderr:``,exitCode:0}}try{await dc(e,t,o,i)}catch(e){return mc(e,o)}return await e.fs.flush(),{stdout:`Switched to branch '${o}'\n`,stderr:``,exitCode:0}}async function dc(e,t,n,r){let i;try{i=await E({fs:e.lfs,dir:t,ref:`HEAD`})}catch{i=void 0}let a=new Set(await D({fs:e.lfs,cache:e.cache,dir:t}));await _n({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:r});let o=await E({fs:e.lfs,dir:t,ref:n}),s=new Set(await D({fs:e.lfs,cache:e.cache,dir:t,ref:o}));await fc(e,t,a,s),!(!r&&i===o)&&await pc(e,t,o,a,s)}async function fc(e,t,n,r){for(let i of n)if(!r.has(i)){try{await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i})}catch{}try{await e.fs.rm(`${t}/${i}`)}catch{}}}async function pc(e,t,n,r,i){for(let a of i){if(!r.has(a))continue;let i=`${t}/${a}`;try{let t=await e.fs.lstat(i);if(t.type===`symlink`||t.type===`directory`)continue}catch{continue}let{blob:o}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:a}),s=a.lastIndexOf(`/`);s!==-1&&await e.fs.mkdir(`${t}/${a.slice(0,s)}`,{recursive:!0}),await e.fs.writeFile(i,o),await An({fs:e.lfs,cache:e.cache,dir:t,filepath:a,ref:n})}}function mc(e,t){if(e instanceof Error&&e.name===`MultipleGitError`)return{stdout:``,stderr:`error: unable to checkout '${t}':\n${Js(e).split(`
|
|
18
18
|
`).map(e=>` ${e}`).join(`
|
|
19
|
-
`)}\n`,exitCode:1};throw e}async function
|
|
20
|
-
`).find(e=>e.trim().length>0)?.split(/[\t ]/)[0];if(!i||!
|
|
21
|
-
`,exitCode:128};let c=await
|
|
22
|
-
`)[0];return{stdout:`[${s??`HEAD`} ${r.slice(0,7)}] ${l}\n`,stderr:``,exitCode:0}}catch(e){return
|
|
19
|
+
`)}\n`,exitCode:1};throw e}async function hc(e,t,n,r){let i=r??`HEAD`,a=await E({fs:e.lfs,dir:t,ref:i});for(let r of n){let{blob:n}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:a,filepath:r}),i=r.lastIndexOf(`/`);i!==-1&&await e.fs.mkdir(`${t}/${r.slice(0,i)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${r}`,n),await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:r})}return await e.fs.flush(),{stdout:``,stderr:``,exitCode:0}}function gc(e={}){let{favor:t,diff3:n,labels:r}=e;return({contents:e,branches:i})=>{let[a,o,s]=e,c=ze(o??``,a??``,s??``,{favor:t,diff3:n,labels:{current:r?.current??i[1]??`ours`,base:r?.base??i[0]??`base`,other:r?.other??i[2]??`theirs`}});return{cleanMerge:t!==void 0||c.conflicts===0,mergedText:c.content}}}async function _c(e,t,n){let r=vc(n),i=await xc(e,t,r.base);for(let n of r.steps)if(n.kind===`first-parent`)for(let r=0;r<n.count;r++)i=await Cc(e,t,i,1);else i=await Cc(e,t,i,n.count);return i}function vc(e){if(e.includes(`@{`))throw Error(`reflog selectors are unsupported`);let t=/^(.+?)(?:(~[0-9]*|\^[0-9]*))*$/.exec(e);if(!t)throw Error(`invalid revision`);let n=t[1],r=e.slice(n.length),i=r.match(/~[0-9]*|\^[0-9]*/g)??[];if(i.join(``)!==r)throw Error(`invalid revision`);return{base:n,steps:i.map(e=>{let t=e.length===1?1:Number(e.slice(1));return{kind:e[0]===`~`?`first-parent`:`parent`,count:t}})}}async function yc(e,t,n){try{return await _c(e,t,n)}catch{return}}const bc=/^[0-9a-f]{4,40}$/i;async function xc(e,t,n){if(n===`FETCH_HEAD`)return await Sc(e,t);try{return await E({fs:e.lfs,dir:t,ref:n})}catch(e){if(!bc.test(n))throw e}return await En({fs:e.lfs,cache:e.cache,dir:t,oid:n})}async function Sc(e,t){let n=await On({fs:e.lfs,filepath:t}),r;try{let t=await e.lfs.readFile(`${n}/.git/FETCH_HEAD`,{encoding:`utf8`});r=typeof t==`string`?t:new TextDecoder().decode(t)}catch{throw Error(`Could not find FETCH_HEAD.`)}let i=r.split(`
|
|
20
|
+
`).find(e=>e.trim().length>0)?.split(/[\t ]/)[0];if(!i||!bc.test(i)||i.length!==40)throw Error(`Could not find FETCH_HEAD.`);return i.toLowerCase()}async function Cc(e,t,n,r){if(r<1)return n;let{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n}),a=i.parent[r-1];if(!a)throw Error(`missing parent`);return a}function wc(e){return e.replace(/^\.\//,``).replace(/\/+$/,``)}function Tc(e,t){return t.length===0||t.some(t=>{let n=wc(t);return n===``||e===n||e.startsWith(`${n}/`)})}function Ec(e,t){return t.length===0||t.some(t=>{let n=wc(t);return n===``||e===n||e.startsWith(`${n}/`)||n.startsWith(`${e}/`)})}async function Dc(e,t,n){let{flags:r,positionals:i}=M(n,I[`cherry-pick`]),a=r[`no-commit`]===!0,o=r.x===!0,s=i[0];if(!s)return{stdout:``,stderr:`error: empty commit set passed
|
|
21
|
+
`,exitCode:128};let c=await yc(e,t,s);if(c===void 0)return{stdout:``,stderr:`fatal: bad revision '${s}'\n`,exitCode:128};try{let n=await Tn({fs:e.lfs,cache:e.cache,dir:t,oid:c,abortOnConflict:!1,noUpdateBranch:a,committer:await e.resolveAuthor(t),mergeDriver:gc()});if(a)return{stdout:``,stderr:``,exitCode:0};let r=n,{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n});if(o){let n=i.message.replace(/\s+$/,``);r=await dn({fs:e.lfs,cache:e.cache,dir:t,message:`${n}\n\n(cherry picked from commit ${c})\n`,author:i.author,committer:await e.resolveAuthor(t),amend:!0})}let s=await A({fs:e.lfs,dir:t}),l=i.message.split(`
|
|
22
|
+
`)[0];return{stdout:`[${s??`HEAD`} ${r.slice(0,7)}] ${l}\n`,stderr:``,exitCode:0}}catch(e){return Oc(e,c)}}function Oc(e,t){let n=t.slice(0,7);if(e instanceof Error&&e.name===`MergeConflictError`){let t=e.data?.filepaths??[],r=``;for(let e of t)r+=`CONFLICT (content): Merge conflict in ${e}\n`;return r+=`error: could not apply ${n}...\n`,r+=`hint: after resolving the conflicts, mark them with 'git add <paths>',
|
|
23
23
|
`,r+=`hint: then commit the result.
|
|
24
|
-
`,{stdout:``,stderr:r,exitCode:1}}return e instanceof Error&&e.name===`CherryPickMergeCommitError`?{stdout:``,stderr:`error: commit ${t} is a merge but no -m option was given.\nfatal: cherry-pick failed\n`,exitCode:128}:e instanceof Error&&e.name===`CherryPickRootCommitError`?{stdout:``,stderr:`error: ${e.message}\nfatal: cherry-pick failed\n`,exitCode:128}:{stdout:``,stderr:`fatal: ${
|
|
25
|
-
`,exitCode:128};let d=await O({fs:e.lfs,cache:e.cache,dir:t,...
|
|
26
|
-
`,exitCode:128};let c=a[0],l=a[1];if(!l){let e=c.match(/\/([^/]+?)(\.git)?$/);l=e?e[1]:`repo`}let u=b(l.startsWith(`/`)?l:`${t}/${l}`),d=L(o,`depth`),f=L(o,`branch`),p=o[`single-branch`]!==!1,m=s?``:`Cloning into '${l}'...\n`,h=
|
|
27
|
-
`)?r:`${r}\n`)}async function
|
|
28
|
-
`,exitCode:1};let c=await
|
|
29
|
-
`,exitCode:1}}function
|
|
30
|
-
`,exitCode:1};let s=n.indexOf(o),c;for(let e=s+1;e<n.length;e++)if(!n[e].startsWith(`-`)){c=n[e];break}return c===void 0?
|
|
31
|
-
`,exitCode:1};if(n===`credential.token`||n===`github.token`)return await e.setGithubToken(``),{stdout:``,stderr:``,exitCode:0};if(r){let t=await e.getGlobalFs();try{let e=await t.readTextFile(
|
|
32
|
-
`)){let e=i.trim();if(!e||e.startsWith(`#`)||e.startsWith(`;`))continue;let a=e.match(/^\[(\w+)(?:\s+"([^"]*)")?\]$/);if(a){n=a[1].toLowerCase(),r=a[2]??``;continue}let o=e.match(/^(\w+)\s*=\s*(.*)$/);if(o&&n){let e=o[1],i=o[2].trim(),a=r?`${n}.${r}.${e}`:`${n}.${e}`;t+=`${a}=${i}\n`}}return t}const
|
|
33
|
-
`,exitCode:129};let[i,a]=await Promise.all([
|
|
34
|
-
`)}\n`;if(t.stat)return Le(e.map(
|
|
24
|
+
`,{stdout:``,stderr:r,exitCode:1}}return e instanceof Error&&e.name===`CherryPickMergeCommitError`?{stdout:``,stderr:`error: commit ${t} is a merge but no -m option was given.\nfatal: cherry-pick failed\n`,exitCode:128}:e instanceof Error&&e.name===`CherryPickRootCommitError`?{stdout:``,stderr:`error: ${e.message}\nfatal: cherry-pick failed\n`,exitCode:128}:{stdout:``,stderr:`fatal: ${Js(e)}\n`,exitCode:128}}async function kc(e,t,n){let r=M(n,Rs),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,...Zs}),f=Ac(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,...Zs})).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=>Mc(e,t))));let h=new Set,g=new Set;for(let e of m){let t=jc(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 Ac(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 jc(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 Mc(e,t){let n=t.endsWith(`/`)?t.slice(0,-1):t;return e===n||e.startsWith(`${n}/`)}let Nc=null;function Pc(){return Nc||=g(),Nc}async function*Fc(e,t,n){t&&t({phase:`Receiving`,loaded:e.length,total:n??e.length}),yield e}function Ic(){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 Pc()(t,{method:n,headers:r,body:o}),c=parseInt(s.headers[`content-length`]??`0`,10)||void 0,l=Fc(s.body,a,c);return{url:s.url,method:n,headers:s.headers,body:l,statusCode:s.status,statusMessage:s.statusText}}}}const Lc=Ic();async function Rc(e,t,n){let r=Ks(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=zc(c,t);if(h)return Bc(e,h,u,c,l,m,f,s);try{await un({fs:e.lfs,cache:e.cache,http:Lc,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 Hc(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 zc(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 Bc(e,t,n,r,i,a,o,s=!1){if(n===t||n.startsWith(`${t}/`))return Hc(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 Hc(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 Vc(e,`${t}/.git`,`${n}/.git`),c&&await _n({fs:e.lfs,cache:e.cache,dir:n,ref:c,force:!0}),await bn({fs:e.lfs,dir:n,remote:`origin`,url:r,force:!0}),await e.fs.flush(),!s){let t=await D({fs:e.lfs,cache:e.cache,dir:n});t.length>0&&(a+=`Checked out ${t.length} files.\n`)}return{stdout:s?``:`${a}done.\n`,stderr:``,exitCode:0}}catch(e){return Hc(e,n,r)}}async function Vc(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 Vc(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 Hc(e,t,n){return{stdout:``,stderr:`fatal: ${Js(e,n).replace(/'\/__opfs__\/[^']*<path>'/g,`'${t}'`).replace(/\/__opfs__\/[^\s'"<]*<path>/g,t).replace(/<path>/g,t)}\n`,exitCode:128}}const Uc=[`MERGE_HEAD`,`MERGE_MSG`,`MERGE_MODE`,`AUTO_MERGE`];async function Wc(e,t){return`${await On({fs:e.lfs,filepath:t})}/.git`}async function Gc(e,t){try{return(await e.fs.readTextFile(t)).trim()}catch{return}}async function Kc(e,t){try{await e.fs.rm(t)}catch{}}async function qc(e,t){try{return await Gc(e,`${await Wc(e,t)}/MERGE_HEAD`)}catch{return}}async function Jc(e,t){return await qc(e,t)!==void 0}async function Yc(e,t){try{return await Gc(e,`${await Wc(e,t)}/MERGE_MSG`)}catch{return}}async function Xc(e,t,n){let r=await Wc(e,t);await e.fs.writeFile(`${r}/ORIG_HEAD`,`${n}\n`)}async function Zc(e,t,n,r){let i=await Wc(e,t);await e.fs.writeFile(`${i}/MERGE_HEAD`,`${n}\n`),await e.fs.writeFile(`${i}/MERGE_MSG`,r.endsWith(`
|
|
27
|
+
`)?r:`${r}\n`)}async function Qc(e,t){let n;try{n=await Wc(e,t)}catch{return}await Promise.all(Uc.map(t=>Kc(e,`${n}/${t}`)))}async function $c(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 el=new Set([`message`,`author`,`date`,`file`,`cleanup`,`amend`,`all`,`allow-empty`,`m`,`a`,`F`]);async function tl(e,t,n){let r=pl(n),i=M(r,I.commit).flags,a=await qc(e,t),o=await dl(e,t,i);if(typeof o!=`string`){if(a){let n=await Yc(e,t);if(n)return await nl(e,t,i,n,a)}return o}return await nl(e,t,i,o,a)}async function nl(e,t,n,r,i){let a=n.amend===!0,o=n.all===!0,s=n[`allow-empty`]===!0;if(o&&await fl(e,t),!s&&!a&&!i&&!(await O({fs:e.lfs,cache:e.cache,dir:t})).some(([,e,,t])=>t!==e))return{stdout:``,stderr:`nothing to commit, working tree clean
|
|
28
|
+
`,exitCode:1};let c=await dn({fs:e.lfs,cache:e.cache,dir:t,message:r,author:await e.resolveAuthor(t),amend:a,noUpdateBranch:void 0,...i?{parent:[await E({fs:e.lfs,dir:t,ref:`HEAD`}),i]}:{}});i&&await Qc(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 rl(e,t){let n=e[t];if(n!==void 0&&n!==!0&&n!==!1)return L(e,t)}function il(e){return Object.keys(e).find(e=>!el.has(e))}function al(e){return{stdout:``,stderr:`error: unknown ${e.length===1?`switch`:`option`} \`${e}\`\n`,exitCode:129}}function ol(e){return{stdout:``,stderr:`error: switch \`${e}\` requires a value\n`,exitCode:1}}function sl(e){let t=il(e);return t?al(t):`message`in e||`m`in e?ol(`m`):`file`in e||`F`in e?ol(`F`):{stdout:``,stderr:"error: option `-m' or `-F' is required\n",exitCode:1}}function cl(){return{stdout:``,stderr:`Aborting commit due to empty commit message.
|
|
29
|
+
`,exitCode:1}}function ll(e){return{stdout:``,stderr:`error: could not read log file '${e}': No such file or directory\n`,exitCode:128}}async function ul(e,t,n){if(n===`-`)return e.stdin;let r=n.startsWith(`/`)?n:`${t}/${n}`;try{return await e.fs.readTextFile(r)}catch{return ll(n)}}async function dl(e,t,n){let r=rl(n,`message`);if(r!==void 0)return r;let i=rl(n,`file`);if(i!==void 0){let n=await ul(e,t,i);return typeof n==`string`&&n===``?cl():n}return sl(n)}async function fl(e,t){let n=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,a,o]of n)i!==0&&a!==o&&(a===0?await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:r}):await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:r}))}function pl(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 ml(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 vl(e,t,a);if(i)return hl(e,t,o,a);if(!o)return{stdout:``,stderr:`usage: git config [--global] [--list] [--unset] <key> [<value>]
|
|
30
|
+
`,exitCode:1};let s=n.indexOf(o),c;for(let e=s+1;e<n.length;e++)if(!n[e].startsWith(`-`)){c=n[e];break}return c===void 0?_l(e,t,o,a):gl(e,t,o,c,a)}async function hl(e,t,n,r){if(!n)return{stdout:``,stderr:`error: key required for --unset
|
|
31
|
+
`,exitCode:1};if(n===`credential.token`||n===`github.token`)return await e.setGithubToken(``),{stdout:``,stderr:``,exitCode:0};if(r){let t=await e.getGlobalFs();try{let e=await t.readTextFile($n),r=Zn(e,n);await t.writeFile($n,r)}catch{}}else try{let r=`${t}/.git/config`,i=await e.fs.readTextFile(r),a=Zn(i,n);await e.fs.writeFile(r,a)}catch{}return{stdout:``,stderr:``,exitCode:0}}async function gl(e,t,n,r,i){return n===`credential.token`||n===`github.token`?(await e.setGithubToken(r),{stdout:``,stderr:``,exitCode:0}):(i?await Xn(await e.getGlobalFs(),n,r):await nn({fs:e.lfs,dir:t,path:n,value:r}),n===`user.name`&&e.setDefaultAuthorName(r),n===`user.email`&&e.setDefaultAuthorEmail(r),{stdout:``,stderr:``,exitCode:0})}async function _l(e,t,n,r){if(n===`credential.token`||n===`github.token`){let t=e.getGithubToken();return{stdout:t?`${t}\n`:``,stderr:``,exitCode:+!t}}let i;return r?i=await Qn(await e.getGlobalFs(),n):(i=await $t({fs:e.lfs,dir:t,path:n}),i||=await Qn(await e.getGlobalFs(),n)),{stdout:i?`${i}\n`:``,stderr:``,exitCode:+!i}}async function vl(e,t,n){let r=``;if(!n)try{let n=`${t}/.git/config`,i=await e.fs.readTextFile(n);r+=yl(i)}catch{}try{let t=await(await e.getGlobalFs()).readTextFile($n);r+=yl(t)}catch{}return{stdout:r,stderr:``,exitCode:0}}function yl(e){let t=``,n=``,r=``;for(let i of e.split(`
|
|
32
|
+
`)){let e=i.trim();if(!e||e.startsWith(`#`)||e.startsWith(`;`))continue;let a=e.match(/^\[(\w+)(?:\s+"([^"]*)")?\]$/);if(a){n=a[1].toLowerCase(),r=a[2]??``;continue}let o=e.match(/^(\w+)\s*=\s*(.*)$/);if(o&&n){let e=o[1],i=o[2].trim(),a=r?`${n}.${r}.${e}`:`${n}.${e}`;t+=`${a}=${i}\n`}}return t}const bl=`/dev/null`,xl={bytes:new Uint8Array,text:``,binary:!1};async function Sl(e,t,n,r){if(n.length!==2)return{stdout:``,stderr:`usage: git diff --no-index [<options>] <path> <path>
|
|
33
|
+
`,exitCode:129};let[i,a]=await Promise.all([Ol(e,t,n[0]),Ol(e,t,n[1])]);[i,a]=await kl(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 Nl(e,i,a):[await jl(e,i,a)]).filter(e=>!Cl(e.oldBlob.bytes,e.newBlob.bytes));return s.length===0?{stdout:``,stderr:``,exitCode:0}:{stdout:wl(s,r,e.useColor),stderr:``,exitCode:1}}function Cl(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 wl(e,t,n){if(t.nameOnly)return`${e.map(e=>e.absent===`new`?bl:e.newName).join(`
|
|
34
|
+
`)}\n`;if(t.stat)return Le(e.map(El),{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 ${Tl(i,`old`)} and ${Tl(i,`new`)} differ\n`;continue}r+=Re({oldContent:i.oldBlob.text,newContent:i.newBlob.text,oldName:i.oldName,newName:i.newName,absent:i.absent,context:t.context,color:n})}return r}function Tl(e,t){return e.absent===t?bl:t===`old`?`a/${e.oldName}`:`b/${e.newName}`}function El(e){return{name:Dl(e.absent===`old`?bl:e.oldName,e.absent===`new`?bl: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 Dl(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 Ol(e,t,n){if(n===bl)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 kl(e,t,n,r){return n.kind===`dir`&&(r.kind===`file`||r.kind===`null`)?[await Ol(e,t,`${n.given}/${Al(r.given)}`),r]:r.kind===`dir`&&(n.kind===`file`||n.kind===`null`)?[n,await Ol(e,t,`${r.given}/${Al(n.given)}`)]:[n,r]}function Al(e){let t=e.lastIndexOf(`/`);return t===-1?e:e.slice(t+1)}async function jl(e,t,n){let[r,i]=await Promise.all([Ml(e,t),Ml(e,n)]),a=t.kind===`null`?`old`:n.kind===`null`?`new`:void 0,o=Il(t.kind===`null`?n.given:t.given);return{oldName:a?o:Il(t.given),newName:a?o:Il(n.given),absent:a,oldBlob:r,newBlob:i}}function Ml(e,t){return t.kind===`file`?Fl(e,t.abs):Promise.resolve(xl)}async function Nl(e,t,n){let[r,i]=await Promise.all([Pl(e,t.abs),Pl(e,n.abs)]),a=[...new Set([...r,...i])].sort(),o=[];for(let s of a){let a=Il(`${t.given}/${s}`),c=Il(`${n.given}/${s}`);i.has(s)?r.has(s)?o.push({oldName:a,newName:c,oldBlob:await Fl(e,`${t.abs}/${s}`),newBlob:await Fl(e,`${n.abs}/${s}`)}):o.push({oldName:c,newName:c,absent:`old`,oldBlob:xl,newBlob:await Fl(e,`${n.abs}/${s}`)}):o.push({oldName:a,newName:a,absent:`new`,oldBlob:await Fl(e,`${t.abs}/${s}`),newBlob:xl})}return o}async function Pl(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 Fl(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 Il(e){return e.replace(/^\/+/,``)}function Ll(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 Rl(e,t,n){let r=Ql(n),i=Ks(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:$l(a.unified)};if(a[`no-index`]===!0||a.index===!1)return Sl(e,t,o,u);if(o.length>=2)return Wl(e,t,o[0],o[1],u);if(o.length===1){let n=eu(o[0]);if(n)return Gl(e,t,n[0],n[1],u);let r=tu(o[0]);return r?Wl(e,t,r[0],r[1],u):c?Bl(e,t,o[0],u):ql(e,t,o[0],u)}return Zl(e,c?await zl(e,t,u.pathspecs):await Vl(e,t,u.pathspecs),u)}async function zl(e,t,n=[],r=`HEAD`){let i=[];return await Wt({fs:e.lfs,cache:e.cache,dir:t,trees:[yn({ref:r}),wn()],iterate:Ll(e=>Ec(e,n)),map:async(r,[a,o])=>{if(r===`.`||r===`.git`||r.startsWith(`.git/`)||!Tc(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 Ul(e,t,l),f=await Ul(e,t,u);i.push({filepath:r,oldContent:d,newContent:f,oldPresent:!!l,newPresent:!!u})}}),i}async function Bl(e,t,n,r){let i;try{i=await _c(e,t,n)}catch{return ru(n)}return Zl(e,await zl(e,t,r.pathspecs,i),r)}async function Vl(e,t,n=[]){let r=[];return await Wt({fs:e.lfs,cache:e.cache,dir:t,trees:[wn(),Sn(Zs)],iterate:Ll((e,[t])=>t===!0&&Ec(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`||!Tc(i,n))return null;let c=await a.oid(),l=await Hl(o);if(l&&c&&(await Vt({object:l})).oid===c)return null;let u=await Ul(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 Hl(e){if(e)try{return await e.type()===`blob`?await e.content()??void 0:void 0}catch{return}}async function Ul(e,t,n){if(!n)return``;try{let{blob:r}=await Ut({fs:e.lfs,dir:t,oid:n,cache:e.cache});return new TextDecoder().decode(r)}catch{return``}}async function Wl(e,t,n,r,i){try{return await Kl(e,t,await _c(e,t,n),await _c(e,t,r),i)}catch{return ru(await nu(e,t,[n,r])??n)}}async function Gl(e,t,n,r,i){let a=n||`HEAD`,o=r||`HEAD`;try{let n=await _c(e,t,a),r=await _c(e,t,o),s=await cn({fs:e.lfs,cache:e.cache,dir:t,oids:[n,r]});return s[0]?await Kl(e,t,s[0],r,i):{stdout:``,stderr:`fatal: '${a}...${o}' has no merge base\n`,exitCode:128}}catch{return ru(await nu(e,t,[a,o])??a)}}async function Kl(e,t,n,r,i){let a=[];return await Wt({fs:e.lfs,cache:e.cache,dir:t,trees:[yn({ref:n}),yn({ref:r})],iterate:Ll(e=>Ec(e,i.pathspecs??[])),map:async(e,[t,n])=>{if(await Yl(t,n))return null;let r=await Xl(e,t,n,i.pathspecs??[]);r&&a.push(r)}}),Zl(e,a,i)}async function ql(e,t,n,r){let i;try{i=await _c(e,t,n)}catch{return ru(n)}let a=new Set(await D({fs:e.lfs,dir:t,cache:e.cache})),o=Jl(a),s=[];return await Wt({fs:e.lfs,cache:e.cache,dir:t,trees:[yn({ref:i}),Sn(Zs)],iterate:Ll((e,[t])=>(t===!0||a.has(e)||o.has(e))&&Ec(e,r.pathspecs??[])),map:async(e,[t,n])=>{if(!t&&!a.has(e)&&!o.has(e))return null;let i=await Xl(e,t,n,r.pathspecs??[]);i&&s.push(i)}}),Zl(e,s,r)}function Jl(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 Yl(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 Xl(e,t,n,r){if(e===`.`||!Tc(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 Zl(e,t,n){return t.length===0?{stdout:``,stderr:``,exitCode:0}:n.nameStatus?{stdout:`${t.map(e=>{let t=e.oldPresent??e.oldContent!==``,n=e.newPresent??e.newContent!==``;return`${t?n?`M`:`D`:`A`}\t${e.filepath}`}).join(`
|
|
35
35
|
`)}\n`,stderr:``,exitCode:0}:n.nameOnly?{stdout:`${t.map(e=>e.filepath).join(`
|
|
36
|
-
`)}\n`,stderr:``,exitCode:0}:n.stat?
|
|
37
|
-
`)[0]}\n`:(i+=`${
|
|
38
|
-
`)}\n\n`),r.showStat&&(i+=await
|
|
39
|
-
`)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,r.toLocaleString()).replace(/%ar/g,
|
|
40
|
-
`,exitCode:129};let u=await
|
|
41
|
-
`,exitCode:128};if(await
|
|
36
|
+
`)}\n`,stderr:``,exitCode:0}:n.stat?iu(t,e.useColor):{stdout:t.map(t=>Re({oldContent:t.oldContent,newContent:t.newContent,oldName:t.filepath,newName:t.filepath,context:n.context,color:e.useColor})).join(``),stderr:``,exitCode:0}}function Ql(e){let t=e.indexOf(`--`);return e.map((e,n)=>(t===-1||n<t)&&/^-U\d+$/.test(e)?`--unified=${e.slice(2)}`:e)}function $l(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 eu(e){let t=e.indexOf(`...`);return t===-1?null:[e.slice(0,t),e.slice(t+3)]}function tu(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 nu(e,t,n){for(let r of n)try{await _c(e,t,r)}catch{return r}return null}function ru(e){return{stdout:``,stderr:`fatal: ambiguous argument '${e}'\n`,exitCode:128}}function iu(e,t=!1){return{stdout:Le(e.map(e=>({name:e.filepath,oldContent:e.oldContent,newContent:e.newContent})),{color:t}),stderr:``,exitCode:0}}async function au(e,t,n,r){let i=[];if(await Wt({fs:e.lfs,cache:e.cache,dir:t,trees:[yn({ref:n})],map:async(e,[t])=>{if(e===`.`||!t||await t.type()!==`blob`)return;let n=await t.content();n&&i.push({filepath:e,content:new TextDecoder().decode(n)})}}),i.length===0)return``;if(r)return iu(i.map(e=>({filepath:e.filepath,oldContent:``,newContent:e.content})),e.useColor).stdout;let a=``;for(let t of i)a+=Re({oldContent:``,newContent:t.content,oldName:t.filepath,newName:t.filepath,color:e.useColor});return a}async function ou(e,t,n){let r=Ks(n,I.fetch);if(r)return r;let{flags:i,positionals:a}=M(n,I.fetch),o=i,s=a[0]??`origin`,c=a[1],l=o.prune===!0,u=o.quiet===!0,d=L(o,`depth`),f=u?``:`Fetching ${s}\n`,p=await kn({fs:e.lfs,cache:e.cache,http:Lc,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 su(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 su(e,t,n,r){let i=await On({fs:e.lfs,filepath:t}),a=r??``;await e.fs.writeFile(`${i}/.git/FETCH_HEAD`,`${n}\t\t${a}\n`)}async function cu(e,t,n){let r=M(n,I.init).flags,i=L(r,`initial-branch`)??e.getConfigOverrides()?.get(`init.defaultbranch`)??`main`;return await Dn({fs:e.lfs,dir:t,defaultBranch:i}),{stdout:`Initialized empty Git repository in ${t}/.git/\n`,stderr:``,exitCode:0}}function lu(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 uu=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(!lu(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&&lu(this.heap[t],this.heap[n])&&(n=t),t+1<this.heap.length&&lu(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 du(e,t,n){try{return await E({fs:e.lfs,dir:t,ref:n})}catch{return}}async function fu(e,t,n,r){try{return await k({fs:e.lfs,dir:t,oid:n,cache:r})}catch{return}}async function pu(e,t,n,r,i){let a=await Ht({fs:e.lfs,dir:t});for(let[o,s]of a.entries()){let a=await du(e,t,s);if(a===void 0||r.has(a))continue;r.add(a);let c=await fu(e,t,a,i);c&&n.push(c,o)}}async function*mu(e,t,n){let r=new Set,i=new uu;for(await pu(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 fu(e,t,o,n.cache);s&&i.push(s,a.tipRank)}}}async function hu(e,t,n){let r=[];if(n.limit<=0)return r;for await(let i of mu(e,t,{cache:n.cache}))if(r.push(i),r.length>=n.limit)break;return r}async function gu(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 _u(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 Eu(e,t,g,{format:f,oneline:c,showStat:l}),stderr:``,exitCode:0}}async function _u(e,t,n){let r=n.revision?Au(n.revision):null,i=r?.[1]??n.revision,a=ju(e.cache),o=n.maxCount??10;if(n.pathspecs.length>0&&!n.all&&!r&&!n.followFile)return await Cu(e,t,{ref:i,pathspecs:n.pathspecs,limit:o,caches:a});if(n.all&&n.pathspecs.length>0)return await bu(e,t,{pathspecs:n.pathspecs,limit:o,caches:a,exclude:r?await yu(e,t,r[0],a):void 0});let s=n.all?await hu(e,t,{limit:n.maxCount??vu,cache:a.git}):await hn({fs:e.lfs,dir:t,cache:a.git,...i?{ref:i}:{},...!r&&n.pathspecs.length===0?{depth:n.maxCount??10}:{},...n.followFile?{filepath:n.followFile,follow:!0}:{}});if(r){let n=await yu(e,t,r[0],a);s=s.filter(e=>!n.has(e.oid))}return n.pathspecs.length>0?await Tu(e,t,s,n.pathspecs,o,a):r?s.slice(0,o):s}const vu=50;async function yu(e,t,n,r){let i=await hn({fs:e.lfs,dir:t,cache:r.git,ref:n});return new Set(i.map(e=>e.oid))}async function bu(e,t,n){let r=[],i=[],a=async()=>{if(i.length>0){let a=n.limit-r.length;r.push(...await Tu(e,t,i,n.pathspecs,a,n.caches)),i=[]}return r.length>=n.limit};for await(let o of mu(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 xu(e){let t=e.replace(/^\.\//,``).replace(/\/+$/,``);return t===`.`?``:t}function Su(e){let t=[...new Set(e.map(xu))];return t.some(e=>e===``)?null:t}async function Cu(e,t,n){let r=n.ref?{ref:n.ref}:{},i=Su(n.pathspecs);return i===null?await hn({fs:e.lfs,dir:t,cache:n.caches.git,...r,depth:n.limit}):i.length===1?(await hn({fs:e.lfs,dir:t,cache:n.caches.git,...r,filepath:i[0],depth:n.limit,force:!0})).slice(0,n.limit):await wu(e,t,{refArg:r,specs:i,limit:n.limit,caches:n.caches})}async function wu(e,t,n){let r=[],i=0,a=Math.max(n.limit*4,32);for(;;){let o=await hn({fs:e.lfs,dir:t,cache:n.caches.git,...n.refArg,depth:a});for(let e of o)n.caches.commitTrees.set(e.oid,e.commit.tree);for(let a of o.slice(i))if(await Fu(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 Tu(e,t,n,r,i,a){let o=Su(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 Fu(e,t,r,o,a)&&s.push(r),s.length>=i)break;return s}async function Eu(e,t,n,r){let i=``;for(let a of n){let{commit:n,oid:o}=a;r.format?i+=`${Du(o,n,r.format)}\n`:r.oneline?i+=`${cc(e.useColor,`33`,o.slice(0,7))} ${n.message.split(`
|
|
37
|
+
`)[0]}\n`:(i+=`${cc(e.useColor,`33`,`commit ${o}`)}\n`,i+=`Author: ${n.author.name} <${n.author.email}>\n`,i+=`Date: ${new Date(n.author.timestamp*1e3).toLocaleString()}\n\n`,i+=` ${n.message.replace(/\n/g,`
|
|
38
|
+
`)}\n\n`),r.showStat&&(i+=await ku(e,t,a))}return i}function Du(e,t,n){let r=new Date(t.author.timestamp*1e3);return n.replace(/%H/g,e).replace(/%h/g,e.slice(0,7)).replace(/%s/g,t.message.split(`
|
|
39
|
+
`)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,r.toLocaleString()).replace(/%ar/g,Ou(r))}function Ou(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 ku(e,t,n){let{commit:r,oid:i}=n,a=r.parent.length>0?r.parent[0]:void 0;return a?(await Wl(e,t,a,i,{nameOnly:!1,stat:!0})).stdout:await au(e,t,i,!0)}function Au(e){let t=/^(.+)\.\.([^.]*)$/.exec(e);return t?.[2]?[t[1],t[2]]:null}function ju(e){return{git:e,commitTrees:new Map,trees:new Map,entries:new Map}}async function Mu(e,t,n,r){let i=r.trees.get(n);if(i)return i;let{tree:a}=await qt({fs:e.lfs,dir:t,oid:n,cache:r.git});return r.trees.set(n,a),a}async function Nu(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 Pu(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 Mu(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 Fu(e,t,n,r,i){let a=n.commit.parent[0],o=a?await Nu(e,t,a,i):void 0;for(let a of r)if(await Pu(e,t,n.commit.tree,a,i)!==(o===void 0?void 0:await Pu(e,t,o,a,i)))return!0;return!1}async function Iu(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,...Zs}),c=[],l=i?`others`:r?`modified`:a?`deleted`:`cached`;for(let[e,t,n,r]of s)Ru(l,t,n,r)&&(o.length>0&&!Lu(e,o)||c.push(e));return c.sort(),{stdout:c.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}function Lu(e,t){for(let n of t)if(e===n||e.startsWith(n+`/`))return!0;return!1}function Ru(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 zu(e,t,n){let r=n.includes(`--heads`)||n.includes(`-h`),i=n.includes(`--tags`)||n.includes(`-t`),a=n.includes(`--symref`),o=n.filter(e=>!e.startsWith(`-`)),s=o[0]??`origin`,c=o.slice(1),l=(await Xt({fs:e.lfs,dir:t}).catch(()=>[])).find(e=>e.remote===s)?.url??s;try{let t=r&&!i?`refs/heads/`:i&&!r?`refs/tags/`:void 0,o=(await gn({http:Lc,url:l,corsProxy:e.corsProxy,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),prefix:t,symrefs:a,peelTags:i})).filter(e=>Bu(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: ${Xs(e instanceof Error?e.message:String(e),l)}\n`,exitCode:128}}}function Bu(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 Vu(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=Hu(i.slice(1));if(!c)return{stdout:``,stderr:`usage: git ls-tree [<options>] <tree-ish> [<path>...]
|
|
40
|
+
`,exitCode:129};let u=await yc(e,t,c);if(u===void 0)return{stdout:``,stderr:`fatal: Not a valid object name ${c}\n`,exitCode:128};let d;try{d=(await qt({fs:e.lfs,cache:e.cache,dir:t,oid:u})).tree}catch{return{stdout:``,stderr:`fatal: Not a valid object name ${c}\n`,exitCode:128}}let f=[];return await Uu(e,t,d,``,l,a,o,s,f),{stdout:f.join(``),stderr:``,exitCode:0}}function Hu(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 Uu(e,t,n,r,i,a,o,s,c){for(let l of n){let n=r?`${r}/${l.path}`:l.path,u=Wu(n,i);if(u!==`no`){if(l.type===`tree`){let r=u===`exact`&&(o||!a),d=u===`parent`||a;if(r&&c.push(Gu(l,n,s)),d){let{tree:r}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:l.oid});await Uu(e,t,r,n,i,a,o,s,c)}}else u!==`parent`&&!o&&c.push(Gu(l,n,s))}}}function Wu(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 Gu(e,t,n){return n?`${t}\n`:`${e.mode.padStart(6,`0`)} ${e.type} ${e.oid}\t${t}\n`}function Ku(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function qu(e,t){let n,r=!1;for(let t of Ku(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 Ju(e,t,n){let r=Ks(n,I.merge);if(r)return r;let i=M(n,I.merge);if(i.flags.abort===!0)return Yu(e,t);let a=i.positionals[0];if(!a)return{stdout:``,stderr:`fatal: No branch specified to merge.
|
|
41
|
+
`,exitCode:128};if(await Jc(e,t))return{stdout:``,stderr:`fatal: You have not concluded your merge (MERGE_HEAD exists).
|
|
42
42
|
Please, commit your changes before you merge.
|
|
43
|
-
`,exitCode:128};let o=await
|
|
44
|
-
`,stderr:``,exitCode:0}:n.fastForward?(await
|
|
43
|
+
`,exitCode:128};let o=await yc(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}=qu(i,n);try{await Xc(e,t,await E({fs:e.lfs,dir:t,ref:`HEAD`}));let n=await Jt({fs:e.lfs,cache:e.cache,dir:t,ours:await A({fs:e.lfs,dir:t})??void 0,theirs:o,fastForward:!s,fastForwardOnly:c,author:await e.resolveAuthor(t),abortOnConflict:!1,mergeDriver:gc({favor:l,diff3:u})});return n.alreadyMerged?{stdout:`Already up to date.
|
|
44
|
+
`,stderr:``,exitCode:0}:n.fastForward?(await _n({fs:e.lfs,cache:e.cache,dir:t,ref:await A({fs:e.lfs,dir:t})??`HEAD`}),{stdout:`Updating..${n.oid?n.oid.slice(0,7):``}\nFast-forward\n`,stderr:``,exitCode:0}):n.mergeCommit?(await _n({fs:e.lfs,cache:e.cache,dir:t,ref:await A({fs:e.lfs,dir:t})??`HEAD`,force:!0}),{stdout:`Merge made by the 'ort' strategy.
|
|
45
45
|
`,stderr:``,exitCode:0}):{stdout:`Merge complete.
|
|
46
|
-
`,stderr:``,exitCode:0}}catch(n){return n instanceof Error&&n.name===`MergeConflictError`&&await
|
|
47
|
-
`,exitCode:128};try{await
|
|
46
|
+
`,stderr:``,exitCode:0}}catch(n){return n instanceof Error&&n.name===`MergeConflictError`&&await Zc(e,t,o,`Merge branch '${a}' into ${await A({fs:e.lfs,dir:t})??`HEAD`}`),Xu(n)}}async function Yu(e,t){if(!await Jc(e,t))return{stdout:``,stderr:`fatal: There is no merge to abort (MERGE_HEAD missing).
|
|
47
|
+
`,exitCode:128};try{await mn({fs:e.lfs,cache:e.cache,dir:t,commit:`HEAD`})}catch{}return await _n({fs:e.lfs,cache:e.cache,dir:t,ref:await A({fs:e.lfs,dir:t})??`HEAD`,force:!0}),await Qc(e,t),{stdout:``,stderr:``,exitCode:0}}function Xu(e){if(e instanceof Error&&e.name===`MergeConflictError`)return{stdout:(e.data?.filepaths??[]).map(e=>`CONFLICT (content): Merge conflict in ${e}\n`).join(``),stderr:`Automatic merge failed; fix conflicts and then commit the result.
|
|
48
48
|
`,exitCode:1};if(e instanceof Error&&e.name===`MergeNotSupportedError`)return{stdout:``,stderr:`fatal: merge is not possible because you have unmerged files.
|
|
49
49
|
`,exitCode:128};if(e instanceof Error&&e.name===`FastForwardError`)return{stdout:``,stderr:`fatal: Not possible to fast-forward, aborting.
|
|
50
|
-
`,exitCode:128};throw e}async function
|
|
51
|
-
`,exitCode:129};try{let n=await Promise.all(i.slice(0,2).map(n=>
|
|
52
|
-
`,exitCode:128}}}function
|
|
53
|
-
`,exitCode:255};let a=
|
|
50
|
+
`,exitCode:128};throw e}async function Zu(e,t,n){let r=n.includes(`--is-ancestor`),i=n.filter(e=>!e.startsWith(`-`));if(i.length<2)return{stdout:``,stderr:`usage: git merge-base <commit> <commit>
|
|
51
|
+
`,exitCode:129};try{let n=await Promise.all(i.slice(0,2).map(n=>_c(e,t,n)));if(r)return n[0]===n[1]?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:``,exitCode:+!await en({fs:e.lfs,cache:e.cache,dir:t,oid:n[1],ancestor:n[0],depth:-1})};let a=await cn({fs:e.lfs,cache:e.cache,dir:t,oids:n});return{stdout:a[0]?`${a[0]}\n`:``,stderr:``,exitCode:+!a[0]}}catch{return{stdout:``,stderr:`fatal: Not a valid object name
|
|
52
|
+
`,exitCode:128}}}function Qu(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}async function $u(e,t,n){let r=M(n,I[`merge-file`]),i=r.positionals;if(i.length!==3)return{stdout:``,stderr:`usage: git merge-file [<options>] <current-file> <base-file> <other-file>
|
|
53
|
+
`,exitCode:255};let a=Qu(r.flags.L);if(a.length>3)return{stdout:``,stderr:`fatal: too many labels on the command line
|
|
54
54
|
`,exitCode:255};let o=[r.flags.ours?`ours`:void 0,r.flags.theirs?`theirs`:void 0,r.flags.union?`union`:void 0].filter(e=>e!==void 0);if(o.length>1)return{stdout:``,stderr:`fatal: --ours, --theirs, and --union are mutually exclusive
|
|
55
|
-
`,exitCode:255};let[s,c,l]=i,u=e=>e.startsWith(`/`)?e:`${t}/${e}`,d,f,p;try{d=await e.fs.readTextFile(u(s)),f=await e.fs.readTextFile(u(c)),p=await e.fs.readTextFile(u(l))}catch(e){return{stdout:``,stderr:`error: ${e instanceof Error?e.message:String(e)}\n`,exitCode:255}}let m=ze(d,f,p,{diff3:!!r.flags.diff3,favor:o[0],labels:{current:a[0]??s,base:a[1]??c,other:a[2]??l}}),h=o.length>0?0:m.conflicts,g=!r.flags.quiet&&h>0?`warning: merge conflict in ${s}\n`:``,_=Math.min(h,127);return r.flags.stdout?{stdout:m.content,stderr:g,exitCode:_}:(await e.fs.writeFile(u(s),m.content),{stdout:``,stderr:g,exitCode:_})}async function
|
|
56
|
-
`),{stdout:d,stderr:``,exitCode:0}}async function
|
|
57
|
-
`,exitCode:128};if(await
|
|
55
|
+
`,exitCode:255};let[s,c,l]=i,u=e=>e.startsWith(`/`)?e:`${t}/${e}`,d,f,p;try{d=await e.fs.readTextFile(u(s)),f=await e.fs.readTextFile(u(c)),p=await e.fs.readTextFile(u(l))}catch(e){return{stdout:``,stderr:`error: ${e instanceof Error?e.message:String(e)}\n`,exitCode:255}}let m=ze(d,f,p,{diff3:!!r.flags.diff3,favor:o[0],labels:{current:a[0]??s,base:a[1]??c,other:a[2]??l}}),h=o.length>0?0:m.conflicts,g=!r.flags.quiet&&h>0?`warning: merge conflict in ${s}\n`:``,_=Math.min(h,127);return r.flags.stdout?{stdout:m.content,stderr:g,exitCode:_}:(await e.fs.writeFile(u(s),m.content),{stdout:``,stderr:g,exitCode:_})}async function ed(e,t,n){let r=Ks(n,I.pull);if(r)return r;let{flags:i,positionals:a}=M(n,I.pull),o=a[0]??`origin`,s=a[1],c=i[`ff-only`]===!0||n.includes(`--ff-only`),l=i.ff===!1||n.includes(`--no-ff`),u=i.quiet===!0,d=u?``:`Pulling from ${o}...\n`;return await Yt({fs:e.lfs,cache:e.cache,http:Lc,dir:t,remote:o,ref:s,corsProxy:e.corsProxy,author:await e.resolveAuthor(t),fastForwardOnly:c,fastForward:!l,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:u?void 0:e=>{d+=`${e.phase}: ${e.loaded}/${e.total}\n`}}),u||(d+=`Already up to date.
|
|
56
|
+
`),{stdout:d,stderr:``,exitCode:0}}async function td(e,t,n){let{flags:r,positionals:i}=M(n,I.push),a=r.force===!0,o=r[`set-upstream`]===!0,s=r[`dry-run`]===!0,c=i[0]??`origin`,l=i[1]??await A({fs:e.lfs,dir:t});if(s)return{stdout:`Would push to ${c}...\n ${l} -> ${l}\n`,stderr:``,exitCode:0};let u=`Pushing to ${c}...\n`,d=await Zt({fs:e.lfs,cache:e.cache,http:Lc,dir:t,remote:c,ref:l??void 0,corsProxy:e.corsProxy,force:a,onAuth:e.getOnAuth(),onAuthFailure:e.getOnAuthFailure(),onProgress:e=>{u+=`${e.phase}: ${e.loaded}/${e.total}\n`}});if(d.ok)u+=`To ${c}\n`,u+=` ${l} -> ${l}\n`,o&&l&&(await nn({fs:e.lfs,dir:t,path:`branch.${l}.remote`,value:c}),await nn({fs:e.lfs,dir:t,path:`branch.${l}.merge`,value:`refs/heads/${l}`}),u+=`Branch '${l}' set up to track remote branch '${l}' from '${c}'.\n`);else{let n=(await Xt({fs:e.lfs,dir:t}).catch(()=>[])).find(e=>e.remote===c)?.url;return{stdout:``,stderr:`error: failed to push to '${c}': ${Xs(String(d.error),n)}\n`,exitCode:1}}return{stdout:u,stderr:``,exitCode:0}}function nd(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}const rd=`.git/rebase-merge`;async function id(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 cd(e,t):r.continue?await od(e,t):r.skip?await sd(e,t):await ad(e,t,i[0],r)}catch(e){return{stdout:``,stderr:`fatal: ${Js(e)}\n`,exitCode:128}}}async function ad(e,t,n,r){if(!n)return{stdout:``,stderr:`fatal: No upstream specified.
|
|
57
|
+
`,exitCode:128};if(await gd(e,t))return{stdout:``,stderr:`fatal: It seems that there is already a rebase-merge directory,
|
|
58
58
|
and I wonder if you are in the middle of another rebase.
|
|
59
59
|
`,exitCode:128};let i=await A({fs:e.lfs,dir:t});if(!i)return{stdout:``,stderr:`fatal: no such branch/commit (detached HEAD)
|
|
60
|
-
`,exitCode:128};let a=await
|
|
61
|
-
`)[0];try{await
|
|
60
|
+
`,exitCode:128};let a=await fd(e,t,n);if(!a)return{stdout:``,stderr:`fatal: invalid upstream '${n}'\n`,exitCode:128};let o=await E({fs:e.lfs,dir:t,ref:`HEAD`}),s=await md(e,t);if(s)return s;let[c]=await cn({fs:e.lfs,cache:e.cache,dir:t,oids:[o,a]});if(c===o)return await hd(e,t,i,a),{stdout:`Fast-forwarded ${i} to ${n}.\n`,stderr:``,exitCode:0};if(c===a)return{stdout:`Current branch ${i} is up to date.\n`,stderr:``,exitCode:0};let l=await pd(e,t,o,c),u=l.find(e=>e.parents>1);if(u)return{stdout:``,stderr:`error: commit ${u.oid} is a merge but no -m option was given.\nfatal: rebase failed\n`,exitCode:128};let d,f=!1;for(let e of nd(r[`strategy-option`]))e===`ours`||e===`theirs`||e===`union`?d=e:e===`diff3`&&(f=!0);return await hd(e,t,i,a),ld(e,t,{onto:a,origHead:o,headName:`refs/heads/${i}`,branch:i,todo:l.map(e=>e.oid),favor:d,diff3:f})}async function od(e,t){let n=await vd(e,t);if(!n)return dd();if(n.current){let{commit:r}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n.current});await dn({fs:e.lfs,cache:e.cache,dir:t,message:r.message,author:r.author,committer:await e.resolveAuthor(t)}),n.current=void 0}return ld(e,t,n)}async function sd(e,t){let n=await vd(e,t);return n?(await _n({fs:e.lfs,cache:e.cache,dir:t,ref:n.branch,force:!0}),n.current=void 0,ld(e,t,n)):dd()}async function cd(e,t){let n=await vd(e,t);return n?(await hd(e,t,n.branch,n.origHead),await bd(e,t),{stdout:``,stderr:``,exitCode:0}):dd()}async function ld(e,t,n){for(;n.todo.length>0;){let r=n.todo[0],{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=i.message.split(`
|
|
61
|
+
`)[0];try{await Tn({fs:e.lfs,cache:e.cache,dir:t,oid:r,abortOnConflict:!1,committer:await e.resolveAuthor(t),mergeDriver:gc({favor:n.favor,diff3:n.diff3})})}catch(i){if(i instanceof Error&&i.name===`MergeConflictError`){let o=i.data?.filepaths??[];return n.current=r,n.todo=n.todo.slice(1),await yd(e,t,n),ud(r,a,o)}throw i}n.todo=n.todo.slice(1)}return await bd(e,t),{stdout:`Successfully rebased and updated ${n.headName}.\n`,stderr:``,exitCode:0}}function ud(e,t,n){let r=e.slice(0,7),i=``;for(let e of n)i+=`CONFLICT (content): Merge conflict in ${e}\n`;return i+=`error: could not apply ${r}... ${t}\n`,i+=`hint: Resolve all conflicts manually, mark them as resolved with
|
|
62
62
|
`,i+=`hint: "git add/rm <conflicted_files>", then run "git rebase --continue".
|
|
63
63
|
`,i+=`hint: You can instead skip this commit: run "git rebase --skip".
|
|
64
64
|
`,i+=`hint: To abort and get back to the state before "git rebase", run "git rebase --abort".
|
|
65
|
-
`,{stdout:``,stderr:i,exitCode:1}}function
|
|
66
|
-
`,exitCode:128}}async function
|
|
65
|
+
`,{stdout:``,stderr:i,exitCode:1}}function dd(){return{stdout:``,stderr:`fatal: No rebase in progress?
|
|
66
|
+
`,exitCode:128}}async function fd(e,t,n){return await yc(e,t,n)}async function pd(e,t,n,r){let i=await hn({fs:e.lfs,cache:e.cache,dir:t,ref:n}),a=[];for(let e of i){if(e.oid===r)break;a.push({oid:e.oid,parents:e.commit.parent.length})}return a.reverse()}async function md(e,t){let n=await O({fs:e.lfs,cache:e.cache,dir:t}),r=!1,i=!1;for(let[,e,t,a]of n)(e!==0||a!==0)&&(t===a?e!==a&&(i=!0):r=!0);if(r)return{stdout:``,stderr:`error: cannot rebase: You have unstaged changes.
|
|
67
67
|
error: Please commit or stash them.
|
|
68
68
|
`,exitCode:128};if(i)return{stdout:``,stderr:`error: cannot rebase: Your index contains uncommitted changes.
|
|
69
69
|
error: Please commit or stash them.
|
|
70
|
-
`,exitCode:128}}async function
|
|
71
|
-
`).map(e=>e.replace(/^pick\s+/,``).trim()).filter(e=>e.length>0),o=await
|
|
72
|
-
`)}\n`),n.current?await e.fs.writeFile(`${r}/stopped-sha`,`${n.current}\n`):await
|
|
73
|
-
`,exitCode:128};if(await
|
|
74
|
-
`,exitCode:128}}if(n.includes(`--is-inside-work-tree`))try{return await
|
|
70
|
+
`,exitCode:128}}async function hd(e,t,n,r){await Gt({fs:e.lfs,dir:t,ref:`refs/heads/${n}`,value:r,force:!0}),await _n({fs:e.lfs,cache:e.cache,dir:t,ref:n,force:!0})}async function gd(e,t){return e.fs.exists(`${t}/${rd}/onto`)}async function _d(e,t,n){try{return(await e.fs.readTextFile(`${t}/${rd}/${n}`)).trim()}catch{return}}async function vd(e,t){let n=await _d(e,t,`onto`),r=await _d(e,t,`orig-head`),i=await _d(e,t,`head-name`);if(!n||!r||!i)return;let a=(await _d(e,t,`git-rebase-todo`)??``).split(`
|
|
71
|
+
`).map(e=>e.replace(/^pick\s+/,``).trim()).filter(e=>e.length>0),o=await _d(e,t,`strategy-opts`)??``,s,c=!1;for(let e of o.split(/\s+/).filter(e=>e.length>0))e===`ours`||e===`theirs`||e===`union`?s=e:e===`diff3`&&(c=!0);return{onto:n,origHead:r,headName:i,branch:i.replace(/^refs\/heads\//,``),current:await _d(e,t,`stopped-sha`),todo:a,favor:s,diff3:c}}async function yd(e,t,n){let r=`${t}/${rd}`;await e.fs.mkdir(r,{recursive:!0}),await e.fs.writeFile(`${r}/onto`,`${n.onto}\n`),await e.fs.writeFile(`${r}/orig-head`,`${n.origHead}\n`),await e.fs.writeFile(`${r}/head-name`,`${n.headName}\n`),await e.fs.writeFile(`${r}/git-rebase-todo`,`${n.todo.map(e=>`pick ${e}`).join(`
|
|
72
|
+
`)}\n`),n.current?await e.fs.writeFile(`${r}/stopped-sha`,`${n.current}\n`):await xd(e,`${r}/stopped-sha`);let i=[];n.favor&&i.push(n.favor),n.diff3&&i.push(`diff3`),i.length>0?await e.fs.writeFile(`${r}/strategy-opts`,`${i.join(` `)}\n`):await xd(e,`${r}/strategy-opts`)}async function bd(e,t){try{await e.fs.rm(`${t}/${rd}`,{recursive:!0})}catch{}}async function xd(e,t){try{await e.fs.rm(t)}catch{}}async function Sd(e,t,n){let[r,...i]=n;if(r===`add`&&i.length>=2){let[n,r]=i;return await bn({fs:e.lfs,dir:t,remote:n,url:r}),{stdout:``,stderr:``,exitCode:0}}if(r===`remove`||r===`rm`){let n=i[0];if(n)return await fn({fs:e.lfs,dir:t,remote:n}),{stdout:``,stderr:``,exitCode:0}}let a=n.includes(`-v`)||n.includes(`--verbose`),o=await Xt({fs:e.lfs,dir:t}),s=``;for(let{remote:e,url:t}of o)a?(s+=`${e}\t${t} (fetch)\n`,s+=`${e}\t${t} (push)\n`):s+=`${e}\n`;return{stdout:s,stderr:``,exitCode:0}}async function Cd(e,t,n){let r=n.includes(`--soft`),i=n.includes(`--hard`),a=n.includes(`--mixed`),o=n.filter(e=>!e.startsWith(`-`)),s=r||i||a;if(!s&&o.length===0){let n=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,,a]of n)a!==i&&await An({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}if(!s){let n=o.filter(e=>e!==`HEAD`);if(n.length===0){let n=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[r,i,,a]of n)a!==i&&await An({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}for(let r of n)await An({fs:e.lfs,cache:e.cache,dir:t,filepath:r});return{stdout:``,stderr:``,exitCode:0}}let c=o[0]??`HEAD`,l=await E({fs:e.lfs,dir:t,ref:c}),u=await A({fs:e.lfs,dir:t,fullname:!0});if(!u)return{stdout:``,stderr:`fatal: not on a branch, cannot reset
|
|
73
|
+
`,exitCode:128};if(await Gt({fs:e.lfs,dir:t,ref:u,value:l,force:!0}),r)return{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0};let d=new Set(await D({fs:e.lfs,cache:e.cache,dir:t}));for(let n of d)await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n});return await Td(e,t,l),i?(await Dd(e,t,l,d),await wd(e,t,l),{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0}):{stdout:`HEAD is now at ${l.slice(0,7)}\n`,stderr:``,exitCode:0}}async function wd(e,t,n){try{await mn({fs:e.lfs,cache:e.cache,dir:t,commit:n})}catch{}await Qc(e,t)}async function Td(e,t,n){let{tree:r}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:n});await Ed(e,t,n,r,``)}async function Ed(e,t,n,r,i){for(let a of r){let r=i?`${i}/${a.path}`:a.path;if(a.type===`blob`)await An({fs:e.lfs,cache:e.cache,dir:t,filepath:r,ref:n});else if(a.type===`tree`){let{tree:i}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:a.oid});await Ed(e,t,n,i,r)}}}async function Dd(e,t,n,r){let i=new Set,{tree:a}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:n});await Od(e,t,a,``,i);for(let r of i){let{blob:i}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r}),a=r.lastIndexOf(`/`);a!==-1&&await e.fs.mkdir(`${t}/${r.slice(0,a)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${r}`,i)}for(let n of r)if(!i.has(n))try{await e.fs.rm(`${t}/${n}`)}catch{}}async function Od(e,t,n,r,i){for(let a of n){let n=r?`${r}/${a.path}`:a.path;if(a.type===`blob`)i.add(n);else if(a.type===`tree`){let{tree:r}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:a.oid});await Od(e,t,r,n,i)}}}async function kd(e,t,n){if(n.includes(`--show-toplevel`))try{return{stdout:`${await On({fs:e.lfs,filepath:t})}\n`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`fatal: not a git repository
|
|
74
|
+
`,exitCode:128}}if(n.includes(`--is-inside-work-tree`))try{return await On({fs:e.lfs,filepath:t}),{stdout:`true
|
|
75
75
|
`,stderr:``,exitCode:0}}catch{return{stdout:`false
|
|
76
|
-
`,stderr:``,exitCode:0}}let r=n.find(e=>!e.startsWith(`-`))??`HEAD`;try{if(n.includes(`--abbrev-ref`))return r===`HEAD`?{stdout:`${await A({fs:e.lfs,dir:t})??`HEAD`}\n`,stderr:``,exitCode:0}:{stdout:`${r.replace(/^refs\/(?:heads|tags|remotes)\//,``)}\n`,stderr:``,exitCode:0};let i=await
|
|
77
|
-
`,exitCode:128};let s=await
|
|
76
|
+
`,stderr:``,exitCode:0}}let r=n.find(e=>!e.startsWith(`-`))??`HEAD`;try{if(n.includes(`--abbrev-ref`))return r===`HEAD`?{stdout:`${await A({fs:e.lfs,dir:t})??`HEAD`}\n`,stderr:``,exitCode:0}:{stdout:`${r.replace(/^refs\/(?:heads|tags|remotes)\//,``)}\n`,stderr:``,exitCode:0};let i=await _c(e,t,r),a=n.find(e=>e===`--short`||e.startsWith(`--short=`)),o=a?.includes(`=`)?Number(a.split(`=`)[1]):7;return{stdout:`${a?i.slice(0,Number.isFinite(o)?o:7):i}\n`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`fatal: ambiguous argument '${r}'\n`,exitCode:128}}}async function Ad(e,t,n){let{flags:r,positionals:i}=M(n,I.revert),a=r[`no-commit`]===!0,o=i[0];if(!o)return{stdout:``,stderr:`error: empty commit set passed
|
|
77
|
+
`,exitCode:128};let s=await yc(e,t,o);if(s===void 0)return{stdout:``,stderr:`fatal: bad revision '${o}'\n`,exitCode:128};let c;try{c=await E({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: your current branch does not have any commits yet
|
|
78
78
|
`,exitCode:128}}let{commit:l}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:s});if(l.parent.length!==1)return{stdout:``,stderr:`error: commit ${s} is a merge but no -m option was given.\nfatal: revert failed\n`,exitCode:128};let u=l.parent[0],d=l.message.split(`
|
|
79
|
-
`)[0],f=s.slice(0,7),p=await A({fs:e.lfs,dir:t})??`HEAD`;try{let n=await
|
|
79
|
+
`)[0],f=s.slice(0,7),p=await A({fs:e.lfs,dir:t})??`HEAD`;try{let n=await jd(e,t,c,s,u,{current:p,base:f,other:`parent of ${f} (${d})`});if(n.length>0){let e=``;for(let t of n)e+=`CONFLICT (content): Merge conflict in ${t}\n`;return e+=`error: could not revert ${f}... ${d}\n`,e+=`hint: after resolving the conflicts, mark them with 'git add <paths>',
|
|
80
80
|
`,e+=`hint: then commit the result.
|
|
81
|
-
`,{stdout:``,stderr:e,exitCode:1}}if(a)return{stdout:``,stderr:``,exitCode:0};let r=await e.resolveAuthor(t),i=`Revert "${d}"\n\nThis reverts commit ${s}.\n`;return{stdout:`[${p} ${(await
|
|
82
|
-
`,exitCode:128};for(let n of a){let a=await
|
|
81
|
+
`,{stdout:``,stderr:e,exitCode:1}}if(a)return{stdout:``,stderr:``,exitCode:0};let r=await e.resolveAuthor(t),i=`Revert "${d}"\n\nThis reverts commit ${s}.\n`;return{stdout:`[${p} ${(await dn({fs:e.lfs,cache:e.cache,dir:t,message:i,author:r,committer:r})).slice(0,7)}] Revert "${d}"\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`fatal: ${Js(e)}\n`,exitCode:128}}}async function jd(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 Md(e,t,r,o),c=await Md(e,t,i,o);if(s===c)continue;let l=await Md(e,t,n,o)??``,f,p=!1;if(l===(s??``))f=c??``;else{let e=ze(l,s??``,c??``,{labels:a});f=e.content,p=e.conflicts>0}if(!p&&c===void 0&&f===``){await Nd(e,t,o);continue}await e.fs.writeFile(`${t}/${o}`,u.encode(f)),p?d.push(o):await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:o})}return d}async function Md(e,t,n,r){try{let{blob:i}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return new TextDecoder().decode(i)}catch{return}}async function Nd(e,t,n){try{await e.fs.rm(`${t}/${n}`)}catch{}try{await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}catch{}}async function Pd(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 Fd(e,t,n,r,i);if(a)return a}return{stdout:``,stderr:``,exitCode:0}}async function Fd(e,t,n,r,i){let a=n.startsWith(`/`)?n:`${t}/${n}`,o=!1;try{o=(await e.fs.stat(a)).type===`directory`}catch{}if(o){if(!i)return{stdout:``,stderr:`fatal: not removing '${n}' recursively without -r\n`,exitCode:128};let a=(await D({fs:e.lfs,cache:e.cache,dir:t})).filter(e=>e===n||e.startsWith(n+`/`));for(let n of a)if(await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(`${t}/${n}`)}catch{}}else if(await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n}),!r)try{await e.fs.rm(a)}catch{}return null}async function Id(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 Ld(e,t,c);let l=c??`HEAD`,u=await yc(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=Rd(u,d,s,e.useColor),p=d.parent.length>0?d.parent[0]:void 0;if(p){let n=await Wl(e,t,p,u,{nameOnly:!1,stat:o});f+=n.stdout}else{let n=await au(e,t,u,o);f+=n}return{stdout:f,stderr:``,exitCode:0}}async function Ld(e,t,n){let r=n.indexOf(`:`),i=n.slice(0,r)||`HEAD`,a=n.slice(r+1),o=await yc(e,t,i);if(o===void 0)return{stdout:``,stderr:`fatal: bad object ${i}\n`,exitCode:128};let s=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:o,filepath:a});return{stdout:new TextDecoder().decode(s.blob),stderr:``,exitCode:0}}function Rd(e,t,n,r=!1){if(n)return n.replace(/%H/g,e).replace(/%h/g,e.slice(0,7)).replace(/%s/g,t.message.split(`
|
|
83
83
|
`)[0]).replace(/%an/g,t.author.name).replace(/%ae/g,t.author.email).replace(/%ad/g,new Date(t.author.timestamp*1e3).toLocaleString())+`
|
|
84
|
-
`;let i=`${
|
|
85
|
-
`)}\n\n`,i}async function
|
|
86
|
-
`,exitCode:128}}let a=await D({fs:e.lfs,cache:e.cache,dir:t,ref:`HEAD`}),o=await D({fs:e.lfs,cache:e.cache,dir:t}),s=new Set([...a,...o]),c=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[e,t,,n]of c)t===0&&n!==0&&s.add(e);let{dirtyFiles:l,indexEntries:u}=await
|
|
87
|
-
`,exitCode:1};let d=await
|
|
88
|
-
`)[0]}`,h=await e.resolveAuthor(t),g=Math.floor(Date.now()/1e3),_=await
|
|
89
|
-
`,exitCode:1}}let{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=await E({fs:e.lfs,dir:t,ref:`HEAD`}),o=i.parent[0]??a,{conflicts:s,warnings:c}=await
|
|
90
|
-
`:``;return{stdout:e,stderr:c.join(``)+t,exitCode:1}}return n?(i.parent.length>1?await
|
|
91
|
-
`,exitCode:1}}if(r===0){let{commit:n}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:a});return n.parent.length>1?await
|
|
92
|
-
`,exitCode:1}}let{commit:r}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n}),i=r.parent[0];return
|
|
93
|
-
`}let c=await
|
|
84
|
+
`;let i=`${cc(r,`33`,`commit ${e}`)}\n`;return i+=`Author: ${t.author.name} <${t.author.email}>\n`,i+=`Date: ${new Date(t.author.timestamp*1e3).toLocaleString()}\n\n`,i+=` ${t.message.replace(/\n/g,`
|
|
85
|
+
`)}\n\n`,i}async function zd(e,t,n){let r=n.includes(`--heads`),i=n.includes(`--tags`),a=n.find(e=>!e.startsWith(`-`)),o=``;if(!i){let n=await Ht({fs:e.lfs,dir:t});for(let r of n){let n=await E({fs:e.lfs,dir:t,ref:r}),i=`refs/heads/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}if(!r){let n=await Bt({fs:e.lfs,dir:t});for(let r of n){let n=await E({fs:e.lfs,dir:t,ref:r}),i=`refs/tags/${r}`;a&&!i.includes(a)||(o+=`${n} ${i}\n`)}}return{stdout:o,stderr:``,exitCode:0}}const Bd=new Uint8Array;async function Vd(e,t){return await e.fs.readFile(t,{encoding:`binary`})}function Hd(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 Ud(e){if(!e.includes(0))try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return}}async function Wd(e,t,n){let r=n[0];if(!r||r.startsWith(`-`))return Gd(e,t,n);switch(r){case`push`:case`save`:return Gd(e,t,n.slice(1));case`pop`:return Yd(e,t);case`apply`:return Xd(e,t);case`list`:return tf(e,t);case`drop`:return nf(e,t,n.slice(1));case`show`:return rf(e,t);default:return{stdout:``,stderr:`error: unknown subcommand: ${r}\n`,exitCode:1}}}async function Gd(e,t,n){let r=await A({fs:e.lfs,dir:t})??`HEAD`,i;try{i=await E({fs:e.lfs,dir:t,ref:`HEAD`})}catch{return{stdout:``,stderr:`fatal: cannot stash without a HEAD commit
|
|
86
|
+
`,exitCode:128}}let a=await D({fs:e.lfs,cache:e.cache,dir:t,ref:`HEAD`}),o=await D({fs:e.lfs,cache:e.cache,dir:t}),s=new Set([...a,...o]),c=await O({fs:e.lfs,cache:e.cache,dir:t});for(let[e,t,,n]of c)t===0&&n!==0&&s.add(e);let{dirtyFiles:l,indexEntries:u}=await Kd(e,t,i,s,a);if(l.length===0)return{stdout:``,stderr:`No local changes to save
|
|
87
|
+
`,exitCode:1};let d=await Jd(e,t,u),f=[i];try{let n=await E({fs:e.lfs,dir:t,ref:`refs/stash`});f.push(n)}catch{}let{commit:p}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:i}),m=`WIP on ${r}: ${i.slice(0,7)} ${p.message.split(`
|
|
88
|
+
`)[0]}`,h=await e.resolveAuthor(t),g=Math.floor(Date.now()/1e3),_=await xn({fs:e.lfs,dir:t,commit:{tree:d,parent:f,author:{...h,timestamp:g,timezoneOffset:0},committer:{...h,timestamp:g,timezoneOffset:0},message:m}});return await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:_,force:!0}),await qd(e,t,i,l),{stdout:`Saved working directory and index state ${m}\n`,stderr:``,exitCode:0}}async function Kd(e,t,n,r,i){let a=[],o=[];for(let s of r){let r=i.includes(s),c;try{c=await Vd(e,`${t}/${s}`)}catch{}if(r){let{blob:r}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:s});if(c===void 0)a.push({file:s,inHead:!0,existsInWorkdir:!1});else if(Hd(c,r)){let n=await Kt({fs:e.lfs,dir:t,blob:r});o.push({filepath:s,oid:n})}else{a.push({file:s,inHead:!0,existsInWorkdir:!0});let n=await Kt({fs:e.lfs,dir:t,blob:c});o.push({filepath:s,oid:n})}}else if(c!==void 0){a.push({file:s,inHead:!1,existsInWorkdir:!0});let n=await Kt({fs:e.lfs,dir:t,blob:c});o.push({filepath:s,oid:n})}}return{dirtyFiles:a,indexEntries:o}}async function qd(e,t,n,r){for(let i of r)if(i.inHead){let{blob:r}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:i.file});await e.fs.writeFile(`${t}/${i.file}`,r),await An({fs:e.lfs,cache:e.cache,dir:t,filepath:i.file,ref:n})}else{try{await e.fs.rm(`${t}/${i.file}`)}catch{}try{await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:i.file})}catch{}}}async function Jd(e,t,n){let r=new Map;for(let{filepath:e,oid:t}of n){let n=e.split(`/`),i=r;for(let e=0;e<n.length-1;e++){let t=i.get(n[e]);t?.type!==`tree`&&(t={type:`tree`,children:new Map},i.set(n[e],t)),i=t.children}i.set(n[n.length-1],{type:`blob`,oid:t,mode:`100644`})}let i=async n=>{let r=[];for(let[e,t]of n)if(t.type===`blob`)r.push({mode:t.mode,path:e,oid:t.oid,type:`blob`});else{let n=await i(t.children);r.push({mode:`040000`,path:e,oid:n,type:`tree`})}return await an({fs:e.lfs,dir:t,tree:r})};return i(r)}async function Yd(e,t){return Zd(e,t,!0)}async function Xd(e,t){return Zd(e,t,!1)}async function Zd(e,t,n){let r;try{r=await E({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
|
|
89
|
+
`,exitCode:1}}let{commit:i}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:r}),a=await E({fs:e.lfs,dir:t,ref:`HEAD`}),o=i.parent[0]??a,{conflicts:s,warnings:c}=await Qd(e,t,i.tree,o);if(s.length>0){let e=s.map(e=>`CONFLICT (content): Merge conflict in ${e}\n`).join(``),t=n?`The stash entry is kept in case you need it again.
|
|
90
|
+
`:``;return{stdout:e,stderr:c.join(``)+t,exitCode:1}}return n?(i.parent.length>1?await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:i.parent[1],force:!0}):await af(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{0} (${r.slice(0,7)})\n`,stderr:``,exitCode:0}):{stdout:``,stderr:``,exitCode:0}}async function Qd(e,t,n,r){let i=new Map,a=async(n,r)=>{let{tree:o}=await qt({fs:e.lfs,cache:e.cache,dir:t,oid:n});for(let n of o){let o=r?`${r}/${n.path}`:n.path;if(n.type===`blob`){let{blob:r}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n.oid});i.set(o,r)}else n.type===`tree`&&await a(n.oid,o)}};await a(n,``);let o=new Set;try{let n=await D({fs:e.lfs,cache:e.cache,dir:t,ref:r});for(let e of n)o.add(e)}catch{}let s=[],c=[];for(let[n,a]of i){let i=o.has(n)?await ef(e,t,r,n):Bd,l;try{l=await Vd(e,`${t}/${n}`)}catch{}let{merged:u,conflicted:d,binary:f}=$d(l,i,a),p=n.lastIndexOf(`/`);p!==-1&&await e.fs.mkdir(`${t}/${n.slice(0,p)}`,{recursive:!0}),await e.fs.writeFile(`${t}/${n}`,u),f&&c.push(`warning: Cannot merge binary files: ${n} (Updated upstream vs Stashed changes)\n`),d?s.push(n):Hd(u,i)||await sn({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}for(let n of o)if(!i.has(n)){try{await e.fs.rm(`${t}/${n}`)}catch{}await Qt({fs:e.lfs,cache:e.cache,dir:t,filepath:n})}return{conflicts:s,warnings:c}}function $d(e,t,n){if(e===void 0||Hd(e,n)||Hd(e,t))return{merged:n,conflicted:!1,binary:!1};if(Hd(n,t))return{merged:e,conflicted:!1,binary:!1};let r=Ud(e),i=Ud(t),a=Ud(n);if(r===void 0||i===void 0||a===void 0)return{merged:e,conflicted:!0,binary:!0};let o=ze(r,i,a,{labels:{current:`Updated upstream`,base:`stash base`,other:`Stashed changes`}});return{merged:new TextEncoder().encode(o.content),conflicted:o.conflicts>0,binary:!1}}async function ef(e,t,n,r){try{let{blob:i}=await Ut({fs:e.lfs,cache:e.cache,dir:t,oid:n,filepath:r});return i}catch{return Bd}}async function tf(e,t){let n=``,r=0;try{let i=await E({fs:e.lfs,dir:t,ref:`refs/stash`});for(;i;){let{commit:a}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:i});if(n+=`stash@{${r}}: ${a.message}\n`,r++,a.parent.length>1)i=a.parent[1];else break}}catch{}return{stdout:n,stderr:``,exitCode:0}}async function nf(e,t,n){let r=0,i=n.find(e=>e.startsWith(`stash@{`));if(i){let e=i.match(/stash@\{(\d+)\}/);e&&(r=parseInt(e[1],10))}let a;try{a=await E({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
|
|
91
|
+
`,exitCode:1}}if(r===0){let{commit:n}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:a});return n.parent.length>1?await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:n.parent[1],force:!0}):await af(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{0} (${a.slice(0,7)})\n`,stderr:``,exitCode:0}}let o=[],s=a;for(let n=0;n<r;n++){let{commit:n}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:s});if(o.push({oid:s,commit:n}),n.parent.length<=1)return{stdout:``,stderr:`error: stash@{${r}} not found\n`,exitCode:1};s=n.parent[1]}let c=s,{commit:l}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:c}),u=l.parent.length>1?l.parent[1]:void 0;for(let n=o.length-1;n>=0;n--){let r=o[n],i=[r.commit.parent[0]];u&&i.push(u),u=await xn({fs:e.lfs,dir:t,commit:{...r.commit,parent:i}})}return u?await Gt({fs:e.lfs,dir:t,ref:`refs/stash`,value:u,force:!0}):await af(e,t,`refs/stash`),{stdout:`Dropped refs/stash@{${r}} (${c.slice(0,7)})\n`,stderr:``,exitCode:0}}async function rf(e,t){let n;try{n=await E({fs:e.lfs,dir:t,ref:`refs/stash`})}catch{return{stdout:``,stderr:`error: No stash entries found.
|
|
92
|
+
`,exitCode:1}}let{commit:r}=await k({fs:e.lfs,cache:e.cache,dir:t,oid:n}),i=r.parent[0];return Wl(e,t,i,n,{nameOnly:!1,stat:!0})}async function af(e,t,n){try{await e.lfs.unlink(`${t}/.git/${n}`)}catch{}}async function of(e,t,n){let r=n.includes(`--short`)||n.includes(`-s`),i=n.includes(`--porcelain`),a=n.indexOf(`--`),o=a===-1?[]:n.slice(a+1);if(r||i)return lf(e,t,o);let s=``;try{let n=await A({fs:e.lfs,dir:t});s+=`On branch ${n??`(no branch)`}\n`}catch{s+=`Not on any branch.
|
|
93
|
+
`}let c=await Jc(e,t);c?(await $c(e,t)).length>0?(s+=`You have unmerged paths.
|
|
94
94
|
`,s+=` (fix conflicts and run "git commit")
|
|
95
95
|
`,s+=` (use "git merge --abort" to abort the merge)
|
|
96
96
|
|
|
@@ -98,25 +98,25 @@ error: Please commit or stash them.
|
|
|
98
98
|
`,s+=` (use "git commit" to conclude merge)
|
|
99
99
|
|
|
100
100
|
`):s+=`
|
|
101
|
-
`;let{staged:l,unstaged:u,untracked:d}=
|
|
101
|
+
`;let{staged:l,unstaged:u,untracked:d}=sf(await O({fs:e.lfs,cache:e.cache,dir:t,...Zs}),o);return s+=cf(l,u,d,c,e.useColor),{stdout:s,stderr:``,exitCode:0}}function sf(e,t){let n=[],r=[],i=[];for(let[a,o,s,c]of e)Tc(a,t)&&(o===0&&s===2&&c===0?i.push(a):c===2||o===1&&c===0&&s===0?n.push(a):s!==c&&s!==0?r.push(a):o===1&&s===0&&c===1&&r.push(a+` (deleted)`));return{staged:n,unstaged:r,untracked:i}}function cf(e,t,n,r=!1,i=!1){let a=``;if(e.length>0){a+=`Changes to be committed:
|
|
102
102
|
`,a+=` (use "git restore --staged <file>..." to unstage)
|
|
103
103
|
|
|
104
|
-
`;for(let t of e)a+=`\t${
|
|
104
|
+
`;for(let t of e)a+=`\t${cc(i,`32`,t)}\n`;a+=`
|
|
105
105
|
`}if(t.length>0){a+=`Changes not staged for commit:
|
|
106
106
|
`,a+=` (use "git add <file>..." to update what will be committed)
|
|
107
107
|
|
|
108
|
-
`;for(let e of t)a+=`\t${
|
|
108
|
+
`;for(let e of t)a+=`\t${cc(i,`31`,e)}\n`;a+=`
|
|
109
109
|
`}if(n.length>0){a+=`Untracked files:
|
|
110
110
|
`,a+=` (use "git add <file>..." to include in what will be committed)
|
|
111
111
|
|
|
112
|
-
`;for(let e of n)a+=`\t${
|
|
112
|
+
`;for(let e of n)a+=`\t${cc(i,`31`,e)}\n`;a+=`
|
|
113
113
|
`}return e.length===0&&t.length===0&&n.length===0&&!r&&(a+=`nothing to commit, working tree clean
|
|
114
|
-
`),a}async function
|
|
114
|
+
`),a}async function lf(e,t,n){let r=await O({fs:e.lfs,cache:e.cache,dir:t,...Zs}),i=``;for(let[e,t,a,o]of r){if(!Tc(e,n))continue;let r=uf(t,a,o);r&&(i+=`${r[0]}${r[1]} ${e}\n`)}return{stdout:i,stderr:``,exitCode:0}}function uf(e,t,n){return e===0&&t===2&&n===0?[`?`,`?`]:e===0&&t===2&&n===2?[`A`,` `]:e===0&&t===2&&n===3?[`A`,`M`]:e===1&&t===2&&n===1?[` `,`M`]:e===1&&t===2&&n===2?[`M`,` `]:e===1&&t===2&&n===3?[`M`,`M`]:e===1&&t===0&&n===0?[`D`,` `]:e===1&&t===0&&n===1?[` `,`D`]:null}const df=`usage: git symbolic-ref <name>
|
|
115
115
|
or: git symbolic-ref <name> <ref>
|
|
116
|
-
or: git symbolic-ref (-d | --delete) <name>`;function
|
|
117
|
-
`,exitCode:128};if(e.delete===!1||t&&(e.short!==void 0||e.recurse!==void 0))return
|
|
118
|
-
`,exitCode:128};let i=await
|
|
119
|
-
`,exitCode:128}}if(s!==void 0||i.length===0){let n=await Ut({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 En({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 an({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function Of(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 kf(e,t){let n=t.mtimeMs??0;return{type:e,mode:Of(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 Af(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 jf(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 Mf(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 Nf=`/objects/pack`,Pf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Ff=/\/objects\/[0-9a-f]{2}$/;function If(e){return e.endsWith(Nf)||Ff.test(e)}function Lf(e){let t=Ue(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Rf(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=Lf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(b(e));if(n)return kf(n.type,n.stats?Af(n.stats):{})},drop(e){t.delete(b(e))},clear(){t.clear()},size(){return t.size}}}function zf(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Rf(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,If(t)?void 0:{includeStats:!0});return r.prime(t,n),n.map(e=>e.name)},a=(e,t)=>{let n=e.fanouts.get(t);if(n!=null)return n;let r=i(t).then(e=>new Set(e));return e.fanouts.set(t,r),r},o=async e=>{if(!n)return!1;let t=Pf.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 We(`ENOENT`,`no such file or directory`,t);let r=Mf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,jf(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(Nf))return await i(e);let t=n.packDirs.get(e);if(t!=null)return[...await t];let r=i(e);return n.packDirs.set(e,r),[...await r]},async mkdir(t,n){let r=n??void 0;await c(t,()=>e.mkdir(t,r?.recursive===void 0?void 0:{recursive:r.recursive}))},async rmdir(t){r.clear(),await l(()=>e.rm(t))},async stat(t){let n=r.get(t);if(n)return n;let i=await e.stat(t);return kf(i.type===`directory`?`dir`:`file`,Af(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return kf(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,Af(i))},async readlink(t){if(e.isPathUnderMount(t))throw new We(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new We(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const Bf={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},Vf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function Hf(e){return e.endsWith(`.pack`)||e.endsWith(`.idx`)}function Uf(e){let t=e.replace(/\/{2,}/g,`/`);return t.length>1&&t.endsWith(`/`)?t.slice(0,-1):t}function Wf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Gf(e){let t=e?.code;return typeof t==`string`?t:void 0}function Kf(e){return typeof e==`string`?e.length*2:e.byteLength}function qf(e,t){return`${t?`u`:`b`} ${e}`}var Jf=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=Kf(t);return n>this.limits.maxFileBytes||this.retainedBytes+n>this.limits.maxTotalBytes?!1:(this.fileBytes.set(e,n),this.retainedBytes+=n,!0)}dropFile(e){let t=this.fileBytes.get(e);t!==void 0&&(this.fileBytes.delete(e),this.retainedBytes-=t)}forgetSelf(e){this.stats.delete(e),this.lstats.delete(e),this.dirs.delete(e);for(let t of[qf(e,!0),qf(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=Uf(e);this.forgetSelf(t);let n=Wf(t);this.dirs.delete(n),this.stats.delete(n),this.lstats.delete(n)}invalidateSubtree(e){let t=Uf(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 Yf(e,t,n,r){let i=e.get(t);if(i!=null)return i;let a=n();if(!r.admit())return a;e.set(t,a);let o=()=>{e.get(t)===a&&e.delete(t)};return a.then(e=>{r.keep&&!r.keep(e)&&o()},e=>{Vf.has(Gf(e)??``)||o()}),a}function Xf(e,t={}){let n=new Jf({...Bf,...t}),r=()=>n.hasRoom(),i=async t=>(await Yf(n.dirs,Uf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(Hf(t))return e.readFile(t,i);let a=qf(Uf(t),jf(i)),o=await Yf(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=>Yf(e,Uf(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 Qf(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function $f(e){return`${e.replace(/\/+$/,``)}/.git`}var ep=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=$f(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=$f(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=Qf(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=Qf(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=`${$f(e)}/objects/pack/`,n=Qf(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=Qf(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 tp=e(`git-commands`),np=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),rp=new Set([`clone`,`fetch`,`pull`]),ip=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),ap={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function op(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function sp(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 cp=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=zf(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 ep(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=zf(this.options.fs,{objectCache:!0}),r=ip.has(e)?Xf(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){tp.warn(`GitHub token force-renew after 401 failed`,{error:e instanceof Error?e.message:String(e)});return}await this.loadGithubToken();let t=this.resolveAuthToken();if(t)return{username:`x-access-token`,password:t}}}resolveAuthToken(e=this.currentEnv){if(this.githubToken)return this.githubToken;if(!e)return;let t=sp(e,`GH_TOKEN`);if(t)return t;let n=sp(e,`GITHUB_TOKEN`);if(n)return n}async githubCredential(e,t){return await this.ensureFreshGithubToken(t),await this.loadGithubToken(),this.resolveAuthToken(e)}async identity(){let e=await this.getGlobalFs();return{name:await tr(e,`user.name`)??this.authorName,email:await tr(e,`user.email`)??this.authorEmail}}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t!=null)return t;let n=et.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){tp.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 nn({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 tr(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await tr(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(sc(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),np.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:rp.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 du(t,n,r);case`clone`:return await Vc(t,n,r);case`add`:return await Ls(t,n,r);case`status`:return await lf(t,n,r);case`commit`:return await il(t,n,r);case`log`:return await yu(t,n,r);case`ls-remote`:return await Hu(t,n,r);case`branch`:return await fc(t,n,r);case`checkout`:return await pc(t,n,r);case`clean`:return await Mc(t,n,r);case`diff`:return await Vl(t,n,r);case`show`:return await zd(t,n,r);case`remote`:return await Td(t,n,r);case`fetch`:return await lu(t,n,r);case`pull`:return await rd(t,n,r);case`push`:return await id(t,n,r);case`merge`:return await Zu(t,n,r);case`merge-base`:return await ed(t,n,r);case`cherry-pick`:return await Ac(t,n,r);case`rebase`:return await sd(t,n,r);case`revert`:return await Nd(t,n,r);case`merge-file`:return await nd(t,n,r);case`reset`:return await Ed(t,n,r);case`config`:return await _l(t,n,r);case`tag`:return await Df(t,n,r);case`ls-files`:return await zu(t,n,r);case`ls-tree`:return await Wu(t,n,r);case`show-ref`:return await Hd(t,n,r);case`symbolic-ref`:return await Ef(t,n,r);case`stash`:return await qd(t,n,r);case`rm`:return await Ld(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await Md(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 uc({cliWhen:oc(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&sp(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?sp(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?sp(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,ap),r=t;for(let e of op(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of op(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 ${sn()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
|
|
116
|
+
or: git symbolic-ref (-d | --delete) <name>`;function ff(e){let t=Array.isArray(e)?e[e.length-1]:e;return typeof t==`boolean`?t:void 0}function pf(e){let t={};typeof e.m==`string`&&(t.m=e.m);let n=ff(e.delete);n!==void 0&&(t.delete=n);let r=ff(e.d);r!==void 0&&(t.d=r);let i=ff(e.quiet);i!==void 0&&(t.quiet=i);let a=ff(e.q);a!==void 0&&(t.q=a);let o=ff(e.short);o!==void 0&&(t.short=o);let s=ff(e.recurse);return s!==void 0&&(t.recurse=s),t}function mf(){return{stdout:``,stderr:`${df}\n`,exitCode:129}}function hf(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 gf(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 _f(e,t,n,r){let i=await gf(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 gf(e,t,o);if(r.kind!==`symbolic`)return o;o=r.target}}function vf(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 yf(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${df}\n`,exitCode:129};if(e.m!==void 0)return{stdout:``,stderr:`fatal: option '-m' is not supported because reflogs are not persisted
|
|
117
|
+
`,exitCode:128};if(e.delete===!1||t&&(e.short!==void 0||e.recurse!==void 0))return mf()}async function bf(e,t,n,r){if(n===`HEAD`)return{stdout:``,stderr:`fatal: deleting 'HEAD' is not allowed
|
|
118
|
+
`,exitCode:128};let i=await gf(e,t,n);return i.kind===`symbolic`?(await pn({fs:e.lfs,dir:t,ref:n}),{stdout:``,stderr:``,exitCode:0}):{stdout:``,stderr:r?``:`fatal: Cannot delete ${n}, not a symbolic ref\n`,exitCode:i.kind===`direct`?1:128}}async function xf(e,t,n,r){return hf(r)?(await Gt({fs:e.lfs,dir:t,ref:n,value:r,force:!0,symbolic:!0}),{stdout:``,stderr:``,exitCode:0}):{stdout:``,stderr:r.startsWith(`refs/`)?`fatal: Refusing to set '${n}' to invalid ref '${r}'\n`:`fatal: Refusing to point ${n} outside of refs/\n`,exitCode:128}}async function Sf(e,t,n,r){let i=await _f(e,t,n,r.recurse!==!1);return typeof i==`string`?{stdout:`${r.short?vf(i):i}\n`,stderr:``,exitCode:0}:r.quiet&&i.exitCode===1?{...i,stderr:``}:i}async function Cf(e,t,n){let{flags:r,positionals:i}=M(n,I[`symbolic-ref`]),a=r.delete===!0,o=yf(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?bf(e,t,i[0],!!r.quiet):mf():i.length===2?s?mf():xf(e,t,i[0],i[1]):i.length===1?Sf(e,t,i[0],pf(r)):mf()}async function wf(e,t,n){let{flags:r,positionals:i}=M(n,I.tag),a=r,o=a.delete===!0,s=L(a,`list`),c=a.annotate===!0,l=L(a,`message`),u=a.force===!0;if(o){let n=i[0];return n?(await on({fs:e.lfs,dir:t,ref:n}),{stdout:`Deleted tag '${n}'\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`fatal: tag name required
|
|
119
|
+
`,exitCode:128}}if(s!==void 0||i.length===0){let n=await Bt({fs:e.lfs,dir:t}),r=n,i=s||void 0;if(i){let e=RegExp(`^`+i.replace(/\*/g,`.*`)+`$`);r=n.filter(t=>e.test(t))}return{stdout:r.map(e=>`${e}\n`).join(``),stderr:``,exitCode:0}}let d=i[0],f=i[1];if(c||l){let n=await e.resolveAuthor(t);await Cn({fs:e.lfs,cache:e.cache,dir:t,ref:d,message:l??d,object:f,tagger:{...n,timestamp:Math.floor(Date.now()/1e3),timezoneOffset:0},force:u})}else await tn({fs:e.lfs,dir:t,ref:d,object:f,force:u});return{stdout:``,stderr:``,exitCode:0}}function Tf(e,t){let n=e===`dir`?16877:e===`symlink`?40960:33188;if(t===void 0)return n;let r=t&4095;return n&61440|r}function Ef(e,t){let n=t.mtimeMs??0;return{type:e,mode:Tf(e,t.mode),size:t.size??0,ino:t.ino??0,mtimeMs:n,ctimeMs:t.ctimeMs??n,uid:t.uid??1,gid:t.gid??1,dev:1,isFile:()=>e===`file`,isDirectory:()=>e===`dir`,isSymbolicLink:()=>e===`symlink`}}function Df(e){return{size:e.size,mtimeMs:e.mtime,ctimeMs:e.ctime,...e.ino===void 0?{}:{ino:e.ino},...e.uid===void 0?{}:{uid:e.uid},...e.gid===void 0?{}:{gid:e.gid},...e.mode===void 0?{}:{mode:e.mode}}}function Of(e){if(typeof e==`string`)return/^utf-?8$/i.test(e);if(e&&typeof e==`object`){let t=e.encoding;if(typeof t==`string`)return/^utf-?8$/i.test(t)}return!1}function kf(e){if(!e||typeof e!=`object`)return null;let{start:t,end:n}=e;return typeof t!=`number`||typeof n!=`number`?null:{start:t,end:n}}const Af=`/objects/pack`,jf=/^(.*\/objects)\/([0-9a-f]{2})\/[0-9a-f]{38,}$/,Mf=/\/objects\/[0-9a-f]{2}$/;function Nf(e){return e.endsWith(Af)||Mf.test(e)}function Pf(e){let t=Be(e);return e.type===`directory`?t?{type:`dir`,stats:t}:{type:`dir`}:t?{type:`file`,stats:t}:void 0}function Ff(e){let t=new Map;return{prime(n,r){if(r.length>e){t.clear();return}t.size+r.length>e&&t.clear();let i=b(n),a=i===`/`?`/`:`${i}/`;for(let e of r){let n=Pf(e);n?t.set(`${a}${e.name}`,n):t.delete(`${a}${e.name}`)}},get(e){let n=t.get(b(e));if(n)return Ef(n.type,n.stats?Df(n.stats):{})},drop(e){t.delete(b(e))},clear(){t.clear()},size(){return t.size}}}function If(e,t={}){let n=t.objectCache?{packDirs:new Map,fanouts:new Map}:void 0,r=Ff(Math.max(0,t.statCacheMax??1e5)),i=async t=>{let n=await e.readDir(t,Nf(t)?void 0:{includeStats:!0});return r.prime(t,n),n.map(e=>e.name)},a=(e,t)=>{let n=e.fanouts.get(t);if(n!=null)return n;let r=i(t).then(e=>new Set(e));return e.fanouts.set(t,r),r},o=async e=>{if(!n)return!1;let t=jf.exec(e);if(!t)return!1;try{return!(await a(n,t[1])).has(t[2])}catch{return!1}},s=()=>{n?.packDirs.clear(),n?.fanouts.clear()},c=async(e,t)=>(r.drop(e),await l(t)),l=async e=>{s();try{return await e()}finally{s()}};return{promises:{async readFile(t,n){if(await o(t))throw new Ve(`ENOENT`,`no such file or directory`,t);let r=kf(n);return r?await e.readFileRange(t,r.start,r.end):await e.readFile(t,Of(n)?{encoding:`utf-8`}:{encoding:`binary`})},async writeFile(t,n,r){await c(t,()=>e.writeFile(t,n))},async unlink(t){await c(t,()=>e.rm(t))},async readdir(e){if(!n||!e.endsWith(Af))return await i(e);let t=n.packDirs.get(e);if(t!=null)return[...await t];let r=i(e);return n.packDirs.set(e,r),[...await r]},async mkdir(t,n){let r=n??void 0;await c(t,()=>e.mkdir(t,r?.recursive===void 0?void 0:{recursive:r.recursive}))},async rmdir(t){r.clear(),await l(()=>e.rm(t))},async stat(t){let n=r.get(t);if(n)return n;let i=await e.stat(t);return Ef(i.type===`directory`?`dir`:`file`,Df(i))},async lstat(t){let n=r.get(t);if(n)return n;let i=await e.lstat(t);return Ef(i.type===`directory`?`dir`:i.type===`symlink`?`symlink`:`file`,Df(i))},async readlink(t){if(e.isPathUnderMount(t))throw new Ve(`EINVAL`,`symlinks not supported on mounted filesystems`,t);return e.readlink(t)},async symlink(t,n){if(e.isPathUnderMount(n))throw new Ve(`EINVAL`,`symlinks not supported on mounted filesystems`,n);await c(n,()=>e.symlink(t,n))}},clearStatCache(){r.clear()},statCacheSize(){return r.size()}}}const Lf={maxEntries:5e4,maxFileBytes:1048576,maxTotalBytes:8388608},Rf=new Set([`ENOENT`,`ENOTDIR`,`EISDIR`]);function zf(e){return e.endsWith(`.pack`)||e.endsWith(`.idx`)}function Bf(e){let t=e.replace(/\/{2,}/g,`/`);return t.length>1&&t.endsWith(`/`)?t.slice(0,-1):t}function Vf(e){let t=e.lastIndexOf(`/`);return t<0?`.`:t===0?`/`:e.slice(0,t)}function Hf(e){let t=e?.code;return typeof t==`string`?t:void 0}function Uf(e){return typeof e==`string`?e.length*2:e.byteLength}function Wf(e,t){return`${t?`u`:`b`} ${e}`}var Gf=class{limits;stats=new Map;lstats=new Map;dirs=new Map;files=new Map;fileBytes=new Map;retainedBytes=0;constructor(e){this.limits=e}hasRoom(){return this.stats.size+this.lstats.size+this.dirs.size+this.files.size<this.limits.maxEntries}retainFile(e,t){let n=Uf(t);return n>this.limits.maxFileBytes||this.retainedBytes+n>this.limits.maxTotalBytes?!1:(this.fileBytes.set(e,n),this.retainedBytes+=n,!0)}dropFile(e){let t=this.fileBytes.get(e);t!==void 0&&(this.fileBytes.delete(e),this.retainedBytes-=t)}forgetSelf(e){this.stats.delete(e),this.lstats.delete(e),this.dirs.delete(e);for(let t of[Wf(e,!0),Wf(e,!1)])this.files.delete(t),this.dropFile(t)}invalidatePath(e){let t=Bf(e);this.forgetSelf(t);let n=Vf(t);this.dirs.delete(n),this.stats.delete(n),this.lstats.delete(n)}invalidateSubtree(e){let t=Bf(e),n=`${t}/`;for(let e of[this.stats,this.lstats,this.dirs])for(let t of e.keys())t.startsWith(n)&&e.delete(t);for(let e of this.files.keys())e.slice(2).startsWith(n)&&(this.files.delete(e),this.dropFile(e));this.invalidatePath(t)}};function Kf(e,t,n,r){let i=e.get(t);if(i!=null)return i;let a=n();if(!r.admit())return a;e.set(t,a);let o=()=>{e.get(t)===a&&e.delete(t)};return a.then(e=>{r.keep&&!r.keep(e)&&o()},e=>{Rf.has(Hf(e)??``)||o()}),a}function qf(e,t={}){let n=new Gf({...Lf,...t}),r=()=>n.hasRoom(),i=async t=>(await Kf(n.dirs,Bf(t),()=>e.readdir(t),{admit:r})).slice(),a=async(t,i)=>{if(zf(t))return e.readFile(t,i);let a=Wf(Bf(t),Of(i)),o=await Kf(n.files,a,()=>e.readFile(t,i),{admit:r,keep:e=>n.retainFile(a,e)});return typeof o==`string`?o:new Uint8Array(o)},o=(e,t)=>n=>Kf(e,Bf(n),()=>t(n),{admit:r}),s=async(e,t,r=!1)=>{try{return await t()}finally{r?n.invalidateSubtree(e):n.invalidatePath(e)}};return{readFile:a,readdir:i,stat:o(n.stats,t=>e.stat(t)),lstat:o(n.lstats,t=>e.lstat(t)),readlink:t=>e.readlink(t),writeFile:(t,n,r)=>s(t,()=>e.writeFile(t,n,r)),unlink:t=>s(t,()=>e.unlink(t),!0),rmdir:t=>s(t,()=>e.rmdir(t),!0),mkdir:(t,n)=>s(t,()=>e.mkdir(t,n)),symlink:(t,n)=>s(n,()=>e.symlink(t,n))}}const Jf=e(`git-cache`);function Yf(e){for(let t of Object.getOwnPropertySymbols(e)){if(t.description!==`PackfileCache`)continue;let n=e[t];if(n instanceof Map)return n}}function Xf(e){return`${e.replace(/\/+$/,``)}/.git`}var Zf=class{fs;cache={};signatures=new Map;inFlight=0;maxResidentPacks;constructor(e,t={}){this.fs=e,this.maxResidentPacks=Math.max(1,t.maxResidentPacks??4)}setDeepVerification(e){this.cache.skipDeepPackVerification=!e}async beforeCommand(e){this.inFlight++;let t=Xf(e),n=this.signatures.get(t);if(n===void 0)return;let r=await this.packSignature(t);n!==r&&this.invalidate(e),this.signatures.set(t,r)}async afterCommand(e,t={}){this.inFlight=Math.max(0,this.inFlight-1);let n=Xf(e);t.wrotePacks&&(this.invalidate(e),this.signatures.delete(n)),this.inFlight===0&&(await this.evictFailedPacks(),await this.trimResidentPacks()),!this.signatures.has(n)&&this.hasCachedPacks(n)&&this.signatures.set(n,await this.packSignature(n))}async evictFailedPacks(){let e=Yf(this.cache);if(e)for(let[t,n]of[...e]){let r;try{r=await n}catch{e.delete(t);continue}if(!r){e.delete(t);continue}if(r.pack)try{await r.pack||(r.pack=null)}catch{r.pack=null}}}hasCachedPacks(e){let t=Yf(this.cache);if(!t)return!1;let n=`${e}/objects/pack/`;for(let e of t.keys())if(e.startsWith(n))return!0;return!1}invalidate(e){let t=`${Xf(e)}/objects/pack/`,n=Yf(this.cache);if(n)for(let e of[...n.keys()])e.startsWith(t)&&n.delete(e)}async residentPackCount(){return(await this.residentPacks()).length}async packSignature(e){let t=[];try{t=(await this.fs.readdir(`${e}/objects/pack`)).filter(e=>e.endsWith(`.idx`)||e.endsWith(`.pack`)).sort()}catch{}let n=`-`;try{n=String((await this.fs.lstat(`${e}/packed-refs`)).mtimeMs)}catch{}return`${t.join(`,`)}|${n}`}async residentPacks(){let e=Yf(this.cache);if(!e)return[];let t=[];for(let[n,r]of e){let e;try{e=await r}catch{continue}e?.pack&&t.push({key:n,index:e,usedAt:e._lastUsedAt??0})}return t.sort((e,t)=>e.usedAt-t.usedAt),t.map(({key:e,index:t})=>({key:e,index:t}))}async trimResidentPacks(){let e=await this.residentPacks();if(e.length<=this.maxResidentPacks)return;let t=e.slice(0,e.length-this.maxResidentPacks);for(let{index:e}of t)e.pack=null;Jf.debug(`unloaded packfile buffers past the resident bound`,{unloaded:t.length,resident:this.maxResidentPacks})}};const Qf=e(`git-commands`),$f=new Set([`clone`,`fetch`,`pull`,`push`,`ls-remote`]),ep=new Set([`clone`,`fetch`,`pull`]),tp=new Set([`add`,`branch`,`commit`,`diff`,`init`,`log`,`ls-files`,`ls-tree`,`merge-base`,`rev-parse`,`show`,`show-ref`,`status`,`symbolic-ref`,`tag`]),np={string:[`c`,`C`,`git-dir`,`work-tree`],boolean:[`help`,`version`,`no-pager`,`paginate`,`no-replace-objects`,`color`],alias:{h:`help`},stopEarly:!0};function rp(e){return e===void 0?[]:(Array.isArray(e)?e:[e]).map(e=>String(e))}function ip(e,t){if(e instanceof Map){let n=e.get(t);return n&&n.length>0?n:void 0}let n=e[t];return n&&n.length>0?n:void 0}var ap=class e{options;static globalFsByDbName=new Map;lfs;corsProxy;authorName;authorEmail;globalDbName;githubToken;currentEnv;currentConfigOverrides;currentStdin=``;cacheManager;constructor(e){this.options=e,this.lfs=If(e.fs,{statCacheMax:0}).promises,this.corsProxy=e.corsProxy,this.authorName=e.authorName??`User`,this.authorEmail=e.authorEmail??`user@example.com`,this.globalDbName=e.globalDbName??`slicc-fs-global`,this.cacheManager=new Zf(this.lfs,{...e.maxResidentPacks===void 0?{}:{maxResidentPacks:e.maxResidentPacks}})}contextFor(e,t){let n=If(this.options.fs,{objectCache:!0}),r=tp.has(e)?qf(n.promises):n.promises,i=this.createOnAuthFailure();return{ctx:{lfs:r,fs:this.options.fs,cache:this.cacheManager.cache,corsProxy:this.corsProxy,getOnAuth:()=>this.getOnAuth(),getOnAuthFailure:()=>i,resolveAuthor:e=>this.resolveAuthor(e,r),getGlobalFs:()=>this.getGlobalFs(),setGithubToken:e=>this.setGithubToken(e),getGithubToken:()=>this.githubToken,setDefaultAuthorName:e=>{this.authorName=e},setDefaultAuthorEmail:e=>{this.authorEmail=e},getConfigOverrides:()=>this.currentConfigOverrides,stdin:this.currentStdin,useColor:t},client:n}}getOnAuth(){let e=this.resolveAuthToken();if(e)return()=>({username:`x-access-token`,password:e})}createOnAuthFailure(){if(!this.options.ensureFreshGithubToken)return;let e=!1;return async()=>{if(e)return;e=!0;try{await this.options.ensureFreshGithubToken?.({force:!0})}catch(e){Qf.warn(`GitHub token force-renew after 401 failed`,{error:e instanceof Error?e.message:String(e)});return}await this.loadGithubToken();let t=this.resolveAuthToken();if(t)return{username:`x-access-token`,password:t}}}resolveAuthToken(e=this.currentEnv){if(this.githubToken)return this.githubToken;if(!e)return;let t=ip(e,`GH_TOKEN`);if(t)return t;let n=ip(e,`GITHUB_TOKEN`);if(n)return n}async githubCredential(e,t){return await this.ensureFreshGithubToken(t),await this.loadGithubToken(),this.resolveAuthToken(e)}async identity(){let e=await this.getGlobalFs();return{name:await Qn(e,`user.name`)??this.authorName,email:await Qn(e,`user.email`)??this.authorEmail}}getGlobalFs(){let t=e.globalFsByDbName.get(this.globalDbName);if(t!=null)return t;let n=Ze.create({dbName:this.globalDbName});return e.globalFsByDbName.set(this.globalDbName,n),n}async loadGithubToken(){try{let e=(await(await this.getGlobalFs()).readTextFile(`/workspace/.git/github-token`)).trim();this.githubToken=e||void 0}catch{this.githubToken=void 0}}async ensureFreshGithubToken(e){try{await this.options.ensureFreshGithubToken?.(e)}catch(e){Qf.warn(`GitHub token freshness check failed; continuing with existing auth`,{error:e instanceof Error?e.message:String(e)})}}async setGithubToken(e){let t=e.trim(),n=await this.getGlobalFs();if(!t){try{await n.rm(`/workspace/.git/github-token`)}catch{}this.githubToken=void 0;return}await n.writeFile(`/workspace/.git/github-token`,t),this.githubToken=t}async resolveAuthor(e,t){let n=async n=>{try{return await $t({fs:t,dir:e,path:n})}catch{return}},r=this.currentConfigOverrides,i=await this.getGlobalFs();return{name:r?.get(`user.name`)??await n(`user.name`)??await Qn(i,`user.name`)??this.authorName,email:r?.get(`user.email`)??await n(`user.email`)??await Qn(i,`user.email`)??this.authorEmail}}async execute(e,t,n,r,i){if(e.length===0)return this.help();let a=this.stripGlobalFlags(ic(e),t);if(a.versionRequested&&a.remainingArgs.length===0)return this.version();if(a.helpRequested||a.remainingArgs.length===0)return this.help();let o=a.effectiveCwd,[s,...c]=a.remainingArgs,l=I[s]??{},u=M(c,l),d=Object.hasOwn(l.alias??{},`h`);if(u.flags.help||u.flags.h&&!d)return this.help();this.currentEnv=n,this.currentConfigOverrides=a.configOverrides,this.currentStdin=r??``;let f=this.invocationColor(e,n,a.configOverrides,i),{ctx:p,client:m}=this.contextFor(s,f);try{return this.cacheManager.setDeepVerification(this.shouldVerifyPackfiles()),await this.cacheManager.beforeCommand(o),$f.has(s)&&await this.ensureFreshGithubToken(),await this.loadGithubToken(),await this.dispatch(s,p,o,c)}catch(e){return{stdout:``,stderr:`fatal: ${Js(e)}\n`,exitCode:128}}finally{await this.cacheManager.afterCommand(o,{wrotePacks:ep.has(s)}),this.currentEnv=void 0,this.currentConfigOverrides=void 0,this.currentStdin=``,m.clearStatCache()}}async dispatch(e,t,n,r){switch(e){case`init`:return await cu(t,n,r);case`clone`:return await Rc(t,n,r);case`add`:return await Ps(t,n,r);case`status`:return await of(t,n,r);case`commit`:return await tl(t,n,r);case`log`:return await gu(t,n,r);case`ls-remote`:return await zu(t,n,r);case`branch`:return await lc(t,n,r);case`checkout`:return await uc(t,n,r);case`clean`:return await kc(t,n,r);case`diff`:return await Rl(t,n,r);case`show`:return await Id(t,n,r);case`remote`:return await Sd(t,n,r);case`fetch`:return await ou(t,n,r);case`pull`:return await ed(t,n,r);case`push`:return await td(t,n,r);case`merge`:return await Ju(t,n,r);case`merge-base`:return await Zu(t,n,r);case`cherry-pick`:return await Dc(t,n,r);case`rebase`:return await id(t,n,r);case`revert`:return await Ad(t,n,r);case`merge-file`:return await $u(t,n,r);case`reset`:return await Cd(t,n,r);case`config`:return await ml(t,n,r);case`tag`:return await wf(t,n,r);case`ls-files`:return await Iu(t,n,r);case`ls-tree`:return await Vu(t,n,r);case`show-ref`:return await zd(t,n,r);case`symbolic-ref`:return await Cf(t,n,r);case`stash`:return await Wd(t,n,r);case`rm`:return await Pd(t,n,r);case`mv`:{let{mv:e}=await import(`./mv-ohCkaQgo.js`);return await e(t,n,r)}case`rev-parse`:return await kd(t,n,r);case`help`:return this.help();case`version`:return this.version();default:return{stdout:``,stderr:`git: '${e}' is not a git command. See 'git help'.\n`,exitCode:127}}}invocationColor(e,t,n,r){return sc({cliWhen:rc(e),colorUi:n?.get(`color.ui`),noColorEnv:!!(t&&ip(t,`NO_COLOR`)),stdoutIsTTY:r?.stdoutIsTTY===!0,term:t?ip(t,`TERM`):void 0})}shouldVerifyPackfiles(){let e=this.currentEnv,t=e?ip(e,`SLICC_GIT_VERIFY_PACKS`):void 0;return t===void 0?this.options.verifyPackfiles===!0:t!==`0`&&t.toLowerCase()!==`false`}stripGlobalFlags(e,t){let n=M(e,np),r=t;for(let e of rp(n.flags.C))e!==``&&(r=e.startsWith(`/`)?e:`${r}/${e}`);let i=new Map;for(let e of rp(n.flags.c)){if(e===``)continue;let t=e.indexOf(`=`);if(t<0){i.set(e.toLowerCase(),``);continue}i.set(e.slice(0,t).toLowerCase(),e.slice(t+1))}return{effectiveCwd:r,remainingArgs:n.positionals,helpRequested:!!(n.flags.help||n.flags.h),versionRequested:!!n.flags.version,configOverrides:i}}version(){return{stdout:`git version 2.43.0 (isomorphic-git ${rn()})\n`,stderr:``,exitCode:0}}help(){return{stdout:`usage: git <command> [<args>]
|
|
120
120
|
|
|
121
121
|
Available commands:
|
|
122
122
|
init Initialize a new repository
|
|
@@ -151,10 +151,10 @@ Available commands:
|
|
|
151
151
|
config Get and set repository options
|
|
152
152
|
rev-parse Pick out and massage parameters
|
|
153
153
|
|
|
154
|
-
`,stderr:``,exitCode:0}}};const
|
|
155
|
-
`).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var
|
|
156
|
-
`)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(
|
|
157
|
-
`)){let e=n.indexOf(`=`);e>0&&t.set(n.slice(0,e),n.slice(e+1).replace(/\r$/,``))}return t}function
|
|
154
|
+
`,stderr:``,exitCode:0}}};const op={maxTraversalEntries:1e5,maxTraversalDepth:256,maxTraversalWork:1e5,maxGlobOperations:1e5,maxLiveBytes:67108864,maxInputBytes:33554432,maxArchiveBytes:134217728,maxArchiveCompressedBytes:67108864,maxArchiveEntryBytes:67108864,maxArchiveEntries:1e5};function sp(e,t){return e?{...op,...t}:t}const cp=new Set([`SHLVL`,`_`]);function lp(e){let t=e.split(`\0`);if(t.length<4)return null;let[n=``,r=``,i=``,...a]=t;if(!/^\d+$/.test(n)||!i.startsWith(`/`))return null;let o={};for(let e of a){let t=e.indexOf(`=`);t>0&&(o[e.slice(0,t)]=e.slice(t+1))}let s=r.trim()===``?[]:r.trim().split(/\s+/).map(Number);return{status:Number(n),pipeStatus:s,cwd:i,env:o}}function up(e,t=[]){let n=new Set([...cp,...t]);return Object.fromEntries(Object.entries(e).filter(([e])=>!n.has(e)))}function dp(e,t){if(t!==`bytes`)return e;let n=new Uint8Array(e.length);for(let t=0;t<e.length;t++)n[t]=e.charCodeAt(t)&255;return new TextDecoder().decode(n)}async function fp(e,t){let n=[],r=tr(e=>n.push(e)),i=await t.run([`bash`,`-c`,`__slicc_save() { local __s=\$1 __p=\$2 __c __n; { printf "%s\\0%s\\0%s\\0" "\$__s" "\$__p" "\$PWD"; for __c in {A..Z} {a..z} _; do eval "__slicc_names=(\\"\\\${!\${__c}@}\\")"; for __n in "\${__slicc_names[@]}"; do [[ \${!__n@a} == *x* ]] && printf "%s=%s\\0" "\$__n" "\${!__n}"; done; done; } >&97 2>/dev/null; }; trap '__slicc_save "\$?" "\${PIPESTATUS[*]}"' EXIT; ${e}`],t.env,[[97,r]]),a=n.reduce((e,t)=>e+t.length,0),o=new Uint8Array(a),s=0;for(let e of n)o.set(e,s),s+=e.length;return{stdout:dp(i.stdout,i.stdoutKind),stderr:i.stderr,exitCode:i.exitCode,state:a>0?lp(new TextDecoder().decode(o)):null}}const pp=`/home/user`;async function mp(e){try{let t=await e.readDir(`/home`),n=null,r=null;for(let i of t)if(i.type===`directory`){r??=i.name;try{let t=(await e.stat(`/home/${i.name}/.welcome.json`)).mtime??0;(!n||t>n.mtime)&&(n={name:i.name,mtime:t})}catch{}}let i=n?.name??r;return i?`/home/${i}`:pp}catch{return pp}}function hp(e){return e.replace(/\/+$/,``).split(`/`).pop()||`user`}function gp(e){let t=[],n=``,r=0;for(;r<e.length;){let i=e[r];if(i===`"`){for(r++;r<e.length&&e[r]!==`"`;)n+=e[r],r++;r++}else if(i===`'`){for(r++;r<e.length&&e[r]!==`'`;)n+=e[r],r++;r++}else i===`\\`&&r+1<e.length&&e[r+1]===` `?(n+=` `,r+=2):/\s/.test(i)?(n.length>0&&(t.push(n),n=``),r++):(n+=i,r++)}return n.length>0&&t.push(n),t}var _p=class{aggregator=null;now;explicitSink;scrubLabel;ids=new Map;seq=0;constructor(e={}){this.now=e.now??Date.now,this.explicitSink=e.sink,this.scrubLabel=e.scrubLabel}allocateId(e=`p`){return this.seq+=1,`${e}-${this.seq}`}hasSink(){return this.resolveSink()!==null}setAggregator(e){this.aggregator=e}emit(e){let t=this.aggregator;if(t&&e.id!==t.id)return t.onChild(e),!0;let n=this.resolveSink();if(!n)return e.phase===`end`&&this.ids.delete(e.id),!1;let r=this.ids.get(e.id);if(e.phase===`update`){if(!r)return!1;let t=this.now();return t-r.lastUpdateAt<250?!1:(r.lastUpdateAt=t,this.deliver(r,n,e),!0)}if(e.phase===`start`){let t={lastUpdateAt:-1/0,rawLabel:e.label,label:this.scrubbed(e.label),tail:Promise.resolve()};return this.ids.set(e.id,t),this.deliver(t,n,e),!0}return r?(this.ids.delete(e.id),this.deliver(r,n,e),!0):!1}resolveSink(){if(this.explicitSink)return this.explicitSink;let e=je();if(!e)return null;let t=e.onUpdate;return e=>{t({content:[{type:Cs,progress:e}]})}}scrubbed(e){return this.scrubLabel?vp(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=yp(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:yp(i)})})}};async function vp(e,t){if(!t)return t;try{return await e(t)}catch{return`[label withheld: secret scrub unavailable]`}}function yp(e,t=80){return e.length>t?`${e.slice(0,t-1)}…`:e}function bp(e,t){return t.length?`${e} ${t.join(` `)}`:e}function xp(e){try{let t=new URL(e);return`↓ ${t.host}${t.pathname===`/`?``:t.pathname}`}catch{return`↓ ${e}`}}function Sp(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:xp(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 Cp={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}},wp=new Set([`xargs`,`watch`,`parallel`,`bash`,`sh`,`eval`,`source`,`.`]);function Tp(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 Ep(e,t){switch(e.type){case`CommandSubstitution`:return Lp(e.body,t);case`DoubleQuoted`:{let n=0;for(let r of e.parts){let e=Ep(r,t);if(e===null)return null;n+=e}return n}case`ProcessSubstitution`:return null;default:return 0}}function Dp(e,t){let n=0;for(let r of e.parts){let e=Ep(r,t);if(e===null)return null;n+=e}return n}function Op(e,t){let n=0;for(let r of e.assignments){if(!r.value)continue;let e=Dp(r.value,t);if(e===null)return null;n+=e}for(let r of e.args){let e=Dp(r,t);if(e===null)return null;n+=e}if(!e.name)return n;let r=Tp(e.name);if(r===null||wp.has(r))return null;if(!t.has(r))return n;n+=1;let i=Cp[r];if(i){let r=e.args.map(Tp);if(r.some(e=>e===null))return null;let a=r[i(r)];if(a===void 0)return n;if(wp.has(a))return null;t.has(a)&&(n+=1)}return n}function kp(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 Ap(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||Tp(r.name)!==`seq`)return null;let i=r.args.map(e=>{let t=Tp(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 jp(e){let t=0;for(let n of e){let e=n.type===`Word`?Mp(n.word):kp(n);if(e===null)return null;t+=e}return t}function Mp(e){let t=Ap(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=jp(t.items);if(e===null)return null;n*=e;break}default:return null}return n}function Np(e){let t=0;for(let n of e){let e=Mp(n);if(e===null)return null;t+=e}return t}function Pp(e,t){let n=0;for(let r of e){let e=Ip(r,t);if(e===null)return null;n+=e}return n}function Fp(e,t){switch(e.type){case`SimpleCommand`:return Op(e,t);case`For`:{if(!e.words)return null;let n=Np(e.words),r=Pp(e.body,t);return n===null||r===null?null:e.words.filter(e=>Ap(e)!==null&&t.has(`seq`)).length+n*r}case`Subshell`:case`Group`:return Pp(e.body,t);case`FunctionDef`:return 0;default:return null}}function Ip(e,t){let n=0;for(let r of e.pipelines)for(let e of r.commands){let r=Fp(e,t);if(r===null)return null;n+=r}return n}function Lp(e,t){return Pp(e.statements,t)}function Rp(e,t){let n=Lp(e,t);return{totalSteps:n!==null&&n>0?n:null}}function zp(e){return e.split(`
|
|
155
|
+
`).map(e=>e.trim()).find(e=>e.length>0&&!e.startsWith(`#`))||`bash`}var Bp=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 Vp=globalThis.setTimeout.bind(globalThis);function Hp(e){let t=e/1e3;return`sleep ${Number.isInteger(t)?t:t.toFixed(1)}`}function Up(e,t={}){let n=t.now??Date.now,r=t.setTimeout??Vp,i=t.isAborted??(()=>!1),a=t.label??Hp,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 Wp=globalThis.setTimeout.bind(globalThis);function Gp(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 Kp(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 qp(e,t,n={}){let r=n.now??Date.now,i=n.setTimeout??Wp;return{...e,async execute(n,a){let o=Kp(n),s=o>=0?Gp(n[o]):null;if(!t.hasSink()||s===null||s<=0)return e.execute(n,a);let c=t.allocateId(`timeout`),l=bp(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 Jp=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 Yp(e,t,n={}){if((n.skip??Jp).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=bp(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 Xp={stdout:``,stderr:``,exitCode:130};function Zp(e,t){if(!t)return e();if(t.aborted)return Promise.resolve(Xp);let n,r=new Promise(e=>{n=()=>e(Xp),t.addEventListener(`abort`,n,{once:!0})});return Promise.race([e(),r]).finally(()=>{n&&t.removeEventListener(`abort`,n)})}const Qp=new Map([[`jsh`,`node`]]);function $p(e,t){return`${Qp.get(e)??e} ${t.join(` `)}`.trim()}function em(e){return pt(`sudo`,e)}async function tm(e,t){let n=e.trim();if(!n||ut(ct(t.policy,n),t.defaultDisposition??`allow`)!==`require-approval`)return{allowed:!0};let r=await t.broker.requestApproval({kind:`command`,detail:n,...t.reason?{reason:t.reason}:{}});if(r.decision===`deny`)return{allowed:!1,message:em(r),exitCode:77};if(r.decision===`always`){let e=r.pattern?.trim()||n;await t.persistGrant(e)}return{allowed:!0}}const nm=`__SLICC_SUDO_REASON`,rm=/^#!/;function im(e){let t=[];for(let n of e.split(`
|
|
156
|
+
`)){let e=n.trim();if(e.length===0){if(t.length>0)break;continue}if(!e.startsWith(`#`))break;if(rm.test(e))continue;let r=e.replace(/^#+/,``).trim();r&&t.push(r)}return Ft(t.join(` `))}function am(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 om=1e4;async function sm(e,t,n){let r={method:e,headers:we({"Content-Type":`application/json`}),signal:AbortSignal.timeout(om)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(Ce(`/api/secrets${t}`),r),n=await e.json().catch(()=>({}));return{ok:e.ok,status:e.status,data:n}}catch(e){return{ok:!1,status:0,data:{error:cm(e)}}}}function cm(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${om/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function lm(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function um(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 dm(){return{async list(){let[e,t]=await Promise.all([sm(`GET`,``),sm(`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(lm(`saved`,hm(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(lm(`session`,hm(t.data)));return{entries:n,warnings:r}},async getInfo(e){return um(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await sm(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await sm(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await sm(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(hm(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await sm(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(hm(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await sm(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(hm(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await sm(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(hm(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function fm(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(lm(`saved`,e?.error)),n?.entries||i.push(lm(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return um(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 pm(){return fm(e=>am(e))}function mm(){return fm(e=>{let{type:t,...n}=e;return Ae(t,n)})}function hm(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function gm(e){switch(e){case`extension-direct`:return pm();case`extension-delegate`:return mm();default:return dm()}}const _m=`git-credential-slicc`,vm=new Map([[_m,`git`],[`git-upload-pack`,`git`],[`git-receive-pack`,`git`],[`git-upload-archive`,`git`],[`git-remote-http`,`git`],[`git-remote-https`,`git`]]),ym=[`github.com`,`*.github.com`],bm=/(_TOKEN|_PAT)$/;function xm(e){let t=new Map;for(let n of e.split(`
|
|
157
|
+
`)){let e=n.indexOf(`=`);e>0&&t.set(n.slice(0,e),n.slice(e+1).replace(/\r$/,``))}return t}function Sm(e){let t=e.get(`host`)??``;try{return new URL(`https://${t}`).hostname}catch{return``}}async function Cm(e,t,n,r){for(let r of t){let t=await n.getMasked(r).catch(()=>null);if(t&&t.maskedValue===e)return t.domains}return r}async function wm(e,t,n){let r=await t.githubToken?.(e).catch(()=>void 0);if(!r)return;let i=t.githubDomains?.()??ym;return{token:r,domains:r===e.GH_TOKEN||r===e.GITHUB_TOKEN?await Cm(r,[`GH_TOKEN`,`GITHUB_TOKEN`],n,ym):i}}async function Tm(e,t){let{entries:n}=await t.list().catch(()=>({entries:[]})),r=n.filter(e=>bm.test(e.name)&&!e.domains.includes(`*`)).filter(t=>Ta(t.domains,e)).sort((t,n)=>Number(!t.domains.includes(e))-Number(!n.domains.includes(e))||t.name.localeCompare(n.name));for(let e of r){let n=await t.getMasked(e.name).catch(()=>null);if(n)return{token:n.maskedValue,domains:n.domains}}}async function Em(e,t,n){let r=Sm(e);if(e.get(`protocol`)!==`https`||!r)return{stdout:``,stderr:``,exitCode:0};let i=(n.backend??(()=>gm(Oe())))(),a=await wm(t,n,i),o=a&&Ta(a.domains,r)?a:await Tm(r,i);return o?{stdout:`username=${e.get(`username`)||`x-access-token`}\npassword=${o.token}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:``,exitCode:0}}async function Dm(e,t,n){let r=e.get(`password`),i=await n.githubToken?.(t).catch(()=>void 0);return r&&i===r&&await n.githubToken?.(t,{force:!0}).catch(()=>void 0),{stdout:``,stderr:``,exitCode:0}}function Om(e={}){return S(_m,async(t,n)=>{let r=t[0];if(r===void 0||r===`-h`||r===`--help`)return{stdout:`usage: git-credential-slicc <get|store|erase>
|
|
158
158
|
|
|
159
159
|
The git credential helper for native git in the wasm realm, configured by
|
|
160
160
|
default (credential.helper=slicc). Reads git's key=value request on stdin.
|
|
@@ -165,7 +165,7 @@ default (credential.helper=slicc). Reads git's key=value request on stdin.
|
|
|
165
165
|
a host outside the credential's domains, or for plain http.
|
|
166
166
|
store Nothing to do: SLICC keeps its own credentials.
|
|
167
167
|
erase Renews SLICC's GitHub token when it was the one rejected.
|
|
168
|
-
`,stderr:``,exitCode:+(r===void 0)};let i=Object.fromEntries(n.env),a=
|
|
168
|
+
`,stderr:``,exitCode:+(r===void 0)};let i=Object.fromEntries(n.env),a=xm(P(n.stdin));return r===`get`?Em(a,i,e):r===`erase`?Dm(a,i,e):{stdout:``,stderr:``,exitCode:0}})}const km={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 Am(e,t=[],n){let r=km[e],i=t.length?` data-action-data='${JSON.stringify({filters:t}).replace(/'/g,`'`)}'`:``,a=e===`directory`&&n?`<div class="sprinkle-action-card__meta">Target: ${wt(n)}</div>`:``;return`
|
|
169
169
|
<div class="sprinkle-action-card">
|
|
170
170
|
<div class="sprinkle-action-card__header">
|
|
171
171
|
<div class="sprinkle-action-card__title-group">${r.title}${a}</div>
|
|
@@ -176,11 +176,11 @@ default (credential.helper=slicc). Reads git's key=value request on stdin.
|
|
|
176
176
|
<button class="sprinkle-btn sprinkle-btn--primary" data-action="approve" data-picker="${e}"${i}>${r.approve}</button>
|
|
177
177
|
</div>
|
|
178
178
|
</div>
|
|
179
|
-
`}const Pm=Symbol(`mount:timeout`),Fm=Symbol(`mount:no-panel`);async function Im(e,t){let n=Me.generateId(),r=!1,i=!1,a=Ne({id:n,html:Nm(`directory`,[],t),onAction:(e,t)=>Lm(e,t)},e.onUpdate).catch(e=>{if(r)return Pm;if(i)return Fm;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Me.cancel(n,`mount: timed out`),e(Pm)},3e5)}),c=new Promise(e=>{Me.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Me.cancel(n,`mount: panel did not render the approval card`),e(Fm))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===Pm)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===Fm)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 Lm(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await Vt(n.idbKey);return e?(await zt(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 Rm(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function zm(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function Bm(e){for(let t of e.args){let e=Rm(t);if(e===`-o`||e===`--out`)return!0}return!1}function Vm(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 Hm(e){Rm(e.name)!==`say`||Bm(e)||(e.args=[zm(`-o`),zm(`-`),...e.args])}function Um(e,t){if(Array.isArray(e)){for(let n of e)Um(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`&&Vm(r);r?.type===`SimpleCommand`&&a&&Hm(r),Um(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){Um(n.body,!0);return}for(let e of Object.values(n))Um(e,t)}const Wm={name:`say-stdio`,transform(e){return Um(e.ast,!1),{ast:e.ast}}};function Gm(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function Km(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function qm(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:Km(e.installAll)},affinity:{apps:Gm(e.apps),tasks:Gm(e.tasks),role:Gm(e.role),purpose:Gm(e.purpose)},priority:n}})}const Jm={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*Jm.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*Jm.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=Jm.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=Jm.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 Xm(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 Zm(e){let t=new Set;try{let n=await e.readDir(Ei);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 Qm(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 $m(e){return typeof e!=`string`||!e?null:te(e)||null}function eh(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 th(e,t){try{let n=$m(t);if(!n)return[];let r=await e(`${Oi}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?qm(be(r.body).data):[]}catch{return[]}}async function nh(e){let t;try{t=await e(ki,{headers:{Accept:`application/json`}})}catch(e){throw Error(Ri(e,ki))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return qm(be(t.body).data)}function rh(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 ih(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 Yi(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 ah(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 Xi(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 Ji(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 oh(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 ih(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=rh(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 Yi(p,m,n,s,!1);r.count++;let _=((Date.now()-h)/1e3).toFixed(1),v=(Date.now()-a)/r.count,ee=Math.round((i-r.count)*v/1e3),te=r.count<i?` (~${ee}s remaining)`:``;g.ok?(l.push({ok:!0,name:m}),u+=`[${r.count}/${i}] Installed "${m}" from ${e} (${_}s)${te}\n`):(l.push({ok:!1,name:m,error:g.error}),u+=`[${r.count}/${i}] Failed "${m}" from ${e}: ${g.error}${te}\n`)}return{errors:[],results:l,output:u}}async function sh(e,t,n,r,i,a,o,s,c,l){let u=await zi(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 ah(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 Ji(n,r,m,h,l,u,!1);g.exitCode===0?(f+=`[${i.count}/${a}] Installed "${h}" from ${e}${p}\n`,d.push({ok:!0,name:h})):(f+=`[${i.count}/${a}] Failed "${h}" from ${e}: ${g.stderr.trim()}${p}\n`,d.push({ok:!1,name:h,error:g.stderr.trim()}))}return{errors:[],results:d,output:f}}function ch(e,t,n){let r=``;for(let i of e){if(i.status===`rejected`){t.push(`upskill: unexpected error: ${i.reason}`);continue}r+=i.value.output;for(let e of i.value.errors)t.push(e);for(let e of i.value.results)e.ok?n.push(e.name):e.error&&t.push(`upskill: ${e.error}`)}return r}async function lh(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=Qm(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=Qm(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([nh(t),th(t,a.company),Zm(e)]);o=eh(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${ki}: ${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=ch(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await Ii(a,o,t);return c.status===`error`?sh(n,i,a,o,d,u,r,s,t,e):oh(n,i,ji(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Ki(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function uh(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let dh,fh;async function ph(e){if(dh)return dh;if(fh!==void 0)return fh;fh=(async()=>{let t;try{t=await e(Ai,{headers:{Accept:`application/json`}})}catch(e){throw Error(Ri(e,Ai))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=be(t.body),r=Array.isArray(n)?n:n.skills??[];return dh=r,r})();try{return await fh}catch(e){throw fh=void 0,e}}async function mh(e,t){let n=await ph(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 hh=/^[A-Za-z0-9._-]+$/;function gh(e){return!e||e===`.`||e===`..`?!1:hh.test(e)}function _h(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(`/`)||!gh(r)||!gh(i))return null;let a=uh(r);return gh(a)?{hostname:a,task:i}:null}function vh(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 yh(e,t){let n=e.updated?` · updated ${e.updated}`:``;return[`> [!NOTE] **Imported from browse.sh** — original slug: \`${t}\``,`>`,"> **SLICC adaptation:** use `playwright-cli` — you are running inside the user's real browser session, so the bot-detection workarounds the upstream skill assumes are usually unnecessary.",`>`,`> Source: <https://browse.sh/skills/${t}>${n}`].join(`
|
|
180
|
-
`)}function
|
|
181
|
-
`)}function
|
|
182
|
-
`}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function
|
|
183
|
-
`;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function
|
|
179
|
+
`}const jm=Symbol(`mount:timeout`),Mm=Symbol(`mount:no-panel`);async function Nm(e,t){let n=Me.generateId(),r=!1,i=!1,a=Ne({id:n,html:Am(`directory`,[],t),onAction:(e,t)=>Pm(e,t)},e.onUpdate).catch(e=>{if(r)return jm;if(i)return Mm;throw e}),o,s=new Promise(e=>{o=setTimeout(()=>{r=!0,Me.cancel(n,`mount: timed out`),e(jm)},3e5)}),c=new Promise(e=>{Me.waitForMount(n,5e3).then(()=>{},()=>{r||(i=!0,Me.cancel(n,`mount: panel did not render the approval card`),e(Mm))})}),l=await Promise.race([a,s,c]);if(o&&clearTimeout(o),l===jm)throw Error(`mount: timed out after 5 minute(s) waiting for user approval`);if(l===Mm)throw Error(`mount: chat panel did not render the approval card — open the chat panel and retry`);if(!l)throw Error(`mount: tool UI not available`);let u=l;if(u.denied)throw Error(`mount: denied by user`);if(u.cancelled)throw Error(`mount: cancelled`);if(u.error)throw Error(`mount: ${u.error}`);if(!u.handle)throw Error(`mount: no directory selected`);return u.handle}async function Pm(e,t){if(e!==`approve`)return{denied:!0};let n=t;if(n?.handleInIdb&&typeof n.idbKey==`string`)try{let e=await Rt(n.idbKey);return e?(await It(e),{approved:!0,handle:e}):{error:`No directory handle found in storage`}}catch(e){return{error:e instanceof Error?e.message:String(e)}}if(n?.cancelled)return{cancelled:!0};if(n?.error)return{error:String(n.error)};try{return{approved:!0,handle:await window.showDirectoryPicker({mode:`readwrite`})}}catch(e){return e instanceof Error&&e.name===`AbortError`?{cancelled:!0}:{error:e instanceof Error?e.message:String(e)}}}function Fm(e){let t=e?.parts;return t?.length!==1||t[0]?.type!==`Literal`?null:t[0].value??null}function Im(e){return{type:`Word`,parts:[{type:`Literal`,value:e}]}}function Lm(e){for(let t of e.args){let e=Fm(t);if(e===`-o`||e===`--out`)return!0}return!1}function Rm(e){for(let t of e.redirections){let e=t.operator,n=t.fd;if(e===`&>`||e===`&>>`||(e===`>`||e===`>>`||e===`>|`)&&(n==null||n===1))return!0}return!1}function zm(e){Fm(e.name)!==`say`||Lm(e)||(e.args=[Im(`-o`),Im(`-`),...e.args])}function Bm(e,t){if(Array.isArray(e)){for(let n of e)Bm(n,t);return}if(!e||typeof e!=`object`)return;let n=e;if(n.type===`Pipeline`&&Array.isArray(n.commands)){let e=n.commands;for(let n=0;n<e.length;n++){let r=e[n],i=e.length>1&&n<e.length-1,a=t||i||r?.type===`SimpleCommand`&&Rm(r);r?.type===`SimpleCommand`&&a&&zm(r),Bm(r,a)}return}if(n.type===`CommandSubstitution`||n.type===`ProcessSubstitution`){Bm(n.body,!0);return}for(let e of Object.values(n))Bm(e,t)}const Vm={name:`say-stdio`,transform(e){return Bm(e.ast,!1),{ast:e.ast}}};function Hm(e){if(e?.trim())return e.split(`,`).map(e=>e.trim()).filter(Boolean)}function Um(e){if(!e)return!1;let t=e.trim().toLowerCase();return t===`true`||t===`1`||t===`yes`}function Wm(e){return e.map(e=>{let t=e.boost?parseFloat(e.boost):NaN,n=Number.isFinite(t)?t:void 0;return{name:e.name,displayName:e.displayName||e.name,description:e.description||``,source:{repo:e.repo,path:e.path||void 0,skill:e.skill||void 0,installAll:Um(e.installAll)},affinity:{apps:Hm(e.apps),tasks:Hm(e.tasks),role:Hm(e.role),purpose:Hm(e.purpose)},priority:n}})}const Gm={apps:3,tasks:2,role:1,purpose:1};function Km(e,t){return e.map(e=>{let n=0,r=[],i=(e.affinity.apps??[]).filter(e=>t.apps.includes(e));i.length&&(n+=i.length*Gm.apps,r.push(`apps(${i.join(`, `)})`));let a=(e.affinity.tasks??[]).filter(e=>t.tasks.includes(e));return a.length&&(n+=a.length*Gm.tasks,r.push(`tasks(${a.join(`, `)})`)),(e.affinity.role??[]).includes(t.role)&&(n+=Gm.role,r.push(`role(${t.role})`)),(e.affinity.purpose??[]).includes(t.purpose)&&(n+=Gm.purpose,r.push(`purpose(${t.purpose})`)),n*=e.priority??1,{entry:e,score:n,matchReasons:r}}).filter(e=>e.score>0).sort((e,t)=>t.score-e.score)}function qm(e){let t=`upskill ${e.repo}`;return e.path&&(t+=` --path ${e.path}`),e.installAll?t+=` --all`:e.skill&&(t+=` --skill ${e.skill}`),t}async function Jm(e){let t=new Set;try{let n=await e.readDir(Ci);for(let e of n)e.type===`directory`&&t.add(e.name)}catch{}let n=[`.agents`,`.claude`];try{let r=await e.readDir(`/`);for(let i of r)if(i.type===`directory`)for(let r of n)try{let n=`/${i.name}/${r}/skills`,a=await e.readDir(n);for(let e of a)e.type===`directory`&&t.add(e.name)}catch{}}catch{}return t}function Ym(e){return{purpose:e.purpose??``,role:e.role??``,tasks:Array.isArray(e.tasks)?e.tasks:[],apps:Array.isArray(e.apps)?e.apps:[],name:e.name??``,company:typeof e.company==`string`?e.company:void 0}}function Xm(e){return typeof e!=`string`||!e?null:te(e)||null}function Zm(e,t){if(t.length===0)return e;let n=new Set(t.map(e=>e.name));return[...e.filter(e=>!n.has(e.name)),...t]}async function Qm(e,t){try{let n=Xm(t);if(!n)return[];let r=await e(`${Ti}${n}.json`,{headers:{Accept:`application/json`}});return r.status===200?Wm(be(r.body).data):[]}catch{return[]}}async function $m(e){let t;try{t=await e(Ei,{headers:{Accept:`application/json`}})}catch(e){throw Error(Fi(e,Ei))}if(t.status!==200)throw Error(`HTTP ${t.status}`);return Wm(be(t.body).data)}function eh(e,t,n){let r=e.entry.source;if(r.skill){let e=n.get(r.skill);return e?{skillPath:e,skillName:r.skill}:r.path?{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:r.skill}:{error:`skill "${r.skill}" not found in ${t}`}}if(r.path)return{skillPath:r.path.replace(/^\/|\/$/g,``),skillName:e.entry.name};let i=n.get(e.entry.name);return i?{skillPath:i,skillName:e.entry.name}:{error:`skill "${e.entry.name}" not found in ${t} and no explicit path provided`}}async function th(e,t,n,r,i,a,o,s,c){let l=e.entry.source,u=l.path.replace(/^\/|\/$/g,``),d=o<s?` (~${Math.round((s-o)*(Date.now()-c)/o/1e3)}s remaining)`:``,f=[];for(let[e,t]of r)(t===u||t.startsWith(`${u}/`))&&f.push({name:e,path:t});if(f.length===0){let n=`no skills found under "${l.path}" in ${t}`;return{results:[{ok:!1,name:e.entry.name,error:n}],line:`[${o}/${s}] Failed "${e.entry.name}" bundle from ${t}: ${n}${d}\n`}}let p=Date.now(),m=0,h=0,g=[];for(let e of f){if(i.has(e.name))continue;let t=await Ki(e.path,e.name,n,a,!1);t.ok?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.error}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${o}/${s}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${o}/${s}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${o}/${s}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function nh(e,t,n,r,i,a,o,s,c,l){let u=e.entry.source,d=s<c?` (~${Math.round((c-s)*(Date.now()-l)/s/1e3)}s remaining)`:``,f=await qi(n,r,i,u.path);if(f.error)return{results:[{ok:!1,name:e.entry.name,error:f.error}],line:`[${s}/${c}] Failed "${e.entry.name}" bundle from ${t}: ${f.error}${d}\n`};let p=Date.now(),m=0,h=0,g=[];for(let e of f.skills){if(a.has(e.name))continue;let t=await Gi(n,r,e.path,e.name,o,i,!1);t.exitCode===0?(g.push({ok:!0,name:e.name}),m++):(g.push({ok:!1,name:e.name,error:t.stderr.trim()}),h++)}let _=((Date.now()-p)/1e3).toFixed(1),v;return v=m===0&&h===0?`[${s}/${c}] Skipped "${e.entry.name}" bundle from ${t}: all sub-skills already installed${d}\n`:h===0?`[${s}/${c}] Installed "${e.entry.name}" bundle (${m} skill(s)) from ${t} (${_}s)${d}\n`:`[${s}/${c}] Installed "${e.entry.name}" bundle (${m}/${m+h} skill(s)) from ${t} (${_}s)${d}\n`,{results:g,line:v}}async function rh(e,t,n,r,i,a,o,s){let c=new Map;for(let e of Object.keys(n))if(e.endsWith(`/SKILL.md`)){let t=e.replace(/\/SKILL\.md$/,``);c.set(t.split(`/`).pop()||t,t)}let l=[],u=``;for(let d of t){let t=d.entry.source;if(t.installAll&&t.path){r.count++;let t=await th(d,e,n,c,o,s,r.count,i,a);l.push(...t.results),u+=t.line;continue}let f=eh(d,e,c);if(`error`in f){l.push({ok:!1,name:d.entry.name,error:f.error}),r.count++;let t=r.count<i?` (~${Math.round((i-r.count)*(Date.now()-a)/r.count/1e3)}s remaining)`:``;u+=`[${r.count}/${i}] Failed "${d.entry.name}" from ${e}: ${f.error}${t}\n`;continue}let{skillPath:p,skillName:m}=f,h=Date.now(),g=await Ki(p,m,n,s,!1);r.count++;let _=((Date.now()-h)/1e3).toFixed(1),v=(Date.now()-a)/r.count,ee=Math.round((i-r.count)*v/1e3),te=r.count<i?` (~${ee}s remaining)`:``;g.ok?(l.push({ok:!0,name:m}),u+=`[${r.count}/${i}] Installed "${m}" from ${e} (${_}s)${te}\n`):(l.push({ok:!1,name:m,error:g.error}),u+=`[${r.count}/${i}] Failed "${m}" from ${e}: ${g.error}${te}\n`)}return{errors:[],results:l,output:u}}async function ih(e,t,n,r,i,a,o,s,c,l){let u=await Ii(c),d=[],f=``;for(let c of t){let t=c.entry.source;i.count++;let p=i.count<a?` (~${Math.round((a-i.count)*(Date.now()-o)/i.count/1e3)}s remaining)`:``;if(t.installAll&&t.path){let t=await nh(c,e,n,r,u,s,l,i.count,a,o);d.push(...t.results),f+=t.line;continue}let m=t.path?t.path.replace(/^\/|\/$/g,``):c.entry.name,h=t.skill||c.entry.name,g=await Gi(n,r,m,h,l,u,!1);g.exitCode===0?(f+=`[${i.count}/${a}] Installed "${h}" from ${e}${p}\n`,d.push({ok:!0,name:h})):(f+=`[${i.count}/${a}] Failed "${h}" from ${e}: ${g.stderr.trim()}${p}\n`,d.push({ok:!1,name:h,error:g.stderr.trim()}))}return{errors:[],results:d,output:f}}function ah(e,t,n){let r=``;for(let i of e){if(i.status===`rejected`){t.push(`upskill: unexpected error: ${i.reason}`);continue}r+=i.value.output;for(let e of i.value.errors)t.push(e);for(let e of i.value.results)e.ok?n.push(e.name):e.error&&t.push(`upskill: ${e.error}`)}return r}async function oh(e,t,n){let r=Date.now(),i=(e,t=[])=>({installedNames:[],errors:t,skipped:e,log:``,elapsedSeconds:(Date.now()-r)/1e3}),a=null;if(n)a=Ym(n);else try{let t=await e.readDir(`/home`);for(let n of t)try{let t=await e.readTextFile(`/home/${n.name}/.welcome.json`);a=Ym(JSON.parse(t));break}catch{}}catch{}if(!a)return i(`no-profile`);let o,s;try{let[n,r,i]=await Promise.all([$m(t),Qm(t,a.company),Jm(e)]);o=Zm(n,r),s=i}catch(e){return i(`catalog-fetch`,[`upskill: failed to fetch skill catalog from ${Ei}: ${e instanceof Error?e.message:String(e)}`])}let c=Km(o,a).filter(e=>!s.has(e.entry.name));if(c.length===0)return i(`all-installed`);let l=new Map;for(let e of c){let t=e.entry.source.repo,n=l.get(t);n?n.push(e):l.set(t,[e])}let u=c.length,d={count:0},f=[],p=[],m=``;m=ah(await Promise.allSettled(Array.from(l.entries()).map(async([n,i])=>{let[a,o]=n.split(`/`),c=await Ni(a,o,t);return c.status===`error`?ih(n,i,a,o,d,u,r,s,t,e):rh(n,i,Oi(c.files),d,u,r,s,e)})),f,p);let h=(Date.now()-r)/1e3;return p.length>0&&(await Ui(),m+=`\nInstalled ${p.length} recommended skill(s) in ${h.toFixed(1)}s\n`),{installedNames:p,errors:f,skipped:null,log:m,elapsedSeconds:h}}function sh(e){let t=e.toLowerCase();return t.startsWith(`www.`)?t.slice(4):t}let ch,lh;async function uh(e){if(ch)return ch;if(lh!==void 0)return lh;lh=(async()=>{let t;try{t=await e(Di,{headers:{Accept:`application/json`}})}catch(e){throw Error(Fi(e,Di))}if(t.status!==200)throw Error(`browse.sh returned HTTP ${t.status}`);let n=be(t.body),r=Array.isArray(n)?n:n.skills??[];return ch=r,r})();try{return await lh}catch(e){throw lh=void 0,e}}async function dh(e,t){let n=await uh(t),r=e.trim().toLowerCase();return r?n.filter(e=>[e.title??``,e.name??``,e.description??``,e.hostname??``,...e.tags??[]].join(` `).toLowerCase().includes(r)).map(e=>({name:e.slug,displayName:e.title||e.name||e.task||e.slug,summary:e.description||``,source:`browseSh`,qualityScore:null,installHint:`upskill browse:${e.hostname}/${e.task}`,sourceRepo:e.hostname})):[]}const fh=/^[A-Za-z0-9._-]+$/;function ph(e){return!e||e===`.`||e===`..`?!1:fh.test(e)}function mh(e){let t;if(e.startsWith(`browse:`))t=e.slice(7);else{let n=e.match(/^https:\/\/browse\.sh\/skills\/([^/?#]+)\/([^/?#]+?)\/?$/);n&&(t=`${n[1]}/${n[2]}`)}if(!t)return null;let n=t.indexOf(`/`);if(n<0)return null;let r=t.slice(0,n),i=t.slice(n+1);if(!r||!i||i.includes(`/`)||!ph(r)||!ph(i))return null;let a=sh(r);return ph(a)?{hostname:a,task:i}:null}function hh(e,t){let n=e.match(/^---\r?\n([\s\S]*?)\r?\n---/);if(n)for(let e of n[1].split(/\r?\n/)){let n=e.match(/^([A-Za-z_][A-Za-z0-9_-]*)\s*:\s*(.*)$/);if(!n||n[1]!==t)continue;let r=n[2].trim();return(r.startsWith(`"`)&&r.endsWith(`"`)||r.startsWith(`'`)&&r.endsWith(`'`))&&(r=r.slice(1,-1)),r||void 0}}function gh(e,t){let n=e.updated?` · updated ${e.updated}`:``;return[`> [!NOTE] **Imported from browse.sh** — original slug: \`${t}\``,`>`,"> **SLICC adaptation:** use `playwright-cli` — you are running inside the user's real browser session, so the bot-detection workarounds the upstream skill assumes are usually unnecessary.",`>`,`> Source: <https://browse.sh/skills/${t}>${n}`].join(`
|
|
180
|
+
`)}function _h(e){return e.replace(/(?:^|\n)> \[!NOTE\] \*\*Imported from browse\.sh\*\*[\s\S]*?(?:\n\n|$)/,`
|
|
181
|
+
`)}function vh(e,t){let n=e.match(/^(---\r?\n[\s\S]*?\r?\n---)(\r?\n|$)/);return n?`${n[1]}${n[2]||`
|
|
182
|
+
`}\n${t}\n\n${e.slice(n[0].length)}`:`${t}\n\n${e}`}async function yh(e,t,n){let r=`${e}/${t}`,i=`${Di}/${e}/${t}`,a;try{let e=await n(i,{headers:{Accept:`application/json`}});if(e.status===404)return{ok:!1,error:`browse.sh skill "${r}" not found`};if(e.status!==200)return{ok:!1,error:`browse.sh returned HTTP ${e.status} for "${r}"`};a=be(e.body)}catch(e){return{ok:!1,error:`failed to fetch browse.sh skill "${r}": ${Fi(e,i)}`}}let o;if(a.skillMdUrl)try{let e=await n(a.skillMdUrl,{headers:{Accept:`text/plain`}});e.status===200&&(o=xe(e.body))}catch{}if(!o&&a.skillMd&&(o=a.skillMd),!o)return{ok:!1,error:`browse.sh skill "${r}" has no SKILL.md content`};let s=hh(o,`name`),c=t.replace(/-[A-Za-z0-9]{4,8}$/,``),l=s||c||t;if(!ph(l)||l.length>64)return{ok:!1,error:`refusing to install browse.sh skill with unsafe name "${l}"`};if(!ph(e))return{ok:!1,error:`refusing to install browse.sh skill with unsafe hostname "${e}"`};let u=gh(a,r);return{ok:!0,dirName:`browse-${e}-${l}`,slug:r,content:vh(o,u)}}async function bh(e,t,n,r,i=!1){let a=await yh(e,t,r);if(!a.ok)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let{dirName:o,slug:s,content:c}=a,l=`${Ci}/${o}`;try{if(await n.stat(l),!i)return{stdout:``,stderr:`upskill: skill "${o}" already exists (use --force to overwrite)\n`,exitCode:1};await Pi(n,l,await Ji(n,o))}catch{}return await n.mkdir(l,{recursive:!0}),await n.writeFile(`${l}/SKILL.md`,c),await zi(n,o,{kind:`browse.sh`,source:s,skill:o,files:[`SKILL.md`]}),await Ui(),{stdout:`Installed skill "${o}" from browse.sh (${s})\n`,stderr:``,exitCode:0}}function xh(){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 Sh(e){switch(e){case`native`:return`native`;case`agents`:return`.agents`;case`claude`:return`.claude`;case`marketplace`:return`marketplace`;case`plugin`:return`plugin`}}function Ch(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)} ${Sh(t.source).padEnd(11)} ${i}\n`}return o+=`\n${xh()}`,o}function wh(e){let t=`Skill: ${e.name}\n`;if(t+=`Description: ${e.description||`(none)`}\n`,t+=`Source: ${Sh(e.source)}\n`,t+=`Source root: ${e.sourceRoot}\n`,e.skillFilePath&&(t+=`Instructions: ${e.skillFilePath}\n`),e.shadowedPaths?.length){t+=`Shadowed paths:
|
|
183
|
+
`;for(let n of e.shadowedPaths)t+=` - ${n}\n`}return t}function Th(){return{stdout:`usage: upskill <command> [options]
|
|
184
184
|
|
|
185
185
|
Install skills from GitHub repositories, the Tessl registry, or browse.sh.
|
|
186
186
|
|
|
@@ -196,7 +196,7 @@ Commands:
|
|
|
196
196
|
tessl:<name> Install skill from Tessl registry
|
|
197
197
|
browse:<hostname>/<task> Install site-specific skill from browse.sh
|
|
198
198
|
|
|
199
|
-
${
|
|
199
|
+
${xh()}
|
|
200
200
|
GitHub Installation:
|
|
201
201
|
upskill owner/repo List available skills in repo
|
|
202
202
|
upskill owner/repo --skill name Install specific skill
|
|
@@ -268,14 +268,14 @@ Examples:
|
|
|
268
268
|
upskill browse:weather.gov/get-forecast-1uezib
|
|
269
269
|
upskill list --outdated
|
|
270
270
|
upskill update --dry-run
|
|
271
|
-
`,stderr:``,exitCode:0}}async function
|
|
271
|
+
`,stderr:``,exitCode:0}}async function Eh(e,t,n,r){let i=e.slice(1).find(e=>e.startsWith(`-`));if(i)return{stdout:``,stderr:`skill: unknown option "${i}" for list\n`,exitCode:1};let a=await n.discoverSkills(t);if(a.length===0)return{stdout:`No discoverable skills found.\n\n${xh()}Install skills with: upskill owner/repo --all\n`,stderr:``,exitCode:0};let{collisions:o}=await lr(t,or(r));return{...ur(`skill`,Ch(a,`Discoverable skills`),o,{builtinNames:new Set(rt())}),exitCode:0}}function Dh(e){return S(`skill`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return{stdout:`usage: skill <command> [options]
|
|
272
272
|
|
|
273
273
|
Commands:
|
|
274
274
|
list List discoverable skills
|
|
275
275
|
info <name> Show details about a skill
|
|
276
276
|
read <name> Read the SKILL.md instructions
|
|
277
277
|
|
|
278
|
-
${
|
|
278
|
+
${xh()}
|
|
279
279
|
For installing skills from registries or GitHub, use 'upskill':
|
|
280
280
|
upskill search "query" Search registries (Tessl + browse.sh)
|
|
281
281
|
upskill owner/repo --list List skills in GitHub repo
|
|
@@ -287,69 +287,64 @@ Examples:
|
|
|
287
287
|
skill list
|
|
288
288
|
skill info bluebubbles
|
|
289
289
|
skill read bluebubbles
|
|
290
|
-
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-
|
|
291
|
-
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:
|
|
290
|
+
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-DefIX_AF.js`).then(e=>e.r);try{switch(r){case`list`:return Eh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
|
|
291
|
+
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:wh(r),stderr:``,exitCode:0}:{stdout:``,stderr:`skill: "${n}" not found\n`,exitCode:1}}case`read`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: read requires a skill name
|
|
292
292
|
`,exitCode:1};let r=await i.readSkillInstructions(e,n);return r===null?{stdout:``,stderr:`skill: no SKILL.md found for "${n}"\n`,exitCode:1}:{stdout:r+`
|
|
293
|
-
`,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const
|
|
293
|
+
`,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const Oh=[{names:[`--branch`,`-b`],validate:e=>!e.startsWith(`-`)&&i(e),error:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters`,apply:(e,t)=>{e.branch=t}},{names:[`--from`],validate:e=>Wi(e)!==null,error:`upskill: --from requires a GitHub source (owner/repo, owner/repo@branch, or a github.com URL)`,apply:(e,t)=>{e.from=t}},{names:[`--path`,`-p`],validate:e=>o(e),error:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters`,apply:(e,t)=>{e.path=t}}];function kh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=Oh.find(e=>e.names.includes(r));if(i){let r=e[++n];if(!r||!i.validate(r))return t.error=i.error,t;i.apply(t,r)}else if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--json`)t.json=!0;else if(r.startsWith(`-`))return t.error=`upskill: unknown option "${r}" for update`,t;else t.skills.push(r)}return t}function Ah(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function jh(e,t){try{let n=await e.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(String(n))}catch{return}}async function Mh(e,t,n,r){let i=await jh(e,t);return Ai(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?Ah(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function Nh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await Mh(e,n,r,a);i.changes.push({path:r,status:o}),s&&i.writes.push({path:n,content:a})}let a=new Set(r.files??[]);for(let r of await ji(e,t)){if(n.has(r))continue;let e=a.has(r);i.changes.push({path:r,status:e?`removed`:`kept-local`}),e&&i.removals.push(`${t}/${r}`)}return i.changes.sort((e,t)=>e.path.localeCompare(t.path)),i}async function Ph(e,t,n,r,i,a){let o={skill:n,source:`${r.kind}:${r.source}`,ref:i??r.ref,from:r.sha,outcome:`current`,changes:[]},[s,c]=r.source.split(`/`);if(!s||!c)return{...o,outcome:`error`,error:`unusable source "${r.source}"`};let l=(r.path??``).replace(/^\/|\/$/g,``),u=await Ii(t),d=await Ri(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await Fh(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await Ih(s,c,l,n,o.ref,t,u);if(`error`in f)return{...o,outcome:`error`,error:f.error};let p=f.files,m=f.path;if(p.size===0)return{...o,outcome:`error`,error:`no files at ${s}/${c}${m?`/${m}`:``} — the skill may have moved or been removed upstream`};let{changes:h,writes:g,removals:_}=await Nh(e,`${Ci}/${n}`,p,r),v=g.length>0||_.length>0;if(a)return{...o,outcome:v?`updated`:`current`,changes:h};let ee=d??r.sha;return v&&await Vh(e,{changes:h,writes:g,removals:_}),await zi(e,n,{...r,ref:o.ref,path:m,sha:ee,files:[...p.keys()].sort()}),{...o,to:ee,outcome:v?`updated`:`current`,changes:h}}async function Fh(e,t,n){if(!n.files?.length)return!1;for(let r of n.files)if(!await e.exists(`/workspace/skills/${t}/${r}`))return!1;return!0}async function Ih(e,t,n,r,i,a,o){let s=await Ni(e,t,a,i??`main`);if(s.status===`ok`){let i=Oi(s.files),a=n||Lh(i,r);return a===null?{error:`could not find "${r}/SKILL.md" in ${e}/${t} — pass --path <dir> to say where the skill lives`}:{files:Bh(i,a),path:a}}try{return{files:zh(Rh(await Mi(e,t,n,i,o))),path:n}}catch(e){let t=e instanceof Error?e.message:String(e);return{error:`${s.message}; Contents API fallback failed: ${t}`}}}function Lh(e,t){let n=[];for(let r of Object.keys(e))r===`SKILL.md`?n.push(``):(r.endsWith(`/${t}/SKILL.md`)||r===`${t}/SKILL.md`)&&n.push(r.slice(0,-9));return n.length===0?null:(n.sort((e,t)=>e.split(`/`).length-t.split(`/`).length||e.localeCompare(t)),n[0])}function Rh(e){return new Map([...e].filter(([e])=>ki(e)))}function zh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function Bh(e,t){let n=t?`${t}/`:``,r=new Map;for(let[t,i]of Object.entries(e)){if(!t.startsWith(n)||t.endsWith(`/`))continue;let e=t.slice(n.length);ki(e)&&r.set(e,i)}return zh(r)}async function Vh(e,t){for(let n of t.writes){let t=n.path.slice(0,n.path.lastIndexOf(`/`));await e.mkdir(t,{recursive:!0}),await e.writeFile(n.path,n.content)}for(let n of t.removals)await e.rm(n).catch(()=>{})}async function Hh(e,t,n,r,i){let a={skill:n,source:`${r.kind}:${r.source}`,outcome:`current`,changes:[]},[o,s]=r.source.split(`/`);if(!o||!s)return{...a,outcome:`error`,error:`unusable source "${r.source}"`};let c=await yh(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${Ci}/${n}/SKILL.md`,u=await jh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&_h(new TextDecoder().decode(u))===_h(c.content);if(Ah(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${Ci}/${n}`,{recursive:!0}),await e.writeFile(l,d),await zi(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function Uh(e,t){if(e.outcome===`error`)return` ${e.skill}: failed — ${e.error}\n`;let n=new Map;for(let t of e.changes)n.set(t.status,(n.get(t.status)??0)+1);let r=e.to&&e.to!==e.from?` → ${e.to.slice(0,7)}`:``;if(e.outcome===`current`)return` ${e.skill}: already current (${e.source}${r})\n`;let i=t?`would update`:`updated`,a=` ${e.skill}: ${i} from ${e.source}${r}\n`;for(let t of e.changes)t.status!==`unchanged`&&(a+=` ${t.status.padEnd(10)} ${t.path}\n`);let o=n.get(`kept-local`)??0;return o>0&&(a+=` (${o} kept-local — dotfiles and local additions are never touched)\n`),a}function Wh(e,t,n,r){let i=Wi(t);return i?{version:1,kind:`github`,source:`${i.owner}/${i.repo}`,skill:e,ref:r??i.branch,path:n??i.path,installed:new Date().toISOString()}:null}async function Gh(e,t,n){if(t.length===0){let t=await Li(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await Bi(e,a);if(t){r.push({name:a,provenance:t});continue}if(!await e.exists(`/workspace/skills/${a}`)){i.push({name:a,reason:`not-installed`});continue}let o=n.from?Wh(a,n.from,n.path,n.branch):null;o?r.push({name:a,provenance:o}):i.push({name:a,reason:`no-provenance`})}return{targets:r,missing:i,skipped:[]}}function Kh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
|
|
294
294
|
`:`upskill: no install provenance for "${e.name}" — re-run with --from <owner>/<repo> (optionally --path <dir>) to record its source, or reinstall it once
|
|
295
|
-
`}function
|
|
295
|
+
`}function qh(e,t){return`${e} ${t}${e===1?``:`s`}`}function Jh(e){return`\nSkipped ${qh(e.length,`skill`)} with no install provenance — not checked:\n ${e.join(`, `)}\n Runtime-bundled skills have no record by design; \`upgrade apply\` keeps those current.
|
|
296
296
|
For the rest, record a source once with \`upskill update <skill> --from <owner>/<repo> --dry-run\`,
|
|
297
297
|
after which a bare \`upskill update\` sweeps them too.
|
|
298
|
-
`}function
|
|
298
|
+
`}function Yh(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
|
|
299
299
|
`:`Skill update:
|
|
300
|
-
`;for(let n of e)a+=
|
|
301
|
-
`)}\n`}async function
|
|
300
|
+
`;for(let n of e)a+=Uh(n,t);if(i.length>0&&(a+=Jh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${qh(e.length,`skill`)} with provenance ${e.length===1?`is`:`are`}`:`all skills are`;a+=t?`\n${n.charAt(0).toUpperCase()}${n.slice(1)} current.\n`:`\nNothing to update — ${n} current.\n`}return a}async function Xh(e,t,n){let{targets:r,missing:i,skipped:a}=await Gh(e,n.skills,{skills:n.skills,dryRun:n.dryRun,json:!1,branch:n.branch,from:n.from,path:n.path}),o=[];for(let i of r)o.push(i.provenance.kind===`browse.sh`?await Hh(e,t,i.name,i.provenance,n.dryRun):await Ph(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function Zh(e,t,n){let r=kh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await Xh(t,n,r);if(i.length===0)return a.length===0&&o.length>0?{stdout:r.json?`${JSON.stringify({ok:!0,dryRun:r.dryRun,results:[],skipped:o})}\n`:Yh([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(Kh).join(``):"upskill: no skill has install provenance yet — reinstall a skill, or run `upskill update <skill> --from <owner>/<repo>`, to record its source\n",exitCode:1};let s=i.filter(e=>e.outcome===`error`),c=i.some(e=>e.outcome===`updated`);c&&!r.dryRun&&await Ui();let l=a.map(Kh).join(``)+s.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``),u=s.length===0&&a.length===0;return r.json?{stdout:`${JSON.stringify({ok:u,dryRun:r.dryRun,results:i,skipped:o})}\n`,stderr:l,exitCode:+!u}:{stdout:Yh(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function Qh(e){let t={outdated:!1,json:!1};for(let n of e)if(n===`--outdated`)t.outdated=!0;else if(n===`--json`)t.json=!0;else if(n.startsWith(`-`))return t.error=`upskill: unknown option "${n}" for list`,t;else return t.error=`upskill: unexpected argument "${n}" for list`,t;return t}function $h(e){return e.to&&e.from&&e.to!==e.from?` ${e.from.slice(0,7)} → ${e.to.slice(0,7)}`:e.to?` ${e.to.slice(0,7)}`:``}function eg(e,t){let n=e.filter(e=>e.outcome===`updated`),r=[];if(n.length===0)r.push(`No outdated skills.`);else{r.push(`Outdated skills:`,``);for(let e of n)r.push(` ${e.skill} ${e.source}${$h(e)}`)}if(t.length>0){let e=t.length===1?`skill`:`skills`;r.push(``,`Skipped ${t.length} ${e} with no install provenance — not checked.`)}let i=e.filter(e=>e.outcome===`error`);if(i.length>0){let e=i.length===1?`skill`:`skills`;r.push(``,`Could not check ${i.length} ${e}:`);for(let e of i)r.push(` ${e.skill}: failed — ${e.error}`)}return`${r.join(`
|
|
301
|
+
`)}\n`}async function tg(e,t,n){let r=await(await import(`./kernel-worker-DefIX_AF.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await lr(e,or(n));return t?{stdout:`${JSON.stringify({ok:!0,skills:r,commandCollisions:i})}\n`,stderr:``,exitCode:0}:r.length===0?{stdout:`No discoverable local skills found.\n\n${xh()}`,stderr:``,exitCode:0}:{...ur(`upskill`,Ch(r,`Discoverable local skills`),i,{builtinNames:new Set(rt())}),exitCode:0}}async function ng(e,t,n){let{results:r,skipped:i}=await Xh(e,t,{skills:[],dryRun:!0}),a=r.filter(e=>e.outcome===`updated`),o=r.filter(e=>e.outcome===`error`),s=o.length===0,c=o.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``);return n?{stdout:`${JSON.stringify({ok:s,results:[...a,...o],skipped:i})}\n`,stderr:c,exitCode:+!s}:{stdout:eg(r,i),stderr:c,exitCode:+!s}}async function rg(e,t,n,r){let i=Qh(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?ng(t,n,i.json):tg(t,i.json,r)}async function ig(e,t){let n=`${wi}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=20`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){throw Error(Fi(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=be(r.body);if(!i.data)return[];let a=new Map;for(let e of i.data){if(e.type!==`skill`)continue;let t=e.attributes,n=Hi(t.sourceUrl),r=n?`${n.owner}/${n.repo}`:void 0,i=t.scores.aggregate==null?null:Math.round(t.scores.aggregate*100),o=t.sourceUrl||e.id,s=a.get(o);if(s&&s.qualityScore!=null&&i!=null&&s.qualityScore>=i)continue;let c=t.path.replace(/\/SKILL\.md$/i,``),l=c.split(`/`).pop()||t.name,u=n?`upskill ${n.owner}/${n.repo} --path ${c.split(`/`).slice(0,-1).join(`/`)||`.`} --skill ${l}`:`upskill tessl:${t.name}`;a.set(o,{name:t.name,displayName:t.name,summary:t.description||``,source:`tessl`,qualityScore:i,installHint:u,featured:t.featured,sourceRepo:r})}return Array.from(a.values())}async function ag(e,t){let n=`${wi}/experimental/search?q=${encodeURIComponent(e)}&contentType=skills&page%5Bsize%5D=5`,r;try{r=await t(n,{headers:{Accept:`application/json`}})}catch(e){return{error:`Tessl search failed: ${Fi(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=be(r.body).data?.find(t=>t.type===`skill`&&t.attributes.name===e);if(!i)return{error:`skill "${e}" not found on Tessl registry`};let a=Hi(i.attributes.sourceUrl);if(!a)return{error:`skill "${e}" has no GitHub source URL`};let o=i.attributes.path.replace(/\/SKILL\.md$/i,``);return{owner:a.owner,repo:a.repo,skillPath:o,skillName:e}}const og=[{label:`Tessl`,host:new URL(wi).host,fetch:ig},{label:`browse.sh`,host:new URL(Di).host,fetch:dh}];function sg(e){let t=[],n=e.reduce((e,t)=>Math.max(e,t.length),0);for(let r=0;r<n;r++)for(let n of e)r<n.length&&t.push(n[r]);return t}async function cg(e,t,n=1){let r=await Promise.allSettled(og.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=sg(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=og[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
|
|
302
302
|
`}return u<l&&(p+=`Showing ${d+1}-${d+f.length} of ${c}. `,p+=`Next page: upskill search ${e} --page ${u+1}\n\n`),p+=`To install:
|
|
303
303
|
`,p+=` From Tessl: upskill <owner/repo> --skill <name>
|
|
304
304
|
`,p+=` From browse.sh: upskill browse:<hostname>/<task>
|
|
305
|
-
`,{stdout:p,stderr:``,exitCode:0}}function
|
|
305
|
+
`,{stdout:p,stderr:``,exitCode:0}}function lg(e,t,n){let r=`upskill ${e}`;return t&&(r+=` --branch ${t}`),n&&(r+=` --path ${n}`),r}async function ug(e,t){let n=[],r;try{r=await t(e,{method:`GET`})}catch(t){return n.push({rel:c,href:e,error:t instanceof Error?t.message:String(t)}),{links:[],failures:n}}let i=[];for(let[e,t]of Object.entries(r.headers||{}))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&i.push(t);if(i.length===0)return{links:[],failures:n};let o=s(i,e),l=[];for(let e of o){if(!e.rel.includes(c))continue;let t=a([e]);t?.verb===`upskill`&&l.push({target:t.target,branch:t.branch,path:t.path,instruction:t.instruction,installHint:lg(t.target,t.branch,t.path)})}return{links:l,failures:n}}function dg(e,t,n){if(!e||t.length===0)return[];let r=[];for(let i of t){if(!i.hostname||sh(i.hostname)!==e)continue;let t=i.name||i.task.replace(/-[A-Za-z0-9]{4,8}$/,``)||i.task,a=`browse-${i.hostname}-${t}`;r.push({slug:i.slug,hostname:i.hostname,task:i.task,title:i.title||i.name||i.task,description:i.description,installed:n.has(a),installHint:`upskill browse:${i.hostname}/${i.task}`})}return r}function fg(e){let t=e.active?` [active]`:``,n=`${e.title||`(untitled)`}${t}\n`;if(n+=` ${e.url}\n`,e.origin.length>0){n+=` Origin-advertised:
|
|
306
306
|
`;for(let t of e.origin)n+=` ${t.installHint}`,t.instruction&&(n+=` # ${t.instruction}`),n+=`
|
|
307
307
|
`}if(e.catalog.length>0){n+=` Browse.sh catalog:
|
|
308
308
|
`;for(let t of e.catalog){let e=t.installed?`✓`:` `;n+=` ${e} ${t.title.padEnd(40)} ${t.installHint}\n`}}e.origin.length===0&&e.catalog.length===0&&!e.failures.length&&(n+=` No skill suggestions for this tab.
|
|
309
309
|
`);for(let t of e.failures)n+=` (discovery failed: ${t.error})\n`;return n+=`
|
|
310
|
-
`,n}async function
|
|
310
|
+
`,n}async function pg(e,t,n,r){if(!n)return{stdout:``,stderr:`upskill: browser APIs unavailable in this environment
|
|
311
311
|
`,exitCode:1};let i;try{i=await n.listPages()}catch{try{i=await n.listAllTargets()}catch(e){return{stdout:``,stderr:`upskill: failed to list browser tabs: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}if(i.length===0)return r?{stdout:JSON.stringify({tabs:[]},null,2)+`
|
|
312
312
|
`,stderr:``,exitCode:0}:{stdout:`No open browser tabs.
|
|
313
|
-
`,stderr:``,exitCode:0};let a=[],o=``;try{a=await
|
|
314
|
-
`,stderr:o,exitCode:0};let l=``;for(let e of c)l+=
|
|
313
|
+
`,stderr:``,exitCode:0};let a=[],o=``;try{a=await uh(t)}catch(e){o=`upskill: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}\n`}let s=await Jm(e),c=[];for(let e of i){let n=``;try{n=new URL(e.url).hostname}catch{}let r=n?sh(n):``,i=[],o=[];if(n&&/^https?:/i.test(e.url)){let n=await ug(e.url,t);i=n.links,o=n.failures}let l=dg(r,a,s);c.push({targetId:e.targetId,title:e.title,url:e.url,hostname:r,active:e.active,origin:i,catalog:l,failures:o})}if(r)return{stdout:JSON.stringify({tabs:c},null,2)+`
|
|
314
|
+
`,stderr:o,exitCode:0};let l=``;for(let e of c)l+=fg(e);return{stdout:l,stderr:o,exitCode:0}}async function mg(e,t,n){if(n){let n=await oh(e,t);return n.skipped===`no-profile`?{stdout:``,stderr:`upskill: no user profile found. Complete the welcome onboarding first, or create /home/<name>/.welcome.json manually.
|
|
315
315
|
`,exitCode:1}:n.skipped===`catalog-fetch`?{stdout:``,stderr:n.errors.map(e=>`${e}\n`).join(``),exitCode:1}:n.skipped===`all-installed`?{stdout:`No new skill recommendations — all matching skills are already installed.
|
|
316
316
|
`,stderr:``,exitCode:0}:{stdout:n.log,stderr:n.errors.map(e=>`${e}\n`).join(``),exitCode:+(n.errors.length>0)}}let r=null;try{let t=await e.readDir(`/home`);for(let n of t)try{let t=await e.readTextFile(`/home/${n.name}/.welcome.json`);r=JSON.parse(t);break}catch{}}catch{}if(!r)return{stdout:``,stderr:`upskill: no user profile found. Complete the welcome onboarding first, or create /home/<name>/.welcome.json manually.
|
|
317
|
-
`,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(
|
|
317
|
+
`,exitCode:1};let i,a;try{let[n,o,s]=await Promise.all([(async()=>{let e=await t(Ei,{headers:{Accept:`application/json`}});if(e.status!==200)throw Error(`HTTP ${e.status}`);return Wm(be(e.body).data)})(),Qm(t,r.company),Jm(e)]);i=Zm(n,o),a=s}catch(e){return{stdout:``,stderr:`upskill: failed to fetch skill catalog from ${Ei}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let o=Km(i,r).filter(e=>!a.has(e.entry.name));if(o.length===0)return{stdout:`No new skill recommendations — all matching skills are already installed.
|
|
318
318
|
`,stderr:``,exitCode:0};let s=`Recommended skills for you:
|
|
319
319
|
|
|
320
|
-
`,c=0;for(let e of o){c++;let t=
|
|
321
|
-
`,{stdout:s,stderr:``,exitCode:0}}function
|
|
320
|
+
`,c=0;for(let e of o){c++;let t=qm(e.entry.source);s+=` ${c}. ${e.entry.displayName.padEnd(35)} score: ${Math.round(e.score)}\n`,s+=` ${e.entry.description}\n`,s+=` Match: ${e.matchReasons.join(`, `)}\n`,s+=` Install: ${t}\n\n`}return s+=`To install all recommended: upskill recommendations --install
|
|
321
|
+
`,{stdout:s,stderr:``,exitCode:0}}function hg(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
|
|
322
322
|
`,exitCode:1}:i(e)?null:{stdout:``,stderr:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters
|
|
323
|
-
`,exitCode:1}}function
|
|
324
|
-
`,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=
|
|
325
|
-
`,stderr:``,exitCode:0}}async function
|
|
326
|
-
`,exitCode:1};let a=await
|
|
323
|
+
`,exitCode:1}}function gg(e){let t={selectedSkills:[],listOnly:!1,installAll:!1,force:!1,sourceRef:``},n=0;for(;n<e.length;){let r=e[n];if(r===`--skill`)t.selectedSkills.push(e[++n]);else if(r===`--path`||r===`-p`){let r=e[++n];if(typeof r!=`string`||!o(r))return t.earlyReturn={stdout:``,stderr:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters
|
|
324
|
+
`,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=hg(e[n+1]);if(r)return t.earlyReturn=r,t;t.branch=e[++n]}else r.startsWith(`-`)||(t.sourceRef=r);n++}return t}async function _g(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-DefIX_AF.js`).then(e=>e.r);if(e===`info`){let e=await r.getSkillInfo(n,t);if(!e)return{stdout:``,stderr:`upskill: skill "${t}" not found\n`,exitCode:1};let i=await Bi(n,t),a=i?Vi(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:wh(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
|
|
325
|
+
`,stderr:``,exitCode:0}}async function vg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Ki(p.path,p.name,r,i,a,s?{...s,path:p.path}:void 0),h=f+1,g=((Date.now()-o)/1e3).toFixed(1),_=(Date.now()-o)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.ok?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.error}${v}\n`,l+=`upskill: ${m.error}\n`)}return{output:c,errors:l,successCount:u}}async function yg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await Gi(t,n,p.path,p.name,i,r,a,void 0,o),h=f+1,g=((Date.now()-s)/1e3).toFixed(1),_=(Date.now()-s)/h,v=h<d?` (~${Math.round((d-h)*_/1e3)}s remaining)`:``;m.exitCode===0?(c+=`[${h}/${d}] Installed "${p.name}" from ${t}/${n} (${g}s)${v}\n`,u++):(c+=`[${h}/${d}] Failed "${p.name}": ${m.stderr.trim()}${v}\n`,l+=m.stderr)}return{output:c,errors:l,successCount:u}}async function bg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Gi(t,n,d.path,d.name,i,r,a,o,s);e.exitCode===0?(c+=e.stdout,u++):l+=e.stderr}return{output:c,errors:l,successCount:u}}function xg(e,t,n){let r=`Available skills in ${t}/${n}:\n\n`;for(let t of e)r+=` ${t.name.padEnd(30)} ${t.path}\n`;return r+=`\nFound ${e.length} skill(s)\n`,r}async function Sg(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await Ii(r),l=await qi(i,a,c,s,r,o);if(l.error)return{stdout:``,stderr:`upskill: failed to list skills: ${l.error}\n`,exitCode:1};if(l.skills.length===0)return{stdout:`No skills found in ${i}/${a}${s?`/`+s:``}\n`,stderr:``,exitCode:0};if(t.listOnly)return{stdout:xg(l.skills,i,a)+`\nTo install: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let u=l.skills;if(t.selectedSkills.length>0){u=l.skills.filter(e=>t.selectedSkills.includes(e.name));for(let e of t.selectedSkills)if(!l.skills.find(t=>t.name===e))return{stdout:``,stderr:`upskill: skill "${e}" not found in ${i}/${a}\n`,exitCode:1}}else if(!t.installAll)return{stdout:xg(l.skills,i,a)+`\nTo install specific skills: upskill ${t.sourceRef} --skill <name>\nTo install all: upskill ${t.sourceRef} --all\n`,stderr:``,exitCode:0};let d=u.length,f=Date.now(),p=``,m=``,h=0;if(d>1){let e=await Ni(i,a,r,o);if(e.status===`ok`){let r=await Ri(i,a,o,c,!0,s),l=await vg(u,i,a,Oi(e.files),n,t.force,f,{kind:`github`,source:`${i}/${a}`,ref:o,sha:r});({output:p,errors:m,successCount:h}=l)}else{let e=await yg(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await bg(u,i,a,c,n,t.force,r,o));let g=((Date.now()-f)/1e3).toFixed(1);return h>0&&(p+=`\nInstalled ${h} skill(s)${d>1?` in ${g}s`:``}\n`,await Ui()),{stdout:p,stderr:m,exitCode:+!!m}}async function Cg(e,t,n,r,i){switch(e[0]){case`tabs`:return pg(t,n,r,e.includes(`--json`));case`recommendations`:return mg(t,n,e.includes(`--install`));case`update`:case`upgrade`:return Zh(e.slice(1),t,n);case`list`:return rg(e.slice(1),t,n,i);case`info`:case`read`:return _g(e[0],e[1],t);case`search`:return Tg(e,n);default:return null}}function wg(e,t,n){return S(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Th();let a=await Cg(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=gg(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Th();if(o.sourceRef.startsWith(`tessl:`))return Eg(o.sourceRef,o.force,e,t);let s=mh(o.sourceRef);if(s)return bh(s.hostname,s.task,e,t,o.force);let c=Wi(o.sourceRef);return c?Sg(c,o,e,t):{stdout:``,stderr:`upskill: unrecognized source "${o.sourceRef}"\n\nExpected: owner/repo, tessl:<name>, or browse:<hostname>/<task>\n`,exitCode:1}})}async function Tg(e,t){let n=[...e.slice(1)],r=n.indexOf(`--page`),i=1;r>=0&&(i=parseInt(n[r+1],10)||1,n.splice(r,2));let a=n.join(` `);return a?cg(a,t,i):Th()}async function Eg(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
|
|
326
|
+
`,exitCode:1};let a=await ag(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await Ii(r);return Gi(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function Dg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
|
|
327
327
|
|
|
328
328
|
Plays an audio file using the Web Audio API.
|
|
329
329
|
-v volume Volume level (0 to 1, default 1)
|
|
330
330
|
-r rate Playback rate (0.25 to 4, default 1)
|
|
331
|
-
`,stderr:``,exitCode:0}}function
|
|
331
|
+
`,stderr:``,exitCode:0}}function Og(e){return{stdout:``,stderr:`afplay: ${e}\n`,exitCode:1}}function kg(e){return e instanceof Error?e.message:String(e)}const Ag={"-v":`a volume value`,"-r":`a rate value`};function jg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<0||t>1?`volume must be between 0 and 1`:null}function Mg(e){let t=Number.parseFloat(e);return Number.isNaN(t)||t<.25||t>4?`rate must be between 0.25 and 4`:null}function Ng(e,t,n){switch(t){case`-v`:return jg(n)||(e.volume=Number.parseFloat(n),null);case`-r`:return Mg(n)||(e.rate=Number.parseFloat(n),null);default:return`unknown option: ${t}`}}function Pg(e){let t={volume:1,rate:1,filePath:null};for(let n=0;n<e.length;n++){let r=e[n];if(Object.hasOwn(Ag,r)){let i=n+1<e.length&&!e[n+1].startsWith(`-`)?e[++n]:null;if(i==null)return Og(`${r} requires ${Ag[r]}`);let a=Ng(t,r,i);if(a)return Og(a);continue}if(r.startsWith(`-`))return Og(`unknown option: ${r}`);if(t.filePath!==null)return Og(`only one file can be specified`);t.filePath=r}return t}let Fg=null;function Ig(){return(!Fg||Fg.state===`closed`)&&(Fg=new AudioContext),Fg}function Lg(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function Rg(e,t){let n=t.fs.resolvePath(t.cwd,e);try{return{bytes:new Uint8Array(await t.fs.readFileBuffer(n)),fullPath:n}}catch{return Og(`cannot open ${e}: No such file`)}}function zg(e,t){return fr(e).startsWith(`audio/`)?null:Og(`${t} is not an audio file`)}async function Bg(e,t,n,r,i){try{let n=fr(t);return await i.call(`play-audio`,{bytes:Lg(e),mimeType:n,volume:r},{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return Og(`failed to play ${n}: ${kg(e)}`)}}async function Vg(e,t,n,r){try{let t=Ig();t.state===`suspended`&&await t.resume();let i=await t.decodeAudioData(Lg(e)),a=t.createBufferSource();a.buffer=i,a.playbackRate.value=r;let o=t.createGain();return o.gain.value=n,a.connect(o),o.connect(t.destination),new Promise(e=>{a.onended=()=>{e({stdout:``,stderr:``,exitCode:0})},a.start()})}catch(e){return Og(`failed to play ${t}: ${kg(e)}`)}}async function Hg(e,t,n,r){let i=de()&&typeof AudioContext<`u`,a=y();if(!i&&!a)return Og(`Web Audio API unavailable in this environment`);let o=await Rg(e,r);return`exitCode`in o?o:zg(o.fullPath,e)||(i?Vg(o.bytes,e,t,n):Bg(o.bytes,o.fullPath,e,t,a))}function Ug(){return S(`afplay`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return Dg();let n=Pg(e);return`exitCode`in n?n:n.filePath?Hg(n.filePath,n.volume,n.rate,t):Dg()})}function Wg(){return S(`chime`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?{stdout:`usage: chime
|
|
332
332
|
|
|
333
333
|
Plays a notification chime sound.
|
|
334
334
|
Alias for: afplay /shared/sounds/chime.mp3
|
|
335
|
-
`,stderr:``,exitCode:0}:
|
|
336
|
-
|
|
337
|
-
`}function c_(e){return e
|
|
338
|
-
|
|
339
|
-
`,exitCode:1};let a=a_(i,n.cwd),o=o_(r.allowedCommandsRaw??``),s=r.prompt??``,c=null,l=!1;try{c=await n.fs.stat(a)}catch{l=!0}let u=u_(c,l,i);if(u)return{stdout:``,stderr:u,exitCode:1};let d=d_(n.fs,a,i);if(d)return{stdout:``,stderr:d,exitCode:1};let f;if(r.imagePaths!==void 0&&r.imagePaths.length>0){let{readImages:e}=await import(`./agent-images-DaBj3QYk.js`),t=await e(n.fs,r.imagePaths.map(e=>({arg:e,path:a_(e,n.cwd)})));if(`error`in t)return{stdout:``,stderr:t.error,exitCode:1};f=t.images}let p=l_();if(!p)return{stdout:``,stderr:`agent: orchestrator bridge not available
|
|
340
|
-
`,exitCode:1};let m=f_(r,a,o,s,n,t);return f!==void 0&&(m.images=f),m_(p,m)})}async function m_(e,t){try{let n=await e.spawn(t),r=typeof n?.exitCode==`number`?n.exitCode:0,i=n?.finalText;return r===0?{stdout:s_(i),stderr:``,exitCode:0}:{stdout:``,stderr:c_(i),exitCode:r}}catch(e){let t=e instanceof Error?e.message:String(e);return Jg.error(`agent bridge threw`,e),{stdout:``,stderr:`${t}\n`,exitCode:1}}}const h_=[`bg`,`caller`,`disown`,`enable`,`fc`,`fg`,`jobs`,`logout`,`suspend`,`times`,`trap`,`ulimit`];function g_(){return h_.map(e=>S(e,async(t,n)=>{let{runBashBuiltin:r}=await import(`./run-B39tlo9Y.js`);return r(e,t,n)}))}function __(e,t){e.escaped?e.escaped=!1:t===`\\`?e.escaped=!0:t===`"`&&(e.inString=!1)}function v_(e,t){let n=t+2;for(;n<e.length&&e[n]!==`
|
|
341
|
-
`&&e[n]!==`\r`;)n++;return{text:` `.repeat(n-t),end:n-1}}function y_(e,t){let n=` `,r=t+2;for(;r<e.length&&(e[r]!==`*`||e[r+1]!==`/`);)n+=e[r]===`
|
|
342
|
-
`||e[r]===`\r`?e[r]:` `,r++;return r<e.length&&(n+=` `,r++),{text:n,end:r}}function b_(e){let t=``,n={inString:!1,escaped:!1};for(let r=0;r<e.length;r++){let i=e[r],a=e[r+1];if(n.inString){t+=i,__(n,i);continue}if(i===`"`){n.inString=!0,t+=i;continue}if(i===`/`&&a===`/`){let n=v_(e,r);t+=n.text,r=n.end;continue}if(i===`/`&&a===`*`){let n=y_(e,r);t+=n.text,r=n.end;continue}t+=i}return t}function x_(e){let t=``,n=!1,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(n){t+=a,r?r=!1:a===`\\`?r=!0:a===`"`&&(n=!1);continue}if(a===`"`){n=!0,t+=a;continue}if(a===`,`){let t=i+1;for(;t<e.length&&/\s/.test(e[t]);)t++;if(e[t]===`}`||e[t]===`]`)continue}t+=a}return t}function S_(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function C_(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=JSON.parse(x_(b_(t)));if(!S_(n))throw Error(`configuration must contain a JSON object`);return n}function w_(e){if(typeof e==`string`)return e;if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=e.path;return typeof t==`string`?t:null}function T_(e){let t=e.plugins;if(!Array.isArray(t))return null;for(let e of t){let t=w_(e);if(t!==null)return t}return null}async function E_(e,t){let n=b(t);for(;;){if(!n.split(`/`).includes(`node_modules`))for(let t of[`biome.json`,`biome.jsonc`]){let r=x(n,t);if(await e.exists(r))return r}if(n===`/`)return null;n=Fe(n).dir}}async function D_(e,t,n){let r;try{r=await e.readFile(t)}catch(e){return{ok:!1,error:`biome: failed to read configuration ${t}: ${e instanceof Error?e.message:String(e)}`,exitCode:n}}try{let e=C_(r),i=T_(e);return i===null?{ok:!0,resolved:{path:t,configuration:e}}:{ok:!1,error:`biome: unsupported configuration ${t}: path-based plugin ${JSON.stringify(i)} cannot be loaded by @biomejs/js-api@6.0.0`,exitCode:n}}catch(e){return{ok:!1,error:`biome: failed to parse configuration ${t}: ${e instanceof Error?e.message:String(e)}`,exitCode:n}}}async function O_(e,t,n,r){if(r!==null){let n=b(e.resolvePath(t,r));return await e.exists(n)?D_(e,n,2):{ok:!1,error:`biome: configuration file not found: ${n}`,exitCode:2}}let i=await E_(e,n);return i===null?{ok:!0,resolved:null}:D_(e,i,1)}const k_=new Set(`address.article.aside.blockquote.dd.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hr.li.main.nav.ol.p.pre.section.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`)),A_={amp:`&`,apos:`'`,gt:`>`,lt:`<`,nbsp:` `,quot:`"`};function j_(e){let t=e.slice(1,-1);if(!t.startsWith(`#`))return A_[t.toLowerCase()]??e;let n=t[1]?.toLowerCase()===`x`,r=Number.parseInt(t.slice(n?2:1),n?16:10);return!Number.isFinite(r)||r<0||r>1114111||r>=55296&&r<=57343?e:String.fromCodePoint(r)}function M_(e){let t=``,n=0,r=!1;for(let i of e.matchAll(/<!--[\s\S]*?-->|<![^>]*>|<\/?[A-Za-z][^>]*>/g)){let a=e.slice(n,i.index);a&&(t+=a,r=!1);let o=i[0],s=/^<\/?\s*([A-Za-z0-9-]+)/.exec(o)?.[1]?.toLowerCase();s===`br`?(t+=`
|
|
343
|
-
`,r=!1):s&&k_.has(s)&&t.length>0&&!t.endsWith(`
|
|
335
|
+
`,stderr:``,exitCode:0}:Hg(`/shared/sounds/chime.mp3`,1,1,t))}function Gg(e={}){return S(`agent`,async(t,n)=>{let{executeAgentCommand:r}=await import(`./agent-command-impl-BQZK9ujN.js`);return r(t,n,e)})}const Kg=[`bg`,`caller`,`disown`,`enable`,`fc`,`fg`,`jobs`,`logout`,`suspend`,`times`,`trap`,`ulimit`];function qg(){return Kg.map(e=>S(e,async(t,n)=>{let{runBashBuiltin:r}=await import(`./run-B39tlo9Y.js`);return r(e,t,n)}))}function Jg(e,t){e.escaped?e.escaped=!1:t===`\\`?e.escaped=!0:t===`"`&&(e.inString=!1)}function Yg(e,t){let n=t+2;for(;n<e.length&&e[n]!==`
|
|
336
|
+
`&&e[n]!==`\r`;)n++;return{text:` `.repeat(n-t),end:n-1}}function Xg(e,t){let n=` `,r=t+2;for(;r<e.length&&(e[r]!==`*`||e[r+1]!==`/`);)n+=e[r]===`
|
|
337
|
+
`||e[r]===`\r`?e[r]:` `,r++;return r<e.length&&(n+=` `,r++),{text:n,end:r}}function Zg(e){let t=``,n={inString:!1,escaped:!1};for(let r=0;r<e.length;r++){let i=e[r],a=e[r+1];if(n.inString){t+=i,Jg(n,i);continue}if(i===`"`){n.inString=!0,t+=i;continue}if(i===`/`&&a===`/`){let n=Yg(e,r);t+=n.text,r=n.end;continue}if(i===`/`&&a===`*`){let n=Xg(e,r);t+=n.text,r=n.end;continue}t+=i}return t}function Qg(e){let t=``,n=!1,r=!1;for(let i=0;i<e.length;i++){let a=e[i];if(n){t+=a,r?r=!1:a===`\\`?r=!0:a===`"`&&(n=!1);continue}if(a===`"`){n=!0,t+=a;continue}if(a===`,`){let t=i+1;for(;t<e.length&&/\s/.test(e[t]);)t++;if(e[t]===`}`||e[t]===`]`)continue}t+=a}return t}function $g(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function e_(e){let t=e.charCodeAt(0)===65279?e.slice(1):e,n=JSON.parse(Qg(Zg(t)));if(!$g(n))throw Error(`configuration must contain a JSON object`);return n}function t_(e){if(typeof e==`string`)return e;if(typeof e!=`object`||!e||Array.isArray(e))return null;let t=e.path;return typeof t==`string`?t:null}function n_(e){let t=e.plugins;if(!Array.isArray(t))return null;for(let e of t){let t=t_(e);if(t!==null)return t}return null}async function r_(e,t){let n=b(t);for(;;){if(!n.split(`/`).includes(`node_modules`))for(let t of[`biome.json`,`biome.jsonc`]){let r=x(n,t);if(await e.exists(r))return r}if(n===`/`)return null;n=Fe(n).dir}}async function i_(e,t,n){let r;try{r=await e.readFile(t)}catch(e){return{ok:!1,error:`biome: failed to read configuration ${t}: ${e instanceof Error?e.message:String(e)}`,exitCode:n}}try{let e=e_(r),i=n_(e);return i===null?{ok:!0,resolved:{path:t,configuration:e}}:{ok:!1,error:`biome: unsupported configuration ${t}: path-based plugin ${JSON.stringify(i)} cannot be loaded by @biomejs/js-api@6.0.0`,exitCode:n}}catch(e){return{ok:!1,error:`biome: failed to parse configuration ${t}: ${e instanceof Error?e.message:String(e)}`,exitCode:n}}}async function a_(e,t,n,r){if(r!==null){let n=b(e.resolvePath(t,r));return await e.exists(n)?i_(e,n,2):{ok:!1,error:`biome: configuration file not found: ${n}`,exitCode:2}}let i=await r_(e,n);return i===null?{ok:!0,resolved:null}:i_(e,i,1)}const o_=new Set(`address.article.aside.blockquote.dd.div.dl.dt.fieldset.figcaption.figure.footer.form.h1.h2.h3.h4.h5.h6.header.hr.li.main.nav.ol.p.pre.section.table.tbody.td.tfoot.th.thead.tr.ul`.split(`.`)),s_={amp:`&`,apos:`'`,gt:`>`,lt:`<`,nbsp:` `,quot:`"`};function c_(e){let t=e.slice(1,-1);if(!t.startsWith(`#`))return s_[t.toLowerCase()]??e;let n=t[1]?.toLowerCase()===`x`,r=Number.parseInt(t.slice(n?2:1),n?16:10);return!Number.isFinite(r)||r<0||r>1114111||r>=55296&&r<=57343?e:String.fromCodePoint(r)}function l_(e){let t=``,n=0,r=!1;for(let i of e.matchAll(/<!--[\s\S]*?-->|<![^>]*>|<\/?[A-Za-z][^>]*>/g)){let a=e.slice(n,i.index);a&&(t+=a,r=!1);let o=i[0],s=/^<\/?\s*([A-Za-z0-9-]+)/.exec(o)?.[1]?.toLowerCase();s===`br`?(t+=`
|
|
338
|
+
`,r=!1):s&&o_.has(s)&&t.length>0&&!t.endsWith(`
|
|
344
339
|
`)&&(t+=`
|
|
345
|
-
`,r=!0),n=(i.index??0)+o.length}let i=e.slice(n);return i&&(t+=i,r=!1),r&&(t=t.slice(0,-1)),t.replace(/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9A-Fa-f]+));/gi,
|
|
346
|
-
`,
|
|
340
|
+
`,r=!0),n=(i.index??0)+o.length}let i=e.slice(n);return i&&(t+=i,r=!1),r&&(t=t.slice(0,-1)),t.replace(/&(?:amp|lt|gt|quot|apos|nbsp|#(?:[0-9]+|[xX][0-9A-Fa-f]+));/gi,c_)}const u_=new Set([`js`,`mjs`,`cjs`,`jsx`,`ts`,`mts`,`cts`,`tsx`,`json`,`jsonc`,`css`,`graphql`,`gql`,`html`,`svelte`,`vue`,`astro`,`jsh`,`bsh`]);function d_(e){let t=e.lastIndexOf(`.`);return t<0?!1:u_.has(e.slice(t+1).toLowerCase())}function f_(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)?`${e.slice(0,-4)}.js`:e}const p_=`async function __slicc() {
|
|
341
|
+
`,m_=new TextEncoder().encode(p_).length;function h_(e){return e.endsWith(`.jsh`)||e.endsWith(`.bsh`)}function g_(e,t){let n=[e];for(;n.length>0;){let e=n.pop();if(!e||typeof e!=`object`)continue;if(Array.isArray(e)){for(let t of e)n.push(t);continue}let r=e,i=r.span;Array.isArray(i)&&i.length===2&&typeof i[0]==`number`&&typeof i[1]==`number`&&(r.span=[Math.max(0,i[0]-t),Math.max(0,i[1]-t)]),typeof r.sourceCode==`string`&&(r.sourceCode=null);for(let e of Object.keys(r))e!==`span`&&e!==`sourceCode`&&n.push(r[e])}}function __(e){let t=(e.endsWith(`
|
|
347
342
|
`)?e.slice(0,-1):e).split(`
|
|
348
343
|
`);return t.shift(),t.pop(),t.map(e=>e.startsWith(` `)?e.slice(1):e).join(`
|
|
349
344
|
`)+`
|
|
350
|
-
`}function
|
|
345
|
+
`}function v_(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 y_=new Set([`check`,`lint`,`format`]);function b_(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===`
|
|
351
346
|
`&&l++;let u=c.lastIndexOf(`
|
|
352
|
-
`),d=Array.from(c.slice(u+1)).length+1;return{severity:typeof r.severity==`string`?r.severity:`unknown`,category:typeof r.category==`string`?r.category:`unknown`,message:i,filePath:t,line:l,column:d}}const
|
|
347
|
+
`),d=Array.from(c.slice(u+1)).length+1;return{severity:typeof r.severity==`string`?r.severity:`unknown`,category:typeof r.category==`string`?r.category:`unknown`,message:i,filePath:t,line:l,column:d}}const x_=`2.5.14`,S_=`6.0.0`,C_=di,w_=`@biomejs/wasm-web@${x_} @biomejs/js-api@${S_} esbuild-wasm@${C_}`,T_={"@biomejs/wasm-web":`@biomejs/wasm-web@${x_}`,"@biomejs/js-api":`@biomejs/js-api@${S_}`,"esbuild-wasm":`esbuild-wasm@${C_}`},E_=`run: ${N} ${w_} (no network fallback)`,D_=`biome - thin wrapper over the ipk-loaded @biomejs/wasm-web
|
|
353
348
|
|
|
354
349
|
Usage:
|
|
355
350
|
biome <subcommand> [options] [files...]
|
|
@@ -391,20 +386,20 @@ Exit codes:
|
|
|
391
386
|
|
|
392
387
|
Install:
|
|
393
388
|
Inert until the backing packages are installed in node_modules:
|
|
394
|
-
${N} ${
|
|
389
|
+
${N} ${w_}
|
|
395
390
|
All three packages must be present in the VFS \`node_modules\` for
|
|
396
391
|
lint/format to run (loading the wasm-web ESM glue also needs the
|
|
397
392
|
esbuild-wasm transpiler). There is no bundled binary, no CDN
|
|
398
393
|
fallback; a missing package exits non-zero with a clear \`ipk add\` hint.
|
|
399
|
-
`;function
|
|
394
|
+
`;function O_(e,t,n){let r=e[t+1];if(typeof r!=`string`||r.startsWith(`-`))throw Error(`biome: ${n} requires a value`);return r}function k_(e){if(!e)throw Error(`biome: --reporter requires a value`);if(e!==`plain`&&e!==`json`)throw Error(`biome: unknown reporter: ${e}`);return e}function A_(e){return e.some((t,n)=>t===`--json`||t===`--reporter=json`||t===`--reporter`&&e[n+1]===`json`)}function j_(e,t,n){let r=t[n];switch(r){case`-h`:case`--help`:return e.showHelp=!0,n;case`-v`:case`--version`:return e.showVersion=!0,n;case`--write`:return e.write=!0,n;case`--check`:return e.check=!0,n;case`--json`:return e.reporter=`json`,n;case`--stdin-file-path`:return e.stdinFilePath=O_(t,n,r),n+1;case`--config-path`:return e.configPath=O_(t,n,r),n+1;case`--reporter`:return e.reporter=k_(O_(t,n,r)),n+1}return r.startsWith(`--stdin-file-path=`)?(e.stdinFilePath=M_(r,`--stdin-file-path`),n):r.startsWith(`--config-path=`)?(e.configPath=M_(r,`--config-path`),n):r.startsWith(`--reporter=`)?(e.reporter=k_(r.slice(11)),n):null}function M_(e,t){let n=e.slice(t.length+1);if(!n)throw Error(`biome: ${t} requires a value`);return n}function N_(e){let t={subcommand:null,paths:[],write:!1,check:!1,stdinFilePath:null,configPath:null,reporter:`plain`,showHelp:!1,showVersion:!1};if(e.length===0)return t.showHelp=!0,t;for(let n=0;n<e.length;n++){let r=e[n],i=j_(t,e,n);if(i!==null){n=i;continue}if(t.subcommand===null&&y_.has(r)){t.subcommand=r;continue}if(r.startsWith(`-`))throw Error(`biome: unknown option: ${r}`);t.paths.push(r)}if(t.write&&t.check)throw Error(`biome: --write and --check cannot be used together`);if(t.check&&t.subcommand!==`format`)throw Error(`biome: --check is only valid with the format subcommand`);return t}async function P_(e,t,n){let r=[],i=[];for(let a of n){let n=e.resolvePath(t,a);if(!await e.exists(n)){i.push(a);continue}(await e.stat?.(n))?.isDirectory?await F_(e,n,r):d_(n)&&r.push(n)}return{files:r,missing:i}}async function F_(e,t,n){let r=await e.readdir?.(t)??[];for(let i of r){if(i===`node_modules`||i.startsWith(`.git`))continue;let r=t===`/`?`/${i}`:`${t}/${i}`;(await e.stat?.(r))?.isDirectory?await F_(e,r,n):d_(r)&&n.push(r)}}async function I_(e){let t;try{t=await dr(`@biomejs/wasm-web/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;try{let n=await e.reader.readFile(t.path),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}async function L_(e){let t;try{t=await dr(`@biomejs/wasm-web/package.json`,e.fromDir,e.reader)}catch{return{ok:!1,missing:`@biomejs/wasm-web`}}if(t.type!==`file`)return{ok:!1,missing:`@biomejs/wasm-web`};try{if((await dr(`@biomejs/js-api/web`,e.fromDir,e.reader)).type!==`file`)return{ok:!1,missing:`@biomejs/js-api`}}catch{return{ok:!1,missing:`@biomejs/js-api`}}try{if((await dr(`esbuild-wasm/package.json`,e.fromDir,e.reader)).type!==`file`)return{ok:!1,missing:`esbuild-wasm`}}catch{return{ok:!1,missing:`esbuild-wasm`}}return{ok:!0,wasmPkgDir:Fe(t.path).dir}}function R_(e,t){let n=f_(b(e));if(t===null)return n;let r=Ie(t),i=Ie(n),a=0;for(;a<r.length&&a<i.length&&r[a]===i[a];)a++;return[...Array.from({length:r.length-a},()=>`..`),...i.slice(a)].join(`/`)}const z_=`
|
|
400
395
|
const fs = require('fs');
|
|
401
|
-
const JSH_WRAP_PREFIX = ${JSON.stringify(
|
|
396
|
+
const JSH_WRAP_PREFIX = ${JSON.stringify(p_)};
|
|
402
397
|
const JSH_WRAP_SUFFIX = ${JSON.stringify(`
|
|
403
398
|
}`)};
|
|
404
|
-
const JSH_WRAP_PREFIX_BYTES = ${
|
|
405
|
-
const shiftBiomeSpans = ${
|
|
406
|
-
const unwrapFormattedJsh = ${
|
|
407
|
-
const biomeDiagnosticToJson = ${
|
|
399
|
+
const JSH_WRAP_PREFIX_BYTES = ${m_};
|
|
400
|
+
const shiftBiomeSpans = ${g_.toString()};
|
|
401
|
+
const unwrapFormattedJsh = ${__.toString()};
|
|
402
|
+
const biomeDiagnosticToJson = ${b_.toString()};
|
|
408
403
|
function supportsFeature(biome, projectKey, path, feature) {
|
|
409
404
|
const workspace = biome.workspace;
|
|
410
405
|
if (!workspace || typeof workspace.fileFeatures !== 'function') {
|
|
@@ -528,28 +523,28 @@ async function main() {
|
|
|
528
523
|
process.stdout.write(JSON.stringify(results));
|
|
529
524
|
}
|
|
530
525
|
main().catch((err) => { process.stderr.write(String(err && err.message || err) + '\\n'); process.exit(1); });
|
|
531
|
-
`;function
|
|
532
|
-
`,exitCode:1}}try{return{results:JSON.parse(e.stdout),stderr:``,exitCode:0}}catch(t){let n=t instanceof Error?t.message:String(t),r=e.stderr.trim();return{results:[],stderr:r?`biome: failed to parse helper output: ${n} (helper stderr: ${r})\n`:`biome: failed to parse helper output: ${n}\n`,exitCode:1}}}function
|
|
533
|
-
`,exitCode:2};let n=await
|
|
534
|
-
`,exitCode:2},`usage`);let i=await
|
|
526
|
+
`;function B_(e){let t=e.match(/Cannot find module '(@biomejs\/[^']+)'/);if(!t)return null;let n=t[1].split(`/`).slice(0,2).join(`/`);return`biome: ${n} is not installed (run: ${N} ${T_[n]??n}); ${E_}\n`}async function V_(e,t,n,r,i,a,o,s,c){let l={op:t,write:n,check:r,configuration:i,configurationRoot:a,reporter:o,files:s.map(e=>({path:e.path,biomePath:R_(e.path,a),source:e.source,wrap:h_(e.path)}))},u=[`node`,`[biome-helper]`,JSON.stringify(l),c];return H_(await ai(z_,u,e,void 0,{filename:`[biome-helper]`}))}function H_(e){if(e.exitCode!==0)return{results:[],stderr:B_(e.stderr)??e.stderr,exitCode:e.exitCode};if(e.stdout.trim()===``){let t=B_(e.stderr)??e.stderr.trim();return{results:[],stderr:t?`biome: helper exited 0 with no output: ${t.replace(/\n$/,``)}\n`:`biome: helper exited 0 with no output (nothing was linted)
|
|
527
|
+
`,exitCode:1}}try{return{results:JSON.parse(e.stdout),stderr:``,exitCode:0}}catch(t){let n=t instanceof Error?t.message:String(t),r=e.stderr.trim();return{results:[],stderr:r?`biome: failed to parse helper output: ${n} (helper stderr: ${r})\n`:`biome: failed to parse helper output: ${n}\n`,exitCode:1}}}function U_(e,t,n,r=``){if(e===`plain`)return t;let i=(t.stderr||t.stdout).trimEnd(),a=i?[{severity:t.exitCode===0?`information`:`error`,category:n,message:i,filePath:r,line:null,column:null}]:[],o={summary:{errors:t.exitCode===0?0:1,warnings:0,filesChecked:0,unformattedFiles:0},diagnostics:a,files:[]};return{stdout:`${JSON.stringify(o)}\n`,stderr:``,exitCode:t.exitCode}}async function W_(e,t){let n=await L_(t);if(!n.ok)return{stdout:``,stderr:`biome: ${n.missing} is not installed (run: ${N} ${T_[n.missing]??n.missing}); ${E_}\n`,exitCode:1};let r=`${n.wasmPkgDir}/biome_wasm_bg.wasm`;return await e.fs.exists(r)?{wasmPath:r}:{stdout:``,stderr:`biome: ${r} not found (reinstall: ${N} ${T_[`@biomejs/wasm-web`]})\n`,exitCode:1}}async function G_(e,t){if(t.paths.length===0&&e.stdin)return{inputs:[{path:t.stdinFilePath??`/stdin.ts`,source:P(e.stdin)}],missingErrText:``};if(t.paths.length===0)return{stdout:``,stderr:`biome: no files or directories specified
|
|
528
|
+
`,exitCode:2};let n=await P_(e.fs,e.cwd,t.paths),r=n.missing.map(e=>`biome: ${e}: no such file or directory\n`).join(``),i=[];for(let t of n.files)i.push({path:t,source:await e.fs.readFile(t)});return i.length===0?{stdout:``,stderr:`${r}biome: no lintable files found\n`,exitCode:+(n.missing.length>0)}:{inputs:i,missingErrText:r}}async function K_(e,t,n,r,i){let a=[],o=[i],s=0,c=0,l=0;for(let i of r.results)t.reporter===`plain`&&i.diagnosticsText&&o.push(l_(i.diagnosticsText)),s+=i.errorCount,c+=i.warningCount,t.write&&i.formatted!==null&&!i.unchanged?(await e.fs.writeFile(i.path,i.formatted),l++):!t.write&&t.subcommand===`format`&&!t.check&&n.length===1&&n[0].path===i.path&&a.push(i.formatted??n[0].source);t.write&&l>0&&o.push(`biome: wrote ${l} file(s)\n`);let u=+(s>0||c>0||i.length>0);if(t.reporter===`json`){let e=i?[{severity:`error`,category:`io`,message:i.trimEnd(),filePath:``,line:null,column:null}]:[],t={summary:{errors:s+e.length,warnings:c,filesChecked:r.results.length,unformattedFiles:r.results.filter(e=>!e.unchanged).length},diagnostics:[...r.results.flatMap(e=>e.diagnostics),...e],files:r.results.map(e=>({path:e.path,unchanged:e.unchanged}))};return{stdout:`${JSON.stringify(t)}\n`,stderr:``,exitCode:u}}return{stdout:a.join(``),stderr:o.join(``),exitCode:u}}async function q_(e){let t=await I_(e);return t?{stdout:`${t}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`biome: @biomejs/wasm-web is not installed (run: ${N} @biomejs/wasm-web@${x_}); ${E_}\n`,exitCode:1}}async function J_(e,t){return e.showHelp?U_(e.reporter,{stdout:D_,stderr:``,exitCode:0},`usage`):e.showVersion?U_(e.reporter,await q_(t),`runtime`):null}function Y_(e,t){let n=e.paths[0];if(!n)return``;try{return t.fs.resolvePath(t.cwd,n)}catch{return``}}async function X_(e,t){let n=v_(t),r=await J_(e,n);if(r)return r;if(e.subcommand===null)return U_(e.reporter,{stdout:``,stderr:`biome: missing subcommand (expected check, lint, or format)
|
|
529
|
+
`,exitCode:2},`usage`);let i=await G_(t,e);if(`exitCode`in i)return U_(e.reporter,i,`io`);let a=e.paths.length===0&&t.stdin?t.cwd:Fe(i.inputs[0].path).dir,o=await a_(t.fs,t.cwd,a,e.configPath);if(!o.ok)return U_(e.reporter,{stdout:``,stderr:`${o.error}\n`,exitCode:o.exitCode},`configuration`,i.inputs[0].path);let s=await W_(t,n);if(`exitCode`in s)return U_(e.reporter,s,`runtime`,i.inputs[0].path);let c=await V_(t,e.subcommand,e.write,e.check,o.resolved?.configuration??null,o.resolved===null?null:Fe(o.resolved.path).dir,e.reporter,i.inputs,s.wasmPath);return c.exitCode===0?K_(t,e,i.inputs,c,i.missingErrText):U_(e.reporter,{stdout:``,stderr:i.missingErrText+c.stderr,exitCode:c.exitCode},`runtime`,i.inputs[0].path)}function Z_(){return S(`biome`,async(e,t)=>{let n;try{n=N_(e)}catch(t){return U_(A_(e)?`json`:`plain`,{stdout:``,stderr:`${t instanceof Error?t.message:String(t)}\n`,exitCode:2},`usage`)}try{return await X_(n,t)}catch(e){if(n.reporter===`plain`)throw e;return U_(`json`,{stdout:``,stderr:`biome: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1},`runtime`,Y_(n,t))}})}function Q_(e=`biscotto`,t={}){return S(e,async(n,r)=>{let{runBiscotto:i}=await import(`./run-BAmXlRlW.js`);return i(e,n,r,t.getParentJid?.(),t.isScoop?.()===!0)})}function $_(e={}){let t=e.getFollowers??re,n=e.getPanelRpc??y,r=e.getEmitter??(()=>null);return{listRuntimeIds(){return t().filter(e=>e.runtime===`slicc-cherry`).map(e=>e.runtimeId)},async emitSliccEvent(e,t,i){let a=r();if(a)try{return await a(e,t,i)?{delivered:!0}:{delivered:!1,reason:`the follower runtime is not connected to the leader`}}catch(e){return{delivered:!1,reason:`direct emit failed: ${e instanceof Error?e.message:String(e)}`}}let o=n();if(!o)return{delivered:!1,reason:`no page bridge to the leader tray (panel-RPC client)`};try{return(await o.call(`cherry-emit`,{runtimeId:e,name:t,detail:i}))?.delivered?{delivered:!0}:{delivered:!1,reason:`the follower runtime is not connected to the leader`}}catch(e){return{delivered:!1,reason:`panel-RPC delivery failed: ${e instanceof Error?e.message:String(e)}`}}}}}const ev=[`--detail`,`--runtime`];function tv(e){return{stdout:``,stderr:`cherry-emit: ${e}\n`,exitCode:1}}function nv(e){let t=C(e,{value:ev});return`error`in t?tv(t.error):{positionals:t.positionals,detailJson:t.values.get(`--detail`),runtime:t.values.get(`--runtime`)}}function rv(e,t){return e.length===0?tv(`no cherry follower runtime is connected`):t?e.includes(t)?t:tv(`runtime '${t}' not connected. Available: ${e.join(`, `)}`):e.length>1?tv(`multiple runtimes connected, pass --runtime <id>. Available: ${e.join(`, `)}`):e[0]}function iv(e){if(e===void 0)return{detail:void 0};try{return{detail:JSON.parse(e)}}catch{return tv(`--detail must be valid JSON`)}}function av(e={}){let t=e.registry??$_();return S(`cherry-emit`,async e=>{if(w(e,{valueFlags:ev}))return{stdout:`cherry-emit - push a slicc.event to a cherry host page through a follower runtime
|
|
535
530
|
|
|
536
531
|
Usage: cherry-emit <name> [--detail <json>] [--runtime <id>]
|
|
537
532
|
|
|
538
533
|
--detail <json> JSON payload delivered as the event detail
|
|
539
534
|
--runtime <id> Target a specific follower runtime (canonical id, e.g. follower-abc).
|
|
540
535
|
Defaults to the sole connected runtime; required when more than one.
|
|
541
|
-
`,stderr:``,exitCode:0};let n=
|
|
536
|
+
`,stderr:``,exitCode:0};let n=nv(e);if(`exitCode`in n)return n;let r=n.positionals[0];if(!r)return tv(`event name is required`);let i=rv(t.listRuntimeIds(),n.runtime);if(typeof i!=`string`)return i;let a=iv(n.detailJson);if(`exitCode`in a)return a;let o=await t.emitSliccEvent(i,r,a.detail);return o.delivered?{stdout:`cherry-emit: sent '${r}' to ${i}\n`,stderr:``,exitCode:0}:tv(`failed to deliver '${r}' to ${i}: ${o.reason}`)})}function ov(e){return e instanceof Error?e.message:String(e)}function sv(){return{stdout:`usage: pbcopy
|
|
542
537
|
|
|
543
538
|
Copy stdin to the clipboard.
|
|
544
539
|
Example: echo hello | pbcopy
|
|
545
|
-
`,stderr:``,exitCode:0}}function
|
|
540
|
+
`,stderr:``,exitCode:0}}function cv(){return{stdout:`usage: pbpaste
|
|
546
541
|
|
|
547
542
|
Paste clipboard contents to stdout.
|
|
548
|
-
`,stderr:``,exitCode:0}}function
|
|
543
|
+
`,stderr:``,exitCode:0}}function lv(e){return{stdout:`usage: ${e} [-i|-o]\n\n -i Force copy mode (read from stdin)
|
|
549
544
|
-o Force paste mode (write to stdout)
|
|
550
545
|
(default) Auto-detect: stdin present = copy, no stdin = paste
|
|
551
|
-
Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function
|
|
552
|
-
`,exitCode:2};let i=await
|
|
546
|
+
Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function uv(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: ${ov(e)}\n`,exitCode:1}}}async function dv(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: ${ov(t)}\n`,exitCode:1}}}function fv(){return S(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?sv():uv(P(t.stdin),`pbcopy`))}function pv(){return S(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?cv():dv(`pbpaste`))}function mv(e){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return lv(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 dv(e);let a=P(n.stdin);return r||a.length>0?uv(a,e):dv(e)})}function hv(){return S(`cmp`,async(e,t)=>{let n=e.some(e=>e===`-s`||e===`--quiet`||e===`--silent`),r=e.filter(e=>![`-s`,`--quiet`,`--silent`].includes(e));if(r.length!==2||r.some(e=>e.startsWith(`-`)&&e!==`-`))return{stdout:``,stderr:`cmp: usage: cmp [-s|--quiet|--silent] FILE1 FILE2
|
|
547
|
+
`,exitCode:2};let i=await gv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await gv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=_v(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 gv(e,t){if(t===`-`){let t=_i(e.stdin);return{bytes:Uint8Array.from(t,e=>e.charCodeAt(0)&255)}}try{return{bytes:await e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t))}}catch{return{error:{stdout:``,stderr:`cmp: ${t}: No such file or directory\n`,exitCode:2}}}}function _v(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 vv(e={}){return S(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-CnfMQAT6.js`).then(e=>e.t);return r(t,n,e)})}var yv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function bv(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 xv(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 Sv=`AdobeClean-Regular.otf`,Cv=new WeakSet;let wv=null;function Tv(){return{stdout:`usage: convert [input ...] [operations...] [output]
|
|
553
548
|
|
|
554
549
|
Operations:
|
|
555
550
|
-resize GEOMETRY resize; supports %, !, ^, >, and < modifiers
|
|
@@ -590,7 +585,7 @@ suffix (0-based, as ImageMagick does); page 0 is used when none is given:
|
|
|
590
585
|
convert -density 150 doc.pdf page0.png
|
|
591
586
|
convert doc.pdf[2] -resize 800x page3.png
|
|
592
587
|
Use pdftoppm to rasterize a whole document in one pass.
|
|
593
|
-
`,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 Xv=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:Zv(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=>ey(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=$v(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 Zv(e){let t={};for(let n of e)for(let e of n.operations)e.type===`background`&&(t.background=e.value),e.type===`gravity`&&(t.gravity=e.value);return t}function Qv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=Yv.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(ey(t))throw Error(`expected an output file`);return{expression:new Xv(e.slice(0,-1)).parse(),outputPath:t}}function $v(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function ey(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||Yv.has(e)}const ty=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,ny=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function ry(e,t,n){if(!(n===`resize`||n===`thumbnail`?ty:ny).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function iy(e,t,n){t.resize(ry(e,n,`resize`))}function ay(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function oy(e,t,n,r){let i=ry(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function sy(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 cy={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function ly(e,t){let n=cy[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const uy={"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 dy(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function fy(e,t,n){let r=dy(t),i=Object.entries(e).find(([e])=>dy(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function py(e,t,n,r){let i=ry(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 my(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 hy(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(Gv),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function gy(e){if(Kv.has(e.Magick))return;let t=qv??=fetch(Hv).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(Gv,await t),Kv.add(e.Magick)}catch(e){throw qv===t&&(qv=null),e}}function _y(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(_y)}function vy(e,t,n,r){let i=uy[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:iy(e,t,n.value);return;case`thumbnail`:t.thumbnail(ry(e,n.value,`thumbnail`));return;case`rotate`:ay(t,n.value);return;case`crop`:oy(e,t,n.value,r.gravity);return;case`quality`:sy(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:py(e,t,n.value,r);return;case`alpha`:t.alpha(fy(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=fy(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...my(n.value,`blur`));return;case`sharpen`:t.sharpen(...my(n.value,`sharpen`));return;case`gravity`:r.gravity=ly(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`:hy(e,t,n,r);return}}function yy(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:ly(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 by(e,t,n){let r={};for(let i of n)vy(e,t,i,r)}function xy(e,t){let n=null,r=Wv(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function Sy(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await Cy(e,t.children[a],n,async o=>{i.push(o),await Sy(e,t,n,r,i,a+1),i.pop()})}async function Cy(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{by(e,n,t.operations),await r(n)});return}await Sy(e,t,n,async n=>{yy(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=>{by(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function wy(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function Ty(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=wy(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)),ta(s)){let t=await na(s,(a??0)+1,{scale:ra(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await Ty(i,t,n,r);return n}function Ey(e=`convert`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Jv();let r;try{r=Qv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await Ty(r.expression,n),t=await Qi({ipk:Uv(n)});_y(r.expression)&&await gy(t);let i=null;if(await Cy(t,r.expression,e,async e=>{i=xy(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 Dy(){return globalThis.__slicc_lickManager??null}let Oy=null;async function ky(){if(Oy)return Oy;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return Oy=e(),Oy}async function Ay(){let e=Dy();if(e)return{resolveLickTarget:async t=>e.resolveLickTarget?.(t)??{status:`unverifiable`},createWebhook:(t,n,r)=>e.createWebhook(t,n,r),deleteWebhook:t=>e.deleteWebhook(t),listWebhooks:async()=>e.listWebhooks(),createCronTask:(t,n,r)=>e.createCronTask(t,n,r),deleteCronTask:t=>e.deleteCronTask(t),listCronTasks:async()=>e.listCronTasks()};if(ke())return null;let t=await ky(),{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 jy(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 My(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 (${jy(r.candidates)})\n`:null}function Ny(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function Py(){return{stdout:`usage: crontask <command> [options]
|
|
588
|
+
`,stderr:``,exitCode:0}}const Ev=new Map([[`-resize`,1],[`-thumbnail`,1],[`-rotate`,1],[`-crop`,1],[`-quality`,1],[`-auto-orient`,0],[`-auto-gamma`,0],[`-auto-level`,0],[`-flip`,0],[`-flop`,0],[`-strip`,0],[`-trim`,0],[`-negate`,0],[`-normalize`,0],[`-background`,1],[`-extent`,1],[`-alpha`,1],[`-colorspace`,1],[`-transparent`,1],[`-blur`,1],[`-sharpen`,1],[`-gravity`,1],[`-fill`,1],[`-undercolor`,1],[`-pointsize`,1],[`-density`,1],[`-annotate`,2]]);var Dv=class{tokens;index=0;density=72;constructor(e){this.tokens=e}parse(){return this.readSequence(!1)}readSequence(e){let t=[],n=[],r=!1;for(;this.index<this.tokens.length;){let i=this.tokens[this.index];if(i===`)`){if(!e)throw Error(`unexpected )`);this.index++,r=!0;break}i===`(`?this.readGroup(t,n):i===`+append`||i===`-append`?this.append(t,i):Ev.has(i)?this.readOperation(t,n,i):this.readInput(t,n,i)}if(e&&!r)throw Error(`missing )`);return this.finishSequence(t,n)}readGroup(e,t){this.index++;let n=this.readSequence(!0);n.operations.unshift(...t.splice(0)),e.push(n)}append(e,t){if(e.length<2)throw Error(`${t} requires at least two images`);let n=[...e];e.splice(0,e.length,{kind:`append`,direction:t===`+append`?`horizontal`:`vertical`,children:n,appendSettings:Ov(n),operations:[]}),this.index++}readOperation(e,t,n){let r=Ev.get(n),i=this.tokens.slice(this.index+1,this.index+1+r);if(i.length!==r||i.some(e=>jv(e)))throw Error(`missing argument for ${n}`);let a={type:n.slice(1),value:i[0]??``,...r===2?{text:i[1]}:{}};a.type===`density`&&(this.density=Av(a.value)),(e.at(-1)?.operations??t).push(a),this.index+=r+1}readInput(e,t,n){if(n.startsWith(`-`)||n.startsWith(`+`))throw Error(`unsupported option ${n}`);e.push({kind:`input`,path:n,operations:t.splice(0),density:this.density}),this.index++}finishSequence(e,t){if(t.length>0)throw Error(`operation requires an input image`);if(e.length===0)throw Error(`expected an input image`);if(e.length>1)throw Error(`multiple input files require +append or -append`);return e[0]}};function Ov(e){let t={};for(let n of e)for(let e of n.operations)e.type===`background`&&(t.background=e.value),e.type===`gravity`&&(t.gravity=e.value);return t}function kv(e){if(e.length<2)throw Error(`expected exactly one input file and one output file`);let t=e.at(-1),n=Ev.get(t);if(n!==void 0)throw Error(n>0?`missing argument for ${t}`:`expected an output file`);if(jv(t))throw Error(`expected an output file`);return{expression:new Dv(e.slice(0,-1)).parse(),outputPath:t}}function Av(e){let t=Number(e.split(`x`)[0]);if(!Number.isFinite(t)||t<=0)throw Error(`Invalid density: ${e}`);return t}function jv(e){return e===`(`||e===`)`||e===`+append`||e===`-append`||Ev.has(e)}const Mv=/^(?:\d+(?:x\d*)?|x\d+)(?:[%!^<>@])?$/,Nv=/^\d+x\d+(?:[+-]\d+[+-]\d+)?$/;function Pv(e,t,n){if(!(n===`resize`||n===`thumbnail`?Mv:Nv).test(t))throw Error(`Invalid ${n} geometry: ${t}`);return new e.MagickGeometry(t)}function Fv(e,t,n){t.resize(Pv(e,n,`resize`))}function Iv(e,t){let n=parseFloat(t);if(isNaN(n))throw Error(`Invalid rotation degrees: ${t}`);e.rotate(n)}function Lv(e,t,n,r){let i=Pv(e,n,`crop`);r===void 0?t.crop(i):t.crop(i,r)}function Rv(e,t){let n=parseInt(t,10);if(isNaN(n)||n<0||n>100)throw Error(`Invalid quality: ${t} (must be 0-100)`);e.quality=n}const zv={northwest:`Northwest`,north:`North`,northeast:`Northeast`,west:`West`,center:`Center`,east:`East`,southwest:`Southwest`,south:`South`,southeast:`Southeast`};function Bv(e,t){let n=zv[t.toLowerCase()],r=n?e.Gravity[n]:void 0;if(r===void 0)throw Error(`Invalid gravity: ${t}`);return r}const Vv={"auto-orient":e=>e.autoOrient(),"auto-gamma":e=>e.autoGamma(),"auto-level":e=>e.autoLevel(),flip:e=>e.flip(),flop:e=>e.flop(),strip:e=>e.strip(),trim:e=>e.trim(),negate:e=>e.negate(),normalize:e=>e.normalize()};function Hv(e){return e.toLowerCase().replaceAll(/[-_ ]/g,``)}function Uv(e,t,n){let r=Hv(t),i=Object.entries(e).find(([e])=>Hv(e)===r);if(!i)throw Error(`Invalid ${n}: ${t}`);return i[1]}function Wv(e,t,n,r){let i=Pv(e,n,`extent`),a=r.background?new e.MagickColor(r.background):void 0;r.gravity!==void 0&&a?t.extent(i,r.gravity,a):r.gravity===void 0?a?t.extent(i,a):t.extent(i):t.extent(i,r.gravity)}function Gv(e,t){let n=`(?:\\d+(?:\\.\\d*)?|\\.\\d+)`,r=e.match(RegExp(`^(${n})(?:x(${n}))?$`));if(!r)throw Error(`Invalid ${t} radius/sigma: ${e}`);return[Number(r[1]),r[2]===void 0?1:Number(r[2])]}function Kv(e,t,n,r){let i=n.value.match(/^([+-]\d+)([+-]\d+)$/);if(!i)throw Error(`Invalid annotate offset: ${n.value} (expected +X+Y)`);let a=new e.Drawables;r.gravity!==void 0&&a.gravity(r.gravity),r.fill!==void 0&&a.fillColor(new e.MagickColor(r.fill)),r.undercolor!==void 0&&a.textUnderColor(new e.MagickColor(r.undercolor)),a.font(Sv),r.pointsize!==void 0&&a.fontPointSize(r.pointsize),a.text(Number(i[1]),Number(i[2]),n.text??``).draw(t)}async function qv(e){if(Cv.has(e.Magick))return;let t=wv??=fetch(yv).then(async e=>{if(!e.ok)throw Error(`Failed to load annotation font (${e.status})`);return new Uint8Array(await e.arrayBuffer())});try{e.Magick.addFont(Sv,await t),Cv.add(e.Magick)}catch(e){throw wv===t&&(wv=null),e}}function Jv(e){return e.operations.some(e=>e.type===`annotate`)?!0:e.kind===`append`&&e.children.some(Jv)}function Yv(e,t,n,r){let i=Vv[n.type];if(i){i(t);return}switch(n.type){case`density`:return;case`resize`:Fv(e,t,n.value);return;case`thumbnail`:t.thumbnail(Pv(e,n.value,`thumbnail`));return;case`rotate`:Iv(t,n.value);return;case`crop`:Lv(e,t,n.value,r.gravity);return;case`quality`:Rv(t,n.value);return;case`background`:r.background=n.value,t.backgroundColor=new e.MagickColor(n.value);return;case`extent`:Wv(e,t,n.value,r);return;case`alpha`:t.alpha(Uv(e.AlphaAction,n.value,`alpha mode`));return;case`colorspace`:t.colorSpace=Uv(e.ColorSpace,n.value,`colorspace`);return;case`transparent`:t.transparent(new e.MagickColor(n.value));return;case`blur`:t.blur(...Gv(n.value,`blur`));return;case`sharpen`:t.sharpen(...Gv(n.value,`sharpen`));return;case`gravity`:r.gravity=Bv(e,n.value);return;case`fill`:r.fill=n.value;return;case`undercolor`:r.undercolor=n.value;return;case`pointsize`:{let e=Number(n.value);if(!Number.isFinite(e)||e<=0)throw Error(`Invalid point size: ${n.value}`);r.pointsize=e;return}case`annotate`:Kv(e,t,n,r);return}}function Xv(e,t,n){let{background:r,gravity:i}=t.appendSettings;if(r===void 0&&i===void 0)return;let a=i===void 0?void 0:Bv(e,i),o=r===void 0?void 0:new e.MagickColor(r),s=Math.max(...n.map(e=>e.width)),c=Math.max(...n.map(e=>e.height));for(let r of n){let n=t.direction===`vertical`?s:r.width,i=t.direction===`horizontal`?c:r.height;if(n===r.width&&i===r.height)continue;let l=new e.MagickGeometry(n,i);a!==void 0&&o?r.extent(l,a,o):a===void 0?o&&r.extent(l,o):r.extent(l,a)}}function Zv(e,t,n){let r={};for(let i of n)Yv(e,t,i,r)}function Qv(e,t){let n=null,r=xv(t);return e.write(r,e=>{n=new Uint8Array(e)}),n}async function $v(e,t,n,r,i=[],a=0){if(a===t.children.length)return r(i);await ey(e,t.children[a],n,async o=>{i.push(o),await $v(e,t,n,r,i,a+1),i.pop()})}async function ey(e,t,n,r){if(t.kind===`input`){await e.ImageMagick.read(n.get(t),async n=>{Zv(e,n,t.operations),await r(n)});return}await $v(e,t,n,async n=>{Xv(e,t,n);let i=e.MagickImageCollection.create();i.push(...n);let a=t.direction===`horizontal`?i.appendHorizontally.bind(i):i.appendVertically.bind(i);try{await a(async n=>{Zv(e,n,t.operations),await r(n)})}finally{i.length=0,i.dispose()}})}function ty(e){let t=e.match(/^(.*)\[(\d+)\]$/);return t?{path:t[1],scene:Number(t[2])}:{path:e}}async function ny(e,t,n=new Map,r=new Map){if(e.kind===`input`){let{path:i,scene:a}=ty(e.path),o=t.fs.resolvePath(t.cwd,i),s=r.get(o);if(s===void 0&&(s=await t.fs.readFileBuffer(o),r.set(o,s)),Qi(s)){let t=await $i(s,(a??0)+1,{scale:ea(e.density),format:`png`});return n.set(e,t.bytes),n}return n.set(e,s),n}for(let i of e.children)await ny(i,t,n,r);return n}function ry(e=`convert`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Tv();let r;try{r=kv(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let e=await ny(r.expression,n),t=await Yi({ipk:bv(n)});Jv(r.expression)&&await qv(t);let i=null;if(await ey(t,r.expression,e,async e=>{i=Qv(e,r.outputPath)}),!i||i.byteLength===0)throw Error(`Failed to generate output image`);let a=n.fs.resolvePath(n.cwd,r.outputPath);return await n.fs.writeFile(a,i),{stdout:``,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function iy(){return globalThis.__slicc_lickManager??null}let ay=null;async function oy(){if(ay)return ay;let{createLickManagerProxy:e}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return ay=e(),ay}async function sy(){let e=iy();if(e)return{resolveLickTarget:async t=>e.resolveLickTarget?.(t)??{status:`unverifiable`},createWebhook:(t,n,r)=>e.createWebhook(t,n,r),deleteWebhook:t=>e.deleteWebhook(t),listWebhooks:async()=>e.listWebhooks(),createCronTask:(t,n,r)=>e.createCronTask(t,n,r),deleteCronTask:t=>e.deleteCronTask(t),listCronTasks:async()=>e.listCronTasks()};if(ke())return null;let t=await oy(),{listCronTasksAsync:n,listWebhooksAsync:r}=await import(`./lick-manager-proxy-DMaLHm_t.js`);return{resolveLickTarget:e=>t.resolveLickTarget(e),createWebhook:(e,n,r)=>t.createWebhook(e,n,r),deleteWebhook:e=>t.deleteWebhook(e),listWebhooks:()=>r(),createCronTask:(e,n,r)=>t.createCronTask(e,n,r),deleteCronTask:e=>t.deleteCronTask(e),listCronTasks:()=>n()}}function cy(e){if(e.length===0)return`no cones or scoops are registered`;let t=e.slice(0,12),n=e.length>t.length?`, …`:``;return`valid targets: ${t.join(`, `)}${n}`}async function ly(e,t,n){if(!n||!e)return null;let r;try{r=await e.resolveLickTarget(n)}catch{return null}return r.status===`unresolved`?`${t}: --scoop "${n}" matches no live cone or scoop — its licks would be dropped (${cy(r.candidates)})\n`:null}function uy(e){return{stdout:``,stderr:`crontask ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}function dy(){return{stdout:`usage: crontask <command> [options]
|
|
594
589
|
|
|
595
590
|
Commands:
|
|
596
591
|
create [options] Create a new cron task
|
|
@@ -622,14 +617,14 @@ Examples:
|
|
|
622
617
|
crontask create --name every-5min --scoop poller --cron "*/5 * * * *" --filter "() => ({ time: Date.now() })"
|
|
623
618
|
crontask list
|
|
624
619
|
crontask delete abc123
|
|
625
|
-
`,stderr:``,exitCode:0}}async function
|
|
620
|
+
`,stderr:``,exitCode:0}}async function fy(e,t,n){let r={method:e,headers:we({"Content-Type":`application/json`})};n&&(r.body=JSON.stringify(n));let i=await fetch(Ce(`/api/crontasks${t}`),r),a=await i.json().catch(()=>({}));return{ok:i.ok,status:i.status,data:a}}const py=[`--name`,`--cron`,`--filter`,`--scoop`];function my(e){return{stdout:``,stderr:`crontask: ${e}\n`,exitCode:1}}async function hy(e,t,n){let r=C(e.slice(1),{value:py});if(`error`in r)return my(r.error);let i=r.values.get(`--name`),a=r.values.get(`--cron`),o=r.values.get(`--filter`),s=r.values.get(`--scoop`);if(s=ta(s,t),!i)return{stdout:``,stderr:`crontask: --name is required
|
|
626
621
|
`,exitCode:1};if(!a)return{stdout:``,stderr:`crontask: --cron is required
|
|
627
|
-
`,exitCode:1};let c=await
|
|
628
|
-
`,exitCode:1};let e=await
|
|
622
|
+
`,exitCode:1};let c=await ly(await sy(),`crontask create`,r.values.get(`--scoop`));if(c)return{stdout:``,stderr:c,exitCode:1};if(!n()){if(o)return{stdout:``,stderr:`crontask: --filter is not supported in extension mode (CSP restriction)
|
|
623
|
+
`,exitCode:1};let e=await sy();if(!e)return uy(`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 fy(`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 gy(e){let t=`Active cron tasks:
|
|
629
624
|
`;for(let n of e)t+=` ${n.id} ${n.name.padEnd(20)} ${n.cron.padEnd(15)}`,n.scoop&&(t+=` -> ${n.scoop}`),n.filter&&(t+=` [filtered]`),t+=` (${n.status})`,n.nextRun&&(t+=` next: ${new Date(n.nextRun).toLocaleString()}`),t+=`
|
|
630
|
-
`;return t}async function
|
|
631
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
632
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
625
|
+
`;return t}async function _y(e,t){let n=C(e.slice(1),{});if(`error`in n)return my(n.error);if(!t()){let e=await sy();if(!e)return uy(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
|
|
626
|
+
`,stderr:``,exitCode:0}:{stdout:gy(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await fy(`GET`,``);if(!r)return{stdout:``,stderr:`crontask: failed to list: ${i.error??`unknown error`}\n`,exitCode:1};let a=i;return a.length===0?{stdout:`No active cron tasks
|
|
627
|
+
`,stderr:``,exitCode:0}:{stdout:gy(a),stderr:``,exitCode:0}}async function vy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return my(r.error);let i=r.positionals[0];if(!i)return{stdout:``,stderr:`crontask: ${n} requires an ID\n`,exitCode:1};if(!t()){let e=await sy();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}:uy(`delete`)}let{ok:a,status:o,data:s}=await fy(`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 yy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:py}))return dy();try{switch(r){case`create`:return await hy(e,n.env,t);case`list`:return await _y(e,t);case`delete`:case`kill`:return await vy(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 by(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-D6LxdCnL.js`);return r(e,t,n)})}function xy(e,t={}){if(!Number.isFinite(e)||e<0)return``;if(t.si){if(e<1e3)return`${Math.round(e)} B`;let t=[`kB`,`MB`,`GB`,`TB`],n=e/1e3,r=0;for(;n>=1e3&&r<t.length-1;)n/=1e3,r+=1;return`${n<10?n.toFixed(1):Math.round(n)} ${t[r]}`}if(e<1024)return Number.isInteger(e)?`${e} B`:e>=.1?`${e.toFixed(1)} B`:e>0?`${Math.max(.01,Number(e.toFixed(2)))} B`:`0 B`;let n=[`KB`,`MB`,`GB`,`TB`,`PB`],r=e,i=-1;for(;r>=1024&&i<n.length-1;)r/=1024,i+=1;return`${r.toFixed(1)} ${n[i]}`}function Sy(e){return xy(e,{si:!1})}const Cy=`slicc-fs`;async function wy(){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===Cy)}catch{return!0}}async function Ty(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(Cy)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function Ey(){if(!await wy())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await Ty();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 Dy(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
|
|
633
628
|
|
|
634
629
|
Usage:
|
|
635
630
|
slicc-fs-cleanup Delete the legacy slicc-fs IDB.
|
|
@@ -638,7 +633,7 @@ Usage:
|
|
|
638
633
|
SLICC's filesystem lives in OPFS; the legacy slicc-fs IndexedDB from
|
|
639
634
|
the pre-OPFS era is never read anymore. This command deletes it on
|
|
640
635
|
explicit invocation to reclaim the space.
|
|
641
|
-
`}const
|
|
636
|
+
`}const Oy={deleted:0,absent:0,blocked:1,error:1};function ky(e={}){let t=e.runCleanup??Ey;return S(`slicc-fs-cleanup`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:Dy(),stderr:``,exitCode:0};if(e.length>0)return{stdout:``,stderr:`slicc-fs-cleanup: unsupported argument: ${e[0]}\n`,exitCode:1};let n=await t(),r=Oy[n.kind];return r===0?{stdout:`${n.message}\n`,stderr:``,exitCode:r}:{stdout:``,stderr:`slicc-fs-cleanup: ${n.message}\n`,exitCode:r}})}function Ay(e){return`${e} — report VFS backend and storage usage/quota
|
|
642
637
|
|
|
643
638
|
Usage:
|
|
644
639
|
${e} Show diagnostics (raw bytes).
|
|
@@ -646,16 +641,16 @@ Usage:
|
|
|
646
641
|
${e} --help Show this help.
|
|
647
642
|
|
|
648
643
|
Read-only. Cleanup of the legacy IndexedDB lives in 'slicc-fs-cleanup'.
|
|
649
|
-
`}function
|
|
644
|
+
`}function jy(){return`diskutil — VFS diagnostics alias
|
|
650
645
|
|
|
651
646
|
Usage:
|
|
652
647
|
diskutil info Show VFS diagnostics (alias for 'df -h').
|
|
653
648
|
diskutil --help Show this help.
|
|
654
649
|
|
|
655
650
|
Read-only. See 'df --help' for the underlying command.
|
|
656
|
-
`}function
|
|
657
|
-
`)}\n`}function
|
|
658
|
-
`,exitCode:1}})}const
|
|
651
|
+
`}function My(e,t){return e===null?`unavailable`:t?Sy(e):`${e}`}async function Ny(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??wy;try{o=await s()}catch{o=null}return{backend:t,usage:n,quota:r,persisted:i,legacyIdbPresent:o}}function Py(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: ${My(e.usage,t)}`,`Quota: ${My(e.quota,t)}`,`Used: ${n}`,`Persisted: ${r}`,`Legacy IDB: ${i}`].join(`
|
|
652
|
+
`)}\n`}function Fy(e={}){return S(`df`,async t=>{if(t.includes(`--help`))return{stdout:Ay(`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:Py(await Ny(e),i),stderr:``,exitCode:0}})}function Iy(e={}){return S(`diskutil`,async t=>{if(t.includes(`--help`))return{stdout:jy(),stderr:``,exitCode:0};let n=t[0];return n===`info`?{stdout:Py(await Ny(e),!0),stderr:``,exitCode:0}:{stdout:``,stderr:n?`diskutil: unsupported subcommand: ${n} (try 'diskutil info')\n`:`diskutil: missing subcommand (try 'diskutil info')
|
|
653
|
+
`,exitCode:1}})}const Ly=e(`di`),Ry=new WeakMap;async function zy(e,t){let n=Ry.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 Ly.error(`failed to read pyodide-lock.json`,e),null}else{let e=`${Ir}pyodide-lock.json`,n;try{n=await t(e,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){return Ly.error(`failed to fetch pyodide-lock.json from CDN`,e),null}if(n.status<200||n.status>=300)return Ly.error(`pyodide-lock.json CDN fetch returned HTTP ${n.status}`),null;r=xe(n.body)}let i;try{i=JSON.parse(r)}catch(e){return Ly.error(`pyodide-lock.json was not valid JSON`,e),null}let a=new Map;for(let[e,t]of Object.entries(i.packages??{}))!t||typeof t.file_name!=`string`||a.set(Nr(t.name??e),t);return Ry.set(e,a),a}async function By(e,t,n,r){let i=await zy(e,t);if(!i)return null;let a=i.get(Nr(n));if(!a?.file_name||!a.version||!a.sha256)return null;if(r&&r!==a.version)throw Error(`di: ${n}==${r} requested but the Pyodide lockfile pins ${a.name??n}==${a.version} (the Pyodide CDN serves only the locked version — omit the version, or use real uv locally)`);return{name:a.name??n,version:a.version,source:`pyodide-cdn`,fileName:a.file_name,sha256:a.sha256,url:`${Ir}${a.file_name}`}}function Vy(e,t){let n=`https://pypi.org/pypi/${encodeURIComponent(e)}`;return t?`${n}/${encodeURIComponent(t)}/json`:`${n}/json`}function Hy(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 Uy(e,t,n){let r=`di: PyPI lookup for ${t}${n?`==${n}`:``}`,i=Vy(t,n),a;try{a=await e(i,{method:`GET`,headers:{Accept:`application/json`},timeoutMs:3e4})}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${r}: network error (${t})`)}if(a.status===404)throw Error(`di: package '${t}'${n?` version '${n}'`:``} not found on PyPI`);if(a.status<200||a.status>=300){let e=a.statusText?` ${a.statusText}`:``;throw Error(`${r} returned HTTP ${a.status}${e}`)}let o;try{o=JSON.parse(xe(a.body))}catch(e){let t=e instanceof Error?e.message:String(e);throw Error(`${r}: response was not valid JSON (${t})`)}let s=o.info?.name??t,c=o.info?.version??n;if(!c)throw Error(`${r}: PyPI did not report a version for '${t}'`);let l=(o.urls??[]).filter(e=>e.packagetype===`bdist_wheel`&&typeof e.filename==`string`&&typeof e.url==`string`);if(l.length===0)throw Error(`di: ${s}==${c} has no wheel on PyPI (sdist/source-only packages are not supported in SLICC's di subset — use real uv locally)`);let u=l.find(e=>Hy(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 Wy=`/workspace/python_wheels`,Gy=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function Ky(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(),!Gy.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 qy(e){return e instanceof Error?e:Error(String(e))}async function Jy(e,t,n){return await By(e,t,n.name,n.version)||Uy(t,n.name,n.version)}async function Yy(e,t,n){let r=await Jy(e,t,n),i=await Gr(t,{url:r.url,sha256:r.sha256,label:`di: download ${r.name}==${r.version}`});await e.mkdir(Wy,{recursive:!0});let a=x(Wy,r.fileName),o=!0;if(await e.exists(a)){let t=await e.readFile(a,{encoding:`binary`}),n=await jr(t);if(n===r.sha256.toLowerCase())o=!1;else throw Error(`di: ${r.fileName} is already staged with different bytes (sha256 ${n} != ${r.sha256.toLowerCase()}); refusing to overwrite`)}else await e.writeFile(a,i);return{name:r.name,version:r.version,source:r.source,fileName:r.fileName,sha256:r.sha256,staged:o}}async function Xy(e,t,n,r){let i=await zr(e,n),a=[],o=[];for(let n of r){let r;try{r=Ky(n)}catch(e){o.push({spec:n,error:qy(e)});continue}try{a.push(await Yy(e,t,r))}catch(e){o.push({spec:n,error:qy(e)})}}if(a.length>0){let t=await Hr(e,i),n=t.dependencies,r=await Mr(e,i);for(let e of a)n=kr(n,e.name,e.version),r=Ur(r,{name:e.name,version:e.version,source:e.source,fileName:e.fileName,sha256:e.sha256});await Rr(e,i,{...t,dependencies:n}),await Fr(e,i,r)}return{results:a,errors:o,manifestDir:i}}async function Zy(e,t){let n=await Lr(e,t);if(!n)return null;let r=await Hr(e,n),i=await Mr(e,n),a=new Map(i.map(e=>[Nr(e.name),e]));return r.dependencies.map(e=>{let{name:t,version:n}=Pr(e),r=a.get(Nr(t));return{name:t,version:n||r?.version||`?`,source:r?.source??`unknown`}})}const Qy=[];function $y(e){return`${e} - minimal Python package manager (pure-Python + Pyodide wheels)
|
|
659
654
|
|
|
660
655
|
Usage:
|
|
661
656
|
${e} add <pkg>[@<version>] [<pkg> ...] resolve, stage, and record wheels
|
|
@@ -668,20 +663,20 @@ Resolution:
|
|
|
668
663
|
staged under /workspace/python_wheels/ and recorded in pyproject.toml + uv.lock.
|
|
669
664
|
|
|
670
665
|
Anything else is not implemented in SLICC's ${e} subset; use real uv locally.
|
|
671
|
-
`}function
|
|
672
|
-
`)}\n`}async function
|
|
666
|
+
`}function eb(e,t){return{stdout:``,stderr:`${e}: '${t}' is not implemented in SLICC's di/uv subset; use real uv locally. Run '${e} --help' for supported verbs.\n`,exitCode:1}}function tb(e){return e instanceof Error?e.message:String(e)}function nb(e){let t=Math.max(4,...e.map(e=>e.name.length)),n=Math.max(7,...e.map(e=>e.version.length));return`${e.map(e=>`${e.name.padEnd(t)} ${e.version.padEnd(n)} (${e.source})`).join(`
|
|
667
|
+
`)}\n`}async function rb(e,t,n,r){let i=C(t,{value:Qy});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=i.positionals;if(a.length===0)return{stdout:``,stderr:`${e}: add requires at least one package\n`,exitCode:1};let o;try{o=await Xy(r.fs,r.fetch,n.cwd,a)}catch(t){return{stdout:``,stderr:`${e}: ${tb(t)}\n`,exitCode:1}}let s=o.results.map(t=>t.staged?`${e}: added ${t.name}==${t.version} (${t.source}) -> ${t.fileName}`:`${e}: ${t.name}==${t.version} already staged (${t.source})`),c=o.errors.map(t=>`${e}: failed to add ${t.spec}: ${tb(t.error)}`);return{stdout:s.length>0?`${s.join(`
|
|
673
668
|
`)}\n`:``,stderr:c.length>0?`${c.join(`
|
|
674
|
-
`)}\n`:``,exitCode:o.errors.length===0?0:1}}async function
|
|
675
|
-
`}};let i=
|
|
669
|
+
`)}\n`:``,exitCode:o.errors.length===0?0:1}}async function ib(e,t,n,r){let i=C(t,{value:Qy});if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let a=await Zy(r.fs,n.cwd);return a===null?{stdout:``,stderr:`${e}: no pyproject.toml found (run '${e} add <pkg>' first)\n`,exitCode:0}:a.length===0?{stdout:`${e}: no dependencies recorded\n`,stderr:``,exitCode:0}:{stdout:nb(a),stderr:``,exitCode:0}}function ab(e,t){return S(e,async(n,r)=>{if(n.length===0)return{stdout:$y(e),stderr:`${e}: missing verb\n`,exitCode:1};if(w(n,{valueFlags:Qy}))return{stdout:$y(e),stderr:``,exitCode:0};let i=n[0],a=n.slice(1);return i===`add`?rb(e,a,r,t):i===`list`?ib(e,a,r,t):eb(e,i)})}const ob=`https://cloudflare-dns.com/dns-query`,sb=`https://dns.quad9.net/dns-query`,cb=`usage: dig <name> [type] [@server] [+short] [--json]`,lb=[`A`,`AAAA`,`MX`,`TXT`,`CNAME`,`NS`,`SOA`,`SRV`,`PTR`,`CAA`],ub={"1.1.1.1":ob,"1.0.0.1":ob,"cloudflare-dns.com":ob,"8.8.8.8":`https://dns.google/resolve`,"8.8.4.4":`https://dns.google/resolve`,"dns.google":`https://dns.google/resolve`,"9.9.9.9":sb,"149.112.112.112":sb,"dns.quad9.net":sb};function db(e){let t=e.split(`.`);if(t.length!==4)return;let n=t.map(Number);if(!(t.some(e=>!/^[0-9]+$/.test(e))||n.some(e=>!Number.isInteger(e)||e<0||e>255)))return n}function fb(e){if(e.includes(`%`))return;let t=e;if(e.includes(`.`)){let n=e.lastIndexOf(`:`),r=n>=0?db(e.slice(n+1)):void 0;if(!r)return;let i=[r[0]*256+r[1],r[2]*256+r[3]].map(e=>e.toString(16));t=`${e.slice(0,n+1)}${i.join(`:`)}`}let n=t.split(`::`);if(n.length>2)return;let r=n[0]?n[0].split(`:`):[],i=n[1]?n[1].split(`:`):[],a=[...r,...i];if(!a.some(e=>!/^[0-9a-f]{1,4}$/i.test(e))){if(n.length===1)return a.length===8?a:void 0;if(!(a.length>=8))return[...r,...Array(8-a.length).fill(`0`),...i]}}function pb(e){let t=db(e);if(t)return`${t.reverse().join(`.`)}.in-addr.arpa`;let n=fb(e);if(n)return`${n.map(e=>e.padStart(4,`0`)).join(``).split(``).reverse().join(`.`)}.ip6.arpa`}function mb(e){return{kind:`error`,message:`dig: '${e}' is not a valid record type; ${cb}\n`}}function hb(e,t,n){let r=e[t+1]?.trim();if(!r)return{error:{kind:`error`,message:`dig: -x requires an address
|
|
670
|
+
`}};let i=pb(r);return i?n.name?{error:mb(r)}:(n.name=i,n.type=`PTR`,{nextIndex:t+1}):{error:{kind:`error`,message:`dig: '${r}' is not a valid IP address for -x\n`}}}function gb(e,t,n){return n.server?{error:{kind:`error`,message:`dig: multiple @server arguments
|
|
676
671
|
`}}:(n.server=e.slice(1).trim(),n.server?{nextIndex:t}:{error:{kind:`error`,message:`dig: empty @server argument
|
|
677
|
-
`}})}function
|
|
678
|
-
`};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${
|
|
672
|
+
`}})}function _b(e,t,n){let r=e.trim(),i=r.toUpperCase(),a=n.name?.toUpperCase();if(lb.includes(i)&&!n.type&&n.name)n.type=i;else if(!n.name)n.name=r;else if(a&&lb.includes(a)&&!n.type)n.name=r,n.type=a;else return{error:mb(r)};return{nextIndex:t}}function vb(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`?hb(e,t,n):r.startsWith(`@`)?gb(r,t,n):r.startsWith(`-`)?{error:{kind:`error`,message:`dig: unknown option: ${r}\n`}}:_b(r,t,n)}function yb(e){if(e.short&&e.json)return{kind:`error`,message:`dig: +short and --json are mutually exclusive
|
|
673
|
+
`};if(!e.name)return{kind:`error`,message:`dig: missing domain name\n${cb}\n`};let t=e.server?.toLowerCase(),n=t?ub[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 bb(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=vb(e,n,t);if(`error`in r)return r.error;n=r.nextIndex}return yb(t)}const xb={A:1,NS:2,CNAME:5,SOA:6,PTR:12,MX:15,TXT:16,AAAA:28,SRV:33,CAA:257},Sb=new Set(`#/:<>?@[\\]^|`);function Cb(e){return Array.from(e).some(e=>{let t=e.codePointAt(0)??0;return t<=127&&(t<33||t===127||Sb.has(e))})}function wb(e){if(Cb(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 Tb(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(wb).join(`.`)}catch{throw Error(`invalid DNS name: ${e}`)}}function Eb(e,t){let n=Tb(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=xb[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 Db(e,n,r){return`${e}?dns=${t(Eb(n,r)).replaceAll(`+`,`-`).replaceAll(`/`,`_`).replace(/=+$/,``)}`}function Ob(e,t,n){if(t<0||n<0||t+n>e.length)throw Error(`truncated DNS message`)}function kb(e,t){let n=[],r=new Set,i=t,a=t,o=!1,s=1;for(let t=0;t<=e.length;t+=1){Ob(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){Ob(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(Ob(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 Ob(e,t,2),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint16(t)}function Ab(e,t){return Ob(e,t,4),new DataView(e.buffer,e.byteOffset,e.byteLength).getUint32(t)}function jb(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 Mb(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 Nb(e,t,n){let r=t,i=[];for(;r<n;){let t=e[r];if(Ob(e,r+1,t),r+t+1>n)throw Error(`invalid TXT record`);i.push(Mb(e,r+1,r+1+t)),r+=t+1}return i.join(` `)}function Pb(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 Fb(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 jb(e,n)}if([2,5,12].includes(t)){let t=kb(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=kb(e,n+2);if(t.nextOffset!==r)throw Error(`invalid MX record`);return`${R(e,n)} ${t.name}`}if(t===16)return Nb(e,n,r);if(t===6){let t=kb(e,n),i=kb(e,t.nextOffset);if(i.nextOffset+20!==r)throw Error(`invalid SOA record`);let a=Array.from({length:5},(t,n)=>Ab(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=kb(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 Pb(e,n,r);let i=Array.from(e.subarray(n,r),e=>e.toString(16).padStart(2,`0`));return`\\# ${r-n} ${i.join(``)}`}function Ib(e,t,n,r){let i=[],a=t;for(let t=0;t<n;t+=1){let t=kb(e,a);a=t.nextOffset,Ob(e,a,10);let n=R(e,a),o=R(e,a+2),s=Ab(e,a+4),c=R(e,a+8),l=a+10,u=l+c;Ob(e,l,c);let d=Fb(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 Lb(e){return e.replace(/[A-Z]/g,e=>e.toLowerCase())}function Rb(e,t,n,r,i){let a=Tb(r).split(`.`).filter(Boolean);if(!(e.labels.length===a.length&&e.labels.every((e,t)=>Lb(e)===Lb(a[t])))||t!==xb[i]||n!==1)throw Error(`unexpected DNS response question`)}function zb(e,t,n){Ob(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=kb(e,c);c=l.nextOffset,Ob(e,c,4),Rb(l,R(e,c),R(e,c+2),t,n),c+=4;let u=Ib(e,c,a,!0);if(Ib(e,Ib(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 Bb={1:`A`,2:`NS`,5:`CNAME`,6:`SOA`,12:`PTR`,15:`MX`,16:`TXT`,28:`AAAA`,33:`SRV`,257:`CAA`},Vb={0:`NOERROR`,1:`FORMERR`,2:`SERVFAIL`,3:`NXDOMAIN`,4:`NOTIMP`,5:`REFUSED`};function Hb(){return{stdout:`usage: dig <name> [type] [@server] [+opts] [--json]
|
|
679
674
|
dig -x <address> [@server] [+opts] [--json]
|
|
680
675
|
dig -v | --version
|
|
681
676
|
|
|
682
677
|
Resolve DNS records via DNS-over-HTTPS.
|
|
683
678
|
|
|
684
|
-
Supported types: `+
|
|
679
|
+
Supported types: `+lb.join(`, `)+` (default: A).
|
|
685
680
|
|
|
686
681
|
Flags:
|
|
687
682
|
@server use a supported Cloudflare, Google, or Quad9 resolver
|
|
@@ -691,11 +686,11 @@ Flags:
|
|
|
691
686
|
+opts other dig +options are accepted as no-ops
|
|
692
687
|
--json resolver response as pretty-printed JSON
|
|
693
688
|
-h, --help show this help
|
|
694
|
-
`,stderr:``,exitCode:0}}function
|
|
689
|
+
`,stderr:``,exitCode:0}}function Ub(e){return Bb[e]??`TYPE${e}`}function Wb(e,t){let{fallbackNote:n,json:r,name:i,short:a}=t;if(typeof e.Status==`number`&&e.Status!==0)return{stdout:``,stderr:`${n}dig: ${i}: ${Vb[e.Status]??String(e.Status)}\n`,exitCode:1};if(r)return{stdout:`${JSON.stringify(e,null,2)}\n`,stderr:n,exitCode:0};let o=e.Answer??[];return o.length===0?{stdout:a?``:`;; no records found
|
|
695
690
|
`,stderr:n,exitCode:0}:a?{stdout:`${o.map(e=>e.data).join(`
|
|
696
|
-
`)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${
|
|
697
|
-
`)}\n`,stderr:n,exitCode:0}}async function
|
|
698
|
-
`,stderr:``,exitCode:0};if(n.kind===`error`)return{stdout:``,stderr:n.message,exitCode:1};let{fallbackNote:r,name:i,resolverUrl:a,type:o}=n,s=a===
|
|
691
|
+
`)}\n`,stderr:n,exitCode:0}:{stdout:`${o.map(e=>`${e.name}\t${e.TTL??0}\tIN\t${Ub(e.type)}\t${e.data}`).join(`
|
|
692
|
+
`)}\n`,stderr:n,exitCode:0}}async function Gb(e,t){let n=bb(e);if(n.kind===`version`)return{stdout:`DiG 9.20.0-slicc (DNS-over-HTTPS)
|
|
693
|
+
`,stderr:``,exitCode:0};if(n.kind===`error`)return{stdout:``,stderr:n.message,exitCode:1};let{fallbackNote:r,name:i,resolverUrl:a,type:o}=n,s=a===sb,c,l;try{c=s?Db(a,i,o):`${a}?name=${encodeURIComponent(i)}&type=${o}`,l=await t(c,{method:`GET`,headers:{Accept:s?`application/dns-message`:`application/dns-json`}})}catch(e){return{stdout:``,stderr:`${r}dig: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}if(l.status<200||l.status>=300)return{stdout:``,stderr:`${r}dig: lookup failed: ${l.status} ${l.statusText}\n`,exitCode:1};try{return Wb(s?zb(l.body,i,o):JSON.parse(new TextDecoder(`utf-8`).decode(l.body)),n)}catch{return{stdout:``,stderr:`${r}dig: invalid response from resolver\n`,exitCode:1}}}function Kb(){let e=g();return S(`dig`,async t=>t.includes(`--help`)||t.includes(`-h`)?Hb():Gb(t,e))}const qb=[`api-catalog`,`service-desc`,`service-meta`,`status`,`https://llmstxt.org/rel/llms-txt`];async function Jb(e,t={}){let n=t.fetchImpl??fetch,r=t.timeoutMs??3e3,i={links:e,failures:[]},a=[],o=new Set;for(let s of e)for(let e of s.rel)qb.includes(e)&&(o.has(e)||(o.add(e),a.push(Yb(n,s.href,r,t.signal).then(t=>Xb(i,e,t)).catch(t=>{i.failures.push({rel:e,href:s.href,error:t instanceof Error?t.message:String(t)})}))));return await Promise.all(a),i}async function Yb(e,t,n,r){let i=new AbortController,a=setTimeout(()=>i.abort(Error(`timeout`)),n),o=()=>i.abort(Error(`aborted`));r&&r.addEventListener(`abort`,o,{once:!0});try{let n=await e(t,{signal:i.signal});if(!n.ok)throw Error(`HTTP ${n.status}`);return{contentType:n.headers.get(`content-type`)??``,body:await n.text()}}finally{clearTimeout(a),r&&r.removeEventListener(`abort`,o)}}function Xb(e,t,n){if(t===`https://llmstxt.org/rel/llms-txt`){e.llmsTxt=n.body;return}let r=n.contentType.includes(`json`)||n.contentType.includes(`linkset`),i=n.body;if(r)try{i=JSON.parse(n.body)}catch{i=n.body}switch(t){case`api-catalog`:e.catalog=i;break;case`service-desc`:e.serviceDesc=i;break;case`service-meta`:e.serviceMeta=i;break;case`status`:e.status=i}}const Zb=[`--follow`];function Qb(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=h(n?.headers),a=await e(r,{method:n?.method??`GET`,...i?{headers:i}:{}});return new Response(a.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}function $b(){return`discover — fetch a URL and parse RFC 8288 Link headers
|
|
699
694
|
|
|
700
695
|
Usage:
|
|
701
696
|
discover <url> Print parsed links (and any SLICC handoff match)
|
|
@@ -709,9 +704,9 @@ Output is always JSON.
|
|
|
709
704
|
Examples:
|
|
710
705
|
discover ${r}/handoff?handoff=demo
|
|
711
706
|
discover --follow ${r}/llms.txt
|
|
712
|
-
`}function
|
|
713
|
-
`,exitCode:2};let r=t.positionals[0],i=g(),o;try{o=await i(r,{method:`GET`})}catch(e){return{stdout:``,stderr:`discover: fetch failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=[];for(let[e,t]of Object.entries(o.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&c.push(t);let l=s(c,r),u=a(l),d={url:r,status:o.status,links:l,handoff:u};if(n&&l.length>0){let e=await
|
|
714
|
-
`,stderr:``,exitCode:0}})}function
|
|
707
|
+
`}function ex(){return S(`discover`,async e=>{if(e.length===0||w(e))return{stdout:$b(),stderr:``,exitCode:0};let t=C(e,{bool:Zb});if(`error`in t)return{stdout:``,stderr:`discover: ${t.error}\n`,exitCode:1};let n=t.bools.has(`--follow`);if(t.positionals.length!==1)return{stdout:``,stderr:`discover: expected exactly one URL argument
|
|
708
|
+
`,exitCode:2};let r=t.positionals[0],i=g(),o;try{o=await i(r,{method:`GET`})}catch(e){return{stdout:``,stderr:`discover: fetch failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=[];for(let[e,t]of Object.entries(o.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&c.push(t);let l=s(c,r),u=a(l),d={url:r,status:o.status,links:l,handoff:u};if(n&&l.length>0){let e=await Jb(l,{fetchImpl:Qb(i)});d.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}return{stdout:JSON.stringify(d,null,2)+`
|
|
709
|
+
`,stderr:``,exitCode:0}})}function tx(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 nx=`esbuild - thin wrapper over the ipk-loaded esbuild-wasm
|
|
715
710
|
|
|
716
711
|
Usage:
|
|
717
712
|
esbuild [options] <entry> Bundle / transform
|
|
@@ -749,12 +744,12 @@ Module resolution:
|
|
|
749
744
|
|
|
750
745
|
Install:
|
|
751
746
|
Inert until the backing package is installed:
|
|
752
|
-
${N} esbuild-wasm@${
|
|
747
|
+
${N} esbuild-wasm@${di}
|
|
753
748
|
Then \`esbuild --version\` and the bundle/transform commands above.
|
|
754
|
-
`,
|
|
755
|
-
`,exitCode:2};let r;try{r=await
|
|
756
|
-
`,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:[
|
|
757
|
-
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=
|
|
749
|
+
`,rx=new Set([`iife`,`cjs`,`esm`]),ix=new Set([`browser`,`node`,`neutral`]),ax=new Set([`linked`,`inline`,`external`,`both`]),ox={"-h":`showHelp`,"--help":`showHelp`,"-v":`showVersion`,"--version":`showVersion`,"--bundle":`bundle`,"--transform":`transform`,"--minify":`minify`};function sx(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 cx(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 lx(e,t,n,r){if(t.inlineValue!==null){if(!ax.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`&&ax.has(i)?(e.sourcemap=i,1):(e.sourcemap=!0,0)}function ux(e,t,n,r){if(t.key===`--outfile`){let{value:i,advance:a}=cx(t,n,r);return e.outfile=i,a}if(t.key===`--format`){let{value:i,advance:a}=cx(t,n,r);if(!rx.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}=cx(t,n,r);if(!ix.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}=cx(t,n,r);return e.target=i.split(`,`).map(e=>e.trim()).filter(Boolean),a}if(t.key===`--loader`){let{value:i,advance:a}=cx(t,n,r);return e.loader=i,a}return-1}function dx(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 fx(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=ox[r];if(i){t[i]=!0;continue}if(r.startsWith(`--external:`)){t.external.push(r.slice(11));continue}if(dx(r,`--define:`,t.define)||dx(r,`--banner:`,t.banner)||dx(r,`--footer:`,t.footer))continue;let a=sx(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+=lx(t,a,e,n);continue}let o=ux(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 px(e,t,n,r,i){return{name:`slicc-vfs`,setup(a){a.onResolve({filter:/.*/},async a=>{if(a.kind!==`entry-point`&&mx(a.path,r)||/^[a-z]+:/.test(a.path)&&!a.path.startsWith(`file:`))return{path:a.path,external:!0};if(gx(a.path)){let n=a.importer?.startsWith(`/`)?Sr(a.importer):t;return{path:await yx(e,e.resolvePath(n,a.path))}}return _x(a.path,a.importer,n,hx(i,a.kind))}),a.onLoad({filter:/.*/},async t=>t.namespace&&t.namespace!==`file`?null:{contents:await e.readFile(t.path),loader:vx(t.path),resolveDir:Sr(t.path)})}}}function mx(e,t){return t.some(t=>{if(e===t)return!0;if(!t.includes(`*`))return!gx(t)&&e.startsWith(`${t}/`);let n=t.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(`*`,`.*`);return RegExp(`^${n}$`).test(e)})}function hx(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 gx(e){return e.startsWith(`./`)||e.startsWith(`../`)||e.startsWith(`/`)}async function _x(e,t,n,r){let i=t?.startsWith(`/`)?Sr(t):n.fromDir;try{let t=await dr(e,i,n.reader,{conditions:r});return t.type===`file`?{path:t.path}:{path:e,external:!0}}catch(e){return{errors:[{text:e instanceof Error?e.message:String(e)}]}}}function vx(e){let t=vr(e).toLowerCase(),n=t.lastIndexOf(`.`);if(n<0)return`js`;switch(t.slice(n+1)){case`ts`:return`ts`;case`tsx`:return`tsx`;case`jsx`:return`jsx`;case`mjs`:case`cjs`:case`js`:return`js`;case`json`:return`json`;case`css`:return`css`;case`txt`:return`text`;default:return`js`}}async function yx(e,t){if(await e.exists(t))try{if(!(await e.stat(t)).isDirectory)return t}catch{return t}let n=[`.ts`,`.tsx`,`.jsx`,`.mjs`,`.cjs`,`.js`,`.json`];for(let r of n){let n=`${t}${r}`;if(await e.exists(n))return n}for(let r of n){let n=_r(t,`index${r}`);if(await e.exists(n))return n}return t}async function bx(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 xx(){return S(`esbuild`,async(e,t)=>{let n;try{n=fx(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:nx,stderr:``,exitCode:0};if(!n.transform&&!n.bundle&&n.entries.length>1)return{stdout:``,stderr:`esbuild: multiple entry points require --bundle (transform mode accepts at most one entry)
|
|
750
|
+
`,exitCode:2};let r;try{r=await ui({ipk:tx(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?Sx(n,t,r):Cx(n,t,r)})}async function Sx(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:nx,stderr:``,exitCode:0};let a={loader:e.loader??vx(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 bx(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 bx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}async function Cx(e,t,n){if(e.entries.length===0)return{stdout:``,stderr:`esbuild: --bundle requires at least one entry point
|
|
751
|
+
`,exitCode:2};let r=e.entries.map(e=>t.fs.resolvePath(t.cwd,e));for(let e of r)if(!await t.fs.exists(e))return{stdout:``,stderr:`esbuild: ${e}: no such file\n`,exitCode:1};let i={entryPoints:r,bundle:!0,write:!1,plugins:[px(t.fs,t.cwd,tx(t),e.external,e.platform)],format:e.format??`esm`,...wx(e)};try{let r=await n.build(i),a=await bx(n.formatMessages,r.errors,r.warnings),o=r.outputFiles??[];if(e.outfile){if(o.length===0)return{stdout:``,stderr:`esbuild: build produced no output
|
|
752
|
+
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e.outfile);await t.fs.writeFile(n,o[0].text);let r=Sr(n);for(let e=1;e<o.length;e++){let n=o[e],i=_r(r,vr(n.path));await t.fs.writeFile(i,n.text)}return{stdout:``,stderr:a,exitCode:0}}return{stdout:o.map(e=>e.text).join(``),stderr:a,exitCode:0}}catch(e){let t=e;return Array.isArray(t.errors)?{stdout:``,stderr:await bx(n.formatMessages,t.errors,t.warnings??[]),exitCode:1}:{stdout:``,stderr:`esbuild: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function wx(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 Tx(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}var Ex=class{ops(){return import(`./esptool-operations-h8-8jVn_.js`)}registry(){if(!Zr())throw Error(`Web Serial is unavailable in this browser`);return ri()}async chipInfo(e,t,n){return(await this.ops()).esptoolChipInfo(this.registry(),e,t,n)}async readMac(e,t,n){return(await this.ops()).esptoolReadMac(this.registry(),e,t,n)}async eraseFlash(e,t,n){await(await this.ops()).esptoolEraseFlash(this.registry(),e,t,n)}async flash(e,t,n,r,i){await(await this.ops()).esptoolFlash(this.registry(),e,t,n,r,i)}async readFlash(e,t,n,r,i){return(await this.ops()).esptoolReadFlash(this.registry(),e,t,n,r,i)}async readReg(e,t,n,r){return(await this.ops()).esptoolReadReg(this.registry(),e,t,n,r)}async flashId(e,t,n){return(await this.ops()).esptoolFlashId(this.registry(),e,t,n)}async eraseRegion(e,t,n,r,i){await(await this.ops()).esptoolEraseRegion(this.registry(),e,t,n,r,i)}async run(e,t,n){await(await this.ops()).esptoolRun(this.registry(),e,t,n)}},Dx=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:Tx(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 Ox(e,t){return e&&Zr()?new Ex:t?new Dx(t):null}const kx=Symbol(`picker-approval-timeout`);async function Ax(e,t,n){let r=Me.generateId(),i=!1,a=Ne({id:r,html:Am(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 kx;throw e}),o,s=new Promise(t=>{o=setTimeout(()=>{i=!0,Me.cancel(r,`${e}: timed out`),t(kx)},12e4)}),c=await Promise.race([a,s]);if(o&&clearTimeout(o),c===kx)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 jx=new Set([`--vid`,`--pid`,`--baud`,`--data-bits`,`--stop-bits`,`--parity`,`--flow-control`,`--buffer-size`,`--bytes`,`--until`,`--timeout-ms`,`--dtr`,`--rts`,`--break`,`--__resolved`]);function Mx(e){return jn(e,jx)}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 Nx(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 Px(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 Fx=new Set([`none`,`even`,`odd`]),Ix=new Set([`none`,`hardware`]);function Lx(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(!Fx.has(n))throw Error(`invalid --parity: '${n}'`);t.parity=n}if(e.has(`--flow-control`)){let n=e.get(`--flow-control`);if(!Ix.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 Rx(e){let t={};return e.has(`--bytes`)&&(t.maxBytes=z(e.get(`--bytes`),`bytes`)),e.has(`--until`)&&(t.until=Nx(e.get(`--until`))),e.has(`--timeout-ms`)&&(t.timeoutMs=z(e.get(`--timeout-ms`),`timeout-ms`)),t}function zx(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 Bx(e){let t={};return e.has(`--dtr`)&&(t.dataTerminalReady=zx(e.get(`--dtr`),`dtr`)),e.has(`--rts`)&&(t.requestToSend=zx(e.get(`--rts`),`rts`)),e.has(`--break`)&&(t.break=zx(e.get(`--break`),`break`)),t}function Vx(e){let t=_i(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function Hx(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function Ux(e){return`0x${e.toString(16).padStart(4,`0`)}`}function Wx(e){let t=e.usbVendorId!==void 0||e.usbProductId!==void 0?`${Ux(e.usbVendorId??0)}:${Ux(e.usbProductId??0)}`:`(native serial)`,n=e.opened?` [open]`:``;return`${e.handle}\t${t}${n}`}function Gx(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 Kx=`serial - access serial ports via Web Serial
|
|
758
753
|
|
|
759
754
|
Usage: serial <subcommand> [options]
|
|
760
755
|
|
|
@@ -773,7 +768,7 @@ Open flags:
|
|
|
773
768
|
--parity none|even|odd --flow-control none|hardware --buffer-size N
|
|
774
769
|
|
|
775
770
|
Read flags:
|
|
776
|
-
--bytes N Stop after N bytes (default: ${
|
|
771
|
+
--bytes N Stop after N bytes (default: ${oi} cap)
|
|
777
772
|
--until <hex> Stop once this byte sequence is seen
|
|
778
773
|
--timeout-ms N Stop after N ms (default 1000)
|
|
779
774
|
--hex Hex-dump the bytes instead of emitting raw
|
|
@@ -784,10 +779,10 @@ Signal flags (set):
|
|
|
784
779
|
Options:
|
|
785
780
|
-h, --help
|
|
786
781
|
|
|
787
|
-
Reads/writes are capped at ${
|
|
788
|
-
`;function
|
|
789
|
-
`):B(`${t.map(
|
|
790
|
-
`)}\n`)}async function
|
|
782
|
+
Reads/writes are capped at ${oi} bytes (4 MiB).
|
|
783
|
+
`;function qx(e,t){if(t)return B(e.length?`${Hx(e)}\n`:``);let n=``;for(let t=0;t<e.length;t++)n+=String.fromCharCode(e[t]);return B(n)}async function Jx(e){let t=await e.list();return t.length===0?B(`no granted serial ports
|
|
784
|
+
`):B(`${t.map(Wx).join(`
|
|
785
|
+
`)}\n`)}async function Yx(e,t){let n=e.get(`--__resolved`);if(n)return B(`${Wx(await t.info(n))}\n`);let r=Px(e),i=je();if(i){let e=await Ax(`serial-port`,r,i);if(e.handle)return B(`${Wx(await t.info(e.handle))}\n`);let n=e.info,a=Zr();if(!a)return V(`request: Web Serial unavailable for port re-acquire`);let o=(await a.getPorts()).find(e=>{let t=typeof e.getInfo==`function`?e.getInfo():{};return(n.usbVendorId===void 0||t.usbVendorId===n.usbVendorId)&&(n.usbProductId===void 0||t.usbProductId===n.usbProductId)});if(!o)return V(`request: granted port could not be re-acquired`);let s=ri(),c=s.register(o),l=s.get(c);return l?B(`${Wx(Xr(c,l))}\n`):V(`request: failed to register granted port`)}return B(`${Wx(await t.request(r))}\n`)}async function Xx(e,t,n){let r=e[1];return r?(await n.open(r,Lx(t)),B(``)):V(`open: handle required`)}async function Zx(e,t){let n=e[1];return n?(await t.close(n),B(``)):V(`close: handle required`)}async function Qx(e,t,n,r){let i=e[1];if(!i)return V(`read: handle required`);let a=Rx(t);return a.maxBytes!==void 0&&a.maxBytes>4194304?V(`read --bytes exceeds 4 MiB limit`):qx(await r.read(i,a),n.has(`--hex`))}async function $x(e,t,n){let r=e[1];if(!r)return V(`write: handle required`);let i=Vx(t);return i.length>4194304?V(`write payload exceeds 4 MiB limit`):B(`${await n.write(r,i)} bytes written\n`)}async function eS(e,t,n){let[,r,i]=e;return!r||!i?V(`signals: handle and get|set required`):i===`get`?B(Gx(await n.getSignals(r))):i===`set`?(await n.setSignals(r,Bx(t)),B(``)):V(`signals: unknown action '${i}' (use get|set)`)}async function tS(e,t,n){let{positionals:r,flags:i,bools:a}=Mx(e),o=r[0];switch(o){case`list`:return Jx(n);case`request`:return Yx(i,n);case`open`:return Xx(r,i,n);case`close`:return Zx(r,n);case`read`:return Qx(r,i,a,n);case`write`:return $x(r,t,n);case`signals`:return eS(r,i,n);default:return V(`unknown subcommand '${o??``}'. Try 'serial --help'.`)}}function nS(){return S(`serial`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return B(Kx);let n=ei(de(),y());if(!n)return V(`Web Serial is unavailable in this environment`);try{return await tS(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 rS=new Set([`--port`,`--baud`,`--vid`,`--pid`]),iS=115200;function aS(e){return jn(e,rS)}function oS(e){let t=e.replace(/-/g,`_`);return t===`chip_info`||t===`id`?`chip_id`:t}function sS(e){return{stdout:e,stderr:``,exitCode:0}}function cS(e){return{stdout:``,stderr:`esptool: ${e}\n`,exitCode:1}}const lS=`esptool - flash ESP32 / ESP8266 chips via esptool-js
|
|
791
786
|
|
|
792
787
|
Usage: esptool [--port H] [--baud N] <subcommand> [args]
|
|
793
788
|
|
|
@@ -804,37 +799,37 @@ Subcommands:
|
|
|
804
799
|
|
|
805
800
|
Options:
|
|
806
801
|
--port H Use an existing serial handle from 'serial request'
|
|
807
|
-
--baud N Flash baud rate (default ${
|
|
802
|
+
--baud N Flash baud rate (default ${iS})
|
|
808
803
|
--vid 0x.. Picker filter when --port is omitted
|
|
809
804
|
--pid 0x.. Picker filter when --port is omitted
|
|
810
805
|
--erase write_flash: erase the whole chip before writing
|
|
811
806
|
-h, --help
|
|
812
807
|
|
|
813
808
|
Without --port, the Web Serial picker opens (asks for permission).
|
|
814
|
-
`;async function
|
|
815
|
-
`)}\n`)}case`read_mac`:{let e=await
|
|
816
|
-
`)}\n`)}case`erase_flash`:{let e=await
|
|
809
|
+
`;async function uS(e,t){return e.get(`--port`)||(await t.request(Px(e))).handle}async function dS(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 fS(e,t,n,r){let{positionals:i,flags:a,bools:o}=aS(e),s=oS(i[0]??``),c=a.has(`--baud`)?z(a.get(`--baud`),`baud`):iS,l=[],u=e=>l.push(e);switch(s){case`chip_id`:{let e=await uS(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}`),sS(`${l.join(`
|
|
810
|
+
`)}\n`)}case`read_mac`:{let e=await uS(a,r),{mac:t}=await n.readMac(e,c,u);return l.push(`MAC: ${t}`),sS(`${l.join(`
|
|
811
|
+
`)}\n`)}case`erase_flash`:{let e=await uS(a,r);return await n.eraseFlash(e,c,u),sS(l.length?`${l.join(`
|
|
817
812
|
`)}\n`:`flash erased
|
|
818
|
-
`)}case`write_flash`:{let e=await
|
|
813
|
+
`)}case`write_flash`:{let e=await dS(i,t),s=await uS(a,r);return await n.flash(s,c,o.has(`--erase`),e,u),sS(l.length?`${l.join(`
|
|
819
814
|
`)}\n`:`flash written
|
|
820
|
-
`)}case`read_flash`:{if(i.length<4)return
|
|
821
|
-
`)}\n`)}case`read_reg`:{if(i.length<2)return
|
|
822
|
-
`)}\n`)}case`flash_id`:{let e=await
|
|
823
|
-
`)}\n`)}case`erase_region`:{if(i.length<3)return
|
|
815
|
+
`)}case`read_flash`:{if(i.length<4)return cS(`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 uS(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}`),sS(`${l.join(`
|
|
816
|
+
`)}\n`)}case`read_reg`:{if(i.length<2)return cS(`read_reg expects <addr>`);let e=z(i[1],`address`),t=await uS(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`)}`),sS(`${l.join(`
|
|
817
|
+
`)}\n`)}case`flash_id`:{let e=await uS(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`}`),sS(`${l.join(`
|
|
818
|
+
`)}\n`)}case`erase_region`:{if(i.length<3)return cS(`erase_region expects <addr> <size>`);let e=z(i[1],`address`),t=z(i[2],`size`),o=await uS(a,r);return await n.eraseRegion(o,c,e,t,u),sS(l.length?`${l.join(`
|
|
824
819
|
`)}\n`:`region erased
|
|
825
|
-
`)}case`run`:{let e=await
|
|
820
|
+
`)}case`run`:{let e=await uS(a,r);return await n.run(e,c,u),sS(l.length?`${l.join(`
|
|
826
821
|
`)}\n`:`running app
|
|
827
|
-
`)}default:return
|
|
822
|
+
`)}default:return cS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function pS(){return S(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return sS(lS);let n=de(),r=y(),i=Ox(n,r),a=ei(n,r);if(!i||!a)return cS(`Web Serial is unavailable in this environment`);try{return await fS(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?cS(`user cancelled or no port selected`):cS(t)}})}function mS(){return S(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-dcwnpB-U.js`);return n(e,t)})}function hS(){return S(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-yplzwsG-.js`);return n(e,t)})}function gS(e){let t=fe().find(t=>t.id===e);return t?t.id:null}function _S(){return fe().map(e=>e.id)}function vS(e){return me(e)}function yS(e,t){if(pe(e,t),ge()[e]!==t)throw Error(`flag ${e} cannot be overridden on this float`)}function bS(e){let t=globalThis.localStorage;if(!t||typeof t.setItem!=`function`)throw Error(`this realm has no localStorage to apply the override`);t.setItem(_e,e)}const xS=`usage: flags set <id> on|off
|
|
828
823
|
flags get <id>
|
|
829
824
|
|
|
830
825
|
set <id> on|off Persist a local override. The next new session reads it.
|
|
831
826
|
get <id> Print the resolved value
|
|
832
|
-
`;function
|
|
827
|
+
`;function SS(e){return{stdout:``,stderr:`${e}\n`,exitCode:1}}function CS(){return`known flags: ${_S().join(`, `)}\n`}async function wS(e,t){let n=y();if(n&&!de()){let{overridesJson:r}=await n.call(`feature-flag-set`,{id:e,value:t});bS(r)}else yS(e,t);if(vS(e)!==t)throw Error(`flag ${e} is ${vS(e)??`unset`} after set`)}async function TS(e){if(e.length!==2)return SS(`usage: flags set <id> on|off`);let t=gS(e[0]);if(!t)return SS(`flags: unknown flag ${e[0]}\n${CS().trimEnd()}`);let n=e[1].toLowerCase();if(n!==`on`&&n!==`off`)return SS(`flags set: value must be on or off`);try{await wS(t,n)}catch(e){return SS(`flags set: ${e instanceof Error?e.message:String(e)}`)}return{stdout:`${t}=${n}\n`,stderr:``,exitCode:0}}function ES(e){if(e.length!==1)return SS(`usage: flags get <id>`);let t=gS(e[0]);if(!t)return SS(`flags: unknown flag ${e[0]}\n${CS().trimEnd()}`);let n=vS(t);return n===void 0?SS(`flags: ${t} has no value`):{stdout:`${n}\n`,stderr:``,exitCode:0}}function DS(){return S(`flags`,async e=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:xS,stderr:``,exitCode:0};let t=e[0];if(w(e.slice(1)))return{stdout:ot(`flags`,t,xS),stderr:``,exitCode:0};switch(t){case`set`:return TS(e.slice(1));case`get`:return ES(e.slice(1));default:return SS(`flags: unknown subcommand "${t}"\nusage: flags set <id> on|off
|
|
833
828
|
flags get <id>
|
|
834
829
|
|
|
835
830
|
set <id> on|off Persist a local override. The next new session reads it.
|
|
836
|
-
get <id> Print the resolved value`)}})}const
|
|
837
|
-
`);let n=``;for(let[,e]of
|
|
831
|
+
get <id> Print the resolved value`)}})}const OS=new Map;let kS=0;const AS=e=>({stdout:e,stderr:``,exitCode:0}),jS=e=>({stdout:``,stderr:`fswatch: ${e}\n`,exitCode:1}),MS=[`--path`,`--pattern`,`--scoop`,`--name`];function NS(e){let t=C(e.slice(1),{});if(`error`in t)return jS(t.error);if(OS.size===0)return AS(`No active file watchers.
|
|
832
|
+
`);let n=``;for(let[,e]of OS)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 AS(n)}function PS(e){let t=C(e.slice(1),{});if(`error`in t)return jS(t.error);let n=t.positionals[0];if(!n)return jS(`delete requires an ID`);let r=OS.get(n);return r?(r.unsubscribe(),OS.delete(n),AS(`Deleted watcher "${r.name}" (${n})\n`)):jS(`watcher not found: ${n}`)}function FS(e){let t=C(e.slice(1),{value:MS});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 IS(e){let t=RegExp(`^`+e.replace(/\./g,`\\.`).replace(/\*/g,`.*`)+`$`);return e=>t.test(e.split(`/`).pop()??``)}async function LS(e,t){let n=FS(e);if(`error`in n)return jS(n.error);let r=n,i=r.scoop||void 0;if(r.scoop=ta(r.scoop,t)??``,!r.basePath||!r.pattern)return jS(`--path and --pattern are required`);let a=await ly(await sy(),`fswatch create`,i);if(a)return{stdout:``,stderr:a,exitCode:1};let o=globalThis,s=o.__slicc_fs_watcher;if(!s)return jS(`file system watcher not available`);let c=`fsw-${++kS}`,l=r.name||`${r.pattern} in ${r.basePath}`,u=o.__slicc_lick_handler,d=s.watch(r.basePath,IS(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}})});OS.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`),AS(f)}function RS(){return S(`fswatch`,async(e,t)=>{let n=e[0];if(!n||w(e,{valueFlags:MS}))return AS(`usage: fswatch <command> [options]
|
|
838
833
|
|
|
839
834
|
Commands:
|
|
840
835
|
create --path <path> --pattern <glob> [--scoop <name>] [--name <name>] Watch for file changes
|
|
@@ -846,7 +841,7 @@ Options:
|
|
|
846
841
|
--pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
|
|
847
842
|
--scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
|
|
848
843
|
--name <name> Human-readable name for the watcher
|
|
849
|
-
`);switch(n){case`list`:return
|
|
844
|
+
`);switch(n){case`list`:return NS(e);case`delete`:return PS(e);case`create`:return await LS(e,t.env);default:return jS(`unknown command: ${n}`)}})}function zS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-ZVh0R1Qb.js`);return r(t,n,e)})}function BS(e={}){return S(`go`,async(t,n)=>{let{runGoCommand:r}=await import(`./go-driver-CKhlxhTD.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}function VS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
|
|
850
845
|
hear --devices | --status | --warmup
|
|
851
846
|
|
|
852
847
|
Speech recognition: listens on the microphone until you pause, then
|
|
@@ -865,26 +860,26 @@ Options:
|
|
|
865
860
|
--devices List audio input devices
|
|
866
861
|
--status Show the enhanced model state (downloading/ready + ETA)
|
|
867
862
|
--warmup Start the enhanced model download in the background
|
|
868
|
-
`,stderr:``,exitCode:0}}const
|
|
863
|
+
`,stderr:``,exitCode:0}}const HS={"--devices":`devices`,"--status":`status`,"--warmup":`warmup`},US={"-i":`a file path`,"-l":`a language tag`,"-T":`a timeout in seconds`,"-d":`a device id`,"--engine":`an engine name`};function WS(e,t,n){switch(t){case`-i`:return e.inputFile=n,null;case`-l`:return e.lang=n,null;case`-d`:return e.deviceId=n,null;case`-T`:{let t=Number.parseFloat(n);return Number.isNaN(t)||t<=0||t>600?`-T requires a timeout between 0 and 600 seconds`:(e.timeoutSeconds=t,null)}case`--engine`:return n!==`builtin`&&n!==`enhanced`?`--engine must be builtin or enhanced`:(e.engine=n,null);default:return`unknown option: ${t}`}}function GS(e){let t={inputFile:null,lang:void 0,timeoutSeconds:30,deviceId:void 0,engine:`auto`,devices:!1,status:!1,warmup:!1};for(let n=0;n<e.length;n++){let r=e[n],i=HS[r];if(i){t[i]=!0;continue}if(!(r in US))return H(`unknown option: ${r}`);let a=n+1<e.length?e[++n]:null;if(a==null)return H(`${r} requires ${US[r]}`);let o=WS(t,r,a);if(o)return H(o)}return t}function KS(e){switch(e.state){case`ready`:return`enhanced engine: ready
|
|
869
864
|
`;case`failed`:return`enhanced engine: failed (re-run hear --warmup to retry)
|
|
870
865
|
`;case`idle`:return`enhanced engine: not downloaded (run hear --warmup)
|
|
871
|
-
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`enhanced engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function H(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function
|
|
866
|
+
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`enhanced engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function H(e){return{stdout:``,stderr:`hear: ${e}\n`,exitCode:1}}function qS(e){return e instanceof Error?e.message:String(e)}function JS(e){let t=e.map((e,t)=>`${e.deviceId}\t${e.label||`Microphone ${t+1}`}`);return t.join(`
|
|
872
867
|
`)+(t.length?`
|
|
873
|
-
`:``)}async function
|
|
874
|
-
`,stderr:``,exitCode:0}}catch(e){return H(`transcription failed: ${
|
|
868
|
+
`:``)}async function YS(e){try{return e.local?navigator.mediaDevices?.enumerateDevices?{stdout:JS((await navigator.mediaDevices.enumerateDevices()).filter(e=>e.kind===`audioinput`)),stderr:``,exitCode:0}:H(`device enumeration unavailable`):{stdout:JS((await e.panelRpc.call(`enumerate-media-devices`,void 0)).audioinputs),stderr:``,exitCode:0}}catch(e){return H(qS(e))}}async function XS(e,t){try{if(e.local){let{hearStatus:e,hearWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:KS(t?n():e()),stderr:``,exitCode:0}}return{stdout:KS(t?await e.panelRpc.call(`hear-warmup`,void 0):await e.panelRpc.call(`hear-status`,void 0)),stderr:``,exitCode:0}}catch(e){return H(qS(e))}}function ZS(e){let t=new ArrayBuffer(e.byteLength);return new Uint8Array(t).set(e),t}async function QS(e,t,n,r){if(n.byteLength===0)return H(`no audio on ${r}`);let i=ZS(n);try{return{stdout:(e.local?await(await import(`./speech-page-realm-stub-C7EPKrHd.js`)).hearTranscribe(i,t.lang):await e.panelRpc.call(`hear-transcribe`,{bytes:i,lang:t.lang},{timeoutMs:6e5})).transcript+`
|
|
869
|
+
`,stderr:``,exitCode:0}}catch(e){return H(`transcription failed: ${qS(e)}`)}}async function $S(e,t,n){let r=t.inputFile,i=n.fs.resolvePath(n.cwd,r),a;try{a=new Uint8Array(await n.fs.readFileBuffer(i))}catch{return H(`cannot open ${r}: No such file`)}let o=fr(i);return!o.startsWith(`audio/`)&&!o.startsWith(`video/`)?H(`${r} is not an audio file`):QS(e,t,a,r)}async function eC(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+`
|
|
875
870
|
`,stderr:``,exitCode:0}:{stdout:``,stderr:`hear: no speech detected
|
|
876
|
-
`,exitCode:1}}catch(e){return H(
|
|
871
|
+
`,exitCode:1}}catch(e){return H(qS(e))}}function tC(){return S(`hear`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return VS();let n=GS(e);if(`exitCode`in n)return n;let r={local:de(),panelRpc:y()};if(!r.local&&!r.panelRpc)return H(`speech recognition unavailable in this environment`);if(n.devices)return YS(r);if(n.status||n.warmup)return XS(r,n.warmup);if(n.inputFile&&n.inputFile!==`-`)return $S(r,n,t);let i=vi(t.stdin);return n.inputFile===`-`||n.deviceId==null&&!nr(t,i.byteLength)?QS(r,n,i,`stdin`):eC(r,n)})}function nC(e,t,n){return typeof e.onSessionReplaced==`function`?e.onSessionReplaced(t,n):()=>void 0}function rC(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=nC(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 iC=[`debug`,`log`,`info`,`warning`,`error`],aC=1e3,oC={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 sC(e,t,n,r,i){if(t.consoleCleanup.has(r))return;t.consoleMessages.set(r,[]);let a=rC({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=oC[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>aC&&c.splice(0,c.length-aC))}]],enable:(e,t)=>e.send(`Runtime.enable`,{},t)});t.consoleCleanup.set(r,()=>a.stop())}const cC=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=iC.indexOf(o);if(c===-1)return{stdout:``,stderr:`Invalid level "${o}". Valid: ${iC.join(`, `)}\n`,exitCode:1};t.consoleCleanup.has(a.targetId)||await i(a.targetId,async({sessionId:n,transport:r})=>{await r.send(`Runtime.enable`,{},n),sC(e,t,r,a.targetId,n)});let l=(t.consoleMessages.get(a.targetId)??[]).filter(e=>iC.indexOf(e.level)>=c);return s&&t.consoleMessages.set(a.targetId,[]),l.length===0?{stdout:`No console messages
|
|
877
872
|
`,stderr:``,exitCode:0}:{stdout:l.map(e=>`[${e.level}] ${e.text}`).join(`
|
|
878
873
|
`)+`
|
|
879
|
-
`,stderr:``,exitCode:0}};function
|
|
874
|
+
`,stderr:``,exitCode:0}};function lC(e){return e.cookies??[]}function uC(e){return`${e.name}=${e.value}\tDomain=${e.domain}\tPath=${e.path}\tSecure=${e.secure}\tHttpOnly=${e.httpOnly}\tExpires=${e.expires}`}function dC(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 fC(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 pC=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=lC(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(uC).join(`
|
|
880
875
|
`)})+`
|
|
881
|
-
`,stderr:``,exitCode:0}},
|
|
882
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return{stdout:await r(i.targetId,async e=>{let t=
|
|
876
|
+
`,stderr:``,exitCode:0}},mC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-get requires a cookie name
|
|
877
|
+
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return{stdout:await r(i.targetId,async e=>{let t=lC(await e.send(`Network.getCookies`)).filter(e=>e.name===a);if(t.length===0)throw Error(`Cookie "${a}" not found`);return t.map(uC).join(`
|
|
883
878
|
`)})+`
|
|
884
|
-
`,stderr:``,exitCode:0}},
|
|
885
|
-
`,exitCode:1};let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await
|
|
886
|
-
`,exitCode:1};let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r={name:t[0]};n.domain&&(r.domain=n.domain),n.path&&(r.path=n.path),!r.domain&&!r.path&&(r.url=(await
|
|
887
|
-
`,stderr:``,exitCode:0})},
|
|
879
|
+
`,stderr:``,exitCode:0}},hC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length<2)return{stdout:``,stderr:`cookie-set requires <name> <value>
|
|
880
|
+
`,exitCode:1};let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r=await Jn(e),i={name:t[0],value:t[1]};n.domain&&(i.domain=n.domain),n.path&&(i.path=n.path),n.secure===`true`&&(i.secure=!0),n.httpOnly===`true`&&(i.httpOnly=!0),n.expires&&(i.expires=parseFloat(n.expires)),n.sameSite&&(i.sameSite=n.sameSite),!i.domain&&!i.path&&(i.url=r.href),await e.send(`Network.setCookie`,dC(i))}),{stdout:`Cookie "${t[0]}" set\n`,stderr:``,exitCode:0})},gC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`cookie-delete requires a cookie name
|
|
881
|
+
`,exitCode:1};let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{let r={name:t[0]};n.domain&&(r.domain=n.domain),n.path&&(r.path=n.path),!r.domain&&!r.path&&(r.url=(await Jn(e)).href),await e.send(`Network.deleteCookies`,fC(r))}),{stdout:`Cookie "${t[0]}" deleted\n`,stderr:``,exitCode:0})},_C=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Network.clearBrowserCookies`)}),{stdout:`All cookies cleared
|
|
882
|
+
`,stderr:``,exitCode:0})},vC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`generate-locator requires a ref (e.g. e5)
|
|
888
883
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=t.snapshots.get(a.targetId);if(!s)return{stdout:``,stderr:`No snapshot available. Run "snapshot" first.
|
|
889
884
|
`,exitCode:1};let c=s.refToBackendNodeId.get(o);if(!c){let e=s.refToSelector.get(o);return e?{stdout:`page.locator(${JSON.stringify(e.split(`,`)[0].trim())})\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Unknown ref "${o}"\n`,exitCode:1}}let l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`DOM.enable`,{},e);let n=(await t.send(`DOM.resolveNode`,{backendNodeId:c},e)).object;if(!n?.objectId){let e=s.refToSelector.get(o)?.split(`,`)[0].trim()??``;l=`page.locator(${JSON.stringify(e)})`;return}let r=await t.send(`Runtime.callFunctionOn`,{objectId:n.objectId,functionDeclaration:`function() {
|
|
890
885
|
const el = this;
|
|
@@ -896,7 +891,7 @@ Options:
|
|
|
896
891
|
const id = el.id;
|
|
897
892
|
return JSON.stringify({ testId, label, placeholder, id });
|
|
898
893
|
}`,returnByValue:!0},e),i=JSON.parse(r.result?.value??`{}`);if(i.testId)l=`page.getByTestId(${JSON.stringify(i.testId)})`;else if(i.label)l=`page.getByLabel(${JSON.stringify(i.label)})`;else if(i.placeholder)l=`page.getByPlaceholder(${JSON.stringify(i.placeholder)})`;else if(i.id)l=`page.locator(${JSON.stringify(`#${i.id}`)})`;else{let e=s.refToSelector.get(o)?.split(`,`)[0].trim()??``;l=`page.locator(${JSON.stringify(e)})`}}),{stdout:l+`
|
|
899
|
-
`,stderr:``,exitCode:0}},
|
|
894
|
+
`,stderr:``,exitCode:0}},yC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r.hide===`true`,s=r.style??`outline: 3px solid #ff4444; background: rgba(255, 68, 68, 0.1);`;if(o&&!n[0])return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Runtime.evaluate`,{expression:`document.querySelectorAll('[data-slicc-highlight]').forEach(el => {
|
|
900
895
|
el.style.outline = '';
|
|
901
896
|
el.style.background = '';
|
|
902
897
|
el.removeAttribute('data-slicc-highlight');
|
|
@@ -924,35 +919,35 @@ Options:
|
|
|
924
919
|
el.style.cssText += '; ' + styleVal;
|
|
925
920
|
el.setAttribute('data-slicc-highlight','1');
|
|
926
921
|
}
|
|
927
|
-
})()`;await t.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},e)}}),{stdout:o?`Highlight removed from ${c}\n`:`Highlighted ${c}\n`,stderr:``,exitCode:0}},
|
|
928
|
-
`,stderr:``,exitCode:0})};function
|
|
929
|
-
`,exitCode:1};let a=
|
|
930
|
-
`,stderr:``,exitCode:0}},
|
|
931
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=
|
|
932
|
-
`,stderr:``,exitCode:0}};function
|
|
933
|
-
`,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await
|
|
934
|
-
`,stderr:i?`${i}\n`:``,exitCode:+!!a.error}};function
|
|
922
|
+
})()`;await t.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},e)}}),{stdout:o?`Highlight removed from ${c}\n`:`Highlighted ${c}\n`,stderr:``,exitCode:0}},bC=async({browser:e,positional:t,flags:n,onTab:r})=>{let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t.length>0?t.join(` `):void 0;return await r(i.targetId,async e=>{await e.send(`Page.enable`),await e.send(`Page.handleJavaScriptDialog`,{accept:!0,...a===void 0?{}:{promptText:a}})}),{stdout:`Accepted dialog${a?` with "${a}"`:``}\n`,stderr:``,exitCode:0}},xC=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.enable`),await e.send(`Page.handleJavaScriptDialog`,{accept:!1})}),{stdout:`Dismissed dialog
|
|
923
|
+
`,stderr:``,exitCode:0})};function SC(e){let t=e instanceof Error?e.message:String(e);return/SyntaxError/.test(t)}function CC(e){return/\bawait\b/.test(e)||/\breturn\b/.test(e)}async function wC(e,t){try{return await e(t)}catch(n){if(!SC(n)||!CC(t))throw n;try{return await e(`(async () => (\n${t}\n))()`)}catch(r){if(!SC(r))throw r;try{return await e(`(async () => {\n${t}\n})()`)}catch(e){throw SC(e)?n:e}}}}function TC(e,t){let n=t.filename,r=t.output;return n!==void 0&&r!==void 0?{error:`${e}: --filename and --output are aliases — pass one, not both\n`}:{path:n??r}}const EC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval requires an expression
|
|
924
|
+
`,exitCode:1};let a=TC(`eval`,r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=n.join(` `),c=await i(o.targetId,async e=>{let t=await Yn(e,r),n=await wC(t?n=>e.evaluateInFrame(t.frameId,n,{world:`main`}):t=>e.evaluate(t),s);return typeof n==`string`?n:JSON.stringify(n,null,2)});return a.path?(await t.writeFile(a.path,c??`null`),{stdout:`Result saved to ${a.path}\n`,stderr:``,exitCode:0}):{stdout:(c??`undefined`)+`
|
|
925
|
+
`,stderr:``,exitCode:0}},DC=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`eval-file requires a file path
|
|
926
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=TC(`eval-file`,r);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=s.path,l;try{l=await t.readTextFile(o)}catch(e){return{stdout:``,stderr:`eval-file: cannot read ${o}: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let u=await i(a.targetId,async e=>{let t=await Yn(e,r),n=await wC(t?n=>e.evaluateInFrame(t.frameId,n,{world:`main`}):t=>e.evaluate(t),l);return typeof n==`string`?n:JSON.stringify(n,null,2)});if(c){let e=u??`null`;return await t.writeFile(c,e),{stdout:`Result saved to ${c} (${Math.round(new TextEncoder().encode(e).length/1024)} KB)\n`,stderr:``,exitCode:0}}return{stdout:(u??`undefined`)+`
|
|
927
|
+
`,stderr:``,exitCode:0}};function OC(e){return async(t,n)=>{let r=typeof t==`string`?t:t instanceof URL?t.toString():t.url,i=h(n?.headers),a=await e(r,{method:n?.method??`GET`,...i?{headers:i}:{}});return new Response(a.body,{status:a.status,statusText:a.statusText,headers:a.headers})}}async function kC(e){let t=new Set;try{let n=await e.readDir(`/workspace/skills`);for(let e of n)e.type===`directory`&&e.name.startsWith(`browse-`)&&t.add(e.name)}catch{}return t}async function AC(e,t,n){let r=``;try{r=new URL(e).hostname}catch{return{}}let i=r?sh(r):``;if(!i)return{};let a;try{a=await uh(n)}catch(e){return{warning:`playwright-cli: warning: browse.sh catalog unavailable: ${e instanceof Error?e.message:String(e)}`}}let o=await kC(t),s=[];for(let e of a){if(!e.hostname||sh(e.hostname)!==i)continue;let t=e.name||e.task.replace(/-[A-Za-z0-9]{4,8}$/,``)||e.task,n=`browse-${e.hostname}-${t}`;s.push({slug:e.slug,name:e.name,title:e.title||e.name||e.task,recommendedMethod:e.recommendedMethod,installed:o.has(n),installHint:`upskill browse:${e.hostname}/${e.task}`})}return{skills:s}}async function jC(e,t={}){let n=t.fetchImpl??g(),r;try{r=await n(e,{method:t.method??`GET`})}catch(t){return{url:e,links:[],handoff:null,error:t instanceof Error?t.message:String(t)}}let i=[];for(let[e,t]of Object.entries(r.headers))e.toLowerCase()===`link`&&typeof t==`string`&&t.length>0&&i.push(t);let o=s(i,e),c=a(o),l={url:e,status:r.status,links:o,handoff:c};if(t.discover&&o.length>0){let e=await Jb(o,{fetchImpl:OC(n)});l.discovery={catalog:e.catalog,serviceDesc:e.serviceDesc,serviceMeta:e.serviceMeta,status:e.status,llmsTxt:e.llmsTxt,failures:e.failures}}else t.discover&&(l.discovery={failures:[]});if(t.discover&&t.fs){let r=await AC(e,t.fs,n);r.warning?l.browseShWarning=r.warning:r.skills&&r.skills.length>0&&(l.discovery={...l.discovery??{failures:[]},browseShSkills:r.skills})}return l}const MC=async({fs:e,positional:t,flags:n})=>{if(t.length===0)return{stdout:``,stderr:`fetch requires a URL
|
|
928
|
+
`,exitCode:1};let r=t[0],{browseShWarning:i,...a}=await jC(r,{discover:n.discover===`true`,method:n.method??`GET`,fs:e});return{stdout:JSON.stringify(a,null,2)+`
|
|
929
|
+
`,stderr:i?`${i}\n`:``,exitCode:+!!a.error}};function NC(e){if(!e)return 0;let t={Alt:1,Control:2,Meta:4,Shift:8};return e.split(`,`).map(e=>t[e.trim()]??0).reduce((e,t)=>e|t,0)}async function PC(e){await e.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:`Enter`}),await e.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:`Enter`})}async function FC(e,t,n){((await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Un,returnByValue:!0})).result?.value??``)!==n&&await e.send(`Runtime.callFunctionOn`,{objectId:t,functionDeclaration:Nn,arguments:[{value:n}],returnByValue:!0})}async function IC(e,t,n){await e.clickByBackendNodeId(t),await e.send(`DOM.enable`),await e.send(`Runtime.enable`);let r=(await e.send(`DOM.resolveNode`,{backendNodeId:t})).object;r?.objectId&&await e.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:Hn,returnByValue:!0}),await e.insertText(n),r?.objectId&&await FC(e,r.objectId,n)}async function LC(e,t,n){await e.click(t),await e.evaluate(`(function() {
|
|
935
930
|
const el = document.querySelector(${JSON.stringify(t)});
|
|
936
|
-
if (el) { return (${
|
|
931
|
+
if (el) { return (${Hn}).call(el); }
|
|
937
932
|
return false;
|
|
938
933
|
})()`),await e.insertText(n);let r=t.split(`,`)[0].trim();await e.evaluate(`(function() {
|
|
939
934
|
const el = document.querySelector(${JSON.stringify(r)});
|
|
940
935
|
if (!el) return '';
|
|
941
|
-
return (${
|
|
936
|
+
return (${Un}).call(el);
|
|
942
937
|
})()`)!==n&&await e.evaluate(`(function() {
|
|
943
938
|
const el = document.querySelector(${JSON.stringify(r)});
|
|
944
939
|
if (!el) return;
|
|
945
|
-
(${
|
|
946
|
-
})()`)}const
|
|
947
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=
|
|
940
|
+
(${Nn}).call(el, ${JSON.stringify(n)});
|
|
941
|
+
})()`)}const RC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`click requires a ref (e.g. e5)
|
|
942
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=NC(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
948
943
|
var el = document.querySelector(${JSON.stringify(s)});
|
|
949
944
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
950
945
|
el.scrollIntoView({ block: 'center' });
|
|
951
946
|
el.click();
|
|
952
947
|
})()`),t.snapshots.delete(a.targetId),`Clicked ${o} (in iframe)`}let c=n.refToBackendNodeId.get(o);if(c)return await e.clickByBackendNodeId(c,s),t.snapshots.delete(a.targetId),`Clicked ${o}`;let l=n.refToSelector.get(o);if(!l)throw Error(`Unknown ref "${o}". Available: ${[...n.refToSelector.keys()].slice(0,10).join(`, `)}...`);return await e.click(l,s),t.snapshots.delete(a.targetId),`Clicked ${o}`})+`
|
|
953
|
-
`,stderr:``,exitCode:0}},
|
|
954
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t.join(` `);return await r(i.targetId,async e=>{await e.type(a),n.submit===`true`&&await
|
|
955
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n.slice(1).join(` `);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:i}=
|
|
948
|
+
`,stderr:``,exitCode:0}},zC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`type requires text
|
|
949
|
+
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t.join(` `);return await r(i.targetId,async e=>{await e.type(a),n.submit===`true`&&await PC(e)}),{stdout:`Typed: ${a}\n`,stderr:``,exitCode:0}},BC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`fill requires <ref> <text>
|
|
950
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n.slice(1).join(` `);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:i}=Mn(o),c=n.refToFrameId?.get(o);if(i&&c){let i=n.refToSelector.get(o);if(!i)throw Error(`Unknown ref "${o}" in iframe`);let l=i.split(`,`)[0].trim();return await e.evaluateInFrame(c,`(function() {
|
|
956
951
|
var el = document.querySelector(${JSON.stringify(l)});
|
|
957
952
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
958
953
|
el.scrollIntoView({ block: 'center' });
|
|
@@ -961,33 +956,33 @@ Options:
|
|
|
961
956
|
el.value = ${JSON.stringify(s)};
|
|
962
957
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
963
958
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
964
|
-
})()`),t.snapshots.delete(a.targetId),r.submit===`true`&&await
|
|
965
|
-
`,stderr:``,exitCode:0}},
|
|
966
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:a},e),await t.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:a},e)}),{stdout:`Pressed ${a}\n`,stderr:``,exitCode:0}},
|
|
967
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:a},e)}),{stdout:`Key ${a} down\n`,stderr:``,exitCode:0}},
|
|
968
|
-
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:a},e)}),{stdout:`Key ${a} up\n`,stderr:``,exitCode:0}},
|
|
969
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=
|
|
959
|
+
})()`),t.snapshots.delete(a.targetId),r.submit===`true`&&await PC(e),`Filled ${o} with: ${s} (in iframe)`}let l=n.refToBackendNodeId.get(o);if(l)return await IC(e,l,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await PC(e),`Filled ${o} with: ${s}`;let u=n.refToSelector.get(o);if(!u)throw Error(`Unknown ref "${o}"`);return await LC(e,u,s),t.snapshots.delete(a.targetId),r.submit===`true`&&await PC(e),`Filled ${o} with: ${s}`})+`
|
|
960
|
+
`,stderr:``,exitCode:0}},VC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`press requires a key name
|
|
961
|
+
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:a},e),await t.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:a},e)}),{stdout:`Pressed ${a}\n`,stderr:``,exitCode:0}},HC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keydown requires a key name
|
|
962
|
+
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyDown`,key:a},e)}),{stdout:`Key ${a} down\n`,stderr:``,exitCode:0}},UC=async({browser:e,positional:t,flags:n,onTab:r})=>{if(t.length===0)return{stdout:``,stderr:`keyup requires a key name
|
|
963
|
+
`,exitCode:1};let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=t[0];return await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchKeyEvent`,{type:`keyUp`,key:a},e)}),{stdout:`Key ${a} up\n`,stderr:``,exitCode:0}},WC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`dblclick requires a ref (e.g. e5)
|
|
964
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1]||`left`,c=NC(r.modifiers);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
970
965
|
var el = document.querySelector(${JSON.stringify(s)});
|
|
971
966
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
972
967
|
el.scrollIntoView({ block: 'center' });
|
|
973
968
|
el.dispatchEvent(new MouseEvent('dblclick', { bubbles: true }));
|
|
974
969
|
})()`),t.snapshots.delete(a.targetId),`Double-clicked ${o} (in iframe)`}let l=n.refToBackendNodeId.get(o);if(!l)throw Error(`Unknown ref "${o}"`);return await e.dblclickByBackendNodeId(l,s,c),t.snapshots.delete(a.targetId),`Double-clicked ${o}`})+`
|
|
975
|
-
`,stderr:``,exitCode:0}},
|
|
976
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=
|
|
970
|
+
`,stderr:``,exitCode:0}},GC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`hover requires a ref (e.g. e5)
|
|
971
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let t=n.refToSelector.get(o);if(!t)throw Error(`Unknown ref "${o}" in iframe`);let r=t.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
977
972
|
var el = document.querySelector(${JSON.stringify(r)});
|
|
978
973
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
979
974
|
el.scrollIntoView({ block: 'center' });
|
|
980
975
|
el.dispatchEvent(new MouseEvent('mouseover', { bubbles: true }));
|
|
981
976
|
})()`),`Hovered ${o} (in iframe)`}let s=n.refToBackendNodeId.get(o);if(!s)throw Error(`Unknown ref "${o}"`);return await e.hoverByBackendNodeId(s),`Hovered ${o}`})+`
|
|
982
|
-
`,stderr:``,exitCode:0}},
|
|
983
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n.slice(1).join(` `);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=
|
|
977
|
+
`,stderr:``,exitCode:0}},KC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`select requires <ref> <value>
|
|
978
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n.slice(1).join(` `);return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let c=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
984
979
|
var el = document.querySelector(${JSON.stringify(c)});
|
|
985
980
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
986
981
|
el.value = ${JSON.stringify(s)};
|
|
987
982
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
988
983
|
})()`),t.snapshots.delete(a.targetId),`Selected "${s}" on ${o} (in iframe)`}let c=n.refToBackendNodeId.get(o);if(!c)throw Error(`Unknown ref "${o}"`);return await e.selectByBackendNodeId(c,s),t.snapshots.delete(a.targetId),`Selected "${s}" on ${o}`})+`
|
|
989
|
-
`,stderr:``,exitCode:0}},
|
|
990
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=
|
|
984
|
+
`,stderr:``,exitCode:0}},qC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`check requires a ref (e.g. e5)
|
|
985
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
991
986
|
var el = document.querySelector(${JSON.stringify(s)});
|
|
992
987
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
993
988
|
if (!el.checked) {
|
|
@@ -996,8 +991,8 @@ Options:
|
|
|
996
991
|
el.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
|
997
992
|
}
|
|
998
993
|
})()`),t.snapshots.delete(a.targetId),`Checked ${o} (in iframe)`}let s=n.refToBackendNodeId.get(o);if(!s)throw Error(`Unknown ref "${o}"`);let c=await e.setCheckedByBackendNodeId(s,!0);return c===`toggled`&&t.snapshots.delete(a.targetId),c===`already`?`${o} already checked`:`Checked ${o}`})+`
|
|
999
|
-
`,stderr:``,exitCode:0}},
|
|
1000
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=
|
|
994
|
+
`,stderr:``,exitCode:0}},JC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`uncheck requires a ref (e.g. e5)
|
|
995
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let{isIframe:r}=Mn(o),i=n.refToFrameId?.get(o);if(r&&i){let r=n.refToSelector.get(o);if(!r)throw Error(`Unknown ref "${o}" in iframe`);let s=r.split(`,`)[0].trim();return await e.evaluateInFrame(i,`(function() {
|
|
1001
996
|
var el = document.querySelector(${JSON.stringify(s)});
|
|
1002
997
|
if (!el) throw new Error('Element not found in iframe for ref ${o}');
|
|
1003
998
|
if (el.checked) {
|
|
@@ -1006,14 +1001,14 @@ Options:
|
|
|
1006
1001
|
el.dispatchEvent(new MouseEvent('click', { bubbles: true }));
|
|
1007
1002
|
}
|
|
1008
1003
|
})()`),t.snapshots.delete(a.targetId),`Unchecked ${o} (in iframe)`}let s=n.refToBackendNodeId.get(o);if(!s)throw Error(`Unknown ref "${o}"`);let c=await e.setCheckedByBackendNodeId(s,!1);return c===`toggled`&&t.snapshots.delete(a.targetId),c===`already`?`${o} already unchecked`:`Unchecked ${o}`})+`
|
|
1009
|
-
`,stderr:``,exitCode:0}},
|
|
1004
|
+
`,stderr:``,exitCode:0}},YC=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`drag requires <startRef> <endRef>
|
|
1010
1005
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s=n[1];return{stdout:await i(a.targetId,async e=>{let n=t.snapshots.get(a.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let r=n.refToBackendNodeId.get(o),i=n.refToBackendNodeId.get(s);if(!r)throw Error(`Unknown ref "${o}"`);if(!i)throw Error(`Unknown ref "${s}"`);return await e.dragByBackendNodeIds(r,i),t.snapshots.delete(a.targetId),`Dragged ${o} to ${s}`})+`
|
|
1011
|
-
`,stderr:``,exitCode:0}};async function
|
|
1006
|
+
`,stderr:``,exitCode:0}};async function XC(e,t){let n=await e.readFile(t,{encoding:`binary`});if(n instanceof Uint8Array)return n;if(typeof n!=`string`)throw Error(`cannot represent '${t}' faithfully: unexpected file content type`);if(n.includes(`�`))throw Error(`cannot represent '${t}' faithfully: file was read as text (contains U+FFFD). Binary files must be read as bytes, not UTF-8.`);return new TextEncoder().encode(n)}function ZC(e){return e===void 0?`left`:e===`left`||e===`right`||e===`middle`?e:{error:`Invalid button "${e}". Must be left, right, or middle.\n`}}const QC={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,pdf:`application/pdf`,txt:`text/plain`,json:`application/json`,csv:`text/csv`,html:`text/html`,htm:`text/html`,xml:`application/xml`,zip:`application/zip`,mp4:`video/mp4`,mp3:`audio/mpeg`};function $C(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return QC[t]??`application/octet-stream`}const ew=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousemove requires <x> <y>
|
|
1012
1007
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);return isNaN(o)||isNaN(s)?{stdout:``,stderr:`x and y must be numbers
|
|
1013
|
-
`,exitCode:1}:(await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:o,y:s,button:`none`,modifiers:0},e)}),t.lastMousePosition.set(a.targetId,{x:o,y:s}),{stdout:`Mouse moved to (${o}, ${s})\n`,stderr:``,exitCode:0})},
|
|
1008
|
+
`,exitCode:1}:(await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:o,y:s,button:`none`,modifiers:0},e)}),t.lastMousePosition.set(a.targetId,{x:o,y:s}),{stdout:`Mouse moved to (${o}, ${s})\n`,stderr:``,exitCode:0})},tw=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=ZC(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} pressed\n`,stderr:``,exitCode:0}},nw=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=ZC(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} released\n`,stderr:``,exitCode:0}},rw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousewheel requires <dx> <dy>
|
|
1014
1009
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);if(isNaN(o)||isNaN(s))return{stdout:``,stderr:`dx and dy must be numbers
|
|
1015
|
-
`,exitCode:1};let c=t.lastMousePosition.get(a.targetId)??{x:0,y:0},l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{if((await t.send(`Runtime.evaluate`,{expression:`document.visibilityState`,returnByValue:!0},e)).result?.value===`hidden`){let n=await t.send(`Runtime.evaluate`,{expression:
|
|
1016
|
-
`;return}await t.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,deltaX:o,deltaY:s,x:c.x,y:c.y,modifiers:0},e)}),{stdout:`Mouse wheel scrolled (dx=${o}, dy=${s})\n`,stderr:l,exitCode:0}};function
|
|
1010
|
+
`,exitCode:1};let c=t.lastMousePosition.get(a.targetId)??{x:0,y:0},l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{if((await t.send(`Runtime.evaluate`,{expression:`document.visibilityState`,returnByValue:!0},e)).result?.value===`hidden`){let n=await t.send(`Runtime.evaluate`,{expression:iw(c.x,c.y,o,s),returnByValue:!0},e);if(n.exceptionDetails)throw Error(n.exceptionDetails.exception?.description??n.exceptionDetails.text??`Page scroll failed`);l=`note: the tab is in the background, so the wheel was applied as a page scroll
|
|
1011
|
+
`;return}await t.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,deltaX:o,deltaY:s,x:c.x,y:c.y,modifiers:0},e)}),{stdout:`Mouse wheel scrolled (dx=${o}, dy=${s})\n`,stderr:l,exitCode:0}};function iw(e,t,n,r){return`(() => {
|
|
1017
1012
|
const dx = ${JSON.stringify(n)}, dy = ${JSON.stringify(r)};
|
|
1018
1013
|
const canScroll = (el) => {
|
|
1019
1014
|
const style = getComputedStyle(el);
|
|
@@ -1032,8 +1027,8 @@ Options:
|
|
|
1032
1027
|
: (document.scrollingElement || document.documentElement);
|
|
1033
1028
|
target.scrollBy({ left: dx, top: dy, behavior: 'instant' });
|
|
1034
1029
|
return true;
|
|
1035
|
-
})()`}const
|
|
1036
|
-
`,exitCode:1};let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0],l=a.path,u=a.data,d=[];if(l){let e=await
|
|
1030
|
+
})()`}const aw=async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`drop requires a ref (e.g. e5)
|
|
1031
|
+
`,exitCode:1};let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0],l=a.path,u=a.data,d=[];if(l){let e=await XC(n,l),r=l.split(`/`).pop()??l;d.push({name:r,type:$C(r),base64:t(e)})}let f=[];if(u){let e=u.indexOf(`=`);if(e===-1)return{stdout:``,stderr:`--data format must be "mime/type=value"
|
|
1037
1032
|
`,exitCode:1};f.push({mimeType:u.slice(0,e),value:u.slice(e+1)})}return{stdout:await o(s.targetId,async({sessionId:e,transport:t})=>{let n=r.snapshots.get(s.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let i=n.refToBackendNodeId.get(c);if(i){await t.send(`DOM.enable`,{},e);let n=await t.send(`DOM.resolveNode`,{backendNodeId:i},e),a=await t.send(`Runtime.callFunctionOn`,{objectId:n.object.objectId,functionDeclaration:`function(filesData, dataItems) {
|
|
1038
1033
|
var dt = new DataTransfer();
|
|
1039
1034
|
for (var i = 0; i < filesData.length; i++) {
|
|
@@ -1048,7 +1043,7 @@ Options:
|
|
|
1048
1043
|
this.dispatchEvent(new DragEvent('dragover', { bubbles: true, cancelable: true, dataTransfer: dt }));
|
|
1049
1044
|
this.dispatchEvent(new DragEvent('drop', { bubbles: true, cancelable: true, dataTransfer: dt }));
|
|
1050
1045
|
return this.tagName;
|
|
1051
|
-
}`,arguments:[{value:d},{value:f}],returnByValue:!0},e);if(a.exceptionDetails){let e=a.exceptionDetails.exception?.description??a.exceptionDetails.text??`Drop failed`;throw Error(e)}return r.snapshots.delete(s.targetId),`Dropped onto ${c}`}let{isIframe:a}=
|
|
1046
|
+
}`,arguments:[{value:d},{value:f}],returnByValue:!0},e);if(a.exceptionDetails){let e=a.exceptionDetails.exception?.description??a.exceptionDetails.text??`Drop failed`;throw Error(e)}return r.snapshots.delete(s.targetId),`Dropped onto ${c}`}let{isIframe:a}=Mn(c),o=n.refToFrameId?.get(c),l;if(a&&o){let e=n.refToSelector.get(c);if(!e)throw Error(`Unknown ref "${c}" in iframe`);l=e.split(`,`)[0].trim()}else{let e=n.refToSelector.get(c);if(!e)throw Error(`Unknown ref "${c}". Available: ${[...n.refToSelector.keys()].slice(0,10).join(`, `)}...`);l=e.split(`,`)[0].trim()}let u=JSON.stringify(d),p=JSON.stringify(f),m=`(function() {
|
|
1052
1047
|
var el = document.querySelector(${JSON.stringify(l)});
|
|
1053
1048
|
if (!el) throw new Error('Element not found for ref ${c}: ' + ${JSON.stringify(l)});
|
|
1054
1049
|
var dt = new DataTransfer();
|
|
@@ -1068,7 +1063,7 @@ Options:
|
|
|
1068
1063
|
el.dispatchEvent(new DragEvent('drop', { bubbles: true, cancelable: true, dataTransfer: dt }));
|
|
1069
1064
|
return true;
|
|
1070
1065
|
})()`,h=await t.send(`Runtime.evaluate`,{expression:m,returnByValue:!0,awaitPromise:!1},e);if(h.exceptionDetails){let e=h.exceptionDetails.exception?.description??h.exceptionDetails.text??`Drop failed`;throw Error(e)}return r.snapshots.delete(s.targetId),`Dropped onto ${c}`})+`
|
|
1071
|
-
`,stderr:``,exitCode:0}},
|
|
1066
|
+
`,stderr:``,exitCode:0}},ow=e(`playwright-teleport`),sw={origin:``,localStorage:{},sessionStorage:{}};function cw(e){let t=new Map;for(let n of e){let e=n.domain??`unknown`;t.set(e,(t.get(e)??0)+1)}return[...t.entries()].sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${t} ${e}`).join(`, `)}function lw(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function uw(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function dw(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function fw(e,t,n){let r=uw(t);if(t&&r===e)return t;let i=uw(n);return n&&i===e?n:e||(t??n)}async function pw(e,t){let n=await e.evaluate(`(() => {
|
|
1072
1067
|
const collect = (storage) => {
|
|
1073
1068
|
const items = {};
|
|
1074
1069
|
for (let i = 0; i < storage.length; i++) {
|
|
@@ -1082,7 +1077,7 @@ Options:
|
|
|
1082
1077
|
localStorage: collect(window.localStorage),
|
|
1083
1078
|
sessionStorage: collect(window.sessionStorage),
|
|
1084
1079
|
});
|
|
1085
|
-
})()`);if(typeof n!=`string`||n.length===0)return
|
|
1080
|
+
})()`);if(typeof n!=`string`||n.length===0)return ow.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),sw;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return ow.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),sw}}function mw(e){return`(() => {
|
|
1086
1081
|
const snapshot = ${JSON.stringify(e)};
|
|
1087
1082
|
if (!snapshot.origin || window.location.origin !== snapshot.origin) return;
|
|
1088
1083
|
const markerKey = '__slicc_teleport_storage_applied__:' + snapshot.origin;
|
|
@@ -1098,7 +1093,7 @@ Options:
|
|
|
1098
1093
|
apply(window.localStorage, snapshot.localStorage || {});
|
|
1099
1094
|
apply(window.sessionStorage, snapshot.sessionStorage || {});
|
|
1100
1095
|
try { window.sessionStorage.setItem(markerKey, '1'); } catch {}
|
|
1101
|
-
})();`}function
|
|
1096
|
+
})();`}function hw(e){return`(() => {
|
|
1102
1097
|
const snapshot = ${JSON.stringify(e)};
|
|
1103
1098
|
if (!snapshot.origin || globalThis.location.origin !== snapshot.origin) {
|
|
1104
1099
|
throw new Error('Teleport storage origin mismatch');
|
|
@@ -1116,88 +1111,88 @@ Options:
|
|
|
1116
1111
|
localStorageCount: Object.keys(snapshot.localStorage || {}).length,
|
|
1117
1112
|
sessionStorageCount: Object.keys(snapshot.sessionStorage || {}).length,
|
|
1118
1113
|
});
|
|
1119
|
-
})();`}async function
|
|
1114
|
+
})();`}async function gw(e,t,n){let r=lw(t);if(r===0)return;let i=await e.evaluate(hw(t));ow.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),ow.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function _w(e,t,n){let r=lw(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:mw(t)}),a=typeof i.identifier==`string`?i.identifier:null;return ow.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),ow.debug(`Installed teleport storage init script details`,{target:n,origin:t.origin||`(unknown)`,localStorageCount:Object.keys(t.localStorage).length,sessionStorageCount:Object.keys(t.sessionStorage).length,hasIdentifier:!!a}),a?{identifier:a,targetId:e.targetId}:null}async function vw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){ow.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function yw(e){let t=await e.evaluate(`(() => JSON.stringify({
|
|
1120
1115
|
url: window.location.href,
|
|
1121
1116
|
title: document.title || '',
|
|
1122
1117
|
bodySnippet: document.body?.innerText?.replace(/\\s+/g, ' ').trim().slice(0, 500) || '(empty)',
|
|
1123
|
-
}))()`);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 Uw(e){return/callback|authorize\/resume|error/i.test(e)}async function Ww(e,t,n){try{let r=await Hw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,kw.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){kw.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function Gw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>Vw(e,r,`follower`)),kw.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){kw.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function Kw(e){return Array.isArray(e)?e:[]}const U=e(`playwright-teleport`);let qw=null,Jw=null;function Yw(e){qw=e}function Xw(e){Jw=e}function Zw(){return Jw?.()??null}async function Qw(e,t){if(U.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),U.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>Ww(e,t,`timeout`))}catch(e){U.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await Gw(e,t,`timeout`)}if($w(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){U.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function $w(e){U.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function eT(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);U.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),U.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);U.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(U.info(`Teleport start pattern matched on leader`),U.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),nT(e,t,c,a).catch(e=>{U.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){U.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{U.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function tT(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,U.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,U.info(`Follower reached auth provider; waiting for return pattern`),U.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):U.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}U.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),Uw(o)&&await e.withTab(r,e=>Ww(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(U.info(`Follower return pattern matched after auth`),U.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),sT(e,t,n,i).catch(e=>{U.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){U.warn(`Error polling follower tab URL`,{error:String(e)})}}async function nT(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,U.info(`Teleport triggered`),U.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=Aw;try{a=Kw((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),U.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){U.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>Iw(e,`leader`)),U.info(`Captured leader storage for follower`,{totalEntries:Mw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=qw?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}U.info(`Selected follower for teleport`),U.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,U.info(`Opened follower tab for teleport`),U.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),U.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){U.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await Bw(e,o,`follower`),U.info(`Navigating follower to intercepted auth URL`),U.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),U.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&Qw(e,n).catch(e=>{U.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,U.info(`Teleport waiting for follower auth redirect`),U.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{tT(e,t,n,l,s).catch(e=>{U.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){U.error(`Teleport trigger failed`,{error:String(t)}),await Gw(e,n,`trigger-error`),n.phase=`done`,$w(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function rT(e,t){U.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),U.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){U.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);U.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){U.warn(`Could not read follower page content`,{error:String(e)})}let i=Kw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?jw(i):`none`;U.info(`Captured cookies from follower`,{count:i.length}),U.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=Aw;try{o=await Iw(e,`follower`),U.info(`Captured follower storage for leader`,{totalEntries:Mw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture follower storage`,{error:String(e)})}return await Ww(e,t,`capture`),await Vw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),U.info(`Closed follower tab after teleport`),U.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){U.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function iT(e,t,n,r){try{await e.navigate(n),await zw(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){U.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),U.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await Bw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await Vw(e,a,`leader`)}}}async function aT(e,t,n,r,i){let a=e.targetId,o=await Bw(e,n,`leader`);try{r&&(U.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:Mw(n)}),U.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:Mw(n)}),await e.navigate(r))}finally{await Vw(e,o,`leader`)}}async function oT(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=Fw(o,t.originalLeaderUrl,i),c=Nw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?Pw(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),U.info(`Injected cookies into leader tab`,{count:n.length}),U.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(U.info(`Hydrating leader storage origin before landing`,{storageEntries:Mw(r)}),U.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:Mw(r)}),await iT(e,r,u,s)):await aT(e,t,r,s,i)}),s):(U.warn(`No leader tab available for auth-state injection`),s)}async function sT(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,U.info(`Capturing auth state from follower`),U.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await rT(e,n),o=Mw(i),s=await oT(e,n,t,i,a);n.phase=`done`,$w(n);let c=t.length>0?` (${jw(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;U.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),U.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){U.error(`Teleport auth-state capture failed`,{error:String(t)}),await Gw(e,n,`capture-error`),n.phase=`done`,$w(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const cT=e(`playwright`),lT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1124
|
-
`,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){
|
|
1125
|
-
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},
|
|
1126
|
-
`,stderr:``,exitCode:0})},
|
|
1127
|
-
`,stderr:``,exitCode:0})},
|
|
1128
|
-
`,stderr:``,exitCode:0})},
|
|
1129
|
-
`,exitCode:1}:(await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Network.enable`,{},e),await t.send(`Network.emulateNetworkConditions`,{offline:a===`offline`,latency:0,downloadThroughput:-1,uploadThroughput:-1},e)}),{stdout:`Network set to ${a}\n`,stderr:``,exitCode:0})},
|
|
1118
|
+
}))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function bw(e){return/callback|authorize\/resume|error/i.test(e)}async function xw(e,t,n){try{let r=await yw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,ow.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){ow.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function Sw(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>vw(e,r,`follower`)),ow.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){ow.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function Cw(e){return Array.isArray(e)?e:[]}const U=e(`playwright-teleport`);let ww=null,Tw=null;function Ew(e){ww=e}function Dw(e){Tw=e}function Ow(){return Tw?.()??null}async function kw(e,t){if(U.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),U.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>xw(e,t,`timeout`))}catch(e){U.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await Sw(e,t,`timeout`)}if(Aw(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){U.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function Aw(e){U.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function jw(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);U.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),U.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);U.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(U.info(`Teleport start pattern matched on leader`),U.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),Nw(e,t,c,a).catch(e=>{U.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){U.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{U.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function Mw(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,U.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,U.info(`Follower reached auth provider; waiting for return pattern`),U.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):U.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}U.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),bw(o)&&await e.withTab(r,e=>xw(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(U.info(`Follower return pattern matched after auth`),U.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),Rw(e,t,n,i).catch(e=>{U.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){U.warn(`Error polling follower tab URL`,{error:String(e)})}}async function Nw(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,U.info(`Teleport triggered`),U.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=sw;try{a=Cw((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),U.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){U.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>pw(e,`leader`)),U.info(`Captured leader storage for follower`,{totalEntries:lw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=ww?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}U.info(`Selected follower for teleport`),U.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,U.info(`Opened follower tab for teleport`),U.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),U.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){U.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await _w(e,o,`follower`),U.info(`Navigating follower to intercepted auth URL`),U.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),U.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&kw(e,n).catch(e=>{U.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,U.info(`Teleport waiting for follower auth redirect`),U.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{Mw(e,t,n,l,s).catch(e=>{U.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){U.error(`Teleport trigger failed`,{error:String(t)}),await Sw(e,n,`trigger-error`),n.phase=`done`,Aw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function Pw(e,t){U.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),U.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){U.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);U.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){U.warn(`Could not read follower page content`,{error:String(e)})}let i=Cw((await e.send(`Network.getCookies`)).cookies),a=i.length>0?cw(i):`none`;U.info(`Captured cookies from follower`,{count:i.length}),U.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=sw;try{o=await pw(e,`follower`),U.info(`Captured follower storage for leader`,{totalEntries:lw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),U.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){U.warn(`Could not capture follower storage`,{error:String(e)})}return await xw(e,t,`capture`),await vw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),U.info(`Closed follower tab after teleport`),U.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){U.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function Fw(e,t,n,r){try{await e.navigate(n),await gw(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){U.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),U.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await _w(e,t,`leader`);try{r&&await e.navigate(r)}finally{await vw(e,a,`leader`)}}}async function Iw(e,t,n,r,i){let a=e.targetId,o=await _w(e,n,`leader`);try{r&&(U.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:lw(n)}),U.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:lw(n)}),await e.navigate(r))}finally{await vw(e,o,`leader`)}}async function Lw(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=fw(o,t.originalLeaderUrl,i),c=uw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?dw(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),U.info(`Injected cookies into leader tab`,{count:n.length}),U.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(U.info(`Hydrating leader storage origin before landing`,{storageEntries:lw(r)}),U.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:lw(r)}),await Fw(e,r,u,s)):await Iw(e,t,r,s,i)}),s):(U.warn(`No leader tab available for auth-state injection`),s)}async function Rw(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,U.info(`Capturing auth state from follower`),U.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await Pw(e,n),o=lw(i),s=await Lw(e,n,t,i,a);n.phase=`done`,Aw(n);let c=t.length>0?` (${cw(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;U.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),U.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){U.error(`Teleport auth-state capture failed`,{error:String(t)}),await Sw(e,n,`capture-error`),n.phase=`done`,Aw(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const zw=e(`playwright`),Bw=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1119
|
+
`,exitCode:1};let o=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){zw.info(`Arming teleport via goto/navigate flags`),zw.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&&(Aw(u),n.teleportWatchers.delete(o.targetId)),jw(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await jC(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
|
|
1120
|
+
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},Vw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.back()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated back
|
|
1121
|
+
`,stderr:``,exitCode:0})},Hw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.forward()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated forward
|
|
1122
|
+
`,stderr:``,exitCode:0})},Uw=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
|
|
1123
|
+
`,stderr:``,exitCode:0})},Ww=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=j(t);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0];return a!==`online`&&a!==`offline`?{stdout:``,stderr:`network-state-set requires "online" or "offline"
|
|
1124
|
+
`,exitCode:1}:(await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Network.enable`,{},e),await t.send(`Network.emulateNetworkConditions`,{offline:a===`offline`,latency:0,downloadThroughput:-1,uploadThroughput:-1},e)}),{stdout:`Network set to ${a}\n`,stderr:``,exitCode:0})},Gw=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function Kw(e,t){if(e&&Gw.some(t=>e.startsWith(t)))return!0;try{let e=new URL(t).pathname;return/\.(png|jpe?g|gif|webp|svg|ico|woff2?|ttf|eot|otf|css|js|mjs)$/i.test(e)}catch{return!1}}function qw(e,t,n,r,i){if(t.networkCleanup.has(r))return;t.networkRequests.set(r,[]),t.networkRequestIndex.set(r,new Map);let a=1,o=rC({browser:e,targetId:r,transport:n,sessionId:i,listeners:[[`Network.requestWillBeSent`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,s=n.request;if(!i||!s)return;let c=t.networkRequests.get(r),l=t.networkRequestIndex.get(r);if(!c||!l)return;let u=s.url??``,d={index:a++,requestId:i,method:s.method??`GET`,url:u,requestHeaders:s.headers??{},requestBody:s.postData==null?null:String(s.postData),status:null,responseHeaders:null,responseBody:null,responseBodyBase64:!1,mimeType:null,isStatic:Kw(null,u),timestamp:Date.now()};if(c.push(d),l.set(i,d),c.length>500){let e=c.splice(0,c.length-500);for(let t of e)l.delete(t.requestId)}}],[`Network.responseReceived`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,a=n.response;if(!i||!a)return;let s=t.networkRequestIndex.get(r)?.get(i);s&&(s.status=a.status??null,s.responseHeaders=a.headers??null,s.mimeType=a.mimeType??null,s.isStatic=Kw(s.mimeType,s.url))}],[`Network.loadingFinished`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId;if(!i)return;let a=t.networkRequestIndex.get(r)?.get(i);!a||a.isStatic||a.responseBody!==null||o.transport.send(`Network.getResponseBody`,{requestId:i},o.sessionId).then(e=>{let t=e;t&&(a.responseBody=t.body??null,a.responseBodyBase64=t.base64Encoded===!0)}).catch(()=>{})}]],enable:(e,t)=>e.send(`Network.enable`,{},t)});t.networkCleanup.set(r,()=>o.stop())}function Jw(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<55296||n>57343)continue;if(n>=56320)return t;let r=e.charCodeAt(t+1);if(Number.isNaN(r)||r<56320||r>57343)return t;t++}return-1}function Yw(e,t){if(t){let t;try{t=atob(e)}catch{return{error:`response body is flagged base64 but is not valid base64`}}let n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return{bytes:n}}let n=Jw(e);return n>=0?{error:`response body has an unpaired surrogate at index ${n} and cannot be saved without substituting U+FFFD`}:{bytes:new TextEncoder().encode(e)}}function Xw(e,t,n){let r=parseInt(n,10);return!Number.isFinite(r)||r<1?null:(e.networkRequests.get(t)??[]).find(e=>e.index===r)??null}const Zw=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};t.networkCleanup.has(i.targetId)||await r(i.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),qw(e,t,r,i.targetId,n)});let a=n.static===`true`,o=n.filter,s=n.clear===`true`,c=t.networkRequests.get(i.targetId)??[];if(a||(c=c.filter(e=>!e.isStatic)),o){let e;try{e=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid filter regex: ${o}\n`,exitCode:1}}c=c.filter(t=>e.test(t.url))}return s&&(t.networkRequests.set(i.targetId,[]),t.networkRequestIndex.set(i.targetId,new Map)),c.length===0?{stdout:`No requests
|
|
1130
1125
|
`,stderr:``,exitCode:0}:{stdout:c.map(e=>`${e.index} ${e.method} ${e.url} → ${e.status??`pending`}`).join(`
|
|
1131
1126
|
`)+`
|
|
1132
|
-
`,stderr:``,exitCode:0}},
|
|
1127
|
+
`,stderr:``,exitCode:0}},Qw=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),qw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Xw(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=[`Method: ${c.method}`,`URL: ${c.url}`,`Status: ${c.status??`pending`}`,``,`Request Headers:`,...Object.entries(c.requestHeaders).map(([e,t])=>` ${e}: ${t}`)];if(c.requestBody!==null&&l.push(``,`Request Body: ${c.requestBody}`),c.responseHeaders!==null&&(l.push(``,`Response Headers:`),l.push(...Object.entries(c.responseHeaders).map(([e,t])=>` ${e}: ${t}`))),c.responseBody!==null){let e=c.responseBody,t=e.length>4096?e.slice(0,4096)+`
|
|
1133
1128
|
... (truncated)`:e,n=c.responseBodyBase64?`Response Body (base64)`:`Response Body`;l.push(``,`${n}:\n${t}`)}let u=l.join(`
|
|
1134
1129
|
`)+`
|
|
1135
|
-
`,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}}
|
|
1130
|
+
`,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},$w=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),qw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Xw(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=Object.entries(c.requestHeaders).map(([e,t])=>`${e}: ${t}`).join(`
|
|
1136
1131
|
`)+`
|
|
1137
|
-
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},
|
|
1132
|
+
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},eT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),qw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Xw(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.requestBody===null)return{stdout:`(no request body)
|
|
1138
1133
|
`,stderr:``,exitCode:0};let l=r.filename;return l?(await i.writeFile(l,c.requestBody),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0}):{stdout:c.requestBody+`
|
|
1139
|
-
`,stderr:``,exitCode:0}},
|
|
1134
|
+
`,stderr:``,exitCode:0}},tT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),qw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Xw(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseHeaders===null)return{stdout:`(response not yet received)
|
|
1140
1135
|
`,stderr:``,exitCode:0};let l=Object.entries(c.responseHeaders).map(([e,t])=>`${e}: ${t}`).join(`
|
|
1141
1136
|
`)+`
|
|
1142
|
-
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},
|
|
1143
|
-
`,stderr:``,exitCode:0};let l=r.filename,u=
|
|
1137
|
+
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},nT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),qw(e,t,r,o.targetId,n)});let s=n[0]??``,c=Xw(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseBody===null)return{stdout:`(response body not yet available)
|
|
1138
|
+
`,stderr:``,exitCode:0};let l=r.filename,u=Yw(c.responseBody,c.responseBodyBase64);if(`error`in u)return{stdout:``,stderr:`Request ${s}: ${u.error}\n`,exitCode:1};if(l)return await i.writeFile(l,u.bytes),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0};if(c.mimeType!==null&&!c.mimeType.startsWith(`text/`)&&!c.mimeType.includes(`json`)&&!c.mimeType.includes(`javascript`)&&!c.mimeType.includes(`xml`))return{stdout:`[binary body, ${u.bytes.length} bytes]\n`,stderr:``,exitCode:0};let d=c.responseBodyBase64?new TextDecoder().decode(u.bytes):c.responseBody;return{stdout:(d.length>4096?d.slice(0,4096)+`
|
|
1144
1139
|
... (truncated)`:d)+`
|
|
1145
|
-
`,stderr:``,exitCode:0}},
|
|
1146
|
-
`,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},
|
|
1147
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:
|
|
1140
|
+
`,stderr:``,exitCode:0}},rT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a,signal:o})=>{let s=r[0]||`about:blank`,c=i.filter;await se(e,n),Pn(o,`about to open the recording tab`);let l=await e.createPage(s);try{let{transport:r,sessionId:i}=await a(l,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:l,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});n.harRecorder||=e.createHarRecorder(t,r);let u=await n.harRecorder.startRecording(l,i,c,o);return{stdout:`Recording started (targetId: ${l}, recordingId: ${u}) at ${s}\nHAR saved to /recordings/${u}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(l).catch(()=>void 0),t}},iT=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
|
|
1141
|
+
`,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},aT=e(`playwright-route`),oT=[{urlPattern:`*`,requestStage:`Request`}];function sT(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function cT(e,n,r,i,a){if(a.sessionId!==n)return;let{requestId:o,request:s}=a,c=(r.routes.get(i)??[]).find(e=>e.regex.test(s.url));if(!c){await e.send(`Fetch.continueRequest`,{requestId:o},n).catch(e=>{aT.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:o,err:e})});return}let l=[{name:`Content-Type`,value:c.contentType},...Object.entries(c.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:o,responseCode:c.status,responseHeaders:l,body:c.body?t(new TextEncoder().encode(c.body)):void 0},n).catch(e=>{aT.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function lT(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:oT},t);let a,o=e=>{a&&cT(a.transport,a.sessionId,n,r,e)};try{a=rC({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:oT},t)})}catch(e){throw await i.send(`Fetch.disable`,{},t).catch(()=>void 0),e}let s=a;n.routeCleanup.set(r,()=>{s.stop(),s.transport.send(`Fetch.disable`,{},s.sessionId).catch(()=>void 0)})})}const uT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
|
|
1142
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:sT(o),status:r.status?parseInt(r.status,10):200,body:r.body??``,contentType:r[`content-type`]??`text/plain`,headers:{}};if(r.header){r.header.includes(`,`)&&aT.warn(`--header value contains comma — only last segment used. Use separate route calls for multiple headers.`);for(let e of r.header.split(`,`)){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();s.headers[n]=r}}}t.routeCleanup.has(a.targetId)||(t.routes.has(a.targetId)||t.routes.set(a.targetId,[]),await lT(e,i,t,a.targetId));let c=t.routes.get(a.targetId)??[];return c.unshift(s),t.routes.set(a.targetId,c),{stdout:`Route added: ${o}\n`,stderr:``,exitCode:0}},dT=async({state:e,flags:t})=>{let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};let r=e.routes.get(n.targetId)??[];return r.length===0?{stdout:`No active routes
|
|
1148
1143
|
`,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
|
|
1149
1144
|
`)+`
|
|
1150
|
-
`,stderr:``,exitCode:0}},
|
|
1151
|
-
`,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}},
|
|
1152
|
-
`),p=`${i}/snapshots/page-${
|
|
1145
|
+
`,stderr:``,exitCode:0}},fT=async({state:e,positional:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t[0];if(!i){e.routes.set(r.targetId,[]);let t=e.routeCleanup.get(r.targetId);return t&&(t(),e.routeCleanup.delete(r.targetId)),{stdout:`All routes removed
|
|
1146
|
+
`,stderr:``,exitCode:0}}let a=e.routes.get(r.targetId)??[],o=a.length,s=a.filter(e=>e.pattern!==i);if(e.routes.set(r.targetId,s),s.length===0){let t=e.routeCleanup.get(r.targetId);t&&(t(),e.routeCleanup.delete(r.targetId))}return{stdout:`Removed ${o-s.length} route(s) matching "${i}"\n`,stderr:``,exitCode:0}},pT=`/.playwright`;function mT(e,t){return e?`${t.replace(/\/+$/,``)}${pT}`:pT}async function hT(e,t,n){if(!t.sessionDirsCreated.has(n)){for(let t of[n,`${n}/snapshots`,`${n}/screenshots`])try{await e.mkdir(t,{recursive:!0})}catch(e){if(!Ln(e))throw e}t.sessionDirsCreated.add(n)}}async function gT(e,t,n,r,i){try{return await e.withTab(n,async e=>{let{url:a,title:o,text:s,refToSelector:c,refToBackendNodeId:l,refToFrameId:u}=await ue(e),d={url:a,title:o,refToSelector:c,refToBackendNodeId:l,refToFrameId:u,content:s,timestamp:Date.now()};r.snapshots.set(n,d);let f=[`Page URL: ${a}`,`Page Title: ${o}`,``,s].join(`
|
|
1147
|
+
`),p=`${i}/snapshots/page-${Fn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function _T(e,t,n,r){await hT(e,t,n);let i=new Date().toISOString(),a=`playwright-cli ${r.command}${r.args.length?` `+r.args.join(` `):``}`,o=r.result.exitCode===0?r.result.stdout.trim()||`OK`:`Error: ${r.result.stderr.trim()}`,s=[`### ${a}`,`- **Time**: ${i}`];if(r.tabUrl||r.targetId){let e=r.tabUrl?`${r.tabUrl}${r.targetId?` (targetId: ${r.targetId})`:``}`:`targetId: ${r.targetId}`;s.push(`- **Tab**: ${e}`)}s.push(`- **Result**: ${o}`),r.snapshotPath&&s.push(``,`[Snapshot](${r.snapshotPath})`),s.push(`---`,``);let c=s.join(`
|
|
1153
1148
|
`)+`
|
|
1154
|
-
`,l=`${n}/session.md`,u=``;try{let t=await e.readFile(l);u=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(l,u+c)}function
|
|
1155
|
-
`);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function
|
|
1149
|
+
`,l=`${n}/session.md`,u=``;try{let t=await e.readFile(l);u=typeof t==`string`?t:new TextDecoder().decode(t)}catch{}await e.writeFile(l,u+c)}function vT(){return import(`./snapshot-features-Dw5v6SoZ.js`)}async function yT(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=le(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
|
|
1150
|
+
`);return t.snapshots.set(n,{url:r.url,title:r.name,refToSelector:a,refToBackendNodeId:o,refToFrameId:s,content:l,timestamp:Date.now()}),l}async function bT(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() {
|
|
1156
1151
|
this.scrollIntoView({ block: 'center' });
|
|
1157
1152
|
const r = this.getBoundingClientRect();
|
|
1158
1153
|
return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
|
|
1159
|
-
}`,returnByValue:!0})).result?.value}async function
|
|
1154
|
+
}`,returnByValue:!0})).result?.value}async function xT(e,t){let n=await e.evaluate(`(function() {
|
|
1160
1155
|
const el = document.querySelector(${JSON.stringify(t.split(`,`)[0].trim())});
|
|
1161
1156
|
if (!el) return null;
|
|
1162
1157
|
el.scrollIntoView({ block: 'center' });
|
|
1163
1158
|
const r = el.getBoundingClientRect();
|
|
1164
1159
|
return JSON.stringify({ x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height });
|
|
1165
|
-
})()`);return n?
|
|
1166
|
-
`,exitCode:1};let u=await i(a.targetId,async e=>{let t=await
|
|
1167
|
-
`,stderr:``,exitCode:0}},
|
|
1160
|
+
})()`);return n?Rn(n,`element clip rect`):void 0}async function ST(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return bT(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return xT(e,i)}const CT=async({browser:e,fs:t,state:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r[`no-iframes`]===`true`,s=r.depth;if(s!==void 0&&!/^[1-9][0-9]*$/.test(s))return{stdout:``,stderr:`snapshot: --depth must be a positive integer, got "${s}"\n`,exitCode:1};let c=s===void 0?void 0:parseInt(s,10),l=r.boxes===`true`;if(l&&r.frame)return{stdout:``,stderr:`snapshot: --boxes is not supported with --frame (child-frame rects live in another coordinate space)
|
|
1161
|
+
`,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Yn(e,r);if(t)return yT(e,n,a.targetId,t);let{snapshot:i,output:s}=await oe(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await vT();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await vT();u=e(u,c)}return r.filename?(await t.writeFile(r.filename,u),{stdout:`Snapshot saved to ${r.filename}\n`,stderr:``,exitCode:0}):{stdout:u+`
|
|
1162
|
+
`,stderr:``,exitCode:0}},wT=async e=>{let{findHandlerImpl:t}=await vT();return t(e)},TT=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:{stdout:await n(r.targetId,async e=>`Frame IDs (use with --frame, never --tab):\n${(await e.getFrameTree()).map(e=>{let t=e.parentFrameId?`child`:`main`,n=e.parentFrameId?` parentFrameId=${e.parentFrameId}`:``;return` [${t}] frameId=${e.frameId}${n} - ${e.url}`}).join(`
|
|
1168
1163
|
`)}`)+`
|
|
1169
|
-
`,stderr:``,exitCode:0}},
|
|
1170
|
-
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function
|
|
1171
|
-
`,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await
|
|
1172
|
-
`,stderr:``,exitCode:0}},
|
|
1164
|
+
`,stderr:``,exitCode:0}},ET=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${Fn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Kn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return ee()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
|
|
1165
|
+
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function DT(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await ST(e,i,r);return!a||a.width<=0||a.height<=0?{error:`could not resolve element ${r} to a visible box — the snapshot is likely stale (navigation, reload, or layout change). Re-run "snapshot" and retry with a fresh ref, or omit the ref to capture the viewport deliberately.`}:{clip:a}}const OT=new Set([`png`,`jpeg`,`webp`]);function kT(e){let t=e.type;if(t&&OT.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const AT=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,sessionRoot:o,onTab:s})=>{let c=j(i);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};if(i.type&&!OT.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&kT(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
|
|
1166
|
+
`,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await DT(e,n,c.targetId,r[0]);if(`error`in t)return t;s=t.clip}let l=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await vT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=kT(i),f=await e.screenshot({format:d,fullPage:l,...s?{clip:s}:{},...u?{maxWidth:u}:{}}),p=d===`jpeg`?`jpg`:d,m=i.filename||`${a}/screenshot-${Date.now()}.${p}`,h=Kn(f);await t.writeFile(m,h);try{await hT(t,n,o);let e=`${o}/screenshots/screenshot-${Fn(new Date)}.${p}`;await t.writeFile(e,h)}catch{}return{message:`Screenshot saved to ${m} (${Math.round(h.length/1024)} KB)`}});return`error`in l?{stdout:``,stderr:`screenshot: ${l.error}\n`,exitCode:1}:{stdout:l.message+`
|
|
1167
|
+
`,stderr:``,exitCode:0}},jT=async({browser:e,fs:t,positional:n,flags:r,sessionRoot:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=r.filename??n[0]??`${i}/storage-state.json`,c=[],l=[],u=``;await a(o.targetId,async e=>{c=(await e.send(`Network.getCookies`)).cookies??[];let{sessionId:t,transport:n}=e;u=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``;let r=(await n.send(`Runtime.evaluate`,{expression:`JSON.stringify(Object.entries(localStorage).map(([name,value])=>({name,value})))`,returnByValue:!0},t)).result.value??`[]`;l=JSON.parse(r)});let d=JSON.stringify({cookies:c,origins:u?[{origin:u,localStorage:l}]:[]},null,2);return await t.writeFile(s,d),{stdout:`Saved storage state to ${s}\n`,stderr:``,exitCode:0}},MT=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
|
|
1173
1168
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s;try{let e=await t.readTextFile(o);s=JSON.parse(e)}catch{return{stdout:``,stderr:`Failed to read storage state from ${o}\n`,exitCode:1}}let c=[];(s.cookies?.length||s.origins?.length)&&await i(a.targetId,async e=>{if(s.cookies?.length&&await e.send(`Network.setCookies`,{cookies:s.cookies}),!s.origins?.length)return;let{sessionId:t,transport:n}=e,r=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``,i=s.origins.filter(e=>e.origin===r);c=s.origins.filter(e=>e.origin!==r);for(let{localStorage:e}of i){let r=`(function() {
|
|
1174
1169
|
var items = ${JSON.stringify(e)};
|
|
1175
1170
|
for (var i = 0; i < items.length; i++) {
|
|
1176
1171
|
localStorage.setItem(items[i].name, items[i].value);
|
|
1177
1172
|
}
|
|
1178
|
-
})()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function
|
|
1173
|
+
})()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function NT(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:{stdout:await r(i.targetId,async e=>{let n=await e.evaluate(`JSON.stringify(Object.entries(${t}))`),r=JSON.parse(n);return r.length===0?`No ${t} entries`:r.map(([e,t])=>`${e}=${t}`).join(`
|
|
1179
1174
|
`)})+`
|
|
1180
1175
|
`,stderr:``,exitCode:0}},get:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-get requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:{stdout:await a(o.targetId,async e=>{let n=await e.evaluate(`${t}.getItem(${JSON.stringify(r[0])})`);if(n===null)throw Error(`Key "${r[0]}" not found in ${t}`);return n})+`
|
|
1181
|
-
`,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const
|
|
1182
|
-
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},
|
|
1176
|
+
`,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const PT=NT(`localstorage`,`localStorage`),FT=NT(`sessionstorage`,`sessionStorage`),IT=e(`playwright`),LT={width:412,height:915,deviceScaleFactor:2.625};function RT(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;IT.info(`Arming teleport via open/tab-new flags`),IT.debug(`Arming teleport via open/tab-new flags details`,{targetId:i,startPattern:a,returnPattern:o});let s,c;try{s=new RegExp(a)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${a}\n`,exitCode:1}}try{c=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${o}\n`,exitCode:1}}let l=n.timeout?parseInt(n.timeout,10):300,u=t.teleportWatchers.get(i);return u&&(Aw(u),t.teleportWatchers.delete(i)),jw(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const zT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=r[0]||`about:blank`,s=i.runtime,c=i.mobile===`true`;await se(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),c&&await a(u,async e=>{await e.setViewportOverride(LT.width,LT.height,{deviceScaleFactor:LT.deviceScaleFactor,mobile:!0,userAgent:`Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36`}),o!==`about:blank`&&await e.navigate(o)}),i.foreground===`true`||i.fg===`true`)try{await a(u,e=>e.bringToFront())}catch(e){IT.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=RT(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await jC(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
|
|
1177
|
+
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},BT=async({browser:e,state:t})=>{let n=await ce(e,t);return n.length===0?{stdout:`No tabs open
|
|
1183
1178
|
`,stderr:``,exitCode:0}:{stdout:n.map(e=>{let t=!!e.active,n=e.targetId.includes(`:`),r=t?` (active)`:``,i=n?` [remote:${e.targetId.substring(0,e.targetId.indexOf(`:`))}]`:``;return`[${e.targetId}] ${e.url} "${e.title}"${r}${i}`}).join(`
|
|
1184
1179
|
`)+`
|
|
1185
|
-
`,stderr:``,exitCode:0}},
|
|
1180
|
+
`,stderr:``,exitCode:0}},VT=async({browser:e,state:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},HT=async({browser:e,state:t,positional:n,onTab:r})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
|
|
1186
1181
|
`,exitCode:1};let i=n[0];if(!/^[0-9]+$/.test(i))return{stdout:``,stderr:`tab-select index must be a positive integer
|
|
1187
1182
|
`,exitCode:1};let a=parseInt(i,10);if(a<1)return{stdout:``,stderr:`tab-select index must be a positive integer
|
|
1188
|
-
`,exitCode:1};let o=await ce(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},
|
|
1183
|
+
`,exitCode:1};let o=await ce(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},UT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
|
|
1189
1184
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseInt(n[0],10),s=parseInt(n[1],10);return isNaN(o)||isNaN(s)||o<=0||s<=0?{stdout:``,stderr:`resize requires positive integer width and height
|
|
1190
|
-
`,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},
|
|
1185
|
+
`,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},WT=e(`playwright-teleport`);function GT(){WT.info(`Listing available follower runtimes`);let e=Ow();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
|
|
1191
1186
|
`,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
|
|
1192
1187
|
`,stderr:``,exitCode:0};let n=[`Available runtimes for teleport:`];for(let e of t){let t=[e.runtimeId];if(e.floatType&&t.push(`[${e.floatType}]`),e.runtime&&t.push(`(${e.runtime})`),e.lastActivity){let n=Math.round((Date.now()-e.lastActivity)/1e3);t.push(`active ${n}s ago`)}n.push(` ${t.join(` `)}`)}return{stdout:n.join(`
|
|
1193
1188
|
`)+`
|
|
1194
|
-
`,stderr:``,exitCode:0}}function
|
|
1195
|
-
`,stderr:``,exitCode:0}}function
|
|
1196
|
-
`,exitCode:1};let c=
|
|
1197
|
-
`,exitCode:1};let u=n.runtime;if(u){let e=
|
|
1198
|
-
`};if(!
|
|
1189
|
+
`,stderr:``,exitCode:0}}function KT({state:e,flags:t}){let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};WT.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(Aw(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
|
|
1190
|
+
`,stderr:``,exitCode:0}}function qT(e,t){let n,r;try{n=new RegExp(e)}catch{return{error:`Invalid regex for --start: ${e}\n`}}try{r=new RegExp(t)}catch{return{error:`Invalid regex for --return: ${t}\n`}}return{startPattern:n,returnPattern:r}}function JT(e){return(Ow()?.()??[]).find(t=>t.runtimeId===e)?.runtime===`slicc-cherry`?`teleport: runtime ${e} is a cherry host and cannot serve a cookie teleport (no Network.* access)\n`:null}async function YT({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.start||n[`teleport-start`],s=n.return||n[`teleport-return`];if(!o||!s)return{stdout:``,stderr:`teleport requires --start <regex> and --return <regex>
|
|
1191
|
+
`,exitCode:1};let c=qT(o,s);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};let l=n.timeout?parseInt(n.timeout,10):300;if(isNaN(l)||l<=0)return{stdout:``,stderr:`--timeout must be a positive number
|
|
1192
|
+
`,exitCode:1};let u=n.runtime;if(u){let e=JT(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(WT.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),Aw(d),t.teleportWatchers.delete(a.targetId));let f;try{let e=await r(a.targetId,e=>e.evaluate(`window.location.href`));f=typeof e==`string`?e:String(e)}catch{}return WT.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),WT.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),Pn(i,`about to arm a teleport watcher on tab ${a.targetId}`),jw(e,t,c.startPattern,c.returnPattern,l*1e3,u,f,a.targetId),{stdout:`Teleport armed on tab ${a.targetId}. Will trigger when URL matches ${o}\n`,stderr:``,exitCode:0}}const XT=async e=>e.flags.list===`true`?GT():e.flags.off===`true`?KT(e):YT(e),ZT={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,pdf:`application/pdf`,txt:`text/plain`,json:`application/json`,csv:`text/csv`,html:`text/html`,htm:`text/html`,xml:`application/xml`,zip:`application/zip`,mp4:`video/mp4`,mp3:`audio/mpeg`};function QT(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return ZT[t]??`application/octet-stream`}function $T(e,t){if(e.length===0)return{error:`upload requires at least one file path
|
|
1193
|
+
`};if(!Wn(e[0]))return{targetRef:null,filePaths:e};let n=e[0],r=e.slice(1);return t?t.refToBackendNodeId.has(n)?r.length===0?{error:`upload requires at least one file path
|
|
1199
1194
|
`}:{targetRef:n,filePaths:r}:{error:`Unknown ref "${n}"\n`}:{error:`No snapshot available. Run "snapshot" first.
|
|
1200
|
-
`}}const
|
|
1195
|
+
`}}const eE=new Map([[`teleport`,XT],[`open`,zT],[`tab-new`,zT],[`fetch`,MC],[`goto`,Bw],[`navigate`,Bw],[`snapshot`,CT],[`find`,wT],[`frames`,TT],[`screenshot`,AT],[`click`,RC],[`type`,zC],[`fill`,BC],[`eval`,EC],[`eval-file`,DC],[`press`,VC],[`keydown`,HC],[`keyup`,UC],[`go-back`,Vw],[`go-forward`,Hw],[`reload`,Uw],[`tab-list`,BT],[`tab-close`,VT],[`close`,VT],[`dblclick`,WC],[`hover`,GC],[`select`,KC],[`check`,qC],[`uncheck`,JC],[`drag`,YC],[`resize`,UT],[`dialog-accept`,bC],[`dialog-dismiss`,xC],[`cookie-list`,pC],[`cookie-get`,mC],[`cookie-set`,hC],[`cookie-delete`,gC],[`cookie-clear`,_C],[`localstorage-list`,PT.list],[`localstorage-get`,PT.get],[`localstorage-set`,PT.set],[`localstorage-delete`,PT.del],[`localstorage-clear`,PT.clear],[`sessionstorage-list`,FT.list],[`sessionstorage-get`,FT.get],[`sessionstorage-set`,FT.set],[`sessionstorage-delete`,FT.del],[`sessionstorage-clear`,FT.clear],[`record`,rT],[`stop-recording`,iT],[`tab-select`,HT],[`pdf`,ET],[`network-state-set`,Ww],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=$T(i,c);if(`error`in l)return{stdout:``,stderr:l.error,exitCode:1};let{targetRef:u,filePaths:d}=l,f=[];for(let e of d){let r=await XC(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:QT(i),base64:t(r)})}if(u){let e=c.refToBackendNodeId.get(u);await o(s.targetId,async({sessionId:t,transport:n})=>{await n.send(`DOM.enable`,{},t);let{object:r}=await n.send(`DOM.resolveNode`,{backendNodeId:e},t),i=await n.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:`function(filesData) {
|
|
1201
1196
|
const el = this;
|
|
1202
1197
|
if (el.tagName !== 'INPUT' || el.type !== 'file') {
|
|
1203
1198
|
throw new Error('Element ' + el.tagName + ' is not a file input');
|
|
@@ -1228,12 +1223,12 @@ Options:
|
|
|
1228
1223
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
1229
1224
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
1230
1225
|
return el.files.length;
|
|
1231
|
-
})()`,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`,
|
|
1232
|
-
`;return{...r,stderr:r.stderr+c}}async function
|
|
1233
|
-
`,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await
|
|
1234
|
-
`);let a=[];for(let[e,t]of
|
|
1226
|
+
})()`,r=await t.send(`Runtime.evaluate`,{expression:n,returnByValue:!0,awaitPromise:!1},e);if(r.exceptionDetails){let e=r.exceptionDetails.exception?.description??r.exceptionDetails.text??`File upload failed`;throw Error(e)}});let p=d.map(e=>e.split(`/`).pop()??e).join(`, `);return{stdout:`Uploaded ${d.length} file(s): ${p}\n`,stderr:``,exitCode:0}}],[`state-save`,jT],[`state-load`,MT],[`console`,cC],[`requests`,Zw],[`request`,Qw],[`request-headers`,$w],[`request-body`,eT],[`response-headers`,tT],[`response-body`,nT],[`mousemove`,ew],[`mousedown`,tw],[`mouseup`,nw],[`mousewheel`,rw],[`drop`,aw],[`route`,uT],[`route-list`,dT],[`unroute`,fT],[`generate-locator`,vC],[`highlight`,yC]]);function tE(){let e=(Bn.string??[]).map(e=>`--${e}`),t=new Set(Bn.boolean??[]);for(let[e,n]of Object.entries(Bn.alias??{})){let r=[e,...Array.isArray(n)?n:[n]];if(r.some(e=>t.has(e)))for(let e of r)t.add(e)}return{value:e,bool:[...[...t].map(e=>`--${e}`),`--help`,`-h`,`--no-iframes`]}}function nE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function rE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const iE=2e3;function aE(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 oE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<iE)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>=iE?`${(s/1e3).toFixed(1)}s of it waiting on this tab (--tab=${n})`:`all of it waiting on the bridge, not on this tab`} (queue depth ${i.queueDepth}). Commands on the same tab serialize; commands on different tabs run in parallel — stagger callers on THIS tab, or give each caller its own tab.
|
|
1227
|
+
`;return{...r,stderr:r.stderr+c}}async function sE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Vn(e,t.tab,n):null)??r}\n`,exitCode:1}}function cE(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 lE(e,t,n){let r=eE.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?cE(e,t,void 0):a}catch(r){return i?.aborted?cE(e,t,r):await sE(n.browser,n.flags,r)}}async function uE(e,t,n,r){let i=C(nE(n),rE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=zn(n))}catch(n){return{answer:{stdout:``,stderr:`${e} ${t}: ${n instanceof Error?n.message:String(n)}\n`,exitCode:1}}}if(a.help===`true`||a.h===`true`){let{formatSubcommandHelp:n}=await import(`./help-aKSKYJF6.js`);return{answer:{stdout:n(e,t),stderr:``,exitCode:0}}}let o=null;try{let{validateSubcommandArgs:r}=await import(`./validate-args-BcxRh84E.js`);o=r(e,t,n,i.positionals)}catch{o=null}return o?{answer:{stdout:``,stderr:o,exitCode:1}}:{positional:i.positionals,flags:a}}function dE(e,t,n,r={}){let i=t?In(t,n):null,a=tE();return S(e,async(o,s)=>{if(o.length===0||o[0]===`help`||o[0]===`--help`||o[0]===`-h`){let{formatHelp:t}=await import(`./help-aKSKYJF6.js`);return{stdout:t(e)+`
|
|
1228
|
+
`,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await uE(e,c,l,a);if(`answer`in u)return u.answer;let{positional:d,flags:f}=u;if(!t||!i)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let p=f.tab??null,m=aE(t,p),h=na(s.env),g=mT(r.isScoop?.()??!1,h),_=await lE(e,c,{browser:t,fs:n,state:i,positional:d,flags:f,scratchDir:h,sessionRoot:g,onTab:(e,n)=>t.withTab(e,n,{signal:s.signal}),signal:s.signal}),v=f.tab??null,ee=null;qn.has(c)&&_.exitCode===0&&v&&(ee=await gT(t,n,v,i,g));try{await _T(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return oE(t,m,p,_)})}const fE=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`pyodide`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Gn,`sprinkle`]],[`Clipboard`,[`pbcopy`,`pbpaste`,`xclip`,`xsel`]],[`Filesystem`,[`mount`,`umount`,`fswatch`]],[`Scoops & agents`,[`agent`,`gelatiere`,`mcp`,`webhook`,`crontask`]],[`Process`,[`ps`,`kill`,`jshd`,`meminfo`,`uptime`]],[`Shell builtins (limited)`,[...Kg]]]);function pE(e,t=[],n=[]){let r=[],i=new Set(e);for(let e of t)i.delete(e);for(let e of n)i.delete(e);r.push(`Available commands:
|
|
1229
|
+
`);let a=[];for(let[e,t]of fE){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(`
|
|
1235
1230
|
`)+`
|
|
1236
|
-
`}function
|
|
1231
|
+
`}function mE(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
|
|
1237
1232
|
|
|
1238
1233
|
Usage: commands [command]
|
|
1239
1234
|
|
|
@@ -1244,7 +1239,7 @@ If a command name is provided, shows help for that command.
|
|
|
1244
1239
|
Otherwise, lists all available commands.
|
|
1245
1240
|
|
|
1246
1241
|
Note: This is an enhanced version of 'help' that shows all custom commands.
|
|
1247
|
-
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:
|
|
1242
|
+
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:pE(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function hE(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
|
|
1248
1243
|
|
|
1249
1244
|
Usage:
|
|
1250
1245
|
hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
|
|
@@ -1261,7 +1256,7 @@ Defaults:
|
|
|
1261
1256
|
--to /workspace/models/<repo>/
|
|
1262
1257
|
--revision main
|
|
1263
1258
|
--concurrency, -j 4 files at once
|
|
1264
|
-
--max-in-flight-mb ${
|
|
1259
|
+
--max-in-flight-mb ${ia/1048576} MB of downloads in flight at once
|
|
1265
1260
|
|
|
1266
1261
|
Notes:
|
|
1267
1262
|
- <repo> is the standard <owner>/<name> form.
|
|
@@ -1275,8 +1270,8 @@ Notes:
|
|
|
1275
1270
|
- Background-job logs get a progress line every few seconds.
|
|
1276
1271
|
- Weights are read by the speech engines via the preview SW from the
|
|
1277
1272
|
target directory; transformers expects <localModelPath>/<repo>/.
|
|
1278
|
-
`,stderr:``,exitCode:e}}function
|
|
1279
|
-
`)}\n`}function
|
|
1273
|
+
`,stderr:``,exitCode:e}}function gE(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const _E=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function vE(e,t){if(typeof t!=`string`)return{error:`${e} requires a value`};let n=Number(t);return!/^\d+$/.test(t)||!Number.isSafeInteger(n)||n<1?{error:`${e} must be a positive integer, got '${t}'`}:n}function yE(e){let t=null,n=`main`,r=!1,i,a,o=[],s=0;for(;s<e.length;){let c=e[s];if(c===`--concurrency`||c===`-j`||c===`--max-in-flight-mb`){let t=vE(c,e[s+1]);if(typeof t!=`number`)return t;c===`--max-in-flight-mb`?a=t:i=t,s+=2;continue}if(c===`--to`){let n=e[s+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,s+=2;continue}if(c===`--revision`||c===`--rev`){let t=e[s+1];if(typeof t!=`string`)return{error:`${c} requires a value`};n=t,s+=2;continue}if(c===`--force`||c===`-f`){r=!0,s+=1;continue}if(c.startsWith(`--`))return{error:`unknown option: ${c}`};o.push(c),s+=1}if(o.length===0)return{error:`download requires <repo>`};let c=o[0];return _E.test(c)?{repo:c,files:o.slice(1),to:t,revision:n,force:r,concurrency:i,maxInFlightMb:a}:{error:`invalid repo '${c}' — expected <owner>/<name>`}}function bE(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${t%60}s`:`${Math.floor(n/60)}h ${n%60}m`}var xE=class{filesTotal;bytesTotal;now;filesDone=0;bytesDone=0;bytesFetched=0;lastLineAt=-1/0;startedAt;constructor(e,t,n=Date.now){this.filesTotal=e,this.bytesTotal=t,this.now=n,this.startedAt=n()}listed(e,t){this.filesTotal=e,this.bytesTotal=t>0?t:void 0}file(e,t){this.filesDone+=1,this.bytesDone+=t,e===`downloaded`&&(this.bytesFetched+=t)}rate(){let e=(this.now()-this.startedAt)/1e3;return e>0?this.bytesFetched/e:0}elapsedMs(){return this.now()-this.startedAt}line(){let e=this.now();if(!(this.filesDone>=this.filesTotal)&&e-this.lastLineAt<5e3)return null;this.lastLineAt=e;let t=this.rate(),n=Sy(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${Sy(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${bE(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${Sy(t)}/s${r}\n`}};function SE(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function CE(e,t,n,r){let i=yE(e);if(`error`in i)return gE(i.error);let a=ra(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=SE(t),l=new xE(i.files.length,void 0,r),u=``;try{let e=await o({fetch:n.fetch,streamFetch:n.streamFetch,fs:t.fs,repo:i.repo,targetDir:a,files:i.files,revision:i.revision,force:i.force,concurrency:i.concurrency,maxBytesInFlight:i.maxInFlightMb===void 0?void 0:i.maxInFlightMb*1024*1024,signal:t.signal,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e,totalBytes:t})=>{l.listed(e.length,t);let n=`hf: ${e.length} file(s) listed in ${i.repo}@${i.revision}\n`;u+=n,c?.(n)},onFile:e=>{u+=e.status===`downloaded`?`hf: downloaded ${e.file} (${Sy(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${a})\n`,l.file(e.status,e.bytes);let t=c?l.line():null;t&&c?.(t)}}}),r=e.downloaded>0?` in ${bE(l.elapsedMs())} (${Sy(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${Sy(e.totalBytes)} total into ${a}${r}\n`;return{stdout:``,stderr:u+s,exitCode:0}}catch(e){return e instanceof s?(u+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:u,exitCode:1}):gE(e instanceof Error?e.message:String(e))}}const wE=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function TE(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||w(n,{valueFlags:wE}))return hE(+(n.length===0));let i=n[0];return i===`download`?CE(n.slice(1),r,e,t):gE(`unknown subcommand: ${i}`)}}}const EE=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function DE(e){return jn(e,EE)}function OE(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 kE(e){let t={};return e.has(`--vid`)&&(t.vendorId=OE(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=OE(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=OE(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=OE(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function AE(e){let t=_i(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function jE(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function ME(e){return e.toString(16).padStart(2,`0`)}function NE(e){return`0x${e.toString(16).padStart(4,`0`)}`}function PE(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${NE(e.usagePage)}:${NE(e.usage??0)}`;return`${e.handle}\t${NE(e.vendorId)}:${NE(e.productId)}${r}\t${t}${n}`}function FE(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 IE(e){return`${e.map(PE).join(`
|
|
1274
|
+
`)}\n`}function LE(e){return`${ME(e.reportId)} ${jE(e.bytes)}`.trimEnd()}function RE(e){return{stdout:e,stderr:``,exitCode:0}}function W(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const zE=`hid - access HID devices via WebHID
|
|
1280
1275
|
|
|
1281
1276
|
Usage: hid <subcommand> [options]
|
|
1282
1277
|
|
|
@@ -1299,11 +1294,11 @@ Options:
|
|
|
1299
1294
|
--timeout <ms> query: wait this long for an input report (default 1000)
|
|
1300
1295
|
-h, --help
|
|
1301
1296
|
|
|
1302
|
-
Report payloads are capped at ${
|
|
1303
|
-
`;function
|
|
1304
|
-
`):
|
|
1305
|
-
`)}\n`)}async function
|
|
1306
|
-
`)}\n`:``)}async function
|
|
1297
|
+
Report payloads are capped at ${$r} bytes (4 MiB).
|
|
1298
|
+
`;function BE(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return RE(t)}return RE(e.length?`${jE(e)}\n`:``)}function VE(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function HE(e){let t=await e.list();return t.length===0?RE(`no granted HID devices
|
|
1299
|
+
`):RE(`${t.map(PE).join(`
|
|
1300
|
+
`)}\n`)}async function UE(e,t){let n=e.get(`--__resolved`),r=kE(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?W(`request: missing resolved handle`):RE(IE(FE(await Promise.all(e.map(e=>t.info(e))),i)))}let a=je();return a?WE(r,i,a,t):RE(IE(FE(await t.request(r),i)))}async function WE(e,t,n,r){let i=await Ax(`hid-device`,e,n),a,o;if(i.handle){let e=await r.info(i.handle);a=e.vendorId,o=e.productId}else{let e=i.info,t=Qr();if(!t)return W(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=Kr(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return W(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=FE(s.length>0?s:[],t);return c.length===0?W(`request: granted device could not be re-acquired`):RE(IE(c))}async function GE(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),RE(``)):W(`${e}: handle required`)}async function KE(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return W(`${e}: handle and report-id required`);let o=OE(a,`report-id`),s=AE(n);return s.length>4194304?W(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),RE(``))}async function qE(e,t,n){let[,r,i]=e;return!r||i===void 0?W(`feature-get: handle and report-id required`):BE((await t.receiveFeatureReport(r,OE(i,`report-id`))).bytes,n)}async function JE(e,t,n){let r=e[1];if(!r)return W(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(LE(e))});try{await VE(t.signal)}finally{await a()}return RE(i.length?`${i.join(`
|
|
1301
|
+
`)}\n`:``)}async function YE(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return W(`query: handle and report-id required`);let s=OE(o,`report-id`),c=AE(t);if(c.length>4194304)return W(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?OE(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?W(`query: no input report within ${l}ms`):i?BE(t.bytes,!0):RE(`${LE(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function XE(e,t,n){let{positionals:r,flags:i,bools:a}=DE(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return HE(n);case`request`:return UE(i,n);case`open`:case`close`:return GE(o,r,n);case`send`:case`feature-send`:return KE(o,r,t,n);case`feature-get`:return qE(r,n,s);case`watch`:return JE(r,t,n);case`query`:return YE(r,t,i,n,s);default:return W(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function ZE(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return RE(zE);let n=ti(de(),y());if(!n)return W(`WebHID is unavailable in this environment`);try{return await XE(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?W(`user cancelled or no device selected`):W(t)}})}const QE=1e3,$E=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,eD=`${$E}
|
|
1307
1302
|
|
|
1308
1303
|
Print the user and group identity of this SLICC runtime.
|
|
1309
1304
|
|
|
@@ -1318,22 +1313,22 @@ Options:
|
|
|
1318
1313
|
--version Print the SLICC build.
|
|
1319
1314
|
|
|
1320
1315
|
Identity comes from the home directory, which is where the rest of the shell
|
|
1321
|
-
gets it too. A cone is the human user (uid ${
|
|
1316
|
+
gets it too. A cone is the human user (uid ${QE}, one per runtime, since every
|
|
1322
1317
|
cone shares one home); a scoop is a service identity whose uid is derived from
|
|
1323
1318
|
its folder name, so it is stable across reloads and distinct per scoop.
|
|
1324
1319
|
Every user is in a user-private group of the same name, plus the role group
|
|
1325
1320
|
\`cone\` (10) or \`scoop\` (20).
|
|
1326
|
-
`,
|
|
1321
|
+
`,tD=`/scoops/`;function nD(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return 2e3+t%58e3}function rD(e,t){return{name:e,uid:t===`cone`?QE:nD(e),role:t}}function iD(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function aD(e,t){return`${e}(${t})`}function oD(e){let t=iD(e),n=t[0];return`uid=${aD(e.uid,e.name)} gid=${aD(n.gid,n.name)} groups=${t.map(e=>aD(e.gid,e.name)).join(`,`)}\n`}async function sD(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(tD)?`scoop`:`cone`,r=e.env.get(`USER`)||cD(t,n);return r?rD(r,n):rD(hp(await mp(lD(e.fs))),`cone`)}function cD(e,t){return e===``?``:t===`cone`?hp(e):e.slice(8).split(`/`)[0]??``}function lD(e){return{readDir:async t=>(await e.readdirWithFileTypes?.(t)??[]).map(e=>({name:e.name,type:e.isDirectory?`directory`:`file`})),stat:async t=>({mtime:(await e.stat(t)).mtime.getTime()})}}async function uD(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?rD(t,`cone`):await e.fs.exists(`${tD}${t}`).catch(()=>!1)?rD(t,`scoop`):null}function dD(e){let t={select:`all`,names:!1,mode:`run`},n=[];for(let r of e){if(r===`--help`||r===`-h`)return{...t,mode:`help`};if(r===`--version`)return{...t,mode:`version`};let e=pD[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=fD[e];if(!n)return{error:`unrecognized option '-${e}'`};n(t)}continue}n.push(r)}return n.length>1?{error:`extra operand '${n[1]}'`}:(n[0]!==void 0&&(t.operand=n[0]),t.names&&t.select===`all`?{error:`cannot print only names in default format`}:t)}const fD={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},pD={"--user":fD.u,"--group":fD.g,"--groups":fD.G,"--name":fD.n,"--real":fD.r};function mD(e,t){let n=iD(e),r=(e,n)=>t.names?n:String(e);switch(t.select){case`user`:return`${r(e.uid,e.name)}\n`;case`group`:return`${r(n[0].gid,n[0].name)}\n`;case`groups`:return`${n.map(e=>r(e.gid,e.name)).join(` `)}\n`;case`all`:return oD(e)}}function hD(){return S(`id`,async(e,t)=>{let n=dD(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${$E}\n`,exitCode:1};if(n.mode===`help`)return _D(eD);if(n.mode===`version`)return _D(`id (SLICC) ${$e().version}\n`);let r=n.operand===void 0?await sD(t):await uD(t,n.operand);return r?_D(mD(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function gD(){return S(`whoami`,async(e,t)=>_D(`${(await sD(t)).name}\n`))}function _D(e){return{stdout:e,stderr:``,exitCode:0}}function vD(){return{stdout:`imgcat - preview image and video files in the preview tab
|
|
1327
1322
|
|
|
1328
1323
|
Usage: imgcat <path> [path...]
|
|
1329
1324
|
|
|
1330
1325
|
Options:
|
|
1331
1326
|
-h, --help Show this help message
|
|
1332
|
-
`,stderr:``,exitCode:0}}function
|
|
1333
|
-
`,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=De(t);if(!Ee(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const
|
|
1334
|
-
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),
|
|
1335
|
-
`]),
|
|
1336
|
-
`)}\n`}function
|
|
1327
|
+
`,stderr:``,exitCode:0}}function yD(e={}){return S(`imgcat`,async(t,n)=>{if(t.length===0||w(t))return vD();let r=C(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return vD();if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
|
|
1328
|
+
`,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=De(t);if(!Ee(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const bD=new Set([`run`,`run-script`]),xD=new Set([`test`,`start`,`stop`,`restart`]),SD=new Set([` `,` `,`
|
|
1329
|
+
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),CD=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
|
|
1330
|
+
`]),wD=/^[A-Za-z_][A-Za-z0-9_]*=/,TD=/^[@A-Za-z0-9._-]+$/,ED=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),DD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),OD=new Set([`ipx`,`npx`]);function kD(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*jD(e){let t=b(e);for(;yield t,t!==`/`;)t=Fe(t).dir}function MD(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 ND(e){return typeof e==`string`?e:void 0}async function PD(e,t){for(let n of jD(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:ND(r.name),version:ND(r.version),scripts:MD(r.scripts)}}return null}function FD(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(SD.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function ID(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(CD.has(i)){r=!0,n++;continue}let a=FD(e,n);if(a.end===a.start){n++;continue}if(r&&!wD.test(a.text)){if(DD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function LD(e,t){return!TD.test(e)||ED.has(e)||OD.has(e)?!1:!t.isRegistered(e)}async function RD(e,t){let n=ID(e).filter(e=>LD(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 zD(e){let t=[];for(let n of jD(e))t.push(x(n,`node_modules`,`.bin`));return t}function BD(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...zD(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 VD(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function HD(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 ${VD(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
|
|
1331
|
+
`)}\n`}function UD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function WD(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}UD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function GD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function KD(e,t,n,r){let i=r.length>0?` ${r.map(kD).join(` `)}`:``,a=[],o=e.scripts[`pre${t}`];o!==void 0&&a.push({event:`pre${t}`,body:o}),a.push({event:t,body:`${n}${i}`});let s=e.scripts[`post${t}`];return s!==void 0&&a.push({event:`post${t}`,body:s}),a}async function qD(e,t,n,r){if(n===`start`&&await r.exists(x(t.dir,`server.js`)))return`node server.js`;if(n===`restart`)return`${e} stop --if-present && ${e} start`}function JD(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of zD(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function YD(e,t,n,r,i,a){let o=i.exec;if(!o)return GD(e,`run requires shell exec support, which this context does not provide`);let s=JD(a.fs,t,i),c=VD(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 RD(a.body,s),{cwd:t.dir,env:BD(t,a.event,a.body,i),stdin:_i(i.stdin),stdinKind:`bytes`});if(l+=n.stdout,u+=n.stderr,n.exitCode!==0)return u+=`${e}: script '${a.event}' exited with code ${n.exitCode}\n`,{stdout:l,stderr:u,exitCode:n.exitCode}}return{stdout:l,stderr:u,exitCode:0}}async function XD(e,t,n,r){let i;try{i=await PD(r.fs,n.cwd)}catch(t){return GD(e,t instanceof Error?t.message:String(t))}if(!i)return GD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=WD(t);if(o===void 0)return{stdout:HD(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await qD(e,i,o,r.fs)??void 0;if(c===void 0){if(a.ifPresent)return{stdout:``,stderr:``,exitCode:0};let t=Object.keys(i.scripts);return GD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return YD(e,i,KD(i,o,c,s),a,n,r)}const ZD=()=>import(`./installer-CbjJjnwg.js`),QD=new Set([`install`,`i`,`add`]),$D=new Set([`uninstall`,`remove`,`rm`,`un`]),eO=new Set([`list`,`ls`]),tO=new Set([`-g`,`--global`,`--location=global`]),nO=[`-g`,`--global`,`-D`,`--save-dev`];function rO(e){return`${e} - install packages from the npm registry into node_modules
|
|
1337
1332
|
and run package.json scripts; also install conda/emscripten-forge
|
|
1338
1333
|
packages via '${e} mamba'
|
|
1339
1334
|
|
|
@@ -1409,15 +1404,15 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
|
|
|
1409
1404
|
and deps are recorded in /shared/lib/package.json. Existing fields are
|
|
1410
1405
|
preserved. Idempotent: re-installing an already-satisfied package is a clean
|
|
1411
1406
|
no-op.
|
|
1412
|
-
`}function
|
|
1407
|
+
`}function iO(e){let t=C(e,{bool:nO,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 aO(e){let t=!1,n=[];for(let r of e){if(tO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function oO(e){return w(e)}function sO(e){return e instanceof Error?e.message:String(e)}async function cO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function lO(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(n)return oO(r)?{stdout:rO(e),stderr:``,exitCode:0}:dO(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-BRxsK-p_.js`);return n(e,r.slice(1),i,t)}if(oO(r))return{stdout:rO(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:rO(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return QD.has(a)?dO(e,o,i,t):$D.has(a)?pO(e,o,i,t):eO.has(a)?mO(e,o,i,t):a===`root`?hO(e,o,i,t):bD.has(a)?XD(e,o,i,{fs:t.fs}):xD.has(a)?XD(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function uO(e,t,n){let{installFromManifest:r,ManifestNotFoundError:i}=await ZD(),a;try{a=await r({fs:n.fs,fetch:n.fetch,cwd:t.cwd})}catch(t){return t instanceof i?{stdout:``,stderr:`${e}: ${t.message}\n`,exitCode:1}:{stdout:``,stderr:`${e}: install failed: ${sO(t)}\n`,exitCode:1}}if(a.empty&&a.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),s=[...(a.notes??[]).map(t=>`${e}: ${t}`),...a.errors.map(t=>`${e}: failed to install ${t.spec}: ${sO(t.error)}`)];return{stdout:o.length>0?`${o.join(`
|
|
1413
1408
|
`)}\n`:``,stderr:s.length>0?`${s.join(`
|
|
1414
|
-
`)}\n`:``,exitCode:a.errors.length===0?0:1}}async function
|
|
1409
|
+
`)}\n`:``,exitCode:a.errors.length===0?0:1}}async function dO(e,t,n,r){let i=iO(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 uO(e,n,r);let{installPackages:c}=await ZD(),l;try{l=await c(s,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:a,saveDev:o})}catch(t){return{stdout:``,stderr:`${e}: install failed: ${sO(t)}\n`,exitCode:1}}let u=l.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),d=[...(l.notes??[]).map(t=>`${e}: ${t}`),...l.errors.map(t=>`${e}: failed to install ${t.spec}: ${sO(t.error)}`)];return a&&l.results.length>0&&await cO(r),{stdout:u.length>0?`${u.join(`
|
|
1415
1410
|
`)}\n`:``,stderr:d.length>0?`${d.join(`
|
|
1416
|
-
`)}\n`:``,exitCode:l.errors.length===0?0:1}}function
|
|
1417
|
-
`)}\n`}async function
|
|
1411
|
+
`)}\n`:``,exitCode:l.errors.length===0?0:1}}function fO(e,t){if(t.length===0)return`${e}\n└── (empty)\n`;let n=[`${e}`];for(let e=0;e<t.length;e++){let r=e===t.length-1?`└──`:`├──`;n.push(`${r} ${t[e].name}@${t[e].version}`)}return`${n.join(`
|
|
1412
|
+
`)}\n`}async function pO(e,t,n,r){let{global:i,specs:a}=aO(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let{uninstallPackages:o}=await ZD(),s;try{s=await o(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${sO(t)}\n`,exitCode:1}}let c=s.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),l=s.results.filter(e=>!e.removed).map(e=>e.name),u=s.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${sO(t.error)}`);l.length>0&&u.push(`${e}: ${l.join(`, `)} not installed${i?` globally`:``}`);let d=s.errors.length>0;return i&&await cO(r),{stdout:c.length>0?`${c.join(`
|
|
1418
1413
|
`)}\n`:``,stderr:u.length>0?`${u.join(`
|
|
1419
|
-
`)}\n`:``,exitCode:+!!d}}async function
|
|
1420
|
-
`)}\n`}const
|
|
1414
|
+
`)}\n`:``,exitCode:+!!d}}async function mO(e,t,n,r){let{global:i}=aO(t);try{let{listGlobalPackages:e,listLocalPackages:t}=await ZD(),a=i?await e(r.fs):await t(r.fs,n.cwd);return{stdout:fO(i?rr:n.cwd,a),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${sO(t)}\n`,exitCode:1}}}async function hO(e,t,n,r){let{global:i}=aO(t);return{stdout:`${i?ir:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}const gO=`0.5.462`,_O=`v86 is not installed in node_modules: run \`${N} v86@${gO}\` (no network fallback)`;let vO=null;async function yO(e={}){return vO||=CO(e.ipk).catch(e=>{throw vO=null,e}),vO}const bO=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function xO(e,t){for(let{js:n,wasm:r}of bO){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 SO(e){let t;try{t=await dr(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await xO(Fe(t.path).dir,e.reader);if(!n)return null;try{let r=await e.reader.readFile(t.path),i=String(JSON.parse(r).version??`0.5.462`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function CO(e){if(Cr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(_O);let t=await SO(e);if(!t)throw Error(_O);let n=URL.createObjectURL(new Blob([t.jsSource],{type:`text/javascript`})),r;try{r=await import(n)}finally{URL.revokeObjectURL(n)}let i=r.V86??r.default;if(typeof i!=`function`)throw Error(`v86: installed package did not export a V86 constructor`);return{V86:i,wasmModule:await fi(t.wasmBytes),version:t.version}}function wO(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const TO={command:`biome`,example:`biome check foo.js`,bootstrap:`${N} ${w_}`},EO={command:`playwright-cli`,example:`playwright-cli open https://example.com`},DO={command:`puppeteer`,example:`puppeteer open https://example.com`},OO={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${N} @imagemagick/magick-wasm@${Xi}`},kO={...OO,command:`magick`,example:`magick input.png output.jpg`},AO={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},jO={"@biomejs/biome":TO,biome:TO,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${N} esbuild-wasm@${di}`},playwright:EO,"@playwright/test":EO,"playwright-core":EO,puppeteer:DO,"puppeteer-core":DO,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:wr},"pdf-poppler":AO,"pdf-to-img":AO,pdf2pic:AO,"pdf-img-convert":AO,poppler:AO,"poppler-utils":AO,imagemagick:OO,"imagemagick-cli":OO,"imagemagick-convert":OO,"magick-cli":kO,"@imagemagick/magick-wasm":kO,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${aa}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${aa}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${aa}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${aa}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${N} v86@${gO}`}};function MO(e){return Object.hasOwn(jO,e)?jO[e]:void 0}function NO(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function PO(e,t,n,r){let i=n.length?[r.command,...n].map(NO).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(NO).join(` `)}`),`${a.join(`
|
|
1415
|
+
`)}\n`}const FO=/require\(\s*["']([^"']+)["']\s*\)/;function IO(e){return`${e} - run an installed package's executable bin
|
|
1421
1416
|
|
|
1422
1417
|
Usage:
|
|
1423
1418
|
${e} [--force] [--global] <pkg-or-bin> [args...]
|
|
@@ -1430,12 +1425,12 @@ Options:
|
|
|
1430
1425
|
--force Install a package even when a SLICC built-in shadows it
|
|
1431
1426
|
--global Resolve only from the shared global prefix (/shared/lib/node_modules)
|
|
1432
1427
|
-h, --help Show this help message
|
|
1433
|
-
`}async function
|
|
1434
|
-
`)}\n`:``}}catch(n){return{error:
|
|
1435
|
-
`,exitCode:1};let r=
|
|
1436
|
-
`)}\n`:``,exitCode:+!i}})}function
|
|
1437
|
-
`,exitCode:2};let i=
|
|
1438
|
-
`,exitCode:2}:
|
|
1428
|
+
`}async function LO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function RO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function zO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*BO(e,t=!1){if(t){yield ir;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Fe(n).dir;yield ir}async function VO(e,t,n,r=!1){for(let i of BO(t,r)){let t=x(i,`.bin`,n);if(!await RO(e,t))continue;let r=await LO(e,t),a=FO.exec(r),o=Fe(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function HO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function UO(e,t){if(typeof e==`string`)return{binName:HO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,HO(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 WO(e,t,n,r=!1){for(let i of BO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await RO(e,r))continue;let a;try{a=JSON.parse(await LO(e,r))}catch{return null}let o=UO(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 GO(e,t,n,r=!1){return await VO(e,t,n,r)??await WO(e,t,n,r)}async function KO(e,t,n){for(let r of BO(t))if(await RO(e,x(r,n,`package.json`)))return!0;return!1}function qO(e){return e instanceof Error?e.message:String(e)}function JO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function YO(e,t,n,r){try{let{installPackages:i}=await import(`./installer-CbjJjnwg.js`),a=await i([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(a.errors.length>0)return{error:JO(e,`failed to install '${t}': ${qO(a.errors[0].error)}`)};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:o.length>0?`${o.join(`
|
|
1429
|
+
`)}\n`:``}}catch(n){return{error:JO(e,`failed to install '${t}': ${qO(n)}`)}}}async function XO(e,t,n,r){return await RO(r,n)?null:await zO(r,n)?JO(e,`bin target '${n}' is a directory, not a file`):JO(e,`bin file '${n}' for '${t}' does not exist`)}async function ZO(e,t,n,r,i,a){if(await KO(a.fs,i.cwd,t))return{error:JO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:MO(t);if(o)return{error:{stdout:``,stderr:PO(e,t,n,o),exitCode:1}};let s=await YO(e,t,i,a);if(`error`in s)return s;let c=await GO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:JO(e,`package '${t}' was installed but does not expose an executable bin`)}}function QO(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:IO(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:IO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await GO(t.fs,r.cwd,c,o)}catch(t){return JO(e,qO(t))}let d=``;if(!u){if(o)return JO(e,`no global bin '${c}' found in ${ir}`);let n=await ZO(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await XO(e,c,u.binFilePath,t.fs);if(f)return f;let p=si(await LO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await ai(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function $O(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-BXY4xm9Y.js`);return r(t,n,e)})}const ek=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function tk(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return sk();let n=e.processManager??nk();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
|
|
1430
|
+
`,exitCode:1};let r=rk(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=ik(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
|
|
1431
|
+
`)}\n`:``,exitCode:+!i}})}function nk(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function rk(e){let t=`SIGTERM`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-s`||i===`--signal`){let n=e[++r];if(!n)return{ok:!1,stderr:`kill: -s requires a signal name
|
|
1432
|
+
`,exitCode:2};let i=ak(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=ok(i);if(e instanceof Error)return{ok:!1,stderr:`kill: ${e.message}\n`,exitCode:2};t=e;continue}let a=Number.parseInt(i,10);if(!Number.isFinite(a)||String(a)!==i)return{ok:!1,stderr:`kill: invalid pid '${i}'\n`,exitCode:2};n.push(a)}return n.length===0?{ok:!1,stderr:`kill: no pids supplied
|
|
1433
|
+
`,exitCode:2}:ek.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function ik(e,t,n){let r=!0,i=[];for(let a of t)e.signal(a,n)||(r=!1,i.push(e.get(a)?`kill: (${a}) - process already terminated`:`kill: (${a}) - no such process`));return{allDelivered:r,errors:i}}function ak(e){let t=e.toUpperCase(),n=t.startsWith(`SIG`)?t:`SIG${t}`;return n===`SIGINT`||n===`SIGTERM`||n===`SIGKILL`||n===`SIGSTOP`||n===`SIGCONT`?n:Error(`unknown signal '${e}'`)}function ok(e){return e===`-9`?`SIGKILL`:ak(e.slice(1))}function sk(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
|
|
1439
1434
|
|
|
1440
1435
|
Send a signal to one or more processes tracked by the kernel.
|
|
1441
1436
|
|
|
@@ -1457,7 +1452,7 @@ Examples:
|
|
|
1457
1452
|
kill -INT 1024 1025 SIGINT both
|
|
1458
1453
|
kill -STOP 1024 pause; \`kill -CONT 1024\` resumes
|
|
1459
1454
|
kill -s SIGKILL 1024 explicit signal name
|
|
1460
|
-
`,stderr:``,exitCode:0}}const
|
|
1455
|
+
`,stderr:``,exitCode:0}}const ck=[`top`,`left`,`middle`,`right`,`bottom`],lk=`usage: layout <verb> [args]
|
|
1461
1456
|
|
|
1462
1457
|
list List the built-in presets
|
|
1463
1458
|
set <preset> Switch to a built-in preset
|
|
@@ -1473,13 +1468,13 @@ Examples:
|
|
|
1473
1468
|
load <name> Restore a saved arrangement
|
|
1474
1469
|
delete <name> Delete a saved arrangement
|
|
1475
1470
|
reset Restore the default arrangement
|
|
1476
|
-
edit Alias for \`layout set ${
|
|
1471
|
+
edit Alias for \`layout set ${vs}\` (there is no edit mode)
|
|
1477
1472
|
docs Describe the layout surfaces
|
|
1478
1473
|
panels List the registered panel ids
|
|
1479
1474
|
|
|
1480
|
-
Zones: ${
|
|
1481
|
-
`,
|
|
1482
|
-
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const
|
|
1475
|
+
Zones: ${ck.join(`, `)}
|
|
1476
|
+
`,uk=new Set([`files`,`term`,`memory`,`monitor`]),dk=`sprinkle:`;function fk(e){return e===`chat`||uk.has(e)||e.startsWith(dk)?e:`${dk}${e}`}function pk(e){let t=/^(\d+(?:\.\d+)?)%$/.exec(e);if(t)return{percent:Number.parseFloat(t[1])};let n=/^(\d+(?:\.\d+)?)(?:px)?$/.exec(e);return n?{px:Number.parseFloat(n[1])}:null}const mk=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function hk(e){let t=e[0],n=t?Ss(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function gk(e){let t=e[0];return ck.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${ck.join(`|`)}>`}}function _k(e){let[t,n]=e;return!t||!ck.includes(n)?{error:`usage: layout open <surfaceId> <${ck.join(`|`)}>`}:{kind:`open`,surfaceId:fk(t),zone:n}}function vk(e){let t=e[0];return t?{kind:`close`,surfaceId:fk(t)}:{error:`usage: layout close <surfaceId>`}}function yk(e){let[t,n]=e;return!t||!ck.includes(n)?{error:`usage: layout move <surfaceId> <${ck.join(`|`)}>`}:{kind:`move`,surfaceId:fk(t),zone:n}}function bk(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=pk(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 xk(e){let t=e[0];if(!t)return{error:mk};let n={};for(let t=1;t<e.length;t+=2){let r=bk(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:mk}:{kind:`size`,surfaceId:fk(t),size:n}}function Sk(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 Ck(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function wk(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:fk(n)}:{kind:`hide`,panelId:fk(n)}:{error:`usage: layout ${e} <panelId>`}}function Tk(){let e=Ss(vs);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function Ek(e){let[t,...n]=e;switch(t){case`set`:return hk(n);case`chat`:return gk(n);case`open`:return _k(n);case`close`:return vk(n);case`move`:return yk(n);case`size`:return xk(n);case`reset`:return{kind:`reset`};case`edit`:return Tk();case`load`:return Ck(`load`,n);case`save`:return Sk(n);case`delete`:return Ck(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return wk(`show`,n);case`hide`:return wk(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function Dk(){return S(`layout`,async e=>{if(w(e))return{stdout:e[0]?.startsWith(`-`)?lk:ot(`layout`,e[0],lk),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(xs).join(`, `)}\ndefault: ${vs}\n`,stderr:``,exitCode:0};let t=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
|
|
1477
|
+
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const Ok=oa.id;function kk(){return`local-llm — inspect and configure the Local LLM provider
|
|
1483
1478
|
|
|
1484
1479
|
Usage:
|
|
1485
1480
|
local-llm Show current config + verify connection
|
|
@@ -1498,21 +1493,21 @@ Common base URLs:
|
|
|
1498
1493
|
llama.cpp http://localhost:8080/v1
|
|
1499
1494
|
vLLM http://localhost:8000/v1
|
|
1500
1495
|
Jan http://localhost:1337/v1
|
|
1501
|
-
`}function
|
|
1496
|
+
`}function Ak(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function jk(e){return e.map(e=>` • ${e}`)}function Mk(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${Ak(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
|
|
1502
1497
|
`)+`
|
|
1503
|
-
`,exitCode:1}}function
|
|
1498
|
+
`,exitCode:1}}function Nk(e,t){return{stdout:[`✓ ${e}`,` runtime: ${Ak(t.runtime,!0)}`,` models: ${t.models.length}`,...jk(t.models)].join(`
|
|
1504
1499
|
`)+`
|
|
1505
|
-
`,stderr:``,exitCode:0}}function
|
|
1500
|
+
`,stderr:``,exitCode:0}}function Pk(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${Ak(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...jk(t.models)].join(`
|
|
1506
1501
|
`)+`
|
|
1507
|
-
`,stderr:``,exitCode:0}}function
|
|
1508
|
-
`,exitCode:1};let c=await a(s,t(
|
|
1502
|
+
`,stderr:``,exitCode:0}}function Fk(){return S(Ok,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:kk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-BGMKtG5Y.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-B4YA09uv.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(Ok);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
|
|
1503
|
+
`,exitCode:1};let c=await a(s,t(Ok)??void 0);if(!c.ok)return Mk(s,c);if(o===`discover`){let e=n(Ok)??``;return i(Ok,e,s,c.models.join(`, `)),Pk(s,c)}return Nk(s,c)})}function Ik(){return{stdout:`usage: man <topic>
|
|
1509
1504
|
|
|
1510
1505
|
Fetches documentation for a given topic from sliccy.com.
|
|
1511
|
-
`,stderr:``,exitCode:0}}function
|
|
1506
|
+
`,stderr:``,exitCode:0}}function Lk(e){return e.replace(/<[^>]*>/g,``).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).replace(/&/g,`&`).trimEnd()}function Rk(){let e=g();return S(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return Ik();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
|
|
1512
1507
|
For example, try 'man commands'.
|
|
1513
|
-
`,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:
|
|
1514
|
-
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function
|
|
1515
|
-
`)}\n`}function
|
|
1508
|
+
`,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:Lk(new TextDecoder(`utf-8`).decode(t.body))+`
|
|
1509
|
+
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function zk(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function Bk(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 Vk(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function Hk(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 Uk(e){let t=[`total: ${Sy(e.bytes)}`],n=[...e.breakdown].filter(e=>e.bytes>0).sort((e,t)=>t.bytes-e.bytes);if(n.length>0){t.push(``,`BYTES TYPES ATTRIBUTION`);for(let e of n)t.push(`${Sy(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${Bk(e)}`)}return`${t.join(`
|
|
1510
|
+
`)}\n`}function Wk(e={}){return S(`meminfo`,async t=>{let n=Hk(t);if(`error`in n)return zk(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
|
|
1516
1511
|
|
|
1517
1512
|
Usage:
|
|
1518
1513
|
meminfo Human-readable breakdown (bytes, scope, types, url)
|
|
@@ -1523,8 +1518,8 @@ Notes:
|
|
|
1523
1518
|
Document-Isolation-Policy). Embedded floats cannot be isolated and
|
|
1524
1519
|
report why instead.
|
|
1525
1520
|
- The browser randomizes measurement timing — expect a short delay.
|
|
1526
|
-
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??
|
|
1527
|
-
`)?e:`${e}\n`,exitCode:1}}async function
|
|
1521
|
+
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??Vk();if(!r&&!e.measure)return zk(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return zk(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return zk(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:Uk(a),stderr:``,exitCode:0}})}function Gk(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-CogNNkBe.js`);return n(t,e)})}function Kk(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const qk=`/.cache/artificial-analysis.json`,Jk=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],Yk=[`--provider`];function Xk(e){return{stdout:``,stderr:e.endsWith(`
|
|
1522
|
+
`)?e:`${e}\n`,exitCode:1}}async function Zk(e){try{let t=await e.readFile(qk),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function Qk(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function $k(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 eA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(qk,JSON.stringify(n))}catch{}}async function tA(e,t=!1){if(e&&!t){let t=await Zk(e);if(t)return t}let n={Accept:`application/json`},r=Qk();r&&(n[`x-api-key`]=r);let i=g(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=$k(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await eA(e,c),c}function nA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function rA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=nA(e),a=t.find(e=>nA(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 iA(){return`models - list available LLM models
|
|
1528
1523
|
|
|
1529
1524
|
Usage: models [options]
|
|
1530
1525
|
|
|
@@ -1536,14 +1531,14 @@ Options:
|
|
|
1536
1531
|
--refresh Force re-fetch benchmark data from Artificial Analysis
|
|
1537
1532
|
--no-benchmarks Skip benchmark data enrichment (faster, works offline)
|
|
1538
1533
|
-h, --help Show this help message
|
|
1539
|
-
`}function
|
|
1534
|
+
`}function aA(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function oA(e){return`$${e.toFixed(2)}`}const sA=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function cA(e){let t=`${e.id} ${e.name??``}`;return!sA.test(t)}function lA(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 uA(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),lA(t)??t.replace(/-[\d.]+$/,``)}function dA(e){let t=new Map;for(let n of e){let e=uA(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function fA(e,t,n,r,i){let a=i?rA(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 pA(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=`${oA(e.cost.input)} / ${oA(e.cost.output)}`,a=`${aA(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(`
|
|
1540
1535
|
`)+`
|
|
1541
|
-
`}function
|
|
1542
|
-
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await
|
|
1536
|
+
`}function mA(e){let t=C(e,{bool:Jk,value:Yk});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 hA(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 gA(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(cA);if(o.length===0)return[];let s=o.map(e=>fA(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=dA(s)),s}function _A(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 vA(e,t){if(w(e,{valueFlags:Yk}))return{stdout:iA(),stderr:``,exitCode:0};let n=mA(e);if(`error`in n)return Xk(`models: ${n.error}`);let r=await import(`./account-store-BGMKtG5Y.js`).then(e=>e.t);if(r.getAccounts().length===0)return Xk(`No provider accounts configured. Run the provider settings to add one.
|
|
1537
|
+
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await tA(t,n.forceRefresh);e.length>0&&(l=e)}let u=hA(r,n,s);if(`error`in u)return Xk(u.error);let d=[],f=[];for(let e of u){let t=gA(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return Xk(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(pA(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
|
|
1543
1538
|
`,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
|
|
1544
|
-
`),f.push(
|
|
1545
|
-
`),stderr:``,exitCode:0})}function
|
|
1546
|
-
`,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:
|
|
1539
|
+
`),f.push(_A(o,a,s,c)),{stdout:f.join(`
|
|
1540
|
+
`),stderr:``,exitCode:0})}function yA(e){return S(`models`,async t=>vA(t,e))}const bA=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function xA(e){return e===`-e`||e===`--eval`||bA.has(e)||!e.startsWith(`-`)}function SA(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function CA(e,t,n){let r=e.startsWith(`--input-type=`),i=r?e.slice(13):t,a=r?n+1:n+2;return i===void 0?{nextIndex:n+1,error:{stdout:``,stderr:`node: option --input-type requires an argument
|
|
1541
|
+
`,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:SA(i)}:{inputType:i,nextIndex:a}}function wA(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(xA(o))break;if(o===`-h`||o===`--help`){t=!0,a+=1;continue}if(o===`-v`||o===`--version`){n=!0,a+=1;continue}if(o===`-c`||o===`--check`){r=!0,a+=1;continue}if(o===`--input-type`||o.startsWith(`--input-type=`)){let s=CA(o,e[a+1],a);if(s.error)return{help:t,version:n,check:r,inputType:i,sourceIndex:s.nextIndex,error:s.error};i=s.inputType,a=s.nextIndex;continue}return{help:t,version:n,check:r,inputType:i,sourceIndex:a,error:{stdout:``,stderr:`node: unsupported option '${o}'\n`,exitCode:9}}}return{help:t,version:n,check:r,inputType:i,sourceIndex:a}}function TA(){return{stdout:`usage: node [options] [script.js] [args...]
|
|
1547
1542
|
node [options] -e <code> [args...]
|
|
1548
1543
|
|
|
1549
1544
|
Options:
|
|
@@ -1552,20 +1547,20 @@ Options:
|
|
|
1552
1547
|
--input-type=TYPE module or commonjs (stdin / -e / .js)
|
|
1553
1548
|
-h, --help print this help
|
|
1554
1549
|
-v, --version print Node shim version
|
|
1555
|
-
`,stderr:``,exitCode:0}}function
|
|
1550
|
+
`,stderr:``,exitCode:0}}function EA(){return{stdout:`${xr}\n`,stderr:``,exitCode:0}}function DA(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
|
|
1556
1551
|
`,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
|
|
1557
|
-
`,exitCode:9}}}function
|
|
1558
|
-
`,exitCode:9}};if(e.length>0&&
|
|
1559
|
-
`,exitCode:9}}}function
|
|
1560
|
-
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=
|
|
1552
|
+
`,exitCode:9}}}function OA(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function kA(e){return e instanceof Error?e.stack??e.message:String(e)}async function AA(e,t,n){if(!(pr(e)||Or(e)||t.endsWith(`.mjs`)))return e;try{return(await(await ui()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test(kA(r)))throw r;return li()({source:e,filename:t,fromDir:OA(t,n)})}}async function jA(e,t,n){let r=e;try{r=await AA(e,t,n)}catch(e){return{stdout:``,stderr:`${kA(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:`${kA(e)}\n`,exitCode:1}}}async function MA(e,t){if(e.length>0&&(e[0]===`-e`||e[0]===`--eval`))return e[1]?{kind:`ok`,code:e[1],filename:`[eval]`,argv:[`node`,...e.slice(2)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: option requires an argument -- eval
|
|
1553
|
+
`,exitCode:9}};if(e.length>0&&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"
|
|
1554
|
+
`,exitCode:9}}}function NA(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 TA();if(r.version)return EA();let i=await MA(t.slice(r.sourceIndex),n);if(i.kind===`result`)return r.check&&i.result.exitCode===9&&t.slice(r.sourceIndex).length===0?{stdout:``,stderr:`node: -c/--check requires a filename or -e CODE
|
|
1555
|
+
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=DA(o,r.inputType);if(l)return l;let u=si(a);return r.check?jA(u,o,n.cwd):ai(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const PA=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function FA(){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 IA=[],LA=[`--yes`];function RA(){return S(`nuke`,async e=>{if(w(e,{valueFlags:IA}))return{stdout:`Usage: nuke <launch-code>
|
|
1561
1556
|
|
|
1562
1557
|
Completely reset the environment by deleting all local data and reloading.
|
|
1563
1558
|
Destroys the file system, chat history, and scoops database.
|
|
1564
1559
|
Requires the secret launch code to proceed.
|
|
1565
|
-
`,stderr:``,exitCode:0};let t=C(e,{value:
|
|
1560
|
+
`,stderr:``,exitCode:0};let t=C(e,{value:IA,bool:LA});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await FA(),zA(PA)})(),{stdout:`Nuking everything…
|
|
1566
1561
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
|
|
1567
1562
|
Run nuke again with the secret launch code to proceed.
|
|
1568
|
-
`,exitCode:1}})}function
|
|
1563
|
+
`,exitCode:1}})}function zA(e=[]){let t=[...e];try{if(typeof BroadcastChannel==`function`){let e=new BroadcastChannel(`slicc-nuke-control`);e.postMessage({type:`nuke-reload`,keysToRemove:t}),setTimeout(()=>e.close(),100)}}catch{}for(let e of t)try{globalThis.localStorage?.removeItem(e)}catch{}try{globalThis.location?.reload?.()}catch{}}function BA(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
|
|
1569
1564
|
|
|
1570
1565
|
Usage:
|
|
1571
1566
|
oauth-domain list List extra domains for every provider
|
|
@@ -1590,13 +1585,13 @@ Examples:
|
|
|
1590
1585
|
oauth-domain add adobe '*.da.live'
|
|
1591
1586
|
oauth-domain list adobe
|
|
1592
1587
|
oauth-domain remove adobe admin.da.live
|
|
1593
|
-
`}function
|
|
1588
|
+
`}function VA(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function HA(e,t){if(t){let n=e.getExtraOAuthDomains(t);return n.length===0?{stdout:`(no extra domains configured for ${t})\n`,stderr:``,exitCode:0}:{stdout:`${n.join(`
|
|
1594
1589
|
`)}\n`,stderr:``,exitCode:0}}let n=Object.entries(e.getAllExtraOAuthDomains()).filter(([,e])=>e.length>0);return n.length===0?{stdout:`(no extra OAuth domains configured)
|
|
1595
1590
|
`,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
|
|
1596
|
-
`)}\n`,stderr:``,exitCode:0}}async function
|
|
1597
|
-
`,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
|
|
1598
|
-
`,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
|
|
1599
|
-
`,exitCode:1}}async function
|
|
1591
|
+
`)}\n`,stderr:``,exitCode:0}}async function UA(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
|
|
1592
|
+
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase();return r.some(e=>e.toLowerCase()===i)?{stdout:`(${n} already in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,[...r,n]),{stdout:`Added ${n} to ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function WA(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
|
|
1593
|
+
`,exitCode:1};let r=e.getExtraOAuthDomains(t),i=n.toLowerCase(),a=r.filter(e=>e.toLowerCase()!==i);return a.length===r.length?{stdout:`(${n} not found in ${t} extras)\n`,stderr:``,exitCode:0}:(await e.setExtraOAuthDomainsAsync(t,a),{stdout:`Removed ${n} from ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0})}async function GA(e,t){return t?(await e.setExtraOAuthDomainsAsync(t,[]),{stdout:`Cleared extra domains for ${t}. Reload the page to apply.\n`,stderr:``,exitCode:0}):{stdout:``,stderr:`oauth-domain clear: requires <providerId>
|
|
1594
|
+
`,exitCode:1}}async function KA(e,t,n,r){switch(t){case`list`:return HA(e,n);case`add`:return UA(e,n,r);case`remove`:return WA(e,n,r);case`clear`:return GA(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${BA()}`,exitCode:1}}}function qA(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:BA(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return VA(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-BGMKtG5Y.js`).then(e=>e.t);try{return await KA(a,n,r,i)}catch(e){return VA(e instanceof Error?e.message:String(e))}})}function JA(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-CTXs0tgt.js`);return n(e,t)})}const YA=[`--download`,`-d`,`--view`,`-v`],XA=[`--size`],ZA={low:256,medium:768,high:1536};function QA(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
|
|
1600
1595
|
|
|
1601
1596
|
VFS paths are served in a new browser tab via the preview service worker.
|
|
1602
1597
|
URLs (http/https/etc.) are opened directly in a new tab.
|
|
@@ -1610,19 +1605,19 @@ Examples:
|
|
|
1610
1605
|
medium (768x768), high (1536x1536), or a custom WxH
|
|
1611
1606
|
box like 512x512. The image is fit inside the box
|
|
1612
1607
|
with aspect ratio preserved and is never upscaled.
|
|
1613
|
-
`,stderr:``,exitCode:0}}function
|
|
1608
|
+
`,stderr:``,exitCode:0}}function $A(e){if(e in ZA){let t=ZA[e];return{maxW:t,maxH:t}}let t=/^(\d+)x(\d+)$/.exec(e);if(t){let e=parseInt(t[1],10),n=parseInt(t[2],10);if(e>0&&n>0)return{maxW:e,maxH:n}}return null}function ej(e,t){if(t===`image/png`||t===`image/apng`){if(e.length<26)return!1;let t=e[25];return t===4||t===6}if(t===`image/webp`){if(e.length<16)return!1;let t=String.fromCharCode(e[12],e[13],e[14],e[15]);return t===`VP8L`?!0:t===`VP8X`?e.length<21?!1:!!(e[20]&16):!1}return!1}function tj(){return`open --view requires --size to bound the inlined image. Use one of:
|
|
1614
1609
|
--size low (256x256)
|
|
1615
1610
|
--size medium (768x768)
|
|
1616
1611
|
--size high (1536x1536)
|
|
1617
1612
|
--size WxH (custom box, e.g. 512x512)
|
|
1618
|
-
`}const
|
|
1619
|
-
`)}async function
|
|
1620
|
-
`);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return
|
|
1621
|
-
`);let i;try{i=await n.fs.stat(t)}catch{return G(`open: no such file: ${e}\n`)}if(!i.isFile)return G(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return G(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:
|
|
1622
|
-
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await
|
|
1623
|
-
`);if(
|
|
1613
|
+
`}const nj=new Set([`image/png`,`image/webp`]);function rj(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function ij(e,t){let n=rj(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function aj(e,t,n,r){let i=rj(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=ej(e,t)?nj.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 oj(e){let t=C(e,{bool:YA,value:XA});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 sj(e){return{ok:!0,message:e}}function G(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function cj(e){return e?` (targetId: ${e})`:``}function lj(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 uj(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),sj(`opened sprinkle ${e} from ${a}`)}catch(e){return G(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await mr(t.fs,Sr(a)),n=Wr(a,e),r;try{r=await i(n)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return sj(`opened ${a} → ${n}${cj(r)}`)}return G(`open: sprinkle manager not initialized
|
|
1614
|
+
`)}async function dj(e,t,n){if(!t)return G(`open: browser APIs are unavailable in this environment
|
|
1615
|
+
`);let r;try{r=await n(e)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return sj(`opened ${e}${cj(r)}`)}async function fj(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return G(`open: no such file: ${e}\n`)}if(!a.isFile)return G(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return G(`open: failed to read: ${e}\n`)}let s=fr(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=$A(i),!l))return G(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await ij(c,s)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(c.byteLength/1024);return G(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+tj())}let u;try{u=await aj(c,s,l.maxW,l.maxH)}catch(t){return G(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=t(u.bytes),f=Math.round(u.bytes.byteLength/1024);return sj(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function pj(e,t,n,r){if(!r)return G(`open: --download requires the in-panel terminal (DOM-only)
|
|
1616
|
+
`);let i;try{i=await n.fs.stat(t)}catch{return G(`open: no such file: ${e}\n`)}if(!i.isFile)return G(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return G(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:fr(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=vr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),sj(`downloaded ${t}`)}async function mj(e,t,n,r){if(!n)return G(`open: browser APIs are unavailable in this environment
|
|
1617
|
+
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await mr(t.fs,i?e:Sr(e)),o=Wr(e,a),s;try{s=await r(o)}catch(e){return G(`${e instanceof Error?e.message:String(e)}\n`)}return sj(`opened ${e} → ${o}${cj(s)}`)}async function hj(e,t,n,r){if(!gr(e)&&e.endsWith(`.shtml`)&&t.fs)return uj(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return G(`open: browser APIs are unavailable in this environment
|
|
1618
|
+
`);if(gr(e))return dj(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?fj(e,i,t,n.sizeSpec):n.download?pj(e,i,t,r.hasDom):mj(i,t,r.canOpenWindow,r.openExternal)}function gj(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:XA}))return QA();let r=oj(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 QA();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:lj(e,l,u)},f=[];for(let e of s){let t=await hj(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
|
|
1624
1619
|
`)+`
|
|
1625
|
-
`,stderr:``,exitCode:0}})}function
|
|
1620
|
+
`,stderr:``,exitCode:0}})}function _j(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-D5V1rBmu.js`);return n(e,t)})}function vj(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function yj(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
|
|
1626
1621
|
|
|
1627
1622
|
Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
|
|
1628
1623
|
is zero-padded to the digit width of the last page (out-1.png for a 9-page
|
|
@@ -1649,8 +1644,8 @@ Examples:
|
|
|
1649
1644
|
pdftoppm -png -r 150 doc.pdf page
|
|
1650
1645
|
pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
|
|
1651
1646
|
pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
|
|
1652
|
-
`,stderr:``,exitCode:0}}function
|
|
1653
|
-
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function
|
|
1647
|
+
`,stderr:``,exitCode:0}}function 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 xj(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 Sj(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=xj(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 Cj(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 Tj(e){return e===`jpeg`?`jpg`:`png`}function Ej(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:ea(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function Dj(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Qi(r))throw Error(`${t}: not a PDF file`);return r}function Oj(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return yj();let r;try{r=Sj(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await Dj(n,r.inputPath),i=Tj(r.format),a=r.outputRoot??Cj(vr(r.inputPath)),o=[];return await Zi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...Ej(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(`
|
|
1648
|
+
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function kj(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function Aj(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 jj(){Dw(()=>()=>re()),Ew(()=>()=>Aj(re()))}const Mj=`/workspace/.plugins/sources`;function Nj(e){return{stdout:e,stderr:``,exitCode:0}}function K(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function Pj(e,t){let n=C(t,{});return`error`in n?K(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function Fj(){return`usage: plugin <command> [args]
|
|
1654
1649
|
|
|
1655
1650
|
Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
|
|
1656
1651
|
directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
|
|
@@ -1660,7 +1655,7 @@ Commands:
|
|
|
1660
1655
|
install <path|repo> Validate the plugin and register it. <repo> is a
|
|
1661
1656
|
GitHub reference (owner/repo, owner/repo@branch, or
|
|
1662
1657
|
https://github.com/owner/repo[/tree/branch[/dir]]),
|
|
1663
|
-
downloaded into ${
|
|
1658
|
+
downloaded into ${Mj}/.
|
|
1664
1659
|
Skills surface through the standard skills discovery;
|
|
1665
1660
|
streamable-http MCP servers are added to the MCP
|
|
1666
1661
|
store as "<plugin>:<server>".
|
|
@@ -1682,36 +1677,36 @@ Examples:
|
|
|
1682
1677
|
plugin list
|
|
1683
1678
|
plugin info my-plugin
|
|
1684
1679
|
plugin remove my-plugin
|
|
1685
|
-
`}function
|
|
1680
|
+
`}function Ij(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return Nj(Fj());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await Uj(i,a,e);case`list`:case`ls`:return await qj(i,e);case`info`:return await Jj(i,e);case`validate`:return await Yj(i,a,e,na(n?.env));case`remove`:case`rm`:case`delete`:return await Xj(i,e);default:return K(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return K(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function Lj(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-CKSBDyCr.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return t.create({dbName:n})}async function Rj(e,t,n){let r=Zj(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-HX3c8n0G.js`).then(e=>e.t),a=i(e);if(a){let e=`${a.owner}/${a.repo}${a.branch?`@${a.branch}`:``}${a.path?`/${a.path}`:``}`;return{kind:`github`,ref:{...a,display:e}}}return{kind:`error`,message:`${r} does not exist and "${e}" is not a GitHub reference (owner/repo[@branch] or https://github.com/owner/repo[/tree/branch[/dir]])`}}function zj(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function Bj(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${Mj}/${t.map(zj).join(`--`)}`}async function Vj(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-CUIsX5nN.js`).then(e=>e.i),s=await i(e.owner,e.repo,r,e.branch);if(s.status===`error`)return`failed to download ${e.display}: ${s.message}`;let c=a(s.files),l=e.path?e.path.replace(/^\/|\/$/g,``)+`/`:``;if(!c[`${l}plugin.json`])return`no plugin.json found at ${e.display} — not an Agent Plugins package`;try{await n.rm(t,{recursive:!0})}catch{}return await n.mkdir(t,{recursive:!0}),(await o(c,l,t,n,!1)).length===0?`no files found at ${e.display}`:null}async function Hj(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function Uj(e,t,n){if(w(e))return Nj(`usage: plugin install <path|repo>
|
|
1686
1681
|
|
|
1687
1682
|
Loads the Agent Plugins package at <path>, or downloads it from a GitHub
|
|
1688
1683
|
reference (owner/repo, owner/repo@branch, or
|
|
1689
1684
|
https://github.com/owner/repo[/tree/branch[/dir]]) into
|
|
1690
|
-
${
|
|
1685
|
+
${Mj}/ first. Validates plugin.json (closed
|
|
1691
1686
|
schema, name constraints), discovers skills/*/SKILL.md, and validates
|
|
1692
1687
|
mcp.json. On success the plugin is recorded in
|
|
1693
1688
|
/workspace/.plugins/plugins.json — its skills then surface through the
|
|
1694
1689
|
standard skills discovery, and each supported streamable-http MCP server
|
|
1695
1690
|
is registered in the MCP store as "<plugin>:<server>".
|
|
1696
|
-
`);let r=
|
|
1691
|
+
`);let r=Pj(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return K(`plugin install: expected <path|repo>`);let i=await Lj(n),a=await Rj(r.positionals[0],t,i);if(a.kind===`error`)return K(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return K(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=Bj(a.ref),s=a.ref.display;let e=await Vj(a.ref,o,i,n.fetch);if(e)return K(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-D4Fuki1u.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await Hj(i,o),K(`plugin install: plugin at ${s??o} was rejected:\n${Qj(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-Mw1jky9b.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await Hj(i,o),K(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await Kj(u,n),g=await Gj(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),Nj(Wj(u,h,g,s??o,l.diagnostics))}function Wj(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:`,Qj(i)),c.join(`
|
|
1697
1692
|
`)+`
|
|
1698
|
-
`}async function
|
|
1699
|
-
`);let n=
|
|
1693
|
+
`}async function Gj(e,t,n,r){let i=(t??[]).filter(e=>!n.includes(e));if(i.length===0)return 0;let{deleteServer:a,getServer:o}=await import(`./store-wiEGJ_43.js`).then(e=>e.r),s=0;for(let t of i)(await o(t,r.fs))?.pluginOrigin===e&&await a(t,r.fs)&&(s+=1);return s}async function Kj(e,t){let n=e.mcp.servers.filter(e=>e.status===`supported`);if(n.length===0)return{registered:[],conflicts:[]};let{getServer:r,setServer:i}=await import(`./store-wiEGJ_43.js`).then(e=>e.r),{McpClient:a}=await import(`./client-D5zdJCVT.js`),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function qj(e,t){if(w(e))return Nj(`usage: plugin list
|
|
1694
|
+
`);let n=Pj(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-Mw1jky9b.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return Nj("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 Nj(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
|
|
1700
1695
|
`)+`
|
|
1701
|
-
`)}async function
|
|
1702
|
-
`);let n=
|
|
1696
|
+
`)}async function Jj(e,t){if(w(e))return Nj(`usage: plugin info <name>
|
|
1697
|
+
`);let n=Pj(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-Mw1jky9b.js`),a=await i(r,t.fs);if(!a)return K(`plugin info: no installed plugin named "${r}"`);let o=await Lj(t),{loadPluginFromDirectory:s}=await import(`./loader-D4Fuki1u.js`),c=await s(o,a.root);if(!c.ok)return K(`plugin info: plugin at ${a.root} no longer loads:\n${Qj(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:`,Qj(c.diagnostics)),Nj(d.join(`
|
|
1703
1698
|
`)+`
|
|
1704
|
-
`)}async function
|
|
1705
|
-
`);let i=
|
|
1699
|
+
`)}async function Yj(e,t,n,r){if(w(e))return Nj(`usage: plugin validate <path|repo>
|
|
1700
|
+
`);let i=Pj(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return K(`plugin validate: expected <path|repo>`);let a=await Lj(n),o=await Rj(i.positionals[0],t,a);if(o.kind===`error`)return K(`plugin validate: ${o.message}`);let s,c=null;if(o.kind===`github`){if(!n.fetch)return K(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);c=`${r}/.plugin-validate/${Bj(o.ref).split(`/`).pop()}`;let e=await Vj(o.ref,c,a,n.fetch);if(e)return K(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-D4Fuki1u.js`),u;try{u=await l(a,s)}finally{c&&await Hj(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${Qj(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:`,Qj(u.diagnostics)),Nj(p.join(`
|
|
1706
1701
|
`)+`
|
|
1707
|
-
`)}async function
|
|
1708
|
-
`);let n=
|
|
1702
|
+
`)}async function Xj(e,t){if(w(e))return Nj(`usage: plugin remove <name>
|
|
1703
|
+
`);let n=Pj(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return K(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-Mw1jky9b.js`),o=await i(r,t.fs);if(!o)return K(`plugin remove: no installed plugin named "${r}"`);let s=0;if(o.mcpServerNames&&o.mcpServerNames.length>0){let{deleteServer:e,getServer:n}=await import(`./store-wiEGJ_43.js`).then(e=>e.r);for(let i of o.mcpServerNames)(await n(i,t.fs))?.pluginOrigin===r&&await e(i,t.fs)&&(s+=1)}await a(r,t.fs);let c=o.root.startsWith(`${Mj}/`);return c&&await Hj(await Lj(t),o.root),Nj([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
|
|
1709
1704
|
`)+`
|
|
1710
|
-
`)}function
|
|
1711
|
-
`)}const
|
|
1712
|
-
`,exitCode:1};let r=C(t,{bool:
|
|
1705
|
+
`)}function Zj(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 Qj(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
|
|
1706
|
+
`)}const $j=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],eM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],tM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},nM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],rM=[`-o`,`--columns`];function iM(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:rM}))return vM();let n=e.processManager??aM();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
|
|
1707
|
+
`,exitCode:1};let r=C(t,{bool:nM,value:rM});if(`error`in r)return{stdout:``,stderr:`ps: ${r.error}\n`,exitCode:r.error.startsWith(`unknown flag:`)?1:2};if(r.positionals.length>0)return{stdout:``,stderr:`ps: unrecognized argument '${r.positionals[0]}'\n`,exitCode:2};let i=eM,a=r.bools.has(`-T`)||r.bools.has(`--tree`),o=r.bools.has(`-a`)||r.bools.has(`-A`)||r.bools.has(`-e`)||r.bools.has(`--all`),s=r.values.get(`-o`)??r.values.get(`--columns`);if(s!==void 0){let e=oM(s);if(e instanceof Error)return{stdout:``,stderr:`ps: ${e.message}\n`,exitCode:2};i=e}let c=n.list().sort((e,t)=>e.pid-t.pid),l=o?c:c.filter(e=>e.status===`running`||e.status===`pending`),u=a?_M(l):l.map(e=>({proc:e,depth:0})),d=sM(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>uM(e,i,t,a,d));return{stdout:[cM(i,d),...f].join(`
|
|
1713
1708
|
`)+`
|
|
1714
|
-
`,stderr:``,exitCode:0}})}function
|
|
1709
|
+
`,stderr:``,exitCode:0}})}function aM(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function oM(e){let t=e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(t.length===0)return Error(`-o requires at least one column`);let n=[];for(let e of t){if(!$j.includes(e))return Error(`unknown column '${e}'; supported: ${$j.join(`, `)}`);n.push(e)}return n}function sM(e,t,n){if(!(n&&e.includes(`scoop`)))return{full:!1,width:10};let r=5;for(let e of t)r=Math.max(r,pM(e).length);return{full:!0,width:r}}function cM(e,t){return e.map(e=>lM(e,t)).join(` `)}function lM(e,t){switch(e){case`pid`:return`PID`.padStart(5);case`ppid`:return`PPID`.padStart(5);case`kind`:return`KIND`.padEnd(10);case`stat`:return`STAT`;case`start`:return`START`;case`scoop`:return`SCOOP`.padEnd(t.width);case`command`:return`COMMAND`}}function uM(e,t,n,r,i){return t.map(t=>dM(e,t,n,r,i)).join(` `)}function dM(e,t,n,r,i){switch(t){case`pid`:return String(e.pid).padStart(5);case`ppid`:return String(e.ppid).padStart(5);case`kind`:return e.kind.padEnd(10);case`stat`:return tM[e.status];case`start`:return fM(e.startedAt);case`scoop`:return mM(e,i);case`command`:return hM(e,n,r)}}function fM(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function pM(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function mM(e,t){let n=pM(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function hM(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(gM).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function gM(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function _M(e){let t=new Map;for(let n of e)t.set(n.pid,n);let n=new Map,r=[];for(let i of e)if(t.has(i.ppid)){let e=n.get(i.ppid)??[];e.push(i),n.set(i.ppid,e)}else r.push(i);let i=[],a=new Set,o=(e,t)=>{if(a.has(e.pid))return;a.add(e.pid),i.push({proc:e,depth:t});let r=n.get(e.pid)??[];for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,t+1)};for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,0);return i}function vM(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
|
|
1715
1710
|
|
|
1716
1711
|
List processes tracked by the kernel.
|
|
1717
1712
|
|
|
@@ -1744,9 +1739,9 @@ Examples:
|
|
|
1744
1739
|
ps -a -T full tree
|
|
1745
1740
|
ps -o pid,kind,stat just three columns
|
|
1746
1741
|
ps -o scoop,stat,pid full scoop jid, with STAT and PID
|
|
1747
|
-
`,stderr:``,exitCode:0}}const
|
|
1748
|
-
`,stderr:``,exitCode:0}}function
|
|
1749
|
-
`,stderr:``,exitCode:0}}async function
|
|
1742
|
+
`,stderr:``,exitCode:0}}const yM=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function bM(e,t=yM){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 xM(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 SM(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function CM(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 TM(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function EM(){return{stdout:`usage: python3 [-c code | script.py] [args...]
|
|
1743
|
+
`,stderr:``,exitCode:0}}function DM(){return{stdout:`Python 3.14 (Pyodide)
|
|
1744
|
+
`,stderr:``,exitCode:0}}async function OM(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 kM(e){let t=CM(e),n=await Vr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Br}\n`,exitCode:1}};let r=await wM(t.reader,n);return r?r===Ar?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${TM(r,Ar)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Br}\n`,exitCode:1}}}const AM=new Set(`EsSuBIPqObdR`);function jM(e){let t=0;for(;t<e.length&&/^-[A-Za-z]+$/.test(e[t]);){let n=e[t].slice(1);if(n===`W`||n===`X`){t+=2;continue}if(![...n].every(e=>AM.has(e)))break;t++}return t===0?e:e.slice(t)}function MM(e,t={}){return S(e,async(n,r)=>{let i=jM(n),a=i[0];if(a===`--help`||a===`-h`)return EM();if(a===`--version`||a===`-V`)return DM();let o=await OM(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await bM(r.fs),f=xM(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??NM(),h=p?.owner??{kind:`system`},g=p?.getParentPid?.(),_=t.realmFactory??Jr(),v=t.pyodideIndexURL??ci(),ee=t.pyodideAssetRoot;if(!ee&&v===void 0){let e=await kM(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=SM();return m?ii({pm:m,realmFactory:_,owner:h,kind:`py`,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f,procKind:`py`,ppid:g,syncFsBridgeEnabled:qr()}):FM({realmFactory:_,owner:h,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f})})}function NM(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let PM=null;async function FM(e){if(!PM){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);PM=new e}return ii({pm:PM,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`,syncFsBridgeEnabled:qr()})}function IM(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function LM(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 RM(){return null}function zM(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=BM(r),o=BM(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 BM(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 VM(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
|
|
1750
1745
|
|
|
1751
1746
|
Usage:
|
|
1752
1747
|
rsync [flags] <local-path> <runtime-id>:<remote-path> # push
|
|
@@ -1762,21 +1757,21 @@ Examples:
|
|
|
1762
1757
|
rsync /workspace follower-abc123:/workspace
|
|
1763
1758
|
rsync --delete /shared leader:/shared
|
|
1764
1759
|
rsync follower-abc123:/workspace/project /workspace/project
|
|
1765
|
-
`,stderr:``,exitCode:0}}async function
|
|
1760
|
+
`,stderr:``,exitCode:0}}async function HM(e,t){if(!await e.exists(t))return[];let n=[];for await(let r of e.walk(t)){let i=r.slice(t.length).replace(/^\//,``);if(!i)continue;let a=await e.stat(r);n.push({path:i,size:a.size,mtimeMs:a.mtime})}return n}async function UM(e,t,n){let r=(await e(t,{op:`walk`,path:n}))[0];if(!r.ok){if(r.code===`ENOENT`)return[];throw Error(`Remote walk failed: ${r.error}`)}if(r.data.type!==`paths`)throw Error(`Unexpected walk response type`);let i=r.data.paths,a=[];for(let r of i){let i=r.slice(n.length).replace(/^\//,``);if(!i)continue;let o=(await e(t,{op:`stat`,path:r}))[0];o.ok&&o.data.type===`stat`&&a.push({path:i,size:o.data.stat.size,mtimeMs:o.data.stat.mtime})}return a}async function WM(e,t,n){let r=await e(t,{op:`readFile`,path:n,encoding:`binary`}),i=``;for(let e of r){if(!e.ok)throw Error(`Remote read failed: ${e.error}`);e.data.type===`file`&&(i+=e.data.content)}return i}async function GM(e,t,n){let r=await e(t,{op:`mkdir`,path:n,recursive:!0});if(!r[0].ok)throw Error(`Remote mkdir failed: ${r[0].error}`)}function KM(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function qM(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=LM(await HM(e,a),await UM(n,s,o),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1766
1761
|
`)+`
|
|
1767
|
-
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await
|
|
1762
|
+
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await GM(n,s,KM(l));let u=await e.readFile(c,{encoding:`binary`}),d=await n(s,{op:`writeFile`,path:l,content:t(u),encoding:`base64`});if(!d[0].ok)return{stdout:i.join(`
|
|
1768
1763
|
`)+`
|
|
1769
1764
|
`,stderr:`Error writing ${l}: ${d[0].error}\n`,exitCode:1}}for(let e of u.toDelete){let t=o+`/`+e,r=await n(s,{op:`rm`,path:t});if(!r[0].ok)return{stdout:i.join(`
|
|
1770
1765
|
`)+`
|
|
1771
1766
|
`,stderr:`Error deleting ${t}: ${r[0].error}\n`,exitCode:1}}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1772
1767
|
`)+`
|
|
1773
|
-
`,stderr:``,exitCode:0}}async function
|
|
1768
|
+
`,stderr:``,exitCode:0}}async function JM(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=LM(await UM(t,s,o),await HM(e,a),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1774
1769
|
`)+`
|
|
1775
|
-
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=
|
|
1770
|
+
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=KM(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await WM(t,s,i),d=n(u);await e.writeFile(c,d)}for(let t of u.toDelete){let n=a+`/`+t;await e.rm(n)}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1776
1771
|
`)+`
|
|
1777
|
-
`,stderr:``,exitCode:0}}function
|
|
1772
|
+
`,stderr:``,exitCode:0}}function YM(e={}){let t=e.fs,n=e.getSendFsRequest??RM;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return VM();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
|
|
1778
1773
|
`,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
|
|
1779
|
-
`,exitCode:1};let i=
|
|
1774
|
+
`,exitCode:1};let i=zM(e);if(`error`in i)return i.error===`__help__`?VM():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await qM(t,r,i):await JM(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function XM(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
|
|
1780
1775
|
say --status | --warmup
|
|
1781
1776
|
|
|
1782
1777
|
Speaks the given text. Uses on-device Kokoro voices when the model
|
|
@@ -1795,14 +1790,14 @@ Examples:
|
|
|
1795
1790
|
[web speech] otherwise); kokoro voices lead when ready
|
|
1796
1791
|
--status Show the on-device voice state (downloading/ready + ETA)
|
|
1797
1792
|
--warmup Stage + start the on-device voice download in the background
|
|
1798
|
-
`,stderr:``,exitCode:0}}function
|
|
1793
|
+
`,stderr:``,exitCode:0}}function ZM(e){switch(e.state){case`ready`:return`voice engine: ready
|
|
1799
1794
|
`;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
|
|
1800
1795
|
`;case`idle`:return`voice engine: not downloaded (run say --warmup)
|
|
1801
|
-
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function q(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function
|
|
1796
|
+
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function q(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function QM(e){return e instanceof Error?e.message:String(e)}let $M=!1,eN=null;function tN(){return $M?Promise.resolve(speechSynthesis.getVoices()):(eN||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){$M=!0,e(t);return}let n=()=>{$M=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),$M=!0,e(speechSynthesis.getVoices())},1e3)}),eN)}const nN={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function rN(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function iN(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 aN(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 nN){let n=rN(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return q(`${i} requires ${nN[i]}`);let a=iN(t,i,n);if(a)return q(a)}else if(i.startsWith(`-`)&&i!==`--list`)return q(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function oN(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function sN(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>oN({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await tN()).map(e=>oN({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
|
|
1802
1797
|
`)+`
|
|
1803
|
-
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>
|
|
1798
|
+
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>oN(e)).join(`
|
|
1804
1799
|
`)+`
|
|
1805
|
-
`,stderr:``,exitCode:0}}catch(e){return q(
|
|
1800
|
+
`,stderr:``,exitCode:0}}catch(e){return q(QM(e))}}async function cN(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 tN()).map(e=>({name:e.name}));return[...n,...r]}async function lN(e,t){let n=(await cN(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:q(`voice "${t}" not found. Use --list to see available voices.`)}}async function uN(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:ZM(t?n():e()),stderr:``,exitCode:0}}return{stdout:ZM(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return q(QM(e))}}async function dN(e,t){return t.includes(`--list`)?sN(e):t.includes(`--status`)?uN(e,!1):t.includes(`--warmup`)?uN(e,!0):null}async function fN(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(`speech synthesis error: ${QM(e)}`)}}async function pN(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return q(QM(e))}}async function mN(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return q(QM(e))}}async function hN(e,t){try{let n=await e.panelRpc.call(`synthesize-to-wav`,{text:t.text,lang:t.lang,...t.voice?{voice:t.voice}:{},rate:t.rate},{timeoutMs:3e5});return{bytes:new Uint8Array(n.bytes)}}catch(e){return q(QM(e))}}async function gN(e,t){return e.local?mN(t):hN(e,t)}async function _N(e,t){let n=await gN(e,t);return`exitCode`in n?n:{...yi(n.bytes),stderr:``,exitCode:0}}async function vN(e,t,n,r){let i=await gN(e,r);if(`exitCode`in i)return i;let a=t.fs.resolvePath(t.cwd,n);try{await t.fs.writeFile(a,i.bytes)}catch(e){return q(`failed to write ${n}: ${QM(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function yN(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await lN(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&&!er(t)?_N(e,i):n.outFile?vN(e,t,n.outFile,i):e.local?fN(i):pN(e,i)}function bN(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return XM();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return q(`Web Speech API unavailable in this environment`);let r=await dN(n,e);if(r)return r;let i=aN(e);return`exitCode`in i?i:i.text?i.lang?yN(n,t,{...i,lang:i.lang}):q(`-l language tag is required`):XM()})}function xN(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-DXkhPPQJ.js`);return n(e,t)})}const SN=[`--domain`],CN=[`--persist`];function wN(){return`secret — manage secrets for the fetch proxy and mount backends
|
|
1806
1801
|
|
|
1807
1802
|
No approval (session-only, in-memory, never persisted):
|
|
1808
1803
|
secret set <name> <value> --domain <pat> Set a session secret. Free for a
|
|
@@ -1844,23 +1839,23 @@ Examples:
|
|
|
1844
1839
|
secret peek OPENAI_KEY
|
|
1845
1840
|
secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
|
|
1846
1841
|
secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
|
|
1847
|
-
`}function
|
|
1842
|
+
`}function TN(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 EN(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const DN={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},ON=new Set;function kN(e,t){if(e===t)return!0;try{return ft(e).test(t)}catch{return!1}}function AN(e,t){for(let n of e)if(kN(n,t))return!0;return!1}function jN(e){return{stdout:``,stderr:`${pt(`secret`,e)}\n`,exitCode:1}}function MN(e){let t=Oe(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??gm(t),i=e.grants??ON,a=e.broker,o=()=>(a??=ps(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(AN(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${DN[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&kN(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&At(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&At(t)&&e.unsetEnv(t)}}}function NN(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
|
|
1848
1843
|
`)?t.slice(0,-2):t.endsWith(`
|
|
1849
|
-
`)?t.slice(0,-1):t}async function
|
|
1850
|
-
`,exitCode:1};let a=r.positionals[1],o=
|
|
1844
|
+
`)?t.slice(0,-1):t}async function PN(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}):jN(i)}async function FN(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return jN(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 IN(e,t,n){let r=C(e.slice(1),{value:SN,bool:CN});if(`error`in r)return EN(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
|
|
1845
|
+
`,exitCode:1};let a=r.positionals[1],o=NN(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
|
|
1851
1846
|
`,exitCode:1};let s=a??o;if(s===void 0)return{stdout:``,stderr:`secret: set requires a <value>: secret set <name> <value> --domain <patterns> [--persist]
|
|
1852
1847
|
or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
|
|
1853
|
-
`,exitCode:1};let c=
|
|
1854
|
-
`,exitCode:1}}function
|
|
1855
|
-
`,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
|
|
1856
|
-
`,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
|
|
1857
|
-
`,exitCode:1};let i=
|
|
1858
|
-
`,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}):
|
|
1859
|
-
`,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
|
|
1860
|
-
`,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let{entries:o,warnings:s}=await t.backend.list(),c=o.find(e=>e.name===r);return c?
|
|
1848
|
+
`,exitCode:1};let c=TN(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?PN(i,s,c,n):FN(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
|
|
1849
|
+
`,exitCode:1}}function LN(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}async function RN(e,t){let[n,...r]=e.slice(1),i=e=>({stdout:e,stderr:``,exitCode:0});if(n===`set`){let e=C(r,{value:SN,bool:CN}),n=`error`in e?void 0:e.positionals[0];if(!n||!At(n))return i(``);let a=await t.backend.getMasked(n).catch(()=>null);return i(a?`export ${n}=${LN(a.maskedValue)}\n`:``)}if(n===`delete`||n===`rm`){let e=C(r,{}),t=`error`in e?void 0:e.positionals[0];return i(t&&At(t)?`unset ${t}\n`:``)}return i(``)}async function zN(e,t){let n=C(e.slice(1),{});if(`error`in n)return EN(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
|
|
1850
|
+
`,exitCode:1};let i=await t.backend.getMasked(r);return i?{stdout:`${i.name}=${i.maskedValue}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function BN(e,t){let n=C(e.slice(1),{});if(`error`in n)return EN(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
|
|
1851
|
+
`,exitCode:1};let i=await t.backend.peek(r);return i?{stdout:`${i.name}: ${i.preview}\n domains: ${i.domains.join(`, `)||`(none)`}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`secret: no secret named "${r}"\n`,exitCode:1}}async function VN(e,t){let n=C(e.slice(1),{value:SN});if(`error`in n)return EN(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
|
|
1852
|
+
`,exitCode:1};let i=TN(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
|
|
1853
|
+
`,exitCode:1};let a=await t.gate(`scope`,r);return a===`ok`?(await t.backend.setScope(r,i),{stdout:`Updated scope for "${r}" (domains: ${i.join(`, `)})\n`,stderr:``,exitCode:0}):jN(a)}async function HN(e,t){let n=C(e.slice(1),{});if(`error`in n)return EN(n.error);let{entries:r,warnings:i}=await t.backend.list(),a=i.map(e=>`secret: ${e}\n`).join(``),o=+(i.length>0);if(r.length===0)return{stdout:i.length>0?``:`No secrets stored
|
|
1854
|
+
`,stderr:a,exitCode:o};let s=Math.max(4,...r.map(e=>e.name.length)),c=`${`NAME`.padEnd(s)} TYPE DOMAINS\n`;for(let e of r){let t=e.persisted?`SAVED`:`SESSION`;c+=`${e.name.padEnd(s)} ${t.padEnd(7)} ${e.domains.join(`, `)}\n`}return{stdout:c,stderr:a,exitCode:o}}async function UN(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return EN(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 WN(e,t){let n=C(e.slice(1),{});if(`error`in n)return EN(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
|
|
1855
|
+
`,exitCode:1};let a;try{a=new URL(i).hostname}catch{return{stdout:``,stderr:`secret: invalid URL "${i}"\n`,exitCode:1}}let{entries:o,warnings:s}=await t.backend.list(),c=o.find(e=>e.name===r);return c?Ta(c.domains,a)?{stdout:`✓ ${r} is allowed for ${a}\n`,stderr:``,exitCode:0}:{stdout:`✗ ${r} is NOT allowed for ${a}\n Allowed domains: ${c.domains.join(`, `)}\n`,stderr:``,exitCode:1}:{stdout:``,stderr:s.length>0?s.map(e=>`secret: ${e}\n`).join(``):`secret: no secret named "${r}"\n`,exitCode:1}}async function GN(e,t){let n=C(e.slice(1),{});if(`error`in n)return EN(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
|
|
1861
1856
|
(changes are picked up on the next request — no restart needed)
|
|
1862
1857
|
`,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
|
|
1863
|
-
`,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function
|
|
1858
|
+
`,stderr:``,exitCode:0}}catch{let e=chrome.runtime.getURL(`secrets.html`);return window.open(e,`_blank`),{stdout:`Opened ${e}\n`,stderr:``,exitCode:0}}}async function KN(e,t,n){let r=e[0];switch(r){case`set`:return IN(e,t,n);case`get`:case`read`:return zN(e,n);case`shell-env`:return RN(e,n);case`peek`:return BN(e,n);case`scope`:return VN(e,n);case`list`:return HN(e,n);case`delete`:case`rm`:return UN(e,r,n);case`test`:return WN(e,n);case`edit`:return GN(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function qN(e={}){let t=MN(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:SN}))return{stdout:wN(),stderr:``,exitCode:0};try{return await KN(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function JN(){return null}function YN(){return null}function XN(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
|
|
1864
1859
|
serve --logs [<token>] [--lines <n>]
|
|
1865
1860
|
serve --truncate [<token>]
|
|
1866
1861
|
|
|
@@ -1896,28 +1891,28 @@ Limits and lifetime:
|
|
|
1896
1891
|
its TTL. Either can be removed sooner with \`serve --stop\`.
|
|
1897
1892
|
- <token> is the "Preview token" printed at mint time or the TOKEN column
|
|
1898
1893
|
of \`serve --list\`; \`--stop\` also accepts the preview URL.
|
|
1899
|
-
`,stderr:``,exitCode:0}}function
|
|
1900
|
-
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function
|
|
1894
|
+
`,stderr:``,exitCode:0}}function ZN(e){return`error`in e}function QN(e,t,n){if(e===`--list`)return n.list=!0,{skip:0};if(e===`--logs`||e===`--truncate`){let r=e===`--logs`?`logs`:`truncate`;return t&&!t.startsWith(`-`)?(n[r]=t,{skip:1}):(n[r]=!0,{skip:0})}if(e.startsWith(`--logs=`)||e.startsWith(`--truncate=`)){let t=e.startsWith(`--logs=`)?`logs`:`truncate`,r=e.slice(e.indexOf(`=`)+1);return r?(n[t]=r,{skip:0}):{error:`serve: missing value for --${t}\n`}}if(e===`--lines`||e.startsWith(`--lines=`)){let r=e===`--lines`?t:e.slice(8),i=r===void 0?NaN:Number(r);return!Number.isSafeInteger(i)||i<=0?{error:`serve: --lines must be a positive integer
|
|
1895
|
+
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function $N(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
|
|
1901
1896
|
`};let i=/^([1-9][0-9]*)([mhdw])$/.exec(r);if(!i)return{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
1902
1897
|
`};let a=Number(i[1])*{m:6e4,h:36e5,d:864e5,w:6048e5}[i[2]];return Number.isSafeInteger(a)?a>2592e6?{error:`serve: --ttl cannot exceed 30d; longer retention requires a Sliccy Deluxe De-Enshittification plan.
|
|
1903
1898
|
`}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
1904
|
-
`}}function
|
|
1899
|
+
`}}function eP(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function tP(e,t,n){let r=$N(e,t,n);if(r)return r;let i=eP(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
|
|
1905
1900
|
`};if(e.startsWith(`--entry=`))return n.entry=e.slice(8),{skip:0};if(e===`--stop`)return t?(n.stop=t,{skip:1}):{error:`serve: missing value for --stop
|
|
1906
|
-
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=
|
|
1901
|
+
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=QN(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
|
|
1907
1902
|
`};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
|
|
1908
1903
|
`}:(n.maxTabs=e,{skip:1})}if(e.startsWith(`--max-tabs=`)){let t=Number.parseInt(e.slice(11),10);return!Number.isFinite(t)||t<=0?{error:`serve: --max-tabs must be a positive integer
|
|
1909
1904
|
`}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
|
|
1910
|
-
`}:(n.directory=e,{skip:0})}function
|
|
1911
|
-
`,exitCode:1};if(n.webhookId){let e=await
|
|
1912
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
1913
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
1914
|
-
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(
|
|
1905
|
+
`}:(n.directory=e,{skip:0})}function nP(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=tP(e[n],e[n+1],t);if(ZN(r))return{...t,error:r.error};n+=r.skip}return t}async function rP(e,t,n,r){if(!br(t))return{stdout:``,stderr:`serve: invalid entry file: ${t}\n`,exitCode:1};let i=n.resolvePath(r,e),a;try{a=await n.stat(i)}catch{return{stdout:``,stderr:`serve: no such directory: ${e}\n`,exitCode:1}}if(!a.isDirectory)return{stdout:``,stderr:`serve: not a directory: ${e}\n`,exitCode:1};let o=Dr(i,t),s;try{s=await n.stat(o)}catch{return{stdout:``,stderr:`serve: entry file not found: ${o}\n`,exitCode:1}}return s.isFile?{fullDirectory:i,entryPath:o}:{stdout:``,stderr:`serve: entry is not a file: ${o}\n`,exitCode:1}}function iP(e){return`exitCode`in e}async function aP(e){let t=Ca(e)??e,n,r=YN();if(r)n=await r({type:`stop`,previewToken:t});else{let e=y();if(!e)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};n=await e.call(`tray-revoke-preview`,{previewToken:t})}if(!n.revoked)return{stdout:``,stderr:`serve: preview token not found or already revoked
|
|
1906
|
+
`,exitCode:1};if(n.webhookId){let e=await sy();if(!e)return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but the preview-bridge webhook could not be cleaned up (lick manager unavailable). It is a live endpoint — delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0};try{await e.deleteWebhook(n.webhookId)}catch(e){return{stdout:`Preview revoked: ${t}\n`,stderr:`serve: preview revoked, but webhook cleanup failed: ${e instanceof Error?e.message:String(e)}. Delete it with \`webhook delete ${n.webhookId}\`.\n`,exitCode:0}}}return{stdout:`Preview revoked: ${t}\n`,stderr:``,exitCode:0}}async function oP(){let e=YN();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
|
|
1907
|
+
`,stderr:``,exitCode:0}:{stdout:cP(t),stderr:``,exitCode:0}}let t=y();if(!t)return{stdout:``,stderr:"serve: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};let n=(await t.call(`tray-list-previews`,void 0)).previews??[];return n.length===0?{stdout:`No active previews
|
|
1908
|
+
`,stderr:``,exitCode:0}:{stdout:cP(n),stderr:``,exitCode:0}}function sP(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function cP(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${sP(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function lP(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 uP(e){let t,n=YN();if(n)t=(await n({type:`logs`,previewToken:e.previewToken})).lifecycleRecords??[];else{let n=y();if(!n)return{stdout:``,stderr:"serve --logs: no leader tray available. Enable multi-browser sync via `host enable` or the avatar popover.\n",exitCode:1};t=(await n.call(`tray-preview-logs`,{previewToken:e.previewToken})).lifecycleRecords}return e.lines!==void 0&&(t=t.slice(-e.lines)),t.length===0?{stdout:`No preview lifecycle records. The recorder is leader-memory-only and resets on leader restart.
|
|
1909
|
+
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(lP).join(``)}`,stderr:``,exitCode:0}}async function dP(e){let t,n,r=YN();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 fP(e,t){let n=[],r=0;for await(let i of e.walk(t)){if(n.length>=1e3)throw Error(`persistent preview exceeds 1000 file limit`);let a=await e.readFile(i,{encoding:`binary`}),o=typeof a==`string`?new TextEncoder().encode(a):a,s=i.slice(t===`/`?1:t.length+1);if(o.byteLength>26214400)throw Error(`preview file exceeds 25 MiB limit: ${s}`);if(r+=o.byteLength,r>52428800)throw Error(`persistent preview exceeds 50 MiB total limit`);n.push({path:s,content:o,mime:fr(s)})}return n}function pP(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function mP(e){let t=JN();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 hP(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 sy();if(!n)return{ok:!1,result:{stdout:``,stderr:`${t}serve: --bridge requires an active lick manager\n`,exitCode:1}};try{return{ok:!0,webhookId:(await n.createWebhook(`preview-bridge`)).id}}catch(e){return{ok:!1,result:{stdout:``,stderr:`${t}serve: webhook creation failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}}async function _P(e,t,n,r,i,a,o){let s;try{s=await mP({entryPath:n,servedRoot:t,bridge:e.bridge,noBridge:e.ttlMs!==void 0||e.noBridge,maxTabs:e.maxTabs,quiet:e.quiet,webhookId:r,ttlMs:e.ttlMs,snapshotFiles:a})}catch(e){if(r){let e=await sy();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await hP(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 vP(e){if(e.stop){let t=e.stop;return pP(()=>aP(t))}if(e.list)return pP(()=>oP());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
|
|
1915
1910
|
`,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
|
|
1916
|
-
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return
|
|
1911
|
+
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return pP(()=>uP({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return pP(()=>dP(t))}}function yP(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
|
|
1917
1912
|
`,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
|
|
1918
|
-
`,exitCode:1}}async function
|
|
1919
|
-
`:``,f=await
|
|
1920
|
-
`;function
|
|
1913
|
+
`,exitCode:1}}async function bP(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return fP(t,n)}}async function xP(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return XN();let i=nP(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await vP(i);if(a)return a;if(!i.directory)return XN();let o=yP(i);if(o)return o;let s=await rP(i.directory,i.entry,t.fs,t.cwd);if(iP(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await bP(i,r,c)}catch(e){return{stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let d=i.project?`serve: --project is obsolete; ignored (root-absolute paths work natively under unified preview)
|
|
1914
|
+
`:``,f=await gP(!i.noBridge&&i.bridge,d);return f.ok?_P(i,c,l,f.webhookId,d,u,n):f.result}function SP(e,t){return S(`serve`,(n,r)=>xP(n,r,e,t))}const CP=`usage: session export [--id <id>] [--output <path>]
|
|
1915
|
+
`;function wP(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 TP(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${CP}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${CP}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${CP}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${CP}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${CP}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${CP}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function EP(e){let t=[],n=0;for await(let r of e.chunks)t.push(r),n+=r.byteLength;let r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.byteLength;let a=await e.completion;if(a.byteLength!==n||Et(r)!==a.sha256)throw new Aa(`transfer-corrupt`);return r}async function DP(e,t){let n=TP(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=wP(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${CP}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await _s().export(a,{}),n=await EP(e),r=i??`/workspace/${e.filename}`;return await t.fs.writeFile(r,n),{stdout:`exported ${r}\n`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`session export: ${e instanceof Aa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function OP(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return DP(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-DUB-rTlJ.js`);return n(e,t,CP)})}function kP(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-BRFnmkzR.js`);return await n(e,t)})}const AP=`leader`;function jP(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function MP(e){return+!!e.leader+e.followers.length}function NP(){return{stdout:`usage: sprinkle <subcommand> [args]
|
|
1921
1916
|
|
|
1922
1917
|
list [--runtime <id>] List sprinkles + an instance line per runtime
|
|
1923
1918
|
open <name> Open a sprinkle by name
|
|
@@ -1935,22 +1930,22 @@ Limits and lifetime:
|
|
|
1935
1930
|
chat <html> Show inline HTML in chat (Tool UI)
|
|
1936
1931
|
Use data-action="name" on buttons for callbacks
|
|
1937
1932
|
Pipe HTML: echo "<div>...</div>" | sprinkle chat
|
|
1938
|
-
`,stderr:``,exitCode:0}}function
|
|
1933
|
+
`,stderr:``,exitCode:0}}function PP(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function FP(){return[AP,...re().map(e=>e.runtimeId)]}function IP(e){return`unknown runtime "${e}"\nknown runtimes: ${FP().join(`, `)}\nRun \`host\` to see connected followers.`}async function LP(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
|
|
1939
1934
|
`,exitCode:1};let r=await Pe({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
|
|
1940
1935
|
`,exitCode:1}:{stdout:JSON.stringify(r)+`
|
|
1941
|
-
`,stderr:``,exitCode:0}}function
|
|
1942
|
-
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=
|
|
1936
|
+
`,stderr:``,exitCode:0}}function RP(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function zP(e){return[...e.map(e=>({name:e,runtimeId:AP})),...jP()]}async function BP(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&&!FP().includes(r))return J(`list`,IP(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
|
|
1937
|
+
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=zP([...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(...RP(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
|
|
1943
1938
|
`)+`
|
|
1944
|
-
`,stderr:``,exitCode:0}}function
|
|
1939
|
+
`,stderr:``,exitCode:0}}function VP(e,t){return!t||Fo(e)?null:(Io(e,t),Fo(e)===t?t:null)}async function HP(e,t,n){let r=C(t.slice(1),{});if(`error`in r)return J(`open`,r.error);let i=r.positionals[0];if(!i)return J(`open`,`name required`);let a=ta(void 0,n),o=VP(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&Lo(i),J(`open`,e instanceof Error?e.message:String(e))}return{stdout:`Sprinkle "${i}" opened${o?`; licks route to "${o}"`:``}.\n`,stderr:``,exitCode:0}}function UP(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 WP(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 GP(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 KP(e){let t=C(e.slice(1),{value:[`--scoop`],bool:[`--clear`]});if(`error`in t)return J(`route`,t.error);let n=t.positionals[0];if(!n){let e=Ro(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
|
|
1945
1940
|
`,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
|
|
1946
1941
|
route for follower-forwarded licks too):
|
|
1947
1942
|
`+t.map(([e,t])=>` ${e} -> ${t}`).join(`
|
|
1948
1943
|
`)+`
|
|
1949
|
-
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return
|
|
1950
|
-
`,exitCode:1};switch(n){case`list`:return
|
|
1951
|
-
`,stderr:``,exitCode:0}}function
|
|
1952
|
-
`)}\n`:``}async function
|
|
1953
|
-
`)?e:`${e}\n`,exitCode:1}}function
|
|
1944
|
+
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Lo(n),{stdout:`Route cleared for sprinkle "${n}" (licks will go to cone).\n`,stderr:``,exitCode:0};let r=t.values.get(`--scoop`);if(!r){let e=Fo(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Io(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function qP(e){let t=[];return e.leader&&t.push(AP),t.push(...e.followers),t.join(`, `)}async function JP(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&&!FP().includes(o))return J(`send`,IP(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`,IP(s.unknownRuntime));let c=MP(s);return c===0?J(`send`,o?`"${r}" is not open on runtime "${o}" — nothing was delivered`:`"${r}" is not open on the leader or any connected follower — nothing was delivered`):{stdout:`Data sent to sprinkle "${r}" — ${c} instance${c===1?``:`s`} (${qP(s)}).\n`,stderr:``,exitCode:0}}function YP(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return NP();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:ot(`sprinkle`,n,NP().stdout),stderr:``,exitCode:0};if(n===`chat`)return LP(at(e),t);let r=PP();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
|
|
1945
|
+
`,exitCode:1};switch(n){case`list`:return BP(r,e);case`open`:return HP(r,e,t.env);case`close`:return UP(r,e);case`reload`:return WP(r,e);case`refresh`:return GP(r,e);case`route`:return KP(e);case`send`:return JP(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function XP(){return{stdout:`usage: sqlite3 [database] [sql]
|
|
1946
|
+
`,stderr:``,exitCode:0}}function ZP(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 QP(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function $P(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function eF(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function tF(e){let t=e.flatMap(e=>e.values.map(e=>e.map(yr).join(`|`)));return t.length>0?`${t.join(`
|
|
1947
|
+
`)}\n`:``}async function nF(e,t,n){let r=await Er(),i=QP(e,n),a=await $P(r,i,n),o=a.exec(t);return await eF(a,i,n),a.close(),tF(o)}function rF(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function iF(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return XP();let{database:r,sql:i}=ZP(t,n);if(!i)return rF(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await nF(r,i,n),stderr:``,exitCode:0}}catch(t){return rF(e,t)}})}function aF(e){return{stdout:``,stderr:e.endsWith(`
|
|
1948
|
+
`)?e:`${e}\n`,exitCode:1}}function oF(){return{stdout:`ssh - run a command on a connected tray follower
|
|
1954
1949
|
|
|
1955
1950
|
Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
|
|
1956
1951
|
ssh --list
|
|
@@ -1973,11 +1968,11 @@ Examples:
|
|
|
1973
1968
|
ssh --list
|
|
1974
1969
|
ssh follower-abc123 "uname -a"
|
|
1975
1970
|
ssh --cwd /tmp follower-abc123 "ls -la"
|
|
1976
|
-
`,stderr:``,exitCode:0}}function
|
|
1971
|
+
`,stderr:``,exitCode:0}}function sF(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
|
|
1977
1972
|
Start one with: slicc <join-url> follow sh -c
|
|
1978
1973
|
`;let n=[`exec targets:`];for(let e of t){let t=[e.runtimeId];e.runtime&&t.push(`(${e.runtime})`),n.push(` - ${t.join(` `)}`),e.motd&&n.push(` ${e.motd}`),e.computerMotd&&n.push(` ${e.computerMotd}`)}return`${n.join(`
|
|
1979
|
-
`)}\n`}function
|
|
1980
|
-
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return
|
|
1974
|
+
`)}\n`}function cF(e){if(e.stdin===void 0)return;let n=_i(e.stdin);if(n.length===0)return;let r=new Uint8Array(n.length);for(let e=0;e<n.length;e++)r[e]=n.charCodeAt(e)&255;return t(r)}function lF(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 uF(){return S(`ssh`,async(e,t)=>{let n=lF(e);if(`help`in n)return oF();if(`error`in n)return aF(n.error);if(n.list||n.runtimeId===void 0)return{stdout:sF(re()),stderr:``,exitCode:0};if(!n.command)return aF(`ssh: missing command
|
|
1975
|
+
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return aF(`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:cF(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 aF(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function dF(e){return{stdout:``,stderr:`${pt(`sudo`,e)}\n`,exitCode:77}}function fF(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...]
|
|
1981
1976
|
`,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
|
|
1982
1977
|
|
|
1983
1978
|
Request human approval to run <command> with elevation. If approved, the
|
|
@@ -1994,14 +1989,14 @@ Options:
|
|
|
1994
1989
|
-h, --help Show this help message and exit.
|
|
1995
1990
|
`,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
|
|
1996
1991
|
`,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
|
|
1997
|
-
`,exitCode:1};let a
|
|
1998
|
-
`,exitCode:1};let i=await Promise.all(r.map(e=>
|
|
1999
|
-
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>
|
|
2000
|
-
`,exitCode:1};let a=await Promise.all(i.map(e=>
|
|
2001
|
-
`,stderr:``,exitCode:0}}function
|
|
2002
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
2003
|
-
`);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let a=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(a,{recursive:!0});let o=[],s=[],c=[],l=[];for(let e of i){let n=
|
|
2004
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
1992
|
+
`,exitCode:1};let a=$p(e[0],e.slice(1)),o=i.env?.get(nm),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return dF(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 pF(e){let t=e instanceof Error?e.message:String(e);return/ENOENT|no such file/i.test(t)?`No such file or directory`:/ENOTEMPTY|not empty/i.test(t)?`Directory not empty`:t.replace(/^\w+:\s*/,``)}async function mF(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function hF(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 mF(e,r);return i.isDirectory&&!i.isSymbolicLink&&!n.recursive?{stdout:``,stderr:`rm: cannot remove '${t}': Is a directory\n`}:(await e.fs.rm(r,{recursive:n.recursive,force:n.force}),{stdout:n.verbose?`removed '${t}'\n`:``,stderr:``})}catch(e){return{stdout:``,stderr:n.force?``:`rm: cannot remove '${t}': ${pF(e)}\n`}}}function _F(){return S(`rm`,async(e,t)=>{let n={recursive:hF(e,`r`)||hF(e,`R`)||e.includes(`--recursive`),force:hF(e,`f`)||e.includes(`--force`),verbose:hF(e,`v`)||e.includes(`--verbose`)},r=e.filter(e=>!e.startsWith(`-`));if(r.length===0)return n.force?{stdout:``,stderr:``,exitCode:0}:{stdout:``,stderr:`rm: missing operand
|
|
1993
|
+
`,exitCode:1};let i=await Promise.all(r.map(e=>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 vF(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 yF(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 bF(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await mF(e,r);return{stdout:n.format?`${vF(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=yF(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
|
|
1994
|
+
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>bF(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 SF(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function CF(e,t,n,r){let i=e.fs.resolvePath(`/`,t).split(`/`).filter(Boolean),a=e.fs.resolvePath(e.cwd,t),o=``;for(let s=0;s<i.length;s++){try{let t=await mF(e,a);if(!t.isDirectory||t.isSymbolicLink)throw Error(`Not a directory`);await e.fs.rm(a,{recursive:!1,force:!1}),r&&(o+=`rmdir: removing directory, '${a}'\n`)}catch(e){return{stdout:o,stderr:`rmdir: failed to remove '${t}': ${pF(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=SF(a)}return{stdout:o,stderr:``}}function wF(){return S(`rmdir`,async(e,t)=>{let n=e.some(e=>e===`-p`||e===`--parents`),r=e.some(e=>e===`-v`||e===`--verbose`),i=e.filter(e=>!e.startsWith(`-`));if(i.length===0)return{stdout:``,stderr:`rmdir: missing operand
|
|
1995
|
+
`,exitCode:1};let a=await Promise.all(i.map(e=>CF(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 TF(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
|
|
1996
|
+
`,stderr:``,exitCode:0}}function EF(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function DF(e,t){if(e.mode)return EF(`exactly one of -c, -x, or -t is required`);e.mode=t}function OF(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const kF={c:`create`,x:`extract`,t:`list`};function AF(e,t,n,r,i){let a=kF[e];if(a)return{nextIndex:r,error:DF(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:EF(`unsupported option -${e}`)};let o=OF(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:EF(`option -${e} requires an argument`)}}function jF(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=AF(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const MF=/^[cxtzvfC]+$/;function NF(e){let t=e.length>0&&MF.test(e[0])?[`-${e[0]}`,...e.slice(1)]:e,n={gzip:!1,verbose:!1,directory:`.`,paths:[]};for(let e=0;e<t.length;e++){let r=t[e];if(!r.startsWith(`-`)||r===`-`){n.paths.push(r);continue}if(r.startsWith(`--`))return EF(`unsupported option ${r}`);let i=jF(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function PF(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):vr(t)}function FF(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function IF(e,t,n,r){let i=await e.fs.stat(t);if(i.isFile){let a=await e.fs.readFileBuffer(t),o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:n,bytes:a,...o===void 0?{}:{mode:o},...FF(i)});return}if(!i.isDirectory)throw Error(`unsupported file type: ${t}`);let a=n.endsWith(`/`)?n:`${n}/`,o=typeof i.mode==`number`?i.mode&511:void 0;r.push({path:a,bytes:new Uint8Array,directory:!0,...o===void 0?{}:{mode:o},...FF(i)});for(let n of await e.fs.readdir(t))await IF(e,_r(t,n),`${a}${n}`,r)}function LF(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?ua(e):e;return la(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function RF(e,t,n){let r=n.replace(/\\/g,`/`);if(!r||r.startsWith(`/`)||/^[a-zA-Z]:\//.test(r)||r.split(`/`).includes(`..`))return;let i=e.fs.resolvePath(t,r);return Tr(t,i)?i:void 0}async function zF(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function BF(e,t,n,r){let i=new Map(t),a=new Map(n),o=[...new Set([...i.keys(),...a.keys()])];if(o.length===0)return;let s=o.map(e=>{let t=i.get(e),n=a.get(e),r=n===void 0?void 0:new Date(n*1e3);return{path:e,...t===void 0?{}:{mode:t},...r===void 0?{}:{atime:r,mtime:r}}});if(typeof r?.updateMetadataBatch==`function`){await zF(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await zF(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await zF(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await zF(()=>c.utimes(e,n,n))}}async function VF(e,t,n,r,i){let a=n.directory?493:420,o=n.mode===a&&await e.fs.exists(t),s=n.mode!==void 0&&(n.mode!==a||o);if(n.directory){await e.fs.mkdir(t,{recursive:!0}),s&&r.push([t,n.mode]);return}let c=Sr(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function HF(e,t){if(e.paths.length===0)return EF(`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 IF(t,e,PF(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=sa(n);return await t.fs.writeFile(i,e.gzip?ca(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
|
|
1997
|
+
`)}\n`:``,stderr:``,exitCode:0}}function UF(e){let t=new Set,n=[];for(let r=e.length-1;r>=0;r--){let[i,a]=e[r];t.has(i)||(t.add(i),n.push([i,a]))}return n}async function WF(e,t,n){if(e.paths.length>0)return EF(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=LF(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
|
|
1998
|
+
`);return{stdout:e?`${e}\n`:``,stderr:``,exitCode:0}}let a=t.fs.resolvePath(t.cwd,e.directory);await t.fs.mkdir(a,{recursive:!0});let o=[],s=[],c=[],l=[];for(let e of i){let n=RF(t,a,e.path);if(!n)return EF(`blocked suspicious path ${e.path}`);await VF(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await BF(t,[...UF(s),...UF(c)],UF(l),n),{stdout:e.verbose?`${o.join(`
|
|
1999
|
+
`)}\n`:``,stderr:``,exitCode:0}}function GF(e={}){return S(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return TF();let r=NF(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?EF(`-C is only supported in create or extract mode`):r.mode===`create`?HF(r,n):WF(r,n,e.fs):EF(`option -f requires an archive path`):EF(`exactly one of -c, -x, or -t is required`)})}var KF=`/**
|
|
2005
2000
|
* Standalone assertions - no dependency on test runner
|
|
2006
2001
|
*
|
|
2007
2002
|
* Each assertion:
|
|
@@ -2189,7 +2184,7 @@ function sameMembers(a, b) {
|
|
|
2189
2184
|
}
|
|
2190
2185
|
|
|
2191
2186
|
const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
|
|
2192
|
-
`,
|
|
2187
|
+
`,qF=`/**
|
|
2193
2188
|
* tst - minimal test runner
|
|
2194
2189
|
*
|
|
2195
2190
|
* - Standalone assertions (assert.js works anywhere)
|
|
@@ -2819,7 +2814,7 @@ function scheduleAutoRun() {
|
|
|
2819
2814
|
scheduleAutoRun()
|
|
2820
2815
|
|
|
2821
2816
|
export * from './assert.js'
|
|
2822
|
-
`;function
|
|
2817
|
+
`;function JF(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 YF=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
|
|
2823
2818
|
|
|
2824
2819
|
Usage:
|
|
2825
2820
|
tsc [options] [files...]
|
|
@@ -2839,32 +2834,32 @@ Notes:
|
|
|
2839
2834
|
|
|
2840
2835
|
Install:
|
|
2841
2836
|
Inert until the backing package is installed in node_modules:
|
|
2842
|
-
${
|
|
2837
|
+
${wr}
|
|
2843
2838
|
Then \`tsc --version\` and the transpile commands above. There is no
|
|
2844
2839
|
bundled binary, no CDN fallback; a missing package exits non-zero
|
|
2845
2840
|
with a clear \`ipk add\` hint.
|
|
2846
|
-
`;function
|
|
2847
|
-
`);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
|
|
2848
|
-
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function
|
|
2841
|
+
`;function XF(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 ZF(e,t){let n=`${vr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${Sr(e)}/${n}`}async function QF(e,t){let n=t||`/`,r=``;for(;n&&n!==r;){let t=n===`/`?`/tsconfig.json`:`${n}/tsconfig.json`;if(await e.exists(t))return t;r=n,n=Sr(n)}return null}function $F(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function eI(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function tI(e,t,n){let r=$F(t),i=await QF(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,...eI(o)}}}function nI(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
|
|
2842
|
+
`);if(t.file&&typeof t.start==`number`){let{line:e,character:r}=t.file.getLineAndCharacterOfPosition(t.start);return`${t.file.fileName}(${e+1},${r+1}): error TS${t.code}: ${n}`}return`error TS${t.code}: ${n}`}function rI(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 iI(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function aI(e,t,n,r){let{outputText:i,diagnostics:a}=iI(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>nI(e,t)),s=o.length>0?`${o.join(`
|
|
2843
|
+
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function oI(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}}rI(e,a);let{outputText:s,diagnostics:c}=iI(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${nI(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,ZF(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 sI(e,t){let n;try{n=XF(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:YF,stderr:``,exitCode:0}};let r;try{r=await hr(JF(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 cI(){return S(`tsc`,async(e,t)=>{let n=await sI(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await tI(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?aI(i,r,a,e):{stdout:YF,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await oI(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const lI=[`**/*.test.{js,ts}`];function uI(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 dI(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=uI(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=dI(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:[...lI],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function pI(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 pI(`${r}${e}${i}`))o.push(t);return o}function mI(e){let t=``,n=0;for(;n<e.length;){let r=e[n];r===`*`&&e[n+1]===`*`?(t+=`(?:.*/)?`,n+=2,e[n]===`/`&&(n+=1)):r===`*`?(t+=`[^/]*`,n+=1):r===`?`?(t+=`[^/]`,n+=1):`.+^$()[]|\\`.includes(r)?(t+=`\\${r}`,n+=1):(t+=r,n+=1)}return RegExp(`^${t}$`)}async function hI(e,t,n){let r=n.flatMap(pI).map(mI),i=new Set,a=t===`/`?``:t;async function o(t){let n;try{n=await e.readdir(t)}catch{return}for(let s of n){if(s===`node_modules`||s.startsWith(`.`))continue;let n=t===`/`?`/${s}`:`${t}/${s}`,c=!1;try{c=(await e.stat(n)).isDirectory}catch{continue}if(c){await o(n);continue}let l=n.startsWith(`${a}/`)?n.slice(a.length+1):n;r.some(e=>e.test(l))&&i.add(n)}}return await o(t),[...i].sort()}let gI=null;async function _I(e){if(gI)return gI;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return gI=`
|
|
2849
2844
|
if (typeof process !== 'undefined' && !process.versions) {
|
|
2850
2845
|
try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
|
|
2851
2846
|
}
|
|
2852
2847
|
const __tst_assert_exports = (function () {
|
|
2853
2848
|
const module = { exports: {} };
|
|
2854
2849
|
const exports = module.exports;
|
|
2855
|
-
${e.transpileModule(
|
|
2850
|
+
${e.transpileModule(KF,{compilerOptions:t,fileName:`assert.js`}).outputText}
|
|
2856
2851
|
return module.exports;
|
|
2857
2852
|
})();
|
|
2858
2853
|
const __tst_module_exports = (function () {
|
|
2859
2854
|
const module = { exports: {} };
|
|
2860
2855
|
const exports = module.exports;
|
|
2861
|
-
${e.transpileModule(
|
|
2856
|
+
${e.transpileModule(qF,{compilerOptions:t,fileName:`tst.js`}).outputText.replace(/require\(["']\.\/assert\.js["']\)/g,`__tst_assert_exports`).replace(/\bimport\.meta\b/g,`({url:""})`).replace(/await\s+import\(['"](?:worker_threads|fs|path)['"]\)/g,`await Promise.reject(new Error("tst: fork mode is not supported in the realm"))`)}
|
|
2862
2857
|
return module.exports;
|
|
2863
2858
|
})();
|
|
2864
2859
|
const __tst = __tst_module_exports.default || __tst_module_exports;
|
|
2865
2860
|
__tst.manual = true;
|
|
2866
|
-
`.trim(),
|
|
2867
|
-
`)}}`,d=
|
|
2861
|
+
`.trim(),gI}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 yI(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 bI(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 xI(e,t,n,r,i,a){let o=new Map,s=new Map,c=[{path:n,cjs:r}];for(;c.length>0;){let{path:n,cjs:r}=c.shift(),l=Sr(n),u=new Map;for(let n of yI(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await bI(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 SI(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(`,
|
|
2862
|
+
`)}}`,d=vI(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
|
|
2868
2863
|
${f}${e}
|
|
2869
2864
|
const __realmRequire = require;
|
|
2870
2865
|
const { createRequire: __createRequire } = __realmRequire("module");
|
|
@@ -2907,7 +2902,7 @@ await Promise.resolve();
|
|
|
2907
2902
|
await new Promise((resolve) => setTimeout(resolve));
|
|
2908
2903
|
${p}
|
|
2909
2904
|
if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
|
|
2910
|
-
`}const
|
|
2905
|
+
`}const CI={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function wI(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...CI}}async function TI(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
|
|
2911
2906
|
|
|
2912
2907
|
Usage:
|
|
2913
2908
|
tst [options] [glob...]
|
|
@@ -2929,7 +2924,7 @@ Notes:
|
|
|
2929
2924
|
with statement counters. nyc/c8 cannot wrap this runner: it is not a
|
|
2930
2925
|
Node child. Istanbul/Babel are not bundled (webapp size-limit); the
|
|
2931
2926
|
TypeScript AST already in process does the rewrite.
|
|
2932
|
-
`,stderr:``,exitCode:0}};let r=await
|
|
2927
|
+
`,stderr:``,exitCode:0}};let r=await hI(t.fs,t.cwd,n.globs);if(r.length===0)return{done:{stdout:``,stderr:`tst: no test files matched ${n.globs.join(` `)}\n`,exitCode:1}};let i;try{i=await hr(JF(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await _I(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:wI(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function EI(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function DI(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 xI(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=SI(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await ai(m,[`node`,n],e,void 0,{filename:n}),g=h.stdout;if(c){let e=c.extractCoverageCounts(g);g=e.stdout,c.mergeCounts(t.coverageCounts,e.counts)}return{stdout:r?`# ${n}\n${g}`:g,stderr:h.stderr,failed:h.exitCode!==0||EI(g)}}function OI(){return S(`tst`,async(e,t)=>{let n=await TI(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 DI(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 kI=[],AI=`usage: theme <subcommand> [args]
|
|
2933
2928
|
|
|
2934
2929
|
Subcommands:
|
|
2935
2930
|
list List available preset and custom themes
|
|
@@ -2938,23 +2933,23 @@ Subcommands:
|
|
|
2938
2933
|
reset Reset to the default theme
|
|
2939
2934
|
current Show the currently active theme
|
|
2940
2935
|
export <id> <path> Export a theme to a VFS path
|
|
2941
|
-
`;function
|
|
2942
|
-
`),stderr:``,exitCode:0}}async function
|
|
2943
|
-
`,stderr:``,exitCode:0}}async function
|
|
2936
|
+
`;function jI(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function MI(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:AI,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:kI})?{stdout:ot(`theme`,n,AI),stderr:``,exitCode:0}:n===`list`?NI(e):n===`current`?PI(e):n===`reset`?FI(e):n===`apply`?II(e.slice(1),t):n===`export`?LI(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${AI}`,exitCode:1}})}async function NI(e){let t=C(e.slice(1),{value:kI});if(`error`in t)return jI(`list`,t.error);let{PRESETS:n}=await import(`./theme-presets-xiOb9AFN.js`),r=[`Presets:`];for(let e of n)r.push(` ${e.id.padEnd(16)} ${e.name}`);return r.push(``),{stdout:r.join(`
|
|
2937
|
+
`),stderr:``,exitCode:0}}async function PI(e){let t=C(e.slice(1),{value:kI});return`error`in t?jI(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
|
|
2938
|
+
`,stderr:``,exitCode:0}}async function FI(e){let t=C(e.slice(1),{value:kI});if(`error`in t)return jI(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
|
|
2944
2939
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
2945
|
-
`,exitCode:1}}async function
|
|
2940
|
+
`,exitCode:1}}async function II(e,t){let n=C(e,{value:kI});if(`error`in n)return jI(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
|
|
2946
2941
|
`,exitCode:1};let r=y();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
2947
2942
|
`,exitCode:1};let i=n.positionals[0],{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===i);if(o){let e=JSON.stringify(o);return await r.call(`theme-apply`,{themeJson:e,action:`apply`}),{stdout:`Applied theme: ${o.name}\n`,stderr:``,exitCode:0}}let s=t.fs.resolvePath(t.cwd,i),c;try{c=await t.fs.readFile(s)}catch{return{stdout:``,stderr:`theme apply: "${i}" is not a known preset id and file not found at ${s}\n`,exitCode:1}}try{let e=JSON.parse(c);if(!e.id||!e.name||!e.base||!e.tokens)return{stdout:``,stderr:`theme apply: invalid theme file (missing id, name, base, or tokens)
|
|
2948
2943
|
`,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
|
|
2949
|
-
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function
|
|
2950
|
-
`,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
|
|
2951
|
-
`),stderr:``,exitCode:0}}function
|
|
2944
|
+
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function LI(e,t){let n=C(e,{value:kI});if(`error`in n)return jI(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
|
|
2945
|
+
`,exitCode:1};let[r,i]=n.positionals,{PRESETS:a}=await import(`./theme-presets-xiOb9AFN.js`),o=a.find(e=>e.id===r);if(!o)return{stdout:``,stderr:`theme export: unknown preset id "${r}"\n`,exitCode:1};let s=t.fs.resolvePath(t.cwd,i);try{await t.fs.writeFile(s,JSON.stringify(o,null,2))}catch(e){return{stdout:``,stderr:`theme export: write failed: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return{stdout:`Exported "${o.name}" to ${s}\n`,stderr:``,exitCode:0}}const RI=`unknown`,zI=`usage: uname [-amnorsv]`,BI=[`s`,`n`,`r`,`v`,`m`,`o`];function VI(){return{stdout:[zI,` -s kernel name (SLICC) -n nodename (leader/follower/standalone)`,` -r release (SLICC version) -v build stamp`,` -m machine (realm platform) -o operating system (user agent)`,` -a all of the above, in uname order`,``].join(`
|
|
2946
|
+
`),stderr:``,exitCode:0}}function HI(){let{releasedAt:e,buildId:t}=$e();return e?`${t} (${e})`:t}function UI(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:RI}function WI(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:RI}function GI(e){switch(e){case`s`:return`SLICC`;case`n`:return Qe();case`r`:return $e().version;case`v`:return HI();case`m`:return UI();case`o`:return WI()}}function KI(e){return{stdout:``,stderr:`uname: ${e}\n${zI}\n`,exitCode:1}}function qI(e){let t=new Set;for(let n of e){if(!n.startsWith(`-`)||n===`-`)return{error:`extra operand '${n}'`};if(n.startsWith(`--`))return{error:`unrecognized option '${n}'`};for(let e of n.slice(1)){if(e===`a`){for(let e of BI)t.add(e);continue}if(!BI.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function JI(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return VI();let t=qI(e);return`error`in t?KI(t.error):{stdout:`${(t.size>0?BI.filter(e=>t.has(e)):[`s`]).map(GI).join(` `)}\n`,stderr:``,exitCode:0}})}function YI(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
|
|
2952
2947
|
Remove FILE. Symbolic links are removed without following their target.
|
|
2953
2948
|
`,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
|
|
2954
2949
|
`:`unlink: extra operand
|
|
2955
|
-
`,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
|
|
2956
|
-
`,stderr:``,exitCode:0}}function
|
|
2957
|
-
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function
|
|
2950
|
+
`,exitCode:1};let n=t.fs.resolvePath(t.cwd,e[0]);try{let r=t.fs.lstat?await t.fs.lstat(n):await t.fs.stat(n);return r.isDirectory&&!r.isSymbolicLink?{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': Is a directory\n`,exitCode:1}:(await t.fs.rm(n,{recursive:!1,force:!1}),{stdout:``,stderr:``,exitCode:0})}catch(t){let n=t instanceof Error?t.message:String(t);return{stdout:``,stderr:`unlink: cannot unlink '${e[0]}': ${n}\n`,exitCode:1}}})}function XI(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
|
|
2951
|
+
`,stderr:``,exitCode:0}}function ZI(e){let t=`.`,n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i===`-d`){t=e[r+1]??``,r++;continue}if(i.startsWith(`-`))return{kind:`error`,result:{stdout:``,stderr:`unzip: unsupported option ${i}\n`,exitCode:1}};n.push(i)}return n.length<1?{kind:`error`,result:{stdout:``,stderr:`unzip: expected archive path
|
|
2952
|
+
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function QI(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!Tr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=Sr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function $I(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return XI();let n=ZI(e);if(n.kind===`error`)return n.result;let r=t.fs.resolvePath(t.cwd,n.archive),i=t.fs.resolvePath(t.cwd,n.destination);await t.fs.mkdir(i,{recursive:!0});let a=await t.fs.readFileBuffer(r),o=Dt(a),s=0;for(let[e,n]of Object.entries(o)){let r=await QI(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 eL=`ai-ecoverse/slicc`,tL=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,nL=`packages/vfs-root`,rL=3e4,iL=[`${nL}/workspace/skills/`,`${nL}/shared/sprinkles/`,`${nL}/shared/sounds/`,`${nL}/shared/GELATIERE.md`,`${nL}/shared/wiki/WIKI.md`,`${nL}/etc/`],aL=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function oL(){return Object.fromEntries(aL.map(e=>[e,0]))}function sL(e,t,n,r){let i=oL();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 cL(e){if(e[0]!==`apply`)throw Error(tL);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 lL(e){return e.startsWith(`v`)?e:`v${e}`}function uL(e){if(!iL.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)||t.startsWith(`/workspace/skills/`)&&he()?null:t}async function dL(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 ${rL}ms`)),rL)})])}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 dL(t,`https://api.github.com/repos/${eL}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=be(n.body);if(r.truncated)throw Error(`bundled file discovery was truncated for ${e}`);if(!Array.isArray(r.tree))throw Error(`invalid bundled file discovery response for ${e}`);let i=new Map;for(let e of r.tree){if(e.type!==`blob`||typeof e.path!=`string`)continue;let t=uL(e.path);t&&i.set(t,e.path)}return i}function pL(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${eL}/${encodeURIComponent(e)}/${n}`}function mL(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function hL(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function gL(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 _L(e,t,n,r,i){let a=`${t}.upgrade-${lL(n)}-to-${lL(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 gL(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:mL(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(mL(i,a)||mL(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(mL(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(hL);if(c!==null&&l!==null&&u!==null){let i=ze(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${lL(n)}:${t}`,other:`${lL(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 _L(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await _L(e.fs,t,n,r,o)}}async function yL(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function bL(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 gL(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 yL(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 xL(e,t,n){let r=lL(t),i=lL(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)?dL(e.fetch,pL(r,a.get(t))).then(e=>Se(e.body)):void 0,o.has(t)?dL(e.fetch,pL(i,o.get(t))).then(e=>Se(e.body)):void 0]);return{path:t,base:n,theirs:s}})),l=new Set(s),u=[];for(let{path:r,base:i,theirs:a}of c)u.push(await vL(e,r,t,n,i,a,l));return await bL(e.fs,u),u}async function SL(e){let{version:t,releasedAt:n,buildId:r}=$e(),i=[],a=null,o=e.getLastSeen??et();if(!o)i.push(`last-seen version unavailable: no reader registered in this runtime`);else try{a=await o()}catch(e){i.push(`last-seen version unavailable: ${e instanceof Error?e.message:String(e)}`)}let s=a!==null&&a!==t;return`${JSON.stringify({ok:i.length===0,version:t,releasedAt:n,build:r,lastSeen:a,mergePending:s,...s?{apply:`upgrade apply --from=${a} --to=${t}`}:{},errors:i})}\n`}function CL(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${tL}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:sL(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await SL(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=cL(t));let i=await xL(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:sL(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:sL(n,r,[],[t]),stderr:``,exitCode:1}}})}const wL=`usage: uptime [-p|--pretty] [-s|--since]`,TL=`${wL}
|
|
2958
2953
|
|
|
2959
2954
|
Print how long this SLICC has been running. The clock starts when the browser
|
|
2960
2955
|
window was last loaded — a reload is a reboot.
|
|
@@ -2970,7 +2965,7 @@ The load average is the average number of live kernel processes over the last
|
|
|
2970
2965
|
processes are retained in bounded numbers, so a long burst of short commands
|
|
2971
2966
|
can under-report the older windows. The user count is always 1: a SLICC
|
|
2972
2967
|
runtime has one user identity (see \`id\`).
|
|
2973
|
-
`,
|
|
2968
|
+
`,EL=[1,5,15],DL=6e4,OL=60*DL,kL=24*OL;function AL(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function jL(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 ML(e){let t=Math.max(0,e),n=Math.floor(t/kL),r=Math.floor(t%kL/OL),i=Math.floor(t%OL/DL),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function NL(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/kL),`day`),r(Math.floor(t%kL/OL),`hour`),r(Math.floor(t%OL/DL),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function PL(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 FL(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function IL(e,t,n){let r=EL.map(r=>jL(e,t,r*DL,n).toFixed(2));return` ${FL(t)} up ${ML(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function LL(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 RL(e={}){return S(`uptime`,async t=>{let n=LL(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${wL}\n`,exitCode:1};if(n===`help`)return{stdout:TL,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${$e().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():xa();if(n===`since`)return zL(`${PL(i)}\n`);if(n===`pretty`)return zL(`${NL(r-i)}\n`);let a=e.processManager??AL();return zL(IL(a?a.list():[],r,i))})}function zL(e){return{stdout:e,stderr:``,exitCode:0}}const BL=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function VL(e){return jn(e,BL)}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 HL(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 UL=new Set([`standard`,`class`,`vendor`]),WL=new Set([`device`,`interface`,`endpoint`,`other`]);function GL(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!UL.has(t))throw Error(`invalid --request-type: '${t}'`);if(!WL.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 KL(e){let t=_i(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function qL(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function JL(e){return`0x${e.toString(16).padStart(4,`0`)}`}function YL(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${JL(e.vendorId)}:${JL(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 XL=`usb - access USB devices via WebUSB
|
|
2974
2969
|
|
|
2975
2970
|
Usage: usb <subcommand> [options]
|
|
2976
2971
|
|
|
@@ -3008,12 +3003,12 @@ Options:
|
|
|
3008
3003
|
(bridged waits time out after 5 minutes and drop the waiter)
|
|
3009
3004
|
-h, --help
|
|
3010
3005
|
|
|
3011
|
-
Transfers are capped at ${
|
|
3012
|
-
`;function
|
|
3013
|
-
`):X(`${t.map(
|
|
3014
|
-
`)}\n`)}async function
|
|
3006
|
+
Transfers are capped at ${gi} bytes (4 MiB).
|
|
3007
|
+
`;function ZL(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return X(t)}return X(e.length?`${qL(e)}\n`:``)}async function QL(e){let t=await e.list();return t.length===0?X(`no granted USB devices
|
|
3008
|
+
`):X(`${t.map(YL).join(`
|
|
3009
|
+
`)}\n`)}async function $L(e,t){let n=e.get(`--__resolved`);if(n)return X(`${YL(await t.info(n))}\n`);let r=HL(e),i=je();if(i){let e=await Ax(`usb-device`,r,i);if(e.handle)return X(`${YL(await t.info(e.handle))}\n`);let n=e.info,a=mi();if(!a)return Z(`request: WebUSB unavailable for device re-acquire`);let o=(await a.getDevices()).find(e=>e.vendorId===n.vendorId&&e.productId===n.productId&&(!n.serialNumber||e.serialNumber===n.serialNumber));if(!o)return Z(`request: granted device could not be re-acquired`);let s=hi().register(o);return X(`${YL(pi(s,o))}\n`)}return X(`${YL(await t.request(r))}\n`)}async function eR(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 tR(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 nR(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 rR(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 iR(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`):ZL((await n.controlIn(i,GL(t),o)).bytes,r)}async function aR(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=KL(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,GL(n),a)).bytesWritten} bytes written\n`)}async function oR(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`):ZL((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function sR(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=KL(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 cR(e,t,n){let{positionals:r,flags:i,bools:a}=VL(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return QL(n);case`request`:return $L(i,n);case`open`:case`close`:case`reset`:return eR(o,r,n,a);case`clear-halt`:return tR(r,n);case`select-config`:return nR(r,n);case`claim`:case`release`:return rR(o,r,n,a);case`control-in`:return iR(r,i,n,s);case`control-out`:return aR(r,t,i,n);case`transfer-in`:return oR(r,i,n,s);case`transfer-out`:return sR(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function lR(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(XL);let n=Yr(de(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await cR(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 uR=`/workspace/.v86`,dR=`v86 - run an x86 virtual machine (v86 wasm engine)
|
|
3015
3010
|
|
|
3016
|
-
Requires: ${N} v86@${
|
|
3011
|
+
Requires: ${N} v86@${gO}
|
|
3017
3012
|
|
|
3018
3013
|
Usage:
|
|
3019
3014
|
v86 start [boot options] Boot a VM in the background (prints pid)
|
|
@@ -3047,7 +3042,7 @@ Boot options (QEMU-flavored):
|
|
|
3047
3042
|
proxy — no gateway needed, https upstream via the proxy
|
|
3048
3043
|
-vga <MiB> SVGA/VBE video memory (default 8, max 64) —
|
|
3049
3044
|
raise for high-res VESA modes (1080p32 needs ~9)
|
|
3050
|
-
-bios <path> -vgabios <path> BIOS blobs (default ${
|
|
3045
|
+
-bios <path> -vgabios <path> BIOS blobs (default ${uR}/{seabios,vgabios}.bin)
|
|
3051
3046
|
-nographic Serial-only guest (skip VGA)
|
|
3052
3047
|
|
|
3053
3048
|
Notes:
|
|
@@ -3055,19 +3050,19 @@ Notes:
|
|
|
3055
3050
|
(Alpine, FreeDOS, Buildroot Linux) work best.
|
|
3056
3051
|
- The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
|
|
3057
3052
|
- BIOS blobs are not bundled; download once:
|
|
3058
|
-
mkdir -p ${
|
|
3059
|
-
curl -o ${
|
|
3060
|
-
curl -o ${
|
|
3061
|
-
`,
|
|
3062
|
-
mkdir -p ${
|
|
3063
|
-
curl -o ${
|
|
3064
|
-
curl -o ${
|
|
3065
|
-
or pass -bios / -vgabios with explicit VFS paths.`,
|
|
3053
|
+
mkdir -p ${uR}
|
|
3054
|
+
curl -o ${uR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3055
|
+
curl -o ${uR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3056
|
+
`,fR=`v86: BIOS images not found. Download them once:
|
|
3057
|
+
mkdir -p ${uR}
|
|
3058
|
+
curl -o ${uR}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3059
|
+
curl -o ${uR}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3060
|
+
or pass -bios / -vgabios with explicit VFS paths.`,pR={"-n":mR,"-name":mR,"--name":mR,"-m":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-m requires a positive MiB value`:n>512?`-m ${n} exceeds the 512 MiB cap`:(e.memoryMib=n,null)},"-vga":(e,t)=>{let n=Number.parseInt(t,10);return!Number.isFinite(n)||n<=0?`-vga requires a positive MiB value`:n>64?`-vga ${n} exceeds the 64 MiB cap`:(e.vgaMemoryMib=n,null)},"-cdrom":(e,t)=>hR(e,`cdrom`,t),"-hda":(e,t)=>hR(e,`hda`,t),"-fda":(e,t)=>hR(e,`fda`,t),"-kernel":(e,t)=>hR(e,`kernel`,t),"-initrd":(e,t)=>hR(e,`initrd`,t),"-append":(e,t)=>hR(e,`append`,t),"-bios":(e,t)=>hR(e,`bios`,t),"-vgabios":(e,t)=>hR(e,`vgabios`,t),"-state":(e,t)=>hR(e,`state`,t),"-fs9p":(e,t)=>/^https?:\/\//u.test(t)?(e.fs9p=t,null):`-fs9p requires an http(s) base URL`,"-net":(e,t)=>{let[n,...r]=t.split(`,`);if(n!==`ne2k`&&n!==`virtio`)return`-net requires ne2k or virtio`;for(let t of r){if(t!==`relay=fetch`)return`-net: unknown option '${t}' (only relay=fetch)`;e.netRelay=`fetch`}return e.net=n,null},"-boot":(e,t)=>t!==`a`&&t!==`c`&&t!==`d`?`-boot requires a, c, or d`:(e.boot=t,null)};function mR(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function hR(e,t,n){return e[t]=n,null}const gR=[...Object.keys(pR),`--fps`,`--tail`,`--send`,`--to`];function _R(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(pR,r)?pR[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 yR(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 bR(e){return ha(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function xR(e){return`exitCode`in e}async function SR(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 CR={a:801,c:306,d:531};function wR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function TR(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(dR);if(t[0]===`--version`)return ER(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:gR}))return $(ot(`v86`,r,dR,{prefix:`v86`}));let i=at(t.slice(1));try{switch(r){case`start`:return await MR(i,n,e);case`ls`:return PR();case`type`:return await RR(i,n);case`key`:return await zR(i,n);case`mouse`:return await VR(i,n);case`screenshot`:return await HR(i,n);case`text`:return await UR(i,n);case`serve`:return WR(i);case`serial`:return GR(i);case`state`:return await KR(i,n);case`stop`:return await qR(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function ER(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(vR(e))).version} (qemu-flavored CLI)\n`);let n=await SO(vR(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(_O)}async function DR(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await SR(t,e.bios??`${uR}/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 SR(t,e.vgabios??`${uR}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(fR.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function OR(e,t,n){let r=await DR(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 SR(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=CR[e.boot]),e.state){let r=await SR(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 kR=6e4;function AR(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${kR/1e3}s`)),kR);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function jR(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??g();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function MR(e,t,n){let r=_R(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(ha(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=vR(t),o=n.loadEngine?await n.loadEngine(a):await yO({ipk:a}),s={wasm_fn:wO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await OR(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??wR();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`,()=>{NR(u,d)})}ma(u);try{if(await AR(l),i.netRelay===`fetch`){let e=jR(l,n);if(e)return await NR(u,d),e}pa(u),await l.run()}catch(e){return await NR(u,d),Q(`boot failed: ${e instanceof Error?e.message:String(e)}`)}u.onScreenChange=()=>{import(`./registry-DfuJBCKY.js`).then(({getComputerRegistry:e})=>{e()?.refresh(`v86:${u.name}`)})},import(`./v86-DKE8ZbX9.js`).then(({registerV86Computer:e})=>e(u)).catch(()=>{});let f=u.pid===null?``:` (pid ${u.pid})`;return $(`VM '${i.name}' booting in the background${f}.\nDrive it with: v86 text -n ${i.name} | v86 screenshot -n ${i.name} | v86 type -n ${i.name} "..."\n`)}async function NR(e,t){ga(e),fa(e.name),import(`./v86-DKE8ZbX9.js`).then(({unregisterV86Computer:t})=>t(e.name)).catch(()=>{});try{e.emulator.is_running()&&await e.emulator.stop()}catch{}try{await e.emulator.destroy()}catch{}t&&e.pid!==null&&t.exit(e.pid,null)}function PR(){let e=da();if(e.length===0)return $(`no VMs running
|
|
3066
3061
|
`);let t=[`NAME PID STATE UP BOOT`];for(let n of e){let e=Math.round((Date.now()-n.startedAt)/1e3),r=e>=60?`${Math.floor(e/60)}m${e%60}s`:`${e}s`;t.push(`${n.name.padEnd(10)} ${String(n.pid??`-`).padEnd(6)} ${(n.emulator.is_running()?`running`:`stopped`).padEnd(9)} ${r.padEnd(9)} `+n.bootArgv.slice(2).join(` `))}return $(`${t.join(`
|
|
3067
|
-
`)}\n`)}function
|
|
3062
|
+
`)}\n`)}function FR(e,t){return`prefer: computer ${e} -c ${t}\n`}async function IR(e,t,n,r){let i=bR(t);if(xR(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-CnfMQAT6.js`).then(e=>e.t),import(`./registry-DfuJBCKY.js`),import(`./v86-DKE8ZbX9.js`)]),l=c.v86ComputerId(t),u=o()??s(null);return u.get(l)||c.registerV86Computer(i,u),LR(await a([`-c`,l,...n],e,{registry:u}),r,l)}function LR(e,t,n){let r=FR(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 RR(e,t){let{name:n,rest:r}=yR(e);if(r.length===0){let e=bR(n);return xR(e)?e:Q(`type: no text supplied`)}return IR(t,n,[`type`,`--`,...r],`type`)}async function zR(e,t){let{name:n,rest:r}=yR(e);if(r.length===0){let e=bR(n);return xR(e)?e:Q(`key: no chord supplied`)}return IR(t,n,[`key`,...r],`key`)}const BR=[`left`,`middle`,`right`];async function VR(e,t){let{name:n,rest:r}=yR(e),i=bR(n);if(xR(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?IR(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>`):IR(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!BR.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),IR(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function HR(e,t){let{name:n,rest:r}=yR(e);return IR(t,n,[`screenshot`,...r],`screenshot`)}async function UR(e,t){let{name:n}=yR(e);return IR(t,n,[`text`],`text`)}function WR(e){let{name:t}=yR(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function GR(e){let{name:t,rest:n}=yR(e),r=bR(t);if(xR(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
|
|
3068
3063
|
`);return e?(r.emulator.serial0_send(e),$()):Q(`serial: --send requires text`)}let a=n.indexOf(`--tail`);if(a!==-1){let e=Number.parseInt(n[a+1]??`25`,10);return $(`${r.serial.buffer.split(`
|
|
3069
3064
|
`).slice(-Math.max(1,e)).join(`
|
|
3070
|
-
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function
|
|
3065
|
+
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function KR(e,t){let{name:n,rest:r}=yR(e),i=bR(n);if(xR(i))return i;let[a,o]=r;if(a!==`save`&&a!==`load`||!o)return Q(`state: expected save|load <file>`);let s=t.fs.resolvePath(t.cwd,o);if(a===`save`){let e=await i.emulator.save_state();return await t.fs.writeFile(s,new Uint8Array(e)),$(`${s} (${e.byteLength} bytes)\n`)}if(!await t.fs.exists(s))return Q(`state: no such file: ${o}`);let c=await t.fs.readFileBuffer(s),l=new ArrayBuffer(c.byteLength);return new Uint8Array(l).set(c),await i.emulator.restore_state(l),$()}async function qR(e,t){let{name:n,rest:r}=yR(e),i=bR(n);if(xR(i))return i;let a=t.processManager??wR();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await NR(i,a),$(`VM '${n}' stopped\n`))}function JR(e={}){return S(`wasm`,async(t,n)=>{let{runWasmCommand:r}=await import(`./run-Ccyk_j1M.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}const YR=[`--name`,`--filter`,`--scoop`],XR={state:`inactive`,session:null};function ZR(){return{stdout:`usage: webhook <command> [options]
|
|
3071
3066
|
|
|
3072
3067
|
Commands:
|
|
3073
3068
|
create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
|
|
@@ -3087,21 +3082,21 @@ Examples:
|
|
|
3087
3082
|
webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
|
|
3088
3083
|
webhook list
|
|
3089
3084
|
webhook delete abc123
|
|
3090
|
-
`,stderr:``,exitCode:0}}function
|
|
3085
|
+
`,stderr:``,exitCode:0}}function QR(e){return e().session?.webhookUrl??null}function $R(e,t,n){return t?_a(t,e):n()?va(self.location.href,e):`(URL unavailable — connect a leader tray)`}function ez(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function tz(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
|
|
3091
3086
|
`,exitCode:1};let t=y();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
|
|
3092
3087
|
`,exitCode:1};try{return await t.call(`tray-webhook-rotate`,void 0),{stdout:`Rotated webhook delivery secret. Old URLs no longer work; run webhook list for replacement URLs.
|
|
3093
3088
|
`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
|
|
3094
|
-
`,exitCode:1}}}async function
|
|
3095
|
-
`,exitCode:1};let s=
|
|
3096
|
-
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=
|
|
3089
|
+
`,exitCode:1}}}async function nz(e,t,n){let r=C(e.slice(1),{value:YR});if(`error`in r)return{stdout:``,stderr:`webhook create: ${r.error}\n`,exitCode:1};let i=r.values.get(`--name`)??`default`,a=r.values.get(`--filter`),o=ta(r.values.get(`--scoop`),n);if(!t.hasLocalNodeServer()&&a)return{stdout:``,stderr:`webhook create: --filter is not supported in extension mode (CSP forbids dynamic eval) — drop --filter, or use standalone CLI mode
|
|
3090
|
+
`,exitCode:1};let s=az(t);if(s)return s;let c=await sy();if(!c)return ez(`create`);let l=await ly(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=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 rz(e,t){let n=C(e.slice(1),{});if(`error`in n)return{stdout:``,stderr:`webhook list: ${n.error}\n`,exitCode:1};let r=await sy();if(!r)return ez(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
|
|
3091
|
+
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=sz(t);return{stdout:cz(i.map(e=>({id:e.id,name:e.name,url:$R(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function iz(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
|
|
3097
3092
|
`,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
|
|
3098
|
-
`,exitCode:1};let i=await
|
|
3099
|
-
`,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
|
|
3100
|
-
`,exitCode:1}}return null}function
|
|
3093
|
+
`,exitCode:1};let i=await sy();if(!i)return ez(`delete`);let a=y();try{if(a){if((await a.call(`tray-webhook-revoke`,{webhookId:r}))?.ok!==!0)throw Error(`revocation not acknowledged`)}else if(t.getLeaderStatus().session?.webhookUrl?.includes(`/wh/`))throw Error(`no leader panel`)}catch{return{stdout:``,stderr:`webhook delete: revocation failed; registration retained, reconnect the leader and retry
|
|
3094
|
+
`,exitCode:1}}return await i.deleteWebhook(r)?{stdout:`Deleted webhook "${r}"\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`webhook delete: webhook "${r}" not found\n`,exitCode:1}}function az(e){if(e.hasLocalNodeServer())return null;if(!QR(e.getLeaderStatus)){let t=e.getLeaderStatus().state;return{stdout:``,stderr:(t===`leader`?`webhook create: tray session is not connected yet — wait for the leader to attach`:`webhook create: requires extension-leader mode with a tray worker URL configured (current state: "${t}")`)+`
|
|
3095
|
+
`,exitCode:1}}return null}function oz(e,t){try{return $R(e,QR(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function sz(e){try{return{trayUrlBase:QR(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function cz(e,t,n,r){let i=`Active webhooks:
|
|
3101
3096
|
`;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
|
|
3102
3097
|
`;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
|
|
3103
3098
|
Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
|
|
3104
|
-
`),i}function
|
|
3099
|
+
`),i}function lz(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>XR)};return S(`webhook`,async(e,n)=>{if(e.length===0)return ZR();let r=e[0];if(w(e,{valueFlags:r===`create`?YR:void 0}))return ZR();try{switch(r){case`create`:return await nz(e,t,n.env);case`list`:return await rz(e,t);case`delete`:return await iz(e,t);case`rotate`:return await tz(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 uz(){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 dz(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
|
|
3105
3100
|
|
|
3106
3101
|
Minimal websocat client. Sends stdin lines as WebSocket messages and prints
|
|
3107
3102
|
received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
|
|
@@ -3143,14 +3138,14 @@ EXAMPLES:
|
|
|
3143
3138
|
echo 'Page.navigate {"url":"https://example.com"}' \\
|
|
3144
3139
|
| websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
|
|
3145
3140
|
ws://127.0.0.1:9222/devtools/page/<id>
|
|
3146
|
-
`,stderr:``,exitCode:0}}const
|
|
3147
|
-
`)}function
|
|
3148
|
-
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function
|
|
3141
|
+
`,stderr:``,exitCode:0}}const fz=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 pz(e,t,n,r){let i=e[t].indexOf(`=`);if(i!==-1&&e[t].startsWith(n))return{value:e[t].slice(i+1),next:t};let a=e[t+1];return a===void 0?(r.error=`websocat: missing value for ${n}\n`,null):{value:a,next:t+1}}function mz(e,t,n,r=`positive integer`){let i=Number(t);return!Number.isFinite(i)||i<=0?(e.error=`websocat: ${n} expects ${r}\n`,null):i}function hz(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 gz(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 _z(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function vz(e,t,n,r,i){let a=pz(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function yz(e,t,n,r,i,a,o){let s=pz(t,n,r,e);if(!s)return{stop:!0};let c=mz(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function bz(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const xz=[(e,t,n,r)=>{if(!bz(r,[`--close-status-code`]))return null;let i=pz(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=hz(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>bz(r,[`--close-reason`])?vz(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>bz(r,[`-B`,`--buffer-size`])?yz(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>bz(r,[`--max-messages`])?yz(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>bz(r,[`--protocol`])?vz(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!bz(r,[`--ping-interval`]))return null;let i=pz(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>bz(r,[`--conn-timeout`])?yz(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>bz(r,[`-H`,`--header`])?vz(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function Sz(e,t,n,r){for(let i of xz){let a=i(e,t,n,r);if(a)return a}return null}function Cz(e){e.closeReason!==void 0&&e.closeStatus===void 0&&(e.error=`websocat: --close-reason requires --close-status-code (the WebSocket close frame cannot carry a reason without a status code)
|
|
3142
|
+
`)}function wz(e){let t=uz();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(fz.has(r)||fz.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(gz(t,r)||_z(t,r))continue;let i=Sz(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 Cz(t),t}function Tz(e,t){if(!e)return[];let n=t?`\0`:`
|
|
3143
|
+
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function Ez(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 Dz(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function Oz(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 kz=1e4;function Az(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function jz(){let e=!1,t=Az();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function Mz(e,t){return e.length?e.join(t)+t:``}function Nz(e){return e.length?e.join(`
|
|
3149
3144
|
`)+`
|
|
3150
|
-
`:``}function
|
|
3151
|
-
`,a=
|
|
3152
|
-
`);if(!/^wss?:\/\//i.test(r.url))return
|
|
3153
|
-
`,exitCode:1}}function
|
|
3145
|
+
`:``}function Pz(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function Fz(e,t){e.verbose<1||(e.customHeaders.length>0&&Pz(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&&Pz(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&Pz(e,t,`-k/--insecure has no effect in browsers`))}function Iz(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 Lz(e,t,n,r){if(n.outLines.length<kz){n.outLines.push(r);return}n.droppedForOverflow===0&&Pz(e,t,`output buffer reached ${kz} 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 Rz(e,n,r){let{bytes:i,isBinary:a}=Oz(r);return i.length>e.bufferSize&&(Pz(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):Dz(i)}function zz(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function Bz(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function Vz(e,t){setTimeout(()=>{Bz(t,e.closeStatus??1e3,e.closeReason)},0)}function Hz(e,t,n){let r=Tz(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=Ez(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function Uz(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&Vz(t,e)}async function Wz(e,t,n){let r=[];Fz(e,r);let i=e.nullTerminated?`\0`:`
|
|
3146
|
+
`,a=Iz(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=Az(),u=jz(),d=0,f=!1,p=setTimeout(()=>{f=!0,Bz(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}Bz(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=Rz(e,r,t.data);Lz(e,r,s,n)}s.received+=1,zz(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(Pz(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&&Pz(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:Mz(s.outLines,i),stderr:Nz(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&Vz(e,o):Uz(o,e,Hz(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&Pz(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:Mz(s.outLines,i),stderr:Nz(r),exitCode:h}}function Gz(e){return{stdout:``,stderr:e,exitCode:2}}function Kz(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function qz(e,t,n={}){let r=wz(e);if(r.showHelp)return dz();if(r.error)return Gz(r.error);if(!r.url)return Gz(`websocat: missing ws:// or wss:// URL (use --help for usage)
|
|
3147
|
+
`);if(!/^wss?:\/\//i.test(r.url))return Gz(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=Kz(n);return i?Wz(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
|
|
3148
|
+
`,exitCode:1}}function Jz(){return S(`websocat`,async(e,t)=>qz(e,{stdin:P(t.stdin)}))}function Yz(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const Xz={commands:new Map,collisions:[]};async function Zz(e,t){let n=or(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?lr(e.fs,n):Xz}async function Qz(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?bi(e.fs):new Map}async function $z(e){return e.scriptCatalog?e.scriptCatalog.getWasmCommands():new Map}function eB(e,t){let n=e.script?`script`:`wasm`;return`${e.glue} (${n}, ${e.pkg}${t?`, ${t}`:``})`}function tB(e,{jshPath:t,collision:n,wasm:r,wf:i}){let a=[`/usr/bin/${e}`];if((t||r||i)&&a.push(` (shadowed by built-in ${e})`),r&&a.push(` (shadowed ${eB(r)})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)a.push(` (shadowed ${t})`)}return a}function nB(e,{collision:t,wasm:n,wf:r}){let i=[e];for(let e of t?.shadowedPaths??[])i.push(` (shadowed ${e})`);return n&&i.push(` ${eB(n,`shadowed by .jsh`)}`),r&&i.push(` ${r.path} (workflow, shadowed by .jsh)`),i}function rB(e,t,n,r,i){let{jshPath:a,wasm:o,wf:s}=t;if(n.has(e))return{lines:tB(e,t),found:!0};if(a)return{lines:nB(a,t),found:!0};if(o){let e=[eB(o)];return s&&e.push(` ${s.path} (workflow, shadowed by wasm)`),{lines:e,found:!0}}return s?{lines:[`${s.path} (workflow)`],found:!0}:r.has(e)&&!i.has(e)?{lines:[`/usr/bin/${e}`],found:!0}:{lines:[],found:!1}}function iB(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
|
|
3154
3149
|
|
|
3155
3150
|
Usage: which <command> [command...]
|
|
3156
3151
|
|
|
@@ -3162,9 +3157,9 @@ Prints the path of the given command(s).
|
|
|
3162
3157
|
|
|
3163
3158
|
Exit code 0 if all commands found, 1 if any not found.
|
|
3164
3159
|
`,stderr:``,exitCode:0};let r=C(e,{});if(`error`in r)return{stdout:``,stderr:`which: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return{stdout:``,stderr:`which: missing argument
|
|
3165
|
-
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await
|
|
3160
|
+
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await Zz(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await Qz(t),u=await $z(t),d=typeof t.getStaticBuiltins==`function`?new Set(t.getStaticBuiltins()):a,f=new Set(t.getScriptRegisteredNames?.()??[]),p=[],m=!0;for(let e of r.positionals){let t=rB(e,{jshPath:s.get(e),collision:c.get(e),wasm:u.get(e),wf:l.get(e)},d,a,f);p.push(...t.lines),t.found||(m=!1)}return{stdout:p.length>0?p.join(`
|
|
3166
3161
|
`)+`
|
|
3167
|
-
`:``,stderr:``,exitCode:+!m}})}const
|
|
3162
|
+
`:``,stderr:``,exitCode:+!m}})}const aB=`__slicc_workflows`,oB=String.raw`
|
|
3168
3163
|
class WorkflowError extends Error {}
|
|
3169
3164
|
class WorkflowDeterminismError extends WorkflowError {}
|
|
3170
3165
|
class WorkflowAgentCapError extends WorkflowError {}
|
|
@@ -3222,6 +3217,12 @@ async function agent(prompt, opts) {
|
|
|
3222
3217
|
if (opts.model) flags.push('--model', String(opts.model));
|
|
3223
3218
|
if (opts.thinking) flags.push('--thinking', String(opts.thinking));
|
|
3224
3219
|
if (opts.schema) flags.push('--schema-b64', __b64(JSON.stringify(opts.schema)));
|
|
3220
|
+
if (opts.minimal) flags.push('--minimal');
|
|
3221
|
+
if (opts.systemPrompt != null && opts.systemPrompt !== '') flags.push('--system-prompt=' + String(opts.systemPrompt));
|
|
3222
|
+
if (opts.tools) flags.push('--tools', String(opts.tools));
|
|
3223
|
+
if (opts.resume && opts.session) flags.push('--resume', String(opts.session));
|
|
3224
|
+
else if (opts.session) flags.push('--session', String(opts.session));
|
|
3225
|
+
if (opts.usage || opts.session || opts.resume) flags.push('--usage');
|
|
3225
3226
|
// No --read-only: the flag is pure-replace, so naming '/workspace/' here
|
|
3226
3227
|
// would override the command's owner-relative default and hand a workflow
|
|
3227
3228
|
// agent running under an extra cone the primary cone's files (#2271).
|
|
@@ -3277,40 +3278,40 @@ function log(message) {
|
|
|
3277
3278
|
}
|
|
3278
3279
|
const budget = { total: (__WF.budget == null ? null : __WF.budget), spent() { return 0; }, remaining() { return this.total == null ? Infinity : Math.max(0, this.total - this.spent()); } };
|
|
3279
3280
|
function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
|
|
3280
|
-
`;function
|
|
3281
|
+
`;function sB(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function cB(e){let t=fB(e);return t===null?{name:null,description:null}:{name:pB(t,`name`),description:pB(t,`description`)}}function lB(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function uB(e){return`const __emit = console.log.bind(console);
|
|
3281
3282
|
const __stringify = JSON.stringify.bind(JSON);
|
|
3282
|
-
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${
|
|
3283
|
+
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${lB(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function dB(e,t){let n=e.split(`
|
|
3283
3284
|
`);for(let e=n.length-1;e>=0;e--)if(n[e].startsWith(t)){let r=[...n.slice(0,e),...n.slice(e+1)].join(`
|
|
3284
|
-
`).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function
|
|
3285
|
+
`).replace(/\n+$/,``);try{return{result:JSON.parse(n[e].slice(t.length)),log:r,hadResult:!0}}catch{return{result:null,log:r,hadResult:!0}}}return{result:null,log:e.replace(/\n+$/,``),hadResult:!1}}function fB(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 pB(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const mB=e(`workflow-command`),hB=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
|
|
3285
3286
|
workflow run --script '<inline js>' [...]
|
|
3286
3287
|
workflow list
|
|
3287
3288
|
workflow status <runId>
|
|
3288
3289
|
workflow stop <runId>
|
|
3289
3290
|
workflow save <runId> <name> [--force]
|
|
3290
3291
|
Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
|
|
3291
|
-
pass --wait to block and print the full result.`,
|
|
3292
|
-
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return
|
|
3292
|
+
pass --wait to block and print the full result.`,gB=new Set([`list`,`status`,`stop`,`save`]);function _B(){return globalThis[aB]}function vB(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function yB(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 bB(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=vB(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=yB(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 xB(e={}){return S(`workflow`,async(t,n)=>{if(gB.has(t[0])&&w(t.slice(1)))return{stdout:hB+`
|
|
3293
|
+
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return DB(t,n);if(t[0]===`save`)return EB(t,n,e);let r=bB(t);if(r.help)return{stdout:hB+`
|
|
3293
3294
|
`,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
|
|
3294
|
-
`,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=
|
|
3295
|
-
`,exitCode:1};let s=
|
|
3296
|
-
`,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
|
|
3297
|
-
`,exitCode:1};if(!
|
|
3295
|
+
`,exitCode:1};let i,a;if(r.script!==void 0)i=r.script,a=`<workflow>`;else{let e=n.fs.resolvePath(n.cwd,r.file);if(!await n.fs.exists(e))return{stdout:``,stderr:`workflow: file not found: ${r.file}\n`,exitCode:1};i=await n.fs.readFile(e),a=r.file}let o=cB(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
|
|
3296
|
+
`,exitCode:1};let s=sB().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=sB(),u=uB({prelude:oB,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?SB(u,a,l,o,n):CB({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function SB(e,t,n,r,i){let a;try{a=await ai(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 OB(r,a,n)}async function CB(e){let t=_B();if(!t)return{stdout:``,stderr:`workflow: run manager not available
|
|
3297
|
+
`,exitCode:1};let n=e.options.getParentJid?.(),{runId:r}=await t.start({code:e.code,source:e.source,name:e.name,filename:e.filename,parentJid:n,ctx:e.ctx,sentinel:e.sentinel,runId:e.runId});return{stdout:`▶ workflow '${e.name}' started (run ${r}). Watch: workflow status ${r}\n`,stderr:``,exitCode:0}}const wB=/^[a-z0-9][a-z0-9-]*$/,TB=`/workspace/.workflows`;async function EB(e,t,n){let r=!1,i=[];for(let t of e.slice(1))t===`--force`?r=!0:i.push(t);let[a,o,...s]=i;if(!a||!o||s.length>0)return{stdout:``,stderr:`usage: workflow save <runId> <name> [--force]
|
|
3298
|
+
`,exitCode:1};if(!wB.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=_B()?.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=`${TB}/${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(TB,{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 DB(e,t){let n=_B();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
|
|
3298
3299
|
`,exitCode:1};let e=n.listRuns().map(e=>`${e.id} ${e.status.padEnd(7)} ${e.agentsDone}/${e.agentsStarted} ${e.name??``}`);return{stdout:(e.length?e.join(`
|
|
3299
3300
|
`):`(no runs)`)+`
|
|
3300
3301
|
`,stderr:``,exitCode:0}}let r=e[1],i=n?.getRun(r??``);if(!i)return{stdout:``,stderr:`workflow: no run '${r}'\n`,exitCode:1};if(e[0]===`status`)return{stdout:[`run ${i.id} (${i.name??`unnamed`}) status=${i.status}`,`agents ${i.agentsDone}/${i.agentsStarted} phase=${i.currentPhase??`-`}`,i.resultPath?`result: ${i.resultPath}`:``,i.preview?`preview: ${i.preview}`:``,i.error?`error: ${i.error}`:``].filter(Boolean).join(`
|
|
3301
3302
|
`)+`
|
|
3302
|
-
`,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function
|
|
3303
|
+
`,stderr:``,exitCode:0};if(i.pid==null)return{stdout:`workflow: run ${i.id} has not started a realm process yet (nothing to stop)\n`,stderr:``,exitCode:0};if(i.status!==`running`&&i.status!==`paused`)return{stdout:`workflow: run ${i.id} already ${i.status}\n`,stderr:``,exitCode:0};let a=await t.exec?.(`kill`,{cwd:t.cwd,args:[`-KILL`,String(i.pid)]});return a&&a.exitCode!==0?{stdout:``,stderr:a.stderr||`workflow: kill failed (exit ${a.exitCode})\n`,exitCode:a.exitCode}:{stdout:`stopped run ${i.id} (pid ${i.pid})\n`,stderr:``,exitCode:0}}function OB(e,t,n){let{result:r,log:i,hadResult:a}=dB(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?kB(i)+`
|
|
3303
3304
|
`:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
|
|
3304
3305
|
`),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
|
|
3305
|
-
`,stderr:t.stderr,exitCode:0}}function
|
|
3306
|
+
`,stderr:t.stderr,exitCode:0}}function kB(e){return e.split(`
|
|
3306
3307
|
`).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
|
|
3307
|
-
`)}function
|
|
3308
|
+
`)}function AB(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function jB(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 MB(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function NB(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function PB(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function FB(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?MB(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(`
|
|
3308
3309
|
`)+`
|
|
3309
|
-
`:``}function
|
|
3310
|
-
`}return r}function
|
|
3310
|
+
`:``}function IB(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+=MB(e[i+r],n);r+=a+`
|
|
3311
|
+
`}return r}function LB(e,t,n,r){let i=Array.from(e,e=>`0x${MB(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
|
|
3311
3312
|
`);return r===null?i.length?o+`
|
|
3312
|
-
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function
|
|
3313
|
-
`)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const
|
|
3313
|
+
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function RB(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 zB(e){let t=[],n=0;for(let r of e.split(`
|
|
3314
|
+
`)){let e=r.replace(/\r$/,``),i=e.indexOf(`:`);if(i<0)continue;let a=parseInt(e.slice(0,i).trim(),16);if(Number.isNaN(a))continue;let o=e.slice(i+1),s=o.indexOf(` `);s>=0&&(o=o.slice(0,s));let c=o.replace(/[^0-9a-fA-F]/g,``),l=[];for(let e=0;e+1<c.length;e+=2)l.push(parseInt(c.substr(e,2),16));l.length&&(t.push({offset:a,bytes:l}),n=Math.max(n,a+l.length))}if(!t.length)return new Uint8Array;let r=new Uint8Array(n);for(let e of t)for(let t=0;t<e.bytes.length;t++)r[e.offset+t]=e.bytes[t];return r}const BB={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},VB=[{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 HB(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=BB[r];if(i){t[i]=!0;continue}let a=VB.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=jB(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 UB(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function WB(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=_i(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function GB(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?IB(t,a,e.upper):e.include?LB(t,a,e.upper,i?null:PB(r??``)):FB(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function KB(e,t){let n=0,r=t;return e.seek!==void 0&&(n=e.seek<0?Math.max(0,r.length+e.seek):Math.min(e.seek,r.length),r=r.subarray(n)),e.length!==void 0&&(r=r.subarray(0,Math.max(0,e.length))),{data:r,base:n}}function qB(){return S(`xxd`,async(e,t)=>{if(UB(e))return{stdout:`usage: xxd [options] [infile [outfile]]
|
|
3314
3315
|
-c cols number of octets per line (default 16; 30 for -p; 12 for -i)
|
|
3315
3316
|
-g bytes number of octets per group (default 2; 0 disables grouping)
|
|
3316
3317
|
-l len stop after len octets
|
|
@@ -3320,10 +3321,10 @@ pass --wait to block and print the full result.`,zB=new Set([`list`,`status`,`st
|
|
|
3320
3321
|
-i output in C include style
|
|
3321
3322
|
-r reverse: convert a hex dump back to binary (-r -p for plain)
|
|
3322
3323
|
-h show this help
|
|
3323
|
-
`,stderr:``,exitCode:0};let n;try{n=
|
|
3324
|
-
`,stderr:``,exitCode:0}}function
|
|
3325
|
-
`,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(/^\.\//,``))||
|
|
3326
|
-
`,exitCode:1};let c=
|
|
3324
|
+
`,stderr:``,exitCode:0};let n;try{n=HB(e)}catch(e){return AB(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await WB(t,r,a)}catch{return AB(`${r}: No such file or directory`)}if(n.revert){let e=NB(o),r=n.plain?RB(e):zB(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:NB(r),stderr:``,exitCode:0}}let{data:s,base:c}=KB(n,o),l=GB(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 JB(e,t,n,r){if((await e.fs.stat(t)).isFile)return r[n]=await e.fs.readFileBuffer(t),1;let i=await e.fs.readdir(t),a=0;for(let o of i){let i=_r(t,o),s=n?`${n}/${o}`:o;a+=await JB(e,i,s,r)}return a}function YB(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
|
|
3325
|
+
`,stderr:``,exitCode:0}}function XB(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return YB();let n=!1,r=[];for(let t of e){if(t===`-r`){n=!0;continue}if(t.startsWith(`-`))return{stdout:``,stderr:`zip: unsupported option ${t}\n`,exitCode:1};r.push(t)}if(r.length<2)return{stdout:``,stderr:`zip: expected archive path and at least one input path
|
|
3326
|
+
`,exitCode:1};let i=t.fs.resolvePath(t.cwd,r[0]),a=r.slice(1),o={},s=0;for(let e of a){let r=t.fs.resolvePath(t.cwd,e),i=await t.fs.stat(r),a=(e.startsWith(`/`)?e.slice(1):e.replace(/^\.\//,``))||vr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await JB(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
|
|
3327
|
+
`,exitCode:1};let c=Ot(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function ZB(e){let t;return S(`mcp`,async(n,r)=>{if(!t){let{createMcpCommand:n}=await import(`./mcp-command-CQkRyZv1.js`);t=n({fs:e.fs,scriptCatalog:e.scriptCatalog,connectionManager:e.mcpConnectionManager})}return t.execute(n,r)})}function QB(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function $B(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[lO(`ipk`,r),lO(`npm`,r),lO(`i`,r),QO(`ipx`,{fs:t,fetch:n}),QO(`npx`,{fs:t,fetch:n}),ab(`di`,{fs:t,fetch:n}),ab(`uv`,{fs:t,fetch:n}),CL({fs:t,fetch:n})]}function eV(e){let t={buildProcessConfig:e.buildProcessConfig};return[`python3`,`python`,`pyodide`].map(e=>MM(e,t))}function tV(e){let t=e.scriptCatalog;return{buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:t&&(()=>t.getWasmCommands()),gitIdentity:e.gitIdentity}}function nV(e={}){let t=[mE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),ae(),uF(),kP(),SP(e.browserAPI,e.fs),gj(e.browserAPI),by(e.browserAPI),yD(e),XB(),$I(),GF(e.fs?{fs:e.fs}:{}),_F(),wF(),xF(),hv(),JR(tV(e)),BS(tV(e)),qB(),iF(`sqlite3`),iF(`sqllite`),cI(),OI(),xx(),Z_(),NA({buildProcessConfig:e.buildProcessConfig}),NA({buildProcessConfig:e.buildProcessConfig},`jsh`),...eV(e),...$B(e),...e.fs?[zS({fs:e.fs})]:[],...e.fs?[Gk({fs:e.fs})]:[],...e.fetch?[TE({fetch:e.fetch,streamFetch:e.streamFetch})]:[],mS(),hS(),DS(),lz(e.webhook),Jz(),yy(e.crontask),ZB(e),Ij({fs:e.fs,fetch:e.fetch}),RS(),YP(),_j(),vj(`pdftk`),vj(`pdf`),Q_(`biscotto`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Q_(`biscotti`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Oj(`pdftoppm`),Oj(`pdftocairo`),kj(`pdftotext`),ry(`convert`),ry(`magick`),iB({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),MI(),JI(),hD(),gD(),YI(),Kk(),IM(),Rk(),Kb(),JA(),qA(),Fk(),qN(QB(e)),Om(e.gitCredential),YM({fs:e.fs}),xN(),fv(),pv(),mv(`xclip`),mv(`xsel`),bN(),tC(),Ug(),Wg(),yA(e.fs),st(),RA(),Gg({getParentJid:e.getParentJid}),ex(),iM({processManager:e.processManager}),RL({processManager:e.processManager}),tk({processManager:e.processManager}),$O({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...qg(),Wk(),Dk(),lR(),ZE(),nS(),TR({processManager:e.processManager}),vv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),pS(),av({registry:e.cherryRuntimeRegistry}),ky(),Fy({fs:e.fs}),Iy({fs:e.fs}),fF(e.sudoCommand),xB({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),Yz(),OP()];return e.fs&&(jj(),t.push(...Gn.map(t=>dE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let rV=null;function iV(e){rV=e}function aV(e){rV?.(e)}var oV=zt();const sV={user:`user`,home:pp},cV=new Set([`root`,`nobody`,`nogroup`]),lV=/^[A-Za-z_][A-Za-z0-9_.-]*$/;function uV(e){return{user:lV.test(e.user)&&!cV.has(e.user)?e.user:sV.user,home:e.home.startsWith(`/`)&&!/[:\n]/.test(e.home)?e.home:sV.home}}function dV(e,t){let{user:n,home:r}=uV(t);if(e===`/etc/passwd`)return[`root:x:0:0:root:/root:/bin/bash`,`${n}:x:1000:1000:SLICC user:${r}:/bin/bash`,`nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin`,``].join(`
|
|
3327
3328
|
`);if(e===`/etc/group`)return[`root:x:0:`,`${n}:x:1000:`,`nogroup:x:65534:`,``].join(`
|
|
3328
|
-
`)}function FV(e,t=AV){let n=PV(e,t);return n===void 0?void 0:new TextEncoder().encode(n)}function IV(e){return e===`/etc`?[`group`,`passwd`]:[]}function LV(e){return e?.code===`ENOENT`}const RV=Reflect.get(it,`DefenseInDepthBox`);function zV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function BV(e,t){if(typeof e!=`string`)return e;let n=zV(t);if(n===`binary`||n===`latin1`){let t=ye(e);if(t)return t}return kV.Buffer.from(e,n)}function VV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}function HV(e){let t=/^[A-Za-z0-9._+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`;return new TextEncoder().encode(`#!/bin/sh\n# SLICC command\nexec ${t} "$@"\n`)}function UV(e,t){let n=IV(e).filter(e=>!t.includes(e));return n.length?[...t,...n].sort():t}function WV(e,t){let n=IV(e).filter(e=>!t.some(t=>t.name===e));if(!n.length)return t;let r=n.map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));return[...t,...r].sort((e,t)=>e.name.localeCompare(t.name))}var GV=class{vfs;registeredCommandsFn=null;identityFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,this.updateMetadataBatch=this.updateMetadataBatch.bind(this),this.symlinkBatch=this.symlinkBatch.bind(this)}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Ue(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}setIdentityFn(e){this.identityFn=e}identityFile(e){return FV(e,this.identityFn?.()??AV)}isVirtualBinCommand(e){return e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e)}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=VV(e);if(t===`/usr`||t===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(t.startsWith(`/usr/bin/`)){let e=t.slice(9);if(this.isVirtualBinCommand(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:HV(e).length,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=RV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.readRaw(n),i=zV(t),a=kV.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString(i);return i!==`hex`&&i!==`base64`&&m(a,r),a})}async readFileBuffer(e){return this.trusted(()=>this.readRaw(b(e)))}async readRaw(e){let t=VV(e);if(t.startsWith(`/usr/bin/`)&&this.isVirtualBinCommand(t.slice(9)))return HV(t.slice(9));let n;try{n=await this.vfs.readFile(e,{encoding:`binary`})}catch(t){let n=this.identityFile(e);if(n&&LV(t))return n;throw t}return n instanceof Uint8Array?n:new TextEncoder().encode(n)}identityStat(e,t){let n=this.identityFile(e);if(!(!n||!LV(t)))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:420,size:n.length,mtime:new Date(0)}}async readFileBytes(e){let t=await this.readFileBuffer(e);return kV.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,BV(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),BV(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:await this.vfs.exists(t)||this.identityFile(t)!==void 0})}async stat(e){return this.trusted(async()=>{let t=b(e);try{return await this.statVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async statVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.statSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:!!n.isSymlink,mode:n.mode??(n.type===`directory`?493:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.stat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async lstat(e){return this.trusted(async()=>{let t=b(e);try{return await this.lstatVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async lstatVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.lstatSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:n.type===`symlink`,mode:n.mode??(n.type===`directory`?493:n.type===`symlink`?511:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.lstat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(VV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return UV(t,n.map(e=>e.name));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),UV(t,r.map(e=>e.name))})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(VV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return WV(t,this.mapFastEntriesToDirents(n));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),WV(t,this.mapAsyncEntriesToDirents(r))})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t),a;try{a=await this.vfs.stat(r)}catch(e){let t=this.identityFile(r);if(!t||!LV(e))throw e;await this.vfs.writeFile(i,t);return}if(a.type===`directory`){if(!n?.recursive)throw new We(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}let r=new Set(n.map(e=>e.name));for(let n of IV(e)){let i=r.has(n)?void 0:this.identityFile(x(e,n));i&&await this.vfs.writeFile(x(t,n),i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:b(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:b(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function KV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?KV(e.getUnderlyingFS?.()):null}async function qV(e){let t=ve(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function JV(){let e=ve(`github`);if(!e)return Sm;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??Sm,...t??[]]}const YV=e(`almost-bash-shell`),XV=`__SLICC_RUN_PID`,ZV=`__SLICC_OUTPUT_TEE__`;function QV(e){let t=e?.get(XV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function $V(e){if(!(XV in e)&&!(ZV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[XV]:t,[ZV]:n,[am]:r,[Pt]:i,[It]:a,...o}=e;return o}function eH(e){let t=new AbortController,n=e.filter(e=>e!==void 0),r=()=>t.abort();for(let e of n)e.aborted?t.abort():e.addEventListener(`abort`,r,{once:!0});return{signal:t.signal,release(){for(let e of n)e.removeEventListener(`abort`,r)}}}var tH=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;registeredWasmCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;commandAbort=new AbortController;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(QV(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:gp,PATH:ur,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return TV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands],fs:e.fs,fetch:t,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,terminal:e.terminal,gateNativeCommand:this.gateNativeCommand,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]},gitCredential:{githubToken:(e,t)=>this.gitCommands.githubCredential(e,t),githubDomains:JV},gitIdentity:()=>this.gitCommands.identity(),mcpConnectionManager:e.mcpConnectionManager})}constructor(t){this.options=t,this.vfsAdapter=new GV(t.fs),this.progress=new bp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new cp({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:qV}),this.mountCommands=new Fs({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Im});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=KV(i)??KV(a);this.scriptCatalog=t.scriptCatalog??new Ti({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||cr(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:Tp(this.progress)}),l=_({progress:Tp(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),Ah(t.fs),Dg(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...ot(),...at()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new st({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:Kp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:up(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(Wm),this.allowedCommands!==null){let e=this.bash;for(let t of at())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let m=d.map(e=>e.name),h=p??[...ot(),...at()];this.builtinCommandNames=new Set([...h,...m]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.vfsAdapter.setIdentityFn(()=>({user:this.lastEnv.USER??`user`,home:this.lastEnv.HOME??`/home/user`})),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}cancelActiveCommand(){this.commandAbort.abort(),this.commandAbort=new AbortController}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return ai(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return dr(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 _p(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=vp(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd,umask:this.umask});if(typeof r.umask==`number`&&(this.umask=r.umask),r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){YV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){if(OV(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.usesGnuBash())return this.runOnGnuBash(e,t,n,r,i,a);let o=sm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[XV]:String(n)},...i===void 0?{}:{[ZV]:i},...o?{[am]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=eH([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Lt(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.flushPendingCommandGrants(),d=Mt(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=$V(d.env)),d.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.applyPendingEnvWrites(),d.env?.PWD&&(this.cwd=d.env.PWD),d.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(d.exitCode!==0&&d.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return Ft(await e(d,this.cwd,this.vfsAdapter),d.pipeStatus)}return d}applyPendingEnvWrites(){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}async usesGnuBash(){return!this.options.gnuBash||this.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await this.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let{runWasmCommand:o,withoutRealmDefaults:s}=await import(`./run-Ccyk_j1M.js`),c=sm(e),l={...this.lastEnv,...n===void 0?{}:{[XV]:String(n)},...c?{[am]:c}:{}},u=i===void 0?void 0:this.outputTees.get(i),d=await hp(e,{env:l,run:(e,i,a)=>o(e,this.wasmContext(i,t,r),{processConfig:this.buildJshProcessConfig(n),gate:this.gateNativeCommand,onOutput:u,fds:a,commands:()=>this.scriptCatalog.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}),f=this.lastEnv.PATH;return d.state&&(this.cwd=d.state.cwd,this.lastEnv=pp(s(d.state.env,l),[XV,am,ZV])),this.lastEnv.PATH!==f&&await this.syncJshCommands().catch(()=>void 0),await this.flushPendingCommandGrants(),this.applyPendingEnvWrites(),{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:{...this.lastEnv},...a&&d.state?{pipeStatus:d.state.pipeStatus}:{}}}wasmContext(e,t,n){return{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>this.bash.exec(e,{...t,umask:this.umask})}}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.isTransparentGatingEnabled()||xm.has(e))return null;let r=await this.gateCommandDispatch(e,t,n[am]);return r?{stderr:r.stderr,exitCode:r.exitCode}:null};isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?Xp(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(ZV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await em(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(ZV);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=Vp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Up(t,this.progress,Hp(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()||xm.has(e.name))return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(am))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=nm(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await im(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=ft(e);if(!n)return;let r=`${mt}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof We&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
3329
|
-
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(
|
|
3329
|
+
`)}function fV(e,t=sV){let n=dV(e,t);return n===void 0?void 0:new TextEncoder().encode(n)}function pV(e){return e===`/etc`?[`group`,`passwd`]:[]}function mV(e){return e?.code===`ENOENT`}const hV=Reflect.get(tt,`DefenseInDepthBox`);function gV(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function _V(e,t){if(typeof e!=`string`)return e;let n=gV(t);if(n===`binary`||n===`latin1`){let t=ye(e);if(t)return t}return oV.Buffer.from(e,n)}function vV(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}function yV(e){let t=/^[A-Za-z0-9._+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`;return new TextEncoder().encode(`#!/bin/sh\n# SLICC command\nexec ${t} "$@"\n`)}function bV(e,t){let n=pV(e).filter(e=>!t.includes(e));return n.length?[...t,...n].sort():t}function xV(e,t){let n=pV(e).filter(e=>!t.some(t=>t.name===e));if(!n.length)return t;let r=n.map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));return[...t,...r].sort((e,t)=>e.name.localeCompare(t.name))}var SV=class{vfs;registeredCommandsFn=null;identityFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,this.updateMetadataBatch=this.updateMetadataBatch.bind(this),this.symlinkBatch=this.symlinkBatch.bind(this)}get listingStatsSize(){return this.listingStats.size}primeListingStats(e,t){let n=Date.now();if(t.length>this.listingStatsMax){this.listingStats.clear();return}this.sweepExpiredListingStats(n),this.listingStats.size+t.length>this.listingStatsMax&&this.listingStats.clear();let r=e===`/`?`/`:`${e}/`;for(let e of t){let t=Be(e),i=`${r}${e.name}`;this.listingStats.delete(i),t&&this.listingStats.set(i,{stats:t,at:n})}}sweepExpiredListingStats(e){for(let[t,n]of this.listingStats){if(e-n.at<=this.listingStatsTtlMs)break;this.listingStats.delete(t)}}primedStats(e){let t=this.listingStats.get(e);if(t){if(Date.now()-t.at>this.listingStatsTtlMs){this.listingStats.delete(e);return}return t.stats}}dropListingStats(){this.listingStats.clear()}setRegisteredCommandsFn(e){this.registeredCommandsFn=e}setIdentityFn(e){this.identityFn=e}identityFile(e){return fV(e,this.identityFn?.()??sV)}isVirtualBinCommand(e){return e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e)}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=vV(e);if(t===`/usr`||t===`/usr/bin`)return{isFile:!1,isDirectory:!0,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)};if(t.startsWith(`/usr/bin/`)){let e=t.slice(9);if(this.isVirtualBinCommand(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:yV(e).length,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=hV?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.readRaw(n),i=gV(t),a=oV.Buffer.from(r.buffer,r.byteOffset,r.byteLength).toString(i);return i!==`hex`&&i!==`base64`&&m(a,r),a})}async readFileBuffer(e){return this.trusted(()=>this.readRaw(b(e)))}async readRaw(e){let t=vV(e);if(t.startsWith(`/usr/bin/`)&&this.isVirtualBinCommand(t.slice(9)))return yV(t.slice(9));let n;try{n=await this.vfs.readFile(e,{encoding:`binary`})}catch(t){let n=this.identityFile(e);if(n&&mV(t))return n;throw t}return n instanceof Uint8Array?n:new TextEncoder().encode(n)}identityStat(e,t){let n=this.identityFile(e);if(!(!n||!mV(t)))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:420,size:n.length,mtime:new Date(0)}}async readFileBytes(e){let t=await this.readFileBuffer(e);return oV.Buffer.from(t.buffer,t.byteOffset,t.byteLength).toString(`latin1`)}async getNativeFile(e){return this.trusted(()=>this.vfs.getNativeFile(b(e)))}async readFileRange(e,t,n){return this.trusted(()=>this.vfs.readFileRange(b(e),t,n))}async writeFile(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e);await this.vfs.writeFile(r,_V(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),_V(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:await this.vfs.exists(t)||this.identityFile(t)!==void 0})}async stat(e){return this.trusted(async()=>{let t=b(e);try{return await this.statVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async statVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.statSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:!!n.isSymlink,mode:n.mode??(n.type===`directory`?493:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.stat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async lstat(e){return this.trusted(async()=>{let t=b(e);try{return await this.lstatVfs(t)}catch(e){let n=this.identityStat(t,e);if(n)return n;throw e}})}async lstatVfs(e){let t=this.virtualUsrStat(e);if(t)return t;let n=this.vfs.lstatSync(e);if(n)return{isFile:n.type===`file`,isDirectory:n.type===`directory`,isSymbolicLink:n.type===`symlink`,mode:n.mode??(n.type===`directory`?493:n.type===`symlink`?511:420),size:n.size,mtime:new Date(n.mtime),identity:n.identity,dev:n.dev,ino:n.identity===void 0?void 0:n.ino};let r=this.primedStats(e)??await this.vfs.lstat(e);return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino}}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(vV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return bV(t,n.map(e=>e.name));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),bV(t,r.map(e=>e.name))})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(vV(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return xV(t,this.mapFastEntriesToDirents(n));let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),xV(t,this.mapAsyncEntriesToDirents(r))})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t),a;try{a=await this.vfs.stat(r)}catch(e){let t=this.identityFile(r);if(!t||!mV(e))throw e;await this.vfs.writeFile(i,t);return}if(a.type===`directory`){if(!n?.recursive)throw new Ve(`EISDIR`,`is a directory`,r);await this.cpDir(r,i)}else await this.vfs.copyFile(r,i)})}async cpDir(e,t){await this.vfs.mkdir(t,{recursive:!0});let n=await this.vfs.readDir(e);for(let r of n){let n=x(e,r.name),i=x(t,r.name);r.type===`directory`?await this.cpDir(n,i):await this.vfs.copyFile(n,i)}let r=new Set(n.map(e=>e.name));for(let n of pV(e)){let i=r.has(n)?void 0:this.identityFile(x(e,n));i&&await this.vfs.writeFile(x(t,n),i)}}async mv(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rename(b(e),b(t))})}async rename(e,t){return this.mv(e,t)}resolvePath(e,t){return t.startsWith(`/`)?b(t):b(x(e,t))}getAllPaths(){return[]}async chmod(e,t){return this.dropListingStats(),this.trusted(()=>this.vfs.chmod(b(e),t))}async updateMetadataBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.updateMetadataBatch(e.map(e=>({...e,path:b(e.path)}))))}async symlinkBatch(e){return this.dropListingStats(),this.trusted(()=>this.vfs.symlinkBatch(e.map(e=>({target:e.target,path:b(e.path)}))))}async symlink(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.symlink(e,b(t))})}async link(e,t){throw Error(`Hard links not supported in VirtualFS`)}async readlink(e){return this.trusted(async()=>this.vfs.readlink(b(e)))}async realpath(e){return this.trusted(async()=>this.vfs.realpath(b(e)))}async utimes(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.utimes(b(e),t,n))}invalidatePaths(e){this.dropListingStats();let t=this.vfs;t.invalidatePaths&&t.invalidatePaths(e)}async forgetSidecarConsistency(){await this.vfs.forgetSidecarConsistency?.()}};function CV(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?CV(e.getUnderlyingFS?.()):null}async function wV(e){let t=ve(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function TV(){let e=ve(`github`);if(!e)return ym;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??ym,...t??[]]}const EV=e(`almost-bash-shell`),DV=`__SLICC_RUN_PID`,OV=`__SLICC_OUTPUT_TEE__`;function kV(e){let t=e?.get(DV);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function AV(e){if(!(DV in e)&&!(OV in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[DV]:t,[OV]:n,[nm]:r,[jt]:i,[Nt]:a,...o}=e;return o}function jV(e){let t=new AbortController,n=e.filter(e=>e!==void 0),r=()=>t.abort();for(let e of n)e.aborted?t.abort():e.addEventListener(`abort`,r,{once:!0});return{signal:t.signal,release(){for(let e of n)e.removeEventListener(`abort`,r)}}}var MV=class e{options;bash;vfsAdapter;gitCommands;mountCommands;lastEnv;cwd;umask=18;builtinCommandNames;staticBuiltinNames;allowedCommands;scriptCatalog;initialJshSync=null;ownsScriptCatalog;registeredJshCommands=new Map;registeredWorkflowCommands=new Set;registeredWasmCommands=new Set;jshSyncInflight=null;jshSyncDirty=!1;pendingCommandGrants=[];pendingSudoBypasses=new Map;pendingEnvWrites=new Map;activeShellPid;progress;activeRunSignal;commandAbort=new AbortController;scriptRun=null;scriptRunsActive=0;registryNames=new Set;outputTees=new Map;nextOutputTeeId=0;resolveJshProcessConfig=e=>this.buildJshProcessConfig(kV(e));static buildAllowedCommandSet(e){return e.sudo?.defaultDisposition===`require-approval`||!e.allowedCommands||e.allowedCommands.includes(`*`)?null:new Set(e.allowedCommands)}static buildInitialEnv(e,t){return{HOME:pp,PATH:sr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return nV({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands],fs:e.fs,fetch:t,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,terminal:e.terminal,gateNativeCommand:this.gateNativeCommand,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]},gitCredential:{githubToken:(e,t)=>this.gitCommands.githubCredential(e,t),githubDomains:TV},gitIdentity:()=>this.gitCommands.identity(),mcpConnectionManager:e.mcpConnectionManager})}constructor(t){this.options=t,this.vfsAdapter=new SV(t.fs),this.progress=new _p({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new ap({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:wV}),this.mountCommands=new Ms({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Nm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=CV(i)??CV(a);this.scriptCatalog=t.scriptCatalog??new Si({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||ar(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:Sp(this.progress)}),l=_({progress:Sp(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),Dh(t.fs),wg(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...rt(),...nt()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new it({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:Up(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:sp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(Vm),this.allowedCommands!==null){let e=this.bash;for(let t of nt())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let m=d.map(e=>e.name),h=p??[...rt(),...nt()];this.builtinCommandNames=new Set([...h,...m]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.vfsAdapter.setIdentityFn(()=>({user:this.lastEnv.USER??`user`,home:this.lastEnv.HOME??`/home/user`})),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}cancelActiveCommand(){this.commandAbort.abort(),this.commandAbort=new AbortController}async executeCommand(e,t,n,r=``,i){let a=this.activeShellPid;n!==void 0&&(this.activeShellPid=n);let o=i?.onOutput?`tee-${this.nextOutputTeeId+=1}`:void 0;o&&i?.onOutput&&this.outputTees.set(o,i.onOutput);try{let a=await this.runCommand(e,t,n,r,o,i?.capturePipeStatus);return{stdout:a.stdout,stderr:a.stderr,exitCode:a.exitCode,...a.pipeStatus===void 0?{}:{pipeStatus:a.pipeStatus}}}finally{this.activeShellPid=a,o&&this.outputTees.delete(o)}}async executeScriptFile(e,t=[]){return ni(e,t,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig())}dispose(){this.ownsScriptCatalog&&this.scriptCatalog.dispose()}async renderMediaPreview(e){throw Error(`terminal preview is unavailable in headless mode`)}currentScanRoots(){return cr(this.lastEnv.PATH)}startInitialJshSync(){this.initialJshSync=this.initHomeAndProfile().then(()=>this.syncJshCommands()).catch(()=>void 0).finally(()=>{this.initialJshSync=null})}async initHomeAndProfile(){let e=this.options.fs;try{let t=this.options.env?.HOME??await mp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=hp(t));let n=`${t.replace(/\/+$/,``)}/.profile`;if(!await e.exists(n).catch(()=>!1))return;let r=await this.bash.exec(`. "$HOME/.profile"`,{env:this.lastEnv,cwd:this.cwd,umask:this.umask});if(typeof r.umask==`number`&&(this.umask=r.umask),r.env){let{PWD:e,...t}=r.env;this.lastEnv={...t,PWD:this.lastEnv.PWD??this.cwd}}}catch(e){EV.warn(`HOME/profile init failed; continuing with defaults`,e)}}async waitForInitialJshSync(e){let t=this.initialJshSync;if(t===null)return;if(!e){await t;return}if(e.aborted)return;let n;try{await new Promise(r=>{n=()=>r(),e.addEventListener(`abort`,n,{once:!0}),t.then(()=>r(),()=>r())})}finally{n&&e.removeEventListener(`abort`,n)}}async runCommand(e,t,n,r=``,i,a=!1){if(aV(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.usesGnuBash())return this.runOnGnuBash(e,t,n,r,i,a);let o=im(e),s={env:{...this.lastEnv,...n===void 0?{}:{[DV]:String(n)},...i===void 0?{}:{[OV]:i},...o?{[nm]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=jV([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Pt(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.flushPendingCommandGrants(),d=kt(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=AV(d.env)),d.env&&this.lastEnv.PATH!==c&&await this.syncJshCommands().catch(()=>void 0),this.applyPendingEnvWrites(),d.env?.PWD&&(this.cwd=d.env.PWD),d.exitCode===127){let t=await this.tryJshFallback(e,n);if(t)return this.syncJshCommands().catch(()=>void 0),t}if(d.exitCode!==0&&d.stderr.includes(`Permission denied`)){let{withShebangExecHint:e}=await import(`./shebang-exec-hint-BISPom3l.js`);return Mt(await e(d,this.cwd,this.vfsAdapter),d.pipeStatus)}return d}applyPendingEnvWrites(){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}async usesGnuBash(){return!this.options.gnuBash||this.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await this.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let{runWasmCommand:o,withoutRealmDefaults:s}=await import(`./run-Ccyk_j1M.js`),c=im(e),l={...this.lastEnv,...n===void 0?{}:{[DV]:String(n)},...c?{[nm]:c}:{}},u=i===void 0?void 0:this.outputTees.get(i),d=await fp(e,{env:l,run:(e,i,a)=>o(e,this.wasmContext(i,t,r),{processConfig:this.buildJshProcessConfig(n),gate:this.gateNativeCommand,onOutput:u,fds:a,commands:()=>this.scriptCatalog.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}),f=this.lastEnv.PATH;return d.state&&(this.cwd=d.state.cwd,this.lastEnv=up(s(d.state.env,l),[DV,nm,OV])),this.lastEnv.PATH!==f&&await this.syncJshCommands().catch(()=>void 0),await this.flushPendingCommandGrants(),this.applyPendingEnvWrites(),{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:{...this.lastEnv},...a&&d.state?{pipeStatus:d.state.pipeStatus}:{}}}wasmContext(e,t,n){return{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>this.bash.exec(e,{...t,umask:this.umask})}}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.isTransparentGatingEnabled()||vm.has(e))return null;let r=await this.gateCommandDispatch(e,t,n[nm]);return r?{stderr:r.stderr,exitCode:r.exitCode}:null};isTransparentGatingEnabled(){let e=this.options.sudo;return!!e&&e.transparentGating!==!1}wrapCommandForDispatch(e){let t=this.wrapCommandForSudo(e),n=e.name===`timeout`?qp(t,this.progress):Yp(t,this.progress),r=()=>this.scriptRun?.stepDone(),i=(e,t)=>this.teeCommandOutput(e,t),a=this.outputTees;return{...n,async execute(e,t){let o=t.env?.get(OV),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await Zp(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(OV);if(!n)return;let r=this.outputTees.get(n);if(!r)return;let i=[t.stdout,t.stderr].filter(Boolean).join(``);i&&r(i)}beginScriptRun(e){if(this.scriptRunsActive+=1,!this.progress.hasSink())return null;if(this.scriptRunsActive>1)return this.scriptRun?.end(),this.scriptRun=null,null;let t={totalSteps:null};try{t=Rp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Bp(t,this.progress,zp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled()||vm.has(e.name))return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(nm))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=$p(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await tm(i,{policy:a,broker:r.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},defaultDisposition:r.defaultDisposition,...n?{reason:n}:{}});return o.allowed?null:{stdout:``,stderr:`${o.message}\n`,exitCode:o.exitCode??77}}registerSudoBypass(e){let t=e.trim();t&&this.pendingSudoBypasses.set(t,(this.pendingSudoBypasses.get(t)??0)+1)}consumeSudoBypass(e){let t=this.pendingSudoBypasses.get(e);return t?(t===1?this.pendingSudoBypasses.delete(e):this.pendingSudoBypasses.set(e,t-1),!0):!1}async flushPendingCommandGrants(){if(this.pendingCommandGrants.length===0)return;let e=this.pendingCommandGrants;this.pendingCommandGrants=[];for(let t of e)try{await this.persistCommandGrant(t)}catch{}}async persistCommandGrant(e){let t=this.options.sudo?.persistCommandGrant;if(t){await t(e);return}let n=lt(e);if(!n)return;let r=`${dt}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof Ve&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
3330
|
+
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(vm.get(e)??e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)EV.warn(`jsh command '${t.name}' is provided by more than one skill; using ${t.winnerPath} (${t.reason}), shadowed ${t.shadowedPaths.join(`, `)}`);let n=await this.getFilteredWorkflowCommands(),r=await this.scriptCatalog.getWasmCommands();for(let[e,n]of t)this.isCommandAllowed(e)&&(this.builtinCommandNames.has(e)&&!this.registeredJshCommands.has(e)||this.registeredJshCommands.get(e)!==n&&(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(e))),this.registeredJshCommands.set(e,n),this.builtinCommandNames.add(e)));let i=[...r.keys()].filter(e=>this.isCommandAllowed(e));this.registerLateScriptNames(i,this.registeredWasmCommands),this.registerLateScriptNames(n.keys(),this.registeredWorkflowCommands)}finally{this.jshSyncInflight=null,this.jshSyncDirty&&(this.jshSyncDirty=!1,this.syncJshCommands().catch(()=>void 0))}}registerLateScriptNames(e,t){let n=[this.registeredJshCommands,this.registeredWasmCommands,this.registeredWorkflowCommands];for(let r of e)if(!t.has(r)){if(n.some(e=>e!==t&&e.has(r))){t.add(r);continue}this.builtinCommandNames.has(r)||(this.bash.registerCommand(this.wrapCommandForDispatch(this.makeScriptCommand(r))),t.add(r),this.builtinCommandNames.add(r))}}makeScriptCommand(e){let t=this.scriptCatalog,n=this.options.jshDiscoveryFs??this.options.fs,r=e,i=async(e,i)=>{let a=i.exec??((e,t)=>this.bash.exec(e,{env:t?.env??Object.fromEntries(i.env),cwd:t?.cwd??i.cwd,args:t?.args,...t?.env===void 0?{}:{replaceEnv:!0}})),o=(await t.getJshCommands(this.currentScanRoots())).get(r);if(o){let t;try{let e=await n.readFile(o,{encoding:`utf-8`});t=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127}}return ai(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(kV(i.env)))}let s=(await t.getWasmCommands()).get(r);if(s){let{runWasmCommand:n}=await import(`./run-Ccyk_j1M.js`);return n(s.script?[r,...e]:[`--argv0`,s.argv0,`--module`,s.wasm,s.glue,...s.args??[],...e],i,{processConfig:this.buildJshProcessConfig(kV(i.env)),gate:this.gateNativeCommand,defaults:s.env,commands:()=>t.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}let c=(await t.getWorkflowCommands()).get(r);if(c){let t=xi(c.path,e);return a(t[0],{args:t.slice(1),cwd:i.cwd})}return{stdout:``,stderr:`${r}: command no longer exists\n`,exitCode:127}};return{name:e,trusted:!0,async execute(e,t){try{return await i(e,t)}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:``,stderr:`${r}: ${t}\n`,exitCode:1}}}}}createGitCustomCommand(){let e=this.gitCommands;return S(`git`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env,P(n.stdin));return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createMountCustomCommand(){let e=this.mountCommands;return S(`mount`,async(t,n)=>{let r=n.cwd,i=await e.execute(t,r,n.env);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}createUmountCustomCommand(){let e=this.mountCommands;return S(`umount`,async(t,n)=>{let r=n.cwd,i=await e.executeUmount(t,r);return{stdout:i.stdout,stderr:i.stderr,exitCode:i.exitCode}})}async getFilteredJshCommands(){let e=await this.scriptCatalog.getJshCommands(this.currentScanRoots()),t=new Map;for(let[n,r]of e)this.builtinCommandNames.has(n)||this.isCommandAllowed(n)&&t.set(n,r);return t}async getFilteredWorkflowCommands(){let e=await this.scriptCatalog.getWorkflowCommands(),t=new Map;for(let[n,r]of e)this.isCommandAllowed(n)&&t.set(n,r);return t}async getWorkflowCommandNames(){return[...(await this.getFilteredWorkflowCommands()).keys()]}async tryJshFallback(e,t){let n=e.trim(),r=n.indexOf(` `),i=r>=0?n.slice(0,r):n,a=r>=0?n.slice(r+1).trim():``,o=(await this.getFilteredJshCommands()).get(i);if(!o)return null;let s=a?gp(a):[],c=this.options.jshDiscoveryFs??this.options.fs,l;try{let e=await c.readFile(o,{encoding:`utf-8`});l=typeof e==`string`?e:new TextDecoder().decode(e)}catch{return{stdout:``,stderr:`jsh: cannot read script '${o}'\n`,exitCode:127,env:this.lastEnv}}let u=[`node`,o,...s],d=await ai(l,u,{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(this.lastEnv)),stdin:``,exec:(e,t)=>this.bash.exec(e,{env:t?.env??this.lastEnv,cwd:t?.cwd??this.cwd,umask:this.umask,...t?.env===void 0?{}:{replaceEnv:!0}})},this.buildJshProcessConfig(t));return{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:this.lastEnv}}buildJshProcessConfig(e){if(!(!this.options.processManager||!this.options.processOwner))return{processManager:this.options.processManager,owner:this.options.processOwner,getParentPid:()=>e??this.activeShellPid??this.options.getCurrentShellPid?.()}}};export{Aa as _,dB as a,ba as b,Cs as c,fs as d,us as f,Ea as g,Fo as h,sB as i,gs as l,Wo as m,SV as n,aB as o,Go as p,iV as r,pp as s,MV as t,ps as u,ka as v,ko as y};
|