sliccy 6.211.0 → 6.212.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/node-server/_shared/index.d.ts +1 -0
- package/dist/node-server/_shared/index.d.ts.map +1 -1
- package/dist/node-server/_shared/index.js +1 -0
- package/dist/node-server/_shared/index.js.map +1 -1
- package/dist/node-server/_shared/raw-fetch-protocol.d.ts +149 -0
- package/dist/node-server/_shared/raw-fetch-protocol.d.ts.map +1 -0
- package/dist/node-server/_shared/raw-fetch-protocol.js +296 -0
- package/dist/node-server/_shared/raw-fetch-protocol.js.map +1 -0
- package/dist/node-server/fetch-proxy-headers.d.ts +3 -1
- package/dist/node-server/fetch-proxy-headers.js +5 -1
- package/dist/node-server/index.js +14 -3
- package/dist/node-server/routes/fetch-proxy-raw.d.ts +43 -0
- package/dist/node-server/routes/fetch-proxy-raw.js +205 -0
- package/dist/node-server/routes/fetch-proxy.d.ts +23 -0
- package/dist/node-server/routes/fetch-proxy.js +4 -3
- package/dist/ui/.vite/manifest.json +182 -182
- package/dist/ui/assets/SKILL-CN4LOg1h.js +1 -0
- package/dist/ui/assets/{account-store-CwNcf5Wq.js → account-store-DdclMpWp.js} +1 -1
- package/dist/ui/assets/{account-store-nlKbTUhJ.js → account-store-DnIs5WZM.js} +1 -1
- package/dist/ui/assets/{adobe-DBVa9oOG.js → adobe-BNRJjQn6.js} +1 -1
- package/dist/ui/assets/{adobe-D7sqH2X_.js → adobe-w_RhhSWv.js} +1 -1
- package/dist/ui/assets/{agent-panels-B0VuA3mU.js → agent-panels-B-6e5X0F.js} +1 -1
- package/dist/ui/assets/{almost-bash-shell-headless-C0x2DyFh.js → almost-bash-shell-headless-D19kpvHY.js} +154 -149
- package/dist/ui/assets/{apply-layout-fciODM2t.js → apply-layout-oUk89jk1.js} +1 -1
- package/dist/ui/assets/{apps-RVxpwEfn.js → apps-oJ_nTgiK.js} +1 -1
- package/dist/ui/assets/{azure-openai-QS8TU-7m.js → azure-openai-BKBBD2Dq.js} +1 -1
- package/dist/ui/assets/{azure-openai-JxdRj-Iq.js → azure-openai-zqUyJv0c.js} +1 -1
- package/dist/ui/assets/{backend-hostfs-CITljQVo.js → backend-hostfs-BotdHD_S.js} +1 -1
- package/dist/ui/assets/{bsh-watchdog-BTB0exmo.js → bsh-watchdog-TYuawE-B.js} +1 -1
- package/dist/ui/assets/{cdp-Djm-AVXd.js → cdp-C0InCdRQ.js} +1 -1
- package/dist/ui/assets/{cerebras-DvIFsdoW.js → cerebras-ChWjfEi0.js} +1 -1
- package/dist/ui/assets/{cerebras-Czq0QoYg.js → cerebras-DL4U9Vjg.js} +1 -1
- package/dist/ui/assets/{client-CwxmlQM-.js → client-dISfU5Wf.js} +1 -1
- package/dist/ui/assets/{composer-speech-DgLXFFNQ.js → composer-speech-d-ejBNSK.js} +1 -1
- package/dist/ui/assets/{connect-surface-YjzKwUub.js → connect-surface-DNUrGg9g.js} +1 -1
- package/dist/ui/assets/{core-C7UGykIC.js → core-DZ0CleVD.js} +2 -2
- package/dist/ui/assets/{directed-approval-BMnSWjrJ.js → directed-approval-ol0Z6v9I.js} +1 -1
- package/dist/ui/assets/{emscripten-vfs-hook-CwbQLP-I.js → emscripten-vfs-hook-fCUbQRCb.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-Bqf-swhU.js → ensure-speech-assets-S71yPbdv.js} +1 -1
- package/dist/ui/assets/{esbuild-wasm-DIcMVR3g.js → esbuild-wasm-llEEkCQu.js} +1 -1
- package/dist/ui/assets/{extension-ops-CF2mLDRW.js → extension-ops-CEprwZyb.js} +1 -1
- package/dist/ui/assets/{ffmpeg-wasm-B5jofhIa.js → ffmpeg-wasm-DGDKCZ27.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-BV51qDTg.js → frozen-archive-writer-khicEqGd.js} +1 -1
- package/dist/ui/assets/{fs-ZnsLbva1.js → fs-CIR1p_m7.js} +1 -1
- package/dist/ui/assets/{fs-pBJBtnUm.js → fs-D6QJU-ZE.js} +2 -2
- package/dist/ui/assets/{gelatiere-store-B-PMFWOJ.js → gelatiere-store-CYdUzk1p.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-B7YUbTOe.js → gelatiere-unit-Dzkphhv5.js} +1 -1
- package/dist/ui/assets/{github-CRKKUq6c.js → github-8QTzsnR3.js} +1 -1
- package/dist/ui/assets/{github-q7aLpavT.js → github-BdQ6NNi6.js} +2 -2
- package/dist/ui/assets/{github-auth-DPBopdHy.js → github-auth-CgSRRmdA.js} +1 -1
- package/dist/ui/assets/{github-copilot-Cn5WeEVQ.js → github-copilot-Beq3TkEz.js} +1 -1
- package/dist/ui/assets/{github-copilot-BOqjn_pA.js → github-copilot-C6ZXCgIT.js} +1 -1
- package/dist/ui/assets/{github-install-Dlx1x9oP.js → github-install-BV6F_EyI.js} +1 -1
- package/dist/ui/assets/{github-zip-BKesEE7T.js → github-zip-nn7aW2E1.js} +1 -1
- package/dist/ui/assets/{guest-tool-gate-DbuM_BFG.js → guest-tool-gate-4cZHoDbf.js} +1 -1
- package/dist/ui/assets/{hear-BAlAHUln.js → hear-HND90jpV.js} +1 -1
- package/dist/ui/assets/{help-MPD6QjSi.js → help-Dgt88ySg.js} +1 -1
- package/dist/ui/assets/{installer-DR7izkMG.js → installer-BdG_mJUp.js} +1 -1
- package/dist/ui/assets/{interrupted-work-recovery-DKlfO3Dk.js → interrupted-work-recovery-niFgJlYA.js} +1 -1
- package/dist/ui/assets/{ipk-mamba-B7DsVAHB.js → ipk-mamba-DMPz0Na-.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-Dj6E7cem.js → js-realm-worker-Dt6CkC-q.js} +2 -2
- package/dist/ui/assets/{jsh-executor-DOTwZy5W.js → jsh-executor-m_BRqJJW.js} +2 -2
- package/dist/ui/assets/{kernel-worker-C6evRbt8.js → kernel-worker-Bejt-Ojz.js} +10 -10
- package/dist/ui/assets/{lick-ws-bridge-DEO3vHuX.js → lick-ws-bridge-DoT1E5ir.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-cpYoem5_.js → lick-ws-bridge-Nul1wz09.js} +1 -1
- package/dist/ui/assets/{live-session-curation-BM8tZX-r.js → live-session-curation-BKsScSRB.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-C2NMVRMF.js → live-session-snapshot-6V9mPUM5.js} +1 -1
- package/dist/ui/assets/{local-llm-Cfh9VuPq.js → local-llm-C0NdLczW.js} +1 -1
- package/dist/ui/assets/{local-llm-z-cBJlKf.js → local-llm-DoZ2LiSE.js} +1 -1
- package/dist/ui/assets/{magick-wasm-agWGi-e0.js → magick-wasm-BL5NYmcE.js} +1 -1
- package/dist/ui/assets/{main-tEtVPbXh.js → main-DmLxMDGT.js} +3 -3
- package/dist/ui/assets/{main-cherry-CbQUCau8.js → main-cherry-C3pK2VKW.js} +1 -1
- package/dist/ui/assets/{memory-curation-seam-CjBglHNa.js → memory-curation-seam-B_5OPYdP.js} +1 -1
- package/dist/ui/assets/{memory-health-CPzWzT1P.js → memory-health-CRH2Blzq.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-DqWqBfwf.js → memory-write-execute-BfCExMYN.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-DCuPhNTk.js → merge-folded-cost-into-frozen-CoL4Bfzs.js} +1 -1
- package/dist/ui/assets/{mount-ydk0WHgG.js → mount-B3v77n4z.js} +3 -3
- package/dist/ui/assets/{mount-4dZRjkrQ.js → mount-TnWJttSG.js} +1 -1
- package/dist/ui/assets/{mount-bridge-client-Dz_UHbPE.js → mount-bridge-client-DkrmF1xh.js} +1 -1
- package/dist/ui/assets/{new-session-C5MEP_cK.js → new-session-C8MNLQeR.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-BVUK3GEs.js → oauth-bootstrap-BW3jawLe.js} +2 -2
- package/dist/ui/assets/{oauth-service-DP3Rx6V_.js → oauth-service-B_A2Hp66.js} +1 -1
- package/dist/ui/assets/{onboarding-orchestrator-DftSEsKa.js → onboarding-orchestrator-Ca5D3wWS.js} +1 -1
- package/dist/ui/assets/{openai-codex-fJtQGV69.js → openai-codex-B-c0ZWNV.js} +1 -1
- package/dist/ui/assets/{openai-codex-Cwz1FT-z.js → openai-codex-CMsdDz1G.js} +1 -1
- package/dist/ui/assets/{openrouter-rcqoBXaw.js → openrouter-B7Sm8SVp.js} +1 -1
- package/dist/ui/assets/{openrouter-DmEz5WxK.js → openrouter-ChF-ckvt.js} +1 -1
- package/dist/ui/assets/{openrouter-free-C5O97xvy.js → openrouter-free-D6PoJTox.js} +1 -1
- package/dist/ui/assets/{openrouter-free-DRw-DHQn.js → openrouter-free-F9UehDw-.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-Csq32wt2.js → openrouter-oauth-CWDz3gd8.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-C4uIzDcA.js → openrouter-oauth-ClC2jnRu.js} +1 -1
- package/dist/ui/assets/{opfs-mount-C0Lus0Cz.js → opfs-mount-mkZhMkc1.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-B9LenTR0.js → panel-rpc-handlers-BGopQTZk.js} +2 -2
- package/dist/ui/assets/{panelize-shell-Dzogbbfc.js → panelize-shell-RRJ2rlAy.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-D9D4FDIQ.js → pi-edit-execution-Cn6P8kEd.js} +1 -1
- package/dist/ui/assets/{port-bridge-client-B-l7cQTC.js → port-bridge-client-DvO4atpq.js} +1 -1
- package/dist/ui/assets/{provider-CTPdODd7.js → provider-BkkOFpKq.js} +1 -1
- package/dist/ui/assets/{provider-Do-gc4OB.js → provider-CFbeLwlx.js} +2 -2
- package/dist/ui/assets/{provider-settings-DzDdkFMx.js → provider-settings-Df1UWum6.js} +1 -1
- package/dist/ui/assets/provider-store-access-440PUQnq.js +1 -0
- package/dist/ui/assets/provider-store-access-ioP6z6ei.js +1 -0
- package/dist/ui/assets/{providers-1_CCXdq3.js → providers-DelYSiJM.js} +2 -2
- package/dist/ui/assets/{providers-BdG-aC29.js → providers-narfgv33.js} +1 -1
- package/dist/ui/assets/proxied-fetch-Ba8A2Dlh.js +1 -0
- package/dist/ui/assets/proxied-fetch-raw-CzaxeyeU.js +1 -0
- package/dist/ui/assets/proxy-error-BVzVNPvv.js +1 -0
- package/dist/ui/assets/{quick-llm-B07QXQ0s.js → quick-llm-t5wZbj0G.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-wC9VuVQf.js → realm-inprocess-DIZ0NkAs.js} +2 -2
- package/dist/ui/assets/{realm-unhandled-rejections-CEAHL08q.js → realm-unhandled-rejections-BIyM8soC.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-CuAh-NpD.js → realm-unhandled-rejections-DzT6eKFi.js} +1 -1
- package/dist/ui/assets/{recovery-screen-mPjIBgPH.js → recovery-screen-DvZoe1eu.js} +1 -1
- package/dist/ui/assets/{redirect-uri-CBCnYKsl.js → redirect-uri-DvNqGm3U.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-DTmUlQlW.js → remote-terminal-view-BeYl7akD.js} +2 -2
- package/dist/ui/assets/{require-guards-CyhsDWYg.js → require-guards-Du4bUc9R.js} +1 -1
- package/dist/ui/assets/{resolver-BjX48SSL.js → resolver-Cuxoosmc.js} +4 -4
- package/dist/ui/assets/{rest-ops-CLliBy-9.js → rest-ops-B4SFZmC5.js} +1 -1
- package/dist/ui/assets/{restore-BSMRZD-l.js → restore-B7CtAq9P.js} +1 -1
- package/dist/ui/assets/{run-CyMKLTKU.js → run-BBYfg5ni.js} +1 -1
- package/dist/ui/assets/run-BUXpkB7_.js +14 -0
- package/dist/ui/assets/{run-CM8a7Cc3.js → run-BVpDhce0.js} +1 -1
- package/dist/ui/assets/{run-C8OfqJcF.js → run-BySbsyjF.js} +2 -2
- package/dist/ui/assets/{run-CJfA-Obt.js → run-C2YgBAHx.js} +1 -1
- package/dist/ui/assets/{run-DMO7-CuA.js → run-DVDUpupT.js} +1 -1
- package/dist/ui/assets/{run-BSt_FVlm.js → run-DkUy3OHx.js} +2 -2
- package/dist/ui/assets/{run-KLXVoIYy.js → run-DpwgbNbp.js} +1 -1
- package/dist/ui/assets/{run-BoxCVicT.js → run-NrNIVu5b.js} +3 -3
- package/dist/ui/assets/{run-CjBpwwpL.js → run-VCYF-r1b.js} +1 -1
- package/dist/ui/assets/{screencapture-run-C3Y7V44Z.js → screencapture-run-DUAmyetz.js} +1 -1
- package/dist/ui/assets/{secrets-bridge-client-BiJrSKN9.js → secrets-bridge-client-Cxg_UIbw.js} +1 -1
- package/dist/ui/assets/{session-command-memory-D9pTlYAY.js → session-command-memory-CwZxueuC.js} +2 -2
- package/dist/ui/assets/{session-jsonl-AoJrx9pb.js → session-jsonl-B0APtun9.js} +1 -1
- package/dist/ui/assets/{session-jsonl-CJzYIghQ.js → session-jsonl-Bf2fgFhg.js} +1 -1
- package/dist/ui/assets/{session-search-index-qOmoZUJy.js → session-search-index-Cj0yWWuZ.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-BKACONdE.js → setup-feature-flags-remote-DobdVTx1.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-WWCUCy79.js → setup-model-catalog-D4LHaeXg.js} +1 -1
- package/dist/ui/assets/{shared-Crk4gYF8.js → shared-dvo4ZY2y.js} +1 -1
- package/dist/ui/assets/{signed-fetch-CwZ1-qSJ.js → signed-fetch-i5c9uHzg.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-L4eA7UKO.js → silent-renew-backoff-BUgLOZtF.js} +1 -1
- package/dist/ui/assets/slicc-version-CyiNVflt.js +1 -0
- package/dist/ui/assets/{snapshot-D4DlVVCr.js → snapshot-CxBYeic7.js} +1 -1
- package/dist/ui/assets/{snapshot-features-Cp2XSvVD.js → snapshot-features-D9YdXtgT.js} +1 -1
- package/dist/ui/assets/{soundscape-CcHroDUu.js → soundscape-VpddA9af.js} +1 -1
- package/dist/ui/assets/{speak-5UMXEj6t.js → speak-DU6xYfaW.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-ByfWs52B.js → sprinkle-manager-B23UQfKW.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-Dw0Oo-mB.js → sprinkle-renderer-D_eHK453.js} +1 -1
- package/dist/ui/assets/{ssh-ChyTtRdf.js → ssh-DYTFFLnN.js} +1 -1
- package/dist/ui/assets/{state-BPcLy39T.js → state-BEL8NQ3N.js} +1 -1
- package/dist/ui/assets/{store-BA5jRQLQ.js → store-C8pkV9xX.js} +1 -1
- package/dist/ui/assets/{store-BCOFBOmf.js → store-Ce8lHof4.js} +1 -1
- package/dist/ui/assets/{sudo-CZL3U0lj.js → sudo-Dz77pSRv.js} +1 -1
- package/dist/ui/assets/{supervisor-n5AQXVdz.js → supervisor-CODgsiun.js} +1 -1
- package/dist/ui/assets/{sync-dialog-CLv-AjS5.js → sync-dialog-DEd-6_ea.js} +1 -1
- package/dist/ui/assets/{transformers-env-DuP48CFD.js → transformers-env-DDxx-_yr.js} +1 -1
- package/dist/ui/assets/{tray-leader-oK24Tenu.js → tray-leader-PwhN5FVH.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-BtmhGDJl.js → tray-leave-runtime-BLeKsvgA.js} +1 -1
- package/dist/ui/assets/{tray-runtime-config-CTm013-K.js → tray-runtime-config-CEuo4NwB.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-x9PQcB2n.js → tray-sidecar-B5Rwvi0w.js} +1 -1
- package/dist/ui/assets/{turn-journal-CScxev4H.js → turn-journal-DgrDAXyz.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-DS5evAII.js → upgrade-detection-DkrC9knp.js} +1 -1
- package/dist/ui/assets/{upskill-lick-skip-DsgHyVv5.js → upskill-lick-skip-x-HPkkoo.js} +1 -1
- package/dist/ui/assets/{voice-reply-ebSU1_qk.js → voice-reply-DN-og12Q.js} +1 -1
- package/dist/ui/assets/{wc-attach-525SvDTY.js → wc-attach-BxBMMvBD.js} +2 -2
- package/dist/ui/assets/{wc-browser-BWykEy-8.js → wc-browser-Bx_tyqby.js} +1 -1
- package/dist/ui/assets/{wc-computers-D3Avqz55.js → wc-computers--Hh_a1eS.js} +1 -1
- package/dist/ui/assets/{wc-detached-Cy1E6He4.js → wc-detached-Cfb7cdsS.js} +1 -1
- package/dist/ui/assets/{wc-extension-CVhWXV2w.js → wc-extension-DtmFrIBz.js} +2 -2
- package/dist/ui/assets/{wc-follower-C1kJ0lF_.js → wc-follower-CY8MJG2d.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-qqfI5zJ5.js → wc-follower-oauth-Qp2Onk42.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-DFV5mBJW.js → wc-gelatiere-CIqpoRvp.js} +1 -1
- package/dist/ui/assets/{wc-live-Eu6ghZAo.js → wc-live-kIulpDGT.js} +5 -5
- package/dist/ui/assets/{wc-nav-BJ1Fg_hB.js → wc-nav-CKLAJB62.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-D_k6jMGA.js → wc-onboarding-CCfbxIFk.js} +2 -2
- package/dist/ui/assets/{wc-permissions-CbwZeya-.js → wc-permissions-gkkaKIYQ.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-DzHKpyEK.js → wc-placeholder-CPbGysCM.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-bOcP6m9U.js → wc-secret-request-C-t_JIqx.js} +1 -1
- package/dist/ui/assets/{wc-settings-BNekAbpv.js → wc-settings-C3gOS2HO.js} +3 -3
- package/dist/ui/assets/{wc-shell-DdE40qZj.js → wc-shell-C5TUWPbD.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-KdvTJp27.js → wc-shortcut-config-CxyrO44G.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-Bnnb88mU.js → wc-sprinkles-CdV_-XON.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-DWOEgP2-.js → wc-transcript-export-uviFziTO.js} +2 -2
- package/dist/ui/assets/{wc-tray-Dpx-EoMd.js → wc-tray-C_LlCq8n.js} +4 -4
- package/dist/ui/assets/welcome-detection-62JgQjpE.js +1 -0
- package/dist/ui/assets/{whisper-session-CB6rG-eD.js → whisper-session-DpmN2H-S.js} +2 -2
- package/dist/ui/assets/{xai-grok-CuIlQYpM.js → xai-grok-DqHHYruF.js} +1 -1
- package/dist/ui/assets/{xai-grok-BGPDFi9z.js → xai-grok-Qkm8D-bR.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-lcwLWMKp.js +0 -1
- package/dist/ui/assets/provider-store-access-BbvRUwZT.js +0 -1
- package/dist/ui/assets/provider-store-access-CrrW9eCi.js +0 -1
- package/dist/ui/assets/proxied-fetch-DXaTHROw.js +0 -1
- package/dist/ui/assets/run-Y1uUJvV7.js +0 -14
- package/dist/ui/assets/slicc-version-jRBuHQmT.js +0 -1
- package/dist/ui/assets/welcome-detection-BdEfH_d7.js +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{d as l,f as u,i as d,u as f}from"./account-store-CwNcf5Wq.js";import{n as p,o as m,r as h,s as g,u as _}from"./proxied-fetch-DXaTHROw.js";import{t as v}from"./runtime-env-DadgceZk.js";import{t as ee}from"./slugify-BYJ6QVAt.js";import{n as te,t as ne}from"./host-command-guuPK7VN.js";import{a as re,i as ie,n as ae,r as oe,t as se}from"./snapshot-D4DlVVCr.js";import{i as ce,r as y}from"./panel-rpc-DW7W4w6_.js";import{a as le,c as ue,n as de,o as fe,s as pe,t as me}from"./feature-flags-QlgHaQc1.js";import{t as he}from"./providers-BdG-aC29.js";import{r as ge}from"./binary-cache-bSOhqXB1.js";import{i as _e,n as ve,r as ye}from"./fetch-body-CuwTaJC_.js";import{s as be,t as xe}from"./api-endpoint-D8lUKmPu.js";import{t as Se}from"./compat-uEPf6-XW.js";import{a as Ce,i as we}from"./core-C7UGykIC.js";import{n as Te,t as Ee}from"./mime-types-D7IV6i7k.js";import{t as De}from"./secrets-bridge-client-BiJrSKN9.js";import{a as Oe,i as ke,n as Ae,r as je}from"./tool-ui-DRnUkp2g.js";import{a as Me,i as Ne,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as Pe,r as Fe,t as Ie}from"./merge-file-core-VJlzucJY.js";import{r as Le}from"./workspace-mode-D0kUKBVS.js";import{n as Re,t as ze}from"./thinking-level-5x0UAu9N.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-CwZ1-qSJ.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-ZnsLbva1.js";import{a as Qe}from"./tray-leader-status-CpkFr6n7.js";import{n as $e,t as et}from"./slicc-version-jRBuHQmT.js";import{a as tt,i as nt,o as rt,r as S,t as it}from"./browser-CezNe0PF.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-D0tJNxsl.js";import{d as ct,g as lt,i as ut,n as dt,o as ft}from"./sudoers-BdBYQPUn.js";import{n as pt,r as mt,t as ht}from"./approval-timeout-BQ29Z0gf.js";import{a as gt,c as _t,i as vt,l as yt,n as bt,o as xt,r as St,t as Ct}from"./types-BfwydWt7.js";import{n as T,t as wt}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as Tt}from"./html-B_Hg2WOy.js";import{n as Et}from"./llm-session-id-BZyXP_j2.js";import{t as Dt}from"./src-CUSndb9K.js";import{i as Ot,o as kt}from"./browser-DuyhpHbR.js";import{i as At,r as jt,t as Mt}from"./mount-picker-popup-BMils9JY.js";import{t as Nt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Pt,B as E,C as Ft,D,E as It,F as Lt,G as Rt,H as O,I as k,J as zt,K as Bt,L as Vt,M as Ht,N as Ut,O as Wt,P as Gt,R as Kt,S as qt,T as Jt,U as Yt,V as Xt,W as Zt,Y as Qt,_ as $t,a as en,b as tn,c as nn,d as rn,f as an,g as on,h as sn,i as cn,j as ln,k as un,l as dn,m as fn,n as pn,o as mn,p as A,q as hn,r as gn,s as _n,t as vn,u as yn,v as bn,w as xn,x as Sn,y as Cn,z as wn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as Tn,_ as En,a as Dn,b as On,c as kn,d as An,f as jn,g as Mn,h as Nn,i as Pn,l as Fn,n as In,o as Ln,p as Rn,r as zn,s as Bn,t as Vn,u as Hn,v as j,x as M,y as Un}from"./state-BPcLy39T.js";import{a as Wn,i as Gn,r as Kn,t as qn}from"./git-config-Bdgu8kD2.js";import{i as Jn,p as Yn,r as Xn}from"./stdio-tty-uIuGda2o.js";import{i as Zn,r as Qn}from"./global-prefix-DqCuANmV.js";import{t as $n}from"./wasm-programs-CsoF9Lrt.js";import{a as er,n as tr,o as nr,r as rr,s as ir}from"./jsh-discovery-CnvNKojr.js";import{a as ar,n as or,t as sr}from"./resolver-BjX48SSL.js";import{_ as cr,a as lr,b as ur,d as dr,f as fr,g as pr,h as mr,i as hr,l as gr,m as _r,p as vr,r as yr,s as br,u as xr,v as Sr,x as Cr,y as wr}from"./require-guards-CyhsDWYg.js";import{a as Tr,c as Er,d as Dr,f as Or,h as kr,i as Ar,l as jr,m as Mr,n as Nr,o as Pr,p as Fr,r as Ir,s as Lr,t as N,u as Rr,v as zr}from"./shared-Crk4gYF8.js";import{_ as Br,a as Vr,b as Hr,c as Ur,d as Wr,f as Gr,g as Kr,h as qr,l as Jr,m as Yr,n as Xr,p as Zr,s as Qr,t as $r,u as ei,v as ti,x as ni,y as ri}from"./jsh-executor-DOTwZy5W.js";import{n as ii,t as ai}from"./esbuild-wasm-DIcMVR3g.js";import{n as oi}from"./wasm-compiler-Ct7QZURL.js";import{a as si,o as ci,s as li,t as ui}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as di,r as fi,t as pi}from"./just-bash-compat-B-SPHuh_.js";import{i as mi,r as hi,t as gi}from"./script-catalog-1QnOA1GQ.js";import{a as _i,c as vi,o as yi,s as bi,t as xi}from"./types-Dzr0qYl3.js";import{a as Si,c as Ci,d as wi,f as Ti,n as Ei,r as Di,u as Oi}from"./github-zip-BKesEE7T.js";import{i as ki,t as Ai}from"./github-auth-DPBopdHy.js";import{a as ji,i as Mi,o as Ni,r as Pi,t as Fi}from"./provenance-DdmsQ3Nr.js";import{a as Ii,c as Li,i as Ri,n as zi,o as Bi,r as Vi,s as Hi}from"./github-install-Dlx1x9oP.js";import{n as Ui,t as Wi}from"./magick-wasm-agWGi-e0.js";import{i as Gi,n as Ki,r as qi,t as Ji}from"./pdf-raster-BWk6ezTX.js";import{n as Yi}from"./lick-target-env-8JxfVcIV.js";import{t as Xi}from"./tmpdir-env-ate4iNcK.js";import{n as Zi,t as Qi}from"./hf-defaults-BwJdGLgk.js";import{t as $i}from"./ffmpeg-wasm-B5jofhIa.js";import{t as ea}from"./local-llm-Cfh9VuPq.js";import{t as ta}from"./client-CwxmlQM-.js";import{t as na}from"./redirect-uri-CBCnYKsl.js";import{i as ra,n as ia,r as aa,t as oa}from"./tar-BWIPCxI2.js";import{a as sa,c as ca,i as la,o as ua,r as da,s as fa}from"./v86-vm-DCm7zA2r.js";import{n as pa,r as ma}from"./lick-urls-CgPiVwD-.js";let ha=null;function ga(e){ha=e!==null&&Number.isFinite(e)&&e>0?e:null}function _a(){if(ha!==null)return ha;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const va=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function ya(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=va.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 ba(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 xa(e,t){return e.some(e=>ba(e,t))}const Sa=`slicc-transcript`,Ca=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],wa=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 Ta(e){return wa.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Ea=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Da=new Set(Ca),Oa=/^[0-9a-fA-F]{64}$/,ka=/^\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 Aa(e){return typeof e==`string`&&Oa.test(e)}function ja(e){return ka.test(e)&&Number.isFinite(Date.parse(e))}function Ma(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 Na(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ma(n,t)}:{ok:!0}}function Pa(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 Fa(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 Ia(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Na(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?Fa(e,t):n}function La(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 Ra(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function za(e,t){let n=La(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Ra(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ba(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`?ja(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 Va(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 Ha(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?za(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function Ua(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Na(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Va(e,t);if(!n.ok)return n}let r=Ba(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=Pa(i,Ia,`${t}.content`);return a.ok?Ha(e,t):a}function Wa(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=Na(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Pa(r,Ua,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Ga(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 Ka(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`}:Aa(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 qa=[`attachment-file-missing`,`attachment-association-unavailable`];function Ja(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Na(e.missingReason,qa,`${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 Ya(e,t){return e.present?Ka(e,t):Ja(e,t)}function Xa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ga(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=Na(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ya(e,t):r}function Za(e,t){let n=Na(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=Na(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?Za(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function $a(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 eo(e,t){return typeof e!=`string`||!Da.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function to(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 no(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Na(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Pa(e.missing,eo,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function ro(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=Na(e.state,[`active`,`frozen`],`session.state`);return t.ok?no(e.completeness):t}function io(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)?Pa(n,Qa,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function ao(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Pa(t,Wa,`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=Pa(r,$a,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Pa(a,Xa,`attachments`):{ok:!1,error:`attachments must be an array`}}function oo(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 so(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 co(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 lo(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 co(e))t.add(n)}return t}function uo(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 fo(e){return uo(e,lo(e))}function po(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 mo(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=po(e,t);if(!r.ok)return r}}return{ok:!0}}function ho(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return mo(e,n)}function go(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 _o(e,t){let n=go(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 vo(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(co(e)))}return t}function yo(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 bo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return yo(e,n,vo(t))}function xo(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 So(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=xo(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function Co(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=oo(t);if(!o.ok)return o;let s=so(t);if(!s.ok)return s;let c=fo(t);if(!c.ok)return c;let l=ho(t,n);if(!l.ok)return l;let u=_o(n,t);if(!u.ok)return u;let d=bo(r,t);return d.ok?So(a,n):d}function wo(e){let t=ao(e);return t.ok?Co(e):t}function To(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=to(e.export);if(!t.ok)return t;let n=ro(e.session);if(!n.ok)return n;let r=io(e.privacy);return r.ok?wo(e):r}async function Eo(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:Do(a),sourceUrl:a}}function Do(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Oo=`slicc-sprinkle-routes`;function ko(){try{let e=localStorage.getItem(Oo);return e?JSON.parse(e):{}}catch{return{}}}function Ao(e){try{localStorage.setItem(Oo,JSON.stringify(e))}catch{}}function jo(e){return ko()[e]}function Mo(e,t){let n=ko();n[e]=t,Ao(n)}function No(e){let t=ko();delete t[e],Ao(t)}function Po(){return ko()}function Fo(e,t,n){return _t(t,n,`${e} adapter does not implement ${t}.${n}`)}function Io(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(Fo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Lo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Io(t,`browser`,bt,e.browser),network:Io(t,`network`,gt,e.network),secrets:Io(t,`secrets`,xt,e.secrets),devices:Io(t,`devices`,St,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Io(t,`mounts`,vt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Io(t,`approvals`,Ct,e.approvals)}}function Ro(e={}){return Lo({adapter:`connect`,pageGestures:e.pageGestures})}function zo(e){let t=wt(()=>import(`./extension-ops-CF2mLDRW.js`).then(t=>t.createExtensionOps(e)));return Lo({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 Bo(e={}){let t=wt(()=>import(`./rest-ops-CLliBy-9.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Lo({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 Vo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Bo({pageGestures:n});case`extension-direct`:case`extension-delegate`:return zo({adapter:e,pageGestures:n});case`connect`:return Ro({pageGestures:n})}}const Ho=e(`quick-llm`);async function Uo(e){let t=d();if(!t)return Ho.debug(`No API key for active provider — skipping`),null;let n=u(),r=l(),i;if(i=e.modelId?qo(n,e.modelId)??qo(n,r):Wo(n,r),!i)return Ho.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`]=Jo());try{let n=(await Se(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 Ho.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Wo(e,t){let n=f(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Ko(r.id),a=n.filter(e=>Go(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Go(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 Ko(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 qo(e,t){return f(e).find(e=>e.id===t)}function Jo(){return Et(`ui-quick-llm`)}const Yo=e(`sudo-suggest`),Xo=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
|
|
1
|
+
import{t as e}from"./logger-LESFN7Hj.js";import{r as t,t as n}from"./base64-BPBW1Gzr.js";import{n as r}from"./bridge-protocol-31SWTdS5.js";import{a as i,n as a,o,s,t as c}from"./handoff-link-B3It6xQY.js";import{d as l,f as u,i as d,u as f}from"./account-store-DdclMpWp.js";import{n as p,o as m,r as h,s as g,u as _}from"./proxied-fetch-Ba8A2Dlh.js";import{t as v}from"./runtime-env-DadgceZk.js";import{t as ee}from"./slugify-BYJ6QVAt.js";import{n as te,t as ne}from"./host-command-guuPK7VN.js";import{a as re,i as ie,n as ae,r as oe,t as se}from"./snapshot-CxBYeic7.js";import{i as ce,r as y}from"./panel-rpc-DW7W4w6_.js";import{a as le,c as ue,n as de,o as fe,s as pe,t as me}from"./feature-flags-QlgHaQc1.js";import{t as he}from"./providers-narfgv33.js";import{r as ge}from"./binary-cache-bSOhqXB1.js";import{i as _e,n as ve,r as ye}from"./fetch-body-CuwTaJC_.js";import{s as be,t as xe}from"./api-endpoint-D8lUKmPu.js";import{t as Se}from"./compat-uEPf6-XW.js";import{a as Ce,i as we}from"./core-DZ0CleVD.js";import{n as Te,t as Ee}from"./mime-types-D7IV6i7k.js";import{t as De}from"./secrets-bridge-client-Cxg_UIbw.js";import{a as Oe,i as ke,n as Ae,r as je}from"./tool-ui-DRnUkp2g.js";import{a as Me,i as Ne,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as Pe,r as Fe,t as Ie}from"./merge-file-core-VJlzucJY.js";import{r as Le}from"./workspace-mode-D0kUKBVS.js";import{n as Re,t as ze}from"./thinking-level-5x0UAu9N.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-i5c9uHzg.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-CIR1p_m7.js";import{a as Qe}from"./tray-leader-status-CpkFr6n7.js";import{n as $e,t as et}from"./slicc-version-CyiNVflt.js";import{a as tt,i as nt,o as rt,r as S,t as it}from"./browser-CezNe0PF.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-D0tJNxsl.js";import{d as ct,g as lt,i as ut,n as dt,o as ft}from"./sudoers-BdBYQPUn.js";import{n as pt,r as mt,t as ht}from"./approval-timeout-BQ29Z0gf.js";import{a as gt,c as _t,i as vt,l as yt,n as bt,o as xt,r as St,t as Ct}from"./types-BfwydWt7.js";import{n as T,t as wt}from"./boundary-Cp9c_bPu.js";import"./rest-paths-Dia19u9P.js";import{t as Tt}from"./html-B_Hg2WOy.js";import{n as Et}from"./llm-session-id-BZyXP_j2.js";import{t as Dt}from"./src-CUSndb9K.js";import{i as Ot,o as kt}from"./browser-DuyhpHbR.js";import{i as At,r as jt,t as Mt}from"./mount-picker-popup-BMils9JY.js";import{t as Nt}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as Pt,B as E,C as Ft,D,E as It,F as Lt,G as Rt,H as O,I as k,J as zt,K as Bt,L as Vt,M as Ht,N as Ut,O as Wt,P as Gt,R as Kt,S as qt,T as Jt,U as Yt,V as Xt,W as Zt,Y as Qt,_ as $t,a as en,b as tn,c as nn,d as rn,f as an,g as on,h as sn,i as cn,j as ln,k as un,l as dn,m as fn,n as pn,o as mn,p as A,q as hn,r as gn,s as _n,t as vn,u as yn,v as bn,w as xn,x as Sn,y as Cn,z as wn}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as Tn,_ as En,a as Dn,b as On,c as kn,d as An,f as jn,g as Mn,h as Nn,i as Pn,l as Fn,n as In,o as Ln,p as Rn,r as zn,s as Bn,t as Vn,u as Hn,v as j,x as M,y as Un}from"./state-BEL8NQ3N.js";import{a as Wn,i as Gn,r as Kn,t as qn}from"./git-config-Bdgu8kD2.js";import{i as Jn,p as Yn,r as Xn}from"./stdio-tty-uIuGda2o.js";import{i as Zn,r as Qn}from"./global-prefix-DqCuANmV.js";import{t as $n}from"./wasm-programs-CsoF9Lrt.js";import{a as er,n as tr,o as nr,r as rr,s as ir}from"./jsh-discovery-CnvNKojr.js";import{a as ar,n as or,t as sr}from"./resolver-Cuxoosmc.js";import{_ as cr,a as lr,b as ur,d as dr,f as fr,g as pr,h as mr,i as hr,l as gr,m as _r,p as vr,r as yr,s as br,u as xr,v as Sr,x as Cr,y as wr}from"./require-guards-Du4bUc9R.js";import{a as Tr,c as Er,d as Dr,f as Or,h as kr,i as Ar,l as jr,m as Mr,n as Nr,o as Pr,p as Fr,r as Ir,s as Lr,t as N,u as Rr,v as zr}from"./shared-dvo4ZY2y.js";import{_ as Br,a as Vr,b as Hr,c as Ur,d as Wr,f as Gr,g as Kr,h as qr,l as Jr,m as Yr,n as Xr,p as Zr,s as Qr,t as $r,u as ei,v as ti,x as ni,y as ri}from"./jsh-executor-m_BRqJJW.js";import{n as ii,t as ai}from"./esbuild-wasm-llEEkCQu.js";import{n as oi}from"./wasm-compiler-Ct7QZURL.js";import{a as si,o as ci,s as li,t as ui}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as di,r as fi,t as pi}from"./just-bash-compat-B-SPHuh_.js";import{i as mi,r as hi,t as gi}from"./script-catalog-1QnOA1GQ.js";import{a as _i,c as vi,o as yi,s as bi,t as xi}from"./types-Dzr0qYl3.js";import{a as Si,c as Ci,d as wi,f as Ti,n as Ei,r as Di,u as Oi}from"./github-zip-nn7aW2E1.js";import{i as ki,t as Ai}from"./github-auth-CgSRRmdA.js";import{a as ji,i as Mi,o as Ni,r as Pi,t as Fi}from"./provenance-DdmsQ3Nr.js";import{a as Ii,c as Li,i as Ri,n as zi,o as Bi,r as Vi,s as Hi}from"./github-install-BV6F_EyI.js";import{n as Ui,t as Wi}from"./magick-wasm-BL5NYmcE.js";import{i as Gi,n as Ki,r as qi,t as Ji}from"./pdf-raster-BWk6ezTX.js";import{n as Yi}from"./lick-target-env-8JxfVcIV.js";import{t as Xi}from"./tmpdir-env-ate4iNcK.js";import{n as Zi,t as Qi}from"./hf-defaults-BwJdGLgk.js";import{t as $i}from"./ffmpeg-wasm-DGDKCZ27.js";import{t as ea}from"./local-llm-C0NdLczW.js";import{t as ta}from"./client-dISfU5Wf.js";import{t as na}from"./redirect-uri-DvNqGm3U.js";import{i as ra,n as ia,r as aa,t as oa}from"./tar-BWIPCxI2.js";import{a as sa,c as ca,i as la,o as ua,r as da,s as fa}from"./v86-vm-DCm7zA2r.js";import{n as pa,r as ma}from"./lick-urls-CgPiVwD-.js";let ha=null;function ga(e){ha=e!==null&&Number.isFinite(e)&&e>0?e:null}function _a(){if(ha!==null)return ha;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const va=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function ya(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=va.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 ba(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 xa(e,t){return e.some(e=>ba(e,t))}const Sa=`slicc-transcript`,Ca=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],wa=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 Ta(e){return wa.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Ea=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const Da=new Set(Ca),Oa=/^[0-9a-fA-F]{64}$/,ka=/^\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 Aa(e){return typeof e==`string`&&Oa.test(e)}function ja(e){return ka.test(e)&&Number.isFinite(Date.parse(e))}function Ma(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 Na(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Ma(n,t)}:{ok:!0}}function Pa(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 Fa(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 Ia(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Na(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?Fa(e,t):n}function La(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 Ra(e,t){for(let n of[`input`,`output`,`cacheRead`,`cacheWrite`,`total`]){let r=e[n];if(typeof r!=`number`)return{ok:!1,error:`${t}.${n} must be a number`};if(!Number.isFinite(r)||r<0)return{ok:!1,error:`${t}.${n} must be a finite non-negative number`}}return{ok:!0}}function za(e,t){let n=La(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Ra(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ba(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`?ja(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 Va(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 Ha(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?za(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function Ua(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Na(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Va(e,t);if(!n.ok)return n}let r=Ba(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=Pa(i,Ia,`${t}.content`);return a.ok?Ha(e,t):a}function Wa(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=Na(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Pa(r,Ua,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function Ga(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 Ka(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`}:Aa(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 qa=[`attachment-file-missing`,`attachment-association-unavailable`];function Ja(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Na(e.missingReason,qa,`${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 Ya(e,t){return e.present?Ka(e,t):Ja(e,t)}function Xa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Ga(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=Na(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Ya(e,t):r}function Za(e,t){let n=Na(e.kind,[`json`,`attachment`],`${t}.kind`);if(!n.ok)return n;if(e.kind===`json`){if(typeof e.pointer!=`string`)return{ok:!1,error:`${t}.pointer must be a string`};let n=e.pointer;if(n!==``&&!n.startsWith(`/`))return{ok:!1,error:`${t}.pointer must be a valid RFC 6901 JSON pointer`}}else if(typeof e.attachmentId!=`string`||e.attachmentId===``)return{ok:!1,error:`${t}.attachmentId must be a non-empty string`};return{ok:!0}}function Qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};if(typeof e.id!=`string`)return{ok:!1,error:`${t}.id must be a string`};if(typeof e.category!=`string`)return{ok:!1,error:`${t}.category must be a string`};let n=Na(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?Za(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function $a(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 eo(e,t){return typeof e!=`string`||!Da.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function to(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 no(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Na(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Pa(e.missing,eo,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function ro(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=Na(e.state,[`active`,`frozen`],`session.state`);return t.ok?no(e.completeness):t}function io(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)?Pa(n,Qa,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function ao(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Pa(t,Wa,`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=Pa(r,$a,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Pa(a,Xa,`attachments`):{ok:!1,error:`attachments must be an array`}}function oo(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 so(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 co(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 lo(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 co(e))t.add(n)}return t}function uo(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 fo(e){return uo(e,lo(e))}function po(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 mo(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=po(e,t);if(!r.ok)return r}}return{ok:!0}}function ho(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return mo(e,n)}function go(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 _o(e,t){let n=go(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 vo(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(co(e)))}return t}function yo(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 bo(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return yo(e,n,vo(t))}function xo(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 So(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=xo(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function Co(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=oo(t);if(!o.ok)return o;let s=so(t);if(!s.ok)return s;let c=fo(t);if(!c.ok)return c;let l=ho(t,n);if(!l.ok)return l;let u=_o(n,t);if(!u.ok)return u;let d=bo(r,t);return d.ok?So(a,n):d}function wo(e){let t=ao(e);return t.ok?Co(e):t}function To(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=to(e.export);if(!t.ok)return t;let n=ro(e.session);if(!n.ok)return n;let r=io(e.privacy);return r.ok?wo(e):r}async function Eo(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:Do(a),sourceUrl:a}}function Do(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Oo=`slicc-sprinkle-routes`;function ko(){try{let e=localStorage.getItem(Oo);return e?JSON.parse(e):{}}catch{return{}}}function Ao(e){try{localStorage.setItem(Oo,JSON.stringify(e))}catch{}}function jo(e){return ko()[e]}function Mo(e,t){let n=ko();n[e]=t,Ao(n)}function No(e){let t=ko();delete t[e],Ao(t)}function Po(){return ko()}function Fo(e,t,n){return _t(t,n,`${e} adapter does not implement ${t}.${n}`)}function Io(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(Fo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function Lo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Io(t,`browser`,bt,e.browser),network:Io(t,`network`,gt,e.network),secrets:Io(t,`secrets`,xt,e.secrets),devices:Io(t,`devices`,St,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Io(t,`mounts`,vt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Io(t,`approvals`,Ct,e.approvals)}}function Ro(e={}){return Lo({adapter:`connect`,pageGestures:e.pageGestures})}function zo(e){let t=wt(()=>import(`./extension-ops-CEprwZyb.js`).then(t=>t.createExtensionOps(e)));return Lo({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 Bo(e={}){let t=wt(()=>import(`./rest-ops-B4SFZmC5.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return Lo({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 Vo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Bo({pageGestures:n});case`extension-direct`:case`extension-delegate`:return zo({adapter:e,pageGestures:n});case`connect`:return Ro({pageGestures:n})}}const Ho=e(`quick-llm`);async function Uo(e){let t=d();if(!t)return Ho.debug(`No API key for active provider — skipping`),null;let n=u(),r=l(),i;if(i=e.modelId?qo(n,e.modelId)??qo(n,r):Wo(n,r),!i)return Ho.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`]=Jo());try{let n=(await Se(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 Ho.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Wo(e,t){let n=f(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Ko(r.id),a=n.filter(e=>Go(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function Go(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 Ko(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 qo(e,t){return f(e).find(e=>e.id===t)}function Jo(){return Et(`ui-quick-llm`)}const Yo=e(`sudo-suggest`),Xo=[`You generalize a single shell command into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the leading command/sub-command verbatim and replace only`,`the volatile tail (args, paths, refs) with a single trailing "*".`,`Examples:`,` git push origin main -> git push*`,` rm -rf build/cache -> rm -rf*`,` npm install left-pad -> npm install*`].join(`
|
|
2
2
|
`),Zo=[`You generalize a single filesystem path into a minimal glob pattern for an`,`allow-list rule. Output ONLY the pattern on one line — no prose, no quotes,`,`no backticks. Keep the meaningful directory prefix and replace the volatile`,`leaf (and below) with "**". Examples:`,` /workspace/.git/config -> /workspace/.git/**`,` /shared/secrets/openai.key -> /shared/secrets/**`,` /workspace/src/app/main.ts -> /workspace/src/**`].join(`
|
|
3
3
|
`);async function Qo(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim(),r=e.kind===`command`?Xo:Zo,i=null;try{i=await Uo({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){Yo.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return $o(i)||n}function $o(e){if(!e)return null;let t=(e.split(`
|
|
4
4
|
`,1)[0]?.trim()??``).replace(/^`+/,``).replace(/`+$/,``).replace(/^["']/,``).replace(/["']$/,``).trim();return t.length===0?null:t}const es=e(`sudo:capability-gesture`);function ts(e,t={}){let n=t.suggest??Qo;return{async requestApproval(t,r){let i=r?.signal,a;if(t.suggestedPattern)a=t.suggestedPattern;else try{a=await n(t,i)}catch{a=t.detail}if(i?.aborted)return es.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),{decision:`deny`};if(!e)return es.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),{decision:`deny`};let o=await e.approvals.request({kind:t.kind,detail:t.detail,suggestedPattern:a,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{},...i?{signal:i}:{}});return o.ok?yt(o.value,a):(es.warn(`capability broker approvals.request failed — denying`,{message:o.message}),{decision:`deny`})}}}const ns=e(`sudo:tray-first`);function rs(e,t={}){let n=t.suggest??Qo,r=t.timeoutMs??6e5,i=t.getClient??(async()=>{let{getPanelRpcClient:e}=await import(`./panel-rpc-DW7W4w6_.js`).then(e=>e.a);return e()});return{async requestApproval(t,a){if(a?.signal?.aborted)return{decision:`deny`};let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){ns.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 is(e?.decision,o)}catch(e){ns.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}function is(e,t){if(!e||typeof e!=`object`)return{decision:`deny`};let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;return n.decision===`allow`?{decision:`allow`,...r?{attestation:r}:{}}:n.decision===`always`?{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}}:{decision:`deny`}}function as(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function os(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var ss=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??os,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(pt(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function cs(e){return mt(ls(e))}function ls(e){let t=ts(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:rs(t)}let us=null;function ds(e){return us=e,()=>{us===e&&(us=null)}}function fs(){if(!us)throw new Ea(`session-not-found`);return us}const ps=`focus`,ms={type:`leaf`,surfaceId:`chat`};function hs(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 gs={focus:{name:`focus`,tree:hs({left:ms},{left:3,middle:1})}};function _s(e){return gs[e]??null}const vs=`progress`;function ys(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}async function bs(){try{let e=await jt();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 Mt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await At(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function xs(){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 Ss(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 Mt(r.idbKey);if(!i)throw Error(`no directory handle found in storage`);return await At(i),i}function Cs(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 ws(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 Ts=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function Es(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;Ts.has(n)&&t++}return!1}function Ds(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var Os=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=Cs(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=Oe();if(!n){let n=await ks(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=ce()?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=v()?await bs():r?await Ss(r,e):await xs();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=ws(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 Eo(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`?Ds(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(Es(e))return n===`umount`?this.umountHelp():this.help();let r=Cs(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
|
|
@@ -279,7 +279,7 @@ Examples:
|
|
|
279
279
|
skill list
|
|
280
280
|
skill info bluebubbles
|
|
281
281
|
skill read bluebubbles
|
|
282
|
-
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-
|
|
282
|
+
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-Bejt-Ojz.js`).then(e=>e.r);try{switch(r){case`list`:return dh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
|
|
283
283
|
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:lh(r),stderr:``,exitCode:0}:{stdout:``,stderr:`skill: "${n}" not found\n`,exitCode:1}}case`read`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: read requires a skill name
|
|
284
284
|
`,exitCode:1};let r=await i.readSkillInstructions(e,n);return r===null?{stdout:``,stderr:`skill: no SKILL.md found for "${n}"\n`,exitCode:1}:{stdout:r+`
|
|
285
285
|
`,stderr:``,exitCode:0}}default:return{stdout:``,stderr:`skill: unknown command "${r}"\n`,exitCode:1}}}catch(e){return{stdout:``,stderr:`skill: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const ph=[{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=>Ri(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 mh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=ph.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 hh(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}async function gh(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 _h(e,t,n,r){let i=await gh(e,t);return wi(n)?i?{status:`kept-local`,write:!1}:{status:`added`,write:!0}:i?hh(i,r)?{status:`unchanged`,write:!1}:{status:`updated`,write:!0}:{status:`added`,write:!0}}async function vh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await _h(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 Ti(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 yh(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 Ai(t),d=await Mi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await bh(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await xh(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 vh(e,`${_i}/${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 Eh(e,{changes:h,writes:g,removals:_}),await Ni(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 bh(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 xh(e,t,n,r,i,a,o){let s=await Di(e,t,a,i??`main`);if(s.status===`ok`){let i=Si(s.files),a=n||Sh(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:Th(i,a),path:a}}try{return{files:wh(Ch(await Ei(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 Sh(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 Ch(e){return new Map([...e].filter(([e])=>Ci(e)))}function wh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function Th(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);Ci(e)&&r.set(e,i)}return wh(r)}async function Eh(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 Dh(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 ih(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${_i}/${n}/SKILL.md`,u=await gh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&nh(new TextDecoder().decode(u))===nh(c.content);if(hh(u,d)||f)return{...a,changes:[{path:`SKILL.md`,status:`unchanged`}]};let p=u?`updated`:`added`;return i||(await e.mkdir(`${_i}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Ni(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function Oh(e,t){if(e.outcome===`error`)return` ${e.skill}: failed — ${e.error}\n`;let n=new Map;for(let t of e.changes)n.set(t.status,(n.get(t.status)??0)+1);let r=e.to&&e.to!==e.from?` → ${e.to.slice(0,7)}`:``;if(e.outcome===`current`)return` ${e.skill}: already current (${e.source}${r})\n`;let i=t?`would update`:`updated`,a=` ${e.skill}: ${i} from ${e.source}${r}\n`;for(let t of e.changes)t.status!==`unchanged`&&(a+=` ${t.status.padEnd(10)} ${t.path}\n`);let o=n.get(`kept-local`)??0;return o>0&&(a+=` (${o} kept-local — dotfiles and local additions are never touched)\n`),a}function kh(e,t,n,r){let i=Ri(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 Ah(e,t,n){if(t.length===0){let t=await ji(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await Pi(e,a);if(t){r.push({name:a,provenance:t});continue}if(!await e.exists(`/workspace/skills/${a}`)){i.push({name:a,reason:`not-installed`});continue}let o=n.from?kh(a,n.from,n.path,n.branch):null;o?r.push({name:a,provenance:o}):i.push({name:a,reason:`no-provenance`})}return{targets:r,missing:i,skipped:[]}}function jh(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
|
|
@@ -290,7 +290,7 @@ Examples:
|
|
|
290
290
|
`}function Ph(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
|
|
291
291
|
`:`Skill update:
|
|
292
292
|
`;for(let n of e)a+=Oh(n,t);if(i.length>0&&(a+=Nh(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${Mh(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 Fh(e,t,n){let{targets:r,missing:i,skipped:a}=await Ah(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 Dh(e,t,i.name,i.provenance,n.dryRun):await yh(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function Ih(e,t,n){let r=mh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await Fh(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`:Ph([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(jh).join(``):"upskill: no skill has install provenance yet — reinstall a skill, or run `upskill update <skill> --from <owner>/<repo>`, to record its source\n",exitCode:1};let s=i.filter(e=>e.outcome===`error`),c=i.some(e=>e.outcome===`updated`);c&&!r.dryRun&&await Li();let l=a.map(jh).join(``)+s.map(e=>`upskill: ${e.skill}: ${e.error}\n`).join(``),u=s.length===0&&a.length===0;return r.json?{stdout:`${JSON.stringify({ok:u,dryRun:r.dryRun,results:i,skipped:o})}\n`,stderr:l,exitCode:+!u}:{stdout:Ph(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function Lh(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 Rh(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 zh(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}${Rh(e)}`)}if(t.length>0){let e=t.length===1?`skill`:`skills`;r.push(``,`Skipped ${t.length} ${e} with no install provenance — not checked.`)}let i=e.filter(e=>e.outcome===`error`);if(i.length>0){let e=i.length===1?`skill`:`skills`;r.push(``,`Could not check ${i.length} ${e}:`);for(let e of i)r.push(` ${e.skill}: failed — ${e.error}`)}return`${r.join(`
|
|
293
|
-
`)}\n`}async function Bh(e,t,n){let r=await(await import(`./kernel-worker-
|
|
293
|
+
`)}\n`}async function Bh(e,t,n){let r=await(await import(`./kernel-worker-Bejt-Ojz.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await rr(e,er(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${oh()}`,stderr:``,exitCode:0}:{...ir(`upskill`,ch(r,`Discoverable local skills`),i,{builtinNames:new Set(rt())}),exitCode:0}}async function Vh(e,t,n){let{results:r,skipped:i}=await Fh(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:zh(r,i),stderr:c,exitCode:+!s}}async function Hh(e,t,n,r){let i=Lh(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?Vh(t,n,i.json):Bh(t,i.json,r)}async function Uh(e,t){let n=`${vi}/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(ki(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=_e(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=Ii(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 Wh(e,t){let n=`${vi}/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: ${ki(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=_e(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=Ii(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 Gh=[{label:`Tessl`,host:new URL(vi).host,fetch:Uh},{label:`browse.sh`,host:new URL(xi).host,fetch:Xm}];function Kh(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 qh(e,t,n=1){let r=await Promise.allSettled(Gh.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=Kh(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=Gh[e],r=t.reason instanceof Error?t.reason.message:String(t.reason);s+=`warning: ${n.label} registry unavailable (${n.host}): ${r}\n`}}if(o.length===0){let t=a?`${s}upskill: registries failed to respond\n`:s;return{stdout:`No skills found for "${e}"\n\nTry a different search term or browse the registries at https://tessl.io/registry or https://browse.sh\n`,stderr:t,exitCode:+!!a}}let c=o.length,l=Math.ceil(c/10),u=Math.max(1,Math.min(n,l)),d=(u-1)*10,f=o.slice(d,d+10),p=`Search results for "${e}" (page ${u}/${l}, ${c} total):\n\n`;for(let e of f){let t=e.qualityScore==null?` `:String(e.qualityScore).padStart(3),n=`[${e.source}]`,r=e.sourceRepo?` ${e.sourceRepo}`:``;p+=` ${e.name.padEnd(30)} ${t} ${n.padEnd(10)}${r}\n`,e.summary&&(p+=` ${e.summary}\n`),p+=`
|
|
294
294
|
`}return u<l&&(p+=`Showing ${d+1}-${d+f.length} of ${c}. `,p+=`Next page: upskill search ${e} --page ${u+1}\n\n`),p+=`To install:
|
|
295
295
|
`,p+=` From Tessl: upskill <owner/repo> --skill <name>
|
|
296
296
|
`,p+=` From browse.sh: upskill browse:<hostname>/<task>
|
|
@@ -313,7 +313,7 @@ Examples:
|
|
|
313
313
|
`,{stdout:s,stderr:``,exitCode:0}}function eg(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
|
|
314
314
|
`,exitCode:1}:i(e)?null:{stdout:``,stderr:`upskill: --branch must be a git ref of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", trailing "/" or ".lock", or shell metacharacters
|
|
315
315
|
`,exitCode:1}}function tg(e){let t={selectedSkills:[],listOnly:!1,installAll:!1,force:!1,sourceRef:``},n=0;for(;n<e.length;){let r=e[n];if(r===`--skill`)t.selectedSkills.push(e[++n]);else if(r===`--path`||r===`-p`){let r=e[++n];if(typeof r!=`string`||!o(r))return t.earlyReturn={stdout:``,stderr:`upskill: --path must be a repo-relative sub-path of [A-Za-z0-9._/-]+ with no "..", leading "-"/"/", or shell metacharacters
|
|
316
|
-
`,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=eg(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 ng(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-
|
|
316
|
+
`,exitCode:1},t;t.subPath=r}else if(r===`--list`)t.listOnly=!0;else if(r===`--all`)t.installAll=!0;else if(r===`--force`)t.force=!0;else if(r===`--branch`||r===`-b`){let r=eg(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 ng(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-Bejt-Ojz.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 Pi(n,t),a=i?Fi(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:lh(e)+a,stderr:``,exitCode:0}}let i=await r.readSkillInstructions(n,t);return i===null?{stdout:``,stderr:`upskill: no SKILL.md found for "${t}"\n`,exitCode:1}:{stdout:i+`
|
|
317
317
|
`,stderr:``,exitCode:0}}async function rg(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 Bi(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 ig(e,t,n,r,i,a,o,s){let c=``,l=``,u=0,d=e.length;for(let f=0;f<e.length;f++){let p=e[f],m=await zi(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 ag(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await zi(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 og(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 Ai(r),l=await Vi(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:og(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:og(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 Di(i,a,r,o);if(e.status===`ok`){let r=await Mi(i,a,o,c,!0,s),l=await rg(u,i,a,Si(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 ig(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await ag(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 Li()),{stdout:p,stderr:m,exitCode:+!!m}}async function cg(e,t,n,r,i){switch(e[0]){case`tabs`:return Qh(t,n,r,e.includes(`--json`));case`recommendations`:return $h(t,n,e.includes(`--install`));case`update`:case`upgrade`:return Ih(e.slice(1),t,n);case`list`:return Hh(e.slice(1),t,n,i);case`info`:case`read`:return ng(e[0],e[1],t);case`search`:return ug(e,n);default:return null}}function lg(e,t,n){return S(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return uh();let a=await cg(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=tg(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return uh();if(o.sourceRef.startsWith(`tessl:`))return dg(o.sourceRef,o.force,e,t);let s=$m(o.sourceRef);if(s)return ah(s.hostname,s.task,e,t,o.force);let c=Ri(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 ug(e,t){let n=[...e.slice(1)],r=n.indexOf(`--page`),i=1;r>=0&&(i=parseInt(n[r+1],10)||1,n.splice(r,2));let a=n.join(` `);return a?qh(a,t,i):uh()}async function dg(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
|
|
318
318
|
`,exitCode:1};let a=await Wh(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await Ai(r);return zi(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function fg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
|
|
319
319
|
|
|
@@ -627,7 +627,7 @@ Usage: cherry-emit <name> [--detail <json>] [--runtime <id>]
|
|
|
627
627
|
-o Force paste mode (write to stdout)
|
|
628
628
|
(default) Auto-detect: stdin present = copy, no stdin = paste
|
|
629
629
|
Example: echo hello | ${e}\n Example: ${e} -o > file.txt\n`,stderr:``,exitCode:0}}async function hv(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: ${dv(e)}\n`,exitCode:1}}}async function gv(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: ${dv(t)}\n`,exitCode:1}}}function _v(){return S(`pbcopy`,async(e,t)=>e.includes(`--help`)||e.includes(`-h`)?fv():hv(P(t.stdin),`pbcopy`))}function vv(){return S(`pbpaste`,async e=>e.includes(`--help`)||e.includes(`-h`)?pv():gv(`pbpaste`))}function yv(e){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return mv(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 gv(e);let a=P(n.stdin);return r||a.length>0?hv(a,e):gv(e)})}function bv(){return S(`cmp`,async(e,t)=>{let n=e.some(e=>e===`-s`||e===`--quiet`||e===`--silent`),r=e.filter(e=>![`-s`,`--quiet`,`--silent`].includes(e));if(r.length!==2||r.some(e=>e.startsWith(`-`)&&e!==`-`))return{stdout:``,stderr:`cmp: usage: cmp [-s|--quiet|--silent] FILE1 FILE2
|
|
630
|
-
`,exitCode:2};let i=await xv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await xv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=Sv(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 xv(e,t){if(t===`-`){let t=di(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 Sv(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 Cv(e={}){return S(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-
|
|
630
|
+
`,exitCode:2};let i=await xv(t,r[0]);if(`error`in i)return n?{...i.error,stderr:``}:i.error;let a=await xv(t,r[1]);if(`error`in a)return n?{...a.error,stderr:``}:a.error;let o=Sv(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 xv(e,t){if(t===`-`){let t=di(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 Sv(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 Cv(e={}){return S(`computer`,async(t,n)=>{let{runComputer:r}=await import(`./run-BySbsyjF.js`).then(e=>e.t);return r(t,n,e)})}var wv=`/assets/AdobeClean-Regular-CVsq5gF7.otf`;function Tv(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 Ev(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 Dv=`AdobeClean-Regular.otf`,Ov=new WeakSet;let kv=null;function Av(){return{stdout:`usage: convert [input ...] [operations...] [output]
|
|
631
631
|
|
|
632
632
|
Operations:
|
|
633
633
|
-resize GEOMETRY resize; supports %, !, ^, >, and < modifiers
|
|
@@ -707,7 +707,7 @@ Examples:
|
|
|
707
707
|
`;for(let n of e)t+=` ${n.id} ${n.name.padEnd(20)} ${n.cron.padEnd(15)}`,n.scoop&&(t+=` -> ${n.scoop}`),n.filter&&(t+=` [filtered]`),t+=` (${n.status})`,n.nextRun&&(t+=` next: ${new Date(n.nextRun).toLocaleString()}`),t+=`
|
|
708
708
|
`;return t}async function Sy(e,t){let n=C(e.slice(1),{});if(`error`in n)return yy(n.error);if(!t()){let e=await fy();if(!e)return hy(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
|
|
709
709
|
`,stderr:``,exitCode:0}:{stdout:xy(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await _y(`GET`,``);if(!r)return{stdout:``,stderr:`crontask: failed to list: ${i.error??`unknown error`}\n`,exitCode:1};let a=i;return a.length===0?{stdout:`No active cron tasks
|
|
710
|
-
`,stderr:``,exitCode:0}:{stdout:xy(a),stderr:``,exitCode:0}}async function Cy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return yy(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 fy();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}:hy(`delete`)}let{ok:a,status:o,data:s}=await _y(`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 wy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:vy}))return gy();try{switch(r){case`create`:return await by(e,n.env,t);case`list`:return await Sy(e,t);case`delete`:case`kill`:return await Cy(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 Ty(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-
|
|
710
|
+
`,stderr:``,exitCode:0}:{stdout:xy(a),stderr:``,exitCode:0}}async function Cy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return yy(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 fy();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}:hy(`delete`)}let{ok:a,status:o,data:s}=await _y(`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 wy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:vy}))return gy();try{switch(r){case`create`:return await by(e,n.env,t);case`list`:return await Sy(e,t);case`delete`:case`kill`:return await Cy(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 Ty(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-DVDUpupT.js`);return r(e,t,n)})}function Ey(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 Dy(e){return Ey(e,{si:!1})}const Oy=`slicc-fs`;async function ky(){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===Oy)}catch{return!0}}async function Ay(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(Oy)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function jy(){if(!await ky())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await Ay();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 My(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
|
|
711
711
|
|
|
712
712
|
Usage:
|
|
713
713
|
slicc-fs-cleanup Delete the legacy slicc-fs IDB.
|
|
@@ -902,7 +902,7 @@ Without --port, the Web Serial picker opens (asks for permission).
|
|
|
902
902
|
`)}\n`:`region erased
|
|
903
903
|
`)}case`run`:{let e=await hS(a,r);return await n.run(e,c,u),fS(l.length?`${l.join(`
|
|
904
904
|
`)}\n`:`running app
|
|
905
|
-
`)}default:return pS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function vS(){return S(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return fS(mS);let n=ce(),r=y(),i=Nx(n,r),a=Jr(n,r);if(!i||!a)return pS(`Web Serial is unavailable in this environment`);try{return await _S(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?pS(`user cancelled or no port selected`):pS(t)}})}function yS(){return S(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-
|
|
905
|
+
`)}default:return pS(`unknown subcommand '${i[0]??``}'. Try 'esptool --help'.`)}}function vS(){return S(`esptool`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return fS(mS);let n=ce(),r=y(),i=Nx(n,r),a=Jr(n,r);if(!i||!a)return pS(`Web Serial is unavailable in this environment`);try{return await _S(e,t,i,a)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No port selected/i.test(t)?pS(`user cancelled or no port selected`):pS(t)}})}function yS(){return S(`ffmpeg`,async(e,t)=>{let{runFfmpeg:n}=await import(`./run-C2YgBAHx.js`);return n(e,t)})}function bS(){return S(`ffprobe`,async(e,t)=>{let{runFfprobe:n}=await import(`./run-VCYF-r1b.js`);return n(e,t)})}function xS(e){let t=le().find(t=>t.id===e);return t?t.id:null}function SS(){return le().map(e=>e.id)}function CS(e){return de(e)}function wS(e,t){if(ue(e,t),pe()[e]!==t)throw Error(`flag ${e} cannot be overridden on this float`)}function TS(e){let t=globalThis.localStorage;if(!t||typeof t.setItem!=`function`)throw Error(`this realm has no localStorage to apply the override`);t.setItem(me,e)}const ES=`usage: flags set <id> on|off
|
|
906
906
|
flags get <id>
|
|
907
907
|
|
|
908
908
|
set <id> on|off Persist a local override. The next new session reads it.
|
|
@@ -924,7 +924,7 @@ Options:
|
|
|
924
924
|
--pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
|
|
925
925
|
--scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
|
|
926
926
|
--name <name> Human-readable name for the watcher
|
|
927
|
-
`);switch(n){case`list`:return RS(e);case`delete`:return zS(e);case`create`:return await HS(e,t.env);default:return IS(`unknown command: ${n}`)}})}function WS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-
|
|
927
|
+
`);switch(n){case`list`:return RS(e);case`delete`:return zS(e);case`create`:return await HS(e,t.env);default:return IS(`unknown command: ${n}`)}})}function WS(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-BVpDhce0.js`);return r(t,n,e)})}function GS(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
|
|
928
928
|
hear --devices | --status | --warmup
|
|
929
929
|
|
|
930
930
|
Speech recognition: listens on the microphone until you pause, then
|
|
@@ -1209,7 +1209,7 @@ Options:
|
|
|
1209
1209
|
`,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}},_T=`/.playwright`;function vT(e,t){return e?`${t.replace(/\/+$/,``)}${_T}`:_T}async function yT(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(!jn(e))throw e}t.sessionDirsCreated.add(n)}}async function bT(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 se(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(`
|
|
1210
1210
|
`),p=`${i}/snapshots/page-${kn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function xT(e,t,n,r){await yT(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(`
|
|
1211
1211
|
`)+`
|
|
1212
|
-
`,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 ST(){return import(`./snapshot-features-
|
|
1212
|
+
`,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 ST(){return import(`./snapshot-features-D9YdXtgT.js`)}async function CT(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=oe(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
|
|
1213
1213
|
`);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 wT(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() {
|
|
1214
1214
|
this.scrollIntoView({ block: 'center' });
|
|
1215
1215
|
const r = this.getBoundingClientRect();
|
|
@@ -1287,7 +1287,7 @@ Options:
|
|
|
1287
1287
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
1288
1288
|
return el.files.length;
|
|
1289
1289
|
})()`,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`,FT],[`state-load`,IT],[`console`,pC],[`requests`,tT],[`request`,nT],[`request-headers`,rT],[`request-body`,iT],[`response-headers`,aT],[`response-body`,oT],[`mousemove`,aw],[`mousedown`,ow],[`mouseup`,sw],[`mousewheel`,cw],[`drop`,lw],[`route`,mT],[`route-list`,hT],[`unroute`,gT],[`generate-locator`,CC],[`highlight`,wC]]);function aE(){let e=(Pn.string??[]).map(e=>`--${e}`),t=new Set(Pn.boolean??[]);for(let[e,n]of Object.entries(Pn.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 oE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function sE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const cE=2e3;function lE(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 uE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<cE)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>=cE?`${(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.
|
|
1290
|
-
`;return{...r,stderr:r.stderr+c}}async function dE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Fn(e,t.tab,n):null)??r}\n`,exitCode:1}}function fE(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 pE(e,t,n){let r=iE.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?fE(e,t,void 0):a}catch(r){return i?.aborted?fE(e,t,r):await dE(n.browser,n.flags,r)}}async function mE(e,t,n,r){let i=C(oE(n),sE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Nn(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-
|
|
1290
|
+
`;return{...r,stderr:r.stderr+c}}async function dE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Fn(e,t.tab,n):null)??r}\n`,exitCode:1}}function fE(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 pE(e,t,n){let r=iE.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?fE(e,t,void 0):a}catch(r){return i?.aborted?fE(e,t,r):await dE(n.browser,n.flags,r)}}async function mE(e,t,n,r){let i=C(oE(n),sE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Nn(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-Dgt88ySg.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 hE(e,t,n,r={}){let i=t?An(t,n):null,a=aE();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-Dgt88ySg.js`);return{stdout:t(e)+`
|
|
1291
1291
|
`,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await mE(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=lE(t,p),h=Xi(s.env),g=vT(r.isScoop?.()??!1,h),_=await pE(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;Vn.has(c)&&_.exitCode===0&&v&&(ee=await bT(t,n,v,i,g));try{await xT(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return uE(t,m,p,_)})}const gE=new Map([[`File operations`,[`ls`,`cat`,`head`,`tail`,`wc`,`touch`,`mkdir`,`rm`,`cp`,`mv`,`ln`,`chmod`,`stat`,`readlink`,`file`,`rmdir`,`rsync`]],[`Text processing`,[`grep`,`sed`,`awk`,`sort`,`uniq`,`cut`,`tr`,`tee`,`diff`,`patch`,`column`,`comm`,`egrep`,`fgrep`,`expand`,`unexpand`,`fold`,`join`,`nl`,`od`,`paste`,`rev`,`split`,`strings`,`tac`]],[`Search`,[`find`,`rg`]],[`Navigation & paths`,[`pwd`,`basename`,`dirname`,`tree`,`du`,`cd`]],[`Archives`,[`zip`,`unzip`,`pdftk`,`pdf`,`gunzip`,`gzip`,`zcat`]],[`Media`,[`convert`,`magick`,`pdftoppm`,`pdftocairo`,`pdftotext`,`ffmpeg`,`ffprobe`,`screencapture`]],[`Audio`,[`say`,`hear`,`afplay`,`chime`]],[`Environment & shell`,`echo.printf.env.printenv.export.alias.unalias.history.clear.true.false.bash.sh.commands.which.uname.man.host.oauth-token.secret.nuke.models.local-llm.cost.hostname.whoami.id.help.sleep.time.timeout.oauth-domain`.split(`.`)],[`Data processing`,[`xargs`,`jq`,`base64`,`date`,`expr`,`seq`]],[`Hashes`,[`md5sum`,`sha1sum`,`sha256sum`]],[`Network`,[`curl`,`curlwright`,`wget`,`dig`,`websocat`,`html-to-markdown`]],[`Version control`,[`git`]],[`Languages`,[`node`,`jsh`,`python`,`python3`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...zn,`sprinkle`]],[`Clipboard`,[`pbcopy`,`pbpaste`,`xclip`,`xsel`]],[`Filesystem`,[`mount`,`umount`,`fswatch`]],[`Scoops & agents`,[`agent`,`gelatiere`,`mcp`,`webhook`,`crontask`]],[`Process`,[`ps`,`kill`,`jshd`,`meminfo`,`uptime`]],[`Shell builtins (limited)`,[...Zg]]]);function _E(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:
|
|
1292
1292
|
`);let a=[];for(let[e,t]of gE){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(`
|
|
1293
1293
|
`)+`
|
|
@@ -1391,7 +1391,7 @@ Options:
|
|
|
1391
1391
|
`,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=Ee(t);if(!Te(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 wD=new Set([`run`,`run-script`]),TD=new Set([`test`,`start`,`stop`,`restart`]),ED=new Set([` `,` `,`
|
|
1392
1392
|
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),DD=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
|
|
1393
1393
|
`]),OD=/^[A-Za-z_][A-Za-z0-9_]*=/,kD=/^[@A-Za-z0-9._-]+$/,AD=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),jD=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),MD=new Set([`ipx`,`npx`]);function ND(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function PD(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*FD(e){let t=b(e);for(;yield t,t!==`/`;)t=Me(t).dir}function ID(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 LD(e){return typeof e==`string`?e:void 0}async function RD(e,t){for(let n of FD(t)){let t=x(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await PD(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:LD(r.name),version:LD(r.version),scripts:ID(r.scripts)}}return null}function zD(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(ED.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function BD(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(DD.has(i)){r=!0,n++;continue}let a=zD(e,n);if(a.end===a.start){n++;continue}if(r&&!OD.test(a.text)){if(jD.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function VD(e,t){return!kD.test(e)||AD.has(e)||MD.has(e)?!1:!t.isRegistered(e)}async function HD(e,t){let n=BD(e).filter(e=>VD(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 UD(e){let t=[];for(let n of FD(e))t.push(x(n,`node_modules`,`.bin`));return t}function WD(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...UD(e.dir),i].filter(e=>e!==``).join(`:`),npm_lifecycle_event:t,npm_lifecycle_script:n};return e.name!==void 0&&(a.npm_package_name=e.name),e.version!==void 0&&(a.npm_package_version=e.version),a}function GD(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function KD(e,t){let n=Object.entries(t.scripts);if(n.length===0)return`${e}: no scripts defined in ${x(t.dir,`package.json`)}\n`;let r=[`Scripts available in ${GD(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
|
|
1394
|
-
`)}\n`}function qD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function JD(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}qD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function YD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function XD(e,t,n,r){let i=r.length>0?` ${r.map(ND).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 ZD(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 QD(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of UD(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function $D(e,t,n,r,i,a){let o=i.exec;if(!o)return YD(e,`run requires shell exec support, which this context does not provide`);let s=QD(a.fs,t,i),c=GD(t),l=``,u=``;for(let a of n){r.silent||(l+=`\n> ${c} ${a.event}\n> ${a.body}\n\n`);let n=await o(await HD(a.body,s),{cwd:t.dir,env:WD(t,a.event,a.body,i),stdin:di(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 eO(e,t,n,r){let i;try{i=await RD(r.fs,n.cwd)}catch(t){return YD(e,t instanceof Error?t.message:String(t))}if(!i)return YD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=JD(t);if(o===void 0)return{stdout:KD(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await ZD(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 YD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return $D(e,i,XD(i,o,c,s),a,n,r)}const tO=()=>import(`./installer-
|
|
1394
|
+
`)}\n`}function qD(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function JD(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}qD(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function YD(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function XD(e,t,n,r){let i=r.length>0?` ${r.map(ND).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 ZD(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 QD(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of UD(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function $D(e,t,n,r,i,a){let o=i.exec;if(!o)return YD(e,`run requires shell exec support, which this context does not provide`);let s=QD(a.fs,t,i),c=GD(t),l=``,u=``;for(let a of n){r.silent||(l+=`\n> ${c} ${a.event}\n> ${a.body}\n\n`);let n=await o(await HD(a.body,s),{cwd:t.dir,env:WD(t,a.event,a.body,i),stdin:di(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 eO(e,t,n,r){let i;try{i=await RD(r.fs,n.cwd)}catch(t){return YD(e,t instanceof Error?t.message:String(t))}if(!i)return YD(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=JD(t);if(o===void 0)return{stdout:KD(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await ZD(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 YD(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return $D(e,i,XD(i,o,c,s),a,n,r)}const tO=()=>import(`./installer-BdG_mJUp.js`),nO=new Set([`install`,`i`,`add`]),rO=new Set([`uninstall`,`remove`,`rm`,`un`]),iO=new Set([`list`,`ls`]),aO=new Set([`-g`,`--global`,`--location=global`]),oO=[`-g`,`--global`,`-D`,`--save-dev`];function sO(e){return`${e} - install packages from the npm registry into node_modules
|
|
1395
1395
|
and run package.json scripts; also install conda/emscripten-forge
|
|
1396
1396
|
packages via '${e} mamba'
|
|
1397
1397
|
|
|
@@ -1467,7 +1467,7 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
|
|
|
1467
1467
|
and deps are recorded in /shared/lib/package.json. Existing fields are
|
|
1468
1468
|
preserved. Idempotent: re-installing an already-satisfied package is a clean
|
|
1469
1469
|
no-op.
|
|
1470
|
-
`}function cO(e){let t=C(e,{bool:oO,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 lO(e){let t=!1,n=[];for(let r of e){if(aO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function uO(e){return w(e)}function dO(e){return e instanceof Error?e.message:String(e)}async function fO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function pO(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(n)return uO(r)?{stdout:sO(e),stderr:``,exitCode:0}:hO(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-
|
|
1470
|
+
`}function cO(e){let t=C(e,{bool:oO,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 lO(e){let t=!1,n=[];for(let r of e){if(aO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function uO(e){return w(e)}function dO(e){return e instanceof Error?e.message:String(e)}async function fO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function pO(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(n)return uO(r)?{stdout:sO(e),stderr:``,exitCode:0}:hO(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-DMPz0Na-.js`);return n(e,r.slice(1),i,t)}if(uO(r))return{stdout:sO(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:sO(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return nO.has(a)?hO(e,o,i,t):rO.has(a)?_O(e,o,i,t):iO.has(a)?vO(e,o,i,t):a===`root`?yO(e,o,i,t):wD.has(a)?eO(e,o,i,{fs:t.fs}):TD.has(a)?eO(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function mO(e,t,n){let{installFromManifest:r,ManifestNotFoundError:i}=await tO(),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: ${dO(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.errors.map(t=>`${e}: failed to install ${t.spec}: ${dO(t.error)}`);return{stdout:o.length>0?`${o.join(`
|
|
1471
1471
|
`)}\n`:``,stderr:s.length>0?`${s.join(`
|
|
1472
1472
|
`)}\n`:``,exitCode:a.errors.length===0?0:1}}async function hO(e,t,n,r){let i=cO(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 mO(e,n,r);let{installPackages:c}=await tO(),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: ${dO(t)}\n`,exitCode:1}}let u=l.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),d=l.errors.map(t=>`${e}: failed to install ${t.spec}: ${dO(t.error)}`);return a&&l.results.length>0&&await fO(r),{stdout:u.length>0?`${u.join(`
|
|
1473
1473
|
`)}\n`:``,stderr:d.length>0?`${d.join(`
|
|
@@ -1488,8 +1488,8 @@ Options:
|
|
|
1488
1488
|
--force Install a package even when a SLICC built-in shadows it
|
|
1489
1489
|
--global Resolve only from the shared global prefix (/shared/lib/node_modules)
|
|
1490
1490
|
-h, --help Show this help message
|
|
1491
|
-
`}async function VO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function HO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function UO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*WO(e,t=!1){if(t){yield Qn;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Me(n).dir;yield Qn}async function GO(e,t,n,r=!1){for(let i of WO(t,r)){let t=x(i,`.bin`,n);if(!await HO(e,t))continue;let r=await VO(e,t),a=zO.exec(r),o=Me(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function KO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function qO(e,t){if(typeof e==`string`)return{binName:KO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,KO(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 JO(e,t,n,r=!1){for(let i of WO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await HO(e,r))continue;let a;try{a=JSON.parse(await VO(e,r))}catch{return null}let o=qO(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:x(t,s),argvName:x(i,`.bin`,o.binName)}}return null}async function YO(e,t,n,r=!1){return await GO(e,t,n,r)??await JO(e,t,n,r)}async function XO(e,t,n){for(let r of WO(t))if(await HO(e,x(r,n,`package.json`)))return!0;return!1}function ZO(e){return e instanceof Error?e.message:String(e)}function QO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function $O(e,t,n,r){try{let{installPackages:i}=await import(`./installer-
|
|
1492
|
-
`)}\n`:``}}catch(n){return{error:QO(e,`failed to install '${t}': ${ZO(n)}`)}}}async function ek(e,t,n,r){return await HO(r,n)?null:await UO(r,n)?QO(e,`bin target '${n}' is a directory, not a file`):QO(e,`bin file '${n}' for '${t}' does not exist`)}async function tk(e,t,n,r,i,a){if(await XO(a.fs,i.cwd,t))return{error:QO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:IO(t);if(o)return{error:{stdout:``,stderr:RO(e,t,n,o),exitCode:1}};let s=await $O(e,t,i,a);if(`error`in s)return s;let c=await YO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:QO(e,`package '${t}' was installed but does not expose an executable bin`)}}function nk(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:BO(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:BO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await YO(t.fs,r.cwd,c,o)}catch(t){return QO(e,ZO(t))}let d=``;if(!u){if(o)return QO(e,`no global bin '${c}' found in ${Qn}`);let n=await tk(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await ek(e,c,u.binFilePath,t.fs);if(f)return f;let p=ti(await VO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await $r(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function rk(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-
|
|
1491
|
+
`}async function VO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function HO(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function UO(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*WO(e,t=!1){if(t){yield Qn;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Me(n).dir;yield Qn}async function GO(e,t,n,r=!1){for(let i of WO(t,r)){let t=x(i,`.bin`,n);if(!await HO(e,t))continue;let r=await VO(e,t),a=zO.exec(r),o=Me(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function KO(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function qO(e,t){if(typeof e==`string`)return{binName:KO(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,KO(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 JO(e,t,n,r=!1){for(let i of WO(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await HO(e,r))continue;let a;try{a=JSON.parse(await VO(e,r))}catch{return null}let o=qO(a.bin,n);if(!o)return null;let s=o.binPath.replace(/^\.\//,``);return{binFilePath:x(t,s),argvName:x(i,`.bin`,o.binName)}}return null}async function YO(e,t,n,r=!1){return await GO(e,t,n,r)??await JO(e,t,n,r)}async function XO(e,t,n){for(let r of WO(t))if(await HO(e,x(r,n,`package.json`)))return!0;return!1}function ZO(e){return e instanceof Error?e.message:String(e)}function QO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function $O(e,t,n,r){try{let{installPackages:i}=await import(`./installer-BdG_mJUp.js`),a=await i([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(a.errors.length>0)return{error:QO(e,`failed to install '${t}': ${ZO(a.errors[0].error)}`)};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:o.length>0?`${o.join(`
|
|
1492
|
+
`)}\n`:``}}catch(n){return{error:QO(e,`failed to install '${t}': ${ZO(n)}`)}}}async function ek(e,t,n,r){return await HO(r,n)?null:await UO(r,n)?QO(e,`bin target '${n}' is a directory, not a file`):QO(e,`bin file '${n}' for '${t}' does not exist`)}async function tk(e,t,n,r,i,a){if(await XO(a.fs,i.cwd,t))return{error:QO(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:IO(t);if(o)return{error:{stdout:``,stderr:RO(e,t,n,o),exitCode:1}};let s=await $O(e,t,i,a);if(`error`in s)return s;let c=await YO(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:QO(e,`package '${t}' was installed but does not expose an executable bin`)}}function nk(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:BO(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:BO(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await YO(t.fs,r.cwd,c,o)}catch(t){return QO(e,ZO(t))}let d=``;if(!u){if(o)return QO(e,`no global bin '${c}' found in ${Qn}`);let n=await tk(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await ek(e,c,u.binFilePath,t.fs);if(f)return f;let p=ti(await VO(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await $r(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function rk(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-DkUy3OHx.js`);return r(t,n,e)})}const ik=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function ak(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return dk();let n=e.processManager??ok();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
|
|
1493
1493
|
`,exitCode:1};let r=sk(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=ck(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
|
|
1494
1494
|
`)}\n`:``,exitCode:+!i}})}function ok(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function sk(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
|
|
1495
1495
|
`,exitCode:2};let i=lk(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=uk(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
|
|
@@ -1562,7 +1562,7 @@ Common base URLs:
|
|
|
1562
1562
|
`)+`
|
|
1563
1563
|
`,stderr:``,exitCode:0}}function Rk(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${Pk(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...Fk(t.models)].join(`
|
|
1564
1564
|
`)+`
|
|
1565
|
-
`,stderr:``,exitCode:0}}function zk(){return S(Mk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:Nk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-
|
|
1565
|
+
`,stderr:``,exitCode:0}}function zk(){return S(Mk,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:Nk(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-DdclMpWp.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-C0NdLczW.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(Mk);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
|
|
1566
1566
|
`,exitCode:1};let c=await a(s,t(Mk)??void 0);if(!c.ok)return Ik(s,c);if(o===`discover`){let e=n(Mk)??``;return i(Mk,e,s,c.models.join(`, `)),Rk(s,c)}return Lk(s,c)})}function Bk(){return{stdout:`usage: man <topic>
|
|
1567
1567
|
|
|
1568
1568
|
Fetches documentation for a given topic from sliccy.com.
|
|
@@ -1600,20 +1600,20 @@ authorization-code flow, stores the access token, and retries.
|
|
|
1600
1600
|
On success, the server is persisted to /workspace/.mcp/servers.json and
|
|
1601
1601
|
an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
|
|
1602
1602
|
short name resolves on the PATH.
|
|
1603
|
-
`);let n=C(e,{});if(`error`in n)return Kk(n.error);if(n.positionals.length<2)return G(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return G(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return G(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-
|
|
1603
|
+
`);let n=C(e,{});if(`error`in n)return Kk(n.error);if(n.positionals.length<2)return G(`mcp add: expected <url> <name>`);let[r,i]=n.positionals;if(!/^https?:\/\//i.test(r))return G(`mcp add: invalid URL "${r}" (must start with http:// or https://)`);if(!/^[A-Za-z][A-Za-z0-9_-]*$/.test(i))return G(`mcp add: invalid name "${i}" (letters, digits, _ and - only; must start with a letter)`);let{getServer:a,setServer:o}=await import(`./store-C8pkV9xX.js`).then(e=>e.r);if(await a(i,t.fs))return G(`mcp add: a server named "${i}" already exists`);let{McpClient:s,McpAuthRequiredError:c}=await import(`./client-dISfU5Wf.js`).then(e=>e.n),l=new s({url:r,fetchImpl:t.fetchImpl}),u;try{await l.initialize()}catch(e){if(!(e instanceof c))throw e;u=await Xk(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>TA(i)}),await l.initialize()}let d=await l.toolsList(),f=await l.appsList(),p=new Date().toISOString();await o(i,{url:r,protocolVersion:l.getNegotiatedProtocolVersion(),tools:d,apps:f,addedAt:p,lastRefreshedAt:p,...u?{auth:u}:{}},t.fs),await AA(i,t);let m=await NA(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-BkkOFpKq.js`);e({name:i,serverUrl:r,auth:u})}return W([`Added MCP server "${i}" → ${r}`,` tools: ${d.length}, apps: ${f.length} (${m} sprinkle${m===1?``:`s`})`,` alias: ${Gk}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
|
|
1604
1604
|
`)+`
|
|
1605
|
-
`)}async function Xk(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-
|
|
1606
|
-
`);let n=C(e,{});if(`error`in n)return Kk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-
|
|
1605
|
+
`)}async function Xk(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-DdclMpWp.js`).then(e=>e.t),c=await DA(r.oauthFetchImpl),l=r.oauthLauncher??await EA(),u=await i(e,n,c);Wk.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await na(Ce()),f=await a(u,d,c),p=u.supportedScopes&&u.supportedScopes.length>0?u.supportedScopes.join(` `):void 0,m=await o({asMetadata:u,clientId:f.clientId,scope:p,redirectUri:d,launcher:l,fetchImpl:c}),h=`mcp:${t}`;return await s({providerId:h,accessToken:m.accessToken,refreshToken:m.refreshToken,tokenExpiresAt:m.expiresAt,scopes:m.scope}),{providerId:h,authorizationServer:u.issuer,clientId:f.clientId,redirectUri:d,scope:m.scope??p,registrationClientUri:f.registrationClientUri}}async function Zk(e,t){if(w(e))return W(`usage: mcp list
|
|
1606
|
+
`);let n=C(e,{});if(`error`in n)return Kk(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-BkkOFpKq.js`);await r();let{listServers:i}=await import(`./store-C8pkV9xX.js`).then(e=>e.r),a=await i(t.fs),o=Object.keys(a).sort();if(o.length===0)return W("No MCP servers configured. Use `mcp add <url> <name>`.\n");let s=[[`NAME`,`URL`,`AUTH`,`TOOLS`,`APPS`,`ADDED`]];for(let e of o){let t=a[e];s.push([e,t.url,t.auth?`yes`:`no`,String(t.tools?.length??0),String(t.apps?.length??0),t.addedAt?t.addedAt.slice(0,10):`-`])}return W(Qk(s))}function Qk(e){let t=e[0].map((t,n)=>e.reduce((e,t)=>Math.max(e,(t[n]??``).length),0));return e.map(e=>e.map((e,n)=>e.padEnd(t[n])).join(` `).trimEnd()).join(`
|
|
1607
1607
|
`)+`
|
|
1608
1608
|
`}async function $k(e,t){if(w(e))return W(`usage: mcp search <query>
|
|
1609
1609
|
|
|
1610
1610
|
Case-insensitive substring search across the cached tools of every
|
|
1611
1611
|
registered MCP server. Matches tool name OR description and prints a
|
|
1612
1612
|
table of (server, tool, description, match-field) rows.
|
|
1613
|
-
`);let n=C(e,{});if(`error`in n)return Kk(n.error);if(n.positionals.length===0)return G(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-
|
|
1614
|
-
`);let n=C(e,{});if(`error`in n)return Kk(n.error);let r=n.positionals[0];if(!r)return G(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-
|
|
1613
|
+
`);let n=C(e,{});if(`error`in n)return Kk(n.error);if(n.positionals.length===0)return G(`mcp search: expected <query>`);let r=n.positionals[0],i=r.toLowerCase(),{ensureAllMcpProvidersRegistered:a}=await import(`./provider-BkkOFpKq.js`);await a();let{listServers:o}=await import(`./store-C8pkV9xX.js`).then(e=>e.r),s=await o(t.fs),c=Object.keys(s).sort();if(c.length===0)return W("No MCP servers configured. Use `mcp add <url> <name>`.\n");let l=[];for(let e of c){let t=s[e].tools??[];for(let n of t){let t=n.description??``,r=n.name.toLowerCase().includes(i),a=t.toLowerCase().includes(i);if(!r&&!a)continue;let o=r&&a?`name+description`:r?`name`:`description`;l.push({server:e,tool:n.name,description:t,match:o})}}if(l.length===0)return W(`No tools matched "${r}".\n`);l.sort((e,t)=>e.server===t.server?e.tool.localeCompare(t.tool):e.server.localeCompare(t.server));let u=[[`SERVER`,`TOOL`,`DESCRIPTION`,`MATCH`]];for(let e of l)u.push([e.server,e.tool,eA(e.description),e.match]);return W(Qk(u))}function eA(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function tA(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp delete: expected <name>`):W(`usage: mcp delete <name>
|
|
1614
|
+
`);let n=C(e,{});if(`error`in n)return Kk(n.error);let r=n.positionals[0];if(!r)return G(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-BkkOFpKq.js`);await i(r);let{deleteServer:o}=await import(`./store-C8pkV9xX.js`).then(e=>e.r),s=await o(r,t.fs);await jA(r,t),await MA(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-DdclMpWp.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){Wk.warn(`mcp delete: OAuth removal failed`,{providerId:c,error:e instanceof Error?e.message:String(e)})}let u=a(r);return!s&&!l&&!u?G(`mcp delete: no server, alias, or account found for "${r}"`):W([`Removed MCP server "${r}"`,` servers.json: ${s?`removed`:`not present`}`,` alias: cleaned`,` sprinkles: cleaned`,` oauth: ${l?`removed`:`not present`}`,` provider: ${u?`unregistered`:`not registered`}`].join(`
|
|
1615
1615
|
`)+`
|
|
1616
|
-
`)}async function nA(e,t){if(e.length===0)return G(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return W(aA());let n=C([e[0]],{});if(`error`in n)return Kk(n.error);let r=n.positionals[0];if(!r)return G(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-
|
|
1616
|
+
`)}async function nA(e,t){if(e.length===0)return G(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return W(aA());let n=C([e[0]],{});if(`error`in n)return Kk(n.error);let r=n.positionals[0];if(!r)return G(`mcp invoke: expected <name>`);let i=e.slice(1),{ensureMcpProviderRegistered:a}=await import(`./provider-BkkOFpKq.js`);await a(r);let{getServer:o}=await import(`./store-C8pkV9xX.js`).then(e=>e.r),s=await o(r,t.fs);if(!s)return G(`mcp invoke: unknown server "${r}" (run \`mcp add <url> ${r}\` first)`);let c=s.tools??[];if(i.length===0||w(i.slice(0,1)))return W(oA(r,s,c));let l=C([i[0]],{});if(`error`in l)return Kk(l.error);let u=l.positionals[0];if(!u)return G(`mcp invoke: expected <tool>`);let d=c.find(e=>e.name===u);if(!d)return G(`mcp invoke: unknown tool "${u}" on "${r}" (run \`${r}\` to list tools)`);let{timeoutMs:f,remaining:p,warnings:m}=rA(i.slice(1));if(w(p))return W(cA(r,d));let h=lA(p,d.inputSchema);if(!h.ok)return G(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-dISfU5Wf.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>TA(r):void 0,...f===void 0?{}:{timeoutMs:f}});await _.initialize();let v=xA(await _.toolsCall(u,h.value));return m.length>0&&(v.stderr=m.map(e=>`${e}\n`).join(``)+v.stderr),v}function rA(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=iA(a.slice(10));e.ok?r=e.value:n.push(e.error),i+=1;continue}if(a===`--timeout`){let t=e[i+1];if(t===void 0||t.startsWith(`--`)){n.push(`mcp invoke: --timeout requires a value (got ${t===void 0?`nothing`:`"${t}"`}); using default.`),i+=1;continue}let a=iA(t);a.ok?r=a.value:n.push(a.error),i+=2;continue}t.push(a),i+=1}return{timeoutMs:r,remaining:t,warnings:n}}function iA(e){if(!/^-?\d+$/.test(e))return{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (expected positive integer seconds); using default.`};let t=Number(e);return!Number.isFinite(t)||t<1?{ok:!1,error:`mcp invoke: invalid --timeout value "${e}" (must be >= 1 second); using default.`}:{ok:!0,value:t*1e3}}function aA(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
|
|
1617
1617
|
|
|
1618
1618
|
mcp invoke <name> List tools on <name>.
|
|
1619
1619
|
mcp invoke <name> <tool> --help Show flags for <tool>.
|
|
@@ -1646,7 +1646,7 @@ Arguments are coerced according to the tool's JSON Schema:
|
|
|
1646
1646
|
|
|
1647
1647
|
Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
|
|
1648
1648
|
OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
|
|
1649
|
-
`);let n=C(e,{});if(`error`in n)return Kk(n.error);let r=n.positionals[0];if(!r)return G(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-
|
|
1649
|
+
`);let n=C(e,{});if(`error`in n)return Kk(n.error);let r=n.positionals[0];if(!r)return G(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-BkkOFpKq.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-C8pkV9xX.js`).then(e=>e.r),s=await a(r,t.fs);if(!s)return G(`mcp refresh: unknown server "${r}"`);let{McpClient:c,McpAuthRequiredError:l}=await import(`./client-dISfU5Wf.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>TA(r):void 0});try{await u.initialize()}catch(e){if(e instanceof l)return G(`mcp refresh: server "${r}" returned 401 — token may have expired. Run \`mcp auth ${r}\` to re-authenticate.`);throw e}let d=await u.toolsList(),f=await u.appsList();await o(r,{...s,protocolVersion:u.getNegotiatedProtocolVersion(),tools:d,apps:f,lastRefreshedAt:new Date().toISOString()},t.fs);let p=await NA(r,f,t);return W(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function CA(e,t){if(w(e))return W(`usage: mcp auth <name> [--silent | --interactive]
|
|
1650
1650
|
|
|
1651
1651
|
Re-authenticate an existing MCP server. By default, attempts a silent
|
|
1652
1652
|
token renewal using the persisted refresh_token; if that returns no
|
|
@@ -1658,7 +1658,7 @@ Options:
|
|
|
1658
1658
|
-i, --interactive Skip silent renewal and open the OAuth popup
|
|
1659
1659
|
directly. Use after revoking a refresh token or
|
|
1660
1660
|
when the AS no longer accepts the cached one.
|
|
1661
|
-
`);let n=C(e,{bool:Uk});if(`error`in n)return Kk(n.error);let r=n.positionals[0];if(!r)return G(`mcp auth: expected <name>`);let i=n.bools.has(`--silent`)||n.bools.has(`-s`),a=n.bools.has(`--interactive`)||n.bools.has(`-i`);if(i&&a)return G(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-
|
|
1661
|
+
`);let n=C(e,{bool:Uk});if(`error`in n)return Kk(n.error);let r=n.positionals[0];if(!r)return G(`mcp auth: expected <name>`);let i=n.bools.has(`--silent`)||n.bools.has(`-s`),a=n.bools.has(`--interactive`)||n.bools.has(`-i`);if(i&&a)return G(`mcp auth: --silent and --interactive are mutually exclusive`);let{ensureMcpProviderRegistered:o}=await import(`./provider-BkkOFpKq.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-C8pkV9xX.js`).then(e=>e.r),l=await c(r,t.fs);if(!l)return G(`mcp auth: unknown server "${r}" (run \`mcp list\` to see configured servers)`);if(!l.auth)return G(`mcp auth: server "${r}" does not use OAuth`);if(!s)return G(`mcp auth: failed to register provider for "${r}"`);let u=`mcp:${r}`,{getRegisteredProviderConfig:d}=await import(`./providers-narfgv33.js`).then(e=>e.r),f=d(u);if(!f)return G(`mcp auth: provider "${u}" is not registered`);if(a)return await wA(r,f,t);if(!f.onSilentRenew)return i?G(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await wA(r,f,t);let p=null;try{p=await f.onSilentRenew()}catch(e){let t=e instanceof Error?e.message:String(e);if(i)return G(`mcp auth: silent renewal for "${r}" failed (${t}); retry without --silent to run the interactive flow`);Wk.debug(`mcp auth: silent renewal threw, falling back to interactive`,{name:r,error:t})}return p?W(`Re-authenticated "${r}" via silent renewal (provider ${u})\n`):i?G(`mcp auth: silent renewal for "${r}" returned no token; retry without --silent to run the interactive flow`):await wA(r,f,t)}async function wA(e,t,n){if(!t.onOAuthLogin)return G(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await EA(),i=!1;return await t.onOAuthLogin(r,()=>{i=!0}),i?W(`Re-authenticated "${e}" via interactive login (provider ${t.id})\n`):G(`mcp auth: interactive login for "${e}" did not complete`)}async function TA(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-DdclMpWp.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-narfgv33.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){Wk.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function EA(){let{createOAuthLauncher:e}=await import(`./oauth-service-B_A2Hp66.js`);return e()}async function DA(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-Ba8A2Dlh.js`).then(e=>e.a),n=t();return async(e,t)=>{let r=await n(e,{method:t?.method,headers:t?.headers,body:t?.body}),i=new TextDecoder().decode(r.body);return{ok:r.status>=200&&r.status<300,status:r.status,statusText:r.statusText,text:async()=>i,json:async()=>JSON.parse(i),headers:{get:e=>r.headers[e.toLowerCase()]??null}}}}async function OA(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-CIR1p_m7.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return await t.create({dbName:n})}function kA(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
|
|
1662
1662
|
// Auto-generated by \`mcp add ${e}\`; do not edit by hand.
|
|
1663
1663
|
const { promisify } = require('util');
|
|
1664
1664
|
const { exec } = require('child_process');
|
|
@@ -1687,7 +1687,7 @@ try {
|
|
|
1687
1687
|
if (stdout) process.stdout.write(stdout);
|
|
1688
1688
|
if (stderr) process.stderr.write(stderr);
|
|
1689
1689
|
process.exit(exitCode);
|
|
1690
|
-
`}async function AA(e,t){let n=await OA(t.fs);await n.mkdir(Gk,{recursive:!0}),await n.writeFile(`${Gk}/${e}.jsh`,kA(e)),t.scriptCatalog?.invalidateJsh()}async function jA(e,t){let n=await OA(t.fs),r=`${Gk}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){Wk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function MA(e,t){let{removeAppSprinkles:n}=await import(`./apps-
|
|
1690
|
+
`}async function AA(e,t){let n=await OA(t.fs);await n.mkdir(Gk,{recursive:!0}),await n.writeFile(`${Gk}/${e}.jsh`,kA(e)),t.scriptCatalog?.invalidateJsh()}async function jA(e,t){let n=await OA(t.fs),r=`${Gk}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){Wk.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function MA(e,t){let{removeAppSprinkles:n}=await import(`./apps-oJ_nTgiK.js`);await n(e,t.fs)}async function NA(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-oJ_nTgiK.js`);return(await r(e,t,n.fs)).length}catch(t){return Wk.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function PA(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function FA(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 IA(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function LA(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 RA(e){let t=[`total: ${Dy(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(`${Dy(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${FA(e)}`)}return`${t.join(`
|
|
1691
1691
|
`)}\n`}function zA(e={}){return S(`meminfo`,async t=>{let n=LA(t);if(`error`in n)return PA(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
|
|
1692
1692
|
|
|
1693
1693
|
Usage:
|
|
@@ -1699,7 +1699,7 @@ Notes:
|
|
|
1699
1699
|
Document-Isolation-Policy). Embedded floats cannot be isolated and
|
|
1700
1700
|
report why instead.
|
|
1701
1701
|
- The browser randomizes measurement timing — expect a short delay.
|
|
1702
|
-
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??IA();if(!r&&!e.measure)return PA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return PA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return PA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:RA(a),stderr:``,exitCode:0}})}function BA(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-
|
|
1702
|
+
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??IA();if(!r&&!e.measure)return PA(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return PA(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return PA(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:RA(a),stderr:``,exitCode:0}})}function BA(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-BBYfg5ni.js`);return n(t,e)})}function VA(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const HA=`/.cache/artificial-analysis.json`,UA=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],WA=[`--provider`];function GA(e){return{stdout:``,stderr:e.endsWith(`
|
|
1703
1703
|
`)?e:`${e}\n`,exitCode:1}}async function KA(e){try{let t=await e.readFile(HA),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function qA(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function JA(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 YA(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(HA,JSON.stringify(n))}catch{}}async function XA(e,t=!1){if(e&&!t){let t=await KA(e);if(t)return t}let n={Accept:`application/json`},r=qA();r&&(n[`x-api-key`]=r);let i=p(),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=JA(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await YA(e,c),c}function ZA(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function QA(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=ZA(e),a=t.find(e=>ZA(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 $A(){return`models - list available LLM models
|
|
1704
1704
|
|
|
1705
1705
|
Usage: models [options]
|
|
@@ -1714,7 +1714,7 @@ Options:
|
|
|
1714
1714
|
-h, --help Show this help message
|
|
1715
1715
|
`}function ej(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function tj(e){return`$${e.toFixed(2)}`}const nj=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function rj(e){let t=`${e.id} ${e.name??``}`;return!nj.test(t)}function ij(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 aj(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),ij(t)??t.replace(/-[\d.]+$/,``)}function oj(e){let t=new Map;for(let n of e){let e=aj(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function sj(e,t,n,r,i){let a=i?QA(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 cj(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=`${tj(e.cost.input)} / ${tj(e.cost.output)}`,a=`${ej(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(`
|
|
1716
1716
|
`)+`
|
|
1717
|
-
`}function lj(e){let t=C(e,{bool:UA,value:WA});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 uj(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 dj(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(rj);if(o.length===0)return[];let s=o.map(e=>sj(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=oj(s)),s}function fj(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 pj(e,t){if(w(e,{valueFlags:WA}))return{stdout:$A(),stderr:``,exitCode:0};let n=lj(e);if(`error`in n)return GA(`models: ${n.error}`);let r=await import(`./account-store-
|
|
1717
|
+
`}function lj(e){let t=C(e,{bool:UA,value:WA});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 uj(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 dj(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(rj);if(o.length===0)return[];let s=o.map(e=>sj(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=oj(s)),s}function fj(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 pj(e,t){if(w(e,{valueFlags:WA}))return{stdout:$A(),stderr:``,exitCode:0};let n=lj(e);if(`error`in n)return GA(`models: ${n.error}`);let r=await import(`./account-store-DdclMpWp.js`).then(e=>e.t);if(r.getAccounts().length===0)return GA(`No provider accounts configured. Run the provider settings to add one.
|
|
1718
1718
|
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await XA(t,n.forceRefresh);e.length>0&&(l=e)}let u=uj(r,n,s);if(`error`in u)return GA(u.error);let d=[],f=[];for(let e of u){let t=dj(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return GA(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(cj(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
|
|
1719
1719
|
`,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
|
|
1720
1720
|
`),f.push(fj(o,a,s,c)),{stdout:f.join(`
|
|
@@ -1772,7 +1772,7 @@ Examples:
|
|
|
1772
1772
|
`)}\n`,stderr:``,exitCode:0}}async function Rj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
|
|
1773
1773
|
`,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 zj(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
|
|
1774
1774
|
`,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 Bj(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>
|
|
1775
|
-
`,exitCode:1}}async function Vj(e,t,n,r){switch(t){case`list`:return Lj(e,n);case`add`:return Rj(e,n,r);case`remove`:return zj(e,n,r);case`clear`:return Bj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${Fj()}`,exitCode:1}}}function Hj(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:Fj(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return Ij(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-
|
|
1775
|
+
`,exitCode:1}}async function Vj(e,t,n,r){switch(t){case`list`:return Lj(e,n);case`add`:return Rj(e,n,r);case`remove`:return zj(e,n,r);case`clear`:return Bj(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${Fj()}`,exitCode:1}}}function Hj(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:Fj(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return Ij(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-DdclMpWp.js`).then(e=>e.t);try{return await Vj(a,n,r,i)}catch(e){return Ij(e instanceof Error?e.message:String(e))}})}function Uj(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-NrNIVu5b.js`);return n(e,t)})}const Wj=[`--download`,`-d`,`--view`,`-v`],Gj=[`--size`],Kj={low:256,medium:768,high:1536};function qj(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
|
|
1776
1776
|
|
|
1777
1777
|
VFS paths are served in a new browser tab via the preview service worker.
|
|
1778
1778
|
URLs (http/https/etc.) are opened directly in a new tab.
|
|
@@ -1798,7 +1798,7 @@ Examples:
|
|
|
1798
1798
|
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await Er(t.fs,i?e:Pr(e)),o=Cr(e,a),s;try{s=await r(o)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return nM(`opened ${e} → ${o}${rM(s)}`)}async function uM(e,t,n,r){if(!Or(e)&&e.endsWith(`.shtml`)&&t.fs)return aM(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return K(`open: browser APIs are unavailable in this environment
|
|
1799
1799
|
`);if(Or(e))return oM(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?sM(e,i,t,n.sizeSpec):n.download?cM(e,i,t,r.hasDom):lM(i,t,r.canOpenWindow,r.openExternal)}function dM(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:Gj}))return qj();let r=tM(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 qj();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:iM(e,l,u)},f=[];for(let e of s){let t=await uM(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
|
|
1800
1800
|
`)+`
|
|
1801
|
-
`,stderr:``,exitCode:0}})}function fM(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-
|
|
1801
|
+
`,stderr:``,exitCode:0}})}function fM(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-DpwgbNbp.js`);return n(e,t)})}function pM(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function mM(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
|
|
1802
1802
|
|
|
1803
1803
|
Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
|
|
1804
1804
|
is zero-padded to the digit width of the last page (out-1.png for a 9-page
|
|
@@ -1858,7 +1858,7 @@ Examples:
|
|
|
1858
1858
|
plugin list
|
|
1859
1859
|
plugin info my-plugin
|
|
1860
1860
|
plugin remove my-plugin
|
|
1861
|
-
`}function jM(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return OM(AM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await RM(i,a,e);case`list`:case`ls`:return await HM(i,e);case`info`:return await UM(i,e);case`validate`:return await WM(i,a,e,Xi(n?.env));case`remove`:case`rm`:case`delete`:return await GM(i,e);default:return q(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return q(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function MM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-
|
|
1861
|
+
`}function jM(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return OM(AM());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await RM(i,a,e);case`list`:case`ls`:return await HM(i,e);case`info`:return await UM(i,e);case`validate`:return await WM(i,a,e,Xi(n?.env));case`remove`:case`rm`:case`delete`:return await GM(i,e);default:return q(`plugin: unknown subcommand "${r}" (try \`plugin --help\`)`)}}catch(e){return q(`plugin ${r}: ${e instanceof Error?e.message:String(e)}`)}})}async function MM(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-CIR1p_m7.js`).then(e=>e.t),{GLOBAL_FS_DB_NAME:n}=await import(`./global-db-DJXlpNui.js`).then(e=>e.n);return t.create({dbName:n})}async function NM(e,t,n){let r=KM(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-BV6F_EyI.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 PM(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function FM(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${DM}/${t.map(PM).join(`--`)}`}async function IM(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-nn7aW2E1.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 LM(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function RM(e,t,n){if(w(e))return OM(`usage: plugin install <path|repo>
|
|
1862
1862
|
|
|
1863
1863
|
Loads the Agent Plugins package at <path>, or downloads it from a GitHub
|
|
1864
1864
|
reference (owner/repo, owner/repo@branch, or
|
|
@@ -1869,19 +1869,19 @@ mcp.json. On success the plugin is recorded in
|
|
|
1869
1869
|
/workspace/.plugins/plugins.json — its skills then surface through the
|
|
1870
1870
|
standard skills discovery, and each supported streamable-http MCP server
|
|
1871
1871
|
is registered in the MCP store as "<plugin>:<server>".
|
|
1872
|
-
`);let r=kM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return q(`plugin install: expected <path|repo>`);let i=await MM(n),a=await NM(r.positionals[0],t,i);if(a.kind===`error`)return q(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return q(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=FM(a.ref),s=a.ref.display;let e=await IM(a.ref,o,i,n.fetch);if(e)return q(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-Dw-TPPKt.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await LM(i,o),q(`plugin install: plugin at ${s??o} was rejected:\n${qM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-
|
|
1872
|
+
`);let r=kM(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return q(`plugin install: expected <path|repo>`);let i=await MM(n),a=await NM(r.positionals[0],t,i);if(a.kind===`error`)return q(`plugin install: ${a.message}`);let o,s;if(a.kind===`github`){if(!n.fetch)return q(`plugin install: GitHub installs are unavailable (no network fetch configured)`);o=FM(a.ref),s=a.ref.display;let e=await IM(a.ref,o,i,n.fetch);if(e)return q(`plugin install: ${e}`)}else o=a.root;let{loadPluginFromDirectory:c}=await import(`./loader-Dw-TPPKt.js`),l=await c(i,o);if(!l.ok)return a.kind===`github`&&await LM(i,o),q(`plugin install: plugin at ${s??o} was rejected:\n${qM(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-Ce8lHof4.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await LM(i,o),q(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await VM(u,n),g=await BM(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),OM(zM(u,h,g,s??o,l.diagnostics))}function zM(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:`,qM(i)),c.join(`
|
|
1873
1873
|
`)+`
|
|
1874
|
-
`}async function BM(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-
|
|
1875
|
-
`);let n=kM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-
|
|
1874
|
+
`}async function BM(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-C8pkV9xX.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 VM(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-C8pkV9xX.js`).then(e=>e.r),{McpClient:a}=await import(`./client-dISfU5Wf.js`).then(e=>e.n),o=[],s=[];for(let c of n){let n=c.config,l=`${e.manifest.name}:${c.name}`,u=await r(l,t.fs);if(u&&u.pluginOrigin!==e.manifest.name){s.push(l);continue}let d=[];try{let e=new a({url:n.url,headers:n.headers});await e.initialize(),d=await e.toolsList()}catch{}await i(l,{url:n.url,...n.headers?{headers:n.headers}:{},tools:d,addedAt:new Date().toISOString(),pluginOrigin:e.manifest.name},t.fs),o.push(l)}return{registered:o,conflicts:s}}async function HM(e,t){if(w(e))return OM(`usage: plugin list
|
|
1875
|
+
`);let n=kM(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-Ce8lHof4.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return OM("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 OM(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
|
|
1876
1876
|
`)+`
|
|
1877
1877
|
`)}async function UM(e,t){if(w(e))return OM(`usage: plugin info <name>
|
|
1878
|
-
`);let n=kM(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return q(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-
|
|
1878
|
+
`);let n=kM(`info`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return q(`plugin info: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i}=await import(`./store-Ce8lHof4.js`),a=await i(r,t.fs);if(!a)return q(`plugin info: no installed plugin named "${r}"`);let o=await MM(t),{loadPluginFromDirectory:s}=await import(`./loader-Dw-TPPKt.js`),c=await s(o,a.root);if(!c.ok)return q(`plugin info: plugin at ${a.root} no longer loads:\n${qM(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:`,qM(c.diagnostics)),OM(d.join(`
|
|
1879
1879
|
`)+`
|
|
1880
1880
|
`)}async function WM(e,t,n,r){if(w(e))return OM(`usage: plugin validate <path|repo>
|
|
1881
1881
|
`);let i=kM(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return q(`plugin validate: expected <path|repo>`);let a=await MM(n),o=await NM(i.positionals[0],t,a);if(o.kind===`error`)return q(`plugin validate: ${o.message}`);let s,c=null;if(o.kind===`github`){if(!n.fetch)return q(`plugin validate: GitHub sources are unavailable (no network fetch configured)`);c=`${r}/.plugin-validate/${FM(o.ref).split(`/`).pop()}`;let e=await IM(o.ref,c,a,n.fetch);if(e)return q(`plugin validate: ${e}`);s=c}else s=o.root;let{loadPluginFromDirectory:l}=await import(`./loader-Dw-TPPKt.js`),u;try{u=await l(a,s)}finally{c&&await LM(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${qM(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:`,qM(u.diagnostics)),OM(p.join(`
|
|
1882
1882
|
`)+`
|
|
1883
1883
|
`)}async function GM(e,t){if(w(e))return OM(`usage: plugin remove <name>
|
|
1884
|
-
`);let n=kM(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return q(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-
|
|
1884
|
+
`);let n=kM(`remove`,e);if(!(`ok`in n))return n;if(n.positionals.length<1)return q(`plugin remove: expected <name>`);let r=n.positionals[0],{getInstalledPlugin:i,deleteInstalledPlugin:a}=await import(`./store-Ce8lHof4.js`),o=await i(r,t.fs);if(!o)return q(`plugin remove: no installed plugin named "${r}"`);let s=0;if(o.mcpServerNames&&o.mcpServerNames.length>0){let{deleteServer:e,getServer:n}=await import(`./store-C8pkV9xX.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(`${DM}/`);return c&&await LM(await MM(t),o.root),OM([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
|
|
1885
1885
|
`)+`
|
|
1886
1886
|
`)}function KM(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 qM(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
|
|
1887
1887
|
`)}const JM=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],YM=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],XM={running:`R`,pending:`S`,exited:`Z`,killed:`K`},ZM=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],QM=[`-o`,`--columns`];function $M(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:QM}))return pN();let n=e.processManager??eN();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
|
|
@@ -1978,7 +1978,7 @@ Examples:
|
|
|
1978
1978
|
`)+`
|
|
1979
1979
|
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>nP(e)).join(`
|
|
1980
1980
|
`)+`
|
|
1981
|
-
`,stderr:``,exitCode:0}}catch(e){return qN(JN(e))}}async function iP(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 ZN()).map(e=>({name:e.name}));return[...n,...r]}async function aP(e,t){let n=(await iP(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:qN(`voice "${t}" not found. Use --list to see available voices.`)}}async function oP(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:KN(t?n():e()),stderr:``,exitCode:0}}return{stdout:KN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return qN(JN(e))}}async function sP(e,t){return t.includes(`--list`)?rP(e):t.includes(`--status`)?oP(e,!1):t.includes(`--warmup`)?oP(e,!0):null}async function cP(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return qN(`speech synthesis error: ${JN(e)}`)}}async function lP(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return qN(JN(e))}}async function uP(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return qN(JN(e))}}async function dP(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 qN(JN(e))}}async function fP(e,t){return e.local?uP(t):dP(e,t)}async function pP(e,t){let n=await fP(e,t);return`exitCode`in n?n:{...pi(n.bytes),stderr:``,exitCode:0}}async function mP(e,t,n,r){let i=await fP(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 qN(`failed to write ${n}: ${JN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function hP(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await aP(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&&!Jn(t)?pP(e,i):n.outFile?mP(e,t,n.outFile,i):e.local?cP(i):lP(e,i)}function gP(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return GN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return qN(`Web Speech API unavailable in this environment`);let r=await sP(n,e);if(r)return r;let i=tP(e);return`exitCode`in i?i:i.text?i.lang?hP(n,t,{...i,lang:i.lang}):qN(`-l language tag is required`):GN()})}function _P(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-
|
|
1981
|
+
`,stderr:``,exitCode:0}}catch(e){return qN(JN(e))}}async function iP(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 ZN()).map(e=>({name:e.name}));return[...n,...r]}async function aP(e,t){let n=(await iP(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:qN(`voice "${t}" not found. Use --list to see available voices.`)}}async function oP(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:KN(t?n():e()),stderr:``,exitCode:0}}return{stdout:KN(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return qN(JN(e))}}async function sP(e,t){return t.includes(`--list`)?rP(e):t.includes(`--status`)?oP(e,!1):t.includes(`--warmup`)?oP(e,!0):null}async function cP(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return qN(`speech synthesis error: ${JN(e)}`)}}async function lP(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return qN(JN(e))}}async function uP(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return qN(JN(e))}}async function dP(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 qN(JN(e))}}async function fP(e,t){return e.local?uP(t):dP(e,t)}async function pP(e,t){let n=await fP(e,t);return`exitCode`in n?n:{...pi(n.bytes),stderr:``,exitCode:0}}async function mP(e,t,n,r){let i=await fP(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 qN(`failed to write ${n}: ${JN(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function hP(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await aP(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&&!Jn(t)?pP(e,i):n.outFile?mP(e,t,n.outFile,i):e.local?cP(i):lP(e,i)}function gP(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return GN();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return qN(`Web Speech API unavailable in this environment`);let r=await sP(n,e);if(r)return r;let i=tP(e);return`exitCode`in i?i:i.text?i.lang?hP(n,t,{...i,lang:i.lang}):qN(`-l language tag is required`):GN()})}function _P(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-DUAmyetz.js`);return n(e,t)})}function vP(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 yP=1e4;async function bP(e,t,n){let r={method:e,headers:xe({"Content-Type":`application/json`}),signal:AbortSignal.timeout(yP)};n&&(r.body=JSON.stringify(n));try{let e=await fetch(be(`/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:xP(e)}}}}function xP(e){let t=e instanceof Error?e.name:``;return t===`TimeoutError`||t===`AbortError`?`no response from the secret store within ${yP/1e3}s`:`secret store unreachable: ${e instanceof Error?e.message:String(e)}`}function SP(e,t){return`could not read ${e} secrets — ${t??`the bridge gave no reason`}`}function CP(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 wP(){return{async list(){let[e,t]=await Promise.all([bP(`GET`,``),bP(`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(SP(`saved`,OP(e.data)));if(t.ok)for(let e of t.data)n.push({name:e.name,domains:e.domains,persisted:!1});else r.push(SP(`session`,OP(t.data)));return{entries:n,warnings:r}},async getInfo(e){return CP(await this.list(),e)},async getMasked(e){let{ok:t,data:n}=await bP(`GET`,`/masked`);return t?n.find(t=>t.name===e)??null:null},async peek(e){let{ok:t,data:n}=await bP(`GET`,`/peek?name=${encodeURIComponent(e)}`);return t?n:null},async setSession(e,t,n){let{ok:r,data:i}=await bP(`POST`,`/session`,{name:e,value:t,domains:n});if(!r)throw Error(OP(i)??`failed to set session secret`)},async setPersisted(e,t,n){let{ok:r,data:i}=await bP(`POST`,``,{name:e,value:t,domains:n});if(!r)throw Error(OP(i)??`failed to persist secret`)},async setScope(e,t){let{ok:n,data:r}=await bP(`POST`,`/scope`,{name:e,domains:t});if(!n)throw Error(OP(r)??`failed to update scope`)},async delete(e){let{ok:t,status:n,data:r}=await bP(`DELETE`,`/${encodeURIComponent(e)}`);if(n===404)return{removed:!1};if(!t)throw Error(OP(r)??`failed to delete secret`);return{removed:!0,fromSession:r&&typeof r==`object`&&`fromSession`in r?!!r.fromSession:void 0}}}}function TP(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(SP(`saved`,e?.error)),n?.entries||i.push(SP(`session`,n?.error)),{entries:r,warnings:i}},async getInfo(e){return CP(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 EP(){return TP(e=>vP(e))}function DP(){return TP(e=>{let{type:t,...n}=e;return De(t,n)})}function OP(e){if(e&&typeof e==`object`&&`error`in e){let t=e.error;if(typeof t==`string`)return t}}function kP(e){switch(e){case`extension-direct`:return EP();case`extension-delegate`:return DP();default:return wP()}}const AP=[`--domain`],jP=[`--persist`];function MP(){return`secret — manage secrets for the fetch proxy and mount backends
|
|
1982
1982
|
|
|
1983
1983
|
No approval (session-only, in-memory, never persisted):
|
|
1984
1984
|
secret set <name> <value> --domain <pat> Set a session secret. Free for a
|
|
@@ -2004,6 +2004,11 @@ Other:
|
|
|
2004
2004
|
pipeline.
|
|
2005
2005
|
secret edit Open the Mount Secrets options page
|
|
2006
2006
|
(extension) or print the env path.
|
|
2007
|
+
secret shell-env <set|delete> <args…> The line a shell runs after that
|
|
2008
|
+
set / delete succeeded to keep
|
|
2009
|
+
$NAME in step (export NAME='<mask>'
|
|
2010
|
+
or unset NAME). GNU bash's \`secret\`
|
|
2011
|
+
function runs it for you.
|
|
2007
2012
|
|
|
2008
2013
|
The required --domain flag accepts a non-empty comma-separated list of patterns
|
|
2009
2014
|
(exact or wildcard, e.g. *.github.com). Choosing "Always" on a prompt skips future
|
|
@@ -2022,16 +2027,16 @@ Examples:
|
|
|
2022
2027
|
`,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]
|
|
2023
2028
|
or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
|
|
2024
2029
|
`,exitCode:1};let c=NP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?HP(i,s,c,n):UP(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
|
|
2025
|
-
`,exitCode:1}}async function GP(e,t){let n=C(e.slice(1),{});if(`error`in n)return PP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
|
|
2026
|
-
`,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
|
|
2027
|
-
`,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
|
|
2030
|
+
`,exitCode:1}}function GP(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}async function KP(e,t){let[n,...r]=e.slice(1),i=e=>({stdout:e,stderr:``,exitCode:0});if(n===`set`){let e=C(r,{value:AP,bool:jP}),n=`error`in e?void 0:e.positionals[0];if(!n||!ys(n))return i(``);let a=await t.backend.getMasked(n).catch(()=>null);return i(a?`export ${n}=${GP(a.maskedValue)}\n`:``)}if(n===`delete`||n===`rm`){let e=C(r,{}),t=`error`in e?void 0:e.positionals[0];return i(t&&ys(t)?`unset ${t}\n`:``)}return i(``)}async function qP(e,t){let n=C(e.slice(1),{});if(`error`in n)return PP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
|
|
2031
|
+
`,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 JP(e,t){let n=C(e.slice(1),{});if(`error`in n)return PP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
|
|
2032
|
+
`,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 YP(e,t){let n=C(e.slice(1),{value:AP});if(`error`in n)return PP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
|
|
2028
2033
|
`,exitCode:1};let i=NP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
|
|
2029
|
-
`,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}):zP(a)}async function
|
|
2030
|
-
`,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
|
|
2031
|
-
`,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?xa(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
|
|
2034
|
+
`,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}):zP(a)}async function XP(e,t){let n=C(e.slice(1),{});if(`error`in n)return PP(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
|
|
2035
|
+
`,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 ZP(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return PP(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 QP(e,t){let n=C(e.slice(1),{});if(`error`in n)return PP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
|
|
2036
|
+
`,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?xa(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 $P(e,t){let n=C(e.slice(1),{});if(`error`in n)return PP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
|
|
2032
2037
|
(changes are picked up on the next request — no restart needed)
|
|
2033
2038
|
`,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
|
|
2034
|
-
`,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
|
|
2039
|
+
`,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 eF(e,t,n){let r=e[0];switch(r){case`set`:return WP(e,t,n);case`get`:case`read`:return qP(e,n);case`shell-env`:return KP(e,n);case`peek`:return JP(e,n);case`scope`:return YP(e,n);case`list`:return XP(e,n);case`delete`:case`rm`:return ZP(e,r,n);case`test`:return QP(e,n);case`edit`:return $P(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function tF(e={}){let t=BP(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:AP}))return{stdout:MP(),stderr:``,exitCode:0};try{return await eF(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function nF(){return null}function rF(){return null}function iF(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
|
|
2035
2040
|
serve --logs [<token>] [--lines <n>]
|
|
2036
2041
|
serve --truncate [<token>]
|
|
2037
2042
|
|
|
@@ -2067,28 +2072,28 @@ Limits and lifetime:
|
|
|
2067
2072
|
its TTL. Either can be removed sooner with \`serve --stop\`.
|
|
2068
2073
|
- <token> is the "Preview token" printed at mint time or the TOKEN column
|
|
2069
2074
|
of \`serve --list\`; \`--stop\` also accepts the preview URL.
|
|
2070
|
-
`,stderr:``,exitCode:0}}function
|
|
2071
|
-
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function
|
|
2075
|
+
`,stderr:``,exitCode:0}}function aF(e){return`error`in e}function oF(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
|
|
2076
|
+
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function sF(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
|
|
2072
2077
|
`};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)
|
|
2073
2078
|
`};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.
|
|
2074
2079
|
`}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
2075
|
-
`}}function
|
|
2080
|
+
`}}function cF(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function lF(e,t,n){let r=sF(e,t,n);if(r)return r;let i=cF(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
|
|
2076
2081
|
`};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
|
|
2077
|
-
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=
|
|
2082
|
+
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=oF(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
|
|
2078
2083
|
`};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
|
|
2079
2084
|
`}:(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
|
|
2080
2085
|
`}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
|
|
2081
|
-
`}:(n.directory=e,{skip:0})}function
|
|
2082
|
-
`,exitCode:1};if(n.webhookId){let e=await fy();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
|
|
2083
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
2084
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
2085
|
-
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(
|
|
2086
|
+
`}:(n.directory=e,{skip:0})}function uF(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=lF(e[n],e[n+1],t);if(aF(r))return{...t,error:r.error};n+=r.skip}return t}async function dF(e,t,n,r){if(!Mr(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=zr(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 fF(e){return`exitCode`in e}async function pF(e){let t=ya(e)??e,n,r=rF();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
|
|
2087
|
+
`,exitCode:1};if(n.webhookId){let e=await fy();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 mF(){let e=rF();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
|
|
2088
|
+
`,stderr:``,exitCode:0}:{stdout:gF(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
|
|
2089
|
+
`,stderr:``,exitCode:0}:{stdout:gF(n),stderr:``,exitCode:0}}function hF(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function gF(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${hF(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function _F(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 vF(e){let t,n=rF();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.
|
|
2090
|
+
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(_F).join(``)}`,stderr:``,exitCode:0}}async function yF(e){let t,n,r=rF();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 bF(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:Tr(s)})}return n}function xF(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function SF(e){let t=nF();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 CF(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function wF(e,t){if(!e)return{ok:!0};let n=await fy();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 TF(e,t,n,r,i,a,o){let s;try{s=await SF({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 fy();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await CF(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 EF(e){if(e.stop){let t=e.stop;return xF(()=>pF(t))}if(e.list)return xF(()=>mF());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
|
|
2086
2091
|
`,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
|
|
2087
|
-
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return
|
|
2092
|
+
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return xF(()=>vF({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return xF(()=>yF(t))}}function DF(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
|
|
2088
2093
|
`,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
|
|
2089
|
-
`,exitCode:1}}async function
|
|
2090
|
-
`:``,f=await
|
|
2091
|
-
`;function
|
|
2094
|
+
`,exitCode:1}}async function OF(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return bF(t,n)}}async function kF(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return iF();let i=uF(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await EF(i);if(a)return a;if(!i.directory)return iF();let o=DF(i);if(o)return o;let s=await dF(i.directory,i.entry,t.fs,t.cwd);if(fF(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await OF(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)
|
|
2095
|
+
`:``,f=await wF(!i.noBridge&&i.bridge,d);return f.ok?TF(i,c,l,f.webhookId,d,u,n):f.result}function AF(e,t){return S(`serve`,(n,r)=>kF(n,r,e,t))}const jF=`usage: session export [--id <id>] [--output <path>]
|
|
2096
|
+
`;function MF(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 NF(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${jF}`};let n=r[e+1];if(!n||n.startsWith(`-`))return{ok:!1,stderr:`session export: --id requires a value\n${jF}`};t=n,e++}else if(i===`--output`){if(n!==null)return{ok:!1,stderr:`session export: duplicate flag --output\n${jF}`};let t=r[e+1];if(!t||t.startsWith(`-`))return{ok:!1,stderr:`session export: --output requires a path\n${jF}`};n=t,e++}else if(i.startsWith(`-`))return{ok:!1,stderr:`session export: unknown flag ${i}\n${jF}`};else return{ok:!1,stderr:`session export: unexpected argument ${JSON.stringify(i)}\n${jF}`}}return{ok:!0,args:{sessionId:t,outputPath:n}}}async function PF(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||Dt(r)!==a.sha256)throw new Ea(`transfer-corrupt`);return r}async function FF(e,t){let n=NF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=MF(i);if(!e.ok)return{stdout:``,stderr:`session export: --output ${e.reason}\n${jF}`,exitCode:1}}let a=r==null?{kind:`active`}:{kind:`frozen`,sessionId:r};try{let e=await fs().export(a,{}),n=await PF(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 Ea?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function IF(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return FF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-CwZxueuC.js`);return n(e,t,jF)})}function LF(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-cvQKad0O.js`);return await n(e,t)})}const RF=`leader`;function zF(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function BF(e){return+!!e.leader+e.followers.length}function VF(){return{stdout:`usage: sprinkle <subcommand> [args]
|
|
2092
2097
|
|
|
2093
2098
|
list [--runtime <id>] List sprinkles + an instance line per runtime
|
|
2094
2099
|
open <name> Open a sprinkle by name
|
|
@@ -2106,22 +2111,22 @@ Limits and lifetime:
|
|
|
2106
2111
|
chat <html> Show inline HTML in chat (Tool UI)
|
|
2107
2112
|
Use data-action="name" on buttons for callbacks
|
|
2108
2113
|
Pipe HTML: echo "<div>...</div>" | sprinkle chat
|
|
2109
|
-
`,stderr:``,exitCode:0}}function
|
|
2114
|
+
`,stderr:``,exitCode:0}}function HF(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function UF(){return[RF,...te().map(e=>e.runtimeId)]}function WF(e){return`unknown runtime "${e}"\nknown runtimes: ${UF().join(`, `)}\nRun \`host\` to see connected followers.`}async function GF(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
|
|
2110
2115
|
`,exitCode:1};let r=await je({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
|
|
2111
2116
|
`,exitCode:1}:{stdout:JSON.stringify(r)+`
|
|
2112
|
-
`,stderr:``,exitCode:0}}function
|
|
2113
|
-
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=
|
|
2117
|
+
`,stderr:``,exitCode:0}}function KF(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function qF(e){return[...e.map(e=>({name:e,runtimeId:RF})),...zF()]}async function JF(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`list`,n.error);let r=n.values.get(`--runtime`);if(r!==void 0&&!UF().includes(r))return J(`list`,WF(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
|
|
2118
|
+
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=qF([...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(...KF(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
|
|
2114
2119
|
`)+`
|
|
2115
|
-
`,stderr:``,exitCode:0}}function
|
|
2120
|
+
`,stderr:``,exitCode:0}}function YF(e,t){return!t||jo(e)?null:(Mo(e,t),jo(e)===t?t:null)}async function XF(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=Yi(void 0,n),o=YF(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&No(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 ZF(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 QF(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 $F(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 eI(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=Po(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
|
|
2116
2121
|
`,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
|
|
2117
2122
|
route for follower-forwarded licks too):
|
|
2118
2123
|
`+t.map(([e,t])=>` ${e} -> ${t}`).join(`
|
|
2119
2124
|
`)+`
|
|
2120
|
-
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return No(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=jo(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Mo(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function
|
|
2121
|
-
`,exitCode:1};switch(n){case`list`:return
|
|
2122
|
-
`,stderr:``,exitCode:0}}function
|
|
2123
|
-
`)}\n`:``}async function
|
|
2124
|
-
`)?e:`${e}\n`,exitCode:1}}function
|
|
2125
|
+
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return No(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=jo(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Mo(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function tI(e){let t=[];return e.leader&&t.push(RF),t.push(...e.followers),t.join(`, `)}async function nI(e,t){let n=C(t.slice(1),{value:[`--runtime`]});if(`error`in n)return J(`send`,n.error);let r=n.positionals[0];if(!r)return J(`send`,`name required`);let i=n.positionals.slice(1).join(` `);if(!i)return J(`send`,`JSON data required`);let a;try{a=JSON.parse(i)}catch{return J(`send`,`invalid JSON`)}let o=n.values.get(`--runtime`);if(o!==void 0&&!UF().includes(o))return J(`send`,WF(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`,WF(s.unknownRuntime));let c=BF(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`} (${tI(s)}).\n`,stderr:``,exitCode:0}}function rI(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return VF();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:ot(`sprinkle`,n,VF().stdout),stderr:``,exitCode:0};if(n===`chat`)return GF(at(e),t);let r=HF();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
|
|
2126
|
+
`,exitCode:1};switch(n){case`list`:return JF(r,e);case`open`:return XF(r,e,t.env);case`close`:return ZF(r,e);case`reload`:return QF(r,e);case`refresh`:return $F(r,e);case`route`:return eI(e);case`send`:return nI(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function iI(){return{stdout:`usage: sqlite3 [database] [sql]
|
|
2127
|
+
`,stderr:``,exitCode:0}}function aI(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 oI(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function sI(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function cI(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function lI(e){let t=e.flatMap(e=>e.values.map(e=>e.map(jr).join(`|`)));return t.length>0?`${t.join(`
|
|
2128
|
+
`)}\n`:``}async function uI(e,t,n){let r=await Rr(),i=oI(e,n),a=await sI(r,i,n),o=a.exec(t);return await cI(a,i,n),a.close(),lI(o)}function dI(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function fI(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return iI();let{database:r,sql:i}=aI(t,n);if(!i)return dI(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await uI(r,i,n),stderr:``,exitCode:0}}catch(t){return dI(e,t)}})}function pI(e){return{stdout:``,stderr:e.endsWith(`
|
|
2129
|
+
`)?e:`${e}\n`,exitCode:1}}function mI(){return{stdout:`ssh - run a command on a connected tray follower
|
|
2125
2130
|
|
|
2126
2131
|
Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
|
|
2127
2132
|
ssh --list
|
|
@@ -2144,11 +2149,11 @@ Examples:
|
|
|
2144
2149
|
ssh --list
|
|
2145
2150
|
ssh follower-abc123 "uname -a"
|
|
2146
2151
|
ssh --cwd /tmp follower-abc123 "ls -la"
|
|
2147
|
-
`,stderr:``,exitCode:0}}function
|
|
2152
|
+
`,stderr:``,exitCode:0}}function hI(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
|
|
2148
2153
|
Start one with: slicc <join-url> follow sh -c
|
|
2149
2154
|
`;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(`
|
|
2150
|
-
`)}\n`}function
|
|
2151
|
-
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return
|
|
2155
|
+
`)}\n`}function gI(e){if(e.stdin===void 0)return;let n=di(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 _I(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 vI(){return S(`ssh`,async(e,t)=>{let n=_I(e);if(`help`in n)return mI();if(`error`in n)return pI(n.error);if(n.list||n.runtimeId===void 0)return{stdout:hI(te()),stderr:``,exitCode:0};if(!n.command)return pI(`ssh: missing command
|
|
2156
|
+
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return pI(`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:gI(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 pI(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function yI(e){return{stdout:``,stderr:`${ht(`sudo`,e)}\n`,exitCode:77}}function bI(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...]
|
|
2152
2157
|
`,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
|
|
2153
2158
|
|
|
2154
2159
|
Request human approval to run <command> with elevation. If approved, the
|
|
@@ -2165,14 +2170,14 @@ Options:
|
|
|
2165
2170
|
-h, --help Show this help message and exit.
|
|
2166
2171
|
`,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
|
|
2167
2172
|
`,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
|
|
2168
|
-
`,exitCode:1};let a=sm(e[0],e.slice(1)),o=i.env?.get(dm),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return
|
|
2169
|
-
`,exitCode:1};let i=await Promise.all(r.map(e=>
|
|
2170
|
-
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>
|
|
2171
|
-
`,exitCode:1};let a=await Promise.all(i.map(e=>
|
|
2172
|
-
`,stderr:``,exitCode:0}}function
|
|
2173
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
2174
|
-
`);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=
|
|
2175
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
2173
|
+
`,exitCode:1};let a=sm(e[0],e.slice(1)),o=i.env?.get(dm),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return yI(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 xI(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 SI(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function CI(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function wI(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await SI(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}': ${xI(e)}\n`}}}function TI(){return S(`rm`,async(e,t)=>{let n={recursive:CI(e,`r`)||CI(e,`R`)||e.includes(`--recursive`),force:CI(e,`f`)||e.includes(`--force`),verbose:CI(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
|
|
2174
|
+
`,exitCode:1};let i=await Promise.all(r.map(e=>wI(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 EI(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 DI(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 OI(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await SI(e,r);return{stdout:n.format?`${EI(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 kI(){return S(`stat`,async(e,t)=>{let n=DI(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
|
|
2175
|
+
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>OI(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 AI(e){let t=e.replace(/\/+$/,``),n=t.lastIndexOf(`/`);return n<=0?`/`:t.slice(0,n)}async function jI(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 SI(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}': ${xI(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=AI(a)}return{stdout:o,stderr:``}}function MI(){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
|
|
2176
|
+
`,exitCode:1};let a=await Promise.all(i.map(e=>jI(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 NI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
|
|
2177
|
+
`,stderr:``,exitCode:0}}function PI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function FI(e,t){if(e.mode)return PI(`exactly one of -c, -x, or -t is required`);e.mode=t}function II(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const LI={c:`create`,x:`extract`,t:`list`};function RI(e,t,n,r,i){let a=LI[e];if(a)return{nextIndex:r,error:FI(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:PI(`unsupported option -${e}`)};let o=II(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:PI(`option -${e} requires an argument`)}}function zI(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=RI(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const BI=/^[cxtzvfC]+$/;function VI(e){let t=e.length>0&&BI.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 PI(`unsupported option ${r}`);let i=zI(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function HI(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):Ar(t)}function UI(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function WI(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},...UI(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},...UI(i)});for(let n of await e.fs.readdir(t))await WI(e,kr(t,n),`${a}${n}`,r)}function GI(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?oa(e):e;return aa(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function KI(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 Lr(t,i)?i:void 0}async function qI(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function JI(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 qI(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await qI(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await qI(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await qI(()=>c.utimes(e,n,n))}}async function YI(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=Pr(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function XI(e,t){if(e.paths.length===0)return PI(`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 WI(t,e,HI(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=ra(n);return await t.fs.writeFile(i,e.gzip?ia(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
|
|
2178
|
+
`)}\n`:``,stderr:``,exitCode:0}}function ZI(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 QI(e,t,n){if(e.paths.length>0)return PI(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=GI(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
|
|
2179
|
+
`);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=KI(t,a,e.path);if(!n)return PI(`blocked suspicious path ${e.path}`);await YI(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await JI(t,[...ZI(s),...ZI(c)],ZI(l),n),{stdout:e.verbose?`${o.join(`
|
|
2180
|
+
`)}\n`:``,stderr:``,exitCode:0}}function $I(e={}){return S(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return NI();let r=VI(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?PI(`-C is only supported in create or extract mode`):r.mode===`create`?XI(r,n):QI(r,n,e.fs):PI(`option -f requires an archive path`):PI(`exactly one of -c, -x, or -t is required`)})}var eL=`/**
|
|
2176
2181
|
* Standalone assertions - no dependency on test runner
|
|
2177
2182
|
*
|
|
2178
2183
|
* Each assertion:
|
|
@@ -2360,7 +2365,7 @@ function sameMembers(a, b) {
|
|
|
2360
2365
|
}
|
|
2361
2366
|
|
|
2362
2367
|
const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
|
|
2363
|
-
|
|
2368
|
+
`,tL=`/**
|
|
2364
2369
|
* tst - minimal test runner
|
|
2365
2370
|
*
|
|
2366
2371
|
* - Standalone assertions (assert.js works anywhere)
|
|
@@ -2990,7 +2995,7 @@ function scheduleAutoRun() {
|
|
|
2990
2995
|
scheduleAutoRun()
|
|
2991
2996
|
|
|
2992
2997
|
export * from './assert.js'
|
|
2993
|
-
`;function
|
|
2998
|
+
`;function nL(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 rL=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
|
|
2994
2999
|
|
|
2995
3000
|
Usage:
|
|
2996
3001
|
tsc [options] [files...]
|
|
@@ -3014,28 +3019,28 @@ Install:
|
|
|
3014
3019
|
Then \`tsc --version\` and the transpile commands above. There is no
|
|
3015
3020
|
bundled binary, no CDN fallback; a missing package exits non-zero
|
|
3016
3021
|
with a clear \`ipk add\` hint.
|
|
3017
|
-
`;function
|
|
3018
|
-
`);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
|
|
3019
|
-
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function
|
|
3022
|
+
`;function iL(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 aL(e,t){let n=`${Ar(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${Pr(e)}/${n}`}async function oL(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=Pr(n)}return null}function sL(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function cL(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function lL(e,t,n){let r=sL(t),i=await oL(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,...cL(o)}}}function uL(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
|
|
3023
|
+
`);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 dL(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 fL(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function pL(e,t,n,r){let{outputText:i,diagnostics:a}=fL(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>uL(e,t)),s=o.length>0?`${o.join(`
|
|
3024
|
+
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function mL(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}}dL(e,a);let{outputText:s,diagnostics:c}=fL(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${uL(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,aL(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 hL(e,t){let n;try{n=iL(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:rL,stderr:``,exitCode:0}};let r;try{r=await Dr(nL(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 gL(){return S(`tsc`,async(e,t)=>{let n=await hL(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await lL(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?pL(i,r,a,e):{stdout:rL,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await mL(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const _L=[`**/*.test.{js,ts}`];function vL(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 yL(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 bL(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=vL(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=yL(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:[..._L],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function xL(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 xL(`${r}${e}${i}`))o.push(t);return o}function SL(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 CL(e,t,n){let r=n.flatMap(xL).map(SL),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 wL=null;async function TL(e){if(wL)return wL;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return wL=`
|
|
3020
3025
|
if (typeof process !== 'undefined' && !process.versions) {
|
|
3021
3026
|
try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
|
|
3022
3027
|
}
|
|
3023
3028
|
const __tst_assert_exports = (function () {
|
|
3024
3029
|
const module = { exports: {} };
|
|
3025
3030
|
const exports = module.exports;
|
|
3026
|
-
${e.transpileModule(
|
|
3031
|
+
${e.transpileModule(eL,{compilerOptions:t,fileName:`assert.js`}).outputText}
|
|
3027
3032
|
return module.exports;
|
|
3028
3033
|
})();
|
|
3029
3034
|
const __tst_module_exports = (function () {
|
|
3030
3035
|
const module = { exports: {} };
|
|
3031
3036
|
const exports = module.exports;
|
|
3032
|
-
${e.transpileModule(
|
|
3037
|
+
${e.transpileModule(tL,{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"))`)}
|
|
3033
3038
|
return module.exports;
|
|
3034
3039
|
})();
|
|
3035
3040
|
const __tst = __tst_module_exports.default || __tst_module_exports;
|
|
3036
3041
|
__tst.manual = true;
|
|
3037
|
-
`.trim(),
|
|
3038
|
-
`)}}`,d=
|
|
3042
|
+
`.trim(),wL}function EL(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 DL(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 OL(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 kL(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=Pr(n),u=new Map;for(let n of DL(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await OL(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 AL(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=EL(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
|
|
3043
|
+
`)}}`,d=EL(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
|
|
3039
3044
|
${f}${e}
|
|
3040
3045
|
const __realmRequire = require;
|
|
3041
3046
|
const { createRequire: __createRequire } = __realmRequire("module");
|
|
@@ -3078,7 +3083,7 @@ await Promise.resolve();
|
|
|
3078
3083
|
await new Promise((resolve) => setTimeout(resolve));
|
|
3079
3084
|
${p}
|
|
3080
3085
|
if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
|
|
3081
|
-
`}const
|
|
3086
|
+
`}const jL={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function ML(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...jL}}async function NL(e,t){let n;try{n=bL(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
|
|
3082
3087
|
|
|
3083
3088
|
Usage:
|
|
3084
3089
|
tst [options] [glob...]
|
|
@@ -3100,7 +3105,7 @@ Notes:
|
|
|
3100
3105
|
with statement counters. nyc/c8 cannot wrap this runner: it is not a
|
|
3101
3106
|
Node child. Istanbul/Babel are not bundled (webapp size-limit); the
|
|
3102
3107
|
TypeScript AST already in process does the rewrite.
|
|
3103
|
-
`,stderr:``,exitCode:0}};let r=await
|
|
3108
|
+
`,stderr:``,exitCode:0}};let r=await CL(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 Dr(nL(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await TL(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:ML(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function PL(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function FL(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 kL(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=AL(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await $r(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||PL(g)}}function IL(){return S(`tst`,async(e,t)=>{let n=await NL(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 FL(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 LL=[],RL=`usage: theme <subcommand> [args]
|
|
3104
3109
|
|
|
3105
3110
|
Subcommands:
|
|
3106
3111
|
list List available preset and custom themes
|
|
@@ -3109,23 +3114,23 @@ Subcommands:
|
|
|
3109
3114
|
reset Reset to the default theme
|
|
3110
3115
|
current Show the currently active theme
|
|
3111
3116
|
export <id> <path> Export a theme to a VFS path
|
|
3112
|
-
`;function
|
|
3113
|
-
`),stderr:``,exitCode:0}}async function
|
|
3114
|
-
`,stderr:``,exitCode:0}}async function
|
|
3117
|
+
`;function zL(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function BL(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:RL,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:LL})?{stdout:ot(`theme`,n,RL),stderr:``,exitCode:0}:n===`list`?VL(e):n===`current`?HL(e):n===`reset`?UL(e):n===`apply`?WL(e.slice(1),t):n===`export`?GL(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${RL}`,exitCode:1}})}async function VL(e){let t=C(e.slice(1),{value:LL});if(`error`in t)return zL(`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(`
|
|
3118
|
+
`),stderr:``,exitCode:0}}async function HL(e){let t=C(e.slice(1),{value:LL});return`error`in t?zL(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
|
|
3119
|
+
`,stderr:``,exitCode:0}}async function UL(e){let t=C(e.slice(1),{value:LL});if(`error`in t)return zL(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
|
|
3115
3120
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
3116
|
-
`,exitCode:1}}async function
|
|
3121
|
+
`,exitCode:1}}async function WL(e,t){let n=C(e,{value:LL});if(`error`in n)return zL(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
|
|
3117
3122
|
`,exitCode:1};let r=y();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
3118
3123
|
`,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)
|
|
3119
3124
|
`,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
|
|
3120
|
-
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function
|
|
3121
|
-
`,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
|
|
3122
|
-
`),stderr:``,exitCode:0}}function
|
|
3125
|
+
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function GL(e,t){let n=C(e,{value:LL});if(`error`in n)return zL(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
|
|
3126
|
+
`,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 KL=`unknown`,qL=`usage: uname [-amnorsv]`,JL=[`s`,`n`,`r`,`v`,`m`,`o`];function YL(){return{stdout:[qL,` -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(`
|
|
3127
|
+
`),stderr:``,exitCode:0}}function XL(){let{releasedAt:e,buildId:t}=$e();return e?`${t} (${e})`:t}function ZL(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:KL}function QL(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:KL}function $L(e){switch(e){case`s`:return`SLICC`;case`n`:return Qe();case`r`:return $e().version;case`v`:return XL();case`m`:return ZL();case`o`:return QL()}}function eR(e){return{stdout:``,stderr:`uname: ${e}\n${qL}\n`,exitCode:1}}function tR(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 JL)t.add(e);continue}if(!JL.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function nR(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return YL();let t=tR(e);return`error`in t?eR(t.error):{stdout:`${(t.size>0?JL.filter(e=>t.has(e)):[`s`]).map($L).join(` `)}\n`,stderr:``,exitCode:0}})}function rR(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
|
|
3123
3128
|
Remove FILE. Symbolic links are removed without following their target.
|
|
3124
3129
|
`,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
|
|
3125
3130
|
`:`unlink: extra operand
|
|
3126
|
-
`,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
|
|
3127
|
-
`,stderr:``,exitCode:0}}function
|
|
3128
|
-
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function
|
|
3131
|
+
`,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 iR(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
|
|
3132
|
+
`,stderr:``,exitCode:0}}function aR(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
|
|
3133
|
+
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function oR(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!Lr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=Pr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function sR(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return iR();let n=aR(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=Ot(a),s=0;for(let[e,n]of Object.entries(o)){let r=await oR(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 cR=`ai-ecoverse/slicc`,lR=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,uR=`packages/vfs-root`,dR=3e4,fR=[`${uR}/workspace/skills/`,`${uR}/shared/sprinkles/`,`${uR}/shared/sounds/`,`${uR}/shared/GELATIERE.md`,`${uR}/shared/wiki/WIKI.md`,`${uR}/etc/`],pR=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function mR(){return Object.fromEntries(pR.map(e=>[e,0]))}function hR(e,t,n,r){let i=mR();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 gR(e){if(e[0]!==`apply`)throw Error(lR);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 _R(e){return e.startsWith(`v`)?e:`v${e}`}function vR(e){if(!fR.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)||t.startsWith(`/workspace/skills/`)&&fe()?null:t}async function yR(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 ${dR}ms`)),dR)})])}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 bR(e,t){let n=await yR(t,`https://api.github.com/repos/${cR}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=_e(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=vR(e.path);t&&i.set(t,e.path)}return i}function xR(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${cR}/${encodeURIComponent(e)}/${n}`}function SR(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function CR(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function wR(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 TR(e,t,n,r,i){let a=`${t}.upgrade-${_R(n)}-to-${_R(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 ER(e,t,n,r,i,a,o){let s=await wR(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:SR(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(SR(i,a)||SR(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(SR(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(CR);if(c!==null&&l!==null&&u!==null){let i=Ie(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${_R(n)}:${t}`,other:`${_R(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 TR(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await TR(e.fs,t,n,r,o)}}async function DR(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function OR(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 wR(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 DR(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 kR(e,t,n){let r=_R(t),i=_R(n),[a,o]=await Promise.all([bR(r,e.fetch),bR(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)?yR(e.fetch,xR(r,a.get(t))).then(e=>ye(e.body)):void 0,o.has(t)?yR(e.fetch,xR(i,o.get(t))).then(e=>ye(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 ER(e,r,t,n,i,a,l));return await OR(e.fs,u),u}async function AR(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 jR(e){return S(`upgrade`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`${lR}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:hR(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await AR(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=gR(t));let i=await kR(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:hR(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:hR(n,r,[],[t]),stderr:``,exitCode:1}}})}const MR=`usage: uptime [-p|--pretty] [-s|--since]`,NR=`${MR}
|
|
3129
3134
|
|
|
3130
3135
|
Print how long this SLICC has been running. The clock starts when the browser
|
|
3131
3136
|
window was last loaded — a reload is a reboot.
|
|
@@ -3141,7 +3146,7 @@ The load average is the average number of live kernel processes over the last
|
|
|
3141
3146
|
processes are retained in bounded numbers, so a long burst of short commands
|
|
3142
3147
|
can under-report the older windows. The user count is always 1: a SLICC
|
|
3143
3148
|
runtime has one user identity (see \`id\`).
|
|
3144
|
-
`,
|
|
3149
|
+
`,PR=[1,5,15],FR=6e4,IR=60*FR,LR=24*IR;function RR(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function zR(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 BR(e){let t=Math.max(0,e),n=Math.floor(t/LR),r=Math.floor(t%LR/IR),i=Math.floor(t%IR/FR),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function VR(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/LR),`day`),r(Math.floor(t%LR/IR),`hour`),r(Math.floor(t%IR/FR),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function HR(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 UR(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function WR(e,t,n){let r=PR.map(r=>zR(e,t,r*FR,n).toFixed(2));return` ${UR(t)} up ${BR(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function GR(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 KR(e={}){return S(`uptime`,async t=>{let n=GR(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${MR}\n`,exitCode:1};if(n===`help`)return{stdout:NR,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():_a();if(n===`since`)return qR(`${HR(i)}\n`);if(n===`pretty`)return qR(`${VR(r-i)}\n`);let a=e.processManager??RR();return qR(WR(a?a.list():[],r,i))})}function qR(e){return{stdout:e,stderr:``,exitCode:0}}const JR=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function YR(e){return Tn(e,JR)}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 XR(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 ZR=new Set([`standard`,`class`,`vendor`]),QR=new Set([`device`,`interface`,`endpoint`,`other`]);function $R(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!ZR.has(t))throw Error(`invalid --request-type: '${t}'`);if(!QR.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 ez(e){let t=di(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function tz(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function nz(e){return`0x${e.toString(16).padStart(4,`0`)}`}function rz(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${nz(e.vendorId)}:${nz(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 iz=`usb - access USB devices via WebUSB
|
|
3145
3150
|
|
|
3146
3151
|
Usage: usb <subcommand> [options]
|
|
3147
3152
|
|
|
@@ -3180,9 +3185,9 @@ Options:
|
|
|
3180
3185
|
-h, --help
|
|
3181
3186
|
|
|
3182
3187
|
Transfers are capped at ${ui} bytes (4 MiB).
|
|
3183
|
-
`;function
|
|
3184
|
-
`):X(`${t.map(
|
|
3185
|
-
`)}\n`)}async function
|
|
3188
|
+
`;function az(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?`${tz(e)}\n`:``)}async function oz(e){let t=await e.list();return t.length===0?X(`no granted USB devices
|
|
3189
|
+
`):X(`${t.map(rz).join(`
|
|
3190
|
+
`)}\n`)}async function sz(e,t){let n=e.get(`--__resolved`);if(n)return X(`${rz(await t.info(n))}\n`);let r=XR(e),i=Oe();if(i){let e=await Fx(`usb-device`,r,i);if(e.handle)return X(`${rz(await t.info(e.handle))}\n`);let n=e.info,a=ci();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=li().register(o);return X(`${rz(si(s,o))}\n`)}return X(`${rz(await t.request(r))}\n`)}async function cz(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 lz(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 uz(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 dz(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 fz(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`):az((await n.controlIn(i,$R(t),o)).bytes,r)}async function pz(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=ez(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,$R(n),a)).bytesWritten} bytes written\n`)}async function mz(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`):az((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function hz(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=ez(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 gz(e,t,n){let{positionals:r,flags:i,bools:a}=YR(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return oz(n);case`request`:return sz(i,n);case`open`:case`close`:case`reset`:return cz(o,r,n,a);case`clear-halt`:return lz(r,n);case`select-config`:return uz(r,n);case`claim`:case`release`:return dz(o,r,n,a);case`control-in`:return fz(r,i,n,s);case`control-out`:return pz(r,t,i,n);case`transfer-in`:return mz(r,i,n,s);case`transfer-out`:return hz(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function _z(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(iz);let n=Ur(ce(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await gz(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 vz=`/workspace/.v86`,yz=`v86 - run an x86 virtual machine (v86 wasm engine)
|
|
3186
3191
|
|
|
3187
3192
|
Requires: ${N} v86@${bO}
|
|
3188
3193
|
|
|
@@ -3218,7 +3223,7 @@ Boot options (QEMU-flavored):
|
|
|
3218
3223
|
proxy — no gateway needed, https upstream via the proxy
|
|
3219
3224
|
-vga <MiB> SVGA/VBE video memory (default 8, max 64) —
|
|
3220
3225
|
raise for high-res VESA modes (1080p32 needs ~9)
|
|
3221
|
-
-bios <path> -vgabios <path> BIOS blobs (default ${
|
|
3226
|
+
-bios <path> -vgabios <path> BIOS blobs (default ${vz}/{seabios,vgabios}.bin)
|
|
3222
3227
|
-nographic Serial-only guest (skip VGA)
|
|
3223
3228
|
|
|
3224
3229
|
Notes:
|
|
@@ -3226,19 +3231,19 @@ Notes:
|
|
|
3226
3231
|
(Alpine, FreeDOS, Buildroot Linux) work best.
|
|
3227
3232
|
- The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
|
|
3228
3233
|
- BIOS blobs are not bundled; download once:
|
|
3229
|
-
mkdir -p ${
|
|
3230
|
-
curl -o ${
|
|
3231
|
-
curl -o ${
|
|
3232
|
-
`,
|
|
3233
|
-
mkdir -p ${
|
|
3234
|
-
curl -o ${
|
|
3235
|
-
curl -o ${
|
|
3236
|
-
or pass -bios / -vgabios with explicit VFS paths.`,
|
|
3234
|
+
mkdir -p ${vz}
|
|
3235
|
+
curl -o ${vz}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3236
|
+
curl -o ${vz}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3237
|
+
`,bz=`v86: BIOS images not found. Download them once:
|
|
3238
|
+
mkdir -p ${vz}
|
|
3239
|
+
curl -o ${vz}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3240
|
+
curl -o ${vz}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3241
|
+
or pass -bios / -vgabios with explicit VFS paths.`,xz={"-n":Sz,"-name":Sz,"--name":Sz,"-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)=>Cz(e,`cdrom`,t),"-hda":(e,t)=>Cz(e,`hda`,t),"-fda":(e,t)=>Cz(e,`fda`,t),"-kernel":(e,t)=>Cz(e,`kernel`,t),"-initrd":(e,t)=>Cz(e,`initrd`,t),"-append":(e,t)=>Cz(e,`append`,t),"-bios":(e,t)=>Cz(e,`bios`,t),"-vgabios":(e,t)=>Cz(e,`vgabios`,t),"-state":(e,t)=>Cz(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 Sz(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function Cz(e,t,n){return e[t]=n,null}const wz=[...Object.keys(xz),`--fps`,`--tail`,`--send`,`--to`];function Tz(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(xz,r)?xz[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 Ez(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 Dz(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 Oz(e){return da(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function kz(e){return`exitCode`in e}async function Az(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 jz={a:801,c:306,d:531};function Mz(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Nz(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(yz);if(t[0]===`--version`)return Pz(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:wz}))return $(ot(`v86`,r,yz,{prefix:`v86`}));let i=at(t.slice(1));try{switch(r){case`start`:return await Bz(i,n,e);case`ls`:return Hz();case`type`:return await Kz(i,n);case`key`:return await qz(i,n);case`mouse`:return await Yz(i,n);case`screenshot`:return await Xz(i,n);case`text`:return await Zz(i,n);case`serve`:return Qz(i);case`serial`:return $z(i);case`state`:return await eB(i,n);case`stop`:return await tB(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function Pz(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(Ez(e))).version} (qemu-flavored CLI)\n`);let n=await EO(Ez(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(xO)}async function Fz(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await Az(t,e.bios??`${vz}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(bz.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await Az(t,e.vgabios??`${vz}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(bz.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function Iz(e,t,n){let r=await Fz(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 Az(t,a,`-${r}`);if(`exitCode`in o)return o;n[i]=o}if(e.append&&(n.cmdline=e.append),e.boot&&(n.boot_order=jz[e.boot]),e.state){let r=await Az(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 Lz=6e4;function Rz(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${Lz/1e3}s`)),Lz);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function zz(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??p();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 Bz(e,t,n){let r=Tz(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(da(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=Ez(t),o=n.loadEngine?await n.loadEngine(a):await CO({ipk:a}),s={wasm_fn:OO(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await Iz(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??Mz();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`,()=>{Vz(u,d)})}ua(u);try{if(await Rz(l),i.netRelay===`fetch`){let e=zz(l,n);if(e)return await Vz(u,d),e}la(u),await l.run()}catch(e){return await Vz(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 Vz(e,t){fa(e),ca(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 Hz(){let e=sa();if(e.length===0)return $(`no VMs running
|
|
3237
3242
|
`);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(`
|
|
3238
|
-
`)}\n`)}function
|
|
3243
|
+
`)}\n`)}function Uz(e,t){return`prefer: computer ${e} -c ${t}\n`}async function Wz(e,t,n,r){let i=Oz(t);if(kz(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-BySbsyjF.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),Gz(await a([`-c`,l,...n],e,{registry:u}),r,l)}function Gz(e,t,n){let r=Uz(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 Kz(e,t){let{name:n,rest:r}=Dz(e);if(r.length===0){let e=Oz(n);return kz(e)?e:Q(`type: no text supplied`)}return Wz(t,n,[`type`,`--`,...r],`type`)}async function qz(e,t){let{name:n,rest:r}=Dz(e);if(r.length===0){let e=Oz(n);return kz(e)?e:Q(`key: no chord supplied`)}return Wz(t,n,[`key`,...r],`key`)}const Jz=[`left`,`middle`,`right`];async function Yz(e,t){let{name:n,rest:r}=Dz(e),i=Oz(n);if(kz(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?Wz(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>`):Wz(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!Jz.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),Wz(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function Xz(e,t){let{name:n,rest:r}=Dz(e);return Wz(t,n,[`screenshot`,...r],`screenshot`)}async function Zz(e,t){let{name:n}=Dz(e);return Wz(t,n,[`text`],`text`)}function Qz(e){let{name:t}=Dz(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function $z(e){let{name:t,rest:n}=Dz(e),r=Oz(t);if(kz(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
|
|
3239
3244
|
`);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(`
|
|
3240
3245
|
`).slice(-Math.max(1,e)).join(`
|
|
3241
|
-
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function
|
|
3246
|
+
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function eB(e,t){let{name:n,rest:r}=Dz(e),i=Oz(n);if(kz(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 tB(e,t){let{name:n,rest:r}=Dz(e),i=Oz(n);if(kz(i))return i;let a=t.processManager??Mz();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await Vz(i,a),$(`VM '${n}' stopped\n`))}function nB(e={}){return S(`wasm`,async(t,n)=>{let{runWasmCommand:r}=await import(`./run-BUXpkB7_.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands})})}const rB=[`--name`,`--filter`,`--scoop`],iB={state:`inactive`,session:null};function aB(){return{stdout:`usage: webhook <command> [options]
|
|
3242
3247
|
|
|
3243
3248
|
Commands:
|
|
3244
3249
|
create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
|
|
@@ -3258,21 +3263,21 @@ Examples:
|
|
|
3258
3263
|
webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
|
|
3259
3264
|
webhook list
|
|
3260
3265
|
webhook delete abc123
|
|
3261
|
-
`,stderr:``,exitCode:0}}function
|
|
3266
|
+
`,stderr:``,exitCode:0}}function oB(e){return e().session?.webhookUrl??null}function sB(e,t,n){return t?pa(t,e):n()?ma(self.location.href,e):`(URL unavailable — connect a leader tray)`}function cB(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function lB(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
|
|
3262
3267
|
`,exitCode:1};let t=y();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
|
|
3263
3268
|
`,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.
|
|
3264
3269
|
`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
|
|
3265
|
-
`,exitCode:1}}}async function
|
|
3266
|
-
`,exitCode:1};let s=
|
|
3267
|
-
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=
|
|
3270
|
+
`,exitCode:1}}}async function uB(e,t,n){let r=C(e.slice(1),{value:rB});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=Yi(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
|
|
3271
|
+
`,exitCode:1};let s=pB(t);if(s)return s;let c=await fy();if(!c)return cB(`create`);let l=await my(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=mB(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 dB(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 fy();if(!r)return cB(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
|
|
3272
|
+
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=hB(t);return{stdout:gB(i.map(e=>({id:e.id,name:e.name,url:sB(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function fB(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
|
|
3268
3273
|
`,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
|
|
3269
|
-
`,exitCode:1};let i=await fy();if(!i)return
|
|
3270
|
-
`,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
|
|
3271
|
-
`,exitCode:1}}return null}function
|
|
3274
|
+
`,exitCode:1};let i=await fy();if(!i)return cB(`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
|
|
3275
|
+
`,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 pB(e){if(e.hasLocalNodeServer())return null;if(!oB(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}")`)+`
|
|
3276
|
+
`,exitCode:1}}return null}function mB(e,t){try{return sB(e,oB(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function hB(e){try{return{trayUrlBase:oB(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function gB(e,t,n,r){let i=`Active webhooks:
|
|
3272
3277
|
`;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
|
|
3273
3278
|
`;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
|
|
3274
3279
|
Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
|
|
3275
|
-
`),i}function
|
|
3280
|
+
`),i}function _B(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>iB)};return S(`webhook`,async(e,n)=>{if(e.length===0)return aB();let r=e[0];if(w(e,{valueFlags:r===`create`?rB:void 0}))return aB();try{switch(r){case`create`:return await uB(e,t,n.env);case`list`:return await dB(e,t);case`delete`:return await fB(e,t);case`rotate`:return await lB(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 vB(){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 yB(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
|
|
3276
3281
|
|
|
3277
3282
|
Minimal websocat client. Sends stdin lines as WebSocket messages and prints
|
|
3278
3283
|
received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
|
|
@@ -3314,14 +3319,14 @@ EXAMPLES:
|
|
|
3314
3319
|
echo 'Page.navigate {"url":"https://example.com"}' \\
|
|
3315
3320
|
| websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
|
|
3316
3321
|
ws://127.0.0.1:9222/devtools/page/<id>
|
|
3317
|
-
`,stderr:``,exitCode:0}}const
|
|
3318
|
-
`)}function
|
|
3319
|
-
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function
|
|
3322
|
+
`,stderr:``,exitCode:0}}const bB=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 xB(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 SB(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 CB(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 wB(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 TB(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function EB(e,t,n,r,i){let a=xB(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function DB(e,t,n,r,i,a,o){let s=xB(t,n,r,e);if(!s)return{stop:!0};let c=SB(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function OB(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const kB=[(e,t,n,r)=>{if(!OB(r,[`--close-status-code`]))return null;let i=xB(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=CB(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>OB(r,[`--close-reason`])?EB(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>OB(r,[`-B`,`--buffer-size`])?DB(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>OB(r,[`--max-messages`])?DB(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>OB(r,[`--protocol`])?EB(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!OB(r,[`--ping-interval`]))return null;let i=xB(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>OB(r,[`--conn-timeout`])?DB(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>OB(r,[`-H`,`--header`])?EB(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function AB(e,t,n,r){for(let i of kB){let a=i(e,t,n,r);if(a)return a}return null}function jB(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)
|
|
3323
|
+
`)}function MB(e){let t=vB();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(bB.has(r)||bB.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(wB(t,r)||TB(t,r))continue;let i=AB(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 jB(t),t}function NB(e,t){if(!e)return[];let n=t?`\0`:`
|
|
3324
|
+
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function PB(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 FB(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function IB(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 LB=1e4;function RB(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function zB(){let e=!1,t=RB();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function BB(e,t){return e.length?e.join(t)+t:``}function VB(e){return e.length?e.join(`
|
|
3320
3325
|
`)+`
|
|
3321
|
-
`:``}function
|
|
3322
|
-
`,a=
|
|
3323
|
-
`);if(!/^wss?:\/\//i.test(r.url))return
|
|
3324
|
-
`,exitCode:1}}function
|
|
3326
|
+
`:``}function HB(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function UB(e,t){e.verbose<1||(e.customHeaders.length>0&&HB(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&&HB(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&HB(e,t,`-k/--insecure has no effect in browsers`))}function WB(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 GB(e,t,n,r){if(n.outLines.length<LB){n.outLines.push(r);return}n.droppedForOverflow===0&&HB(e,t,`output buffer reached ${LB} 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 KB(e,n,r){let{bytes:i,isBinary:a}=IB(r);return i.length>e.bufferSize&&(HB(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):FB(i)}function qB(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function JB(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function YB(e,t){setTimeout(()=>{JB(t,e.closeStatus??1e3,e.closeReason)},0)}function XB(e,t,n){let r=NB(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=PB(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function ZB(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&YB(t,e)}async function QB(e,t,n){let r=[];UB(e,r);let i=e.nullTerminated?`\0`:`
|
|
3327
|
+
`,a=WB(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=RB(),u=zB(),d=0,f=!1,p=setTimeout(()=>{f=!0,JB(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}JB(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=KB(e,r,t.data);GB(e,r,s,n)}s.received+=1,qB(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(HB(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&&HB(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:BB(s.outLines,i),stderr:VB(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&YB(e,o):ZB(o,e,XB(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&HB(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:BB(s.outLines,i),stderr:VB(r),exitCode:h}}function $B(e){return{stdout:``,stderr:e,exitCode:2}}function eV(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function tV(e,t,n={}){let r=MB(e);if(r.showHelp)return yB();if(r.error)return $B(r.error);if(!r.url)return $B(`websocat: missing ws:// or wss:// URL (use --help for usage)
|
|
3328
|
+
`);if(!/^wss?:\/\//i.test(r.url))return $B(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=eV(n);return i?QB(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
|
|
3329
|
+
`,exitCode:1}}function nV(){return S(`websocat`,async(e,t)=>tV(e,{stdin:P(t.stdin)}))}function rV(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const iV={commands:new Map,collisions:[]};async function aV(e,t){let n=er(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?rr(e.fs,n):iV}async function oV(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?mi(e.fs):new Map}async function sV(e){return e.scriptCatalog?e.scriptCatalog.getWasmCommands():new Map}function cV(e,t){return`${e.glue} (wasm, ${e.pkg}${t?`, ${t}`:``})`}function lV(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 ${cV(r)})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)a.push(` (shadowed ${t})`)}return a}function uV(e,{collision:t,wasm:n,wf:r}){let i=[e];for(let e of t?.shadowedPaths??[])i.push(` (shadowed ${e})`);return n&&i.push(` ${cV(n,`shadowed by .jsh`)}`),r&&i.push(` ${r.path} (workflow, shadowed by .jsh)`),i}function dV(e,t,n,r,i){let{jshPath:a,wasm:o,wf:s}=t;if(n.has(e))return{lines:lV(e,t),found:!0};if(a)return{lines:uV(a,t),found:!0};if(o){let e=[cV(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 fV(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
|
|
3325
3330
|
|
|
3326
3331
|
Usage: which <command> [command...]
|
|
3327
3332
|
|
|
@@ -3333,9 +3338,9 @@ Prints the path of the given command(s).
|
|
|
3333
3338
|
|
|
3334
3339
|
Exit code 0 if all commands found, 1 if any not found.
|
|
3335
3340
|
`,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
|
|
3336
|
-
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await
|
|
3341
|
+
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await aV(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await oV(t),u=await sV(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=dV(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(`
|
|
3337
3342
|
`)+`
|
|
3338
|
-
`:``,stderr:``,exitCode:+!m}})}const
|
|
3343
|
+
`:``,stderr:``,exitCode:+!m}})}const pV=`__slicc_workflows`,mV=String.raw`
|
|
3339
3344
|
class WorkflowError extends Error {}
|
|
3340
3345
|
class WorkflowDeterminismError extends WorkflowError {}
|
|
3341
3346
|
class WorkflowAgentCapError extends WorkflowError {}
|
|
@@ -3448,40 +3453,40 @@ function log(message) {
|
|
|
3448
3453
|
}
|
|
3449
3454
|
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()); } };
|
|
3450
3455
|
function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
|
|
3451
|
-
`;function
|
|
3456
|
+
`;function hV(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function gV(e){let t=bV(e);return t===null?{name:null,description:null}:{name:xV(t,`name`),description:xV(t,`description`)}}function _V(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function vV(e){return`const __emit = console.log.bind(console);
|
|
3452
3457
|
const __stringify = JSON.stringify.bind(JSON);
|
|
3453
|
-
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${
|
|
3458
|
+
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${_V(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function yV(e,t){let n=e.split(`
|
|
3454
3459
|
`);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(`
|
|
3455
|
-
`).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
|
|
3460
|
+
`).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 bV(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 xV(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const SV=e(`workflow-command`),CV=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
|
|
3456
3461
|
workflow run --script '<inline js>' [...]
|
|
3457
3462
|
workflow list
|
|
3458
3463
|
workflow status <runId>
|
|
3459
3464
|
workflow stop <runId>
|
|
3460
3465
|
workflow save <runId> <name> [--force]
|
|
3461
3466
|
Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
|
|
3462
|
-
pass --wait to block and print the full result.`,
|
|
3463
|
-
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return
|
|
3467
|
+
pass --wait to block and print the full result.`,wV=new Set([`list`,`status`,`stop`,`save`]);function TV(){return globalThis[pV]}function EV(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function DV(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 OV(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=EV(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=DV(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 kV(e={}){return S(`workflow`,async(t,n)=>{if(wV.has(t[0])&&w(t.slice(1)))return{stdout:CV+`
|
|
3468
|
+
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return FV(t,n);if(t[0]===`save`)return PV(t,n,e);let r=OV(t);if(r.help)return{stdout:CV+`
|
|
3464
3469
|
`,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
|
|
3465
|
-
`,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=
|
|
3466
|
-
`,exitCode:1};let s=
|
|
3467
|
-
`,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
|
|
3468
|
-
`,exitCode:1};if(!
|
|
3470
|
+
`,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=gV(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
|
|
3471
|
+
`,exitCode:1};let s=hV().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=hV(),u=vV({prelude:mV,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?AV(u,a,l,o,n):jV({code:u,source:i,name:o.name,filename:a,sentinel:l,runId:s,ctx:n,options:e})})}async function AV(e,t,n,r,i){let a;try{a=await $r(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return SV.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return IV(r,a,n)}async function jV(e){let t=TV();if(!t)return{stdout:``,stderr:`workflow: run manager not available
|
|
3472
|
+
`,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 MV=/^[a-z0-9][a-z0-9-]*$/,NV=`/workspace/.workflows`;async function PV(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]
|
|
3473
|
+
`,exitCode:1};if(!MV.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=TV()?.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=`${NV}/${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(NV,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){SV.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 FV(e,t){let n=TV();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
|
|
3469
3474
|
`,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(`
|
|
3470
3475
|
`):`(no runs)`)+`
|
|
3471
3476
|
`,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(`
|
|
3472
3477
|
`)+`
|
|
3473
|
-
`,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
|
|
3478
|
+
`,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 IV(e,t,n){let{result:r,log:i,hadResult:a}=yV(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?LV(i)+`
|
|
3474
3479
|
`:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
|
|
3475
3480
|
`),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
|
|
3476
|
-
`,stderr:t.stderr,exitCode:0}}function
|
|
3481
|
+
`,stderr:t.stderr,exitCode:0}}function LV(e){return e.split(`
|
|
3477
3482
|
`).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
|
|
3478
|
-
`)}function
|
|
3483
|
+
`)}function RV(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function zV(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 BV(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function VV(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function HV(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function UV(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?BV(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(`
|
|
3479
3484
|
`)+`
|
|
3480
|
-
`:``}function
|
|
3481
|
-
`}return r}function
|
|
3485
|
+
`:``}function WV(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+=BV(e[i+r],n);r+=a+`
|
|
3486
|
+
`}return r}function GV(e,t,n,r){let i=Array.from(e,e=>`0x${BV(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
|
|
3482
3487
|
`);return r===null?i.length?o+`
|
|
3483
|
-
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function
|
|
3484
|
-
`)){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
|
|
3488
|
+
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function KV(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 qV(e){let t=[],n=0;for(let r of e.split(`
|
|
3489
|
+
`)){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 JV={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},YV=[{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 XV(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=JV[r];if(i){t[i]=!0;continue}let a=YV.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=zV(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 ZV(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function QV(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=di(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function $V(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?WV(t,a,e.upper):e.include?GV(t,a,e.upper,i?null:HV(r??``)):UV(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function eH(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 tH(){return S(`xxd`,async(e,t)=>{if(ZV(e))return{stdout:`usage: xxd [options] [infile [outfile]]
|
|
3485
3490
|
-c cols number of octets per line (default 16; 30 for -p; 12 for -i)
|
|
3486
3491
|
-g bytes number of octets per group (default 2; 0 disables grouping)
|
|
3487
3492
|
-l len stop after len octets
|
|
@@ -3491,8 +3496,8 @@ pass --wait to block and print the full result.`,SV=new Set([`list`,`status`,`st
|
|
|
3491
3496
|
-i output in C include style
|
|
3492
3497
|
-r reverse: convert a hex dump back to binary (-r -p for plain)
|
|
3493
3498
|
-h show this help
|
|
3494
|
-
`,stderr:``,exitCode:0};let n;try{n=
|
|
3495
|
-
`,stderr:``,exitCode:0}}function
|
|
3496
|
-
`,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(/^\.\//,``))||Ar(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await
|
|
3497
|
-
`,exitCode:1};let c=kt(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function rH(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function iH(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[pO(`ipk`,r),pO(`npm`,r),pO(`i`,r),nk(`ipx`,{fs:t,fetch:n}),nk(`npx`,{fs:t,fetch:n}),ub(`di`,{fs:t,fetch:n}),ub(`uv`,{fs:t,fetch:n}),kR({fs:t,fetch:n})]}function aH(e={}){let t=[vE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),ne(),gI(),FF(),OF(e.browserAPI,e.fs),dM(e.browserAPI),Ty(e.browserAPI),CD(e),nH(),aR(),ZI(e.fs?{fs:e.fs}:{}),CI(),AI(),DI(),bv(),eB({buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:e.scriptCatalog&&(()=>e.scriptCatalog.getWasmCommands())}),$V(),uI(`sqlite3`),uI(`sqllite`),mL(),PL(),Ex(),nv(),Oj({buildProcessConfig:e.buildProcessConfig}),Oj({buildProcessConfig:e.buildProcessConfig},`jsh`),DN(`python3`,{buildProcessConfig:e.buildProcessConfig}),DN(`python`,{buildProcessConfig:e.buildProcessConfig}),...iH(e),...e.fs?[WS({fs:e.fs})]:[],...e.fs?[BA({fs:e.fs})]:[],...e.fetch?[kE({fetch:e.fetch,streamFetch:e.streamFetch})]:[],yS(),bS(),MS(),hB(e.webhook),eV(),wy(e.crontask),Jk({fs:e.fs,scriptCatalog:e.scriptCatalog}),jM({fs:e.fs,fetch:e.fetch}),US(),tI(),fM(),pM(`pdftk`),pM(`pdf`),rv(`biscotto`),rv(`biscotti`),CM(`pdftoppm`),CM(`pdftocairo`),wM(`pdftotext`),cy(`convert`),cy(`magick`),uV({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),RL(),eR(),yD(),bD(),tR(),VA(),jN(),Hk(),Zb(),Uj(),Hj(),zk(),$P(rH(e)),WN({fs:e.fs}),_P(),_v(),vv(),yv(`xclip`),yv(`xsel`),gP(),oC(),Og(),kg(),mj(e.fs),st(),Nj(),Yg({getParentJid:e.getParentJid}),ax(),$M({processManager:e.processManager}),WR({processManager:e.processManager}),ak({processManager:e.processManager}),rk({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Qg(),zA(),jk(),hz(),tD(),sS(),jz({processManager:e.processManager}),Cv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),vS(),uv({registry:e.cherryRuntimeRegistry}),Py(),By({fs:e.fs}),Vy({fs:e.fs}),vI(e.sudoCommand),DV({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),tV(),PF()];return e.fs&&(EM(),t.push(...zn.map(t=>hE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let oH=null;function sH(e){oH=e}function cH(e){oH?.(e)}var lH=Nt();const uH=Reflect.get(tt,`DefenseInDepthBox`);function dH(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function fH(e,t){if(typeof e!=`string`)return e;let n=dH(t);if(n===`binary`||n===`latin1`){let t=ge(e);if(t)return t}return lH.Buffer.from(e,n)}function pH(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}var mH=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,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}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=pH(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(e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=uH?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=dH(t),o=lH.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&g(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return lH.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,fH(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),fH(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(pH(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(pH(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new 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)}}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 hH(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?hH(e.getUnderlyingFS?.()):null}async function gH(e){let t=he(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const _H=e(`almost-bash-shell`),vH=`__SLICC_RUN_PID`,yH=`__SLICC_OUTPUT_TEE__`;function bH(e){let t=e?.get(vH);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function xH(e){if(!(vH in e)&&!(yH in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[vH]:t,[yH]:n,[dm]:r,[pp]:i,[mp]:a,...o}=e;return o}function SH(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 CH=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(bH(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:lp,PATH:tr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return aH({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]}})}constructor(t){this.options=t,this.vfsAdapter=new mH(t.fs),this.progress=new Tp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new tp({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:gH}),this.mountCommands=new Os({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:vm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=hH(i)??hH(a);this.scriptCatalog=t.scriptCatalog??new gi({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||$n(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=p({progress:Ap(this.progress)}),l=h({progress:Ap(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),fh(t.fs),lg(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...rt(),...nt()],m=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new it({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:m,customCommands:d,sleep:Zp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:rp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(Em),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 g=d.map(e=>e.name),_=m??[...rt(),...nt()];this.builtinCommandNames=new Set([..._,...g]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}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 Xr(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 nr(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 up(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=dp(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){_H.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(cH(e.trim().split(/\s+/)[0]||`unknown`),m(),await this.waitForInitialJshSync(t),await this.usesGnuBash())return this.runOnGnuBash(e,t,n,r,i,a);let o=pm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[vH]:String(n)},...i===void 0?{}:{[yH]:i},...o?{[dm]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=SH([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(yp(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.flushPendingCommandGrants(),d=bp(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=xH(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 xp(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}=await import(`./run-Y1uUJvV7.js`),s=pm(e),c={...this.lastEnv,...n===void 0?{}:{[vH]:String(n)},...s?{[dm]:s}:{}},l=i===void 0?void 0:this.outputTees.get(i),u=await cp(e,{env:c,run:(e,i,a)=>o(e,this.wasmContext(i,t,r),{processConfig:this.buildJshProcessConfig(n),gate:this.gateNativeCommand,onOutput:l,fds:a,commands:()=>this.scriptCatalog.getWasmCommands()})}),d=this.lastEnv.PATH;return u.state&&(this.cwd=u.state.cwd,this.lastEnv=op(u.state.env,[vH,dm,yH])),this.lastEnv.PATH!==d&&await this.syncJshCommands().catch(()=>void 0),await this.flushPendingCommandGrants(),this.applyPendingEnvWrites(),{stdout:u.stdout,stderr:u.stderr,exitCode:u.exitCode,env:{...this.lastEnv},...a&&u.state?{pipeStatus:u.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())return null;let r=await this.gateCommandDispatch(e,t,n[dm]);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`?tm(t,this.progress):rm(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(yH),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await am(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(yH);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=Kp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Jp(t,this.progress,qp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(dm))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=sm(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await lm(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(`
|
|
3498
|
-
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)
|
|
3499
|
+
`,stderr:``,exitCode:0};let n;try{n=XV(e)}catch(e){return RV(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await QV(t,r,a)}catch{return RV(`${r}: No such file or directory`)}if(n.revert){let e=VV(o),r=n.plain?KV(e):qV(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:VV(r),stderr:``,exitCode:0}}let{data:s,base:c}=eH(n,o),l=$V(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 nH(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=kr(t,o),s=n?`${n}/${o}`:o;a+=await nH(e,i,s,r)}return a}function rH(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
|
|
3500
|
+
`,stderr:``,exitCode:0}}function iH(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return rH();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
|
|
3501
|
+
`,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(/^\.\//,``))||Ar(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await nH(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
|
|
3502
|
+
`,exitCode:1};let c=kt(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function aH(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function oH(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[pO(`ipk`,r),pO(`npm`,r),pO(`i`,r),nk(`ipx`,{fs:t,fetch:n}),nk(`npx`,{fs:t,fetch:n}),ub(`di`,{fs:t,fetch:n}),ub(`uv`,{fs:t,fetch:n}),jR({fs:t,fetch:n})]}function sH(e={}){let t=[vE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),ne(),vI(),LF(),AF(e.browserAPI,e.fs),dM(e.browserAPI),Ty(e.browserAPI),CD(e),iH(),sR(),$I(e.fs?{fs:e.fs}:{}),TI(),MI(),kI(),bv(),nB({buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:e.scriptCatalog&&(()=>e.scriptCatalog.getWasmCommands())}),tH(),fI(`sqlite3`),fI(`sqllite`),gL(),IL(),Ex(),nv(),Oj({buildProcessConfig:e.buildProcessConfig}),Oj({buildProcessConfig:e.buildProcessConfig},`jsh`),DN(`python3`,{buildProcessConfig:e.buildProcessConfig}),DN(`python`,{buildProcessConfig:e.buildProcessConfig}),...oH(e),...e.fs?[WS({fs:e.fs})]:[],...e.fs?[BA({fs:e.fs})]:[],...e.fetch?[kE({fetch:e.fetch,streamFetch:e.streamFetch})]:[],yS(),bS(),MS(),_B(e.webhook),nV(),wy(e.crontask),Jk({fs:e.fs,scriptCatalog:e.scriptCatalog}),jM({fs:e.fs,fetch:e.fetch}),US(),rI(),fM(),pM(`pdftk`),pM(`pdf`),rv(`biscotto`),rv(`biscotti`),CM(`pdftoppm`),CM(`pdftocairo`),wM(`pdftotext`),cy(`convert`),cy(`magick`),fV({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),BL(),nR(),yD(),bD(),rR(),VA(),jN(),Hk(),Zb(),Uj(),Hj(),zk(),tF(aH(e)),WN({fs:e.fs}),_P(),_v(),vv(),yv(`xclip`),yv(`xsel`),gP(),oC(),Og(),kg(),mj(e.fs),st(),Nj(),Yg({getParentJid:e.getParentJid}),ax(),$M({processManager:e.processManager}),KR({processManager:e.processManager}),ak({processManager:e.processManager}),rk({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...Qg(),zA(),jk(),_z(),tD(),sS(),Nz({processManager:e.processManager}),Cv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),vS(),uv({registry:e.cherryRuntimeRegistry}),Py(),By({fs:e.fs}),Vy({fs:e.fs}),bI(e.sudoCommand),kV({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),rV(),IF()];return e.fs&&(EM(),t.push(...zn.map(t=>hE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let cH=null;function lH(e){cH=e}function uH(e){cH?.(e)}var dH=Nt();const fH=Reflect.get(tt,`DefenseInDepthBox`);function pH(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function mH(e,t){if(typeof e!=`string`)return e;let n=pH(t);if(n===`binary`||n===`latin1`){let t=ge(e);if(t)return t}return dH.Buffer.from(e,n)}function hH(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}var gH=class{vfs;registeredCommandsFn=null;listingStats=new Map;listingStatsMax;listingStatsTtlMs;constructor(e,t){this.vfs=e,this.listingStatsMax=Math.max(1,t?.listingStatsMax??2e4),this.listingStatsTtlMs=t?.listingStatsTtlMs??1e3,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}getVirtualBinCommands(){return this.registeredCommandsFn?.()??[]}virtualUsrStat(e){let t=hH(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(e.length>0&&!e.includes(`/`)&&this.getVirtualBinCommands().includes(e))return{isFile:!0,isDirectory:!1,isSymbolicLink:!1,mode:493,size:0,mtime:new Date(0)}}return null}canWrite(e){let t=this.vfs;return typeof t.canWrite!=`function`||t.canWrite(e)}listMountPoints(){let e=this.vfs;return typeof e.listMountPoints==`function`?e.listMountPoints():[]}trusted(e){let t=fH?.runTrustedAsync;return t?t(e):Promise.resolve().then(e)}async readFile(e,t){return this.trusted(async()=>{let n=b(e),r=await this.vfs.readFile(n,{encoding:`binary`}),i=r instanceof Uint8Array?r:new TextEncoder().encode(r),a=pH(t),o=dH.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&g(o,i),o})}async readFileBuffer(e){return this.trusted(async()=>{let t=b(e),n=await this.vfs.readFile(t,{encoding:`binary`});return n instanceof Uint8Array?n:new TextEncoder().encode(n)})}async readFileBytes(e){let t=await this.readFileBuffer(e);return dH.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,mH(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),mH(t,n)))}async exists(e){return this.trusted(async()=>{let t=b(e);return this.virtualUsrStat(t)?!0:this.vfs.exists(t)})}async stat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.statSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:!!r.isSymlink,mode:r.mode??(r.type===`directory`?493:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.stat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:!!i.isSymlink,mode:i.mode??(i.type===`directory`?493:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async lstat(e){return this.trusted(async()=>{let t=b(e),n=this.virtualUsrStat(t);if(n)return n;let r=this.vfs.lstatSync(t);if(r)return{isFile:r.type===`file`,isDirectory:r.type===`directory`,isSymbolicLink:r.type===`symlink`,mode:r.mode??(r.type===`directory`?493:r.type===`symlink`?511:420),size:r.size,mtime:new Date(r.mtime),identity:r.identity,dev:r.dev,ino:r.identity===void 0?void 0:r.ino};let i=this.primedStats(t)??await this.vfs.lstat(t);return{isFile:i.type===`file`,isDirectory:i.type===`directory`,isSymbolicLink:i.type===`symlink`,mode:i.mode??(i.type===`directory`?493:i.type===`symlink`?511:420),size:i.size,mtime:new Date(i.mtime),identity:i.identity,dev:i.dev,ino:i.identity===void 0?void 0:i.ino}})}async mkdir(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.mkdir(b(e),t)})}async readdir(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[`bin`];if(hH(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort();let n=this.vfs.readDirSync(t);if(n!==null)return n.map(e=>e.name);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),r.map(e=>e.name)})}async readdirWithFileTypes(e){return this.trusted(async()=>{let t=b(e);if(t===`/usr`)return[{name:`bin`,isFile:!1,isDirectory:!0,isSymbolicLink:!1}];if(hH(t)===`/usr/bin`)return this.getVirtualBinCommands().slice().sort().map(e=>({name:e,isFile:!0,isDirectory:!1,isSymbolicLink:!1}));let n=this.vfs.readDirSync(t);if(n!==null)return this.mapFastEntriesToDirents(n);let r=await this.vfs.readDir(t,{includeStats:!0});return this.primeListingStats(t,r),this.mapAsyncEntriesToDirents(r)})}mapFastEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}mapAsyncEntriesToDirents(e){return e.map(e=>this.entryToDirent(e))}entryToDirent(e){return e.type===`symlink`?{name:e.name,isFile:!1,isDirectory:!1,isSymbolicLink:!0}:{name:e.name,isFile:e.type===`file`,isDirectory:e.type===`directory`,isSymbolicLink:!1}}async rm(e,t){return this.dropListingStats(),this.trusted(async()=>{await this.vfs.rm(b(e),t)})}async cp(e,t,n){return this.dropListingStats(),this.trusted(async()=>{let r=b(e),i=b(t);if((await this.vfs.stat(r)).type===`directory`){if(!n?.recursive)throw new 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)}}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 _H(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?_H(e.getUnderlyingFS?.()):null}async function vH(e){let t=he(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}const yH=e(`almost-bash-shell`),bH=`__SLICC_RUN_PID`,xH=`__SLICC_OUTPUT_TEE__`;function SH(e){let t=e?.get(bH);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function CH(e){if(!(bH in e)&&!(xH in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[bH]:t,[xH]:n,[dm]:r,[pp]:i,[mp]:a,...o}=e;return o}function wH(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(SH(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:lp,PATH:tr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return sH({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]}})}constructor(t){this.options=t,this.vfsAdapter=new gH(t.fs),this.progress=new Tp({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new tp({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:vH}),this.mountCommands=new Os({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:vm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=_H(i)??_H(a);this.scriptCatalog=t.scriptCatalog??new gi({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||$n(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=p({progress:Ap(this.progress)}),l=h({progress:Ap(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),fh(t.fs),lg(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...rt(),...nt()],m=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new it({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:m,customCommands:d,sleep:Zp(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:rp(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin(Em),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 g=d.map(e=>e.name),_=m??[...rt(),...nt()];this.builtinCommandNames=new Set([..._,...g]),this.staticBuiltinNames=new Set(this.builtinCommandNames),this.vfsAdapter.setRegisteredCommandsFn(()=>[...this.builtinCommandNames]),this.lastEnv={...r},this.cwd=n,this.startInitialJshSync()}getBash(){return this.bash}getCwd(){return this.cwd}getScriptCatalog(){return this.scriptCatalog}getEnv(){return{...this.lastEnv}}setMaskedEnvVar(e,t){this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t}applySessionOverrides(e){e.cwd!==void 0&&(this.cwd=e.cwd,this.lastEnv.PWD=e.cwd),e.env&&Object.assign(this.lastEnv,e.env)}async getJshCommandNames(){return[...(await this.getFilteredJshCommands()).keys()]}async syncJshCommands(){return this.jshSyncInflight===null?(this.jshSyncInflight=this.doSyncJshCommands(),this.jshSyncInflight):(this.jshSyncDirty=!0,this.jshSyncInflight)}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 Xr(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 nr(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 up(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=dp(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){yH.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(uH(e.trim().split(/\s+/)[0]||`unknown`),m(),await this.waitForInitialJshSync(t),await this.usesGnuBash())return this.runOnGnuBash(e,t,n,r,i,a);let o=pm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[bH]:String(n)},...i===void 0?{}:{[xH]:i},...o?{[dm]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=wH([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(yp(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.flushPendingCommandGrants(),d=bp(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=CH(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 xp(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}=await import(`./run-BUXpkB7_.js`),s=pm(e),c={...this.lastEnv,...n===void 0?{}:{[bH]:String(n)},...s?{[dm]:s}:{}},l=i===void 0?void 0:this.outputTees.get(i),u=await cp(e,{env:c,run:(e,i,a)=>o(e,this.wasmContext(i,t,r),{processConfig:this.buildJshProcessConfig(n),gate:this.gateNativeCommand,onOutput:l,fds:a,commands:()=>this.scriptCatalog.getWasmCommands()})}),d=this.lastEnv.PATH;return u.state&&(this.cwd=u.state.cwd,this.lastEnv=op(u.state.env,[bH,dm,xH])),this.lastEnv.PATH!==d&&await this.syncJshCommands().catch(()=>void 0),await this.flushPendingCommandGrants(),this.applyPendingEnvWrites(),{stdout:u.stdout,stderr:u.stderr,exitCode:u.exitCode,env:{...this.lastEnv},...a&&u.state?{pipeStatus:u.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())return null;let r=await this.gateCommandDispatch(e,t,n[dm]);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`?tm(t,this.progress):rm(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(xH),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await am(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(xH);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=Kp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Jp(t,this.progress,qp(e)),this.scriptRun}endScriptRun(e){this.scriptRunsActive=Math.max(0,this.scriptRunsActive-1),e&&(e.end(),this.scriptRun===e&&(this.scriptRun=null))}wrapCommandForSudo(e){if(!this.isTransparentGatingEnabled())return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(dm))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=sm(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await lm(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(`
|
|
3503
|
+
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)yH.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 $r(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(SH(i.env)))}let s=(await t.getWasmCommands()).get(r);if(s){let{runWasmCommand:n}=await import(`./run-BUXpkB7_.js`);return n([`--argv0`,s.argv0,`--module`,s.wasm,s.glue,...e],i,{processConfig:this.buildJshProcessConfig(SH(i.env)),gate:this.gateNativeCommand,defaults:s.env,commands:()=>t.getWasmCommands()})}let c=(await t.getWorkflowCommands()).get(r);if(c){let t=hi(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?fp(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 $r(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{ga as C,To as S,Bo as _,yV as a,Ea as b,wp as c,vs as d,ds as f,Vo as g,as as h,hV as i,lp as l,ss as m,gH as n,pV as o,cs as p,lH as r,um as s,TH as t,ys as u,jo as v,Ta as x,Sa as y};
|