sliccy 6.226.3 → 6.227.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ui/.vite/manifest.json +182 -182
- package/dist/ui/assets/{account-store-DtlWaJFR.js → account-store-BFb2UO2K.js} +1 -1
- package/dist/ui/assets/{account-store-yDFmTSml.js → account-store-p9YkaR-j.js} +1 -1
- package/dist/ui/assets/{adobe-Cvj0jiJ8.js → adobe-BnfgTqEQ.js} +1 -1
- package/dist/ui/assets/{adobe-BZ6o4MR-.js → adobe-CN7urDKo.js} +1 -1
- package/dist/ui/assets/{agent-panels-BZdkJhZl.js → agent-panels-C6MuWyzH.js} +1 -1
- package/dist/ui/assets/agent-tools-BL9-Zw2C.js +6 -0
- package/dist/ui/assets/{almost-bash-shell-headless-D83A6DsB.js → almost-bash-shell-headless-DQhRonH_.js} +309 -289
- package/dist/ui/assets/{apply-layout-DMwOvbI6.js → apply-layout-DWiLhm8Y.js} +1 -1
- package/dist/ui/assets/{apps-BgDiJ9tg.js → apps-F56LSkNx.js} +1 -1
- package/dist/ui/assets/{azure-openai-BLCp4LNc.js → azure-openai-85x5L6_B.js} +1 -1
- package/dist/ui/assets/{azure-openai--yJd2j6H.js → azure-openai-CY4c1Ugr.js} +1 -1
- package/dist/ui/assets/{backend-hostfs-ZoEndg8K.js → backend-hostfs-uVp10KM9.js} +1 -1
- package/dist/ui/assets/{cdp-Cah3kH-k.js → cdp-BJooT_YW.js} +1 -1
- package/dist/ui/assets/{cerebras-DstHHbHm.js → cerebras-B7CuTW7B.js} +1 -1
- package/dist/ui/assets/{cerebras-DqXsBI7J.js → cerebras-CZd9VG3E.js} +1 -1
- package/dist/ui/assets/codemode-tool-wGfb8DBp.js +8 -0
- package/dist/ui/assets/{composer-speech-BWZlYdFU.js → composer-speech-CIFv7pMq.js} +1 -1
- package/dist/ui/assets/{connect-surface-BIqmHWb2.js → connect-surface-B2N6LdiO.js} +1 -1
- package/dist/ui/assets/connection-manager-SNYTz_SX.js +1 -0
- package/dist/ui/assets/{directed-approval-Bloi8TWf.js → directed-approval-ALHdAvDT.js} +1 -1
- package/dist/ui/assets/dist-Cu98pw2t.js +9 -0
- package/dist/ui/assets/dist-Qk32KIeB.js +4 -0
- package/dist/ui/assets/{emscripten-vfs-hook-DE5NsfW2.js → emscripten-vfs-hook-BWjaiiFG.js} +1 -1
- package/dist/ui/assets/{ensure-speech-assets-B5mfITMv.js → ensure-speech-assets-yt0EoyNf.js} +1 -1
- package/dist/ui/assets/{frozen-archive-writer-DowsB9rT.js → frozen-archive-writer-BBnxV-Sw.js} +1 -1
- package/dist/ui/assets/{fs-Bp9gAcwA.js → fs-Bhw5j0eY.js} +1 -1
- package/dist/ui/assets/{fs-DAgP9CD0.js → fs-DdDYEgE4.js} +2 -2
- package/dist/ui/assets/{gelatiere-store-B7CONVlA.js → gelatiere-store-DNMjj5xM.js} +1 -1
- package/dist/ui/assets/{gelatiere-unit-DH6X7cJR.js → gelatiere-unit-BEnRKsg5.js} +1 -1
- package/dist/ui/assets/{github-Bqn3lETw.js → github-C06K6hM6.js} +2 -2
- package/dist/ui/assets/{github-Cw0zKasO.js → github-DzMMdXju.js} +1 -1
- package/dist/ui/assets/{github-auth-BC3K9U_R.js → github-auth-DcTBaLFg.js} +1 -1
- package/dist/ui/assets/{github-copilot-CpmQHF9O.js → github-copilot-BCxu-JOH.js} +1 -1
- package/dist/ui/assets/{github-copilot-BALmWxLc.js → github-copilot-DMzWgULe.js} +1 -1
- package/dist/ui/assets/{github-install-CZcncOGL.js → github-install-BiHV37oT.js} +1 -1
- package/dist/ui/assets/{github-zip-4LVBhcz-.js → github-zip-CHlzswro.js} +1 -1
- package/dist/ui/assets/{go-driver-CYR67gv1.js → go-driver-DqgTG9N6.js} +1 -1
- package/dist/ui/assets/{hear-CwxyFZjf.js → hear-RPJIER3w.js} +1 -1
- package/dist/ui/assets/{help-6VmFGefr.js → help-BA8Xystm.js} +1 -1
- package/dist/ui/assets/{installer-CmftfopW.js → installer-3ARo1i86.js} +1 -1
- package/dist/ui/assets/{ipk-mamba-CzjQeMMk.js → ipk-mamba-BEORgiAj.js} +1 -1
- package/dist/ui/assets/{js-realm-worker-BCWaYSwM.js → js-realm-worker-BZ9Q6ni5.js} +2 -2
- package/dist/ui/assets/{jsh-executor-Jf1LYfpN.js → jsh-executor-Iaq-AOjA.js} +2 -2
- package/dist/ui/assets/{kernel-worker-oCJxddqw.js → kernel-worker-CTxRZxWy.js} +14 -14
- package/dist/ui/assets/{lick-ws-bridge-BCnJESmx.js → lick-ws-bridge-C_yTWgQK.js} +1 -1
- package/dist/ui/assets/{lick-ws-bridge-CCh8eJDd.js → lick-ws-bridge-DEXhaOXo.js} +1 -1
- package/dist/ui/assets/{live-session-curation-V_Uasi9X.js → live-session-curation-CBWOt4Na.js} +1 -1
- package/dist/ui/assets/{live-session-snapshot-De_AqjPA.js → live-session-snapshot-2ANcFmFa.js} +1 -1
- package/dist/ui/assets/{local-llm-DcQAG8QC.js → local-llm-BY58x8Yq.js} +1 -1
- package/dist/ui/assets/{local-llm-DJ5Yx2rV.js → local-llm-Brt8sjwN.js} +1 -1
- package/dist/ui/assets/{main-D9qYSe4E.js → main-DFwN1I9-.js} +3 -3
- package/dist/ui/assets/{main-cherry-D6G1-Knk.js → main-cherry-CKnVoCvo.js} +1 -1
- package/dist/ui/assets/{memory-curation-seam-BTAHKFOY.js → memory-curation-seam-CRQovNy0.js} +1 -1
- package/dist/ui/assets/{memory-health-B28Zy8vD.js → memory-health-CWV9igFz.js} +1 -1
- package/dist/ui/assets/{memory-write-execute-YO4_YIxH.js → memory-write-execute-F74nkaOx.js} +1 -1
- package/dist/ui/assets/{merge-folded-cost-into-frozen-DvXmWtiN.js → merge-folded-cost-into-frozen-CNbJWFVZ.js} +1 -1
- package/dist/ui/assets/{mount-D3zxHjSN.js → mount-CVw88Sae.js} +1 -1
- package/dist/ui/assets/{mount-6pDAK-94.js → mount-Cd5d-dGq.js} +3 -3
- package/dist/ui/assets/{new-session-WuHzhRFE.js → new-session-BCLo3JwP.js} +2 -2
- package/dist/ui/assets/{oauth-bootstrap-BlPXGorb.js → oauth-bootstrap-m4oJyeeN.js} +2 -2
- package/dist/ui/assets/{onboarding-orchestrator-Dvz_bLXt.js → onboarding-orchestrator-CYaAfyzh.js} +1 -1
- package/dist/ui/assets/{openai-codex-BXnCk9Zm.js → openai-codex-CCVnXN_Y.js} +1 -1
- package/dist/ui/assets/{openai-codex-BCac1FU3.js → openai-codex-D-KswPCn.js} +1 -1
- package/dist/ui/assets/{openrouter-oNKKq1XQ.js → openrouter-BMACqhZg.js} +1 -1
- package/dist/ui/assets/{openrouter-CCdbKpGk.js → openrouter-DDIS0gu8.js} +1 -1
- package/dist/ui/assets/{openrouter-free-kvPfNBHa.js → openrouter-free-CQM2VJ2h.js} +1 -1
- package/dist/ui/assets/{openrouter-free-9qyc8re1.js → openrouter-free-CxENTZRZ.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-BB_XXJs2.js → openrouter-oauth-BTRrF814.js} +1 -1
- package/dist/ui/assets/{openrouter-oauth-CWqVk-SP.js → openrouter-oauth-DeZmK_PC.js} +1 -1
- package/dist/ui/assets/{opfs-mount-C0bm_tX5.js → opfs-mount-CH8xFjB1.js} +1 -1
- package/dist/ui/assets/{panel-rpc-handlers-BXhqny2e.js → panel-rpc-handlers-DEV3O6Nf.js} +2 -2
- package/dist/ui/assets/{panelize-shell-CL6Jh6ww.js → panelize-shell-wTRIeRfk.js} +1 -1
- package/dist/ui/assets/{pi-edit-execution-DbGBJCE5.js → pi-edit-execution-CsYSVIy6.js} +1 -1
- package/dist/ui/assets/{provider-Y_PH_nzb.js → provider-DQlGI3wV.js} +2 -2
- package/dist/ui/assets/{provider-CIlOCw7d.js → provider-DiPmyduk.js} +1 -1
- package/dist/ui/assets/{provider-settings-DTgKRmIr.js → provider-settings-CI1NmuB7.js} +1 -1
- package/dist/ui/assets/provider-store-access-CC-Qd6Js.js +1 -0
- package/dist/ui/assets/provider-store-access-R5OLCz2u.js +1 -0
- package/dist/ui/assets/{providers-BOQEszvE.js → providers-DWJgLVLG.js} +2 -2
- package/dist/ui/assets/{providers-B_qt71ni.js → providers-DvzQAoZe.js} +1 -1
- package/dist/ui/assets/{quick-llm-B65atxYq.js → quick-llm-CIeq8HDn.js} +1 -1
- package/dist/ui/assets/{realm-inprocess-r18IcGTD.js → realm-inprocess-Ct0UTeSZ.js} +2 -2
- package/dist/ui/assets/{realm-unhandled-rejections-CLFXoDV_.js → realm-unhandled-rejections-But1_r5U.js} +1 -1
- package/dist/ui/assets/{realm-unhandled-rejections-DmZBTJ3H.js → realm-unhandled-rejections-XCowEiz5.js} +1 -1
- package/dist/ui/assets/{recovery-screen-Bg2QZHOF.js → recovery-screen-2KkMuDJk.js} +1 -1
- package/dist/ui/assets/{remote-terminal-view-BhWsyuRP.js → remote-terminal-view-BsBi-Jq-.js} +2 -2
- package/dist/ui/assets/{restore-BJ9DteT1.js → restore-BxWnVMjS.js} +1 -1
- package/dist/ui/assets/{run-YhOEQ-2X.js → run-5o2ADtPK.js} +2 -2
- package/dist/ui/assets/{run-CGZiR3xh.js → run-8y7BhTkZ.js} +11 -11
- package/dist/ui/assets/{run-D3zci6-F.js → run-B1b6--PA.js} +1 -1
- package/dist/ui/assets/{run-BEBz3vPw.js → run-DI8sQ-UX.js} +1 -1
- package/dist/ui/assets/{run-DiCeLiWr.js → run-Dp8o0HDu.js} +1 -1
- package/dist/ui/assets/{run-Bfp7AMJX.js → run-V-yf2BVO.js} +2 -2
- package/dist/ui/assets/{run-Bs1s-CSZ.js → run-dJaEQuBZ.js} +1 -1
- package/dist/ui/assets/{session-command-memory-DI9NgIi1.js → session-command-memory-Da1Ay0IK.js} +2 -2
- package/dist/ui/assets/{session-jsonl-JtKj9lOI.js → session-jsonl-BT08KJtu.js} +1 -1
- package/dist/ui/assets/{session-jsonl-BCVA4gOE.js → session-jsonl-CisoFWdV.js} +1 -1
- package/dist/ui/assets/{session-search-index-XPBWSIXP.js → session-search-index-C9dq-YnZ.js} +1 -1
- package/dist/ui/assets/{setup-feature-flags-remote-BKK7m7j9.js → setup-feature-flags-remote-C-QrDDap.js} +1 -1
- package/dist/ui/assets/{setup-model-catalog-f3cUz23m.js → setup-model-catalog-DQFqjnfG.js} +1 -1
- package/dist/ui/assets/{signed-fetch-6UL_VpLO.js → signed-fetch-B_zCsTF6.js} +1 -1
- package/dist/ui/assets/{silent-renew-backoff-CAW34OkU.js → silent-renew-backoff-DZMNobI2.js} +1 -1
- package/dist/ui/assets/slicc-version-DwNEsrEc.js +1 -0
- package/dist/ui/assets/{snapshot-DJ75JNGD.js → snapshot-Qi7uJgTK.js} +1 -1
- package/dist/ui/assets/{snapshot-features-CLwXZcQR.js → snapshot-features-ko4zNFx_.js} +1 -1
- package/dist/ui/assets/{soundscape-Bc8OydM7.js → soundscape-CSNoiZFC.js} +1 -1
- package/dist/ui/assets/{speak-D04crBGf.js → speak-aAmw1Lv4.js} +1 -1
- package/dist/ui/assets/{sprinkle-manager-D8Jzaga3.js → sprinkle-manager-BcUAmBKL.js} +1 -1
- package/dist/ui/assets/{sprinkle-renderer-B6p6QgNS.js → sprinkle-renderer-a99oRJ5K.js} +1 -1
- package/dist/ui/assets/{state-VZwCms9g.js → state-B8wLxLGq.js} +1 -1
- package/dist/ui/assets/{store-D1KxEvdm.js → store-CBtTB-Y7.js} +1 -1
- package/dist/ui/assets/{store-CXcRRh1G.js → store-D8XRrwq1.js} +1 -1
- package/dist/ui/assets/{sudo-CDuGHATj.js → sudo-CvMjZIh6.js} +1 -1
- package/dist/ui/assets/{supervisor-sTOGi9JE.js → supervisor-CNcjK1gk.js} +1 -1
- package/dist/ui/assets/{sync-dialog-yr1C-d2j.js → sync-dialog-D0C6RJ1r.js} +1 -1
- package/dist/ui/assets/{transformers-env-BEBouI7o.js → transformers-env-BWgCzqFy.js} +1 -1
- package/dist/ui/assets/{tray-leader-GQRqcRbk.js → tray-leader-anPCnjI3.js} +1 -1
- package/dist/ui/assets/{tray-leave-runtime-CYz8lhxI.js → tray-leave-runtime-DTq8BTG1.js} +1 -1
- package/dist/ui/assets/{tray-sidecar-B-01JlbW.js → tray-sidecar-Dk-gNNOa.js} +1 -1
- package/dist/ui/assets/{upgrade-detection-CT5olAc5.js → upgrade-detection-BofecB7v.js} +1 -1
- package/dist/ui/assets/{upskill-lick-skip-Uxvt78lK.js → upskill-lick-skip-3qGDA07K.js} +1 -1
- package/dist/ui/assets/{voice-reply-Dm73UnS6.js → voice-reply-C1P_wamT.js} +1 -1
- package/dist/ui/assets/{wc-attach-BfLoPEZv.js → wc-attach-dgMJ26XT.js} +2 -2
- package/dist/ui/assets/{wc-browser-BDjEqTxy.js → wc-browser-B-COerUp.js} +1 -1
- package/dist/ui/assets/{wc-computers-DJ7tj7ba.js → wc-computers-_JxYl2wr.js} +1 -1
- package/dist/ui/assets/{wc-detached-DU8GCdCV.js → wc-detached-D2pbuUgz.js} +1 -1
- package/dist/ui/assets/{wc-extension-CKmEQPD0.js → wc-extension-CllXRrrB.js} +2 -2
- package/dist/ui/assets/{wc-follower-C-HwsNe0.js → wc-follower-BJoxJGJc.js} +3 -3
- package/dist/ui/assets/{wc-follower-oauth-fuLy17je.js → wc-follower-oauth-CRVfRh9S.js} +1 -1
- package/dist/ui/assets/{wc-gelatiere-ByTDxGca.js → wc-gelatiere-oTqfeOtw.js} +1 -1
- package/dist/ui/assets/{wc-live-jd7a4Xkr.js → wc-live-lanuGtCH.js} +5 -5
- package/dist/ui/assets/{wc-nav-CfVEyOTt.js → wc-nav-CxTE5nNk.js} +2 -2
- package/dist/ui/assets/{wc-onboarding-CnCT9Qnw.js → wc-onboarding-CTHTCQRn.js} +2 -2
- package/dist/ui/assets/{wc-permissions-pJmXt0gc.js → wc-permissions-DsdMkMR_.js} +2 -2
- package/dist/ui/assets/{wc-placeholder-DEP_TlXa.js → wc-placeholder-BW3O9G-1.js} +3 -3
- package/dist/ui/assets/{wc-secret-request-GvQ6mvqw.js → wc-secret-request-CYprt2E3.js} +1 -1
- package/dist/ui/assets/{wc-settings-D-1196pA.js → wc-settings-BpOWAvNP.js} +3 -3
- package/dist/ui/assets/{wc-shell-fRYFHHTC.js → wc-shell-ublv7ZL8.js} +3 -3
- package/dist/ui/assets/{wc-shortcut-config-Bp2zsrt6.js → wc-shortcut-config-I0L9ZRfk.js} +1 -1
- package/dist/ui/assets/{wc-sprinkles-DZAgYZa3.js → wc-sprinkles-BZFWrQuP.js} +2 -2
- package/dist/ui/assets/{wc-transcript-export-CzdVWi1P.js → wc-transcript-export-Camv8Krm.js} +2 -2
- package/dist/ui/assets/{wc-tray-DJhQwOvx.js → wc-tray-D50mlMs8.js} +4 -4
- package/dist/ui/assets/welcome-detection-BtHni7N4.js +1 -0
- package/dist/ui/assets/{whisper-session-D8EFLqGF.js → whisper-session-Myw3zk-W.js} +2 -2
- package/dist/ui/assets/{xai-grok-C83q2K0H.js → xai-grok-BVM_XcYa.js} +1 -1
- package/dist/ui/assets/{xai-grok-BIgwYgXV.js → xai-grok-D4iOI1_b.js} +1 -1
- package/dist/ui/index.html +3 -3
- package/dist/ui/packages/webapp/index.html +3 -3
- package/package.json +3 -3
- package/dist/ui/assets/provider-store-access-DTRwGBhG.js +0 -1
- package/dist/ui/assets/provider-store-access-De_LGrJn.js +0 -1
- package/dist/ui/assets/slicc-version-Cjhaxtun.js +0 -1
- package/dist/ui/assets/welcome-detection-ByniVNGE.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{C as l,d as u,f as d,i as f,u as p}from"./account-store-yDFmTSml.js";import{c as m,d as h,n as g,r as _,s as v}from"./proxied-fetch-CoZ8jHud.js";import{t as ee}from"./runtime-env-DadgceZk.js";import{t as te}from"./slugify-BYJ6QVAt.js";import{n as ne,t as re}from"./host-command-Dn-Z4AbC.js";import{a as ie,i as ae,n as oe,r as se,t as ce}from"./snapshot-DJ75JNGD.js";import{i as le,r as y}from"./panel-rpc-DW7W4w6_.js";import{a as ue,c as de,n as fe,o as pe,s as me,t as he}from"./feature-flags-QlgHaQc1.js";import{t as ge}from"./providers-B_qt71ni.js";import{r as _e}from"./binary-cache-bSOhqXB1.js";import{i as ve,n as ye,r as be}from"./fetch-body-CuwTaJC_.js";import{s as xe,t as Se}from"./api-endpoint-D8lUKmPu.js";import{t as Ce}from"./compat-CGK4SwF8.js";import{a as we,i as Te}from"./core-E6pC-3NP.js";import{n as Ee,t as De}from"./mime-types-D7IV6i7k.js";import{t as Oe}from"./secrets-bridge-client-EgBSROu5.js";import{a as ke,i as Ae,n as je,r as Me}from"./tool-ui-DRnUkp2g.js";import{a as Ne,i as Pe,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as Fe,r as Ie,t as Le}from"./merge-file-core-VJlzucJY.js";import{r as Re}from"./workspace-mode-D0kUKBVS.js";import{n as ze,t as Be}from"./thinking-level-5x0UAu9N.js";import{n as Ve,t as He}from"./types-D8gIX-W-.js";import{i as Ue}from"./mount-index-CQfmUPuZ.js";import{a as We,i as Ge,n as Ke,o as qe,s as Je,t as Ye}from"./signed-fetch-6UL_VpLO.js";import{o as Xe}from"./mount-table-store-DrF_Ifaz.js";import{t as Ze}from"./remote-cache-UwMD8EkX.js";import{n as Qe}from"./fs-Bp9gAcwA.js";import{a as $e}from"./tray-leader-status-CpkFr6n7.js";import{n as et,t as tt}from"./slicc-version-Cjhaxtun.js";import{a as nt,i as rt,o as it,r as S,t as at}from"./browser-Jlk38XAj.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as ot,r as st,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as ct}from"./cost-command-C_1fldSP.js";import{d as lt,g as ut,i as dt,n as ft,o as pt}from"./sudoers-BdBYQPUn.js";import{n as mt}from"./types-Dj5TU-Qg.js";import{n as ht,r as gt,t as _t}from"./approval-timeout-CeQbGMnv.js";import{a as vt,c as yt,i as bt,l as xt,n as St,o as Ct,r as wt,t as Tt}from"./types-JfhqX7lD.js";import{n as T,t as Et}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as Dt}from"./html-B_Hg2WOy.js";import{n as Ot}from"./llm-session-id-BZyXP_j2.js";import{t as kt}from"./src-CUSndb9K.js";import{i as At,o as jt}from"./browser-DuyhpHbR.js";import{i as Mt,r as Nt,t as Pt}from"./mount-picker-popup-BMils9JY.js";import{t as Ft}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as It,B as E,C as Lt,D,E as Rt,F as zt,G as Bt,H as O,I as k,J as Vt,K as Ht,L as Ut,M as Wt,N as Gt,O as Kt,P as qt,R as Jt,S as Yt,T as Xt,U as Zt,V as Qt,W as $t,Y as en,_ as tn,a as nn,b as rn,c as an,d as on,f as sn,g as cn,h as ln,i as un,j as dn,k as fn,l as pn,m as mn,n as hn,o as gn,p as A,q as _n,r as vn,s as yn,t as bn,u as xn,v as Sn,w as Cn,x as wn,y as Tn,z as En}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as Dn,_ as On,a as kn,b as An,c as jn,d as Mn,f as Nn,g as Pn,h as Fn,i as In,l as Ln,n as Rn,o as zn,p as Bn,r as Vn,s as Hn,t as Un,u as Wn,v as j,x as M,y as Gn}from"./state-VZwCms9g.js";import{a as Kn,i as qn,r as Jn,t as Yn}from"./git-config-Bdgu8kD2.js";import{i as Xn,m as Zn,r as Qn}from"./stdio-tty-CA5sZxWL.js";import{i as $n,r as er}from"./global-prefix-DqCuANmV.js";import{t as tr}from"./wasm-programs-k6khOGzw.js";import{a as nr,n as rr,o as ir,r as ar,s as or}from"./jsh-discovery-CnvNKojr.js";import{C as sr,a as cr,b as lr,c as ur,d as dr,f as fr,h as pr,i as mr,l as hr,m as gr,n as _r,o as vr,p as yr,r as br,s as xr,t as N,u as Sr,v as Cr,y as wr}from"./shared-D-ZRFYou.js";import{_ as Tr,a as Er,b as Dr,d as Or,f as kr,g as Ar,h as jr,i as Mr,l as Nr,m as Pr,p as Fr,r as Ir,s as Lr,u as Rr,v as zr,x as Br,y as Vr}from"./require-guards-CMPvNDQg.js";import{_ as Hr,a as Ur,b as Wr,c as Gr,d as Kr,f as qr,g as Jr,h as Yr,l as Xr,m as Zr,n as Qr,p as $r,s as ei,t as ti,u as ni,v as ri,x as ii,y as ai}from"./jsh-executor-Jf1LYfpN.js";import{n as oi,t as si}from"./esbuild-wasm-DeTghvWH.js";import{n as ci}from"./wasm-compiler-Ct7QZURL.js";import{a as li,o as ui,s as di,t as fi}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as pi,r as mi,t as hi}from"./just-bash-compat-B-SPHuh_.js";import{i as gi,r as _i,t as vi}from"./script-catalog-B5BTq3Ma.js";import{a as yi,c as bi,o as xi,s as Si,t as Ci}from"./types-Dzr0qYl3.js";import{a as wi,c as Ti,d as Ei,f as Di,n as Oi,r as ki,u as Ai}from"./github-zip-4LVBhcz-.js";import{i as ji,t as Mi}from"./github-auth-BC3K9U_R.js";import{a as Ni,i as Pi,o as Fi,r as Ii,t as Li}from"./provenance-DdmsQ3Nr.js";import{a as Ri,c as zi,i as Bi,n as Vi,o as Hi,r as Ui,s as Wi}from"./github-install-CZcncOGL.js";import{n as Gi,t as Ki}from"./magick-wasm-BbnwhVj1.js";import{i as qi,n as Ji,r as Yi,t as Xi}from"./pdf-raster-BWk6ezTX.js";import{n as Zi}from"./lick-target-env-8JxfVcIV.js";import{t as Qi}from"./tmpdir-env-ate4iNcK.js";import{n as $i,t as ea}from"./hf-defaults-BwJdGLgk.js";import{t as ta}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as na}from"./local-llm-DcQAG8QC.js";import{t as ra}from"./client-C4_ggaf5.js";import{t as ia}from"./redirect-uri-31pXIMS9.js";import{i as aa,n as oa,r as sa,t as ca}from"./tar-BWIPCxI2.js";import{a as la,c as ua,i as da,o as fa,r as pa,s as ma}from"./v86-vm-DCm7zA2r.js";import{n as ha,r as ga}from"./lick-urls-CgPiVwD-.js";let _a=null;function va(e){_a=e!==null&&Number.isFinite(e)&&e>0?e:null}function ya(){if(_a!==null)return _a;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ba=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function xa(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ba.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 Sa(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 Ca(e,t){return e.some(e=>Sa(e,t))}const wa=`slicc-transcript`,Ta=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],Ea=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 Da(e){return Ea.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Oa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const ka=new Set(Ta),Aa=/^[0-9a-fA-F]{64}$/,ja=/^\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 Ma(e){return typeof e==`string`&&Aa.test(e)}function Na(e){return ja.test(e)&&Number.isFinite(Date.parse(e))}function Pa(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 Fa(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Pa(n,t)}:{ok:!0}}function Ia(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 La(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 Ra(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Fa(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?La(e,t):n}function za(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 Ba(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 Va(e,t){let n=za(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Ba(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ha(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`?Na(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 Ua(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 Wa(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Va(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function Ga(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Fa(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Ua(e,t);if(!n.ok)return n}let r=Ha(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=Ia(i,Ra,`${t}.content`);return a.ok?Wa(e,t):a}function Ka(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=Fa(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Ia(r,Ga,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function qa(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ja(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`}:Ma(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 Ya=[`attachment-file-missing`,`attachment-association-unavailable`];function Xa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Fa(e.missingReason,Ya,`${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 Za(e,t){return e.present?Ja(e,t):Xa(e,t)}function Qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=qa(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=Fa(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Za(e,t):r}function $a(e,t){let n=Fa(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 eo(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=Fa(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?$a(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function to(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 no(e,t){return typeof e!=`string`||!ka.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function ro(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 io(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Fa(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Ia(e.missing,no,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function ao(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=Fa(e.state,[`active`,`frozen`],`session.state`);return t.ok?io(e.completeness):t}function oo(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)?Ia(n,eo,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function so(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Ia(t,Ka,`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=Ia(r,to,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Ia(a,Qa,`attachments`):{ok:!1,error:`attachments must be an array`}}function co(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 lo(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 uo(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 fo(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 uo(e))t.add(n)}return t}function po(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 mo(e){return po(e,fo(e))}function ho(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 go(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=ho(e,t);if(!r.ok)return r}}return{ok:!0}}function _o(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return go(e,n)}function vo(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 yo(e,t){let n=vo(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 bo(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(uo(e)))}return t}function xo(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 So(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return xo(e,n,bo(t))}function Co(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 wo(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=Co(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function To(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=co(t);if(!o.ok)return o;let s=lo(t);if(!s.ok)return s;let c=mo(t);if(!c.ok)return c;let l=_o(t,n);if(!l.ok)return l;let u=yo(n,t);if(!u.ok)return u;let d=So(r,t);return d.ok?wo(a,n):d}function Eo(e){let t=so(e);return t.ok?To(e):t}function Do(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=ro(e.export);if(!t.ok)return t;let n=ao(e.session);if(!n.ok)return n;let r=oo(e.privacy);return r.ok?Eo(e):r}async function Oo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:qe});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:ko(a),sourceUrl:a}}function ko(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Ao=`slicc-sprinkle-routes`;function jo(){try{let e=localStorage.getItem(Ao);return e?JSON.parse(e):{}}catch{return{}}}function Mo(e){try{localStorage.setItem(Ao,JSON.stringify(e))}catch{}}function No(e){return jo()[e]}function Po(e,t){let n=jo();n[e]=t,Mo(n)}function Fo(e){let t=jo();delete t[e],Mo(t)}function Io(){return jo()}function Lo(e,t,n){return yt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Ro(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(Lo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function zo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Ro(t,`browser`,St,e.browser),network:Ro(t,`network`,vt,e.network),secrets:Ro(t,`secrets`,Ct,e.secrets),devices:Ro(t,`devices`,wt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Ro(t,`mounts`,bt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Ro(t,`approvals`,Tt,e.approvals)}}function Bo(e={}){return zo({adapter:`connect`,pageGestures:e.pageGestures})}function Vo(e){let t=Et(()=>import(`./extension-ops-Ded2__AC.js`).then(t=>t.createExtensionOps(e)));return zo({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 Ho(e={}){let t=Et(()=>import(`./rest-ops-DyAkn44S.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return zo({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 Uo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Ho({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Vo({adapter:e,pageGestures:n});case`connect`:return Bo({pageGestures:n})}}const Wo=e(`quick-llm`);async function Go(e){let t=f();if(!t)return Wo.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?Yo(n,e.modelId)??Yo(n,r):Ko(n,r),!i)return Wo.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`]=Xo());try{let n=(await Ce(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 Wo.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Ko(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Jo(r.id),a=n.filter(e=>qo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function qo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Jo(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 Yo(e,t){return p(e).find(e=>e.id===t)}function Xo(){return Ot(`ui-quick-llm`)}const Zo=e(`sudo-suggest`),Qo=[`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{C as l,d as u,f as d,i as f,u as p}from"./account-store-p9YkaR-j.js";import{c as m,d as h,n as g,r as _,s as v}from"./proxied-fetch-CoZ8jHud.js";import{t as ee}from"./runtime-env-DadgceZk.js";import{t as te}from"./slugify-BYJ6QVAt.js";import{n as ne,t as re}from"./host-command-Dn-Z4AbC.js";import{a as ie,i as ae,n as oe,r as se,t as ce}from"./snapshot-Qi7uJgTK.js";import{i as le,r as y}from"./panel-rpc-DW7W4w6_.js";import{a as ue,c as de,n as fe,o as pe,s as me,t as he}from"./feature-flags-QlgHaQc1.js";import{t as ge}from"./providers-DvzQAoZe.js";import{r as _e}from"./binary-cache-bSOhqXB1.js";import{i as ve,n as ye,r as be}from"./fetch-body-CuwTaJC_.js";import{s as xe,t as Se}from"./api-endpoint-D8lUKmPu.js";import{t as Ce}from"./compat-CGK4SwF8.js";import{a as we,i as Te}from"./core-E6pC-3NP.js";import{n as Ee,t as De}from"./mime-types-D7IV6i7k.js";import{t as Oe}from"./secrets-bridge-client-EgBSROu5.js";import{a as ke,i as Ae,n as je,r as Me}from"./tool-ui-DRnUkp2g.js";import{a as Ne,i as Pe,n as b,t as x}from"./path-utils-DNJG-zQf.js";import{n as Fe,r as Ie,t as Le}from"./merge-file-core-VJlzucJY.js";import{r as Re}from"./workspace-mode-D0kUKBVS.js";import{n as ze,t as Be}from"./thinking-level-5x0UAu9N.js";import{n as Ve,t as He}from"./types-D8gIX-W-.js";import{i as Ue}from"./mount-index-CQfmUPuZ.js";import{a as We,i as Ge,n as Ke,o as qe,s as Je,t as Ye}from"./signed-fetch-B_zCsTF6.js";import{o as Xe}from"./mount-table-store-DrF_Ifaz.js";import{t as Ze}from"./remote-cache-UwMD8EkX.js";import{n as Qe}from"./fs-Bhw5j0eY.js";import{a as $e}from"./tray-leader-status-CpkFr6n7.js";import{n as et,t as tt}from"./slicc-version-DwNEsrEc.js";import{a as nt,i as rt,o as it,r as S,t as at}from"./browser-Jlk38XAj.js";import{t as C}from"./subcommand-flags-BZi7j78Q.js";import{n as ot,r as st,t as w}from"./subcommand-help-CgO7wRS5.js";import{n as ct}from"./cost-command-C_1fldSP.js";import{d as lt,g as ut,i as dt,n as ft,o as pt}from"./sudoers-BdBYQPUn.js";import{n as mt}from"./types-Dj5TU-Qg.js";import{n as ht,r as gt,t as _t}from"./approval-timeout-CeQbGMnv.js";import{a as vt,c as yt,i as bt,l as xt,n as St,o as Ct,r as wt,t as Tt}from"./types-JfhqX7lD.js";import{n as T,t as Et}from"./boundary-DjgipyWT.js";import"./rest-paths-Dia19u9P.js";import{t as Dt}from"./html-B_Hg2WOy.js";import{n as Ot}from"./llm-session-id-BZyXP_j2.js";import{t as kt}from"./src-CUSndb9K.js";import{i as At,o as jt}from"./browser-DuyhpHbR.js";import{i as Mt,r as Nt,t as Pt}from"./mount-picker-popup-BMils9JY.js";import{t as Ft}from"./buffer-B5d1xHaH.js";import"./buffer-polyfill-BwLbCySD.js";import{A as It,B as E,C as Lt,D,E as Rt,F as zt,G as Bt,H as O,I as k,J as Vt,K as Ht,L as Ut,M as Wt,N as Gt,O as Kt,P as qt,R as Jt,S as Yt,T as Xt,U as Zt,V as Qt,W as $t,Y as en,_ as tn,a as nn,b as rn,c as an,d as on,f as sn,g as cn,h as ln,i as un,j as dn,k as fn,l as pn,m as mn,n as hn,o as gn,p as A,q as _n,r as vn,s as yn,t as bn,u as xn,v as Sn,w as Cn,x as wn,y as Tn,z as En}from"./isomorphic-git-r9mnHMnp.js";import"./global-db-DJXlpNui.js";import{S as Dn,_ as On,a as kn,b as An,c as jn,d as Mn,f as Nn,g as Pn,h as Fn,i as In,l as Ln,n as Rn,o as zn,p as Bn,r as Vn,s as Hn,t as Un,u as Wn,v as j,x as M,y as Gn}from"./state-B8wLxLGq.js";import{a as Kn,i as qn,r as Jn,t as Yn}from"./git-config-Bdgu8kD2.js";import{i as Xn,m as Zn,r as Qn}from"./stdio-tty-CA5sZxWL.js";import{i as $n,r as er}from"./global-prefix-DqCuANmV.js";import{t as tr}from"./wasm-programs-k6khOGzw.js";import{a as nr,n as rr,o as ir,r as ar,s as or}from"./jsh-discovery-CnvNKojr.js";import{C as sr,a as cr,b as lr,c as ur,d as dr,f as fr,h as pr,i as mr,l as hr,m as gr,n as _r,o as vr,p as yr,r as br,s as xr,t as N,u as Sr,v as Cr,y as wr}from"./shared-D-ZRFYou.js";import{_ as Tr,a as Er,b as Dr,d as Or,f as kr,g as Ar,h as jr,i as Mr,l as Nr,m as Pr,p as Fr,r as Ir,s as Lr,u as Rr,v as zr,x as Br,y as Vr}from"./require-guards-CMPvNDQg.js";import{_ as Hr,a as Ur,b as Wr,c as Gr,d as Kr,f as qr,g as Jr,h as Yr,l as Xr,m as Zr,n as Qr,p as $r,s as ei,t as ti,u as ni,v as ri,x as ii,y as ai}from"./jsh-executor-Iaq-AOjA.js";import{n as oi,t as si}from"./esbuild-wasm-DeTghvWH.js";import{n as ci}from"./wasm-compiler-Ct7QZURL.js";import{a as li,o as ui,s as di,t as fi}from"./usb-device-registry-DFzxaOky.js";import{a as P,i as pi,r as mi,t as hi}from"./just-bash-compat-B-SPHuh_.js";import{i as gi,r as _i,t as vi}from"./script-catalog-B5BTq3Ma.js";import{a as yi,c as bi,o as xi,s as Si,t as Ci}from"./types-Dzr0qYl3.js";import{a as wi,c as Ti,d as Ei,f as Di,n as Oi,r as ki,u as Ai}from"./github-zip-CHlzswro.js";import{i as ji,t as Mi}from"./github-auth-DcTBaLFg.js";import{a as Ni,i as Pi,o as Fi,r as Ii,t as Li}from"./provenance-DdmsQ3Nr.js";import{a as Ri,c as zi,i as Bi,n as Vi,o as Hi,r as Ui,s as Wi}from"./github-install-BiHV37oT.js";import{n as Gi,t as Ki}from"./magick-wasm-BbnwhVj1.js";import{i as qi,n as Ji,r as Yi,t as Xi}from"./pdf-raster-BWk6ezTX.js";import{n as Zi}from"./lick-target-env-8JxfVcIV.js";import{t as Qi}from"./tmpdir-env-ate4iNcK.js";import{n as $i,t as ea}from"./hf-defaults-BwJdGLgk.js";import{t as ta}from"./ffmpeg-wasm-sx-3yVAE.js";import{t as na}from"./local-llm-BY58x8Yq.js";import{t as ra}from"./client-C4_ggaf5.js";import{t as ia}from"./redirect-uri-31pXIMS9.js";import{i as aa,n as oa,r as sa,t as ca}from"./tar-BWIPCxI2.js";import{a as la,c as ua,i as da,o as fa,r as pa,s as ma}from"./v86-vm-DCm7zA2r.js";import{n as ha,r as ga}from"./lick-urls-CgPiVwD-.js";let _a=null;function va(e){_a=e!==null&&Number.isFinite(e)&&e>0?e:null}function ya(){if(_a!==null)return _a;let e=globalThis.performance?.timeOrigin;return typeof e==`number`&&Number.isFinite(e)&&e>0?e:Date.now()}new URL(r).hostname;const ba=/^([0-9a-f]{32})--(?:[0-9a-f]{8}-)?([0-9a-f]+)$/i;function xa(e){let t;try{t=new URL(e.includes(`://`)?e:`https://${e}`).hostname}catch{return null}let n=ba.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 Sa(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 Ca(e,t){return e.some(e=>Sa(e,t))}const wa=`slicc-transcript`,Ta=[`canonical-agent-history-unavailable`,`tool-data-may-be-truncated`,`model-metadata-unavailable`,`scoop-history-unavailable`,`attachment-file-missing`,`attachment-association-unavailable`,`complete-snapshot-unavailable`],Ea=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 Da(e){return Ea.has(e.replace(/\/\d+(?=\/|$)/g,`/*`))}var Oa=class extends Error{code;detail;constructor(e,t){super(t?`${e}: ${t}`:e),this.code=e,this.detail=t,this.name=`TranscriptExportError`}};const ka=new Set(Ta),Aa=/^[0-9a-fA-F]{64}$/,ja=/^\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 Ma(e){return typeof e==`string`&&Aa.test(e)}function Na(e){return ja.test(e)&&Number.isFinite(Date.parse(e))}function Pa(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 Fa(e,t,n){return typeof e!=`string`||!t.includes(e)?{ok:!1,error:Pa(n,t)}:{ok:!0}}function Ia(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 La(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 Ra(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Fa(e.type,[`text`,`tool-call`,`attachment-ref`],`${t}.type`);return n.ok?La(e,t):n}function za(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 Ba(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 Va(e,t){let n=za(e,t);if(!n.ok)return n;let r=e.cost;return F(r)?Ba(r,`${t}.cost`):{ok:!1,error:`${t}.cost must be a non-null object`}}function Ha(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`?Na(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 Ua(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 Wa(e,t){let n=e.usage;return n===void 0?{ok:!0}:F(n)?Va(n,`${t}.usage`):{ok:!1,error:`${t}.usage must be a non-null object`}}function Ga(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=Fa(e.role,[`user`,`assistant`,`tool-result`],`${t}.role`);if(!n.ok)return n;if(e.role===`tool-result`){let n=Ua(e,t);if(!n.ok)return n}let r=Ha(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=Ia(i,Ra,`${t}.content`);return a.ok?Wa(e,t):a}function Ka(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=Fa(e.kind,[`cone`,`scoop`],`${t}.kind`);if(!n.ok)return n;let r=e.messages;return Array.isArray(r)?Ia(r,Ga,`${t}.messages`):{ok:!1,error:`${t}.messages must be an array`}}function qa(e,t){for(let n of[`id`,`path`,`originalName`,`mimeType`,`sha256`,`sourceConversationId`,`sourceMessageId`])if(typeof e[n]!=`string`)return{ok:!1,error:`${t}.${n} must be a string`};return{ok:!0}}function Ja(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`}:Ma(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 Ya=[`attachment-file-missing`,`attachment-association-unavailable`];function Xa(e,t){let n=e.path,r=e.sha256,i=e.byteLength;return n===``?r===``?i===0?Fa(e.missingReason,Ya,`${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 Za(e,t){return e.present?Ja(e,t):Xa(e,t)}function Qa(e,t){if(!F(e))return{ok:!1,error:`${t} must be a non-null object`};let n=qa(e,t);if(!n.ok)return n;if(typeof e.byteLength!=`number`)return{ok:!1,error:`${t}.byteLength must be a number`};if(typeof e.present!=`boolean`)return{ok:!1,error:`${t}.present must be a boolean`};let r=Fa(e.handling,[`text-redacted`,`binary-unchanged`],`${t}.handling`);return r.ok?Za(e,t):r}function $a(e,t){let n=Fa(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 eo(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=Fa(e.detector,[`known-secret`,`credential-pattern`,`pre-obfuscated`],`${t}.detector`);if(!n.ok)return n;let r=e.target;return F(r)?$a(r,`${t}.target`):{ok:!1,error:`${t}.target must be a non-null object`}}function to(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 no(e,t){return typeof e!=`string`||!ka.has(e)?{ok:!1,error:`${t} is not a valid completeness reason`}:{ok:!0}}function ro(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 io(e){if(!F(e))return{ok:!1,error:`session.completeness must be a non-null object`};let t=Fa(e.status,[`complete`,`partial`],`session.completeness.status`);return t.ok?Array.isArray(e.missing)?Ia(e.missing,no,`session.completeness.missing`):{ok:!1,error:`session.completeness.missing must be an array`}:t}function ao(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=Fa(e.state,[`active`,`frozen`],`session.state`);return t.ok?io(e.completeness):t}function oo(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)?Ia(n,eo,`privacy.redactions`):{ok:!1,error:`privacy.redactions must be an array`}}function so(e){let t=e.conversations;if(!Array.isArray(t))return{ok:!1,error:`conversations must be an array`};let n=Ia(t,Ka,`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=Ia(r,to,`delegations`);if(!i.ok)return i;let a=e.attachments;return Array.isArray(a)?Ia(a,Qa,`attachments`):{ok:!1,error:`attachments must be an array`}}function co(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 lo(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 uo(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 fo(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 uo(e))t.add(n)}return t}function po(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 mo(e){return po(e,fo(e))}function ho(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 go(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=ho(e,t);if(!r.ok)return r}}return{ok:!0}}function _o(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return go(e,n)}function vo(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 yo(e,t){let n=vo(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 bo(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(uo(e)))}return t}function xo(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 So(e,t){let n=new Set;for(let e of t)F(e)&&typeof e.id==`string`&&n.add(e.id);return xo(e,n,bo(t))}function Co(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 wo(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=Co(i,n,`privacy.redactions[${t}].target`);if(!a.ok)return a}return{ok:!0}}function To(e){let t=e.conversations,n=e.attachments,r=e.delegations,i=e.privacy,a=Array.isArray(i?.redactions)?i.redactions:[],o=co(t);if(!o.ok)return o;let s=lo(t);if(!s.ok)return s;let c=mo(t);if(!c.ok)return c;let l=_o(t,n);if(!l.ok)return l;let u=yo(n,t);if(!u.ok)return u;let d=So(r,t);return d.ok?wo(a,n):d}function Eo(e){let t=so(e);return t.ok?To(e):t}function Do(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=ro(e.export);if(!t.ok)return t;let n=ao(e.session);if(!n.ok)return n;let r=oo(e.privacy);return r.ok?Eo(e):r}async function Oo(e,t,n){let r=await n({method:`GET`,path:`/${e}/sites/${t}/config.json`,origin:qe});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:ko(a),sourceUrl:a}}function ko(e){if(!e)return`da`;let t;try{t=new URL(e).host}catch{return`da`}return t===`api.aem.live`?`aem`:`da`}const Ao=`slicc-sprinkle-routes`;function jo(){try{let e=localStorage.getItem(Ao);return e?JSON.parse(e):{}}catch{return{}}}function Mo(e){try{localStorage.setItem(Ao,JSON.stringify(e))}catch{}}function No(e){return jo()[e]}function Po(e,t){let n=jo();n[e]=t,Mo(n)}function Fo(e){let t=jo();delete t[e],Mo(t)}function Io(){return jo()}function Lo(e,t,n){return yt(t,n,`${e} adapter does not implement ${t}.${n}`)}function Ro(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(Lo(e,t,n))]});return{...Object.fromEntries(a),allowlist:i,supports:e=>i.includes(e)}}function zo(e){let{adapter:t,pageGestures:n}=e,r=n??{};return{adapter:t,browser:Ro(t,`browser`,St,e.browser),network:Ro(t,`network`,vt,e.network),secrets:Ro(t,`secrets`,Ct,e.secrets),devices:Ro(t,`devices`,wt,{usbRequest:r.usbRequest,serialRequest:r.serialRequest,hidRequest:r.hidRequest,...e.devices}),mounts:Ro(t,`mounts`,bt,{pickDirectory:r.pickDirectory,...e.mounts}),approvals:Ro(t,`approvals`,Tt,e.approvals)}}function Bo(e={}){return zo({adapter:`connect`,pageGestures:e.pageGestures})}function Vo(e){let t=Et(()=>import(`./extension-ops-Ded2__AC.js`).then(t=>t.createExtensionOps(e)));return zo({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 Ho(e={}){let t=Et(()=>import(`./rest-ops-DyAkn44S.js`).then(t=>t.createRestOps(e)),e.controlTimeoutMs??1e4);return zo({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 Uo(e,t={}){let{pageGestures:n}=t;switch(e){case`node-rest`:return Ho({pageGestures:n});case`extension-direct`:case`extension-delegate`:return Vo({adapter:e,pageGestures:n});case`connect`:return Bo({pageGestures:n})}}const Wo=e(`quick-llm`);async function Go(e){let t=f();if(!t)return Wo.debug(`No API key for active provider — skipping`),null;let n=d(),r=u(),i;if(i=e.modelId?Yo(n,e.modelId)??Yo(n,r):Ko(n,r),!i)return Wo.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`]=Xo());try{let n=(await Ce(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 Wo.debug(`Quick label call failed`,{error:e instanceof Error?e.message:String(e)}),null}}function Ko(e,t){let n=p(e);if(n.length===0)return;let r=n.find(e=>e.id===t)??n[0],i=Jo(r.id),a=n.filter(e=>qo(e,r,i));return a.length===0?r:(a.sort((e,t)=>(e.cost?.input??0)-(t.cost?.input??0)),a[0])}function qo(e,t,n){if(e.id===t.id)return!1;let r=t.cost?.input??1/0;if((e.cost?.input??1/0)>=r)return!1;let i=e.id.toLowerCase();switch(n){case`claude`:return i.includes(`haiku`);case`gpt`:return/(^|-)mini(-|$)|(^|-)nano(-|$)/.test(i);case`gemini`:return i.includes(`flash`);case`grok`:return/(^|-)mini(-|$)|(^|-)fast(-|$)/.test(i);case`unknown`:return!0}}function Jo(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 Yo(e,t){return p(e).find(e=>e.id===t)}function Xo(){return Ot(`ui-quick-llm`)}const Zo=e(`sudo-suggest`),Qo=[`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
|
`),$o=[`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 es(e,t){if(e.suggestedPattern&&e.suggestedPattern.trim().length>0)return e.suggestedPattern.trim();let n=e.detail.trim();if(e.kind===`guest-message`||e.kind===`guest-tool`)return n;let r=e.kind===`command`?Qo:$o,i=null;try{i=await Go({prompt:n,system:r,maxTokens:40,temperature:0,signal:t})}catch(e){Zo.debug(`suggestPattern: quickLabel threw`,{error:e instanceof Error?e.message:String(e)}),i=null}return ts(i)||n}function ts(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 ns=e(`sudo:capability-gesture`);function rs(e,t={}){let n=t.suggest??es;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 ns.warn(`sudo approval aborted before prompting — denying`,{detail:t.detail}),mt();if(!e)return ns.warn(`no CapabilityBroker injected for the sudo gesture hop — denying (composition bug, never a guessed transport)`,{detail:t.detail}),mt();let o=await e.approvals.request({kind:t.kind,detail:t.detail,suggestedPattern:a,...t.requester?{requester:t.requester}:{},...t.reason?{reason:t.reason}:{},...t.approver?{approver:t.approver}:{},...i?{signal:i}:{}});return o.ok?xt(o.value,a):(ns.warn(`capability broker approvals.request failed — denying`,{message:o.message}),mt())}}}const is=e(`sudo:tray-first`);function as(e,t={}){let n=t.suggest??es,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 mt();let o=t.suggestedPattern;if(!o)try{o=await n(t,a?.signal)}catch{o=t.detail}let s={...t,suggestedPattern:o},c=null;try{c=await i()}catch(e){is.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 ss(e?.decision,o)}catch(e){is.warn(`tray-first sudo probe failed — using native broker`,{error:e instanceof Error?e.message:String(e)})}return e.requestApproval(s,a)}}}const os=[`user-timeout`,`cone-timeout`,`unavailable`];function ss(e,t){if(!e||typeof e!=`object`)return mt();let n=e,r=n.attestation===`biometric`||n.attestation===`passcode`||n.attestation===`none`?n.attestation:void 0;if(n.decision===`allow`)return{decision:`allow`,...r?{attestation:r}:{}};if(n.decision===`always`)return{decision:`always`,pattern:typeof n.pattern==`string`&&n.pattern.trim().length>0?n.pattern.trim():t,...r?{attestation:r}:{}};if(n.decision!==`deny`)return mt();let i=os.find(e=>e===n.reason);return i?{decision:`deny`,reason:i}:{decision:`deny`}}function cs(e,t){return{requestApproval(n){return t.enqueueSudoRequest(e,n)}}}function ls(){return`lick-${Date.now()}-${Math.random().toString(36).slice(2,10)}`}var us=class{pending=new Map;timeoutMs;newId;setTimer;clearTimer;onAutoSettle;constructor(e={}){this.timeoutMs=e.timeoutMs??3e5,this.newId=e.newId??ls,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(ht(`cone-timeout`)),this.notifyAutoSettle(r,`expired`,e.scoopJid))},this.timeoutMs)),this.pending.set(r,{scoopJid:e,request:t,resolve:i,timerHandle:a,approverJid:n})})}}resolve(e,t){let n=this.pending.get(e);return n?(this.pending.delete(e),n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve(t),!0):!1}failScoop(e){let t=0;for(let[n,r]of this.pending)r.scoopJid===e&&(this.pending.delete(n),r.timerHandle!=null&&this.clearTimer(r.timerHandle),r.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(n,`scoop-dropped`,r.scoopJid),t++);return t}failAll(){let e=0;for(let[t,n]of this.pending)n.timerHandle!=null&&this.clearTimer(n.timerHandle),n.resolve({decision:`deny`,reason:`unavailable`}),this.notifyAutoSettle(t,`shutdown`,n.scoopJid),e++;return this.pending.clear(),e}get(e){let t=this.pending.get(e);return t?{id:e,scoopJid:t.scoopJid,request:t.request,...t.approverJid?{approverJid:t.approverJid}:{}}:null}list(){let e=[];for(let[t,n]of this.pending)e.push({id:t,scoopJid:n.scoopJid,request:n.request,...n.approverJid?{approverJid:n.approverJid}:{}});return e}size(){return this.pending.size}};e(`sudo-panel`),typeof globalThis.confirm==`function`&&globalThis.confirm.bind(globalThis),typeof globalThis.prompt==`function`&&globalThis.prompt.bind(globalThis),e(`sudo:page`),e(`sudo`);function ds(e){return gt(fs(e))}function fs(e){let t=rs(e);return e?.adapter===`extension-direct`||e?.adapter===`extension-delegate`?t:as(t)}let ps=null;function ms(e){return ps=e,()=>{ps===e&&(ps=null)}}function hs(){if(!ps)throw new Oa(`session-not-found`);return ps}const gs=`focus`,_s={type:`leaf`,surfaceId:`chat`};function vs(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 ys={focus:{name:`focus`,tree:vs({left:_s},{left:3,middle:1})}};function bs(e){return ys[e]??null}const xs=`progress`;function Ss(e){return/^[A-Za-z_][A-Za-z0-9_]*$/.test(e)}async function Cs(){try{let e=await Nt();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 Pt(e.idbKey);if(!t)throw Error(`mount: no directory handle found in storage`);return await Mt(t),t}throw Error(`mount: unexpected popup result`)}catch(e){throw Error(`mount: ${e instanceof Error?e.message:String(e)}`)}}async function ws(){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 Ts(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 Pt(r.idbKey);if(!i)throw Error(`no directory handle found in storage`);return await Mt(i),i}function Es(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 Ds(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 Os=new Set([`--source`,`--profile`,`--backend`,`--max-body-mb`]);function ks(e){for(let t=0;t<e.length;t++){let n=e[t];if(n===`--`)return!1;if(n===`--help`||n===`-h`)return!0;Os.has(n)&&t++}return!1}function As(e){return`aem://${e.org}/${e.name}${e.path?`/${e.path}`:``}`}var js=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=Es(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=ke();if(!n){let n=await Ms(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=le()?null:y(),i;if(n){let t=this.options.acquireLocalMountViaToolUI;if(!t)throw Error(`mount: tool UI not available in this runtime`);i=await t(n,e)}else i=ee()?await Cs():r?await Ts(r,e):await ws();let a=Ue.fromHandle(i,{mountId:Xe()});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=Xe(),i=new Ze({mountId:r,ttlMs:3e4}),a=new Ge({source:t.source,profile:n,cache:i,maxBodyBytes:t.maxBodyMb?t.maxBodyMb*1024*1024:void 0,mountId:r,signedFetch:this.signedFetchS3??Ke(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??Ye(),i=Ds(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 Oo(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=Xe(),c=new Ze({mountId:s,ttlMs:3e4}),l={source:a===`aem`?As(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 Je(l):new We(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(ks(e))return n===`umount`?this.umountHelp():this.help();let r=Es(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
|
|
@@ -291,7 +291,7 @@ Examples:
|
|
|
291
291
|
skill list
|
|
292
292
|
skill info bluebubbles
|
|
293
293
|
skill read bluebubbles
|
|
294
|
-
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-
|
|
294
|
+
`,stderr:``,exitCode:0};let r=t[0],i=await import(`./kernel-worker-CTxRZxWy.js`).then(e=>e.r);try{switch(r){case`list`:return Rh(t,e,i,n.env.get(`PATH`));case`info`:{let n=t[1];if(!n)return{stdout:``,stderr:`skill: info requires a skill name
|
|
295
295
|
`,exitCode:1};let r=await i.getSkillInfo(e,n);return r?{stdout:Ih(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
|
|
296
296
|
`,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+`
|
|
297
297
|
`,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 Bh=[{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=>Bi(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 Vh(e){let t={skills:[],dryRun:!1,json:!1};for(let n=0;n<e.length;n++){let r=e[n],i=Bh.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 Uh(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 Wh(e,t,n,r){let i=await Uh(e,t);return Ei(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 Gh(e,t,n,r){let i={changes:[],writes:[],removals:[]};for(let[r,a]of n){let n=`${t}/${r}`,{status:o,write:s}=await Wh(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 Di(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 Kh(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 Mi(t),d=await Pi(s,c,o.ref,u,!0,l||void 0);if(d&&r.sha===d&&await qh(e,n,r))return{...o,to:d,outcome:`current`,changes:[]};let f=await Jh(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 Gh(e,`${yi}/${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 $h(e,{changes:h,writes:g,removals:_}),await Fi(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 qh(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 Jh(e,t,n,r,i,a,o){let s=await ki(e,t,a,i??`main`);if(s.status===`ok`){let i=wi(s.files),a=n||Yh(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:Qh(i,a),path:a}}try{return{files:Zh(Xh(await Oi(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 Yh(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 Xh(e){return new Map([...e].filter(([e])=>Ti(e)))}function Zh(e){return new Map([...e].sort(([e],[t])=>e.localeCompare(t)))}function Qh(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);Ti(e)&&r.set(e,i)}return Zh(r)}async function $h(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 eg(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 jh(o,s,t);if(!c.ok)return{...a,outcome:`error`,error:c.error};let l=`${yi}/${n}/SKILL.md`,u=await Uh(e,l),d=new TextEncoder().encode(c.content),f=u!==void 0&&kh(new TextDecoder().decode(u))===kh(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(`${yi}/${n}`,{recursive:!0}),await e.writeFile(l,d),await Fi(e,n,{...r,files:[`SKILL.md`]})),{...a,outcome:`updated`,changes:[{path:`SKILL.md`,status:p}]}}function tg(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 ng(e,t,n,r){let i=Bi(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 rg(e,t,n){if(t.length===0){let t=await Ni(e);return{targets:t.provenanced,missing:[],skipped:t.unattributed}}let r=[],i=[];for(let a of t){let t=await Ii(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?ng(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 ig(e){return e.reason===`not-installed`?`upskill: no skill named "${e.name}" is installed — check \`upskill list\`
|
|
@@ -302,7 +302,7 @@ Examples:
|
|
|
302
302
|
`}function sg(e,t,n,r,i){let a=t?`Skill update (dry run — nothing written):
|
|
303
303
|
`:`Skill update:
|
|
304
304
|
`;for(let n of e)a+=tg(n,t);if(i.length>0&&(a+=og(i)),!n&&r&&e.length>0){let n=i.length>0?`all ${ag(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 cg(e,t,n){let{targets:r,missing:i,skipped:a}=await rg(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 eg(e,t,i.name,i.provenance,n.dryRun):await Kh(e,t,i.name,i.provenance,n.branch,n.dryRun));return{results:o,skipped:a,missing:i}}async function lg(e,t,n){let r=Vh(e);if(r.error)return{stdout:``,stderr:`${r.error}\n`,exitCode:1};let{results:i,missing:a,skipped:o}=await cg(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`:sg([],r.dryRun,!1,!0,o),stderr:``,exitCode:0}:{stdout:``,stderr:a.length?a.map(ig).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 zi();let l=a.map(ig).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:sg(i,r.dryRun,c,u,o),stderr:l,exitCode:+!u}}function ug(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 dg(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 fg(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}${dg(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(`
|
|
305
|
-
`)}\n`}async function pg(e,t,n){let r=await(await import(`./kernel-worker-
|
|
305
|
+
`)}\n`}async function pg(e,t,n){let r=await(await import(`./kernel-worker-CTxRZxWy.js`).then(e=>e.r)).discoverSkills(e),{collisions:i}=await ar(e,nr(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${Nh()}`,stderr:``,exitCode:0}:{...or(`upskill`,Fh(r,`Discoverable local skills`),i,{builtinNames:new Set(it())}),exitCode:0}}async function mg(e,t,n){let{results:r,skipped:i}=await cg(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:fg(r,i),stderr:c,exitCode:+!s}}async function hg(e,t,n,r){let i=ug(e);return i.error?{stdout:``,stderr:`${i.error}\n`,exitCode:1}:i.outdated?mg(t,n,i.json):pg(t,i.json,r)}async function gg(e,t){let n=`${bi}/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(ji(e,n))}if(r.status!==200)throw Error(`Tessl returned HTTP ${r.status}`);let i=ve(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=Ri(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 _g(e,t){let n=`${bi}/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: ${ji(e,n)}`}}if(r.status!==200)return{error:`Tessl search failed (HTTP ${r.status})`};let i=ve(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=Ri(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 vg=[{label:`Tessl`,host:new URL(bi).host,fetch:gg},{label:`browse.sh`,host:new URL(Ci).host,fetch:Ch}];function yg(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 bg(e,t,n=1){let r=await Promise.allSettled(vg.map(n=>n.fetch(e,t))),i=r.map(e=>e.status===`fulfilled`?e.value:[]),a=r.every(e=>e.status===`rejected`),o=yg(i),s=``;for(let e=0;e<r.length;e++){let t=r[e];if(t.status===`rejected`){let n=vg[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+=`
|
|
306
306
|
`}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:
|
|
307
307
|
`,p+=` From Tessl: upskill <owner/repo> --skill <name>
|
|
308
308
|
`,p+=` From browse.sh: upskill browse:<hostname>/<task>
|
|
@@ -325,7 +325,7 @@ Examples:
|
|
|
325
325
|
`,{stdout:s,stderr:``,exitCode:0}}function Dg(e){return!e||e.startsWith(`-`)?{stdout:``,stderr:`upskill: --branch requires a value
|
|
326
326
|
`,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
|
|
327
327
|
`,exitCode:1}}function Og(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
|
|
328
|
-
`,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=Dg(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 kg(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-
|
|
328
|
+
`,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=Dg(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 kg(e,t,n){if(!t)return{stdout:``,stderr:`upskill: ${e} requires a skill name\n`,exitCode:1};let r=await import(`./kernel-worker-CTxRZxWy.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 Ii(n,t),a=i?Li(i):"Installed from: (no provenance recorded — reinstall to enable `upskill update`)\n";return{stdout:Ih(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+`
|
|
329
329
|
`,stderr:``,exitCode:0}}async function Ag(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 Hi(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 jg(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 Vi(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 Mg(e,t,n,r,i,a,o,s){let c=``,l=``,u=0;for(let d of e){let e=await Vi(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 Ng(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 Pg(e,t,n,r){let{owner:i,repo:a}=e,o=t.branch??e.branch,s=t.subPath??e.path,c=await Mi(r),l=await Ui(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:Ng(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:Ng(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 ki(i,a,r,o);if(e.status===`ok`){let r=await Pi(i,a,o,c,!0,s),l=await Ag(u,i,a,wi(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 jg(u,i,a,c,n,t.force,o,f);({output:p,errors:m,successCount:h}=e)}}else({output:p,errors:m,successCount:h}=await Mg(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 zi()),{stdout:p,stderr:m,exitCode:+!!m}}async function Fg(e,t,n,r,i){switch(e[0]){case`tabs`:return Tg(t,n,r,e.includes(`--json`));case`recommendations`:return Eg(t,n,e.includes(`--install`));case`update`:case`upgrade`:return lg(e.slice(1),t,n);case`list`:return hg(e.slice(1),t,n,i);case`info`:case`read`:return kg(e[0],e[1],t);case`search`:return Lg(e,n);default:return null}}function Ig(e,t,n){return S(`upskill`,async(r,i)=>{if(r.length===0||r.includes(`--help`)||r.includes(`-h`))return Lh();let a=await Fg(r,e,t,n,i.env.get(`PATH`));if(a)return a;let o=Og(r);if(o.earlyReturn)return o.earlyReturn;if(!o.sourceRef)return Lh();if(o.sourceRef.startsWith(`tessl:`))return Rg(o.sourceRef,o.force,e,t);let s=Eh(o.sourceRef);if(s)return Mh(s.hostname,s.task,e,t,o.force);let c=Bi(o.sourceRef);return c?Pg(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 Lg(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?bg(a,t,i):Lh()}async function Rg(e,t,n,r){let i=e.slice(6);if(!i)return{stdout:``,stderr:`upskill: tessl: requires a skill name
|
|
330
330
|
`,exitCode:1};let a=await _g(i,r);if(`error`in a)return{stdout:``,stderr:`upskill: ${a.error}\n`,exitCode:1};let o=await Mi(r);return Vi(a.owner,a.repo,a.skillPath,a.skillName,n,o,t,r)}function zg(){return{stdout:`usage: afplay [-v volume] [-r rate] <file>
|
|
331
331
|
|
|
@@ -719,7 +719,7 @@ Examples:
|
|
|
719
719
|
`;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+=`
|
|
720
720
|
`;return t}async function Yy(e,t){let n=C(e.slice(1),{});if(`error`in n)return Ky(n.error);if(!t()){let e=await zy();if(!e)return Hy(`list`);let t=await e.listCronTasks();return t.length===0?{stdout:`No active cron tasks
|
|
721
721
|
`,stderr:``,exitCode:0}:{stdout:Jy(t),stderr:``,exitCode:0}}let{ok:r,data:i}=await Wy(`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
|
|
722
|
-
`,stderr:``,exitCode:0}:{stdout:Jy(a),stderr:``,exitCode:0}}async function Xy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return Ky(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 zy();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 Wy(`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 Zy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:Gy}))return Uy();try{switch(r){case`create`:return await qy(e,n.env,t);case`list`:return await Yy(e,t);case`delete`:case`kill`:return await Xy(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 Qy(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-
|
|
722
|
+
`,stderr:``,exitCode:0}:{stdout:Jy(a),stderr:``,exitCode:0}}async function Xy(e,t){let n=e[0],r=C(e.slice(1),{});if(`error`in r)return Ky(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 zy();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 Wy(`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 Zy(e={}){let t=e.hasLocalNodeServer??(()=>!1);return S(`crontask`,async(e,n)=>{let r=e[0];if(!r||w(e,{valueFlags:Gy}))return Uy();try{switch(r){case`create`:return await qy(e,n.env,t);case`list`:return await Yy(e,t);case`delete`:case`kill`:return await Xy(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 Qy(e){return S(`curlwright`,async(t,n)=>{let{runCurlwright:r}=await import(`./run-DI8sQ-UX.js`);return r(e,t,n)})}function $y(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 eb(e){return $y(e,{si:!1})}const tb=`slicc-fs`;async function nb(){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===tb)}catch{return!0}}async function rb(){let e=globalThis.indexedDB;return e?new Promise(t=>{let n;try{n=e.deleteDatabase(tb)}catch{t(`error`);return}n.onsuccess=()=>t(`deleted`),n.onerror=()=>t(`error`),n.onblocked=()=>t(`blocked`)}):`error`}async function ib(){if(!await nb())return{kind:`absent`,message:`legacy slicc-fs IDB not present — nothing to clean`};let e=await rb();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 ab(){return`slicc-fs-cleanup — delete the legacy slicc-fs IndexedDB
|
|
723
723
|
|
|
724
724
|
Usage:
|
|
725
725
|
slicc-fs-cleanup Delete the legacy slicc-fs IDB.
|
|
@@ -936,7 +936,7 @@ Options:
|
|
|
936
936
|
--pattern <glob> File pattern to match, e.g. "*.md", "*.bsh" (required)
|
|
937
937
|
--scoop <target> Scoop name, cone name, or folder. Omit for your own cone.
|
|
938
938
|
--name <name> Human-readable name for the watcher
|
|
939
|
-
`);switch(n){case`list`:return dC(e);case`delete`:return fC(e);case`create`:return await hC(e,t.env);default:return lC(`unknown command: ${n}`)}})}function _C(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-
|
|
939
|
+
`);switch(n){case`list`:return dC(e);case`delete`:return fC(e);case`create`:return await hC(e,t.env);default:return lC(`unknown command: ${n}`)}})}function _C(e){return S(`gelatiere`,async(t,n)=>{let{runGelatiere:r}=await import(`./run-Dp8o0HDu.js`);return r(t,n,e)})}function vC(e={}){return S(`go`,async(t,n)=>{let{runGoCommand:r}=await import(`./go-driver-DqgTG9N6.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}function yC(){return{stdout:`usage: hear [-i file] [-l lang] [-T seconds] [-d deviceId] [--engine name]
|
|
940
940
|
hear --devices | --status | --warmup
|
|
941
941
|
|
|
942
942
|
Speech recognition: listens on the microphone until you pause, then
|
|
@@ -1102,7 +1102,27 @@ Options:
|
|
|
1102
1102
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);return isNaN(o)||isNaN(s)?{stdout:``,stderr:`x and y must be numbers
|
|
1103
1103
|
`,exitCode:1}:(await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseMoved`,x:o,y:s,button:`none`,modifiers:0},e)}),t.lastMousePosition.set(a.targetId,{x:o,y:s}),{stdout:`Mouse moved to (${o}, ${s})\n`,stderr:``,exitCode:0})},Pw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=Aw(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mousePressed`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} pressed\n`,stderr:``,exitCode:0}},Fw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=Aw(n[0]);if(typeof o==`object`)return{stdout:``,stderr:o.error,exitCode:1};let s=t.lastMousePosition.get(a.targetId)??{x:0,y:0};return await i(a.targetId,async({sessionId:e,transport:t})=>{await t.send(`Input.dispatchMouseEvent`,{type:`mouseReleased`,button:o,clickCount:1,x:s.x,y:s.y,modifiers:0},e)}),{stdout:`Mouse button ${o} released\n`,stderr:``,exitCode:0}},Iw=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`mousewheel requires <dx> <dy>
|
|
1104
1104
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseFloat(n[0]),s=parseFloat(n[1]);if(isNaN(o)||isNaN(s))return{stdout:``,stderr:`dx and dy must be numbers
|
|
1105
|
-
`,exitCode:1};let c=t.lastMousePosition.get(a.targetId)??{x:0,y:0}
|
|
1105
|
+
`,exitCode:1};let c=t.lastMousePosition.get(a.targetId)??{x:0,y:0},l=``;return await i(a.targetId,async({sessionId:e,transport:t})=>{if((await t.send(`Runtime.evaluate`,{expression:`document.visibilityState`,returnByValue:!0},e)).result?.value===`hidden`){let n=await t.send(`Runtime.evaluate`,{expression:Lw(c.x,c.y,o,s),returnByValue:!0},e);if(n.exceptionDetails)throw Error(n.exceptionDetails.exception?.description??n.exceptionDetails.text??`Page scroll failed`);l=`note: the tab is in the background, so the wheel was applied as a page scroll
|
|
1106
|
+
`;return}await t.send(`Input.dispatchMouseEvent`,{type:`mouseWheel`,deltaX:o,deltaY:s,x:c.x,y:c.y,modifiers:0},e)}),{stdout:`Mouse wheel scrolled (dx=${o}, dy=${s})\n`,stderr:l,exitCode:0}};function Lw(e,t,n,r){return`(() => {
|
|
1107
|
+
const dx = ${JSON.stringify(n)}, dy = ${JSON.stringify(r)};
|
|
1108
|
+
const canScroll = (el) => {
|
|
1109
|
+
const style = getComputedStyle(el);
|
|
1110
|
+
const y = /(auto|scroll|overlay)/.test(style.overflowY) &&
|
|
1111
|
+
(dy > 0 ? el.scrollTop + el.clientHeight < el.scrollHeight : dy < 0 && el.scrollTop > 0);
|
|
1112
|
+
const x = /(auto|scroll|overlay)/.test(style.overflowX) &&
|
|
1113
|
+
(dx > 0 ? el.scrollLeft + el.clientWidth < el.scrollWidth : dx < 0 && el.scrollLeft > 0);
|
|
1114
|
+
return y || x;
|
|
1115
|
+
};
|
|
1116
|
+
let el = document.elementFromPoint(${JSON.stringify(e)}, ${JSON.stringify(t)});
|
|
1117
|
+
while (el && el !== document.body && el !== document.documentElement && !canScroll(el)) {
|
|
1118
|
+
el = el.parentElement;
|
|
1119
|
+
}
|
|
1120
|
+
const target = el && el !== document.body && el !== document.documentElement
|
|
1121
|
+
? el
|
|
1122
|
+
: (document.scrollingElement || document.documentElement);
|
|
1123
|
+
target.scrollBy({ left: dx, top: dy, behavior: 'instant' });
|
|
1124
|
+
return true;
|
|
1125
|
+
})()`}const Rw=async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{if(i.length===0)return{stdout:``,stderr:`drop requires a ref (e.g. e5)
|
|
1106
1126
|
`,exitCode:1};let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=i[0],l=a.path,u=a.data,d=[];if(l){let e=await kw(n,l),r=l.split(`/`).pop()??l;d.push({name:r,type:Mw(r),base64:t(e)})}let f=[];if(u){let e=u.indexOf(`=`);if(e===-1)return{stdout:``,stderr:`--data format must be "mime/type=value"
|
|
1107
1127
|
`,exitCode:1};f.push({mimeType:u.slice(0,e),value:u.slice(e+1)})}return{stdout:await o(s.targetId,async({sessionId:e,transport:t})=>{let n=r.snapshots.get(s.targetId);if(!n)throw Error(`No snapshot available. Run "snapshot" first.`);let i=n.refToBackendNodeId.get(c);if(i){await t.send(`DOM.enable`,{},e);let n=await t.send(`DOM.resolveNode`,{backendNodeId:i},e),a=await t.send(`Runtime.callFunctionOn`,{objectId:n.object.objectId,functionDeclaration:`function(filesData, dataItems) {
|
|
1108
1128
|
var dt = new DataTransfer();
|
|
@@ -1138,7 +1158,7 @@ Options:
|
|
|
1138
1158
|
el.dispatchEvent(new DragEvent('drop', { bubbles: true, cancelable: true, dataTransfer: dt }));
|
|
1139
1159
|
return true;
|
|
1140
1160
|
})()`,h=await t.send(`Runtime.evaluate`,{expression:m,returnByValue:!0,awaitPromise:!1},e);if(h.exceptionDetails){let e=h.exceptionDetails.exception?.description??h.exceptionDetails.text??`Drop failed`;throw Error(e)}return r.snapshots.delete(s.targetId),`Dropped onto ${c}`})+`
|
|
1141
|
-
`,stderr:``,exitCode:0}},
|
|
1161
|
+
`,stderr:``,exitCode:0}},zw=e(`playwright-teleport`),Bw={origin:``,localStorage:{},sessionStorage:{}};function Vw(e){let t=new Map;for(let n of e){let e=n.domain??`unknown`;t.set(e,(t.get(e)??0)+1)}return[...t.entries()].sort((e,t)=>t[1]-e[1]).map(([e,t])=>`${t} ${e}`).join(`, `)}function Hw(e){return Object.keys(e.localStorage).length+Object.keys(e.sessionStorage).length}function Uw(e){if(!e)return null;try{return new URL(e).origin}catch{return null}}function Ww(e){try{return new URL(`/favicon.ico`,e).toString()}catch{return e}}function Gw(e,t,n){let r=Uw(t);if(t&&r===e)return t;let i=Uw(n);return n&&i===e?n:e||(t??n)}async function Kw(e,t){let n=await e.evaluate(`(() => {
|
|
1142
1162
|
const collect = (storage) => {
|
|
1143
1163
|
const items = {};
|
|
1144
1164
|
for (let i = 0; i < storage.length; i++) {
|
|
@@ -1152,7 +1172,7 @@ Options:
|
|
|
1152
1172
|
localStorage: collect(window.localStorage),
|
|
1153
1173
|
sessionStorage: collect(window.sessionStorage),
|
|
1154
1174
|
});
|
|
1155
|
-
})()`);if(typeof n!=`string`||n.length===0)return
|
|
1175
|
+
})()`);if(typeof n!=`string`||n.length===0)return zw.warn(`Teleport storage capture returned non-string result`,{label:t,type:typeof n}),Bw;try{let e=JSON.parse(n);return{origin:typeof e.origin==`string`?e.origin:``,localStorage:e.localStorage??{},sessionStorage:e.sessionStorage??{}}}catch(e){return zw.warn(`Could not parse teleport storage snapshot`,{label:t,error:String(e)}),Bw}}function qw(e){return`(() => {
|
|
1156
1176
|
const snapshot = ${JSON.stringify(e)};
|
|
1157
1177
|
if (!snapshot.origin || window.location.origin !== snapshot.origin) return;
|
|
1158
1178
|
const markerKey = '__slicc_teleport_storage_applied__:' + snapshot.origin;
|
|
@@ -1168,7 +1188,7 @@ Options:
|
|
|
1168
1188
|
apply(window.localStorage, snapshot.localStorage || {});
|
|
1169
1189
|
apply(window.sessionStorage, snapshot.sessionStorage || {});
|
|
1170
1190
|
try { window.sessionStorage.setItem(markerKey, '1'); } catch {}
|
|
1171
|
-
})();`}function
|
|
1191
|
+
})();`}function Jw(e){return`(() => {
|
|
1172
1192
|
const snapshot = ${JSON.stringify(e)};
|
|
1173
1193
|
if (!snapshot.origin || globalThis.location.origin !== snapshot.origin) {
|
|
1174
1194
|
throw new Error('Teleport storage origin mismatch');
|
|
@@ -1186,88 +1206,88 @@ Options:
|
|
|
1186
1206
|
localStorageCount: Object.keys(snapshot.localStorage || {}).length,
|
|
1187
1207
|
sessionStorageCount: Object.keys(snapshot.sessionStorage || {}).length,
|
|
1188
1208
|
});
|
|
1189
|
-
})();`}async function
|
|
1209
|
+
})();`}async function Yw(e,t,n){let r=Hw(t);if(r===0)return;let i=await e.evaluate(Jw(t));zw.info(`Applied teleport storage snapshot on current page`,{target:n,totalEntries:r,resultType:typeof i}),zw.debug(`Applied teleport storage snapshot details`,{target:n,origin:t.origin||`(unknown)`,totalEntries:r,resultType:typeof i})}async function Xw(e,t,n){let r=Hw(t);if(r===0)return null;let i=await e.send(`Page.addScriptToEvaluateOnNewDocument`,{source:qw(t)}),a=typeof i.identifier==`string`?i.identifier:null;return zw.info(`Installed teleport storage init script`,{target:n,totalEntries:r,hasIdentifier:!!a}),zw.debug(`Installed teleport storage init script details`,{target:n,origin:t.origin||`(unknown)`,localStorageCount:Object.keys(t.localStorage).length,sessionStorageCount:Object.keys(t.sessionStorage).length,hasIdentifier:!!a}),a?{identifier:a,targetId:e.targetId}:null}async function Zw(e,t,n){if(t)try{await e.send(`Page.removeScriptToEvaluateOnNewDocument`,{identifier:t.identifier})}catch(e){zw.warn(`Failed to remove teleport storage init script`,{target:n,error:String(e)})}}async function Qw(e){let t=await e.evaluate(`(() => JSON.stringify({
|
|
1190
1210
|
url: window.location.href,
|
|
1191
1211
|
title: document.title || '',
|
|
1192
1212
|
bodySnippet: document.body?.innerText?.replace(/\\s+/g, ' ').trim().slice(0, 500) || '(empty)',
|
|
1193
|
-
}))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function Qw(e){return/callback|authorize\/resume|error/i.test(e)}async function $w(e,t,n){try{let r=await Zw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,Rw.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){Rw.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function eT(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>Xw(e,r,`follower`)),Rw.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){Rw.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function tT(e){return Array.isArray(e)?e:[]}const H=e(`playwright-teleport`);let nT=null,rT=null;function iT(e){nT=e}function aT(e){rT=e}function oT(){return rT?.()??null}async function sT(e,t){if(H.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),H.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>$w(e,t,`timeout`))}catch(e){H.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await eT(e,t,`timeout`)}if(cT(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){H.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function cT(e){H.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function lT(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);H.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),H.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);H.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(H.info(`Teleport start pattern matched on leader`),H.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),dT(e,t,c,a).catch(e=>{H.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){H.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{H.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function uT(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,H.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,H.info(`Follower reached auth provider; waiting for return pattern`),H.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):H.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}H.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),Qw(o)&&await e.withTab(r,e=>$w(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(H.info(`Follower return pattern matched after auth`),H.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),gT(e,t,n,i).catch(e=>{H.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){H.warn(`Error polling follower tab URL`,{error:String(e)})}}async function dT(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,H.info(`Teleport triggered`),H.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=zw;try{a=tT((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),H.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){H.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>Gw(e,`leader`)),H.info(`Captured leader storage for follower`,{totalEntries:Vw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){H.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=nT?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}H.info(`Selected follower for teleport`),H.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,H.info(`Opened follower tab for teleport`),H.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),H.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){H.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await Yw(e,o,`follower`),H.info(`Navigating follower to intercepted auth URL`),H.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),H.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&sT(e,n).catch(e=>{H.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,H.info(`Teleport waiting for follower auth redirect`),H.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{uT(e,t,n,l,s).catch(e=>{H.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){H.error(`Teleport trigger failed`,{error:String(t)}),await eT(e,n,`trigger-error`),n.phase=`done`,cT(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function fT(e,t){H.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),H.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){H.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);H.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){H.warn(`Could not read follower page content`,{error:String(e)})}let i=tT((await e.send(`Network.getCookies`)).cookies),a=i.length>0?Bw(i):`none`;H.info(`Captured cookies from follower`,{count:i.length}),H.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=zw;try{o=await Gw(e,`follower`),H.info(`Captured follower storage for leader`,{totalEntries:Vw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){H.warn(`Could not capture follower storage`,{error:String(e)})}return await $w(e,t,`capture`),await Xw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),H.info(`Closed follower tab after teleport`),H.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){H.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function pT(e,t,n,r){try{await e.navigate(n),await Jw(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){H.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),H.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await Yw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await Xw(e,a,`leader`)}}}async function mT(e,t,n,r,i){let a=e.targetId,o=await Yw(e,n,`leader`);try{r&&(H.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:Vw(n)}),H.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:Vw(n)}),await e.navigate(r))}finally{await Xw(e,o,`leader`)}}async function hT(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=Ww(o,t.originalLeaderUrl,i),c=Hw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?Uw(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),H.info(`Injected cookies into leader tab`,{count:n.length}),H.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(H.info(`Hydrating leader storage origin before landing`,{storageEntries:Vw(r)}),H.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:Vw(r)}),await pT(e,r,u,s)):await mT(e,t,r,s,i)}),s):(H.warn(`No leader tab available for auth-state injection`),s)}async function gT(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,H.info(`Capturing auth state from follower`),H.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await fT(e,n),o=Vw(i),s=await hT(e,n,t,i,a);n.phase=`done`,cT(n);let c=t.length>0?` (${Bw(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;H.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),H.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){H.error(`Teleport auth-state capture failed`,{error:String(t)}),await eT(e,n,`capture-error`),n.phase=`done`,cT(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const _T=e(`playwright`),vT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1194
|
-
`,exitCode:1};let o=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){
|
|
1195
|
-
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},
|
|
1196
|
-
`,stderr:``,exitCode:0})},
|
|
1197
|
-
`,stderr:``,exitCode:0})},
|
|
1198
|
-
`,stderr:``,exitCode:0})},
|
|
1199
|
-
`,exitCode:1}:(await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Network.enable`,{},e),await t.send(`Network.emulateNetworkConditions`,{offline:a===`offline`,latency:0,downloadThroughput:-1,uploadThroughput:-1},e)}),{stdout:`Network set to ${a}\n`,stderr:``,exitCode:0})},
|
|
1213
|
+
}))()`);if(typeof t!=`string`||t.length===0)return{url:``,title:``,bodySnippet:`(unavailable)`};try{let e=JSON.parse(t);return{url:typeof e.url==`string`?e.url:``,title:typeof e.title==`string`?e.title:``,bodySnippet:typeof e.bodySnippet==`string`&&e.bodySnippet.length>0?e.bodySnippet:`(empty)`}}catch{return{url:``,title:``,bodySnippet:`(unparseable)`}}}function $w(e){return/callback|authorize\/resume|error/i.test(e)}async function eT(e,t,n){try{let r=await Qw(e),i=`${n}:${r.url}:${r.title}`;if(t.lastFollowerDiagnosticKey===i)return;t.lastFollowerDiagnosticKey=i,zw.debug(`Teleport follower diagnostics`,{reason:n,url:r.url,title:r.title,bodySnippet:r.bodySnippet})}catch(e){zw.warn(`Could not capture teleport follower diagnostics`,{reason:n,error:String(e)})}}async function tT(e,t,n){let r=t.followerStorageScript;if(r){t.followerStorageScript=null;try{await e.withTab(r.targetId,e=>Zw(e,r,`follower`)),zw.info(`Removed follower teleport storage init script`,{reason:n})}catch(e){zw.warn(`Failed to remove follower teleport storage init script`,{reason:n,error:String(e)})}}}function nT(e){return Array.isArray(e)?e:[]}const H=e(`playwright-teleport`);let rT=null,iT=null;function aT(e){rT=e}function oT(e){iT=e}function sT(){return iT?.()??null}async function cT(e,t){if(H.warn(`Teleport timed out`,{timeoutMs:t.timeoutMs,phase:t.phase}),H.debug(`Teleport timeout details`,{timeoutMs:t.timeoutMs,phase:t.phase,followerTargetId:t.followerTargetId}),t.phase=`timedOut`,t.followerTargetId){try{await e.withTab(t.followerTargetId,e=>eT(e,t,`timeout`))}catch(e){H.warn(`Could not attach to follower for timeout diagnostics`,{error:String(e)})}await tT(e,t,`timeout`)}if(lT(t),t.followerTargetId)try{await e.closePage(t.followerTargetId)}catch(e){H.warn(`Failed to close follower tab after timeout`,{error:String(e)})}t.rejectBlock?.(Error(`Teleport timed out after ${Math.round(t.timeoutMs/1e3)}s — human did not complete auth`))}function lT(e){H.info(`Cleaning up teleport watcher`,{phase:e.phase,hadPoll:!!e.pollInterval,hadTimeout:!!e.timeoutTimer,hadListener:!!e.cleanupListener}),e.pollInterval&&=(clearInterval(e.pollInterval),void 0),e.timeoutTimer&&=(clearTimeout(e.timeoutTimer),void 0),e.cleanupListener&&=(e.cleanupListener(),void 0)}function uT(e,t,n,r,i,a,o,s){if(a===`preview`)throw Error(`cannot teleport to a preview target (no Network.*)`);H.info(`Arming teleport watcher`,{timeoutMs:i,runtimeSelection:a?`explicit`:`auto`}),H.debug(`Arming teleport watcher details`,{startPattern:n.source,returnPattern:r.source,timeoutMs:i,runtimeId:a??`auto`,originalUrl:o});let c={startPattern:n,returnPattern:r,timeoutMs:i,runtimeId:a,phase:`armed`,leaderTargetId:s,originalLeaderUrl:o};return c.completionPromise=new Promise((e,t)=>{c.resolveBlock=e,c.rejectBlock=t}),c.completionPromise.catch(()=>{}),c.pollInterval=setInterval(()=>{(async()=>{if(c.phase!==`armed`)return;let r=c.leaderTargetId;if(r)try{let i=await e.withTab(r,e=>e.evaluate(`window.location.href`)),a=typeof i==`string`?i:String(i);H.debug(`Polling leader tab URL`,{targetId:r,href:a,startPattern:n.source}),n.test(a)&&(H.info(`Teleport start pattern matched on leader`),H.debug(`Teleport start pattern matched on leader details`,{targetId:r,href:a,startPattern:n.source}),fT(e,t,c,a).catch(e=>{H.error(`Unhandled teleport trigger error`,{error:String(e)})}))}catch(e){H.warn(`Error polling leader tab URL`,{targetId:r,error:String(e)})}})().catch(e=>{H.warn(`Leader teleport poll failed`,{error:String(e)})})},1e3),s&&t.teleportWatchers.set(s,c),c}async function dT(e,t,n,r,i){if(n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)try{let a=await e.withTab(r,e=>e.evaluate(`window.location.href`)),o=typeof a==`string`?a:String(a);if(!o)return;if(n.lastFollowerUrl!==o&&(n.lastFollowerUrl=o,H.debug(`Follower teleport navigation`,{href:o,phase:n.phase})),n.phase===`waitingForAuth`){n.startPattern.test(o)?(n.phase=`waitingForReturn`,H.info(`Follower reached auth provider; waiting for return pattern`),H.debug(`Follower reached auth provider details`,{href:o,startPattern:n.startPattern.source})):H.debug(`Waiting for auth redirect on follower`,{href:o,startPattern:n.startPattern.source});return}H.debug(`Polling follower tab URL for return`,{href:o,returnPattern:n.returnPattern.source}),$w(o)&&await e.withTab(r,e=>eT(e,n,`waiting-for-return`)),n.returnPattern.test(o)&&(H.info(`Follower return pattern matched after auth`),H.debug(`Follower return pattern matched after auth details`,{href:o,returnPattern:n.returnPattern.source}),_T(e,t,n,i).catch(e=>{H.error(`Unhandled teleport capture error`,{error:String(e)})}))}catch(e){H.warn(`Error polling follower tab URL`,{error:String(e)})}}async function fT(e,t,n,r){if(n.phase===`armed`){n.phase=`teleporting`,H.info(`Teleport triggered`),H.debug(`Teleport trigger details`,{triggerUrl:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0);try{let i=n.leaderTargetId;if(!i)throw Error(`teleport has no leader tab to capture from`);let a=[],o=Bw;try{a=nT((await e.withTab(i,e=>e.send(`Network.getCookies`,{}))).cookies),H.info(`Captured leader cookies for follower`,{count:a.length})}catch(e){H.warn(`Could not capture leader cookies`,{error:String(e)})}try{o=await e.withTab(i,e=>Kw(e,`leader`)),H.info(`Captured leader storage for follower`,{totalEntries:Hw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.debug(`Captured leader storage for follower details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){H.warn(`Could not capture leader storage`,{error:String(e)})}let s=n.runtimeId;if(!s){let e=rT?.();if(!e)throw Error(`No follower selection available — not connected to a tray`);let t=e();if(!t)throw Error(`No followers connected to teleport to`);s=t.runtimeId}H.info(`Selected follower for teleport`),H.debug(`Selected follower for teleport details`,{runtimeId:s});let c=await e.createRemotePage(s,`about:blank`),l=c.includes(`:`)?c:`${s}:${c}`;n.followerTargetId=l,H.info(`Opened follower tab for teleport`),H.debug(`Opened follower tab for teleport details`,{followerTargetId:l});let u=r;await e.withTab(l,async e=>{if(await e.send(`Page.enable`),a.length>0)try{await e.send(`Network.setCookies`,{cookies:a}),H.info(`Injected leader cookies into follower`,{count:a.length})}catch(e){H.warn(`Could not inject leader cookies into follower`,{error:String(e)})}n.followerStorageScript=await Xw(e,o,`follower`),H.info(`Navigating follower to intercepted auth URL`),H.debug(`Navigating follower to intercepted auth URL details`,{url:u,originalLeaderUrl:n.originalLeaderUrl,triggerUrl:r,storageOrigin:o.origin||`(unknown)`}),await e.send(`Page.navigate`,{url:u})}),H.info(`Starting teleport timeout timer`,{timeoutMs:n.timeoutMs}),n.timeoutTimer=setTimeout(()=>{(n.phase===`teleporting`||n.phase===`waitingForAuth`||n.phase===`waitingForReturn`)&&cT(e,n).catch(e=>{H.error(`Teleport timeout handler failed`,{error:String(e)})})},n.timeoutMs),n.phase=`waitingForAuth`,H.info(`Teleport waiting for follower auth redirect`),H.debug(`Teleport waiting for follower auth redirect details`,{startPattern:n.startPattern.source}),n.pollInterval=setInterval(()=>{dT(e,t,n,l,s).catch(e=>{H.warn(`Follower teleport poll failed`,{error:String(e)})})},1e3)}catch(t){H.error(`Teleport trigger failed`,{error:String(t)}),await tT(e,n,`trigger-error`),n.phase=`done`,lT(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}async function pT(e,t){H.info(`Waiting for redirect chain to settle (2s)`),await new Promise(e=>setTimeout(e,2e3));let n=t.followerTargetId,r=t.followerStorageScript??null;t.followerStorageScript=null;let{cookies:i,followerStorage:a,finalUrl:o}=await e.withTab(n,async e=>{let n;try{let t=await e.evaluate(`window.location.href`);n=typeof t==`string`?t:String(t),H.debug(`Captured final URL from follower`,{finalUrl:n})}catch(e){H.warn(`Could not read follower URL (may be mid-navigation)`,{error:String(e)})}try{let t=await e.evaluate(`document.body?.innerText?.substring(0, 500) || "(empty)"`);H.debug(`Follower page content at capture time`,{bodyText:t})}catch(e){H.warn(`Could not read follower page content`,{error:String(e)})}let i=nT((await e.send(`Network.getCookies`)).cookies),a=i.length>0?Vw(i):`none`;H.info(`Captured cookies from follower`,{count:i.length}),H.debug(`Captured cookies from follower details`,{count:i.length,domains:a});let o=Bw;try{o=await Kw(e,`follower`),H.info(`Captured follower storage for leader`,{totalEntries:Hw(o),localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length}),H.debug(`Captured follower storage for leader details`,{origin:o.origin||`(unknown)`,localStorageCount:Object.keys(o.localStorage).length,sessionStorageCount:Object.keys(o.sessionStorage).length})}catch(e){H.warn(`Could not capture follower storage`,{error:String(e)})}return await eT(e,t,`capture`),await Zw(e,r,`follower`),{cookies:i,followerStorage:o,finalUrl:n}});try{await e.closePage(t.followerTargetId),H.info(`Closed follower tab after teleport`),H.debug(`Closed follower tab after teleport details`,{followerTargetId:t.followerTargetId})}catch(e){H.warn(`Failed to close follower tab`,{error:String(e)})}return{cookies:i,followerStorage:a,finalUrl:o}}async function mT(e,t,n,r){try{await e.navigate(n),await Yw(e,t,`leader`),r&&r!==n&&await e.navigate(r)}catch(i){H.warn(`Direct leader origin hydration failed, falling back to init-script replay`,{error:String(i)}),H.debug(`Direct leader origin hydration fallback details`,{hydrationUrl:n,landingUrl:r,error:String(i)});let a=await Xw(e,t,`leader`);try{r&&await e.navigate(r)}finally{await Zw(e,a,`leader`)}}}async function hT(e,t,n,r,i){let a=e.targetId,o=await Xw(e,n,`leader`);try{r&&(H.info(`Navigating leader after auth-state injection`,{hasLandingUrl:!0,storageEntries:Hw(n)}),H.debug(`Navigating leader after auth-state injection details`,{landingUrl:r,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:n.origin||`(unknown)`,storageEntries:Hw(n)}),await e.navigate(r))}finally{await Zw(e,o,`leader`)}}async function gT(e,t,n,r,i){let a=t.leaderTargetId,o=r.origin||``,s=Gw(o,t.originalLeaderUrl,i),c=Uw(t.originalLeaderUrl),l=!!o&&c!==o,u=l?Ww(o):null;return a?(await e.withTab(a,async e=>{n.length>0&&(await e.send(`Network.setCookies`,{cookies:n}),H.info(`Injected cookies into leader tab`,{count:n.length}),H.debug(`Injected cookies into leader tab details`,{count:n.length,leaderTargetId:a})),l&&u?(H.info(`Hydrating leader storage origin before landing`,{storageEntries:Hw(r)}),H.debug(`Hydrating leader storage origin before landing details`,{hydrationUrl:u,landingUrl:s,originalLeaderUrl:t.originalLeaderUrl,finalUrl:i,leaderTargetId:a,storageOrigin:o,storageEntries:Hw(r)}),await mT(e,r,u,s)):await hT(e,t,r,s,i)}),s):(H.warn(`No leader tab available for auth-state injection`),s)}async function _T(e,t,n,r){if(n.phase===`teleporting`||n.phase===`waitingForReturn`){n.phase=`capturing`,H.info(`Capturing auth state from follower`),H.debug(`Capturing auth state from follower details`,{followerTargetId:n.followerTargetId,runtimeId:r}),n.pollInterval&&=(clearInterval(n.pollInterval),void 0),n.timeoutTimer&&=(clearTimeout(n.timeoutTimer),void 0);try{let{cookies:t,followerStorage:i,finalUrl:a}=await pT(e,n),o=Hw(i),s=await gT(e,n,t,i,a);n.phase=`done`,lT(n);let c=t.length>0?` (${Vw(t)})`:``,l=o>0?` + ${o} storage entr${o===1?`y`:`ies`}`:``,u=s?` (navigated to ${s})`:``,d=`Teleported ${t.length} cookie(s)${c}${l} from ${r}${u}`;H.info(`Teleport completed successfully`,{cookieCount:t.length,storageEntries:o,landed:!!s}),H.debug(`Teleport completed successfully details`,{result:d}),n.resolveBlock?.(d)}catch(t){H.error(`Teleport auth-state capture failed`,{error:String(t)}),await tT(e,n,`capture-error`),n.phase=`done`,lT(n),n.rejectBlock?.(t instanceof Error?t:Error(String(t)))}}}const vT=e(`playwright`),yT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`goto requires a URL
|
|
1214
|
+
`,exitCode:1};let o=j(i);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};await a(o.targetId,e=>e.navigate(r[0])),n.snapshots.delete(o.targetId);let s=i[`teleport-start`],c=i[`teleport-return`];if(s&&c){vT.info(`Arming teleport via goto/navigate flags`),vT.debug(`Arming teleport via goto/navigate flags details`,{targetId:o.targetId,startPattern:s,returnPattern:c});let t,a;try{t=new RegExp(s)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${s}\n`,exitCode:1}}try{a=new RegExp(c)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${c}\n`,exitCode:1}}let l=i.timeout?parseInt(i.timeout,10):300,u=n.teleportWatchers.get(o.targetId);u&&(lT(u),n.teleportWatchers.delete(o.targetId)),uT(e,n,t,a,l*1e3,i[`teleport-runtime`],r[0],o.targetId)}if(i.discover===`true`){let{browseShWarning:e,...n}=await uw(r[0],{discover:!0,fs:t}),i={action:`navigate`,targetId:o.targetId,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(i,null,2)+`
|
|
1215
|
+
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Navigated to ${r[0]}\n`,stderr:``,exitCode:0}},bT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.back()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated back
|
|
1216
|
+
`,stderr:``,exitCode:0})},xT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`history.forward()`)}),t.snapshots.delete(i.targetId),{stdout:`Navigated forward
|
|
1217
|
+
`,stderr:``,exitCode:0})},ST=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:(await n(r.targetId,async e=>{await e.send(`Page.reload`)}),{stdout:`Reloaded
|
|
1218
|
+
`,stderr:``,exitCode:0})},CT=async({browser:e,flags:t,positional:n,onTab:r})=>{let i=j(t);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};let a=n[0];return a!==`online`&&a!==`offline`?{stdout:``,stderr:`network-state-set requires "online" or "offline"
|
|
1219
|
+
`,exitCode:1}:(await r(i.targetId,async({sessionId:e,transport:t})=>{await t.send(`Network.enable`,{},e),await t.send(`Network.emulateNetworkConditions`,{offline:a===`offline`,latency:0,downloadThroughput:-1,uploadThroughput:-1},e)}),{stdout:`Network set to ${a}\n`,stderr:``,exitCode:0})},wT=[`image/`,`font/`,`text/css`,`application/javascript`,`text/javascript`];function TT(e,t){if(e&&wT.some(t=>e.startsWith(t)))return!0;try{let e=new URL(t).pathname;return/\.(png|jpe?g|gif|webp|svg|ico|woff2?|ttf|eot|otf|css|js|mjs)$/i.test(e)}catch{return!1}}function ET(e,t,n,r,i){if(t.networkCleanup.has(r))return;t.networkRequests.set(r,[]),t.networkRequestIndex.set(r,new Map);let a=1,o=IC({browser:e,targetId:r,transport:n,sessionId:i,listeners:[[`Network.requestWillBeSent`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,s=n.request;if(!i||!s)return;let c=t.networkRequests.get(r),l=t.networkRequestIndex.get(r);if(!c||!l)return;let u=s.url??``,d={index:a++,requestId:i,method:s.method??`GET`,url:u,requestHeaders:s.headers??{},requestBody:s.postData==null?null:String(s.postData),status:null,responseHeaders:null,responseBody:null,responseBodyBase64:!1,mimeType:null,isStatic:TT(null,u),timestamp:Date.now()};if(c.push(d),l.set(i,d),c.length>500){let e=c.splice(0,c.length-500);for(let t of e)l.delete(t.requestId)}}],[`Network.responseReceived`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId,a=n.response;if(!i||!a)return;let s=t.networkRequestIndex.get(r)?.get(i);s&&(s.status=a.status??null,s.responseHeaders=a.headers??null,s.mimeType=a.mimeType??null,s.isStatic=TT(s.mimeType,s.url))}],[`Network.loadingFinished`,e=>{let n=e;if(n.sessionId!==o.sessionId)return;let i=n.requestId;if(!i)return;let a=t.networkRequestIndex.get(r)?.get(i);!a||a.isStatic||a.responseBody!==null||o.transport.send(`Network.getResponseBody`,{requestId:i},o.sessionId).then(e=>{let t=e;t&&(a.responseBody=t.body??null,a.responseBodyBase64=t.base64Encoded===!0)}).catch(()=>{})}]],enable:(e,t)=>e.send(`Network.enable`,{},t)});t.networkCleanup.set(r,()=>o.stop())}function DT(e){for(let t=0;t<e.length;t++){let n=e.charCodeAt(t);if(n<55296||n>57343)continue;if(n>=56320)return t;let r=e.charCodeAt(t+1);if(Number.isNaN(r)||r<56320||r>57343)return t;t++}return-1}function OT(e,t){if(t){let t;try{t=atob(e)}catch{return{error:`response body is flagged base64 but is not valid base64`}}let n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return{bytes:n}}let n=DT(e);return n>=0?{error:`response body has an unpaired surrogate at index ${n} and cannot be saved without substituting U+FFFD`}:{bytes:new TextEncoder().encode(e)}}function kT(e,t,n){let r=parseInt(n,10);return!Number.isFinite(r)||r<1?null:(e.networkRequests.get(t)??[]).find(e=>e.index===r)??null}const AT=async({browser:e,state:t,flags:n,onTab:r})=>{let i=j(n);if(`error`in i)return{stdout:``,stderr:i.error,exitCode:1};t.networkCleanup.has(i.targetId)||await r(i.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,i.targetId,n)});let a=n.static===`true`,o=n.filter,s=n.clear===`true`,c=t.networkRequests.get(i.targetId)??[];if(a||(c=c.filter(e=>!e.isStatic)),o){let e;try{e=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid filter regex: ${o}\n`,exitCode:1}}c=c.filter(t=>e.test(t.url))}return s&&(t.networkRequests.set(i.targetId,[]),t.networkRequestIndex.set(i.targetId,new Map)),c.length===0?{stdout:`No requests
|
|
1200
1220
|
`,stderr:``,exitCode:0}:{stdout:c.map(e=>`${e.index} ${e.method} ${e.url} → ${e.status??`pending`}`).join(`
|
|
1201
1221
|
`)+`
|
|
1202
|
-
`,stderr:``,exitCode:0}},
|
|
1222
|
+
`,stderr:``,exitCode:0}},jT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,o.targetId,n)});let s=n[0]??``,c=kT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=[`Method: ${c.method}`,`URL: ${c.url}`,`Status: ${c.status??`pending`}`,``,`Request Headers:`,...Object.entries(c.requestHeaders).map(([e,t])=>` ${e}: ${t}`)];if(c.requestBody!==null&&l.push(``,`Request Body: ${c.requestBody}`),c.responseHeaders!==null&&(l.push(``,`Response Headers:`),l.push(...Object.entries(c.responseHeaders).map(([e,t])=>` ${e}: ${t}`))),c.responseBody!==null){let e=c.responseBody,t=e.length>4096?e.slice(0,4096)+`
|
|
1203
1223
|
... (truncated)`:e,n=c.responseBodyBase64?`Response Body (base64)`:`Response Body`;l.push(``,`${n}:\n${t}`)}let u=l.join(`
|
|
1204
1224
|
`)+`
|
|
1205
|
-
`,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},
|
|
1225
|
+
`,d=r.filename;return d?(await i.writeFile(d,u),{stdout:`Saved to ${d}\n`,stderr:``,exitCode:0}):{stdout:u,stderr:``,exitCode:0}},MT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,o.targetId,n)});let s=n[0]??``,c=kT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};let l=Object.entries(c.requestHeaders).map(([e,t])=>`${e}: ${t}`).join(`
|
|
1206
1226
|
`)+`
|
|
1207
|
-
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},
|
|
1227
|
+
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},NT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,o.targetId,n)});let s=n[0]??``,c=kT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.requestBody===null)return{stdout:`(no request body)
|
|
1208
1228
|
`,stderr:``,exitCode:0};let l=r.filename;return l?(await i.writeFile(l,c.requestBody),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0}):{stdout:c.requestBody+`
|
|
1209
|
-
`,stderr:``,exitCode:0}},
|
|
1229
|
+
`,stderr:``,exitCode:0}},PT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,o.targetId,n)});let s=n[0]??``,c=kT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseHeaders===null)return{stdout:`(response not yet received)
|
|
1210
1230
|
`,stderr:``,exitCode:0};let l=Object.entries(c.responseHeaders).map(([e,t])=>`${e}: ${t}`).join(`
|
|
1211
1231
|
`)+`
|
|
1212
|
-
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},
|
|
1213
|
-
`,stderr:``,exitCode:0};let l=r.filename,u=
|
|
1232
|
+
`,u=r.filename;return u?(await i.writeFile(u,l),{stdout:`Saved to ${u}\n`,stderr:``,exitCode:0}):{stdout:l,stderr:``,exitCode:0}},FT=async({browser:e,state:t,positional:n,flags:r,fs:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};t.networkCleanup.has(o.targetId)||await a(o.targetId,async({sessionId:n,transport:r})=>{await r.send(`Network.enable`,{},n),ET(e,t,r,o.targetId,n)});let s=n[0]??``,c=kT(t,o.targetId,s);if(!c)return{stdout:``,stderr:`No request at index ${s}\n`,exitCode:1};if(c.responseBody===null)return{stdout:`(response body not yet available)
|
|
1233
|
+
`,stderr:``,exitCode:0};let l=r.filename,u=OT(c.responseBody,c.responseBodyBase64);if(`error`in u)return{stdout:``,stderr:`Request ${s}: ${u.error}\n`,exitCode:1};if(l)return await i.writeFile(l,u.bytes),{stdout:`Saved to ${l}\n`,stderr:``,exitCode:0};if(c.mimeType!==null&&!c.mimeType.startsWith(`text/`)&&!c.mimeType.includes(`json`)&&!c.mimeType.includes(`javascript`)&&!c.mimeType.includes(`xml`))return{stdout:`[binary body, ${u.bytes.length} bytes]\n`,stderr:``,exitCode:0};let d=c.responseBodyBase64?new TextDecoder().decode(u.bytes):c.responseBody;return{stdout:(d.length>4096?d.slice(0,4096)+`
|
|
1214
1234
|
... (truncated)`:d)+`
|
|
1215
|
-
`,stderr:``,exitCode:0}},
|
|
1216
|
-
`,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},
|
|
1217
|
-
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:
|
|
1235
|
+
`,stderr:``,exitCode:0}},IT=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a,signal:o})=>{let s=r[0]||`about:blank`,c=i.filter;await ae(e,n),An(o,`about to open the recording tab`);let l=await e.createPage(s);try{let{transport:r,sessionId:i}=await a(l,async e=>{let t=await e.transport.send(`Target.attachToTarget`,{targetId:l,flatten:!0});return{transport:e.transport,sessionId:t.sessionId}});n.harRecorder||=e.createHarRecorder(t,r);let u=await n.harRecorder.startRecording(l,i,c,o);return{stdout:`Recording started (targetId: ${l}, recordingId: ${u}) at ${s}\nHAR saved to /recordings/${u}/\n`,stderr:``,exitCode:0}}catch(t){throw await e.closePage(l).catch(()=>void 0),t}},LT=async({state:e,positional:t})=>{if(t.length===0)return{stdout:``,stderr:`stop-recording requires a recordingId
|
|
1236
|
+
`,exitCode:1};let n=t[0];return e.harRecorder?{stdout:`Recording stopped. HAR files saved to ${await e.harRecorder.stopRecording(n)}\n`,stderr:``,exitCode:0}:{stdout:``,stderr:`Recording not found: ${n}\n`,exitCode:1}},RT=e(`playwright-route`),zT=[{urlPattern:`*`,requestStage:`Request`}];function BT(e){let t=e.replace(/[.+?^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`@@`).replace(/\*/g,`[^/]*`).replace(/@@/g,`.*`);return RegExp(`^${t}$`)}async function VT(e,n,r,i,a){if(a.sessionId!==n)return;let{requestId:o,request:s}=a,c=(r.routes.get(i)??[]).find(e=>e.regex.test(s.url));if(!c){await e.send(`Fetch.continueRequest`,{requestId:o},n).catch(e=>{RT.warn(`Fetch.continueRequest failed — intercepted request may hang`,{requestId:o,err:e})});return}let l=[{name:`Content-Type`,value:c.contentType},...Object.entries(c.headers).map(([e,t])=>({name:e,value:t}))];await e.send(`Fetch.fulfillRequest`,{requestId:o,responseCode:c.status,responseHeaders:l,body:c.body?t(new TextEncoder().encode(c.body)):void 0},n).catch(e=>{RT.warn(`Fetch.fulfillRequest failed`,{requestId:o,url:s.url,err:e})})}async function HT(e,t,n,r){await t(r,async({sessionId:t,transport:i})=>{await i.send(`Fetch.enable`,{patterns:zT},t);let a,o=e=>{a&&VT(a.transport,a.sessionId,n,r,e)};try{a=IC({browser:e,targetId:r,transport:i,sessionId:t,listeners:[[`Fetch.requestPaused`,o]],enable:(e,t)=>e.send(`Fetch.enable`,{patterns:zT},t)})}catch(e){throw await i.send(`Fetch.disable`,{},t).catch(()=>void 0),e}let s=a;n.routeCleanup.set(r,()=>{s.stop(),s.transport.send(`Fetch.disable`,{},s.sessionId).catch(()=>void 0)})})}const UT=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`route requires a URL pattern
|
|
1237
|
+
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s={pattern:o,regex:BT(o),status:r.status?parseInt(r.status,10):200,body:r.body??``,contentType:r[`content-type`]??`text/plain`,headers:{}};if(r.header){r.header.includes(`,`)&&RT.warn(`--header value contains comma — only last segment used. Use separate route calls for multiple headers.`);for(let e of r.header.split(`,`)){let t=e.indexOf(`:`);if(t>0){let n=e.slice(0,t).trim(),r=e.slice(t+1).trim();s.headers[n]=r}}}t.routeCleanup.has(a.targetId)||(t.routes.has(a.targetId)||t.routes.set(a.targetId,[]),await HT(e,i,t,a.targetId));let c=t.routes.get(a.targetId)??[];return c.unshift(s),t.routes.set(a.targetId,c),{stdout:`Route added: ${o}\n`,stderr:``,exitCode:0}},WT=async({state:e,flags:t})=>{let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};let r=e.routes.get(n.targetId)??[];return r.length===0?{stdout:`No active routes
|
|
1218
1238
|
`,stderr:``,exitCode:0}:{stdout:r.map((e,t)=>`${t+1}. ${e.pattern} → ${e.status} ${e.contentType}`).join(`
|
|
1219
1239
|
`)+`
|
|
1220
|
-
`,stderr:``,exitCode:0}},
|
|
1221
|
-
`,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}},
|
|
1222
|
-
`),p=`${i}/snapshots/page-${jn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function
|
|
1240
|
+
`,stderr:``,exitCode:0}},GT=async({state:e,positional:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};let i=t[0];if(!i){e.routes.set(r.targetId,[]);let t=e.routeCleanup.get(r.targetId);return t&&(t(),e.routeCleanup.delete(r.targetId)),{stdout:`All routes removed
|
|
1241
|
+
`,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}},KT=`/.playwright`;function qT(e,t){return e?`${t.replace(/\/+$/,``)}${KT}`:KT}async function JT(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(!Nn(e))throw e}t.sessionDirsCreated.add(n)}}async function YT(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 ce(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(`
|
|
1242
|
+
`),p=`${i}/snapshots/page-${jn(new Date)}.yml`;return await t.writeFile(p,f),p})}catch{return null}}async function XT(e,t,n,r){await JT(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(`
|
|
1223
1243
|
`)+`
|
|
1224
|
-
`,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
|
|
1225
|
-
`);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
|
|
1244
|
+
`,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 ZT(){return import(`./snapshot-features-ko4zNFx_.js`)}async function QT(e,t,n,r){let i=await e.getAccessibilityTreeForFrame(r.frameId),a=new Map,o=new Map,s=new Map,c=se(i,a,o,{value:0},``,`f1`);for(let e of a.keys())s.set(e,r.frameId);let l=c.join(`
|
|
1245
|
+
`);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 $T(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() {
|
|
1226
1246
|
this.scrollIntoView({ block: 'center' });
|
|
1227
1247
|
const r = this.getBoundingClientRect();
|
|
1228
1248
|
return { x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height };
|
|
1229
|
-
}`,returnByValue:!0})).result?.value}async function
|
|
1249
|
+
}`,returnByValue:!0})).result?.value}async function eE(e,t){let n=await e.evaluate(`(function() {
|
|
1230
1250
|
const el = document.querySelector(${JSON.stringify(t.split(`,`)[0].trim())});
|
|
1231
1251
|
if (!el) return null;
|
|
1232
1252
|
el.scrollIntoView({ block: 'center' });
|
|
1233
1253
|
const r = el.getBoundingClientRect();
|
|
1234
1254
|
return JSON.stringify({ x: r.x + window.scrollX, y: r.y + window.scrollY, width: r.width, height: r.height });
|
|
1235
|
-
})()`);return n?Pn(n,`element clip rect`):void 0}async function
|
|
1236
|
-
`,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Gn(e,r);if(t)return
|
|
1237
|
-
`,stderr:``,exitCode:0}},
|
|
1255
|
+
})()`);return n?Pn(n,`element clip rect`):void 0}async function tE(e,t,n){let r=t.refToBackendNodeId.get(n);if(r)return $T(e,r);let i=t.refToSelector.get(n);if(!i)throw Error(`Unknown ref "${n}"`);return eE(e,i)}const nE=async({browser:e,fs:t,state:n,flags:r,onTab:i})=>{let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=r[`no-iframes`]===`true`,s=r.depth;if(s!==void 0&&!/^[1-9][0-9]*$/.test(s))return{stdout:``,stderr:`snapshot: --depth must be a positive integer, got "${s}"\n`,exitCode:1};let c=s===void 0?void 0:parseInt(s,10),l=r.boxes===`true`;if(l&&r.frame)return{stdout:``,stderr:`snapshot: --boxes is not supported with --frame (child-frame rects live in another coordinate space)
|
|
1256
|
+
`,exitCode:1};let u=await i(a.targetId,async e=>{let t=await Gn(e,r);if(t)return QT(e,n,a.targetId,t);let{snapshot:i,output:s}=await ie(e,n,a.targetId,{noIframes:o});if(!l)return s;let{annotateBoxes:c}=await ZT();return c(e,i.refToBackendNodeId,s)});if(c!==void 0){let{limitSnapshotDepth:e}=await ZT();u=e(u,c)}return r.filename?(await t.writeFile(r.filename,u),{stdout:`Snapshot saved to ${r.filename}\n`,stderr:``,exitCode:0}):{stdout:u+`
|
|
1257
|
+
`,stderr:``,exitCode:0}},rE=async e=>{let{findHandlerImpl:t}=await ZT();return t(e)},iE=async({browser:e,flags:t,onTab:n})=>{let r=j(t);return`error`in r?{stdout:``,stderr:r.error,exitCode:1}:{stdout:await n(r.targetId,async e=>`Frame IDs (use with --frame, never --tab):\n${(await e.getFrameTree()).map(e=>{let t=e.parentFrameId?`child`:`main`,n=e.parentFrameId?` parentFrameId=${e.parentFrameId}`:``;return` [${t}] frameId=${e.frameId}${n} - ${e.url}`}).join(`
|
|
1238
1258
|
`)}`)+`
|
|
1239
|
-
`,stderr:``,exitCode:0}},
|
|
1240
|
-
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function
|
|
1241
|
-
`,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await
|
|
1242
|
-
`,stderr:``,exitCode:0}},
|
|
1259
|
+
`,stderr:``,exitCode:0}},aE=async({browser:e,fs:t,flags:n,scratchDir:r,onTab:i})=>{let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.filename||`${r}/page-${jn(new Date)}.pdf`;try{await i(a.targetId,async({sessionId:e,transport:n})=>{let r=(await n.send(`Page.printToPDF`,{},e)).data,i=Hn(r);await t.writeFile(o,i)})}catch(e){let t=e instanceof Error?e.message:String(e);return ee()?{stdout:``,stderr:`pdf: not available in extension mode — use screenshot --full-page
|
|
1260
|
+
`,exitCode:1}:{stdout:``,stderr:`pdf: ${t}\n`,exitCode:1}}return{stdout:`Saved PDF to ${o}\n`,stderr:``,exitCode:0}};async function oE(e,t,n,r){let i=t.snapshots.get(n);if(!i)throw Error(`No snapshot available. Run "snapshot" first.`);let a=await tE(e,i,r);return!a||a.width<=0||a.height<=0?{error:`could not resolve element ${r} to a visible box — the snapshot is likely stale (navigation, reload, or layout change). Re-run "snapshot" and retry with a fresh ref, or omit the ref to capture the viewport deliberately.`}:{clip:a}}const sE=new Set([`png`,`jpeg`,`webp`]);function cE(e){let t=e.type;if(t&&sE.has(t))return t;let n=e.filename??``;return/\.jpe?g$/i.test(n)?`jpeg`:/\.webp$/i.test(n)?`webp`:`png`}const lE=async({browser:e,fs:t,state:n,positional:r,flags:i,scratchDir:a,sessionRoot:o,onTab:s})=>{let c=j(i);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};if(i.type&&!sE.has(i.type))return{stdout:``,stderr:`screenshot: --type must be png, jpeg, or webp, got "${i.type}"\n`,exitCode:1};if(i[`max-width`]&&cE(i)!==`png`)return{stdout:``,stderr:`screenshot: --max-width requires png output (the downscale pass measures PNG headers); drop --type/--filename extension or --max-width
|
|
1261
|
+
`,exitCode:1};let l=await s(c.targetId,async e=>{let s;if(r[0]?.startsWith(`e`)){let t=await oE(e,n,c.targetId,r[0]);if(`error`in t)return t;s=t.clip}let l=i.fullPage===`true`||i[`full-page`]===`true`;if(i.hires===`true`){let{hiresClip:t}=await ZT();s=await t(e,s,l)}let u=i[`max-width`]?parseInt(i[`max-width`],10):void 0,d=cE(i),f=await e.screenshot({format:d,fullPage:l,...s?{clip:s}:{},...u?{maxWidth:u}:{}}),p=d===`jpeg`?`jpg`:d,m=i.filename||`${a}/screenshot-${Date.now()}.${p}`,h=Hn(f);await t.writeFile(m,h);try{await JT(t,n,o);let e=`${o}/screenshots/screenshot-${jn(new Date)}.${p}`;await t.writeFile(e,h)}catch{}return{message:`Screenshot saved to ${m} (${Math.round(h.length/1024)} KB)`}});return`error`in l?{stdout:``,stderr:`screenshot: ${l.error}\n`,exitCode:1}:{stdout:l.message+`
|
|
1262
|
+
`,stderr:``,exitCode:0}},uE=async({browser:e,fs:t,positional:n,flags:r,sessionRoot:i,onTab:a})=>{let o=j(r);if(`error`in o)return{stdout:``,stderr:o.error,exitCode:1};let s=r.filename??n[0]??`${i}/storage-state.json`,c=[],l=[],u=``;await a(o.targetId,async e=>{c=(await e.send(`Network.getCookies`)).cookies??[];let{sessionId:t,transport:n}=e;u=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``;let r=(await n.send(`Runtime.evaluate`,{expression:`JSON.stringify(Object.entries(localStorage).map(([name,value])=>({name,value})))`,returnByValue:!0},t)).result.value??`[]`;l=JSON.parse(r)});let d=JSON.stringify({cookies:c,origins:u?[{origin:u,localStorage:l}]:[]},null,2);return await t.writeFile(s,d),{stdout:`Saved storage state to ${s}\n`,stderr:``,exitCode:0}},dE=async({browser:e,fs:t,positional:n,flags:r,onTab:i})=>{if(n.length===0)return{stdout:``,stderr:`state-load requires a filename
|
|
1243
1263
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n[0],s;try{let e=await t.readTextFile(o);s=JSON.parse(e)}catch{return{stdout:``,stderr:`Failed to read storage state from ${o}\n`,exitCode:1}}let c=[];(s.cookies?.length||s.origins?.length)&&await i(a.targetId,async e=>{if(s.cookies?.length&&await e.send(`Network.setCookies`,{cookies:s.cookies}),!s.origins?.length)return;let{sessionId:t,transport:n}=e,r=(await n.send(`Runtime.evaluate`,{expression:`location.origin`,returnByValue:!0},t)).result.value??``,i=s.origins.filter(e=>e.origin===r);c=s.origins.filter(e=>e.origin!==r);for(let{localStorage:e}of i){let r=`(function() {
|
|
1244
1264
|
var items = ${JSON.stringify(e)};
|
|
1245
1265
|
for (var i = 0; i < items.length; i++) {
|
|
1246
1266
|
localStorage.setItem(items[i].name, items[i].value);
|
|
1247
1267
|
}
|
|
1248
|
-
})()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function
|
|
1268
|
+
})()`;await n.send(`Runtime.evaluate`,{expression:r,returnByValue:!0},t)}});let l=``;return c.length>0&&(l=`Skipped localStorage for non-matching origins: ${c.map(e=>e.origin).join(`, `)}\n`),{stdout:`Loaded storage state from ${o}\n`,stderr:l,exitCode:0}};function fE(e,t){return{list:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:{stdout:await r(i.targetId,async e=>{let n=await e.evaluate(`JSON.stringify(Object.entries(${t}))`),r=JSON.parse(n);return r.length===0?`No ${t} entries`:r.map(([e,t])=>`${e}=${t}`).join(`
|
|
1249
1269
|
`)})+`
|
|
1250
1270
|
`,stderr:``,exitCode:0}},get:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-get requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:{stdout:await a(o.targetId,async e=>{let n=await e.evaluate(`${t}.getItem(${JSON.stringify(r[0])})`);if(n===null)throw Error(`Key "${r[0]}" not found in ${t}`);return n})+`
|
|
1251
|
-
`,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const fE
|
|
1252
|
-
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},
|
|
1271
|
+
`,stderr:``,exitCode:0}},set:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length<2)return{stdout:``,stderr:`${e}-set requires <key> <value>\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.setItem(${JSON.stringify(r[0])}, ${JSON.stringify(r.slice(1).join(` `))})`)}),{stdout:`${t} "${r[0]}" set\n`,stderr:``,exitCode:0})},del:async({browser:n,positional:r,flags:i,onTab:a})=>{if(r.length===0)return{stdout:``,stderr:`${e}-delete requires a key\n`,exitCode:1};let o=j(i);return`error`in o?{stdout:``,stderr:o.error,exitCode:1}:(await a(o.targetId,async e=>{await e.evaluate(`${t}.removeItem(${JSON.stringify(r[0])})`)}),{stdout:`${t} "${r[0]}" deleted\n`,stderr:``,exitCode:0})},clear:async({browser:e,flags:n,onTab:r})=>{let i=j(n);return`error`in i?{stdout:``,stderr:i.error,exitCode:1}:(await r(i.targetId,async e=>{await e.evaluate(`${t}.clear()`)}),{stdout:`${t} cleared\n`,stderr:``,exitCode:0})}}}const pE=fE(`localstorage`,`localStorage`),mE=fE(`sessionstorage`,`sessionStorage`),hE=e(`playwright`),gE={width:412,height:915,deviceScaleFactor:2.625};function _E(e,t,n,r,i){let a=n[`teleport-start`],o=n[`teleport-return`];if(!a||!o)return null;hE.info(`Arming teleport via open/tab-new flags`),hE.debug(`Arming teleport via open/tab-new flags details`,{targetId:i,startPattern:a,returnPattern:o});let s,c;try{s=new RegExp(a)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-start: ${a}\n`,exitCode:1}}try{c=new RegExp(o)}catch{return{stdout:``,stderr:`Invalid regex for --teleport-return: ${o}\n`,exitCode:1}}let l=n.timeout?parseInt(n.timeout,10):300,u=t.teleportWatchers.get(i);return u&&(lT(u),t.teleportWatchers.delete(i)),uT(e,t,s,c,l*1e3,n[`teleport-runtime`],r,i),null}const vE=async({browser:e,fs:t,state:n,positional:r,flags:i,onTab:a})=>{let o=r[0]||`about:blank`,s=i.runtime,c=i.mobile===`true`;await ae(e,n);let l=c?`about:blank`:o,u;if(u=s?await e.createRemotePage(s,l):await e.createPage(l),c&&await a(u,async e=>{await e.setViewportOverride(gE.width,gE.height,{deviceScaleFactor:gE.deviceScaleFactor,mobile:!0,userAgent:`Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Mobile Safari/537.36`}),o!==`about:blank`&&await e.navigate(o)}),i.foreground===`true`||i.fg===`true`)try{await a(u,e=>e.bringToFront())}catch(e){hE.debug(`open/tab-new --foreground bringToFront failed`,{targetId:u,error:e instanceof Error?e.message:String(e)})}let d=_E(e,n,i,o,u);if(d)return d;if(i.discover===`true`){let{browseShWarning:e,...n}=await uw(o,{discover:!0,fs:t}),r={action:`open`,targetId:u,source:`auxiliary-fetch`,...n};return{stdout:JSON.stringify(r,null,2)+`
|
|
1272
|
+
`,stderr:e?`${e}\n`:``,exitCode:0}}return{stdout:`Opened ${o} in new tab [targetId: ${u}]\n`,stderr:``,exitCode:0}},yE=async({browser:e,state:t})=>{let n=await oe(e,t);return n.length===0?{stdout:`No tabs open
|
|
1253
1273
|
`,stderr:``,exitCode:0}:{stdout:n.map(e=>{let t=!!e.active,n=e.targetId.includes(`:`),r=t?` (active)`:``,i=n?` [remote:${e.targetId.substring(0,e.targetId.indexOf(`:`))}]`:``;return`[${e.targetId}] ${e.url} "${e.title}"${r}${i}`}).join(`
|
|
1254
1274
|
`)+`
|
|
1255
|
-
`,stderr:``,exitCode:0}},
|
|
1275
|
+
`,stderr:``,exitCode:0}},bE=async({browser:e,state:t,flags:n})=>{let r=j(n);if(`error`in r)return{stdout:``,stderr:r.error,exitCode:1};await e.closePage(r.targetId),t.snapshots.delete(r.targetId),t.teleportWatchers.delete(r.targetId),t.consoleMessages.delete(r.targetId);let i=t.consoleCleanup.get(r.targetId);i&&(i(),t.consoleCleanup.delete(r.targetId)),t.networkRequests.delete(r.targetId);let a=t.networkCleanup.get(r.targetId);a&&(a(),t.networkCleanup.delete(r.targetId));let o=t.routeCleanup.get(r.targetId);return o&&(o(),t.routeCleanup.delete(r.targetId)),t.routes.delete(r.targetId),t.lastMousePosition.delete(r.targetId),{stdout:`Closed tab ${r.targetId}\n`,stderr:``,exitCode:0}},xE=async({browser:e,state:t,positional:n,onTab:r})=>{if(n.length===0)return{stdout:``,stderr:`tab-select requires a tab index
|
|
1256
1276
|
`,exitCode:1};let i=n[0];if(!/^[0-9]+$/.test(i))return{stdout:``,stderr:`tab-select index must be a positive integer
|
|
1257
1277
|
`,exitCode:1};let a=parseInt(i,10);if(a<1)return{stdout:``,stderr:`tab-select index must be a positive integer
|
|
1258
|
-
`,exitCode:1};let o=await oe(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},
|
|
1278
|
+
`,exitCode:1};let o=await oe(e,t);if(a>o.length)return{stdout:``,stderr:`tab-select index ${a} out of range (${o.length} tab${o.length===1?``:`s`} open)\n`,exitCode:1};let s=o[a-1].targetId;return await r(s,e=>e.bringToFront()),{stdout:`Selected tab ${a} [targetId: ${s}]\n`,stderr:``,exitCode:0}},SE=async({browser:e,state:t,positional:n,flags:r,onTab:i})=>{if(n.length<2)return{stdout:``,stderr:`resize requires <width> <height>
|
|
1259
1279
|
`,exitCode:1};let a=j(r);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=parseInt(n[0],10),s=parseInt(n[1],10);return isNaN(o)||isNaN(s)||o<=0||s<=0?{stdout:``,stderr:`resize requires positive integer width and height
|
|
1260
|
-
`,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},
|
|
1280
|
+
`,exitCode:1}:(await i(a.targetId,e=>e.setViewportOverride(o,s)),t.snapshots.delete(a.targetId),{stdout:`Resized viewport to ${o}x${s}\n`,stderr:``,exitCode:0})},CE=e(`playwright-teleport`);function wE(){CE.info(`Listing available follower runtimes`);let e=sT();if(!e)return{stdout:``,stderr:`teleport: not connected to a tray
|
|
1261
1281
|
`,exitCode:1};let t=e();if(t.length===0)return{stdout:`No followers connected to the tray.
|
|
1262
1282
|
`,stderr:``,exitCode:0};let n=[`Available runtimes for teleport:`];for(let e of t){let t=[e.runtimeId];if(e.floatType&&t.push(`[${e.floatType}]`),e.runtime&&t.push(`(${e.runtime})`),e.lastActivity){let n=Math.round((Date.now()-e.lastActivity)/1e3);t.push(`active ${n}s ago`)}n.push(` ${t.join(` `)}`)}return{stdout:n.join(`
|
|
1263
1283
|
`)+`
|
|
1264
|
-
`,stderr:``,exitCode:0}}function
|
|
1265
|
-
`,stderr:``,exitCode:0}}function
|
|
1266
|
-
`,exitCode:1};let c=
|
|
1267
|
-
`,exitCode:1};let u=n.runtime;if(u){let e=
|
|
1284
|
+
`,stderr:``,exitCode:0}}function TE({state:e,flags:t}){let n=j(t);if(`error`in n)return{stdout:``,stderr:n.error,exitCode:1};CE.info(`Disarming teleport watcher via --off`,{targetId:n.targetId});let r=e.teleportWatchers.get(n.targetId);return r&&(lT(r),e.teleportWatchers.delete(n.targetId)),{stdout:`Teleport watcher disarmed
|
|
1285
|
+
`,stderr:``,exitCode:0}}function EE(e,t){let n,r;try{n=new RegExp(e)}catch{return{error:`Invalid regex for --start: ${e}\n`}}try{r=new RegExp(t)}catch{return{error:`Invalid regex for --return: ${t}\n`}}return{startPattern:n,returnPattern:r}}function DE(e){return(sT()?.()??[]).find(t=>t.runtimeId===e)?.runtime===`slicc-cherry`?`teleport: runtime ${e} is a cherry host and cannot serve a cookie teleport (no Network.* access)\n`:null}async function OE({browser:e,state:t,flags:n,onTab:r,signal:i}){let a=j(n);if(`error`in a)return{stdout:``,stderr:a.error,exitCode:1};let o=n.start||n[`teleport-start`],s=n.return||n[`teleport-return`];if(!o||!s)return{stdout:``,stderr:`teleport requires --start <regex> and --return <regex>
|
|
1286
|
+
`,exitCode:1};let c=EE(o,s);if(`error`in c)return{stdout:``,stderr:c.error,exitCode:1};let l=n.timeout?parseInt(n.timeout,10):300;if(isNaN(l)||l<=0)return{stdout:``,stderr:`--timeout must be a positive number
|
|
1287
|
+
`,exitCode:1};let u=n.runtime;if(u){let e=DE(u);if(e)return{stdout:``,stderr:e,exitCode:1}}let d=t.teleportWatchers.get(a.targetId);d&&(CE.info(`Disarming existing teleport watcher before re-arming`,{targetId:a.targetId}),lT(d),t.teleportWatchers.delete(a.targetId));let f;try{let e=await r(a.targetId,e=>e.evaluate(`window.location.href`));f=typeof e==`string`?e:String(e)}catch{}return CE.info(`Arming teleport via explicit subcommand`,{targetId:a.targetId,timeoutSec:l,runtimeSelection:u?`explicit`:`auto`}),CE.debug(`Arming teleport via explicit subcommand details`,{targetId:a.targetId,startPattern:o,returnPattern:s,timeoutSec:l,runtimeId:u??`auto`,leaderUrl:f}),An(i,`about to arm a teleport watcher on tab ${a.targetId}`),uT(e,t,c.startPattern,c.returnPattern,l*1e3,u,f,a.targetId),{stdout:`Teleport armed on tab ${a.targetId}. Will trigger when URL matches ${o}\n`,stderr:``,exitCode:0}}const kE=async e=>e.flags.list===`true`?wE():e.flags.off===`true`?TE(e):OE(e),AE={png:`image/png`,jpg:`image/jpeg`,jpeg:`image/jpeg`,gif:`image/gif`,webp:`image/webp`,svg:`image/svg+xml`,pdf:`application/pdf`,txt:`text/plain`,json:`application/json`,csv:`text/csv`,html:`text/html`,htm:`text/html`,xml:`application/xml`,zip:`application/zip`,mp4:`video/mp4`,mp3:`audio/mpeg`};function jE(e){let t=e.split(`.`).pop()?.toLowerCase()??``;return AE[t]??`application/octet-stream`}function ME(e,t){if(e.length===0)return{error:`upload requires at least one file path
|
|
1268
1288
|
`};if(!Bn(e[0]))return{targetRef:null,filePaths:e};let n=e[0],r=e.slice(1);return t?t.refToBackendNodeId.has(n)?r.length===0?{error:`upload requires at least one file path
|
|
1269
1289
|
`}:{targetRef:n,filePaths:r}:{error:`Unknown ref "${n}"\n`}:{error:`No snapshot available. Run "snapshot" first.
|
|
1270
|
-
`}}const
|
|
1290
|
+
`}}const NE=new Map([[`teleport`,kE],[`open`,vE],[`tab-new`,vE],[`fetch`,dw],[`goto`,yT],[`navigate`,yT],[`snapshot`,nE],[`find`,rE],[`frames`,iE],[`screenshot`,lE],[`click`,_w],[`type`,vw],[`fill`,yw],[`eval`,aw],[`eval-file`,ow],[`press`,bw],[`keydown`,xw],[`keyup`,Sw],[`go-back`,bT],[`go-forward`,xT],[`reload`,ST],[`tab-list`,yE],[`tab-close`,bE],[`close`,bE],[`dblclick`,Cw],[`hover`,ww],[`select`,Tw],[`check`,Ew],[`uncheck`,Dw],[`drag`,Ow],[`resize`,SE],[`dialog-accept`,$C],[`dialog-dismiss`,ew],[`cookie-list`,KC],[`cookie-get`,qC],[`cookie-set`,JC],[`cookie-delete`,YC],[`cookie-clear`,XC],[`localstorage-list`,pE.list],[`localstorage-get`,pE.get],[`localstorage-set`,pE.set],[`localstorage-delete`,pE.del],[`localstorage-clear`,pE.clear],[`sessionstorage-list`,mE.list],[`sessionstorage-get`,mE.get],[`sessionstorage-set`,mE.set],[`sessionstorage-delete`,mE.del],[`sessionstorage-clear`,mE.clear],[`record`,IT],[`stop-recording`,LT],[`tab-select`,xE],[`pdf`,aE],[`network-state-set`,CT],[`upload`,async({browser:e,fs:n,state:r,positional:i,flags:a,onTab:o})=>{let s=j(a);if(`error`in s)return{stdout:``,stderr:s.error,exitCode:1};let c=r.snapshots.get(s.targetId),l=ME(i,c);if(`error`in l)return{stdout:``,stderr:l.error,exitCode:1};let{targetRef:u,filePaths:d}=l,f=[];for(let e of d){let r=await kw(n,e),i=e.split(`/`).pop()??e;f.push({name:i,type:jE(i),base64:t(r)})}if(u){let e=c.refToBackendNodeId.get(u);await o(s.targetId,async({sessionId:t,transport:n})=>{await n.send(`DOM.enable`,{},t);let{object:r}=await n.send(`DOM.resolveNode`,{backendNodeId:e},t),i=await n.send(`Runtime.callFunctionOn`,{objectId:r.objectId,functionDeclaration:`function(filesData) {
|
|
1271
1291
|
const el = this;
|
|
1272
1292
|
if (el.tagName !== 'INPUT' || el.type !== 'file') {
|
|
1273
1293
|
throw new Error('Element ' + el.tagName + ' is not a file input');
|
|
@@ -1298,12 +1318,12 @@ Options:
|
|
|
1298
1318
|
el.dispatchEvent(new Event('change', { bubbles: true }));
|
|
1299
1319
|
el.dispatchEvent(new Event('input', { bubbles: true }));
|
|
1300
1320
|
return el.files.length;
|
|
1301
|
-
})()`,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`,
|
|
1302
|
-
`;return{...r,stderr:r.stderr+c}}async function
|
|
1303
|
-
`,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await
|
|
1304
|
-
`);let a=[];for(let[e,t]of
|
|
1321
|
+
})()`,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`,uE],[`state-load`,dE],[`console`,VC],[`requests`,AT],[`request`,jT],[`request-headers`,MT],[`request-body`,NT],[`response-headers`,PT],[`response-body`,FT],[`mousemove`,Nw],[`mousedown`,Pw],[`mouseup`,Fw],[`mousewheel`,Iw],[`drop`,Rw],[`route`,UT],[`route-list`,WT],[`unroute`,GT],[`generate-locator`,ZC],[`highlight`,QC]]);function PE(){let e=(In.string??[]).map(e=>`--${e}`),t=new Set(In.boolean??[]);for(let[e,n]of Object.entries(In.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 FE(e){return e.map(e=>e===`--no-iframes`||e.startsWith(`--no-iframes=`)?e.replace(`--no-iframes`,`--_noiframes`):e)}function IE(e){return{...e,bool:[...e.bool??[],`--_noiframes`],value:[...e.value??[],`--_noiframes`]}}const LE=2e3;function RE(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 zE(e,t,n,r){if(!t||typeof e.getTabLockStats!=`function`)return r;let i=e.getTabLockStats(),a=i.totalWaitMs-t.totalWaitMs;if(a<LE)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>=LE?`${(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.
|
|
1322
|
+
`;return{...r,stderr:r.stderr+c}}async function BE(e,t,n){let r=n instanceof Error?n.message:String(n);return{stdout:``,stderr:`Error: ${(t.tab?await Ln(e,t.tab,n):null)??r}\n`,exitCode:1}}function VE(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 HE(e,t,n){let r=NE.get(t);if(!r)return{stdout:``,stderr:`Unknown command: ${t}\nRun "playwright-cli help" for usage.\n`,exitCode:1};let{signal:i}=n;try{let a=await r(n);return i?.aborted?VE(e,t,void 0):a}catch(r){return i?.aborted?VE(e,t,r):await BE(n.browser,n.flags,r)}}async function UE(e,t,n,r){let i=C(FE(n),IE(r));if(`error`in i)return{answer:{stdout:``,stderr:`${e} ${t}: ${i.error}\n`,exitCode:1}};let a;try{({flags:a}=Fn(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-BA8Xystm.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 WE(e,t,n,r={}){let i=t?Mn(t,n):null,a=PE();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-BA8Xystm.js`);return{stdout:t(e)+`
|
|
1323
|
+
`,stderr:``,exitCode:0}}let c=o[0],l=o.slice(1),u=await UE(e,c,l,a);if(`answer`in u)return u.answer;let{positional:d,flags:f}=u;if(!t||!i)return{stdout:``,stderr:`${e}: browser APIs are unavailable in this environment\n`,exitCode:1};let p=f.tab??null,m=RE(t,p),h=Qi(s.env),g=qT(r.isScoop?.()??!1,h),_=await HE(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;Un.has(c)&&_.exitCode===0&&v&&(ee=await YT(t,n,v,i,g));try{await XT(n,i,g,{command:c,args:l,result:_,snapshotPath:ee,targetId:v})}catch{}return zE(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`,`pyodide`,`sqlite3`]],[`Virtualization`,[`v86`,`computer`]],[`Build tools`,[`tsc`,`tst`,`esbuild`,`biome`]],[`Packages`,[`ipk`,`hf`,`npm`,`i`,`ipx`,`npx`]],[`Skills`,[`skill`,`upskill`]],[`Browser & UI`,[`serve`,`open`,`imgcat`,...Vn,`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)`,[...w_]]]);function KE(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:
|
|
1324
|
+
`);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(`
|
|
1305
1325
|
`)+`
|
|
1306
|
-
`}function
|
|
1326
|
+
`}function qE(e={}){return S(`commands`,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return{stdout:`commands - display available commands
|
|
1307
1327
|
|
|
1308
1328
|
Usage: commands [command]
|
|
1309
1329
|
|
|
@@ -1314,7 +1334,7 @@ If a command name is provided, shows help for that command.
|
|
|
1314
1334
|
Otherwise, lists all available commands.
|
|
1315
1335
|
|
|
1316
1336
|
Note: This is an enhanced version of 'help' that shows all custom commands.
|
|
1317
|
-
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:
|
|
1337
|
+
`,stderr:``,exitCode:0};if(t.length>0&&n.exec){let e=t[0];return n.exec(`${e} --help`,{cwd:n.cwd})}return{stdout:KE(n.getRegisteredCommands?.()??[],await e.getJshCommands?.()??[],await e.getWorkflowCommands?.()??[]),stderr:``,exitCode:0}})}function JE(e){return{stdout:`hf - download model repos from the Hugging Face Hub into the VFS
|
|
1318
1338
|
|
|
1319
1339
|
Usage:
|
|
1320
1340
|
hf download <repo> [files...] [--to <dir>] [--revision <rev>] [--force]
|
|
@@ -1345,8 +1365,8 @@ Notes:
|
|
|
1345
1365
|
- Background-job logs get a progress line every few seconds.
|
|
1346
1366
|
- Weights are read by the speech engines via the preview SW from the
|
|
1347
1367
|
target directory; transformers expects <localModelPath>/<repo>/.
|
|
1348
|
-
`,stderr:``,exitCode:e}}function
|
|
1349
|
-
`)}\n`}function
|
|
1368
|
+
`,stderr:``,exitCode:e}}function YE(e){return{stdout:``,stderr:`hf: ${e}\n`,exitCode:1}}const XE=/^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;function ZE(e,t){if(typeof t!=`string`)return{error:`${e} requires a value`};let n=Number(t);return!/^\d+$/.test(t)||!Number.isSafeInteger(n)||n<1?{error:`${e} must be a positive integer, got '${t}'`}:n}function QE(e){let t=null,n=`main`,r=!1,i,a,o=[],s=0;for(;s<e.length;){let c=e[s];if(c===`--concurrency`||c===`-j`||c===`--max-in-flight-mb`){let t=ZE(c,e[s+1]);if(typeof t!=`number`)return t;c===`--max-in-flight-mb`?a=t:i=t,s+=2;continue}if(c===`--to`){let n=e[s+1];if(typeof n!=`string`)return{error:`--to requires a value`};t=n,s+=2;continue}if(c===`--revision`||c===`--rev`){let t=e[s+1];if(typeof t!=`string`)return{error:`${c} requires a value`};n=t,s+=2;continue}if(c===`--force`||c===`-f`){r=!0,s+=1;continue}if(c.startsWith(`--`))return{error:`unknown option: ${c}`};o.push(c),s+=1}if(o.length===0)return{error:`download requires <repo>`};let c=o[0];return XE.test(c)?{repo:c,files:o.slice(1),to:t,revision:n,force:r,concurrency:i,maxInFlightMb:a}:{error:`invalid repo '${c}' — expected <owner>/<name>`}}function $E(e){let t=Math.max(0,Math.round(e/1e3));if(t<60)return`${t}s`;let n=Math.floor(t/60);return n<60?`${n}m ${t%60}s`:`${Math.floor(n/60)}h ${n%60}m`}var eD=class{filesTotal;bytesTotal;now;filesDone=0;bytesDone=0;bytesFetched=0;lastLineAt=-1/0;startedAt;constructor(e,t,n=Date.now){this.filesTotal=e,this.bytesTotal=t,this.now=n,this.startedAt=n()}listed(e,t){this.filesTotal=e,this.bytesTotal=t>0?t:void 0}file(e,t){this.filesDone+=1,this.bytesDone+=t,e===`downloaded`&&(this.bytesFetched+=t)}rate(){let e=(this.now()-this.startedAt)/1e3;return e>0?this.bytesFetched/e:0}elapsedMs(){return this.now()-this.startedAt}line(){let e=this.now();if(!(this.filesDone>=this.filesTotal)&&e-this.lastLineAt<5e3)return null;this.lastLineAt=e;let t=this.rate(),n=eb(this.bytesDone),r=``;if(this.bytesTotal!==void 0){n+=` of ${eb(this.bytesTotal)}`;let e=this.bytesTotal-this.bytesDone;t>0&&e>0&&(r=`, ~${$E(e/t*1e3)} left`)}return`hf: ${this.filesDone}/${this.filesTotal} files, ${n}, ${eb(t)}/s${r}\n`}};function tD(e){let t=e;return typeof t.writeStdout==`function`?t.writeStdout.bind(t):void 0}async function nD(e,t,n,r){let i=QE(e);if(`error`in i)return YE(i.error);let a=$i(i.repo,i.to,t.cwd),{downloadHfRepo:o,HfFileDownloadError:s}=await import(`./hf-download-CNg2vD63.js`),c=tD(t),l=new eD(i.files.length,void 0,r),u=``;try{let e=await o({fetch:n.fetch,streamFetch:n.streamFetch,fs:t.fs,repo:i.repo,targetDir:a,files:i.files,revision:i.revision,force:i.force,concurrency:i.concurrency,maxBytesInFlight:i.maxInFlightMb===void 0?void 0:i.maxInFlightMb*1024*1024,signal:t.signal,endpoint:t.env.get(`HF_ENDPOINT`),progress:{onListed:({files:e,totalBytes:t})=>{l.listed(e.length,t);let n=`hf: ${e.length} file(s) listed in ${i.repo}@${i.revision}\n`;u+=n,c?.(n)},onFile:e=>{u+=e.status===`downloaded`?`hf: downloaded ${e.file} (${eb(e.bytes)})\n`:`hf: skipped ${e.file} (already at ${a})\n`,l.file(e.status,e.bytes);let t=c?l.line():null;t&&c?.(t)}}}),r=e.downloaded>0?` in ${$E(l.elapsedMs())} (${eb(l.rate())}/s)`:``,s=`hf: ${e.downloaded} downloaded, ${e.skipped} skipped, ${eb(e.totalBytes)} total into ${a}${r}\n`;return{stdout:``,stderr:u+s,exitCode:0}}catch(e){return e instanceof s?(u+=`hf: failed ${e.file}: ${e.message}\n`,{stdout:``,stderr:u,exitCode:1}):YE(e instanceof Error?e.message:String(e))}}const rD=[`--to`,`--revision`,`--rev`,`--concurrency`,`-j`,`--max-in-flight-mb`];function iD(e){let t=e.now??Date.now;return{name:`hf`,async execute(n,r){if(n.length===0||w(n,{valueFlags:rD}))return JE(+(n.length===0));let i=n[0];return i===`download`?nD(n.slice(1),r,e,t):YE(`unknown subcommand: ${i}`)}}}const aD=new Set([`--vid`,`--pid`,`--usage-page`,`--usage`,`--__resolved`,`--timeout`]);function oD(e){return Dn(e,aD)}function sD(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 cD(e){let t={};return e.has(`--vid`)&&(t.vendorId=sD(e.get(`--vid`),`vid`)),e.has(`--pid`)&&(t.productId=sD(e.get(`--pid`),`pid`)),e.has(`--usage-page`)&&(t.usagePage=sD(e.get(`--usage-page`),`usage-page`)),e.has(`--usage`)&&(t.usage=sD(e.get(`--usage`),`usage`)),Object.keys(t).length>0?[t]:[]}function lD(e){let t=pi(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function uD(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function dD(e){return e.toString(16).padStart(2,`0`)}function fD(e){return`0x${e.toString(16).padStart(4,`0`)}`}function pD(e){let t=e.productName||`(unknown)`,n=e.opened?` [open]`:``,r=e.usagePage===void 0?``:`\t${fD(e.usagePage)}:${fD(e.usage??0)}`;return`${e.handle}\t${fD(e.vendorId)}:${fD(e.productId)}${r}\t${t}${n}`}function mD(e,t){let n=t?.usagePage,r=t?.usage;if(n===void 0&&r===void 0)return e;let i=e.findIndex(e=>(n===void 0||e.usagePage===n)&&(r===void 0||e.usage===r));if(i<=0)return e;let a=e.slice(),[o]=a.splice(i,1);return a.unshift(o),a}function hD(e){return`${e.map(pD).join(`
|
|
1369
|
+
`)}\n`}function gD(e){return`${dD(e.reportId)} ${uD(e.bytes)}`.trimEnd()}function _D(e){return{stdout:e,stderr:``,exitCode:0}}function U(e){return{stdout:``,stderr:`hid: ${e}\n`,exitCode:1}}const vD=`hid - access HID devices via WebHID
|
|
1350
1370
|
|
|
1351
1371
|
Usage: hid <subcommand> [options]
|
|
1352
1372
|
|
|
@@ -1370,10 +1390,10 @@ Options:
|
|
|
1370
1390
|
-h, --help
|
|
1371
1391
|
|
|
1372
1392
|
Report payloads are capped at ${Yr} bytes (4 MiB).
|
|
1373
|
-
`;function
|
|
1374
|
-
`):
|
|
1375
|
-
`)}\n`)}async function
|
|
1376
|
-
`)}\n`:``)}async function
|
|
1393
|
+
`;function yD(e,t){if(t){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return _D(t)}return _D(e.length?`${uD(e)}\n`:``)}function bD(e){return!e||e.aborted?Promise.resolve():new Promise(t=>{e.addEventListener(`abort`,()=>t(),{once:!0})})}async function xD(e){let t=await e.list();return t.length===0?_D(`no granted HID devices
|
|
1394
|
+
`):_D(`${t.map(pD).join(`
|
|
1395
|
+
`)}\n`)}async function SD(e,t){let n=e.get(`--__resolved`),r=cD(e),i=r[0];if(n){let e=n.split(`,`).filter(e=>e.length>0);return e.length===0?U(`request: missing resolved handle`):_D(hD(mD(await Promise.all(e.map(e=>t.info(e))),i)))}let a=ke();return a?CD(r,i,a,t):_D(hD(mD(await t.request(r),i)))}async function CD(e,t,n,r){let i=await cS(`hid-device`,e,n),a,o;if(i.handle){let e=await r.info(i.handle);a=e.vendorId,o=e.productId}else{let e=i.info,t=Jr();if(!t)return U(`request: WebHID unavailable for device re-acquire`);let n=await t.getDevices(),r=Hr(),s=n.filter(t=>t.vendorId===e.vendorId&&t.productId===e.productId);if(s.length===0)return U(`request: granted device could not be re-acquired`);for(let e of s)r.register(e);a=e.vendorId,o=e.productId}let s=(await r.list()).filter(e=>e.vendorId===a&&e.productId===o),c=mD(s.length>0?s:[],t);return c.length===0?U(`request: granted device could not be re-acquired`):_D(hD(c))}async function wD(e,t,n){let r=t[1];return r?(e===`open`?await n.open(r):await n.close(r),_D(``)):U(`${e}: handle required`)}async function TD(e,t,n,r){let[,i,a]=t;if(!i||a===void 0)return U(`${e}: handle and report-id required`);let o=sD(a,`report-id`),s=lD(n);return s.length>4194304?U(`${e} payload exceeds 4 MiB limit`):(e===`send`?await r.sendReport(i,o,s):await r.sendFeatureReport(i,o,s),_D(``))}async function ED(e,t,n){let[,r,i]=e;return!r||i===void 0?U(`feature-get: handle and report-id required`):yD((await t.receiveFeatureReport(r,sD(i,`report-id`))).bytes,n)}async function DD(e,t,n){let r=e[1];if(!r)return U(`watch: handle required`);let i=[],a=await n.subscribeInputReports(r,e=>{i.push(gD(e))});try{await bD(t.signal)}finally{await a()}return _D(i.length?`${i.join(`
|
|
1396
|
+
`)}\n`:``)}async function OD(e,t,n,r,i){let[,a,o]=e;if(!a||o===void 0)return U(`query: handle and report-id required`);let s=sD(o,`report-id`),c=lD(t);if(c.length>4194304)return U(`query payload exceeds 4 MiB limit`);let l=n.has(`--timeout`)?sD(n.get(`--timeout`),`timeout`):1e3,u=()=>{},d=new Promise(e=>{u=e}),f=await r.subscribeInputReports(a,e=>{u(e)}),p;try{await r.sendReport(a,s,c);let e=new Promise(e=>{p=setTimeout(()=>e(`timeout`),l)}),t=await Promise.race([d,e]);return t===`timeout`?U(`query: no input report within ${l}ms`):i?yD(t.bytes,!0):_D(`${gD(t)}\n`)}finally{p!==void 0&&clearTimeout(p),await f()}}async function kD(e,t,n){let{positionals:r,flags:i,bools:a}=oD(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return xD(n);case`request`:return SD(i,n);case`open`:case`close`:return wD(o,r,n);case`send`:case`feature-send`:return TD(o,r,t,n);case`feature-get`:return ED(r,n,s);case`watch`:return DD(r,t,n);case`query`:return OD(r,t,i,n,s);default:return U(`unknown subcommand '${o??``}'. Try 'hid --help'.`)}}function AD(){return S(`hid`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return _D(vD);let n=Zr(le(),y());if(!n)return U(`WebHID is unavailable in this environment`);try{return await kD(e,t,n)}catch(e){let t=e instanceof Error?e.message:String(e);return/cancelled|NotFoundError|No device selected/i.test(t)?U(`user cancelled or no device selected`):U(t)}})}const jD=1e3,MD=`usage: id [-u|-g|-G] [-n] [-r] [USER]`,ND=`${MD}
|
|
1377
1397
|
|
|
1378
1398
|
Print the user and group identity of this SLICC runtime.
|
|
1379
1399
|
|
|
@@ -1388,22 +1408,22 @@ Options:
|
|
|
1388
1408
|
--version Print the SLICC build.
|
|
1389
1409
|
|
|
1390
1410
|
Identity comes from the home directory, which is where the rest of the shell
|
|
1391
|
-
gets it too. A cone is the human user (uid ${
|
|
1411
|
+
gets it too. A cone is the human user (uid ${jD}, one per runtime, since every
|
|
1392
1412
|
cone shares one home); a scoop is a service identity whose uid is derived from
|
|
1393
1413
|
its folder name, so it is stable across reloads and distinct per scoop.
|
|
1394
1414
|
Every user is in a user-private group of the same name, plus the role group
|
|
1395
1415
|
\`cone\` (10) or \`scoop\` (20).
|
|
1396
|
-
`,
|
|
1416
|
+
`,PD=`/scoops/`;function FD(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619)>>>0;return 2e3+t%58e3}function ID(e,t){return{name:e,uid:t===`cone`?jD:FD(e),role:t}}function LD(e){return[{gid:e.uid,name:e.name},e.role===`cone`?{gid:10,name:`cone`}:{gid:20,name:`scoop`}]}function RD(e,t){return`${e}(${t})`}function zD(e){let t=LD(e),n=t[0];return`uid=${RD(e.uid,e.name)} gid=${RD(n.gid,n.name)} groups=${t.map(e=>RD(e.gid,e.name)).join(`,`)}\n`}async function BD(e){let t=e.env.get(`HOME`)??``,n=t.startsWith(PD)?`scoop`:`cone`,r=e.env.get(`USER`)||VD(t,n);return r?ID(r,n):ID(mp(await pp(HD(e.fs))),`cone`)}function VD(e,t){return e===``?``:t===`cone`?mp(e):e.slice(8).split(`/`)[0]??``}function HD(e){return{readDir:async t=>(await e.readdirWithFileTypes?.(t)??[]).map(e=>({name:e.name,type:e.isDirectory?`directory`:`file`})),stat:async t=>({mtime:(await e.stat(t)).mtime.getTime()})}}async function UD(e,t){return await e.fs.exists(`/home/${t}`).catch(()=>!1)?ID(t,`cone`):await e.fs.exists(`${PD}${t}`).catch(()=>!1)?ID(t,`scoop`):null}function WD(e){let t={select:`all`,names:!1,mode:`run`},n=[];for(let r of e){if(r===`--help`||r===`-h`)return{...t,mode:`help`};if(r===`--version`)return{...t,mode:`version`};let e=KD[r];if(e){e(t);continue}if(r.length>1&&r.startsWith(`-`)){for(let e of r.slice(1)){let n=GD[e];if(!n)return{error:`unrecognized option '-${e}'`};n(t)}continue}n.push(r)}return n.length>1?{error:`extra operand '${n[1]}'`}:(n[0]!==void 0&&(t.operand=n[0]),t.names&&t.select===`all`?{error:`cannot print only names in default format`}:t)}const GD={u:e=>{e.select=`user`},g:e=>{e.select=`group`},G:e=>{e.select=`groups`},n:e=>{e.names=!0},r:()=>void 0},KD={"--user":GD.u,"--group":GD.g,"--groups":GD.G,"--name":GD.n,"--real":GD.r};function qD(e,t){let n=LD(e),r=(e,n)=>t.names?n:String(e);switch(t.select){case`user`:return`${r(e.uid,e.name)}\n`;case`group`:return`${r(n[0].gid,n[0].name)}\n`;case`groups`:return`${n.map(e=>r(e.gid,e.name)).join(` `)}\n`;case`all`:return zD(e)}}function JD(){return S(`id`,async(e,t)=>{let n=WD(e);if(`error`in n)return{stdout:``,stderr:`id: ${n.error}\n${MD}\n`,exitCode:1};if(n.mode===`help`)return XD(ND);if(n.mode===`version`)return XD(`id (SLICC) ${et().version}\n`);let r=n.operand===void 0?await BD(t):await UD(t,n.operand);return r?XD(qD(r,n)):{stdout:``,stderr:`id: '${n.operand}': no such user\n`,exitCode:1}})}function YD(){return S(`whoami`,async(e,t)=>XD(`${(await BD(t)).name}\n`))}function XD(e){return{stdout:e,stderr:``,exitCode:0}}function ZD(){return{stdout:`imgcat - preview image and video files in the preview tab
|
|
1397
1417
|
|
|
1398
1418
|
Usage: imgcat <path> [path...]
|
|
1399
1419
|
|
|
1400
1420
|
Options:
|
|
1401
1421
|
-h, --help Show this help message
|
|
1402
|
-
`,stderr:``,exitCode:0}}function
|
|
1403
|
-
`,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=De(t);if(!Ee(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const
|
|
1404
|
-
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),
|
|
1405
|
-
`]),
|
|
1406
|
-
`)}\n`}function
|
|
1422
|
+
`,stderr:``,exitCode:0}}function QD(e={}){return S(`imgcat`,async(t,n)=>{if(t.length===0||w(t))return ZD();let r=C(t);if(`error`in r)return{stdout:``,stderr:`imgcat: ${r.error}\n`,exitCode:1};if(r.positionals.length===0)return ZD();if(!e.onMediaPreview)return{stdout:``,stderr:`imgcat: terminal preview is unavailable
|
|
1423
|
+
`,exitCode:1};let i=[];for(let e of r.positionals){let t=n.fs.resolvePath(n.cwd,e);if(!(await n.fs.stat(t)).isFile)return{stdout:``,stderr:`imgcat: not a file: ${e}\n`,exitCode:1};let r=De(t);if(!Ee(r))return{stdout:``,stderr:`imgcat: unsupported media type: ${e}\n`,exitCode:1};let a=await n.fs.readFileBuffer(t),o=new Uint8Array(a.byteLength);o.set(a),i.push({path:t,mimeType:r,bytes:o})}try{return await e.onMediaPreview(i),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`imgcat: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const $D=new Set([`run`,`run-script`]),eO=new Set([`test`,`start`,`stop`,`restart`]),tO=new Set([` `,` `,`
|
|
1424
|
+
`,`;`,`|`,`&`,`(`,`)`,`{`,`}`,`<`,`>`]),nO=new Set([`;`,`|`,`&`,`(`,`)`,`{`,`
|
|
1425
|
+
`]),rO=/^[A-Za-z_][A-Za-z0-9_]*=/,iO=/^[@A-Za-z0-9._-]+$/,aO=new Set([`if`,`then`,`else`,`elif`,`fi`,`for`,`while`,`until`,`do`,`done`,`case`,`in`,`esac`,`function`,`time`,`!`]),oO=new Set([`if`,`then`,`else`,`elif`,`while`,`until`,`do`,`time`,`!`]),sO=new Set([`ipx`,`npx`]);function cO(e){return`'${e.replace(/'/g,`'\\''`)}'`}async function lO(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}function*uO(e){let t=b(e);for(;yield t,t!==`/`;)t=Ne(t).dir}function dO(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 fO(e){return typeof e==`string`?e:void 0}async function pO(e,t){for(let n of uO(t)){let t=x(n,`package.json`);if(!await e.exists(t))continue;let r;try{r=JSON.parse(await lO(e,t))}catch(e){throw Error(`${t} is not valid JSON: ${e instanceof Error?e.message:String(e)}`)}return{dir:n,name:fO(r.name),version:fO(r.version),scripts:dO(r.scripts)}}return null}function mO(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(tO.has(t))break;n++}return{start:t,end:n,text:e.slice(t,n)}}function hO(e){let t=[],n=0,r=!0;for(;n<e.length;){let i=e[n];if(i===` `||i===` `){n++;continue}if(nO.has(i)){r=!0,n++;continue}let a=mO(e,n);if(a.end===a.start){n++;continue}if(r&&!rO.test(a.text)){if(oO.has(a.text)){n=a.end;continue}t.push(a),r=!1}n=a.end}return t}function gO(e,t){return!iO.test(e)||aO.has(e)||sO.has(e)?!1:!t.isRegistered(e)}async function _O(e,t){let n=hO(e).filter(e=>gO(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 vO(e){let t=[];for(let n of uO(e))t.push(x(n,`node_modules`,`.bin`));return t}function yO(e,t,n,r){let i=r.env.get(`PATH`)??``,a={PATH:[...vO(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 bO(e){return e.name===void 0?e.dir:e.version===void 0?e.name:`${e.name}@${e.version}`}function xO(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 ${bO(t)} via \`${e} run\`:`];for(let[e,t]of n)r.push(` ${e}`),r.push(` ${t}`);return`${r.join(`
|
|
1426
|
+
`)}\n`}function SO(e,t){return t===`--silent`||t===`-s`?(e.silent=!0,!0):t===`--if-present`&&(e.ifPresent=!0,!0)}function CO(e){let t={silent:!1,ifPresent:!1},n=[],r,i=!1;for(let a of e){if(i){n.push(a);continue}if(a===`--`){i=!0;continue}SO(t,a)||(r===void 0?r=a:n.push(a))}return{flags:t,script:r,extraArgs:n}}function wO(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}function TO(e,t,n,r){let i=r.length>0?` ${r.map(cO).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 EO(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 DO(e,t,n){let r=new Set(n.getRegisteredCommands?.()??[]);return{isRegistered:e=>r.has(e),hasLocalBin:async n=>{for(let r of vO(t.dir))if(await e.exists(x(r,n)))return!0;return!1}}}async function OO(e,t,n,r,i,a){let o=i.exec;if(!o)return wO(e,`run requires shell exec support, which this context does not provide`);let s=DO(a.fs,t,i),c=bO(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 _O(a.body,s),{cwd:t.dir,env:yO(t,a.event,a.body,i),stdin:pi(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 kO(e,t,n,r){let i;try{i=await pO(r.fs,n.cwd)}catch(t){return wO(e,t instanceof Error?t.message:String(t))}if(!i)return wO(e,`no package.json found in ${n.cwd} or any parent directory — nothing to run`);let{flags:a,script:o,extraArgs:s}=CO(t);if(o===void 0)return{stdout:xO(e,i),stderr:``,exitCode:0};let c=i.scripts[o]??await EO(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 wO(e,`missing script: ${o}${t.length>0?` (available: ${t.join(`, `)})`:` (${x(i.dir,`package.json`)} defines no scripts)`}`)}return OO(e,i,TO(i,o,c,s),a,n,r)}const AO=()=>import(`./installer-3ARo1i86.js`),jO=new Set([`install`,`i`,`add`]),MO=new Set([`uninstall`,`remove`,`rm`,`un`]),NO=new Set([`list`,`ls`]),PO=new Set([`-g`,`--global`,`--location=global`]),FO=[`-g`,`--global`,`-D`,`--save-dev`];function IO(e){return`${e} - install packages from the npm registry into node_modules
|
|
1407
1427
|
and run package.json scripts; also install conda/emscripten-forge
|
|
1408
1428
|
packages via '${e} mamba'
|
|
1409
1429
|
|
|
@@ -1479,15 +1499,15 @@ manifest without rewriting it. With -g, packages go to /shared/lib/node_modules
|
|
|
1479
1499
|
and deps are recorded in /shared/lib/package.json. Existing fields are
|
|
1480
1500
|
preserved. Idempotent: re-installing an already-satisfied package is a clean
|
|
1481
1501
|
no-op.
|
|
1482
|
-
`}function
|
|
1502
|
+
`}function LO(e){let t=C(e,{bool:FO,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 RO(e){let t=!1,n=[];for(let r of e){if(PO.has(r)){t=!0;continue}r.startsWith(`-`)||n.push(r)}return{global:t,specs:n}}function zO(e){return w(e)}function BO(e){return e instanceof Error?e.message:String(e)}async function VO(e){e.scriptCatalog?.invalidateJsh(),await e.syncScriptCommands?.()}function HO(e,t){let n=e===`i`;return S(e,async(r,i)=>{if(n)return zO(r)?{stdout:IO(e),stderr:``,exitCode:0}:WO(e,r,i,t);if(r[0]===`mamba`){let{runIpkMamba:n}=await import(`./ipk-mamba-BEORgiAj.js`);return n(e,r.slice(1),i,t)}if(zO(r))return{stdout:IO(e),stderr:``,exitCode:0};if(r.length===0)return{stdout:IO(e),stderr:`${e}: missing subcommand\n`,exitCode:1};let a=r[0],o=r.slice(1);return jO.has(a)?WO(e,o,i,t):MO.has(a)?KO(e,o,i,t):NO.has(a)?qO(e,o,i,t):a===`root`?JO(e,o,i,t):$D.has(a)?kO(e,o,i,{fs:t.fs}):eO.has(a)?kO(e,r,i,{fs:t.fs}):{stdout:``,stderr:`${e}: unknown subcommand '${a}' (supported: install, uninstall, list, root, run, mamba)\n`,exitCode:1}})}async function UO(e,t,n){let{installFromManifest:r,ManifestNotFoundError:i}=await AO(),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: ${BO(t)}\n`,exitCode:1}}if(a.empty&&a.errors.length===0)return{stdout:`${e}: nothing to install (package.json declares no dependencies)\n`,stderr:``,exitCode:0};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),s=[...(a.notes??[]).map(t=>`${e}: ${t}`),...a.errors.map(t=>`${e}: failed to install ${t.spec}: ${BO(t.error)}`)];return{stdout:o.length>0?`${o.join(`
|
|
1483
1503
|
`)}\n`:``,stderr:s.length>0?`${s.join(`
|
|
1484
|
-
`)}\n`:``,exitCode:a.errors.length===0?0:1}}async function
|
|
1504
|
+
`)}\n`:``,exitCode:a.errors.length===0?0:1}}async function WO(e,t,n,r){let i=LO(t);if(`error`in i)return{stdout:``,stderr:`${e}: ${i.error}\n`,exitCode:1};let{global:a,saveDev:o,specs:s}=i;if(a&&s.length===0)return{stdout:``,stderr:`${e}: global install requires at least one package name\n`,exitCode:1};if(s.length===0)return UO(e,n,r);let{installPackages:c}=await AO(),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: ${BO(t)}\n`,exitCode:1}}let u=l.results.map(t=>`${e}: installed ${t.name}@${t.version} -> ${t.installPath}`),d=[...(l.notes??[]).map(t=>`${e}: ${t}`),...l.errors.map(t=>`${e}: failed to install ${t.spec}: ${BO(t.error)}`)];return a&&l.results.length>0&&await VO(r),{stdout:u.length>0?`${u.join(`
|
|
1485
1505
|
`)}\n`:``,stderr:d.length>0?`${d.join(`
|
|
1486
|
-
`)}\n`:``,exitCode:l.errors.length===0?0:1}}function
|
|
1487
|
-
`)}\n`}async function
|
|
1506
|
+
`)}\n`:``,exitCode:l.errors.length===0?0:1}}function GO(e,t){if(t.length===0)return`${e}\n└── (empty)\n`;let n=[`${e}`];for(let e=0;e<t.length;e++){let r=e===t.length-1?`└──`:`├──`;n.push(`${r} ${t[e].name}@${t[e].version}`)}return`${n.join(`
|
|
1507
|
+
`)}\n`}async function KO(e,t,n,r){let{global:i,specs:a}=RO(t);if(a.length===0)return{stdout:``,stderr:`${e}: uninstall requires at least one package name\n`,exitCode:1};let{uninstallPackages:o}=await AO(),s;try{s=await o(a,{fs:r.fs,fetch:r.fetch,cwd:n.cwd,global:i})}catch(t){return{stdout:``,stderr:`${e}: uninstall failed: ${BO(t)}\n`,exitCode:1}}let c=s.results.filter(e=>e.removed).map(t=>`${e}: removed ${t.name}`),l=s.results.filter(e=>!e.removed).map(e=>e.name),u=s.errors.map(t=>`${e}: failed to uninstall ${t.spec}: ${BO(t.error)}`);l.length>0&&u.push(`${e}: ${l.join(`, `)} not installed${i?` globally`:``}`);let d=s.errors.length>0;return i&&await VO(r),{stdout:c.length>0?`${c.join(`
|
|
1488
1508
|
`)}\n`:``,stderr:u.length>0?`${u.join(`
|
|
1489
|
-
`)}\n`:``,exitCode:+!!d}}async function
|
|
1490
|
-
`)}\n`}const
|
|
1509
|
+
`)}\n`:``,exitCode:+!!d}}async function qO(e,t,n,r){let{global:i}=RO(t);try{let{listGlobalPackages:e,listLocalPackages:t}=await AO(),a=i?await e(r.fs):await t(r.fs,n.cwd);return{stdout:GO(i?$n:n.cwd,a),stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: list failed: ${BO(t)}\n`,exitCode:1}}}async function JO(e,t,n,r){let{global:i}=RO(t);return{stdout:`${i?er:`${n.cwd.replace(/\/$/,``)}/node_modules`}\n`,stderr:``,exitCode:0}}const YO=`0.5.462`,XO=`v86 is not installed in node_modules: run \`${N} v86@${YO}\` (no network fallback)`;let ZO=null;async function QO(e={}){return ZO||=nk(e.ipk).catch(e=>{throw ZO=null,e}),ZO}const $O=[{js:`build/libv86.mjs`,wasm:`build/v86.wasm`}];async function ek(e,t){for(let{js:n,wasm:r}of $O){let i=`${e}/${n}`,a=`${e}/${r}`;if(await t.exists(i)&&await t.exists(a))return{jsPath:i,wasmPath:a}}return null}async function tk(e){let t;try{t=await sr(`v86/package.json`,e.fromDir,e.reader)}catch{return null}if(t.type!==`file`)return null;let n=await ek(Ne(t.path).dir,e.reader);if(!n)return null;try{let r=await e.reader.readFile(t.path),i=String(JSON.parse(r).version??`0.5.462`);return{jsSource:await e.reader.readFile(n.jsPath),wasmBytes:await e.readBytes(n.wasmPath),version:i}}catch{return null}}async function nk(e){if(yr())throw Error(`v86 is not available in Node runtime`);if(!e)throw Error(XO);let t=await tk(e);if(!t)throw Error(XO);let n=URL.createObjectURL(new Blob([t.jsSource],{type:`text/javascript`})),r;try{r=await import(n)}finally{URL.revokeObjectURL(n)}let i=r.V86??r.default;if(typeof i!=`function`)throw Error(`v86: installed package did not export a V86 constructor`);return{V86:i,wasmModule:await ci(t.wasmBytes),version:t.version}}function rk(e){return async t=>(await WebAssembly.instantiate(e,t)).exports}const ik={command:`biome`,example:`biome check foo.js`,bootstrap:`${N} ${nv}`},ak={command:`playwright-cli`,example:`playwright-cli open https://example.com`},ok={command:`puppeteer`,example:`puppeteer open https://example.com`},sk={command:`convert`,example:`convert input.png output.jpg`,bootstrap:`${N} @imagemagick/magick-wasm@${Ki}`},ck={...sk,command:`magick`,example:`magick input.png output.jpg`},lk={command:`pdftoppm`,example:`pdftoppm -png -r 150 doc.pdf page`},uk={"@biomejs/biome":ik,biome:ik,esbuild:{command:`esbuild`,example:`esbuild --bundle src/index.js --outfile=dist/bundle.js`,bootstrap:`${N} esbuild-wasm@${si}`},playwright:ak,"@playwright/test":ak,"playwright-core":ak,puppeteer:ok,"puppeteer-core":ok,typescript:{command:`tsc`,example:`tsc --noEmit`,bootstrap:br},"pdf-poppler":lk,"pdf-to-img":lk,pdf2pic:lk,"pdf-img-convert":lk,poppler:lk,"poppler-utils":lk,imagemagick:sk,"imagemagick-cli":sk,"imagemagick-convert":sk,"magick-cli":ck,"@imagemagick/magick-wasm":ck,ffmpeg:{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${ta}`},"@ffmpeg/ffmpeg":{command:`ffmpeg`,example:`ffmpeg -i input.mp4 output.webm`,bootstrap:`${N} @ffmpeg/core@${ta}`},ffprobe:{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${ta}`},"@ffprobe-installer/ffprobe":{command:`ffprobe`,example:`ffprobe -v error -show_format -of json input.mp4`,bootstrap:`${N} @ffmpeg/core@${ta}`},sqlite3:{command:`sqlite3`,example:`sqlite3 database.db "SELECT 1"`},v86:{command:`v86`,example:`v86 start -cdrom alpine.iso`,bootstrap:`${N} v86@${YO}`}};function dk(e){return Object.hasOwn(uk,e)?uk[e]:void 0}function fk(e){return/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:`'${e.replace(/'/g,`'\\''`)}'`}function pk(e,t,n,r){let i=n.length?[r.command,...n].map(fk).join(` `):r.example,a=[`${e}: SLICC has a built-in \`${r.command}\` for npm package \`${t}\`.`,` try: ${i}`];return r.bootstrap&&a.push(` first run: ${r.bootstrap}`),a.push(` install anyway: ${[e,`--force`,t,...n].map(fk).join(` `)}`),`${a.join(`
|
|
1510
|
+
`)}\n`}const mk=/require\(\s*["']([^"']+)["']\s*\)/;function hk(e){return`${e} - run an installed package's executable bin
|
|
1491
1511
|
|
|
1492
1512
|
Usage:
|
|
1493
1513
|
${e} [--force] [--global] <pkg-or-bin> [args...]
|
|
@@ -1500,12 +1520,12 @@ Options:
|
|
|
1500
1520
|
--force Install a package even when a SLICC built-in shadows it
|
|
1501
1521
|
--global Resolve only from the shared global prefix (/shared/lib/node_modules)
|
|
1502
1522
|
-h, --help Show this help message
|
|
1503
|
-
`}async function
|
|
1504
|
-
`)}\n`:``}}catch(n){return{error:
|
|
1505
|
-
`,exitCode:1};let r=
|
|
1506
|
-
`)}\n`:``,exitCode:+!i}})}function
|
|
1507
|
-
`,exitCode:2};let i=
|
|
1508
|
-
`,exitCode:2}:
|
|
1523
|
+
`}async function gk(e,t){let n=await e.readFile(t);return typeof n==`string`?n:new TextDecoder().decode(n)}async function _k(e,t){try{return(await e.stat(t)).type===`file`}catch{return!1}}async function vk(e,t){try{return(await e.stat(t)).type===`directory`}catch{return!1}}function*yk(e,t=!1){if(t){yield er;return}let n=b(e);for(;yield x(n,`node_modules`),n!==`/`;)n=Ne(n).dir;yield er}async function bk(e,t,n,r=!1){for(let i of yk(t,r)){let t=x(i,`.bin`,n);if(!await _k(e,t))continue;let r=await gk(e,t),a=mk.exec(r),o=Ne(t).dir;return{binFilePath:a?x(o,a[1]):t,argvName:t}}return null}function xk(e){if(e.startsWith(`@`)){let t=e.indexOf(`/`);if(t!==-1)return e.slice(t+1)}return e}function Sk(e,t){if(typeof e==`string`)return{binName:xk(t),binPath:e};if(typeof e!=`object`||!e)return null;let n=[t,xk(t)];for(let t of n){let n=Object.getOwnPropertyDescriptor(e,t)?.value;if(typeof n==`string`)return{binName:t,binPath:n}}let r=Object.entries(e).filter(e=>typeof e[1]==`string`);if(r.length===1){let[e,t]=r[0];return{binName:e,binPath:t}}return null}async function Ck(e,t,n,r=!1){for(let i of yk(t,r)){let t=x(i,n),r=x(t,`package.json`);if(!await _k(e,r))continue;let a;try{a=JSON.parse(await gk(e,r))}catch{return null}let o=Sk(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 wk(e,t,n,r=!1){return await bk(e,t,n,r)??await Ck(e,t,n,r)}async function Tk(e,t,n){for(let r of yk(t))if(await _k(e,x(r,n,`package.json`)))return!0;return!1}function Ek(e){return e instanceof Error?e.message:String(e)}function Dk(e,t){return{stdout:``,stderr:`${e}: ${t}\n`,exitCode:1}}async function Ok(e,t,n,r){try{let{installPackages:i}=await import(`./installer-3ARo1i86.js`),a=await i([t],{fs:r.fs,fetch:r.fetch,cwd:n.cwd});if(a.errors.length>0)return{error:Dk(e,`failed to install '${t}': ${Ek(a.errors[0].error)}`)};let o=a.results.map(t=>`${e}: installed ${t.name}@${t.version}`);return{progress:o.length>0?`${o.join(`
|
|
1524
|
+
`)}\n`:``}}catch(n){return{error:Dk(e,`failed to install '${t}': ${Ek(n)}`)}}}async function kk(e,t,n,r){return await _k(r,n)?null:await vk(r,n)?Dk(e,`bin target '${n}' is a directory, not a file`):Dk(e,`bin file '${n}' for '${t}' does not exist`)}async function Ak(e,t,n,r,i,a){if(await Tk(a.fs,i.cwd,t))return{error:Dk(e,`package '${t}' does not expose an executable bin`)};let o=r?void 0:dk(t);if(o)return{error:{stdout:``,stderr:pk(e,t,n,o),exitCode:1}};let s=await Ok(e,t,i,a);if(`error`in s)return s;let c=await wk(a.fs,i.cwd,t);return c?{resolved:c,installProgress:s.progress}:{error:Dk(e,`package '${t}' was installed but does not expose an executable bin`)}}function jk(e,t){return{name:e,trusted:!0,async execute(n,r){if(n.length===0||n[0]===`--help`||n[0]===`-h`)return{stdout:hk(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:hk(e),stderr:``,exitCode:1};let c=s[0],l=s.slice(1),u;try{u=await wk(t.fs,r.cwd,c,o)}catch(t){return Dk(e,Ek(t))}let d=``;if(!u){if(o)return Dk(e,`no global bin '${c}' found in ${er}`);let n=await Ak(e,c,l,i,r,t);if(`error`in n)return n.error;u=n.resolved,d=n.installProgress}let f=await kk(e,c,u.binFilePath,t.fs);if(f)return f;let p=ri(await gk(t.fs,u.binFilePath)),m=[`node`,u.argvName,...l],h=await ti(p,m,r,void 0,{filename:u.binFilePath});return{stdout:h.stdout,stderr:d+h.stderr,exitCode:h.exitCode}}}}function Mk(e={}){return S(`jshd`,async(t,n)=>{let{runJshd:r}=await import(`./run-5o2ADtPK.js`);return r(t,n,e)})}const Nk=new Set([`SIGINT`,`SIGTERM`,`SIGKILL`,`SIGSTOP`,`SIGCONT`]);function Pk(e={}){return S(`kill`,async t=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return Bk();let n=e.processManager??Fk();if(!n)return{stdout:``,stderr:`kill: no process manager available in this runtime
|
|
1525
|
+
`,exitCode:1};let r=Ik(t);if(!r.ok)return{stdout:``,stderr:r.stderr,exitCode:r.exitCode};let{allDelivered:i,errors:a}=Lk(n,r.pids,r.signal);return{stdout:``,stderr:a.length?`${a.join(`
|
|
1526
|
+
`)}\n`:``,exitCode:+!i}})}function Fk(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Ik(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
|
|
1527
|
+
`,exitCode:2};let i=Rk(n);if(i instanceof Error)return{ok:!1,stderr:`kill: ${i.message}\n`,exitCode:2};t=i;continue}if(i.startsWith(`-`)){let e=zk(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
|
|
1528
|
+
`,exitCode:2}:Nk.has(t)?{ok:!0,signal:t,pids:n}:{ok:!1,stderr:`kill: signal ${t} not supported\n`,exitCode:2}}function Lk(e,t,n){let r=!0,i=[];for(let a of t)e.signal(a,n)||(r=!1,i.push(e.get(a)?`kill: (${a}) - process already terminated`:`kill: (${a}) - no such process`));return{allDelivered:r,errors:i}}function Rk(e){let t=e.toUpperCase(),n=t.startsWith(`SIG`)?t:`SIG${t}`;return n===`SIGINT`||n===`SIGTERM`||n===`SIGKILL`||n===`SIGSTOP`||n===`SIGCONT`?n:Error(`unknown signal '${e}'`)}function zk(e){return e===`-9`?`SIGKILL`:Rk(e.slice(1))}function Bk(){return{stdout:`Usage: kill [-s SIGNAL | -INT | -TERM | -KILL | -STOP | -CONT | -9] PID [PID …]
|
|
1509
1529
|
|
|
1510
1530
|
Send a signal to one or more processes tracked by the kernel.
|
|
1511
1531
|
|
|
@@ -1527,7 +1547,7 @@ Examples:
|
|
|
1527
1547
|
kill -INT 1024 1025 SIGINT both
|
|
1528
1548
|
kill -STOP 1024 pause; \`kill -CONT 1024\` resumes
|
|
1529
1549
|
kill -s SIGKILL 1024 explicit signal name
|
|
1530
|
-
`,stderr:``,exitCode:0}}const
|
|
1550
|
+
`,stderr:``,exitCode:0}}const Vk=[`top`,`left`,`middle`,`right`,`bottom`],Hk=`usage: layout <verb> [args]
|
|
1531
1551
|
|
|
1532
1552
|
list List the built-in presets
|
|
1533
1553
|
set <preset> Switch to a built-in preset
|
|
@@ -1547,9 +1567,9 @@ Examples:
|
|
|
1547
1567
|
docs Describe the layout surfaces
|
|
1548
1568
|
panels List the registered panel ids
|
|
1549
1569
|
|
|
1550
|
-
Zones: ${
|
|
1551
|
-
`,
|
|
1552
|
-
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const
|
|
1570
|
+
Zones: ${Vk.join(`, `)}
|
|
1571
|
+
`,Uk=new Set([`files`,`term`,`memory`,`monitor`]),Wk=`sprinkle:`;function Gk(e){return e===`chat`||Uk.has(e)||e.startsWith(Wk)?e:`${Wk}${e}`}function Kk(e){let t=/^(\d+(?:\.\d+)?)%$/.exec(e);if(t)return{percent:Number.parseFloat(t[1])};let n=/^(\d+(?:\.\d+)?)(?:px)?$/.exec(e);return n?{px:Number.parseFloat(n[1])}:null}const qk=`usage: layout size <surfaceId> [--width <px|percent>] [--height <px|percent>]`;function Jk(e){let t=e[0],n=t?bs(t):null;return n?{kind:`set`,tree:n.tree}:{error:`unknown layout: ${t??`(none)`}`}}function Yk(e){let t=e[0];return Vk.includes(t)?{kind:`chat`,zone:t}:{error:`usage: layout chat <${Vk.join(`|`)}>`}}function Xk(e){let[t,n]=e;return!t||!Vk.includes(n)?{error:`usage: layout open <surfaceId> <${Vk.join(`|`)}>`}:{kind:`open`,surfaceId:Gk(t),zone:n}}function Zk(e){let t=e[0];return t?{kind:`close`,surfaceId:Gk(t)}:{error:`usage: layout close <surfaceId>`}}function Qk(e){let[t,n]=e;return!t||!Vk.includes(n)?{error:`usage: layout move <surfaceId> <${Vk.join(`|`)}>`}:{kind:`move`,surfaceId:Gk(t),zone:n}}function $k(e,t,n){if(t!==`--width`&&t!==`--height`)return{error:`layout size: unknown flag "${t}"`};if(!n)return{error:`layout size: missing value for ${t}`};let r=Kk(n);return r?(t===`--width`?r.percent==null?e.widthPx=r.px:e.widthPercent=r.percent:r.percent==null?e.heightPx=r.px:e.heightPercent=r.percent,null):{error:`layout size: invalid size "${n}" (want <number>px or <number>%)`}}function eA(e){let t=e[0];if(!t)return{error:qk};let n={};for(let t=1;t<e.length;t+=2){let r=$k(n,e[t],e[t+1]);if(r)return r}return n.widthPx==null&&n.widthPercent==null&&n.heightPx==null&&n.heightPercent==null?{error:qk}:{kind:`size`,surfaceId:Gk(t),size:n}}function tA(e){let t=e[0];if(!t||t.startsWith(`--`))return{error:`usage: layout save <name> [--protected]`};if(!/^[\w.-]+$/.test(t))return{error:`invalid layout name "${t}" (use letters, digits, . _ -)`};let n=e.slice(1),r=n.find(e=>e!==`--protected`);return r?{error:`layout save: unknown flag "${r}"`}:{kind:`save`,name:t,protected:n.includes(`--protected`)}}function nA(e,t){let n=t[0];return n?e===`load`?{kind:`load`,name:n}:{kind:`delete`,name:n}:{error:`usage: layout ${e} <name>`}}function rA(e,t){let n=t[0];return n?e===`show`?{kind:`show`,panelId:Gk(n)}:{kind:`hide`,panelId:Gk(n)}:{error:`usage: layout ${e} <panelId>`}}function iA(){let e=bs(gs);return e?{kind:`set`,tree:e.tree}:{error:`default layout unavailable`}}function aA(e){let[t,...n]=e;switch(t){case`set`:return Jk(n);case`chat`:return Yk(n);case`open`:return Xk(n);case`close`:return Zk(n);case`move`:return Qk(n);case`size`:return eA(n);case`reset`:return{kind:`reset`};case`edit`:return iA();case`load`:return nA(`load`,n);case`save`:return tA(n);case`delete`:return nA(`delete`,n);case`docs`:return{kind:`docs`};case`panels`:return{kind:`panels`};case`show`:return rA(`show`,n);case`hide`:return rA(`hide`,n);default:return{error:`usage: layout <set|edit|chat|open|close|move|size|show|hide|load|save|delete|docs|panels|list|reset>`}}}function oA(){return S(`layout`,async e=>{if(w(e))return{stdout:e[0]?.startsWith(`-`)?Hk:st(`layout`,e[0],Hk),stderr:``,exitCode:0};if(e[0]===`list`||e.length===0)return{stdout:`layouts: ${Object.keys(ys).join(`, `)}\ndefault: ${gs}\n`,stderr:``,exitCode:0};let t=aA(e);if(`error`in t)return{stdout:``,stderr:`layout: ${t.error}\n`,exitCode:1};let n=y();if(!n)return{stdout:``,stderr:`layout: UI is unavailable in this environment
|
|
1572
|
+
`,exitCode:1};try{let e=await n.call(`layout-apply`,t);if(e&&e.applied===!1)return{stdout:``,stderr:`layout: ${e.error??`could not apply layout`}\n`,exitCode:1};let r=e?.output;return{stdout:r?`${r.replace(/\n*$/,``)}\n`:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`layout: ${e.message}\n`,exitCode:1}}})}const sA=na.id;function cA(){return`local-llm — inspect and configure the Local LLM provider
|
|
1553
1573
|
|
|
1554
1574
|
Usage:
|
|
1555
1575
|
local-llm Show current config + verify connection
|
|
@@ -1568,20 +1588,20 @@ Common base URLs:
|
|
|
1568
1588
|
llama.cpp http://localhost:8080/v1
|
|
1569
1589
|
vLLM http://localhost:8000/v1
|
|
1570
1590
|
Jan http://localhost:1337/v1
|
|
1571
|
-
`}function
|
|
1591
|
+
`}function lA(e,t){return e.version?t?`${e.kind} (${e.version})`:`${e.kind} ${e.version}`:e.kind}function uA(e){return e.map(e=>` • ${e}`)}function dA(e,t){let n=[`✗ Could not reach ${e}`,` runtime: ${lA(t.runtime,!0)}`,` error: ${t.error?.message??`unknown`}`];return t.error?.hint&&n.push(` hint: ${t.error.hint}`),{stdout:``,stderr:n.join(`
|
|
1572
1592
|
`)+`
|
|
1573
|
-
`,exitCode:1}}function
|
|
1593
|
+
`,exitCode:1}}function fA(e,t){return{stdout:[`✓ ${e}`,` runtime: ${lA(t.runtime,!0)}`,` models: ${t.models.length}`,...uA(t.models)].join(`
|
|
1574
1594
|
`)+`
|
|
1575
|
-
`,stderr:``,exitCode:0}}function
|
|
1595
|
+
`,stderr:``,exitCode:0}}function pA(e,t){let n=t.models.length;return{stdout:[`✓ ${e} (${lA(t.runtime,!1)})`,` Saved ${n} model${n===1?``:`s`} to Settings:`,...uA(t.models)].join(`
|
|
1576
1596
|
`)+`
|
|
1577
|
-
`,stderr:``,exitCode:0}}function
|
|
1578
|
-
`,exitCode:1};let c=await a(s,t(
|
|
1597
|
+
`,stderr:``,exitCode:0}}function mA(){return S(sA,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return{stdout:cA(),stderr:``,exitCode:0};let{getApiKeyForProvider:t,getRawApiKeyForProvider:n,getBaseUrlForProvider:r,addAccount:i}=await import(`./account-store-p9YkaR-j.js`).then(e=>e.t),{verifyConnection:a}=await import(`./local-llm-BY58x8Yq.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(sA);if(!s)return{stdout:``,stderr:`Local LLM is not configured. Open Settings → Providers → Local LLM and set a base URL.
|
|
1598
|
+
`,exitCode:1};let c=await a(s,t(sA)??void 0);if(!c.ok)return dA(s,c);if(o===`discover`){let e=n(sA)??``;return i(sA,e,s,c.models.join(`, `)),pA(s,c)}return fA(s,c)})}function hA(){return{stdout:`usage: man <topic>
|
|
1579
1599
|
|
|
1580
1600
|
Fetches documentation for a given topic from sliccy.com.
|
|
1581
|
-
`,stderr:``,exitCode:0}}function
|
|
1601
|
+
`,stderr:``,exitCode:0}}function gA(e){return e.replace(/<[^>]*>/g,``).replace(/</g,`<`).replace(/>/g,`>`).replace(/"/g,`"`).replace(/'/g,`'`).replace(/ /g,` `).replace(/&/g,`&`).trimEnd()}function _A(){let e=g();return S(`man`,async t=>{if(t.includes(`--help`)||t.includes(`-h`))return hA();if(t.length===0)return{stdout:``,stderr:`What manual page do you want?
|
|
1582
1602
|
For example, try 'man commands'.
|
|
1583
|
-
`,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:
|
|
1584
|
-
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const
|
|
1603
|
+
`,exitCode:1};let n=t.join(`-`),r=`https://www.sliccy.com/man/${n}.plain.html`;try{let t=await e(r,{method:`GET`});return t.status===404?{stdout:``,stderr:`No manual entry for ${n}\n`,exitCode:1}:t.status<200||t.status>=300?{stdout:``,stderr:`man: failed to fetch manual page for ${n}: ${t.status} ${t.statusText}\n`,exitCode:1}:{stdout:gA(new TextDecoder(`utf-8`).decode(t.body))+`
|
|
1604
|
+
`,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`man: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}const vA=[`--silent`,`-s`,`--interactive`,`-i`],yA=e(`mcp-command`),bA=`/workspace/.mcp/aliases`;function W(e){return{stdout:e,stderr:``,exitCode:0}}function G(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function xA(e){return G(`mcp: ${e}`)}function SA(){return`usage: mcp <command> [args]
|
|
1585
1605
|
|
|
1586
1606
|
Commands:
|
|
1587
1607
|
add <url> <name> Register an MCP server. Runs OAuth if required.
|
|
@@ -1603,7 +1623,7 @@ Examples:
|
|
|
1603
1623
|
mcp search forecast
|
|
1604
1624
|
mcp auth weather
|
|
1605
1625
|
mcp delete weather
|
|
1606
|
-
`}function
|
|
1626
|
+
`}function CA(e={}){return S(`mcp`,async t=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return W(SA());let n=t[0],r=t.slice(1);try{switch(n){case`add`:return await wA(r,e);case`list`:case`ls`:return await EA(r,e);case`delete`:case`rm`:return await AA(r,e);case`invoke`:return await jA(r,e);case`search`:return await OA(r,e);case`refresh`:return await ZA(r,e);case`auth`:return await QA(r,e);default:return G(`mcp: unknown subcommand "${n}" (try \`mcp --help\`)`)}}catch(e){let t=e instanceof Error?e.message:String(e);return yA.error(`mcp subcommand failed`,{sub:n,error:t}),e instanceof ra?G(`mcp ${n}: ${t}`,124):G(`mcp ${n}: ${t}`)}})}async function wA(e,t){if(w(e))return W(`usage: mcp add <url> <name>
|
|
1607
1627
|
|
|
1608
1628
|
Probes <url> with an unauthenticated MCP \`initialize\`. If the server
|
|
1609
1629
|
returns 401, runs OAuth discovery → dynamic client registration → PKCE
|
|
@@ -1612,20 +1632,20 @@ authorization-code flow, stores the access token, and retries.
|
|
|
1612
1632
|
On success, the server is persisted to /workspace/.mcp/servers.json and
|
|
1613
1633
|
an alias shim is written to /workspace/.mcp/aliases/<name>.jsh so the
|
|
1614
1634
|
short name resolves on the PATH.
|
|
1615
|
-
`);let n=C(e,{});if(`error`in n)return
|
|
1635
|
+
`);let n=C(e,{});if(`error`in n)return xA(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-D8XRrwq1.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-C4_ggaf5.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 TA(r,i,e.resourceMetadataUrl,t),l=new s({url:r,fetchImpl:t.fetchImpl,getAuthHeader:()=>ej(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 aj(i,t);let m=await cj(i,f,t);if(u){let{registerMcpProvider:e}=await import(`./provider-DiPmyduk.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: ${bA}/${i}.jsh`,u?` auth: oauth (provider mcp:${i})`:` auth: none`].join(`
|
|
1616
1636
|
`)+`
|
|
1617
|
-
`)}async function
|
|
1618
|
-
`);let n=C(e,{});if(`error`in n)return
|
|
1637
|
+
`)}async function TA(e,t,n,r){let{discoverAuth:i,dynamicRegister:a,runAuthFlow:o}=await import(`./oauth-D20BEoY6.js`),{saveOAuthAccount:s}=await import(`./account-store-p9YkaR-j.js`).then(e=>e.t),c=await nj(r.oauthFetchImpl),l=r.oauthLauncher??await tj(),u=await i(e,n,c);yA.debug(`MCP OAuth discovery succeeded`,{name:t,serverUrl:e,discoveryPath:u.discoveryPath,issuer:u.issuer});let d=await ia(we()),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 EA(e,t){if(w(e))return W(`usage: mcp list
|
|
1638
|
+
`);let n=C(e,{});if(`error`in n)return xA(n.error);let{ensureAllMcpProvidersRegistered:r}=await import(`./provider-DiPmyduk.js`);await r();let{listServers:i}=await import(`./store-D8XRrwq1.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(DA(s))}function DA(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(`
|
|
1619
1639
|
`)+`
|
|
1620
|
-
`}async function
|
|
1640
|
+
`}async function OA(e,t){if(w(e))return W(`usage: mcp search <query>
|
|
1621
1641
|
|
|
1622
1642
|
Case-insensitive substring search across the cached tools of every
|
|
1623
1643
|
registered MCP server. Matches tool name OR description and prints a
|
|
1624
1644
|
table of (server, tool, description, match-field) rows.
|
|
1625
|
-
`);let n=C(e,{});if(`error`in n)return
|
|
1626
|
-
`);let n=C(e,{});if(`error`in n)return
|
|
1645
|
+
`);let n=C(e,{});if(`error`in n)return xA(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-DiPmyduk.js`);await a();let{listServers:o}=await import(`./store-D8XRrwq1.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,kA(e.description),e.match]);return W(DA(u))}function kA(e){if(!e)return``;let t=e.replace(/\s+/g,` `).trim();return t.length<=60?t:t.slice(0,59)+`…`}async function AA(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp delete: expected <name>`):W(`usage: mcp delete <name>
|
|
1646
|
+
`);let n=C(e,{});if(`error`in n)return xA(n.error);let r=n.positionals[0];if(!r)return G(`mcp delete: expected <name>`);let{ensureMcpProviderRegistered:i,removeMcpProvider:a}=await import(`./provider-DiPmyduk.js`);await i(r);let{deleteServer:o}=await import(`./store-D8XRrwq1.js`).then(e=>e.r),s=await o(r,t.fs);await oj(r,t),await sj(r,t);let c=`mcp:${r}`,l=!1;try{let{removeAccount:e,getAccounts:t}=await import(`./account-store-p9YkaR-j.js`).then(e=>e.t);t().some(e=>e.providerId===c)&&(await e(c),l=!0)}catch(e){yA.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(`
|
|
1627
1647
|
`)+`
|
|
1628
|
-
`)}async function
|
|
1648
|
+
`)}async function jA(e,t){if(e.length===0)return G(`mcp invoke: expected <name>`);if(w(e.slice(0,1)))return W(PA());let n=C([e[0]],{});if(`error`in n)return xA(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-DiPmyduk.js`);await a(r);let{getServer:o}=await import(`./store-D8XRrwq1.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(FA(r,s,c));let l=C([i[0]],{});if(`error`in l)return xA(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}=MA(i.slice(1));if(w(p))return W(LA(r,d));let h=RA(p,d.inputSchema);if(!h.ok)return G(`mcp invoke: ${h.error}`);let{McpClient:g}=await import(`./client-C4_ggaf5.js`).then(e=>e.n),_=new g({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>ej(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 MA(e){let t=[],n=[],r,i=0;for(;i<e.length;){let a=e[i];if(a.startsWith(`--timeout=`)){let e=NA(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=NA(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 NA(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 PA(){return`usage: mcp invoke <name> [tool] [--timeout <seconds>] [--flag value …]
|
|
1629
1649
|
|
|
1630
1650
|
mcp invoke <name> List tools on <name>.
|
|
1631
1651
|
mcp invoke <name> <tool> --help Show flags for <tool>.
|
|
@@ -1645,20 +1665,20 @@ Arguments are coerced according to the tool's JSON Schema:
|
|
|
1645
1665
|
array of objects) is parsed as JSON, e.g. \`--params '{"url":"…"}'\`.
|
|
1646
1666
|
Nested fields can be set with dotted flags (\`--params.url …\`).
|
|
1647
1667
|
Unknown \`--flags\` exit non-zero instead of being dropped.
|
|
1648
|
-
`}function
|
|
1668
|
+
`}function FA(e,t,n){let r=[];if(r.push(`MCP server "${e}" → ${t.url}`),n.length===0)r.push(" (no tools cached — run `mcp refresh "+e+"`)");else{r.push(``),r.push(`Tools:`);let t=n.reduce((e,t)=>Math.max(e,t.name.length),0);for(let e of n)r.push(` ${e.name.padEnd(t)} ${e.description??``}`.trimEnd());r.push(``),r.push(`Run \`${e} <tool> --help\` for tool-specific flags.`)}return r.join(`
|
|
1649
1669
|
`)+`
|
|
1650
|
-
`}function
|
|
1670
|
+
`}function IA(e){return e??{}}function LA(e,t){let n=IA(t.inputSchema),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=[];a.push(`usage: ${e} ${t.name} [flags]`),t.description&&(a.push(``),a.push(t.description));let o=Object.keys(r);if(o.length===0)return a.push(``),a.push(`(no flags declared)`),a.join(`
|
|
1651
1671
|
`)+`
|
|
1652
1672
|
`;a.push(``),a.push(`Flags:`);let s=o.map(e=>` --${e} <${r[e]?.type??`string`}>`),c=s.reduce((e,t)=>Math.max(e,t.length),0);for(let e=0;e<o.length;e++){let t=o[e],n=r[t]?.description??``,l=i.has(t)?` (required)`:``;a.push(`${s[e].padEnd(c)} ${n}${l}`.trimEnd())}return a.join(`
|
|
1653
1673
|
`)+`
|
|
1654
|
-
`}function
|
|
1674
|
+
`}function RA(e,t){let n=IA(t),r=n.properties??{},i=new Set(Array.isArray(n.required)?n.required:[]),a=WA(),o=0;for(;o<e.length;){let t=zA(e,o,r,a);if(!t.ok)return t;o=t.nextIndex}for(let e of i)if(!Object.hasOwn(a,e))return{ok:!1,error:`missing required flag --${e}`};return{ok:!0,value:a}}function zA(e,t,n,r){let i=e[t];if(!i.startsWith(`--`))return{ok:!1,error:`unexpected positional argument "${i}"`};let{key:a,inlineValue:o}=qA(i),s=BA(a,n);if(!s.ok)return s;let{rootKey:c,dottedPath:l,meta:u}=s,d=u.type,f=d??`string`,p=f===`array`,m=(p?u.items?.type:void 0)??`string`;if(l&&d!==void 0&&d!==`object`)return{ok:!1,error:`unknown flag: --${a}`};let h=VA(e,t,a,o,f,l);if(!h.ok)return h;if(h.bareBoolean)return r[c]=!0,{ok:!0,nextIndex:h.nextIndex};let g=l?`string`:p?m:f,_=JA(h.raw,g);if(!_.ok)return{ok:!1,error:`--${a}: ${_.error}`};let v=HA(r,c,l,_.value,p);return v.ok?{ok:!0,nextIndex:h.nextIndex}:v}function BA(e,t){if(Object.hasOwn(t,e))return{ok:!0,rootKey:e,dottedPath:null,meta:t[e]??{}};let n=e.indexOf(`.`);if(n<=0)return{ok:!1,error:`unknown flag: --${e}`};let r=e.slice(0,n),i=e.slice(n+1);if(!Object.hasOwn(t,r)||i.length===0)return{ok:!1,error:`unknown flag: --${e}`};let a=i.split(`.`);return GA(r)||a.some(e=>e.length===0||GA(e))?{ok:!1,error:`unknown flag: --${e}`}:{ok:!0,rootKey:r,dottedPath:a,meta:t[r]??{}}}function VA(e,t,n,r,i,a){if(r!==void 0)return{ok:!0,raw:r,nextIndex:t+1,bareBoolean:!1};let o=e[t+1];return!a&&i===`boolean`&&(o===void 0||o.startsWith(`--`))?{ok:!0,raw:``,nextIndex:t+1,bareBoolean:!0}:o===void 0?{ok:!1,error:`flag --${n} requires a value`}:{ok:!0,raw:o,nextIndex:t+2,bareBoolean:!1}}function HA(e,t,n,r,i){if(n)return UA(e,t,n,r);if(i){let n=e[t];return Array.isArray(n)?n.push(r):e[t]=[r],{ok:!0}}let a=e[t];return KA(a)&&KA(r)?(Object.assign(a,r),{ok:!0}):(e[t]=r,{ok:!0})}function UA(e,t,n,r){if(GA(t)||n.some(e=>e.length===0||GA(e)))return{ok:!1,error:`unknown flag: --${t}.${n.join(`.`)}`};let i=Object.hasOwn(e,t)?e[t]:void 0;if(i===void 0)e[t]=WA();else if(!KA(i))return{ok:!1,error:`--${t}: cannot nest into a ${typeof i} value`};let a=e[t];for(let e=0;e<n.length-1;e++){let r=n[e],i=Object.hasOwn(a,r)?a[r]:void 0;if(i===void 0)a[r]=WA();else if(!KA(i))return{ok:!1,error:`--${t}.${n.slice(0,e+1).join(`.`)}: cannot nest into a ${typeof i} value`};a=a[r]}return a[n[n.length-1]]=r,{ok:!0}}function WA(){return Object.create(null)}function GA(e){return e===`__proto__`||e===`prototype`||e===`constructor`}function KA(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&e!==Object.prototype}function qA(e){let t=e.indexOf(`=`);return t>2?{key:e.slice(2,t),inlineValue:e.slice(t+1)}:{key:e.slice(2),inlineValue:void 0}}function JA(e,t){switch(t){case`integer`:return/^-?\d+$/.test(e)?{ok:!0,value:Number(e)}:{ok:!1,error:`expected integer, got "${e}"`};case`number`:{let t=Number(e);return Number.isFinite(t)?{ok:!0,value:t}:{ok:!1,error:`expected number, got "${e}"`}}case`boolean`:return e===`true`||e===`1`||e===`yes`?{ok:!0,value:!0}:e===`false`||e===`0`||e===`no`?{ok:!0,value:!1}:{ok:!1,error:`expected boolean, got "${e}"`};case`object`:return YA(e);default:return{ok:!0,value:e}}}function YA(e){let t;try{t=JSON.parse(e)}catch{return{ok:!1,error:`expected object JSON, got "${e}"`}}return KA(t)?{ok:!0,value:t}:{ok:!1,error:`expected object JSON, got "${e}"`}}function XA(e){let t=e??{},n=Array.isArray(t.content)?t.content:[],r=[];for(let e of n)if(!(!e||typeof e!=`object`))switch(e.type){case`text`:typeof e.text==`string`&&r.push(e.text);break;case`image`:r.push(`[image: ${e.mimeType??`unknown mime`}]`);break;case`resource`:{let t=e.resource?.uri??e.uri??`unknown uri`;r.push(`[resource: ${t}]`);break}default:r.push(`[${e.type??`unknown`}]`)}let i=r.join(`
|
|
1655
1675
|
`),a=i.endsWith(`
|
|
1656
1676
|
`)?``:`
|
|
1657
|
-
`;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function
|
|
1677
|
+
`;return t.isError?{stdout:``,stderr:(i||`(tool reported error)`)+a,exitCode:1}:{stdout:i+(i?a:``),stderr:``,exitCode:0}}async function ZA(e,t){if(e.length===0||w(e))return e.length===0?G(`mcp refresh: expected <name>`):W(`usage: mcp refresh <name>
|
|
1658
1678
|
|
|
1659
1679
|
Re-fetches the tool catalog and \`apps/list\` for <name>. Does NOT refresh
|
|
1660
1680
|
OAuth tokens — for OAuth token refresh use \`mcp auth <name>\`.
|
|
1661
|
-
`);let n=C(e,{});if(`error`in n)return
|
|
1681
|
+
`);let n=C(e,{});if(`error`in n)return xA(n.error);let r=n.positionals[0];if(!r)return G(`mcp refresh: expected <name>`);let{ensureMcpProviderRegistered:i}=await import(`./provider-DiPmyduk.js`);await i(r);let{getServer:a,setServer:o}=await import(`./store-D8XRrwq1.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-C4_ggaf5.js`).then(e=>e.n),u=new c({url:s.url,fetchImpl:t.fetchImpl,headers:s.headers,getAuthHeader:s.auth?()=>ej(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 cj(r,f,t);return W(`Refreshed "${r}" — tools: ${d.length}, apps: ${f.length} (${p} sprinkle${p===1?``:`s`})\n`)}async function QA(e,t){if(w(e))return W(`usage: mcp auth <name> [--silent | --interactive]
|
|
1662
1682
|
|
|
1663
1683
|
Re-authenticate an existing MCP server. By default, attempts a silent
|
|
1664
1684
|
token renewal using the persisted refresh_token; if that returns no
|
|
@@ -1670,7 +1690,7 @@ Options:
|
|
|
1670
1690
|
-i, --interactive Skip silent renewal and open the OAuth popup
|
|
1671
1691
|
directly. Use after revoking a refresh token or
|
|
1672
1692
|
when the AS no longer accepts the cached one.
|
|
1673
|
-
`);let n=C(e,{bool:
|
|
1693
|
+
`);let n=C(e,{bool:vA});if(`error`in n)return xA(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-DiPmyduk.js`),s=await o(r,{fetchImpl:t.oauthFetchImpl,launcher:t.oauthLauncher}),{getServer:c}=await import(`./store-D8XRrwq1.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-DvzQAoZe.js`).then(e=>e.r),f=d(u);if(!f)return G(`mcp auth: provider "${u}" is not registered`);if(a)return await $A(r,f,t);if(!f.onSilentRenew)return i?G(`mcp auth: provider "${u}" does not support silent renewal; retry without --silent`):await $A(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`);yA.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 $A(r,f,t)}async function $A(e,t,n){if(!t.onOAuthLogin)return G(`mcp auth: provider "${t.id}" does not support interactive OAuth login`);let r=n.oauthLauncher??await tj(),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 ej(e){let t=`mcp:${e}`,{getOAuthAccountInfo:n}=await import(`./account-store-p9YkaR-j.js`).then(e=>e.t),r=n(t);if(!r)return null;if(r.expired){try{let{getRegisteredProviderConfig:e}=await import(`./providers-DvzQAoZe.js`).then(e=>e.r),n=await e(t)?.onSilentRenew?.();if(n)return`Bearer ${n}`}catch(e){yA.debug(`silent renewal threw`,{providerId:t,error:e instanceof Error?e.message:String(e)})}return null}return`Bearer ${r.token}`}async function tj(){let{createOAuthLauncher:e}=await import(`./oauth-service-Bx_Dy3GC.js`);return e()}async function nj(e){if(e)return e;let{createProxiedFetch:t}=await import(`./proxied-fetch-CoZ8jHud.js`).then(e=>e.o),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 rj(e){if(e)return e;let{VirtualFS:t}=await import(`./fs-Bhw5j0eY.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 ij(e){return`// MCP alias for "${e}" — forwards args to \`mcp invoke ${e}\`.
|
|
1674
1694
|
// Auto-generated by \`mcp add ${e}\`; do not edit by hand.
|
|
1675
1695
|
const { promisify } = require('util');
|
|
1676
1696
|
const { exec } = require('child_process');
|
|
@@ -1699,8 +1719,8 @@ try {
|
|
|
1699
1719
|
if (stdout) process.stdout.write(stdout);
|
|
1700
1720
|
if (stderr) process.stderr.write(stderr);
|
|
1701
1721
|
process.exit(exitCode);
|
|
1702
|
-
`}async function
|
|
1703
|
-
`)}\n`}function
|
|
1722
|
+
`}async function aj(e,t){let n=await rj(t.fs);await n.mkdir(bA,{recursive:!0}),await n.writeFile(`${bA}/${e}.jsh`,ij(e)),t.scriptCatalog?.invalidateJsh()}async function oj(e,t){let n=await rj(t.fs),r=`${bA}/${e}.jsh`;try{await n.exists(r)&&await n.rm(r)}catch(e){yA.debug(`alias removal failed`,{path:r,error:e instanceof Error?e.message:String(e)})}t.scriptCatalog?.invalidateJsh()}async function sj(e,t){let{removeAppSprinkles:n}=await import(`./apps-F56LSkNx.js`);await n(e,t.fs)}async function cj(e,t,n){try{let{materializeAppSprinkles:r}=await import(`./apps-F56LSkNx.js`);return(await r(e,t,n.fs)).length}catch(t){return yA.warn(`mcp: failed to materialize app sprinkles`,{name:e,error:t instanceof Error?t.message:String(t)}),0}}function lj(e){return{stdout:``,stderr:`meminfo: ${e}\n`,exitCode:1}}function uj(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 dj(){let e=globalThis.performance,t=e?.measureUserAgentSpecificMemory;return t?t.bind(e):null}function fj(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 pj(e){let t=[`total: ${eb(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(`${eb(e.bytes).padEnd(10)} ${e.types.join(`,`).padEnd(20)} ${uj(e)}`)}return`${t.join(`
|
|
1723
|
+
`)}\n`}function mj(e={}){return S(`meminfo`,async t=>{let n=fj(t);if(`error`in n)return lj(n.error);if(n.help)return{stdout:`meminfo - agent-cluster memory diagnostics
|
|
1704
1724
|
|
|
1705
1725
|
Usage:
|
|
1706
1726
|
meminfo Human-readable breakdown (bytes, scope, types, url)
|
|
@@ -1711,8 +1731,8 @@ Notes:
|
|
|
1711
1731
|
Document-Isolation-Policy). Embedded floats cannot be isolated and
|
|
1712
1732
|
report why instead.
|
|
1713
1733
|
- The browser randomizes measurement timing — expect a short delay.
|
|
1714
|
-
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??
|
|
1715
|
-
`)?e:`${e}\n`,exitCode:1}}async function
|
|
1734
|
+
`,stderr:``,exitCode:0};let r=e.isIsolated?e.isIsolated():globalThis.crossOriginIsolated===!0,i=e.measure??dj();if(!r&&!e.measure)return lj(`memory measurement requires a cross-origin-isolated runtime (Document-Isolation-Policy) — this runtime is not isolated`);if(!i)return lj(`performance.measureUserAgentSpecificMemory is not available in this browser`);let a;try{a=await i()}catch(e){return lj(e instanceof Error?e.message:String(e))}return n.json?{stdout:`${JSON.stringify(a,null,2)}\n`,stderr:``,exitCode:0}:{stdout:pj(a),stderr:``,exitCode:0}})}function hj(e){return S(`memory`,async t=>{let{runMemory:n}=await import(`./run-B1b6--PA.js`);return n(t,e)})}function gj(){return S(`mktemp`,async(e,t)=>{let{runMktemp:n}=await import(`./run-dAJe7sKp.js`);return n(e,t)})}const _j=`/.cache/artificial-analysis.json`,vj=[`--all`,`--all-versions`,`--json`,`--refresh`,`--no-benchmarks`,`--help`,`-h`],yj=[`--provider`];function bj(e){return{stdout:``,stderr:e.endsWith(`
|
|
1735
|
+
`)?e:`${e}\n`,exitCode:1}}async function xj(e){try{let t=await e.readFile(_j),n=JSON.parse(t);if(Date.now()-n.fetchedAt<864e5)return n.models}catch{}return null}function Sj(){try{return localStorage.getItem(`aa_api_key`)}catch{return null}}function Cj(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 wj(e,t){let n={fetchedAt:Date.now(),models:t};try{await e.mkdir(`/.cache`,{recursive:!0}),await e.writeFile(_j,JSON.stringify(n))}catch{}}async function Tj(e,t=!1){if(e&&!t){let t=await xj(e);if(t)return t}let n={Accept:`application/json`},r=Sj();r&&(n[`x-api-key`]=r);let i=g(),a;try{a=await i(`https://artificialanalysis.ai/api/v2/data/llms/models`,{method:`GET`,headers:n})}catch{return[]}if(a.status===401||a.status<200||a.status>=300)return[];let o;try{o=JSON.parse(new TextDecoder().decode(a.body))}catch{return[]}if(typeof o!=`object`||!o)return[];let s=o,c=Cj(Array.isArray(s)?s:s.data??s.models??[]);return e&&c.length>0&&await wj(e,c),c}function Ej(e){return e.toLowerCase().replace(/\./g,`-`).replace(/-\d{8}$/,``).replace(/-\d{4}$/,``)}function Dj(e,t){let n=e.toLowerCase(),r=t.find(e=>e.slug===n);if(r)return r;let i=Ej(e),a=t.find(e=>Ej(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 Oj(){return`models - list available LLM models
|
|
1716
1736
|
|
|
1717
1737
|
Usage: models [options]
|
|
1718
1738
|
|
|
@@ -1724,14 +1744,14 @@ Options:
|
|
|
1724
1744
|
--refresh Force re-fetch benchmark data from Artificial Analysis
|
|
1725
1745
|
--no-benchmarks Skip benchmark data enrichment (faster, works offline)
|
|
1726
1746
|
-h, --help Show this help message
|
|
1727
|
-
`}function
|
|
1747
|
+
`}function kj(e){return e>=1e6?`${(e/1e6).toFixed(1)}M`.replace(`.0M`,`M`):e>=1e3?`${(e/1e3).toFixed(0)}K`:`${e}`}function Aj(e){return`$${e.toFixed(2)}`}const jj=/\b(embedding|embed|tts|whisper|dall-e|image-gen|audio|vision-preview)\b/i;function Mj(e){let t=`${e.id} ${e.name??``}`;return!jj.test(t)}function Nj(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 Pj(e){let t=e.toLowerCase();return t=t.replace(/-\d{8}$/,``),t=t.replace(/-\d{4}$/,``),t=t.replace(/-(preview|latest)$/,``),Nj(t)??t.replace(/-[\d.]+$/,``)}function Fj(e){let t=new Map;for(let n of e){let e=Pj(n.id);(!t.has(e)||n.selected)&&t.set(e,n)}return[...t.values()]}function Ij(e,t,n,r,i){let a=i?Dj(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 Lj(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=`${Aj(e.cost.input)} / ${Aj(e.cost.output)}`,a=`${kj(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(`
|
|
1728
1748
|
`)+`
|
|
1729
|
-
`}function
|
|
1730
|
-
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await
|
|
1749
|
+
`}function Rj(e){let t=C(e,{bool:vj,value:yj});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 zj(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 Bj(e,t,n,r,i,a){let o=e.getProviderModels(t).filter(Mj);if(o.length===0)return[];let s=o.map(e=>Ij(e,t,n,r,i)).sort((e,t)=>t.cost.input-e.cost.input);return a||(s=Fj(s)),s}function Vj(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 Hj(e,t){if(w(e,{valueFlags:yj}))return{stdout:Oj(),stderr:``,exitCode:0};let n=Rj(e);if(`error`in n)return bj(`models: ${n.error}`);let r=await import(`./account-store-p9YkaR-j.js`).then(e=>e.t);if(r.getAccounts().length===0)return bj(`No provider accounts configured. Run the provider settings to add one.
|
|
1750
|
+
`);let i=r.resolveCurrentModel(),a=i.id,o=i.provider,s=r.getSelectedProvider(),c=r.getSelectedModelId(),l;if(!n.noBenchmarks){let e=await Tj(t,n.forceRefresh);e.length>0&&(l=e)}let u=zj(r,n,s);if(`error`in u)return bj(u.error);let d=[],f=[];for(let e of u){let t=Bj(r,e,a,o,l,n.allVersions);if(t.length===0){if(!n.allMode)return bj(`No models available for provider ${e}.\n`);continue}if(d.push(...t),!n.jsonMode){let n=r.getProviderConfig(e);f.push(Lj(n.name,e,t,!!l))}}return n.jsonMode?{stdout:JSON.stringify(d,null,2)+`
|
|
1731
1751
|
`,stderr:``,exitCode:0}:(n.allVersions||f.push(`Showing latest versions only. Use --all-versions to see all.
|
|
1732
|
-
`),f.push(
|
|
1733
|
-
`),stderr:``,exitCode:0})}function
|
|
1734
|
-
`,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:
|
|
1752
|
+
`),f.push(Vj(o,a,s,c)),{stdout:f.join(`
|
|
1753
|
+
`),stderr:``,exitCode:0})}function Uj(e){return S(`models`,async t=>Hj(t,e))}const Wj=new Set([`-`,`/dev/stdin`,`/dev/fd/0`,`/proc/self/fd/0`]);function Gj(e){return e===`-e`||e===`--eval`||Wj.has(e)||!e.startsWith(`-`)}function Kj(e){return{stdout:``,stderr:`node: ${e} is not a valid value for --input-type. Valid values are: 'commonjs' or 'module'.\n`,exitCode:9}}function qj(e,t,n){let r=e.startsWith(`--input-type=`),i=r?e.slice(13):t,a=r?n+1:n+2;return i===void 0?{nextIndex:n+1,error:{stdout:``,stderr:`node: option --input-type requires an argument
|
|
1754
|
+
`,exitCode:9}}:i!==`module`&&i!==`commonjs`?{nextIndex:a,error:Kj(i)}:{inputType:i,nextIndex:a}}function Jj(e){let t=!1,n=!1,r=!1,i,a=0;for(;a<e.length;){let o=e[a];if(Gj(o))break;if(o===`-h`||o===`--help`){t=!0,a+=1;continue}if(o===`-v`||o===`--version`){n=!0,a+=1;continue}if(o===`-c`||o===`--check`){r=!0,a+=1;continue}if(o===`--input-type`||o.startsWith(`--input-type=`)){let s=qj(o,e[a+1],a);if(s.error)return{help:t,version:n,check:r,inputType:i,sourceIndex:s.nextIndex,error:s.error};i=s.inputType,a=s.nextIndex;continue}return{help:t,version:n,check:r,inputType:i,sourceIndex:a,error:{stdout:``,stderr:`node: unsupported option '${o}'\n`,exitCode:9}}}return{help:t,version:n,check:r,inputType:i,sourceIndex:a}}function Yj(){return{stdout:`usage: node [options] [script.js] [args...]
|
|
1735
1755
|
node [options] -e <code> [args...]
|
|
1736
1756
|
|
|
1737
1757
|
Options:
|
|
@@ -1740,20 +1760,20 @@ Options:
|
|
|
1740
1760
|
--input-type=TYPE module or commonjs (stdin / -e / .js)
|
|
1741
1761
|
-h, --help print this help
|
|
1742
1762
|
-v, --version print Node shim version
|
|
1743
|
-
`,stderr:``,exitCode:0}}function
|
|
1763
|
+
`,stderr:``,exitCode:0}}function Xj(){return{stdout:`${_r}\n`,stderr:``,exitCode:0}}function Zj(e,t){if(t){if(e.endsWith(`.mjs`)&&t===`commonjs`)return{stdout:``,stderr:`node: cannot set --input-type=commonjs for a .mjs file
|
|
1744
1764
|
`,exitCode:9};if(e.endsWith(`.cjs`)&&t===`module`)return{stdout:``,stderr:`node: cannot set --input-type=module for a .cjs file
|
|
1745
|
-
`,exitCode:9}}}function
|
|
1746
|
-
`,exitCode:9}};if(e.length>0&&
|
|
1747
|
-
`,exitCode:9}}}function
|
|
1748
|
-
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=
|
|
1765
|
+
`,exitCode:9}}}function Qj(e,t){if(!e.startsWith(`/`))return t;let n=e.lastIndexOf(`/`);return n<=0?`/`:e.slice(0,n)}function $j(e){return e instanceof Error?e.stack??e.message:String(e)}async function eM(e,t,n){if(!(lr(e)||wr(e)||t.endsWith(`.mjs`)))return e;try{return(await(await oi()).transform(e,{loader:`js`,format:`cjs`,sourcefile:`${t.replace(/\.[^./]+$/,``)}.js`,supported:{"dynamic-import":!1}})).code}catch(r){if(!/top-level await/i.test($j(r)))throw r;return ai()({source:e,filename:t,fromDir:Qj(t,n)})}}async function tM(e,t,n){let r=e;try{r=await eM(e,t,n)}catch(e){return{stdout:``,stderr:`${$j(e)}\n`,exitCode:1}}try{let e=Object.getPrototypeOf(async function(){}).constructor;return new e(r),{stdout:``,stderr:``,exitCode:0}}catch(e){return{stdout:``,stderr:`${$j(e)}\n`,exitCode:1}}}async function nM(e,t){if(e.length>0&&(e[0]===`-e`||e[0]===`--eval`))return e[1]?{kind:`ok`,code:e[1],filename:`[eval]`,argv:[`node`,...e.slice(2)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: option requires an argument -- eval
|
|
1766
|
+
`,exitCode:9}};if(e.length>0&&Wj.has(e[0]))return{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`,e[0],...e.slice(1)],innerCtx:{...t,stdin:``}};if(e.length>0&&!e[0].startsWith(`-`)){let n=e[0],r=t.fs.resolvePath(t.cwd,n);return await t.fs.exists(r)?{kind:`ok`,code:await t.fs.readFile(r),filename:r,argv:[`node`,r,...e.slice(1)],innerCtx:t}:{kind:`result`,result:{stdout:``,stderr:`node: cannot find module '${n}'\n`,exitCode:1}}}return P(t.stdin).trim().length>0?{kind:`ok`,code:P(t.stdin),filename:`<stdin>`,argv:[`node`],innerCtx:{...t,stdin:``}}:e.length>0?{kind:`result`,result:{stdout:``,stderr:`node: unsupported option '${e[0]}'\n`,exitCode:9}}:{kind:`result`,result:{stdout:``,stderr:`node: REPL mode is not supported in this environment; use node -e "code"
|
|
1767
|
+
`,exitCode:9}}}function rM(e={},t=`node`){return{name:t,trusted:!0,async execute(t,n){let r=Jj(t);if(r.error)return r.error;if(r.help)return Yj();if(r.version)return Xj();let i=await nM(t.slice(r.sourceIndex),n);if(i.kind===`result`)return r.check&&i.result.exitCode===9&&t.slice(r.sourceIndex).length===0?{stdout:``,stderr:`node: -c/--check requires a filename or -e CODE
|
|
1768
|
+
`,exitCode:9}:i.result;let{code:a,filename:o,argv:s,innerCtx:c}=i,l=Zj(o,r.inputType);if(l)return l;let u=ri(a);return r.check?tM(u,o,n.cwd):ti(u,s,c,e.buildProcessConfig?.(n.env),{filename:o})}}}const iM=[`slicc:welcome-flow-fired`,`slicc.trayJoinUrl`,`slicc.trayWorkerBaseUrl`];async function aM(){try{let e=await navigator.serviceWorker?.getRegistrations?.();e&&await Promise.all(e.map(e=>e.unregister().catch(()=>!1)))}catch{}try{let e=await indexedDB.databases();await Promise.all(e.filter(e=>!!e.name).map(e=>new Promise(t=>{let n=indexedDB.deleteDatabase(e.name);n.onsuccess=()=>t(),n.onerror=()=>t(),n.onblocked=()=>t()})))}catch{}try{let e=navigator.storage;if(typeof e?.getDirectory==`function`){let t=await e.getDirectory(),n=[];for await(let e of t.keys())n.push(e);await Promise.all(n.map(e=>t.removeEntry(e,{recursive:!0}).catch(()=>{})))}}catch{}}const oM=[],sM=[`--yes`];function cM(){return S(`nuke`,async e=>{if(w(e,{valueFlags:oM}))return{stdout:`Usage: nuke <launch-code>
|
|
1749
1769
|
|
|
1750
1770
|
Completely reset the environment by deleting all local data and reloading.
|
|
1751
1771
|
Destroys the file system, chat history, and scoops database.
|
|
1752
1772
|
Requires the secret launch code to proceed.
|
|
1753
|
-
`,stderr:``,exitCode:0};let t=C(e,{value:
|
|
1773
|
+
`,stderr:``,exitCode:0};let t=C(e,{value:oM,bool:sM});return`error`in t?{stdout:``,stderr:`nuke: ${t.error}\n`,exitCode:1}:t.positionals.join(``).includes(`1234`)?((async()=>{await aM(),lM(iM)})(),{stdout:`Nuking everything…
|
|
1754
1774
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`⚠️ WARNING: this will reset the entire environment, file system, chats, and scoops.
|
|
1755
1775
|
Run nuke again with the secret launch code to proceed.
|
|
1756
|
-
`,exitCode:1}})}function
|
|
1776
|
+
`,exitCode:1}})}function lM(e=[]){let t=[...e];try{if(typeof BroadcastChannel==`function`){let e=new BroadcastChannel(`slicc-nuke-control`);e.postMessage({type:`nuke-reload`,keysToRemove:t}),setTimeout(()=>e.close(),100)}}catch{}for(let e of t)try{globalThis.localStorage?.removeItem(e)}catch{}try{globalThis.location?.reload?.()}catch{}}function uM(){return`oauth-domain — manage extra allowed domains for OAuth-issued tokens
|
|
1757
1777
|
|
|
1758
1778
|
Usage:
|
|
1759
1779
|
oauth-domain list List extra domains for every provider
|
|
@@ -1778,13 +1798,13 @@ Examples:
|
|
|
1778
1798
|
oauth-domain add adobe '*.da.live'
|
|
1779
1799
|
oauth-domain list adobe
|
|
1780
1800
|
oauth-domain remove adobe admin.da.live
|
|
1781
|
-
`}function
|
|
1801
|
+
`}function dM(e){return{stdout:``,stderr:`oauth-domain: ${e}\n`,exitCode:1}}function fM(e,t){if(t){let n=e.getExtraOAuthDomains(t);return n.length===0?{stdout:`(no extra domains configured for ${t})\n`,stderr:``,exitCode:0}:{stdout:`${n.join(`
|
|
1782
1802
|
`)}\n`,stderr:``,exitCode:0}}let n=Object.entries(e.getAllExtraOAuthDomains()).filter(([,e])=>e.length>0);return n.length===0?{stdout:`(no extra OAuth domains configured)
|
|
1783
1803
|
`,stderr:``,exitCode:0}:{stdout:`${n.map(([e,t])=>`${e}: ${t.join(`, `)}`).join(`
|
|
1784
|
-
`)}\n`,stderr:``,exitCode:0}}async function
|
|
1785
|
-
`,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
|
|
1786
|
-
`,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
|
|
1787
|
-
`,exitCode:1}}async function
|
|
1804
|
+
`)}\n`,stderr:``,exitCode:0}}async function pM(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain add: requires <providerId> and <domain>
|
|
1805
|
+
`,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 mM(e,t,n){if(!t||!n)return{stdout:``,stderr:`oauth-domain remove: requires <providerId> and <domain>
|
|
1806
|
+
`,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 hM(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>
|
|
1807
|
+
`,exitCode:1}}async function gM(e,t,n,r){switch(t){case`list`:return fM(e,n);case`add`:return pM(e,n,r);case`remove`:return mM(e,n,r);case`clear`:return hM(e,n);default:return{stdout:``,stderr:`oauth-domain: unknown subcommand "${t}"\n${uM()}`,exitCode:1}}}function _M(){return S(`oauth-domain`,async e=>{if(e.length===0||w(e))return{stdout:uM(),stderr:``,exitCode:0};let t=C(e);if(`error`in t)return dM(t.error);let[n,r,i]=t.positionals,a=await import(`./account-store-p9YkaR-j.js`).then(e=>e.t);try{return await gM(a,n,r,i)}catch(e){return dM(e instanceof Error?e.message:String(e))}})}function vM(){return S(`oauth-token`,async(e,t)=>{let{runOAuthToken:n}=await import(`./run-V-yf2BVO.js`);return n(e,t)})}const yM=[`--download`,`-d`,`--view`,`-v`],bM=[`--size`],xM={low:256,medium:768,high:1536};function SM(){return{stdout:`usage: open [--download|-d] [--view|-v [--size <spec>]] <url|path> [url|path...]
|
|
1788
1808
|
|
|
1789
1809
|
VFS paths are served in a new browser tab via the preview service worker.
|
|
1790
1810
|
URLs (http/https/etc.) are opened directly in a new tab.
|
|
@@ -1798,19 +1818,19 @@ Examples:
|
|
|
1798
1818
|
medium (768x768), high (1536x1536), or a custom WxH
|
|
1799
1819
|
box like 512x512. The image is fit inside the box
|
|
1800
1820
|
with aspect ratio preserved and is never upscaled.
|
|
1801
|
-
`,stderr:``,exitCode:0}}function
|
|
1821
|
+
`,stderr:``,exitCode:0}}function CM(e){if(e in xM){let t=xM[e];return{maxW:t,maxH:t}}let t=/^(\d+)x(\d+)$/.exec(e);if(t){let e=parseInt(t[1],10),n=parseInt(t[2],10);if(e>0&&n>0)return{maxW:e,maxH:n}}return null}function wM(e,t){if(t===`image/png`||t===`image/apng`){if(e.length<26)return!1;let t=e[25];return t===4||t===6}if(t===`image/webp`){if(e.length<16)return!1;let t=String.fromCharCode(e[12],e[13],e[14],e[15]);return t===`VP8L`?!0:t===`VP8X`?e.length<21?!1:!!(e[20]&16):!1}return!1}function TM(){return`open --view requires --size to bound the inlined image. Use one of:
|
|
1802
1822
|
--size low (256x256)
|
|
1803
1823
|
--size medium (768x768)
|
|
1804
1824
|
--size high (1536x1536)
|
|
1805
1825
|
--size WxH (custom box, e.g. 512x512)
|
|
1806
|
-
`}const
|
|
1807
|
-
`)}async function
|
|
1808
|
-
`);let r;try{r=await n(e)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return
|
|
1809
|
-
`);let i;try{i=await n.fs.stat(t)}catch{return K(`open: no such file: ${e}\n`)}if(!i.isFile)return K(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return K(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:cr(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=mr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),
|
|
1810
|
-
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await ur(t.fs,i?e:vr(e)),o=Br(e,a),s;try{s=await r(o)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return
|
|
1811
|
-
`);if(fr(e))return
|
|
1826
|
+
`}const EM=new Set([`image/png`,`image/webp`]);function DM(e){let t=new ArrayBuffer(e.byteLength),n=new Uint8Array(t);return n.set(e),n}async function OM(e,t){let n=DM(e),r=new Blob([n],{type:t}),i=await createImageBitmap(r);try{return{width:i.width,height:i.height}}finally{i.close?.()}}async function kM(e,t,n,r){let i=DM(e),a=new Blob([i],{type:t}),o=await createImageBitmap(a);try{let i=o.width,a=o.height,s=Math.min(n/i,r/a,1),c=Math.max(1,Math.round(i*s)),l=Math.max(1,Math.round(a*s)),u=new OffscreenCanvas(c,l),d=u.getContext(`2d`);if(!d)throw Error(`failed to acquire 2d context for resize`);d.drawImage(o,0,0,c,l);let f=wM(e,t)?EM.has(t)?t:`image/png`:`image/jpeg`,p=await u.convertToBlob(f===`image/jpeg`?{type:`image/jpeg`,quality:.85}:{type:f});return{bytes:new Uint8Array(await p.arrayBuffer()),mime:f,width:c,height:l,nativeWidth:i,nativeHeight:a}}finally{o.close?.()}}function AM(e){let t=C(e,{bool:yM,value:bM});if(`error`in t)return{error:`open: ${t.error}`};let n=t.values.get(`--size`);return n?.startsWith(`-`)&&n!==`-`?{error:`open: unknown flag: ${n}`}:{download:t.bools.has(`--download`)||t.bools.has(`-d`),view:t.bools.has(`--view`)||t.bools.has(`-v`),sizeSpec:n,targets:t.positionals}}function jM(e){return{ok:!0,message:e}}function K(e){return{ok:!1,result:{stdout:``,stderr:e,exitCode:1}}}function MM(e){return e?` (targetId: ${e})`:``}function NM(e,t,n){return async r=>{if(e)return e.createPage(r);if(t){window.open(r,`_blank`,`noopener,noreferrer`);return}try{await n.call(`window-open`,{url:r,target:`_blank`,features:`noopener,noreferrer`})}catch(e){throw Error(`open: ${e instanceof Error?e.message:String(e)}`)}}}async function PM(e,t,n,r,i){let a=t.fs.resolvePath(t.cwd,e);if(n){let e=(a.split(`/`).pop()??``).replace(/\.shtml$/,``);try{return await n.open(e),jM(`opened sprinkle ${e} from ${a}`)}catch(e){return K(`open: ${e instanceof Error?e.message:String(e)}\n`)}}if(r){let e=await ur(t.fs,vr(a)),n=Br(a,e),r;try{r=await i(n)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return jM(`opened ${a} → ${n}${MM(r)}`)}return K(`open: sprinkle manager not initialized
|
|
1827
|
+
`)}async function FM(e,t,n){if(!t)return K(`open: browser APIs are unavailable in this environment
|
|
1828
|
+
`);let r;try{r=await n(e)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return jM(`opened ${e}${MM(r)}`)}async function IM(e,n,r,i){let a;try{a=await r.fs.stat(n)}catch{return K(`open: no such file: ${e}\n`)}if(!a.isFile)return K(`open: not a file: ${e}\n`);let o;try{o=await r.fs.readFileBuffer(n)}catch{return K(`open: failed to read: ${e}\n`)}let s=cr(n),c=new Uint8Array(o),l=null;if(i!==void 0&&(l=CM(i),!l))return K(`open: invalid --size spec '${i}' (expected low|medium|high or WxH such as 512x512)\n`);if(!l){let t;try{t=await OM(c,s)}catch(t){return K(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let r=Math.round(c.byteLength/1024);return K(`open --view: ${n} is ${t.width}x${t.height} (${r} KB, ${s})\n`+TM())}let u;try{u=await kM(c,s,l.maxW,l.maxH)}catch(t){return K(`open: not an image or failed to decode: ${e} (${t instanceof Error?t.message:String(t)})\n`)}let d=t(u.bytes),f=Math.round(u.bytes.byteLength/1024);return jM(`${n} (${u.nativeWidth}x${u.nativeHeight} → ${u.width}x${u.height}, ${f} KB, ${u.mime})\n<img:data:${u.mime};base64,${d}>`)}async function LM(e,t,n,r){if(!r)return K(`open: --download requires the in-panel terminal (DOM-only)
|
|
1829
|
+
`);let i;try{i=await n.fs.stat(t)}catch{return K(`open: no such file: ${e}\n`)}if(!i.isFile)return K(`open: not a file: ${e}\n`);let a;try{a=await n.fs.readFileBuffer(t)}catch{return K(`open: failed to read: ${e}\n`)}let o=new Uint8Array(a.byteLength);o.set(a);let s=new Blob([o.buffer],{type:cr(t)}),c=URL.createObjectURL(s),l=document.createElement(`a`);return l.href=c,l.download=mr(t)||`download`,l.style.display=`none`,document.body.appendChild(l),l.click(),document.body.removeChild(l),setTimeout(()=>URL.revokeObjectURL(c),0),jM(`downloaded ${t}`)}async function RM(e,t,n,r){if(!n)return K(`open: browser APIs are unavailable in this environment
|
|
1830
|
+
`);let i=!1;try{i=(await t.fs.stat(e)).isDirectory}catch{}let a=await ur(t.fs,i?e:vr(e)),o=Br(e,a),s;try{s=await r(o)}catch(e){return K(`${e instanceof Error?e.message:String(e)}\n`)}return jM(`opened ${e} → ${o}${MM(s)}`)}async function zM(e,t,n,r){if(!fr(e)&&e.endsWith(`.shtml`)&&t.fs)return PM(e,t,r.sprinkleManager,r.canOpenWindow,r.openExternal);if(!n.view&&!r.canOpenWindow)return K(`open: browser APIs are unavailable in this environment
|
|
1831
|
+
`);if(fr(e))return FM(e,r.canOpenWindow,r.openExternal);let i=t.fs.resolvePath(t.cwd,e);return n.view?IM(e,i,t,n.sizeSpec):n.download?LM(e,i,t,r.hasDom):RM(i,t,r.canOpenWindow,r.openExternal)}function BM(e){return S(`open`,async(t,n)=>{if(t.length===0||w(t,{valueFlags:bM}))return SM();let r=AM(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 SM();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:NM(e,l,u)},f=[];for(let e of s){let t=await zM(e,n,{view:a,download:i,sizeSpec:o},d);if(!t.ok)return t.result;f.push(t.message)}return{stdout:f.join(`
|
|
1812
1832
|
`)+`
|
|
1813
|
-
`,stderr:``,exitCode:0}})}function
|
|
1833
|
+
`,stderr:``,exitCode:0}})}function VM(){return S(`patch`,async(e,t)=>{let{runPatch:n}=await import(`./run-dJaEQuBZ.js`);return n(e,t)})}function HM(e=`pdftk`){return S(e,async(t,n)=>{let{runPdftk:r}=await import(`./run-BEs473Sp.js`);return r(e,t,n)})}function UM(){return{stdout:`usage: pdftoppm [options] <input.pdf> [output-prefix]
|
|
1814
1834
|
|
|
1815
1835
|
Rasterize PDF pages to images. Writes <prefix>-<n>.<ext> per page, where <n>
|
|
1816
1836
|
is zero-padded to the digit width of the last page (out-1.png for a 9-page
|
|
@@ -1837,8 +1857,8 @@ Examples:
|
|
|
1837
1857
|
pdftoppm -png -r 150 doc.pdf page
|
|
1838
1858
|
pdftoppm -jpeg -jpegopt quality=80 -f 1 -l 3 doc.pdf out
|
|
1839
1859
|
pdftoppm -png -singlefile -scale-to 1024 doc.pdf cover
|
|
1840
|
-
`,stderr:``,exitCode:0}}function
|
|
1841
|
-
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function
|
|
1860
|
+
`,stderr:``,exitCode:0}}function WM(e,t){if(e===void 0)throw Error(`missing argument for ${t}`);let n=Number(e);if(!Number.isFinite(n)||!Number.isInteger(n)||n<=0)throw Error(`invalid ${t} value: ${e}`);return n}function GM(e){if(e===void 0)throw Error(`missing argument for -jpegopt`);for(let t of e.split(`,`)){let[e,n]=t.split(`=`);if(e?.trim()!==`quality`)continue;let r=Number(n);if(!Number.isFinite(r)||r<0||r>100)throw Error(`invalid -jpegopt quality: ${n}`);return r}throw Error(`unsupported -jpegopt: ${e}`)}function KM(e){let t=`png`,n=150,r,i,a,o,s,c,l=!1,u=[];for(let d=0;d<e.length;d++){let f=e[d];switch(f){case`-png`:t=`png`;break;case`-jpeg`:t=`jpeg`;break;case`-jpegopt`:c=GM(e[++d]),t=`jpeg`;break;case`-r`:n=WM(e[++d],`-r`);break;case`-f`:r=WM(e[++d],`-f`);break;case`-l`:i=WM(e[++d],`-l`);break;case`-scale-to`:a=WM(e[++d],`-scale-to`);break;case`-scale-to-x`:o=WM(e[++d],`-scale-to-x`);break;case`-scale-to-y`:s=WM(e[++d],`-scale-to-y`);break;case`-singlefile`:l=!0;break;default:if(f.startsWith(`-`))throw Error(`unsupported option ${f}`);u.push(f)}}if(u.length===0)throw Error(`expected an input PDF`);if(u.length>2)throw Error(`expected at most one input PDF and one output prefix`);if(r!==void 0&&i!==void 0&&r>i)throw Error(`invalid page range: ${r}-${i}`);return{inputPath:u[0],outputRoot:u[1],format:t,dpi:n,firstPage:r,lastPage:i,scaleTo:a,scaleToX:o,scaleToY:s,quality:c,singleFile:l}}function qM(e){let t=e.lastIndexOf(`.`);return t>0?e.slice(0,t):e}function JM(e,t,n,r){let i=String(n).length;return`${e}-${String(t).padStart(i,`0`)}.${r}`}function YM(e){return e===`jpeg`?`jpg`:`png`}function XM(e){return e.scaleToX===void 0?e.scaleToY===void 0?e.scaleTo===void 0?{scale:Xi(e.dpi)}:{longEdge:e.scaleTo}:{height:e.scaleToY}:{width:e.scaleToX}}async function ZM(e,t){let n=e.fs.resolvePath(e.cwd,t),r=await e.fs.readFileBuffer(n);if(!Ji(r))throw Error(`${t}: not a PDF file`);return r}function QM(e=`pdftoppm`){return S(e,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return UM();let r;try{r=KM(t)}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}try{let t=await ZM(n,r.inputPath),i=YM(r.format),a=r.outputRoot??qM(mr(r.inputPath)),o=[];return await qi(t,{firstPage:r.firstPage,lastPage:r.singleFile?r.firstPage??1:r.lastPage,format:r.format,quality:r.quality,...XM(r)},async(e,t)=>{let s=r.singleFile?`${a}.${i}`:JM(a,e.pageNumber,t.lastPage,i);await n.fs.writeFile(n.fs.resolvePath(n.cwd,s),e.bytes),o.push(s)}),o.length===0?{stdout:``,stderr:`${e}: no pages to render\n`,exitCode:1}:{stdout:`${o.join(`
|
|
1861
|
+
`)}\n`,stderr:``,exitCode:0}}catch(t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}})}function $M(e=`pdftotext`){return S(e,async(t,n)=>{let{runPdftotext:r}=await import(`./run-BVzzZSqz.js`);return r(e,t,n)})}function eN(e){let t=e.filter(e=>e.teleportEligible===!0&&e.bootstrapId&&e.floatType);if(t.length===0)return null;let n=t.filter(e=>e.floatType===`standalone`),r=n.length>0?n:t;r.sort((e,t)=>(t.lastActivity??0)-(e.lastActivity??0));let i=r[0];return{runtimeId:i.runtimeId,bootstrapId:i.bootstrapId,floatType:i.floatType}}function tN(){oT(()=>()=>ne()),aT(()=>()=>eN(ne()))}const nN=`/workspace/.plugins/sources`;function rN(e){return{stdout:e,stderr:``,exitCode:0}}function q(e,t=1){return{stdout:``,stderr:`${e}\n`,exitCode:t}}function iN(e,t){let n=C(t,{});return`error`in n?q(`plugin ${e}: ${n.error}`):{ok:!0,positionals:n.positionals}}function aN(){return`usage: plugin <command> [args]
|
|
1842
1862
|
|
|
1843
1863
|
Load Agent Plugins packages (agent-plugins.org spec v1.0.0): portable
|
|
1844
1864
|
directories bundling Agent Skills (skills/*/SKILL.md) and MCP servers
|
|
@@ -1848,7 +1868,7 @@ Commands:
|
|
|
1848
1868
|
install <path|repo> Validate the plugin and register it. <repo> is a
|
|
1849
1869
|
GitHub reference (owner/repo, owner/repo@branch, or
|
|
1850
1870
|
https://github.com/owner/repo[/tree/branch[/dir]]),
|
|
1851
|
-
downloaded into ${
|
|
1871
|
+
downloaded into ${nN}/.
|
|
1852
1872
|
Skills surface through the standard skills discovery;
|
|
1853
1873
|
streamable-http MCP servers are added to the MCP
|
|
1854
1874
|
store as "<plugin>:<server>".
|
|
@@ -1870,36 +1890,36 @@ Examples:
|
|
|
1870
1890
|
plugin list
|
|
1871
1891
|
plugin info my-plugin
|
|
1872
1892
|
plugin remove my-plugin
|
|
1873
|
-
`}function
|
|
1893
|
+
`}function oN(e={}){return S(`plugin`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`)return rN(aN());let r=t[0],i=t.slice(1),a=n?.cwd??`/`;try{switch(r){case`install`:case`add`:return await pN(i,a,e);case`list`:case`ls`:return await _N(i,e);case`info`:return await vN(i,e);case`validate`:return await yN(i,a,e,Qi(n?.env));case`remove`:case`rm`:case`delete`:return await bN(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 sN(e){if(e.fs)return e.fs;let{VirtualFS:t}=await import(`./fs-Bhw5j0eY.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 cN(e,t,n){let r=xN(t,e);if(await n.exists(r))return{kind:`local`,root:r};let{parseGitHubRef:i}=await import(`./github-install-BiHV37oT.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 lN(e){let t=e.replace(/[^A-Za-z0-9._-]+/g,`-`);return/^\.+$/.test(t)?t.replace(/\./g,`_`):t}function uN(e){let t=[e.owner,e.repo,...e.path?[e.path]:[]];return`${nN}/${t.map(lN).join(`--`)}`}async function dN(e,t,n,r){let{fetchRepoZip:i,stripZipPrefix:a,writeZipFilesToDir:o}=await import(`./github-zip-CHlzswro.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 fN(e,t){try{await e.rm(t,{recursive:!0})}catch{}}async function pN(e,t,n){if(w(e))return rN(`usage: plugin install <path|repo>
|
|
1874
1894
|
|
|
1875
1895
|
Loads the Agent Plugins package at <path>, or downloads it from a GitHub
|
|
1876
1896
|
reference (owner/repo, owner/repo@branch, or
|
|
1877
1897
|
https://github.com/owner/repo[/tree/branch[/dir]]) into
|
|
1878
|
-
${
|
|
1898
|
+
${nN}/ first. Validates plugin.json (closed
|
|
1879
1899
|
schema, name constraints), discovers skills/*/SKILL.md, and validates
|
|
1880
1900
|
mcp.json. On success the plugin is recorded in
|
|
1881
1901
|
/workspace/.plugins/plugins.json — its skills then surface through the
|
|
1882
1902
|
standard skills discovery, and each supported streamable-http MCP server
|
|
1883
1903
|
is registered in the MCP store as "<plugin>:<server>".
|
|
1884
|
-
`);let r=
|
|
1904
|
+
`);let r=iN(`install`,e);if(!(`ok`in r))return r;if(r.positionals.length<1)return q(`plugin install: expected <path|repo>`);let i=await sN(n),a=await cN(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=uN(a.ref),s=a.ref.display;let e=await dN(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 fN(i,o),q(`plugin install: plugin at ${s??o} was rejected:\n${SN(l.diagnostics)}`);let{plugin:u}=l,d=u.manifest.name,{getInstalledPlugin:f,setInstalledPlugin:p}=await import(`./store-CBtTB-Y7.js`),m=await f(d,n.fs);if(m&&m.root!==o)return a.kind===`github`&&await fN(i,o),q(`plugin install: a plugin named "${d}" is already installed from ${m.root} (remove it first)`);let h=await gN(u,n),g=await hN(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),rN(mN(u,h,g,s??o,l.diagnostics))}function mN(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:`,SN(i)),c.join(`
|
|
1885
1905
|
`)+`
|
|
1886
|
-
`}async function
|
|
1887
|
-
`);let n=
|
|
1906
|
+
`}async function hN(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-D8XRrwq1.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 gN(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-D8XRrwq1.js`).then(e=>e.r),{McpClient:a}=await import(`./client-C4_ggaf5.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 _N(e,t){if(w(e))return rN(`usage: plugin list
|
|
1907
|
+
`);let n=iN(`list`,e);if(!(`ok`in n))return n;let{listInstalledPlugins:r}=await import(`./store-CBtTB-Y7.js`),i=await r(t.fs),a=Object.keys(i).sort();if(a.length===0)return rN("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 rN(o.map(e=>e.map((e,t)=>e.padEnd(s[t])).join(` `)).join(`
|
|
1888
1908
|
`)+`
|
|
1889
|
-
`)}async function
|
|
1890
|
-
`);let n=
|
|
1909
|
+
`)}async function vN(e,t){if(w(e))return rN(`usage: plugin info <name>
|
|
1910
|
+
`);let n=iN(`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-CBtTB-Y7.js`),a=await i(r,t.fs);if(!a)return q(`plugin info: no installed plugin named "${r}"`);let o=await sN(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${SN(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:`,SN(c.diagnostics)),rN(d.join(`
|
|
1891
1911
|
`)+`
|
|
1892
|
-
`)}async function
|
|
1893
|
-
`);let i=
|
|
1912
|
+
`)}async function yN(e,t,n,r){if(w(e))return rN(`usage: plugin validate <path|repo>
|
|
1913
|
+
`);let i=iN(`validate`,e);if(!(`ok`in i))return i;if(i.positionals.length<1)return q(`plugin validate: expected <path|repo>`);let a=await sN(n),o=await cN(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/${uN(o.ref).split(`/`).pop()}`;let e=await dN(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 fN(a,c)}if(!u.ok)return{stdout:``,stderr:`plugin validate: REJECTED\n${SN(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:`,SN(u.diagnostics)),rN(p.join(`
|
|
1894
1914
|
`)+`
|
|
1895
|
-
`)}async function
|
|
1896
|
-
`);let n=
|
|
1915
|
+
`)}async function bN(e,t){if(w(e))return rN(`usage: plugin remove <name>
|
|
1916
|
+
`);let n=iN(`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-CBtTB-Y7.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-D8XRrwq1.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(`${nN}/`);return c&&await fN(await sN(t),o.root),rN([`Removed agent plugin "${r}"`,` registry: removed`,` mcp servers: ${s} removed`,c?` files: removed (${o.root})`:` files: left in place (${o.root})`].join(`
|
|
1897
1917
|
`)+`
|
|
1898
|
-
`)}function
|
|
1899
|
-
`)}const
|
|
1900
|
-
`,exitCode:1};let r=C(t,{bool:
|
|
1918
|
+
`)}function xN(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 SN(e){return e.map(e=>` ${e.level===`error`?`error`:`warn `} [${e.component}] ${e.message}`).join(`
|
|
1919
|
+
`)}const CN=[`pid`,`ppid`,`kind`,`stat`,`start`,`scoop`,`command`],wN=[`pid`,`ppid`,`stat`,`start`,`scoop`,`command`],TN={running:`R`,pending:`S`,exited:`Z`,killed:`K`},EN=[`-a`,`-A`,`-e`,`--all`,`-T`,`--tree`],DN=[`-o`,`--columns`];function ON(e={}){return S(`ps`,async t=>{if(w(t,{valueFlags:DN}))return HN();let n=e.processManager??kN();if(!n)return{stdout:``,stderr:`ps: no process manager available in this runtime
|
|
1920
|
+
`,exitCode:1};let r=C(t,{bool:EN,value:DN});if(`error`in r)return{stdout:``,stderr:`ps: ${r.error}\n`,exitCode:r.error.startsWith(`unknown flag:`)?1:2};if(r.positionals.length>0)return{stdout:``,stderr:`ps: unrecognized argument '${r.positionals[0]}'\n`,exitCode:2};let i=wN,a=r.bools.has(`-T`)||r.bools.has(`--tree`),o=r.bools.has(`-a`)||r.bools.has(`-A`)||r.bools.has(`-e`)||r.bools.has(`--all`),s=r.values.get(`-o`)??r.values.get(`--columns`);if(s!==void 0){let e=AN(s);if(e instanceof Error)return{stdout:``,stderr:`ps: ${e.message}\n`,exitCode:2};i=e}let c=n.list().sort((e,t)=>e.pid-t.pid),l=o?c:c.filter(e=>e.status===`running`||e.status===`pending`),u=a?VN(l):l.map(e=>({proc:e,depth:0})),d=jN(i,u.map(({proc:e})=>e),s!==void 0),f=u.map(({proc:e,depth:t})=>PN(e,i,t,a,d));return{stdout:[MN(i,d),...f].join(`
|
|
1901
1921
|
`)+`
|
|
1902
|
-
`,stderr:``,exitCode:0}})}function
|
|
1922
|
+
`,stderr:``,exitCode:0}})}function kN(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function AN(e){let t=e.split(`,`).map(e=>e.trim().toLowerCase()).filter(Boolean);if(t.length===0)return Error(`-o requires at least one column`);let n=[];for(let e of t){if(!CN.includes(e))return Error(`unknown column '${e}'; supported: ${CN.join(`, `)}`);n.push(e)}return n}function jN(e,t,n){if(!(n&&e.includes(`scoop`)))return{full:!1,width:10};let r=5;for(let e of t)r=Math.max(r,LN(e).length);return{full:!0,width:r}}function MN(e,t){return e.map(e=>NN(e,t)).join(` `)}function NN(e,t){switch(e){case`pid`:return`PID`.padStart(5);case`ppid`:return`PPID`.padStart(5);case`kind`:return`KIND`.padEnd(10);case`stat`:return`STAT`;case`start`:return`START`;case`scoop`:return`SCOOP`.padEnd(t.width);case`command`:return`COMMAND`}}function PN(e,t,n,r,i){return t.map(t=>FN(e,t,n,r,i)).join(` `)}function FN(e,t,n,r,i){switch(t){case`pid`:return String(e.pid).padStart(5);case`ppid`:return String(e.ppid).padStart(5);case`kind`:return e.kind.padEnd(10);case`stat`:return TN[e.status];case`start`:return IN(e.startedAt);case`scoop`:return RN(e,i);case`command`:return zN(e,n,r)}}function IN(e){let t=new Date(e);return`${String(t.getHours()).padStart(2,`0`)}:${String(t.getMinutes()).padStart(2,`0`)}:${String(t.getSeconds()).padStart(2,`0`)}`}function LN(e){return e.owner.kind===`cone`?`cone`:e.owner.kind===`system`?`system`:e.owner.kind===`jshd`?`jshd`:e.owner.scoopJid??`scoop`}function RN(e,t){let n=LN(e);return(t.full?n:n.slice(0,t.width)).padEnd(t.width)}function zN(e,t,n){let r=n&&t>0?` `.repeat(t-1)+`└─ `:``,i=e.argv.length===0?`[${e.kind}]`:e.argv.map(BN).join(` `);return r+(i.length>80?i.slice(0,79)+`…`:i)}function BN(e){return e===``?`''`:/^[A-Za-z0-9_./:=@%+-]+$/.test(e)?e:e.includes(`"`)&&!e.includes(`'`)?`'${e}'`:`"${e.replace(/\\/g,`\\\\`).replace(/"/g,`\\"`)}"`}function VN(e){let t=new Map;for(let n of e)t.set(n.pid,n);let n=new Map,r=[];for(let i of e)if(t.has(i.ppid)){let e=n.get(i.ppid)??[];e.push(i),n.set(i.ppid,e)}else r.push(i);let i=[],a=new Set,o=(e,t)=>{if(a.has(e.pid))return;a.add(e.pid),i.push({proc:e,depth:t});let r=n.get(e.pid)??[];for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,t+1)};for(let e of r.sort((e,t)=>e.pid-t.pid))o(e,0);return i}function HN(){return{stdout:`Usage: ps [-a] [-T] [-o col[,col…]]
|
|
1903
1923
|
|
|
1904
1924
|
List processes tracked by the kernel.
|
|
1905
1925
|
|
|
@@ -1932,9 +1952,9 @@ Examples:
|
|
|
1932
1952
|
ps -a -T full tree
|
|
1933
1953
|
ps -o pid,kind,stat just three columns
|
|
1934
1954
|
ps -o scoop,stat,pid full scoop jid, with STAT and PID
|
|
1935
|
-
`,stderr:``,exitCode:0}}const
|
|
1936
|
-
`,stderr:``,exitCode:0}}function
|
|
1937
|
-
`,stderr:``,exitCode:0}}async function
|
|
1955
|
+
`,stderr:``,exitCode:0}}const UN=new Set([`dev`,`proc`,`lib`,`bin`,`usr`,`etc`,`home`,`tmp`]);async function WN(e,t=UN){let n=[],r=new Set;try{let i=await e.readdir(`/`);for(let a of i){if(!a||a.includes(`/`)||t.has(a))continue;let i=`/${a}`,o=!1;try{o=!!(await e.stat(i)).isDirectory}catch{continue}o&&(r.has(i)||(r.add(i),n.push(i)))}}catch{}return r.has(`/tmp`)||(r.add(`/tmp`),n.push(`/tmp`)),n}function GN(e,t){let n=e;if(typeof n.listMountPoints!=`function`)return[];let r=e=>{for(let n of t)if(e===n||e.startsWith(n===`/`?`/`:n+`/`)||n.startsWith(e+`/`))return!0;return!1},i=[];for(let e of n.listMountPoints())e.kind!==`proc`&&r(e.path)&&i.push({path:e.path,kind:e.kind});return i}function KN(){try{if(typeof globalThis.navigator?.storage?.getDirectory==`function`)return`slicc-fs`}catch{}}function qN(e){return{reader:{exists:t=>e.fs.exists(t),isDirectory:async t=>{try{return(await e.fs.stat(t)).isDirectory}catch{return!1}},readFile:t=>e.fs.readFile(t)},fromDir:e.cwd}}async function JN(e,t){try{let n=await e.readFile(`${t}/package.json`),r=JSON.parse(n);return typeof r.version==`string`?r.version:null}catch{return null}}function YN(e,t){return`installed pyodide ${e} is not the supported version ${t}: run \`ipk uninstall pyodide\` then \`ipk add pyodide@${t}\``}function XN(){return{stdout:`usage: python3 [-c code | script.py] [args...]
|
|
1956
|
+
`,stderr:``,exitCode:0}}function ZN(){return{stdout:`Python 3.14 (Pyodide)
|
|
1957
|
+
`,stderr:``,exitCode:0}}async function QN(e,t,n){if(t[0]===`-c`){if(!t[1])return{kind:`result`,result:{stdout:``,stderr:`${e}: option requires an argument -- 'c'\n`,exitCode:2}};let n=t[1];return{kind:`ok`,code:n,filename:`-c`,sysArgv:[`-c`,...t.slice(2)],procArgv:[e,`-c`,n,...t.slice(2)]}}if(t.length>0&&!t[0].startsWith(`-`)){let r=t[0],i=n.fs.resolvePath(n.cwd,r);return await n.fs.exists(i)?{kind:`ok`,code:await n.fs.readFile(i),filename:r,sysArgv:[r,...t.slice(1)],procArgv:[e,r,...t.slice(1)]}:{kind:`result`,result:{stdout:``,stderr:`${e}: can't open file '${r}': [Errno 2] No such file or directory\n`,exitCode:2}}}return P(n.stdin).trim().length>0?{kind:`ok`,code:P(n.stdin),filename:`<stdin>`,sysArgv:[`<stdin>`],procArgv:[e]}:t.length>0?{kind:`result`,result:{stdout:``,stderr:`${e}: unsupported option '${t[0]}'\n`,exitCode:2}}:{kind:`result`,result:{stdout:``,stderr:`${e}: no input provided (use -c CODE, script path, or stdin)\n`,exitCode:2}}}async function $N(e){let t=qN(e),n=await Lr(t);if(!n)return{kind:`result`,result:{stdout:``,stderr:`${Ir}\n`,exitCode:1}};let r=await JN(t.reader,n);return r?r===Er?{kind:`ok`,assetRoot:n}:{kind:`result`,result:{stdout:``,stderr:`${YN(r,Er)}\n`,exitCode:1}}:{kind:`result`,result:{stdout:``,stderr:`${Ir}\n`,exitCode:1}}}const eP=new Set(`EsSuBIPqObdR`);function tP(e){let t=0;for(;t<e.length&&/^-[A-Za-z]+$/.test(e[t]);){let n=e[t].slice(1);if(n===`W`||n===`X`){t+=2;continue}if(![...n].every(e=>eP.has(e)))break;t++}return t===0?e:e.slice(t)}function nP(e,t={}){return S(e,async(n,r)=>{let i=tP(n),a=i[0];if(a===`--help`||a===`-h`)return XN();if(a===`--version`||a===`-V`)return ZN();let o=await QN(e,i,r);if(o.kind===`result`)return o.result;let{code:s,filename:c,sysArgv:l,procArgv:u}=o,d=await WN(r.fs),f=GN(r.fs,d),p=t.buildProcessConfig?.(r.env),m=p?.processManager??rP(),h=p?.owner??{kind:`system`},g=p?.getParentPid?.(),_=t.realmFactory??Wr(),v=t.pyodideIndexURL??ii(),ee=t.pyodideAssetRoot;if(!ee&&v===void 0){let e=await $N(r);if(e.kind===`result`)return e.result;ee=e.assetRoot}let te=c===`<stdin>`?``:P(r.stdin),ne=KN();return m?ei({pm:m,realmFactory:_,owner:h,kind:`py`,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f,procKind:`py`,ppid:g,syncFsBridgeEnabled:Ur()}):aP({realmFactory:_,owner:h,code:s,argv:u,realmArgv:l,env:Object.fromEntries(r.env.entries()),cwd:r.cwd,filename:c,ctx:r,stdin:te,pyodideIndexURL:v,pyodideAssetRoot:ee,pyodideMountDirs:d,opfsMountDbName:ne,mountPoints:f})})}function rP(){let e=globalThis.__slicc_pm;return e&&typeof e==`object`&&typeof e.spawn==`function`&&typeof e.onSignal==`function`?e:null}let iP=null;async function aP(e){if(!iP){let{ProcessManager:e}=await import(`./process-manager-BkhAohXT.js`).then(e=>e.n);iP=new e}return ei({pm:iP,realmFactory:e.realmFactory,owner:e.owner,kind:`py`,code:e.code,argv:e.argv,realmArgv:e.realmArgv,env:e.env,cwd:e.cwd,filename:e.filename,ctx:e.ctx,stdin:e.stdin,pyodideIndexURL:e.pyodideIndexURL,pyodideAssetRoot:e.pyodideAssetRoot,pyodideMountDirs:e.pyodideMountDirs,mountPoints:e.mountPoints,opfsMountDbName:e.opfsMountDbName,procKind:`py`,syncFsBridgeEnabled:Ur()})}function oP(){return S(`rg`,async(e,t)=>{let{runRg:n}=await import(`./run-DniTiLYn.js`);return n(e,t)})}function sP(e,t,n={}){let r=new Map;for(let e of t)r.set(e.path,e);let i=new Set,a=[],o=[],s=[];for(let t of e){i.add(t.path);let e=r.get(t.path);e?e.size===t.size&&e.mtimeMs===t.mtimeMs?s.push(t.path):o.push(t.path):a.push(t.path)}let c=[];if(n.delete)for(let e of t)i.has(e.path)||c.push(e.path);return{toAdd:a,toUpdate:o,toDelete:c,toSkip:s}}function cP(){return null}function lP(e){let t={dryRun:!1,delete:!1,verbose:!1},n=[];for(let r of e)if(r===`--dry-run`||r===`-n`)t.dryRun=!0;else if(r===`--delete`)t.delete=!0;else if(r===`--verbose`||r===`-v`)t.verbose=!0;else if(r===`--help`||r===`-h`)return{error:`__help__`};else if(r.startsWith(`-`))return{error:`Unknown flag: ${r}`};else n.push(r);if(n.length!==2)return{error:`Expected exactly 2 arguments: <source> <dest>`};let[r,i]=n,a=uP(r),o=uP(i);return a&&o?{error:`Cannot sync between two remote paths — one side must be local`}:!a&&!o?{error:`One argument must be a remote path (runtime-id:/path)`}:o?{direction:`push`,localPath:r,remotePath:o.path,runtimeId:o.runtimeId,...t}:{direction:`pull`,localPath:i,remotePath:a.path,runtimeId:a.runtimeId,...t}}function uP(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.slice(0,t),r=e.slice(t+1);return r.startsWith(`/`)?{runtimeId:n,path:r}:null}function dP(){return{stdout:`rsync — sync files between local VFS and a remote tray runtime
|
|
1938
1958
|
|
|
1939
1959
|
Usage:
|
|
1940
1960
|
rsync [flags] <local-path> <runtime-id>:<remote-path> # push
|
|
@@ -1950,21 +1970,21 @@ Examples:
|
|
|
1950
1970
|
rsync /workspace follower-abc123:/workspace
|
|
1951
1971
|
rsync --delete /shared leader:/shared
|
|
1952
1972
|
rsync follower-abc123:/workspace/project /workspace/project
|
|
1953
|
-
`,stderr:``,exitCode:0}}async function
|
|
1973
|
+
`,stderr:``,exitCode:0}}async function fP(e,t){if(!await e.exists(t))return[];let n=[];for await(let r of e.walk(t)){let i=r.slice(t.length).replace(/^\//,``);if(!i)continue;let a=await e.stat(r);n.push({path:i,size:a.size,mtimeMs:a.mtime})}return n}async function pP(e,t,n){let r=(await e(t,{op:`walk`,path:n}))[0];if(!r.ok){if(r.code===`ENOENT`)return[];throw Error(`Remote walk failed: ${r.error}`)}if(r.data.type!==`paths`)throw Error(`Unexpected walk response type`);let i=r.data.paths,a=[];for(let r of i){let i=r.slice(n.length).replace(/^\//,``);if(!i)continue;let o=(await e(t,{op:`stat`,path:r}))[0];o.ok&&o.data.type===`stat`&&a.push({path:i,size:o.data.stat.size,mtimeMs:o.data.stat.mtime})}return a}async function mP(e,t,n){let r=await e(t,{op:`readFile`,path:n,encoding:`binary`}),i=``;for(let e of r){if(!e.ok)throw Error(`Remote read failed: ${e.error}`);e.data.type===`file`&&(i+=e.data.content)}return i}async function hP(e,t,n){let r=await e(t,{op:`mkdir`,path:n,recursive:!0});if(!r[0].ok)throw Error(`Remote mkdir failed: ${r[0].error}`)}function gP(e){let t=e.lastIndexOf(`/`);return t<=0?`/`:e.slice(0,t)}async function _P(e,n,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=sP(await fP(e,a),await pP(n,s,o),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1954
1974
|
`)+`
|
|
1955
|
-
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await
|
|
1975
|
+
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let c=a+`/`+r,l=o+`/`+r;await hP(n,s,gP(l));let u=await e.readFile(c,{encoding:`binary`}),d=await n(s,{op:`writeFile`,path:l,content:t(u),encoding:`base64`});if(!d[0].ok)return{stdout:i.join(`
|
|
1956
1976
|
`)+`
|
|
1957
1977
|
`,stderr:`Error writing ${l}: ${d[0].error}\n`,exitCode:1}}for(let e of u.toDelete){let t=o+`/`+e,r=await n(s,{op:`rm`,path:t});if(!r[0].ok)return{stdout:i.join(`
|
|
1958
1978
|
`)+`
|
|
1959
1979
|
`,stderr:`Error deleting ${t}: ${r[0].error}\n`,exitCode:1}}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1960
1980
|
`)+`
|
|
1961
|
-
`,stderr:``,exitCode:0}}async function
|
|
1981
|
+
`,stderr:``,exitCode:0}}async function vP(e,t,r){let i=[],{localPath:a,remotePath:o,runtimeId:s,verbose:c,dryRun:l}=r,u=sP(await pP(t,s,o),await fP(e,a),{delete:r.delete});if(c||l){for(let e of u.toAdd)i.push(`+ ${e}`);for(let e of u.toUpdate)i.push(`~ ${e}`);for(let e of u.toDelete)i.push(`- ${e}`);if(c)for(let e of u.toSkip)i.push(` ${e} (up to date)`)}let d=u.toAdd.length+u.toUpdate.length+u.toDelete.length;if(l)return i.push(`\n(dry run) ${d} file(s) would be transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1962
1982
|
`)+`
|
|
1963
|
-
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=
|
|
1983
|
+
`,stderr:``,exitCode:0};for(let r of[...u.toAdd,...u.toUpdate]){let i=o+`/`+r,c=a+`/`+r,l=gP(c);await e.exists(l)||await e.mkdir(l,{recursive:!0});let u=await mP(t,s,i),d=n(u);await e.writeFile(c,d)}for(let t of u.toDelete){let n=a+`/`+t;await e.rm(n)}return i.push(`${d} file(s) transferred, ${u.toSkip.length} up to date`),{stdout:i.join(`
|
|
1964
1984
|
`)+`
|
|
1965
|
-
`,stderr:``,exitCode:0}}function
|
|
1985
|
+
`,stderr:``,exitCode:0}}function yP(e={}){let t=e.fs,n=e.getSendFsRequest??cP;return S(`rsync`,async e=>{if(e.includes(`--help`)||e.includes(`-h`)||e.length===0)return dP();if(!t)return{stdout:``,stderr:`rsync: no filesystem available
|
|
1966
1986
|
`,exitCode:1};let r=n();if(!r)return{stdout:``,stderr:`rsync: not connected to a tray — rsync requires a tray connection
|
|
1967
|
-
`,exitCode:1};let i=
|
|
1987
|
+
`,exitCode:1};let i=lP(e);if(`error`in i)return i.error===`__help__`?dP():{stdout:``,stderr:`rsync: ${i.error}\n`,exitCode:1};try{return i.direction===`push`?await _P(t,r,i):await vP(t,r,i)}catch(e){return{stdout:``,stderr:`rsync: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function bP(){return{stdout:`usage: say [-v voice] [-r rate] [-l lang] [-o file] [--list] <text>
|
|
1968
1988
|
say --status | --warmup
|
|
1969
1989
|
|
|
1970
1990
|
Speaks the given text. Uses on-device Kokoro voices when the model
|
|
@@ -1983,14 +2003,14 @@ Examples:
|
|
|
1983
2003
|
[web speech] otherwise); kokoro voices lead when ready
|
|
1984
2004
|
--status Show the on-device voice state (downloading/ready + ETA)
|
|
1985
2005
|
--warmup Stage + start the on-device voice download in the background
|
|
1986
|
-
`,stderr:``,exitCode:0}}function
|
|
2006
|
+
`,stderr:``,exitCode:0}}function xP(e){switch(e.state){case`ready`:return`voice engine: ready
|
|
1987
2007
|
`;case`failed`:return`voice engine: failed (re-run say --warmup to retry)
|
|
1988
2008
|
`;case`idle`:return`voice engine: not downloaded (run say --warmup)
|
|
1989
|
-
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function
|
|
2009
|
+
`;case`loading`:{let t=e=>(e/1024/1024).toFixed(1);return`voice engine: downloading${e.loaded!=null&&e.total?` ${t(e.loaded)}/${t(e.total)} MB`:``}${e.etaSeconds!=null&&Number.isFinite(e.etaSeconds)?` · ready in ~${Math.max(1,Math.round(e.etaSeconds))}s`:``}\n`}}}function SP(e){return{stdout:``,stderr:`say: ${e}\n`,exitCode:1}}function CP(e){return e instanceof Error?e.message:String(e)}let wP=!1,TP=null;function EP(){return wP?Promise.resolve(speechSynthesis.getVoices()):(TP||=new Promise(e=>{let t=speechSynthesis.getVoices();if(t.length>0){wP=!0,e(t);return}let n=()=>{wP=!0,speechSynthesis.removeEventListener(`voiceschanged`,n),e(speechSynthesis.getVoices())};speechSynthesis.addEventListener(`voiceschanged`,n),setTimeout(()=>{speechSynthesis.removeEventListener(`voiceschanged`,n),wP=!0,e(speechSynthesis.getVoices())},1e3)}),TP)}const DP={"-v":`a voice name`,"-r":`a rate value`,"-l":`a language tag`,"-o":`an output file path`,"--out":`an output file path`};function OP(e){return e!=null&&(!e.startsWith(`-`)||e===`-`)}function kP(e,t,n){switch(t){case`-v`:return e.voiceName=n,null;case`-l`:return e.lang=n,null;case`-o`:case`--out`:return e.outFile=n,null;case`-r`:{let t=parseFloat(n);return Number.isNaN(t)||t<.1||t>10?`rate must be between 0.1 and 10`:(e.rate=t,null)}default:return`unknown option: ${t}`}}function AP(e){let t={voiceName:null,rate:1,lang:null,outFile:null,text:``},n=[];for(let r=0;r<e.length;r++){let i=e[r];if(i in DP){let n=OP(r+1<e.length?e[r+1]:void 0)?e[++r]:null;if(n==null)return SP(`${i} requires ${DP[i]}`);let a=kP(t,i,n);if(a)return SP(a)}else if(i.startsWith(`-`)&&i!==`--list`)return SP(`unknown option: ${i}`);else i.startsWith(`-`)||n.push(i)}return t.text=n.join(` `),t}function jP(e){let t=e.onDevice?`[kokoro]`:`[web speech]`;return`${e.name} (${e.lang}) ${t}${e.default?` [default]`:``}`}async function MP(e){if(e.local){let{kokoroVoicesIfReady:e}=await import(`./speech-page-realm-stub-C7EPKrHd.js`),t=e().map(e=>jP({name:e.id,lang:e.lang,onDevice:e.onDevice})),n=(await EP()).map(e=>jP({name:e.name,lang:e.lang,onDevice:!1,default:e.default}));return{stdout:[...t,...n].join(`
|
|
1990
2010
|
`)+`
|
|
1991
|
-
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>
|
|
2011
|
+
`,stderr:``,exitCode:0}}try{return{stdout:(await e.panelRpc.call(`list-voices`,void 0)).voices.map(e=>jP(e)).join(`
|
|
1992
2012
|
`)+`
|
|
1993
|
-
`,stderr:``,exitCode:0}}catch(e){return
|
|
2013
|
+
`,stderr:``,exitCode:0}}catch(e){return SP(CP(e))}}async function NP(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 EP()).map(e=>({name:e.name}));return[...n,...r]}async function PP(e,t){let n=(await NP(e)).find(e=>e.name.toLowerCase().includes(t.toLowerCase()));return n?{resolved:n.name}:{error:SP(`voice "${t}" not found. Use --list to see available voices.`)}}async function FP(e,t){try{if(e.local){let{kokoroStatus:e,kokoroWarmup:n}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return{stdout:xP(t?n():e()),stderr:``,exitCode:0}}return{stdout:xP(t?await e.panelRpc.call(`speak-warmup`,void 0):await e.panelRpc.call(`speak-status`,void 0)),stderr:``,exitCode:0}}catch(e){return SP(CP(e))}}async function IP(e,t){return t.includes(`--list`)?MP(e):t.includes(`--status`)?FP(e,!1):t.includes(`--warmup`)?FP(e,!0):null}async function LP(e){try{let{speak:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);return await t(e),{stdout:``,stderr:``,exitCode:0}}catch(e){return SP(`speech synthesis error: ${CP(e)}`)}}async function RP(e,t){try{return await e.panelRpc.call(`speak-text`,t,{timeoutMs:3e5}),{stdout:``,stderr:``,exitCode:0}}catch(e){return SP(CP(e))}}async function zP(e){let{synthesizeToWav:t}=await import(`./speech-page-realm-stub-C7EPKrHd.js`);try{return{bytes:await t(e)}}catch(e){return SP(CP(e))}}async function BP(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 SP(CP(e))}}async function VP(e,t){return e.local?zP(t):BP(e,t)}async function HP(e,t){let n=await VP(e,t);return`exitCode`in n?n:{...hi(n.bytes),stderr:``,exitCode:0}}async function UP(e,t,n,r){let i=await VP(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 SP(`failed to write ${n}: ${CP(e)}`)}return{stdout:`wrote ${Math.max(1,Math.round(i.bytes.byteLength/1024))} KB to ${a}\n`,stderr:``,exitCode:0}}async function WP(e,t,n){let r;if(n.voiceName){let{resolved:t,error:i}=await PP(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&&!Xn(t)?HP(e,i):n.outFile?UP(e,t,n.outFile,i):e.local?LP(i):RP(e,i)}function GP(){return S(`say`,async(e,t)=>{if(e.includes(`--help`)||e.includes(`-h`))return bP();let n={local:typeof window<`u`&&typeof speechSynthesis<`u`,panelRpc:y()};if(!n.local&&!n.panelRpc)return SP(`Web Speech API unavailable in this environment`);let r=await IP(n,e);if(r)return r;let i=AP(e);return`exitCode`in i?i:i.text?i.lang?WP(n,t,{...i,lang:i.lang}):SP(`-l language tag is required`):bP()})}function KP(){return S(`screencapture`,async(e,t)=>{let{runScreencapture:n}=await import(`./screencapture-run-DRiSGUJ9.js`);return n(e,t)})}const qP=[`--domain`],JP=[`--persist`];function YP(){return`secret — manage secrets for the fetch proxy and mount backends
|
|
1994
2014
|
|
|
1995
2015
|
No approval (session-only, in-memory, never persisted):
|
|
1996
2016
|
secret set <name> <value> --domain <pat> Set a session secret. Free for a
|
|
@@ -2032,23 +2052,23 @@ Examples:
|
|
|
2032
2052
|
secret peek OPENAI_KEY
|
|
2033
2053
|
secret set GITHUB_TOKEN ghp_… --domain "api.github.com" --persist # prompts
|
|
2034
2054
|
secret scope GITHUB_TOKEN --domain "api.github.com,*.github.com" # prompts
|
|
2035
|
-
`}function
|
|
2055
|
+
`}function XP(e){if(e===void 0||e.startsWith(`-`))return null;let t=e.split(`,`).map(e=>e.trim()).filter(e=>e.length>0);return t.length===0?null:t}function ZP(e){return{stdout:``,stderr:`secret: ${e}\n`,exitCode:1}}const QP={persist:`persist secret`,scope:`edit secret scope`,value:`change secret value`},$P=new Set;function eF(e,t){if(e===t)return!0;try{return pt(e).test(t)}catch{return!1}}function tF(e,t){for(let n of e)if(eF(n,t))return!0;return!1}function nF(e){return{stdout:``,stderr:`${_t(`secret`,e)}\n`,exitCode:1}}function rF(e){let t=we(),n=e.isExtension??(t===`extension-direct`||t===`extension-delegate`),r=e.backend??Om(t),i=e.grants??$P,a=e.broker,o=()=>(a??=ds(null),a);return{backend:r,inExtension:n,gate:async(e,t)=>{let n=`secret:${e}:${t}`;if(tF(i,n))return`ok`;let r=await o().requestApproval({kind:`secret`,detail:`${QP[e]}: ${t}`,suggestedPattern:n});if(r.decision===`deny`)return r;if(r.decision===`always`){let e=r.pattern?.trim();i.add(e&&eF(e,n)?e:n)}return`ok`},injectMaskedEnv:async t=>{if(e.setEnv&&Ss(t))try{let n=await r.getMasked(t);n&&e.setEnv(t,n.maskedValue)}catch{}},clearMaskedEnv:t=>{e.unsetEnv&&Ss(t)&&e.unsetEnv(t)}}}function iF(e){let t=P(e);if(t.length!==0)return t.endsWith(`\r
|
|
2036
2056
|
`)?t.slice(0,-2):t.endsWith(`
|
|
2037
|
-
`)?t.slice(0,-1):t}async function
|
|
2038
|
-
`,exitCode:1};let a=r.positionals[1],o=
|
|
2057
|
+
`)?t.slice(0,-1):t}async function aF(e,t,n,r){let i=await r.gate(`persist`,e);return i===`ok`?(await r.backend.setPersisted(e,t,n),await r.injectMaskedEnv(e),{stdout:`Persisted "${e}" (domains: ${n.join(`, `)})\n`,stderr:``,exitCode:0}):nF(i)}async function oF(e,t,n,r){if(await r.backend.getInfo(e)){let t=await r.gate(`value`,e);if(t!==`ok`)return nF(t)}return await r.backend.setSession(e,t,n),await r.injectMaskedEnv(e),{stdout:`Set session secret "${e}" (domains: ${n.join(`, `)}) — in-memory only, not persisted.\n`,stderr:``,exitCode:0}}async function sF(e,t,n){let r=C(e.slice(1),{value:qP,bool:JP});if(`error`in r)return ZP(r.error);let i=r.positionals[0];if(!i||i.startsWith(`-`))return{stdout:``,stderr:`secret: set requires a <name>
|
|
2058
|
+
`,exitCode:1};let a=r.positionals[1],o=iF(t.stdin);if(a!==void 0&&o!==void 0)return{stdout:``,stderr:`secret: provide <value> as an argument OR via stdin, not both
|
|
2039
2059
|
`,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]
|
|
2040
2060
|
or pipe the value on stdin: echo "$TOKEN" | secret set <name> --domain <patterns>
|
|
2041
|
-
`,exitCode:1};let c=
|
|
2042
|
-
`,exitCode:1}}function
|
|
2043
|
-
`,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
|
|
2044
|
-
`,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
|
|
2045
|
-
`,exitCode:1};let i=
|
|
2046
|
-
`,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}):
|
|
2047
|
-
`,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
|
|
2048
|
-
`,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?Ca(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
|
|
2061
|
+
`,exitCode:1};let c=XP(r.values.get(`--domain`));return c?r.bools.has(`--persist`)?aF(i,s,c,n):oF(i,s,c,n):{stdout:``,stderr:`secret: set requires --domain <patterns>
|
|
2062
|
+
`,exitCode:1}}function cF(e){return`'${e.replaceAll(`'`,`'\\''`)}'`}async function lF(e,t){let[n,...r]=e.slice(1),i=e=>({stdout:e,stderr:``,exitCode:0});if(n===`set`){let e=C(r,{value:qP,bool:JP}),n=`error`in e?void 0:e.positionals[0];if(!n||!Ss(n))return i(``);let a=await t.backend.getMasked(n).catch(()=>null);return i(a?`export ${n}=${cF(a.maskedValue)}\n`:``)}if(n===`delete`||n===`rm`){let e=C(r,{}),t=`error`in e?void 0:e.positionals[0];return i(t&&Ss(t)?`unset ${t}\n`:``)}return i(``)}async function uF(e,t){let n=C(e.slice(1),{});if(`error`in n)return ZP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: get requires a <name>
|
|
2063
|
+
`,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 dF(e,t){let n=C(e.slice(1),{});if(`error`in n)return ZP(n.error);let r=n.positionals[0];if(!r)return{stdout:``,stderr:`secret: peek requires a <name>
|
|
2064
|
+
`,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 fF(e,t){let n=C(e.slice(1),{value:qP});if(`error`in n)return ZP(n.error);let r=n.positionals[0];if(!r||r.startsWith(`-`))return{stdout:``,stderr:`secret: scope requires a <name>
|
|
2065
|
+
`,exitCode:1};let i=XP(n.values.get(`--domain`));if(!i)return{stdout:``,stderr:`secret: scope requires --domain <patterns>
|
|
2066
|
+
`,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}):nF(a)}async function pF(e,t){let n=C(e.slice(1),{});if(`error`in n)return ZP(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
|
|
2067
|
+
`,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 mF(e,t,n){let r=C(e.slice(1),{});if(`error`in r)return ZP(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 hF(e,t){let n=C(e.slice(1),{});if(`error`in n)return ZP(n.error);let r=n.positionals[0],i=n.positionals[1];if(!r||!i)return{stdout:``,stderr:`secret: test requires <name> <url>
|
|
2068
|
+
`,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?Ca(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 gF(e,t){let n=C(e.slice(1),{});if(`error`in n)return ZP(n.error);if(!t.inExtension)return{stdout:`secret: in CLI mode, edit ~/.slicc/secrets.env directly with your text editor.
|
|
2049
2069
|
(changes are picked up on the next request — no restart needed)
|
|
2050
2070
|
`,stderr:``,exitCode:0};try{return await chrome.runtime.openOptionsPage(),{stdout:`Opened Mount Secrets options page in a new tab.
|
|
2051
|
-
`,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
|
|
2071
|
+
`,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 _F(e,t,n){let r=e[0];switch(r){case`set`:return sF(e,t,n);case`get`:case`read`:return uF(e,n);case`shell-env`:return lF(e,n);case`peek`:return dF(e,n);case`scope`:return fF(e,n);case`list`:return pF(e,n);case`delete`:case`rm`:return mF(e,r,n);case`test`:return hF(e,n);case`edit`:return gF(e,n);default:return{stdout:``,stderr:`secret: unknown command "${r}"\n`,exitCode:1}}}function vF(e={}){let t=rF(e);return S(`secret`,async(e,n)=>{if(e.length===0||w(e,{valueFlags:qP}))return{stdout:YP(),stderr:``,exitCode:0};try{return await _F(e,n,t)}catch(e){return{stdout:``,stderr:`secret: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}})}function yF(){return null}function bF(){return null}function xF(){return{stdout:`usage: serve [--entry <relative-path>] [--ttl <duration>] [--bridge | --no-bridge] [--max-tabs <n>] [--quiet] [--stop <token>] [--list] <directory>
|
|
2052
2072
|
serve --logs [<token>] [--lines <n>]
|
|
2053
2073
|
serve --truncate [<token>]
|
|
2054
2074
|
|
|
@@ -2084,28 +2104,28 @@ Limits and lifetime:
|
|
|
2084
2104
|
its TTL. Either can be removed sooner with \`serve --stop\`.
|
|
2085
2105
|
- <token> is the "Preview token" printed at mint time or the TOKEN column
|
|
2086
2106
|
of \`serve --list\`; \`--stop\` also accepts the preview URL.
|
|
2087
|
-
`,stderr:``,exitCode:0}}function
|
|
2088
|
-
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function
|
|
2107
|
+
`,stderr:``,exitCode:0}}function SF(e){return`error`in e}function CF(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
|
|
2108
|
+
`}:(n.lines=i,{skip:+(e===`--lines`)})}}function wF(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
|
|
2089
2109
|
`};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)
|
|
2090
2110
|
`};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.
|
|
2091
2111
|
`}:(n.ttlMs=a,{skip:+(e===`--ttl`)}):{error:`serve: --ttl must be a positive whole duration (m, h, d, or w)
|
|
2092
|
-
`}}function
|
|
2112
|
+
`}}function TF(e,t){let n={"--bridge":`bridge`,"--no-bridge":`noBridge`,"--project":`project`,"--quiet":`quiet`}[e];if(n)return t[n]=!0,{skip:0}}function EF(e,t,n){let r=wF(e,t,n);if(r)return r;let i=TF(e,n);if(i)return i;if(e===`--entry`)return t?(n.entry=t,{skip:1}):{error:`serve: missing value for --entry
|
|
2093
2113
|
`};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
|
|
2094
|
-
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=
|
|
2114
|
+
`};if(e.startsWith(`--stop=`))return n.stop=e.slice(7),{skip:0};let a=CF(e,t,n);if(a)return a;if(e===`--max-tabs`){if(!t)return{error:`serve: missing value for --max-tabs
|
|
2095
2115
|
`};let e=Number.parseInt(t,10);return!Number.isFinite(e)||e<=0?{error:`serve: --max-tabs must be a positive integer
|
|
2096
2116
|
`}:(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
|
|
2097
2117
|
`}:(n.maxTabs=t,{skip:0})}return e.startsWith(`-`)?{error:`serve: unknown option: ${e}\n`}:n.directory?{error:`serve: expected a single directory argument
|
|
2098
|
-
`}:(n.directory=e,{skip:0})}function
|
|
2099
|
-
`,exitCode:1};if(n.webhookId){let e=await zy();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
|
|
2100
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
2101
|
-
`,stderr:``,exitCode:0}:{stdout:
|
|
2102
|
-
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(
|
|
2118
|
+
`}:(n.directory=e,{skip:0})}function DF(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=EF(e[n],e[n+1],t);if(SF(r))return{...t,error:r.error};n+=r.skip}return t}async function OF(e,t,n,r){if(!gr(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=Cr(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 kF(e){return`exitCode`in e}async function AF(e){let t=xa(e)??e,n,r=bF();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
|
|
2119
|
+
`,exitCode:1};if(n.webhookId){let e=await zy();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 jF(){let e=bF();if(e){let t=(await e({type:`list`})).previews??[];return t.length===0?{stdout:`No active previews
|
|
2120
|
+
`,stderr:``,exitCode:0}:{stdout:NF(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
|
|
2121
|
+
`,stderr:``,exitCode:0}:{stdout:NF(n),stderr:``,exitCode:0}}function MF(e){return e.mode===`persistent`?e.state===`pending`?`uploading`:`persistent`:`live`}function NF(e){return`Active previews:\n TOKEN MODE EXPIRES URL ROOT CREATED\n${e.map(e=>` ${e.previewToken} ${MF(e)} ${e.expiresAt??`-`} ${e.url} ${e.servedRoot} ${e.createdAt}\n`).join(``)}`}function PF(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 FF(e){let t,n=bF();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.
|
|
2122
|
+
`,stderr:``,exitCode:0}:{stdout:`Preview lifecycle records (oldest to newest):\n${t.map(PF).join(``)}`,stderr:``,exitCode:0}}async function IF(e){let t,n,r=bF();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 LF(e,t){let n=[],r=0;for await(let i of e.walk(t)){if(n.length>=1e3)throw Error(`persistent preview exceeds 1000 file limit`);let a=await e.readFile(i,{encoding:`binary`}),o=typeof a==`string`?new TextEncoder().encode(a):a,s=i.slice(t===`/`?1:t.length+1);if(o.byteLength>26214400)throw Error(`preview file exceeds 25 MiB limit: ${s}`);if(r+=o.byteLength,r>52428800)throw Error(`persistent preview exceeds 50 MiB total limit`);n.push({path:s,content:o,mime:cr(s)})}return n}function RF(e){return e().catch(e=>({stdout:``,stderr:`serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}))}async function zF(e){let t=yF();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 BF(e,t){if(t)return t.createPage(e);typeof window<`u`&&typeof window.open==`function`&&window.open(e,`_blank`,`noopener,noreferrer`)}async function VF(e,t){if(!e)return{ok:!0};let n=await zy();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 HF(e,t,n,r,i,a,o){let s;try{s=await zF({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 zy();e&&await e.deleteWebhook(r).catch(()=>{})}return{stdout:``,stderr:`${i}serve: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}let c=await BF(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 UF(e){if(e.stop){let t=e.stop;return RF(()=>AF(t))}if(e.list)return RF(()=>jF());if(e.logs&&e.truncate)return{stdout:``,stderr:`serve: --logs and --truncate are mutually exclusive
|
|
2103
2123
|
`,exitCode:1};if(e.lines!==void 0&&!e.logs)return{stdout:``,stderr:`serve: --lines requires --logs
|
|
2104
|
-
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return
|
|
2124
|
+
`,exitCode:1};if(e.logs){let t=typeof e.logs==`string`?e.logs:void 0;return RF(()=>FF({previewToken:t,lines:e.lines}))}if(e.truncate){let t=typeof e.truncate==`string`?e.truncate:void 0;return RF(()=>IF(t))}}function WF(e){if(e.ttlMs!==void 0&&e.bridge)return{stdout:``,stderr:`serve: --ttl cannot be combined with --bridge
|
|
2105
2125
|
`,exitCode:1};if(e.ttlMs!==void 0&&e.maxTabs!==void 0)return{stdout:``,stderr:`serve: --ttl cannot be combined with --max-tabs
|
|
2106
|
-
`,exitCode:1}}async function
|
|
2107
|
-
`:``,f=await
|
|
2108
|
-
`;function
|
|
2126
|
+
`,exitCode:1}}async function GF(e,t,n){if(e.ttlMs!==void 0){if(!t)throw Error(`persistent snapshot filesystem unavailable`);return LF(t,n)}}async function KF(e,t,n,r){if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return xF();let i=DF(e);if(i.error)return{stdout:``,stderr:i.error,exitCode:1};let a=await UF(i);if(a)return a;if(!i.directory)return xF();let o=WF(i);if(o)return o;let s=await OF(i.directory,i.entry,t.fs,t.cwd);if(kF(s))return s;let{fullDirectory:c,entryPath:l}=s,u;try{u=await GF(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)
|
|
2127
|
+
`:``,f=await VF(!i.noBridge&&i.bridge,d);return f.ok?HF(i,c,l,f.webhookId,d,u,n):f.result}function qF(e,t){return S(`serve`,(n,r)=>KF(n,r,e,t))}const JF=`usage: session export [--id <id>] [--output <path>]
|
|
2128
|
+
`;function YF(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 XF(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 ZF(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||kt(r)!==a.sha256)throw new Oa(`transfer-corrupt`);return r}async function QF(e,t){let n=XF(e);if(!n.ok)return{stdout:``,stderr:n.stderr,exitCode:1};let{sessionId:r,outputPath:i}=n.args;if(i!==null){let e=YF(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 hs().export(a,{}),n=await ZF(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 Oa?e.code:e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}function $F(){return S(`session`,async(e,t)=>{if(e[0]===`export`&&!w(e))return QF(e,t);let{dispatchSessionMemoryAware:n}=await import(`./session-command-memory-Da1Ay0IK.js`);return n(e,t,JF)})}function eI(){return S(`slicc`,async(e,t)=>{let{runSlicc:n}=await import(`./run-cvQKad0O.js`);return await n(e,t)})}const tI=`leader`;function nI(){try{let e=globalThis.localStorage?.getItem(`slicc.leaderSprinkleInstances`);if(e)return JSON.parse(e)}catch{}return[]}function rI(e){return+!!e.leader+e.followers.length}function iI(){return{stdout:`usage: sprinkle <subcommand> [args]
|
|
2109
2129
|
|
|
2110
2130
|
list [--runtime <id>] List sprinkles + an instance line per runtime
|
|
2111
2131
|
open <name> Open a sprinkle by name
|
|
@@ -2123,22 +2143,22 @@ Limits and lifetime:
|
|
|
2123
2143
|
chat <html> Show inline HTML in chat (Tool UI)
|
|
2124
2144
|
Use data-action="name" on buttons for callbacks
|
|
2125
2145
|
Pipe HTML: echo "<div>...</div>" | sprinkle chat
|
|
2126
|
-
`,stderr:``,exitCode:0}}function
|
|
2146
|
+
`,stderr:``,exitCode:0}}function aI(){return globalThis.__slicc_sprinkleManager??null}function J(e,t){return{stdout:``,stderr:`sprinkle ${e}: ${t}\n`,exitCode:1}}function oI(){return[tI,...ne().map(e=>e.runtimeId)]}function sI(e){return`unknown runtime "${e}"\nknown runtimes: ${oI().join(`, `)}\nRun \`host\` to see connected followers.`}async function cI(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
|
|
2127
2147
|
`,exitCode:1};let r=await Me({html:n,onAction:async(e,t)=>({action:e,data:t})});return r===null?{stdout:``,stderr:`sprinkle chat: not in tool execution context
|
|
2128
2148
|
`,exitCode:1}:{stdout:JSON.stringify(r)+`
|
|
2129
|
-
`,stderr:``,exitCode:0}}function
|
|
2130
|
-
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=
|
|
2149
|
+
`,stderr:``,exitCode:0}}function lI(e){return e.map(e=>{let t=e.runtime?` (${e.runtime})`:``;return` instance: ${e.runtimeId}${t}`})}function uI(e){return[...e.map(e=>({name:e,runtimeId:tI})),...nI()]}async function dI(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&&!oI().includes(r))return J(`list`,sI(r));await e.refresh();let i=e.available();if(i.length===0)return{stdout:`No .shtml sprinkles found.
|
|
2150
|
+
`,stderr:``,exitCode:0};let a=new Set(e.opened()),o=uI([...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(...lI(t))}return s.length===0?{stdout:`No sprinkles are open on runtime "${r}".\n`,stderr:``,exitCode:0}:{stdout:s.join(`
|
|
2131
2151
|
`)+`
|
|
2132
|
-
`,stderr:``,exitCode:0}}function
|
|
2152
|
+
`,stderr:``,exitCode:0}}function fI(e,t){return!t||No(e)?null:(Po(e,t),No(e)===t?t:null)}async function pI(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=Zi(void 0,n),o=fI(i,a);try{a?await e.open(i,void 0,{lickOriginTarget:a}):await e.open(i)}catch(e){return o&&Fo(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 mI(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 hI(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 gI(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 _I(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=Io(),t=Object.entries(e);return t.length===0?{stdout:`No sprinkle routes configured (all licks go to cone).
|
|
2133
2153
|
`,stderr:``,exitCode:0}:{stdout:`Sprinkle routes (applied to every runtime — the leader resolves the
|
|
2134
2154
|
route for follower-forwarded licks too):
|
|
2135
2155
|
`+t.map(([e,t])=>` ${e} -> ${t}`).join(`
|
|
2136
2156
|
`)+`
|
|
2137
|
-
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Fo(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=No(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Po(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function
|
|
2138
|
-
`,exitCode:1};switch(n){case`list`:return
|
|
2139
|
-
`,stderr:``,exitCode:0}}function
|
|
2140
|
-
`)}\n`:``}async function
|
|
2141
|
-
`)?e:`${e}\n`,exitCode:1}}function
|
|
2157
|
+
`,stderr:``,exitCode:0}}if(t.bools.has(`--clear`))return Fo(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=No(n);return e?{stdout:`${n} -> ${e}\n`,stderr:``,exitCode:0}:{stdout:`${n} -> cone (default)\n`,stderr:``,exitCode:0}}return Po(n,r),{stdout:`Sprinkle "${n}" lick events will route to scoop "${r}".\n`,stderr:``,exitCode:0}}function vI(e){let t=[];return e.leader&&t.push(tI),t.push(...e.followers),t.join(`, `)}async function yI(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&&!oI().includes(o))return J(`send`,sI(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`,sI(s.unknownRuntime));let c=rI(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`} (${vI(s)}).\n`,stderr:``,exitCode:0}}function bI(){return S(`sprinkle`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return iI();let n=e[0];if(w(e.slice(1),{valueFlags:[`--scoop`,`--runtime`]}))return{stdout:st(`sprinkle`,n,iI().stdout),stderr:``,exitCode:0};if(n===`chat`)return cI(ot(e),t);let r=aI();if(!r)return{stdout:``,stderr:`sprinkle: sprinkle manager not initialized
|
|
2158
|
+
`,exitCode:1};switch(n){case`list`:return dI(r,e);case`open`:return pI(r,e,t.env);case`close`:return mI(r,e);case`reload`:return hI(r,e);case`refresh`:return gI(r,e);case`route`:return _I(e);case`send`:return yI(r,e);default:return{stdout:``,stderr:`sprinkle: unknown subcommand "${n}"\n`,exitCode:1}}})}function xI(){return{stdout:`usage: sqlite3 [database] [sql]
|
|
2159
|
+
`,stderr:``,exitCode:0}}function SI(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 CI(e,t){return e===`:memory:`?e:t.fs.resolvePath(t.cwd,e)}async function wI(e,t,n){return t===`:memory:`||!await n.fs.exists(t)?new e.Database:new e.Database(await n.fs.readFileBuffer(t))}async function TI(e,t,n){t!==`:memory:`&&await n.fs.writeFile(t,e.export())}function EI(e){let t=e.flatMap(e=>e.values.map(e=>e.map(hr).join(`|`)));return t.length>0?`${t.join(`
|
|
2160
|
+
`)}\n`:``}async function DI(e,t,n){let r=await Sr(),i=CI(e,n),a=await wI(r,i,n),o=a.exec(t);return await TI(a,i,n),a.close(),EI(o)}function OI(e,t){return{stdout:``,stderr:`${e}: ${t instanceof Error?t.message:String(t)}\n`,exitCode:1}}function kI(e=`sqlite3`){return S(e,async(t,n)=>{if(t.includes(`--help`)||t.includes(`-h`))return xI();let{database:r,sql:i}=SI(t,n);if(!i)return OI(e,`interactive mode is not supported; provide SQL as argument or stdin`);try{return{stdout:await DI(r,i,n),stderr:``,exitCode:0}}catch(t){return OI(e,t)}})}function AI(e){return{stdout:``,stderr:e.endsWith(`
|
|
2161
|
+
`)?e:`${e}\n`,exitCode:1}}function jI(){return{stdout:`ssh - run a command on a connected tray follower
|
|
2142
2162
|
|
|
2143
2163
|
Usage: ssh [--cwd <dir>] [--timeout <seconds>] <runtime-id> <command...>
|
|
2144
2164
|
ssh --list
|
|
@@ -2161,11 +2181,11 @@ Examples:
|
|
|
2161
2181
|
ssh --list
|
|
2162
2182
|
ssh follower-abc123 "uname -a"
|
|
2163
2183
|
ssh --cwd /tmp follower-abc123 "ls -la"
|
|
2164
|
-
`,stderr:``,exitCode:0}}function
|
|
2184
|
+
`,stderr:``,exitCode:0}}function MI(e){let t=e.filter(e=>e.exec);if(t.length===0)return`No exec-capable followers connected.
|
|
2165
2185
|
Start one with: slicc <join-url> follow sh -c
|
|
2166
2186
|
`;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(`
|
|
2167
|
-
`)}\n`}function
|
|
2168
|
-
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return
|
|
2187
|
+
`)}\n`}function NI(e){if(e.stdin===void 0)return;let n=pi(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 PI(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 FI(){return S(`ssh`,async(e,t)=>{let n=PI(e);if(`help`in n)return jI();if(`error`in n)return AI(n.error);if(n.list||n.runtimeId===void 0)return{stdout:MI(ne()),stderr:``,exitCode:0};if(!n.command)return AI(`ssh: missing command
|
|
2188
|
+
Usage: ssh <runtime-id> <command...>`);let r=y();if(!r)return AI(`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:NI(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 AI(`ssh: ${e instanceof Error?e.message:String(e)}`)}finally{t.signal?.removeEventListener(`abort`,a)}})}function II(e){return{stdout:``,stderr:`${_t(`sudo`,e)}\n`,exitCode:77}}function LI(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...]
|
|
2169
2189
|
`,exitCode:1};if(e[0]===`--help`||e[0]===`-h`)return{stdout:`usage: sudo <command> [args...]
|
|
2170
2190
|
|
|
2171
2191
|
Request human approval to run <command> with elevation. If approved, the
|
|
@@ -2182,14 +2202,14 @@ Options:
|
|
|
2182
2202
|
-h, --help Show this help message and exit.
|
|
2183
2203
|
`,stderr:``,exitCode:0};if(!t)return{stdout:``,stderr:`sudo: command-level approval is not configured
|
|
2184
2204
|
`,exitCode:1};if(!i.exec)return{stdout:``,stderr:`sudo: cannot dispatch inner command in this context
|
|
2185
|
-
`,exitCode:1};let a=um(e[0],e.slice(1)),o=i.env?.get(mm),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return
|
|
2186
|
-
`,exitCode:1};let i=await Promise.all(r.map(e=>
|
|
2187
|
-
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>
|
|
2188
|
-
`,exitCode:1};let a=await Promise.all(i.map(e=>
|
|
2189
|
-
`,stderr:``,exitCode:0}}function
|
|
2190
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
2191
|
-
`);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=
|
|
2192
|
-
`)}\n`:``,stderr:``,exitCode:0}}function
|
|
2205
|
+
`,exitCode:1};let a=um(e[0],e.slice(1)),o=i.env?.get(mm),s=await t.requestApproval({kind:`command`,detail:a,...o?{reason:o}:{}});if(s.decision===`deny`)return II(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 RI(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 zI(e,t){return e.fs.lstat?e.fs.lstat(t):e.fs.stat(t)}function BI(e,t){return e.some(e=>/^-[^-]/.test(e)&&e.slice(1).includes(t))}async function VI(e,t,n){let r=e.fs.resolvePath(e.cwd,t);try{let i=await zI(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}': ${RI(e)}\n`}}}function HI(){return S(`rm`,async(e,t)=>{let n={recursive:BI(e,`r`)||BI(e,`R`)||e.includes(`--recursive`),force:BI(e,`f`)||e.includes(`--force`),verbose:BI(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
|
|
2206
|
+
`,exitCode:1};let i=await Promise.all(r.map(e=>VI(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 UI(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 WI(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 GI(e,t,n){try{let r=e.fs.resolvePath(e.cwd,t),i=n.follow?await e.fs.stat(r):await zI(e,r);return{stdout:n.format?`${UI(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=WI(e);if(n.paths.length===0)return{stdout:``,stderr:`stat: missing operand
|
|
2207
|
+
`,exitCode:1};let r=await Promise.all(n.paths.map(e=>GI(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 qI(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 zI(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}': ${RI(e)}\n`}}if(!n||s===i.length-1)return{stdout:o,stderr:``};a=qI(a)}return{stdout:o,stderr:``}}function YI(){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
|
|
2208
|
+
`,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 XI(){return{stdout:`usage: tar (-c|-x|-t) [-zv] -f <archive> [-C <dir>] [paths...]
|
|
2209
|
+
`,stderr:``,exitCode:0}}function ZI(e){return{stdout:``,stderr:`tar: ${e}\n`,exitCode:1}}function QI(e,t){if(e.mode)return ZI(`exactly one of -c, -x, or -t is required`);e.mode=t}function $I(e,t,n){if(n)return[n,t];let r=e[t+1];return r===void 0?void 0:[r,t+1]}const eL={c:`create`,x:`extract`,t:`list`};function tL(e,t,n,r,i){let a=eL[e];if(a)return{nextIndex:r,error:QI(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:ZI(`unsupported option -${e}`)};let o=$I(n,r,t);return o?(e===`f`?i.archive=o[0]:i.directory=o[0],{nextIndex:o[1],consumedValue:!0}):{nextIndex:r,error:ZI(`option -${e} requires an argument`)}}function nL(e,t,n){let r=e[t];for(let i=1;i<r.length;i++){let a=tL(r[i],r.slice(i+1),e,t,n);if(a.error||a.consumedValue)return a}return{nextIndex:t}}const rL=/^[cxtzvfC]+$/;function iL(e){let t=e.length>0&&rL.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 ZI(`unsupported option ${r}`);let i=nL(t,e,n);if(i.error)return i.error;e=i.nextIndex}return n}function aL(e,t){let n=e.replace(/\\/g,`/`).replace(/^\/+/,``).replace(/^(?:\.\/)+/,``);return n?n===`.`?`.`:n.replace(/\/+$/,``):mr(t)}function oL(e){let t=e.mtime?.getTime();return t===void 0||Number.isNaN(t)?{}:{mtime:Math.floor(t/1e3)}}async function sL(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},...oL(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},...oL(i)});for(let n of await e.fs.readdir(t))await sL(e,pr(t,n),`${a}${n}`,r)}function cL(e,t){let n=e.length>=2&&e[0]===31&&e[1]===139,r=t||n?ca(e):e;return sa(r,{stripNpmPrefix:!1,includeDirectories:!0,preserveRawPaths:!0})}function lL(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 xr(t,i)?i:void 0}async function uL(e){try{await e()}catch(e){let t=e?.code;if(t===`ENOSYS`||t===`ENOTSUP`||t===`EOPNOTSUPP`)return;throw e}}async function dL(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 uL(()=>r.updateMetadataBatch(s));return}let c=e.fs;if(typeof c.updateMetadataBatch==`function`){await uL(()=>c.updateMetadataBatch(s));return}for(let[e,n]of t)await uL(()=>c.chmod(e,n));for(let[e,t]of n){let n=new Date(t*1e3);await uL(()=>c.utimes(e,n,n))}}async function fL(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=vr(t);c!==`/`&&await e.fs.mkdir(c,{recursive:!0}),await e.fs.writeFile(t,n.bytes),s&&i.push([t,n.mode])}async function pL(e,t){if(e.paths.length===0)return ZI(`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 sL(t,e,aL(i,e),n)}let i=t.fs.resolvePath(t.cwd,e.archive),a=aa(n);return await t.fs.writeFile(i,e.gzip?oa(a):a),{stdout:e.verbose?`${n.map(e=>e.path).join(`
|
|
2210
|
+
`)}\n`:``,stderr:``,exitCode:0}}function mL(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 hL(e,t,n){if(e.paths.length>0)return ZI(`${e.mode} mode does not accept input paths`);let r=t.fs.resolvePath(t.cwd,e.archive),i=cL(await t.fs.readFileBuffer(r),e.gzip);if(e.mode===`list`){let e=i.map(e=>e.path).join(`
|
|
2211
|
+
`);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=lL(t,a,e.path);if(!n)return ZI(`blocked suspicious path ${e.path}`);await fL(t,n,e,c,s),e.mtime!==void 0&&l.push([n,e.mtime]),o.push(e.path)}return await dL(t,[...mL(s),...mL(c)],mL(l),n),{stdout:e.verbose?`${o.join(`
|
|
2212
|
+
`)}\n`:``,stderr:``,exitCode:0}}function gL(e={}){return S(`tar`,async(t,n)=>{if(t.length===0||t.includes(`--help`)||t.includes(`-h`))return XI();let r=iL(t);return`exitCode`in r?r:r.mode?r.archive?r.mode===`list`&&r.directory!==`.`?ZI(`-C is only supported in create or extract mode`):r.mode===`create`?pL(r,n):hL(r,n,e.fs):ZI(`option -f requires an archive path`):ZI(`exactly one of -c, -x, or -t is required`)})}var _L=`/**
|
|
2193
2213
|
* Standalone assertions - no dependency on test runner
|
|
2194
2214
|
*
|
|
2195
2215
|
* Each assertion:
|
|
@@ -2377,7 +2397,7 @@ function sameMembers(a, b) {
|
|
|
2377
2397
|
}
|
|
2378
2398
|
|
|
2379
2399
|
const slice = a => (isPrimitive(a) ? a : a.slice ? a.slice() : Object.assign({}, a))
|
|
2380
|
-
`,
|
|
2400
|
+
`,vL=`/**
|
|
2381
2401
|
* tst - minimal test runner
|
|
2382
2402
|
*
|
|
2383
2403
|
* - Standalone assertions (assert.js works anywhere)
|
|
@@ -3007,7 +3027,7 @@ function scheduleAutoRun() {
|
|
|
3007
3027
|
scheduleAutoRun()
|
|
3008
3028
|
|
|
3009
3029
|
export * from './assert.js'
|
|
3010
|
-
`;function
|
|
3030
|
+
`;function yL(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 bL=`tsc - thin wrapper over the ipk-loaded TypeScript 6 package
|
|
3011
3031
|
|
|
3012
3032
|
Usage:
|
|
3013
3033
|
tsc [options] [files...]
|
|
@@ -3031,28 +3051,28 @@ Install:
|
|
|
3031
3051
|
Then \`tsc --version\` and the transpile commands above. There is no
|
|
3032
3052
|
bundled binary, no CDN fallback; a missing package exits non-zero
|
|
3033
3053
|
with a clear \`ipk add\` hint.
|
|
3034
|
-
`;function
|
|
3035
|
-
`);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
|
|
3036
|
-
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function
|
|
3054
|
+
`;function xL(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 SL(e,t){let n=`${mr(e).replace(/\.(ts|tsx|mts|cts)$/i,``)}.js`;return t?`${t.endsWith(`/`)?t.slice(0,-1):t}/${n}`:`${vr(e)}/${n}`}async function CL(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=vr(n)}return null}function wL(e){return{target:e.ScriptTarget.ES2022,module:e.ModuleKind.ESNext,moduleResolution:e.ModuleResolutionKind.Bundler,esModuleInterop:!0,allowSyntheticDefaultImports:!0,isolatedModules:!0}}function TL(e){if(typeof e!=`object`||!e)return{};let{compilerOptions:t}=e;return t??{}}async function EL(e,t,n){let r=wL(t),i=await CL(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,...TL(o)}}}function DL(e,t){let n=e.flattenDiagnosticMessageText(t.messageText,`
|
|
3055
|
+
`);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 OL(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 kL(e,t,n,r,i){let a=e.transpileModule(t,{compilerOptions:r,fileName:n,reportDiagnostics:i});return{outputText:a.outputText,diagnostics:a.diagnostics??[]}}function AL(e,t,n,r){let{outputText:i,diagnostics:a}=kL(e,r,`<stdin>.ts`,n.compilerOptions,!0),o=a.map(t=>DL(e,t)),s=o.length>0?`${o.join(`
|
|
3056
|
+
`)}\n`:``;return{stdout:t.noEmit?``:i,stderr:s,exitCode:+(a.length>0)}}async function jL(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}}OL(e,a);let{outputText:s,diagnostics:c}=kL(e,o,a,i.compilerOptions,!0),l=[];for(let t of c)l.push(`${DL(e,t)}\n`);let u=c.length>0;if(r.noEmit)return{stderr:l.join(``),hadError:u};let d=t.fs.resolvePath(t.cwd,SL(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 ML(e,t){let n;try{n=xL(e)}catch(e){return{done:{stdout:``,stderr:`${e instanceof Error?e.message:String(e)}\n`,exitCode:2}}}if(n.showHelp)return{done:{stdout:bL,stderr:``,exitCode:0}};let r;try{r=await dr(yL(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 NL(){return S(`tsc`,async(e,t)=>{let n=await ML(e,t);if(`done`in n)return n.done;let{parsed:r,ts:i}=n,a=await EL(t.fs,i,t.cwd);if(r.files.length===0){let e=P(t.stdin);return e?AL(i,r,a,e):{stdout:bL,stderr:``,exitCode:0}}let o=[],s=!1;for(let e of r.files){let n=await jL(i,t,e,r,a);n.stderr&&o.push(n.stderr),n.hadError&&(s=!0)}return{stdout:``,stderr:o.join(``),exitCode:+!!s}})}const PL=[`**/*.test.{js,ts}`];function FL(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 IL(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 LL(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=FL(s,e[o+1]);if(c){n=c.reporter,c.consumed===2&&(o+=1);continue}let l=IL(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:[...PL],reporter:n,showHelp:r,coverage:i,coverageDir:a}}function RL(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 RL(`${r}${e}${i}`))o.push(t);return o}function zL(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 BL(e,t,n){let r=n.flatMap(RL).map(zL),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 VL=null;async function HL(e){if(VL)return VL;let t={module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,esModuleInterop:!0,isolatedModules:!1};return VL=`
|
|
3037
3057
|
if (typeof process !== 'undefined' && !process.versions) {
|
|
3038
3058
|
try { process.versions = { node: '20.0.0' }; } catch (_) { /* readonly process.versions is fine */ }
|
|
3039
3059
|
}
|
|
3040
3060
|
const __tst_assert_exports = (function () {
|
|
3041
3061
|
const module = { exports: {} };
|
|
3042
3062
|
const exports = module.exports;
|
|
3043
|
-
${e.transpileModule(
|
|
3063
|
+
${e.transpileModule(_L,{compilerOptions:t,fileName:`assert.js`}).outputText}
|
|
3044
3064
|
return module.exports;
|
|
3045
3065
|
})();
|
|
3046
3066
|
const __tst_module_exports = (function () {
|
|
3047
3067
|
const module = { exports: {} };
|
|
3048
3068
|
const exports = module.exports;
|
|
3049
|
-
${e.transpileModule(
|
|
3069
|
+
${e.transpileModule(vL,{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"))`)}
|
|
3050
3070
|
return module.exports;
|
|
3051
3071
|
})();
|
|
3052
3072
|
const __tst = __tst_module_exports.default || __tst_module_exports;
|
|
3053
3073
|
__tst.manual = true;
|
|
3054
|
-
`.trim(),
|
|
3055
|
-
`)}}`,d=
|
|
3074
|
+
`.trim(),VL}function UL(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 WL(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 GL(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=vr(n),u=new Map;for(let n of WL(r)){if(!n.startsWith(`./`)&&!n.startsWith(`../`))continue;let r=await GL(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 qL(e,t,n,r,i,a,o=``,s=``){let c=r===`spec`?`pretty`:`tap`,l=[];for(let[e,t]of i.entries()){let n=UL(t,a.get(e)??new Map);l.push(`${JSON.stringify(e)}: function (module, exports, require) {\n${n}\n}`)}let u=`{${l.join(`,
|
|
3075
|
+
`)}}`,d=UL(n,a.get(t)??new Map),f=o,p=s;return`"use strict";
|
|
3056
3076
|
${f}${e}
|
|
3057
3077
|
const __realmRequire = require;
|
|
3058
3078
|
const { createRequire: __createRequire } = __realmRequire("module");
|
|
@@ -3095,7 +3115,7 @@ await Promise.resolve();
|
|
|
3095
3115
|
await new Promise((resolve) => setTimeout(resolve));
|
|
3096
3116
|
${p}
|
|
3097
3117
|
if (__state && __state.failed && __state.failed.length > 0) process.exit(1);
|
|
3098
|
-
`}const
|
|
3118
|
+
`}const JL={esModuleInterop:!0,allowJs:!0,isolatedModules:!1};function YL(e){return{module:e.ModuleKind.CommonJS,target:e.ScriptTarget.ES2022,...JL}}async function XL(e,t){let n;try{n=LL(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
|
|
3099
3119
|
|
|
3100
3120
|
Usage:
|
|
3101
3121
|
tst [options] [glob...]
|
|
@@ -3117,7 +3137,7 @@ Notes:
|
|
|
3117
3137
|
with statement counters. nyc/c8 cannot wrap this runner: it is not a
|
|
3118
3138
|
Node child. Istanbul/Babel are not bundled (webapp size-limit); the
|
|
3119
3139
|
TypeScript AST already in process does the rewrite.
|
|
3120
|
-
`,stderr:``,exitCode:0}};let r=await
|
|
3140
|
+
`,stderr:``,exitCode:0}};let r=await BL(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(yL(t))}catch(e){return{done:{stdout:``,stderr:`tst: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}}let a=await HL(i),o=n.coverage?await import(`./coverage-instrument-CjoHgKzK.js`):null;return{parsed:n,files:r,ts:i,harness:a,userOpts:YL(i),coverageMaps:{},coverageCounts:{},coverageMod:o}}function ZL(e){return e.includes(`# fail `)||/(^|\n)not ok /.test(e)}async function QL(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=qL(a,n,d,s.reporter,f,p,c?`${c.coverageRuntimeSource()}\n`:``,c?`\n${c.coverageDumpSource()}`:``),h=await ti(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||ZL(g)}}function $L(){return S(`tst`,async(e,t)=>{let n=await XL(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 QL(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 eR=[],tR=`usage: theme <subcommand> [args]
|
|
3121
3141
|
|
|
3122
3142
|
Subcommands:
|
|
3123
3143
|
list List available preset and custom themes
|
|
@@ -3126,23 +3146,23 @@ Subcommands:
|
|
|
3126
3146
|
reset Reset to the default theme
|
|
3127
3147
|
current Show the currently active theme
|
|
3128
3148
|
export <id> <path> Export a theme to a VFS path
|
|
3129
|
-
`;function
|
|
3130
|
-
`),stderr:``,exitCode:0}}async function
|
|
3131
|
-
`,stderr:``,exitCode:0}}async function
|
|
3149
|
+
`;function nR(e,t){return{stdout:``,stderr:`theme ${e}: ${t}\n`,exitCode:1}}function rR(){return S(`theme`,async(e,t)=>{if(e.length===0||e[0]===`--help`||e[0]===`-h`)return{stdout:tR,stderr:``,exitCode:0};let n=e[0];return w(e.slice(1),{valueFlags:eR})?{stdout:st(`theme`,n,tR),stderr:``,exitCode:0}:n===`list`?iR(e):n===`current`?aR(e):n===`reset`?oR(e):n===`apply`?sR(e.slice(1),t):n===`export`?cR(e.slice(1),t):{stdout:``,stderr:`theme: unknown subcommand "${n}"\n${tR}`,exitCode:1}})}async function iR(e){let t=C(e.slice(1),{value:eR});if(`error`in t)return nR(`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(`
|
|
3150
|
+
`),stderr:``,exitCode:0}}async function aR(e){let t=C(e.slice(1),{value:eR});return`error`in t?nR(`current`,t.error):{stdout:`Check the Theme settings dialog for the active theme.
|
|
3151
|
+
`,stderr:``,exitCode:0}}async function oR(e){let t=C(e.slice(1),{value:eR});if(`error`in t)return nR(`reset`,t.error);let n=y();return n?(await n.call(`theme-apply`,{action:`reset`}),{stdout:`Theme reset to default.
|
|
3132
3152
|
`,stderr:``,exitCode:0}):{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
3133
|
-
`,exitCode:1}}async function
|
|
3153
|
+
`,exitCode:1}}async function sR(e,t){let n=C(e,{value:eR});if(`error`in n)return nR(`apply`,n.error);if(n.positionals.length===0)return{stdout:``,stderr:`theme apply: missing theme id or path
|
|
3134
3154
|
`,exitCode:1};let r=y();if(!r)return{stdout:``,stderr:`theme: no panel-RPC connection available
|
|
3135
3155
|
`,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)
|
|
3136
3156
|
`,exitCode:1}}catch{return{stdout:``,stderr:`theme apply: file is not valid JSON
|
|
3137
|
-
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function
|
|
3138
|
-
`,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
|
|
3139
|
-
`),stderr:``,exitCode:0}}function
|
|
3157
|
+
`,exitCode:1}}return{stdout:`Applied theme: ${(await r.call(`theme-apply`,{themeJson:c,action:`apply`})).applied}\n`,stderr:``,exitCode:0}}async function cR(e,t){let n=C(e,{value:eR});if(`error`in n)return nR(`export`,n.error);if(n.positionals.length<2)return{stdout:``,stderr:`theme export: usage: theme export <id> <path>
|
|
3158
|
+
`,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 lR=`unknown`,uR=`usage: uname [-amnorsv]`,dR=[`s`,`n`,`r`,`v`,`m`,`o`];function fR(){return{stdout:[uR,` -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(`
|
|
3159
|
+
`),stderr:``,exitCode:0}}function pR(){let{releasedAt:e,buildId:t}=et();return e?`${t} (${e})`:t}function mR(){let e=globalThis.navigator,t=e?.userAgentData?.platform||e?.platform;return typeof t==`string`&&t.length>0?t:lR}function hR(){let e=globalThis.navigator?.userAgent;return typeof e==`string`&&e.length>0?e:lR}function gR(e){switch(e){case`s`:return`SLICC`;case`n`:return $e();case`r`:return et().version;case`v`:return pR();case`m`:return mR();case`o`:return hR()}}function _R(e){return{stdout:``,stderr:`uname: ${e}\n${uR}\n`,exitCode:1}}function vR(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 dR)t.add(e);continue}if(!dR.includes(e))return{error:`unrecognized option '-${e}'`};t.add(e)}}return t}function yR(){return S(`uname`,async e=>{if(e.includes(`--help`)||e.includes(`-h`))return fR();let t=vR(e);return`error`in t?_R(t.error):{stdout:`${(t.size>0?dR.filter(e=>t.has(e)):[`s`]).map(gR).join(` `)}\n`,stderr:``,exitCode:0}})}function bR(){return S(`unlink`,async(e,t)=>{if(e.includes(`--help`))return{stdout:`Usage: unlink FILE
|
|
3140
3160
|
Remove FILE. Symbolic links are removed without following their target.
|
|
3141
3161
|
`,stderr:``,exitCode:0};if(e.length!==1||e[0].startsWith(`-`))return{stdout:``,stderr:e.length===0?`unlink: missing operand
|
|
3142
3162
|
`:`unlink: extra operand
|
|
3143
|
-
`,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
|
|
3144
|
-
`,stderr:``,exitCode:0}}function
|
|
3145
|
-
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function
|
|
3163
|
+
`,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 xR(){return{stdout:`usage: unzip <archive.zip> [-d <destination>]
|
|
3164
|
+
`,stderr:``,exitCode:0}}function SR(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
|
|
3165
|
+
`,exitCode:1}}:{kind:`ok`,archive:n[0],destination:t||`.`}}async function CR(e,t,n,r){let i=n.replace(/\\/g,`/`);if(!i||i.endsWith(`/`))return!1;let a=e.fs.resolvePath(t,i);if(!xr(t,a))return{stdout:``,stderr:`unzip: blocked suspicious path ${n}\n`,exitCode:1};let o=vr(a);return o!==`/`&&await e.fs.mkdir(o,{recursive:!0}),await e.fs.writeFile(a,r),!0}function wR(){return S(`unzip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return xR();let n=SR(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=At(a),s=0;for(let[e,n]of Object.entries(o)){let r=await CR(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 TR=`ai-ecoverse/slicc`,ER=`usage: upgrade status | upgrade apply --from=<version> --to=<version>`,DR=`packages/vfs-root`,OR=3e4,kR=[`${DR}/workspace/skills/`,`${DR}/shared/sprinkles/`,`${DR}/shared/sounds/`,`${DR}/shared/GELATIERE.md`,`${DR}/shared/wiki/WIKI.md`,`${DR}/etc/`],AR=[`auto-applied`,`merged-clean`,`kept-local`,`needs-review`,`unchanged`,`added-new`];function jR(){return Object.fromEntries(AR.map(e=>[e,0]))}function MR(e,t,n,r){let i=jR();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 NR(e){if(e[0]!==`apply`)throw Error(ER);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 PR(e){return e.startsWith(`v`)?e:`v${e}`}function FR(e){if(!kR.some(t=>e.startsWith(t)))return null;let t=e.slice(17);return!t||t.split(`/`).some(e=>e===`.`||e===`..`)||t.startsWith(`/workspace/skills/`)&&pe()?null:t}async function IR(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 ${OR}ms`)),OR)})])}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 LR(e,t){let n=await IR(t,`https://api.github.com/repos/${TR}/git/trees/${encodeURIComponent(e)}?recursive=1`),r=ve(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=FR(e.path);t&&i.set(t,e.path)}return i}function RR(e,t){let n=t.split(`/`).map(encodeURIComponent).join(`/`);return`https://raw.githubusercontent.com/${TR}/${encodeURIComponent(e)}/${n}`}function zR(e,t){return!e||!t||e.byteLength!==t.byteLength?!1:e.every((e,n)=>e===t[n])}function BR(e){try{return new TextDecoder(`utf-8`,{fatal:!0}).decode(e)}catch{return null}}async function VR(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 HR(e,t,n,r,i){let a=`${t}.upgrade-${PR(n)}-to-${PR(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 UR(e,t,n,r,i,a,o){let s=await VR(e.fs,t);if(!a)return{path:t,classification:s?`kept-local`:`unchanged`};if(!i)return s?{path:t,classification:zR(s,a)?`unchanged`:`kept-local`}:{path:t,classification:`added-new`,content:a};if(zR(i,a)||zR(s,a))return{path:t,classification:`unchanged`};if(!s)return{path:t,classification:`kept-local`};if(zR(s,i))return{path:t,classification:`auto-applied`,content:a};let[c,l,u]=[s,i,a].map(BR);if(c!==null&&l!==null&&u!==null){let i=Le(c,l,u,{diff3:!0,labels:{current:`local:${t}`,base:`${PR(n)}:${t}`,other:`${PR(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 HR(e.fs,t,n,r,o)}}return{path:t,classification:`needs-review`,content:a,sidecar:await HR(e.fs,t,n,r,o)}}async function WR(e,t){t.content?await e.writeFile(t.path,t.content):await e.exists(t.path)&&await e.rm(t.path)}async function GR(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 VR(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 WR(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=PR(t),i=PR(n),[a,o]=await Promise.all([LR(r,e.fetch),LR(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)?IR(e.fetch,RR(r,a.get(t))).then(e=>be(e.body)):void 0,o.has(t)?IR(e.fetch,RR(i,o.get(t))).then(e=>be(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 UR(e,r,t,n,i,a,l));return await GR(e.fs,u),u}async function qR(e){let{version:t,releasedAt:n,buildId:r}=et(),i=[],a=null,o=e.getLastSeen??tt();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:`${ER}\n`,stderr:``,exitCode:0};if(t[0]===`status`)return t.length>1?{stdout:MR(``,``,[],[`unsupported argument: ${t[1]}`]),stderr:``,exitCode:1}:{stdout:await qR(e),stderr:``,exitCode:0};let n=``,r=``;try{({from:n,to:r}=NR(t));let i=await KR(e,n,r),a=i.some(e=>e.classification===`needs-review`);return{stdout:MR(n,r,i,[]),stderr:``,exitCode:+!!a}}catch(e){let t=e instanceof Error?e.message:String(e);return{stdout:MR(n,r,[],[t]),stderr:``,exitCode:1}}})}const YR=`usage: uptime [-p|--pretty] [-s|--since]`,XR=`${YR}
|
|
3146
3166
|
|
|
3147
3167
|
Print how long this SLICC has been running. The clock starts when the browser
|
|
3148
3168
|
window was last loaded — a reload is a reboot.
|
|
@@ -3158,7 +3178,7 @@ The load average is the average number of live kernel processes over the last
|
|
|
3158
3178
|
processes are retained in bounded numbers, so a long burst of short commands
|
|
3159
3179
|
can under-report the older windows. The user count is always 1: a SLICC
|
|
3160
3180
|
runtime has one user identity (see \`id\`).
|
|
3161
|
-
`,
|
|
3181
|
+
`,ZR=[1,5,15],QR=6e4,$R=60*QR,ez=24*$R;function tz(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.list==`function`?e:null}function nz(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 rz(e){let t=Math.max(0,e),n=Math.floor(t/ez),r=Math.floor(t%ez/$R),i=Math.floor(t%$R/QR),a=r>0?`${r}:${String(i).padStart(2,`0`)}`:`${i} min`;return n===0?a:`${n} ${n===1?`day`:`days`}, ${a}`}function iz(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/ez),`day`),r(Math.floor(t%ez/$R),`hour`),r(Math.floor(t%$R/QR),`minute`),n.length===0?`up ${Math.floor(t/1e3)} seconds`:`up ${n.join(`, `)}`}function az(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 oz(e){let t=new Date(e),n=e=>String(e).padStart(2,`0`);return`${n(t.getHours())}:${n(t.getMinutes())}:${n(t.getSeconds())}`}function sz(e,t,n){let r=ZR.map(r=>nz(e,t,r*QR,n).toFixed(2));return` ${oz(t)} up ${rz(t-n)}, 1 user, load average: ${r.join(`, `)}\n`}function cz(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 lz(e={}){return S(`uptime`,async t=>{let n=cz(t);if(typeof n!=`string`)return{stdout:``,stderr:`uptime: ${n.error}\n${YR}\n`,exitCode:1};if(n===`help`)return{stdout:XR,stderr:``,exitCode:0};if(n===`version`)return{stdout:`uptime (SLICC) ${et().version}\n`,stderr:``,exitCode:0};let r=e.now?e.now():Date.now(),i=e.bootedAt?e.bootedAt():ya();if(n===`since`)return uz(`${az(i)}\n`);if(n===`pretty`)return uz(`${iz(r-i)}\n`);let a=e.processManager??tz();return uz(sz(a?a.list():[],r,i))})}function uz(e){return{stdout:e,stderr:``,exitCode:0}}const dz=new Set([`--vid`,`--pid`,`--class`,`--subclass`,`--protocol`,`--serial`,`--request-type`,`--recipient`,`--request`,`--value`,`--index`,`--__resolved`]);function fz(e){return Dn(e,dz)}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 pz(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 mz=new Set([`standard`,`class`,`vendor`]),hz=new Set([`device`,`interface`,`endpoint`,`other`]);function gz(e){let t=e.get(`--request-type`)??`vendor`,n=e.get(`--recipient`)??`device`;if(!mz.has(t))throw Error(`invalid --request-type: '${t}'`);if(!hz.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 _z(e){let t=pi(e.stdin),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e)&255;return n}function vz(e){return Array.from(e,e=>e.toString(16).padStart(2,`0`)).join(` `)}function yz(e){return`0x${e.toString(16).padStart(4,`0`)}`}function bz(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${yz(e.vendorId)}:${yz(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 xz=`usb - access USB devices via WebUSB
|
|
3162
3182
|
|
|
3163
3183
|
Usage: usb <subcommand> [options]
|
|
3164
3184
|
|
|
@@ -3197,11 +3217,11 @@ Options:
|
|
|
3197
3217
|
-h, --help
|
|
3198
3218
|
|
|
3199
3219
|
Transfers are capped at ${fi} bytes (4 MiB).
|
|
3200
|
-
`;function
|
|
3201
|
-
`):X(`${t.map(
|
|
3202
|
-
`)}\n`)}async function
|
|
3220
|
+
`;function Sz(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?`${vz(e)}\n`:``)}async function Cz(e){let t=await e.list();return t.length===0?X(`no granted USB devices
|
|
3221
|
+
`):X(`${t.map(bz).join(`
|
|
3222
|
+
`)}\n`)}async function wz(e,t){let n=e.get(`--__resolved`);if(n)return X(`${bz(await t.info(n))}\n`);let r=pz(e),i=ke();if(i){let e=await cS(`usb-device`,r,i);if(e.handle)return X(`${bz(await t.info(e.handle))}\n`);let n=e.info,a=ui();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=di().register(o);return X(`${bz(li(s,o))}\n`)}return X(`${bz(await t.request(r))}\n`)}async function Tz(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 Ez(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 Dz(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 Oz(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 kz(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`):Sz((await n.controlIn(i,gz(t),o)).bytes,r)}async function Az(e,t,n,r){let i=e[1];if(!i)return Z(`control-out: handle required`);let a=_z(t);return a.length>4194304?Z(`control-out payload exceeds 4 MiB limit`):X(`${(await r.controlOut(i,gz(n),a)).bytesWritten} bytes written\n`)}async function jz(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`):Sz((await n.transferIn(i,Y(a,`endpoint`),s)).bytes,r)}async function Mz(e,t,n,r){let[,i,a]=e;if(!i||a===void 0)return Z(`transfer-out: handle and endpoint required`);let o=_z(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 Nz(e,t,n){let{positionals:r,flags:i,bools:a}=fz(e),o=r[0],s=a.has(`--raw`);switch(o){case`list`:return Cz(n);case`request`:return wz(i,n);case`open`:case`close`:case`reset`:return Tz(o,r,n,a);case`clear-halt`:return Ez(r,n);case`select-config`:return Dz(r,n);case`claim`:case`release`:return Oz(o,r,n,a);case`control-in`:return kz(r,i,n,s);case`control-out`:return Az(r,t,i,n);case`transfer-in`:return jz(r,i,n,s);case`transfer-out`:return Mz(r,t,i,n);default:return Z(`unknown subcommand '${o??``}'. Try 'usb --help'.`)}}function Pz(){return S(`usb`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return X(xz);let n=Gr(le(),y());if(!n)return Z(`WebUSB is unavailable in this environment`);try{return await Nz(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 Fz=`/workspace/.v86`,Iz=`v86 - run an x86 virtual machine (v86 wasm engine)
|
|
3203
3223
|
|
|
3204
|
-
Requires: ${N} v86@${
|
|
3224
|
+
Requires: ${N} v86@${YO}
|
|
3205
3225
|
|
|
3206
3226
|
Usage:
|
|
3207
3227
|
v86 start [boot options] Boot a VM in the background (prints pid)
|
|
@@ -3235,7 +3255,7 @@ Boot options (QEMU-flavored):
|
|
|
3235
3255
|
proxy — no gateway needed, https upstream via the proxy
|
|
3236
3256
|
-vga <MiB> SVGA/VBE video memory (default 8, max 64) —
|
|
3237
3257
|
raise for high-res VESA modes (1080p32 needs ~9)
|
|
3238
|
-
-bios <path> -vgabios <path> BIOS blobs (default ${
|
|
3258
|
+
-bios <path> -vgabios <path> BIOS blobs (default ${Fz}/{seabios,vgabios}.bin)
|
|
3239
3259
|
-nographic Serial-only guest (skip VGA)
|
|
3240
3260
|
|
|
3241
3261
|
Notes:
|
|
@@ -3243,19 +3263,19 @@ Notes:
|
|
|
3243
3263
|
(Alpine, FreeDOS, Buildroot Linux) work best.
|
|
3244
3264
|
- The copy.sh Arch Linux image boots via -state + -fs9p; see the v86 skill.
|
|
3245
3265
|
- BIOS blobs are not bundled; download once:
|
|
3246
|
-
mkdir -p ${
|
|
3247
|
-
curl -o ${
|
|
3248
|
-
curl -o ${
|
|
3249
|
-
`,
|
|
3250
|
-
mkdir -p ${
|
|
3251
|
-
curl -o ${
|
|
3252
|
-
curl -o ${
|
|
3253
|
-
or pass -bios / -vgabios with explicit VFS paths.`,
|
|
3266
|
+
mkdir -p ${Fz}
|
|
3267
|
+
curl -o ${Fz}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3268
|
+
curl -o ${Fz}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3269
|
+
`,Lz=`v86: BIOS images not found. Download them once:
|
|
3270
|
+
mkdir -p ${Fz}
|
|
3271
|
+
curl -o ${Fz}/seabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/seabios.bin
|
|
3272
|
+
curl -o ${Fz}/vgabios.bin https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin
|
|
3273
|
+
or pass -bios / -vgabios with explicit VFS paths.`,Rz={"-n":zz,"-name":zz,"--name":zz,"-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)=>Bz(e,`cdrom`,t),"-hda":(e,t)=>Bz(e,`hda`,t),"-fda":(e,t)=>Bz(e,`fda`,t),"-kernel":(e,t)=>Bz(e,`kernel`,t),"-initrd":(e,t)=>Bz(e,`initrd`,t),"-append":(e,t)=>Bz(e,`append`,t),"-bios":(e,t)=>Bz(e,`bios`,t),"-vgabios":(e,t)=>Bz(e,`vgabios`,t),"-state":(e,t)=>Bz(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 zz(e,t){return/^[A-Za-z0-9_-]+$/.test(t)?(e.name=t,null):`invalid VM name '${t}'`}function Bz(e,t,n){return e[t]=n,null}const Vz=[...Object.keys(Rz),`--fps`,`--tail`,`--send`,`--to`];function Hz(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(Rz,r)?Rz[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 Uz(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 Wz(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 Gz(e){return pa(e)||Q(`no VM named '${e}' — boot one with \`v86 start -n ${e} ...\``)}function Kz(e){return`exitCode`in e}async function qz(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 Yz(){let e=globalThis.__slicc_pm;return e instanceof Object&&typeof e.signal==`function`?e:null}function Xz(e={}){return S(`v86`,async(t,n)=>{if(t.length===0||t[0]===`--help`||t[0]===`-h`||t[0]===`help`)return $(Iz);if(t[0]===`--version`)return Zz(n,e);let r=t[0];if(w(t.slice(1),{valueFlags:Vz}))return $(st(`v86`,r,Iz,{prefix:`v86`}));let i=ot(t.slice(1));try{switch(r){case`start`:return await rB(i,n,e);case`ls`:return aB();case`type`:return await lB(i,n);case`key`:return await uB(i,n);case`mouse`:return await fB(i,n);case`screenshot`:return await pB(i,n);case`text`:return await mB(i,n);case`serve`:return hB(i);case`serial`:return gB(i);case`state`:return await _B(i,n);case`stop`:return await vB(i,e);default:return Q(`unknown subcommand '${r}' — see \`v86 --help\``)}}catch(e){return Q(e instanceof Error?e.message:String(e))}})}async function Zz(e,t){if(t.loadEngine)return $(`v86 ${(await t.loadEngine(Uz(e))).version} (qemu-flavored CLI)\n`);let n=await tk(Uz(e));return n?$(`v86 ${n.version} (qemu-flavored CLI)\n`):Q(XO)}async function Qz(e,t,n){if(e.state&&!e.bios&&!e.vgabios)return null;let r=await qz(t,e.bios??`${Fz}/seabios.bin`,`-bios`);if(`exitCode`in r)return e.bios?r:Q(Lz.replace(/^v86: /u,``));if(n.bios=r,e.nographic)return null;let i=await qz(t,e.vgabios??`${Fz}/vgabios.bin`,`-vgabios`);return`exitCode`in i?e.vgabios?i:Q(Lz.replace(/^v86: /u,``)):(n.vga_bios=i,null)}async function $z(e,t,n){let r=await Qz(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 qz(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 qz(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 eB=6e4;function tB(e){return e.v86?Promise.resolve():new Promise((t,n)=>{let r=setTimeout(()=>n(Error(`engine init timed out after ${eB/1e3}s`)),eB);e.add_listener(`emulator-loaded`,()=>{clearTimeout(r),t()})})}function nB(e,t){let n=e.network_adapter;if(!n||typeof n.fetch!=`function`)return Q(`relay=fetch: engine exposed no fetch-relay network adapter`);let r=t.proxiedFetch??g();return n.fetch=async(e,t)=>{let n=e.replace(/^http:\/\/(?!localhost[:/]|127\.0\.0\.1[:/])/u,`https://`),i={};t?.headers?.forEach((e,t)=>{i[t]=e});let a;if(t?.body){let e=``;for(let n of t.body)e+=String.fromCharCode(n);a=e}let o=await r(n,{method:t?.method,headers:i,body:a}),s=o.body,c=s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength);return{status:o.status,statusText:o.statusText,headers:new Headers(o.headers),redirected:!1,url:o.url,arrayBuffer:async()=>c}},null}async function rB(e,t,n){let r=Hz(e);if(!r.ok)return Q(r.error);let i=r.parsed;if(pa(i.name))return Q(`VM '${i.name}' already running — stop it first or pick another -n name`);let a=Uz(t),o=n.loadEngine?await n.loadEngine(a):await QO({ipk:a}),s={wasm_fn:rk(o.wasmModule),memory_size:i.memoryMib*1024*1024,vga_memory_size:i.vgaMemoryMib*1024*1024,autostart:!1,disable_speaker:!0,fastboot:!0},c=await $z(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??Yz();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`,()=>{iB(u,d)})}fa(u);try{if(await tB(l),i.netRelay===`fetch`){let e=nB(l,n);if(e)return await iB(u,d),e}da(u),await l.run()}catch(e){return await iB(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 iB(e,t){ma(e),ua(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 aB(){let e=la();if(e.length===0)return $(`no VMs running
|
|
3254
3274
|
`);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(`
|
|
3255
|
-
`)}\n`)}function
|
|
3275
|
+
`)}\n`)}function oB(e,t){return`prefer: computer ${e} -c ${t}\n`}async function sB(e,t,n,r){let i=Gz(t);if(Kz(i))return i;let[{runComputer:a},{getComputerRegistry:o,installComputerRegistry:s},c]=await Promise.all([import(`./run-aUbSngAa.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),cB(await a([`-c`,l,...n],e,{registry:u}),r,l)}function cB(e,t,n){let r=oB(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 lB(e,t){let{name:n,rest:r}=Wz(e);if(r.length===0){let e=Gz(n);return Kz(e)?e:Q(`type: no text supplied`)}return sB(t,n,[`type`,`--`,...r],`type`)}async function uB(e,t){let{name:n,rest:r}=Wz(e);if(r.length===0){let e=Gz(n);return Kz(e)?e:Q(`key: no chord supplied`)}return sB(t,n,[`key`,...r],`key`)}const dB=[`left`,`middle`,`right`];async function fB(e,t){let{name:n,rest:r}=Wz(e),i=Gz(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?sB(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>`):sB(t,n,[`--native`,`mousemove`,e,i,`--relative`],`mousemove`)}if(o===`click`){let e=r[1]??`left`;if(!dB.includes(e))return Q(`mouse: unknown button '${r[1]}'`);let i=[`click`,e];return r.includes(`--double`)&&i.push(`--repeat`,`2`),sB(t,n,i,`click`)}return Q(`mouse: expected move <dx> <dy>, click [button], or --to <x>,<y>`)}async function pB(e,t){let{name:n,rest:r}=Wz(e);return sB(t,n,[`screenshot`,...r],`screenshot`)}async function mB(e,t){let{name:n}=Wz(e);return sB(t,n,[`text`],`text`)}function hB(e){let{name:t}=Wz(e);return $(`v86 serve is retired.\nUse: computer watch -c v86:${t}\nLive frames go to the overlay, lightbox, and bash rows.\n`)}function gB(e){let{name:t,rest:n}=Wz(e),r=Gz(t);if(Kz(r))return r;let i=n.indexOf(`--send`);if(i!==-1){let e=n.slice(i+1).join(` `).replace(/\\n/gu,`
|
|
3256
3276
|
`);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(`
|
|
3257
3277
|
`).slice(-Math.max(1,e)).join(`
|
|
3258
|
-
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function
|
|
3278
|
+
`)}\n`)}return $(r.serial.buffer?`${r.serial.buffer}\n`:``)}async function _B(e,t){let{name:n,rest:r}=Wz(e),i=Gz(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 vB(e,t){let{name:n,rest:r}=Wz(e),i=Gz(n);if(Kz(i))return i;let a=t.processManager??Yz();return r.includes(`--force`)&&a&&i.pid!==null?(a.signal(i.pid,`SIGKILL`),$(`VM '${n}' killed\n`)):(await iB(i,a),$(`VM '${n}' stopped\n`))}function yB(e={}){return S(`wasm`,async(t,n)=>{let{runWasmCommand:r}=await import(`./run-8y7BhTkZ.js`);return r(t,n,{processConfig:e.buildProcessConfig?.(n.env),terminal:e.terminal,gate:e.gate,commands:e.commands,gitIdentity:e.gitIdentity})})}const bB=[`--name`,`--filter`,`--scoop`],xB={state:`inactive`,session:null};function SB(){return{stdout:`usage: webhook <command> [options]
|
|
3259
3279
|
|
|
3260
3280
|
Commands:
|
|
3261
3281
|
create [--scoop <name>] [--name <name>] [--filter <code>] Create a new webhook endpoint
|
|
@@ -3275,21 +3295,21 @@ Examples:
|
|
|
3275
3295
|
webhook create --scoop slack-relay --name slack --filter "(e) => ({ text: e.body.text, user: e.body.user })"
|
|
3276
3296
|
webhook list
|
|
3277
3297
|
webhook delete abc123
|
|
3278
|
-
`,stderr:``,exitCode:0}}function
|
|
3298
|
+
`,stderr:``,exitCode:0}}function CB(e){return e().session?.webhookUrl??null}function wB(e,t,n){return t?ha(t,e):n()?ga(self.location.href,e):`(URL unavailable — connect a leader tray)`}function TB(e){return{stdout:``,stderr:`webhook ${e}: kernel host has not booted yet — try again in a moment\n`,exitCode:1}}async function EB(e){if(e.length!==1)return{stdout:``,stderr:`webhook rotate: takes no arguments
|
|
3279
3299
|
`,exitCode:1};let t=y();if(!t)return{stdout:``,stderr:`webhook rotate: no leader panel connected
|
|
3280
3300
|
`,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.
|
|
3281
3301
|
`,stderr:``,exitCode:0}}catch{return{stdout:``,stderr:`webhook rotate: rotation failed; reconnect the leader and retry
|
|
3282
|
-
`,exitCode:1}}}async function
|
|
3283
|
-
`,exitCode:1};let s=
|
|
3284
|
-
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=
|
|
3302
|
+
`,exitCode:1}}}async function DB(e,t,n){let r=C(e.slice(1),{value:bB});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=Zi(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
|
|
3303
|
+
`,exitCode:1};let s=AB(t);if(s)return s;let c=await zy();if(!c)return TB(`create`);let l=await Vy(c,`webhook create`,r.values.get(`--scoop`));if(l)return{stdout:``,stderr:l,exitCode:1};let u=await c.createWebhook(i,o,a),d=jB(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 OB(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 zy();if(!r)return TB(`list`);let i=await r.listWebhooks();if(i.length===0)return{stdout:`No active webhooks
|
|
3304
|
+
`,stderr:``,exitCode:0};let{trayUrlBase:a,urlResolutionError:o}=MB(t);return{stdout:NB(i.map(e=>({id:e.id,name:e.name,url:wB(e.id,a,t.hasLocalNodeServer),createdAt:e.createdAt,filter:e.filter,scoop:e.scoop})),a,o,t.hasLocalNodeServer),stderr:``,exitCode:0}}async function kB(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
|
|
3285
3305
|
`,exitCode:1};if(!r)return{stdout:``,stderr:`webhook delete: requires an ID
|
|
3286
|
-
`,exitCode:1};let i=await zy();if(!i)return
|
|
3287
|
-
`,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
|
|
3288
|
-
`,exitCode:1}}return null}function
|
|
3306
|
+
`,exitCode:1};let i=await zy();if(!i)return TB(`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
|
|
3307
|
+
`,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 AB(e){if(e.hasLocalNodeServer())return null;if(!CB(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}")`)+`
|
|
3308
|
+
`,exitCode:1}}return null}function jB(e,t){try{return wB(e,CB(t.getLeaderStatus),t.hasLocalNodeServer)}catch(e){return`(URL resolution failed: ${e instanceof Error?e.message:String(e)})`}}function MB(e){try{return{trayUrlBase:CB(e.getLeaderStatus),urlResolutionError:null}}catch(e){return{trayUrlBase:null,urlResolutionError:e instanceof Error?e.message:String(e)}}}function NB(e,t,n,r){let i=`Active webhooks:
|
|
3289
3309
|
`;for(let t of e)i+=` ${t.id} ${t.name.padEnd(20)} ${t.url}`,t.scoop&&(i+=` -> ${t.scoop}`),t.filter&&(i+=` [filtered]`),i+=`
|
|
3290
3310
|
`;return n?i+=`\nNote: webhook URL resolution failed (${n}). Try again once the tray is connected.\n`:!r()&&!t&&(i+=`
|
|
3291
3311
|
Note: webhook URLs require a leader tray. Configure one in Settings to expose POST endpoints.
|
|
3292
|
-
`),i}function
|
|
3312
|
+
`),i}function PB(e={}){let t={hasLocalNodeServer:e.hasLocalNodeServer??(()=>!0),getLeaderStatus:e.getLeaderStatus??(()=>xB)};return S(`webhook`,async(e,n)=>{if(e.length===0)return SB();let r=e[0];if(w(e,{valueFlags:r===`create`?bB:void 0}))return SB();try{switch(r){case`create`:return await DB(e,t,n.env);case`list`:return await OB(e,t);case`delete`:return await kB(e,t);case`rotate`:return await EB(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 FB(){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 IB(){return{stdout:`usage: websocat [FLAGS] [OPTIONS] <ws://URL | wss://URL>
|
|
3293
3313
|
|
|
3294
3314
|
Minimal websocat client. Sends stdin lines as WebSocket messages and prints
|
|
3295
3315
|
received messages to stdout. Server mode and advanced specifiers (exec:, tcp:,
|
|
@@ -3331,14 +3351,14 @@ EXAMPLES:
|
|
|
3331
3351
|
echo 'Page.navigate {"url":"https://example.com"}' \\
|
|
3332
3352
|
| websocat -1 --jsonrpc --jsonrpc-omit-jsonrpc \\
|
|
3333
3353
|
ws://127.0.0.1:9222/devtools/page/<id>
|
|
3334
|
-
`,stderr:``,exitCode:0}}const
|
|
3335
|
-
`)}function
|
|
3336
|
-
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function
|
|
3354
|
+
`,stderr:``,exitCode:0}}const LB=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 RB(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 zB(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 BB(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 VB(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 HB(e,t){return t===`-v`?(e.verbose+=1,!0):t===`-vv`&&(e.verbose+=2,!0)}function UB(e,t,n,r,i){let a=RB(t,n,r,e);return a?(i(a.value),{nextIndex:a.next}):{stop:!0}}function WB(e,t,n,r,i,a,o){let s=RB(t,n,r,e);if(!s)return{stop:!0};let c=zB(e,s.value,i,o);return c===null?{stop:!0}:(a(c),{nextIndex:s.next})}function GB(e,t){return t.some(t=>e===t||e.startsWith(`${t}=`))}const KB=[(e,t,n,r)=>{if(!GB(r,[`--close-status-code`]))return null;let i=RB(t,n,`--close-status-code`,e);if(!i)return{stop:!0};let a=BB(e,i.value);return a===null?{stop:!0}:(e.closeStatus=a,{nextIndex:i.next})},(e,t,n,r)=>GB(r,[`--close-reason`])?UB(e,t,n,`--close-reason`,t=>{e.closeReason=t}):null,(e,t,n,r)=>GB(r,[`-B`,`--buffer-size`])?WB(e,t,n,r===`-B`?`-B`:`--buffer-size`,`--buffer-size`,t=>{e.bufferSize=t}):null,(e,t,n,r)=>GB(r,[`--max-messages`])?WB(e,t,n,`--max-messages`,`--max-messages`,t=>{e.maxMessages=t}):null,(e,t,n,r)=>GB(r,[`--protocol`])?UB(e,t,n,`--protocol`,t=>{e.protocol=t}):null,(e,t,n,r)=>{if(!GB(r,[`--ping-interval`]))return null;let i=RB(t,n,`--ping-interval`,e);return i?(e.pingInterval=Number(i.value),{nextIndex:i.next}):{stop:!0}},(e,t,n,r)=>GB(r,[`--conn-timeout`])?WB(e,t,n,`--conn-timeout`,`--conn-timeout`,t=>{e.connTimeoutMs=Math.round(t*1e3)},`positive seconds`):null,(e,t,n,r)=>GB(r,[`-H`,`--header`])?UB(e,t,n,r===`-H`?`-H`:`--header`,t=>{e.customHeaders.push(t)}):null];function qB(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)
|
|
3355
|
+
`)}function YB(e){let t=FB();for(let n=0;n<e.length;n+=1){let r=e[n];if(r===`-h`||r===`--help`)return t.showHelp=!0,t;if(LB.has(r)||LB.has(r.split(`=`)[0]))return t.error=`websocat: flag '${r}' is not supported in slicc's minimal client\n`,t;if(VB(t,r)||HB(t,r))continue;let i=qB(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 XB(e,t){if(!e)return[];let n=t?`\0`:`
|
|
3356
|
+
`,r=e.split(n);return r.length>0&&r[r.length-1]===``&&r.pop(),r}function ZB(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 QB(e){try{return new TextDecoder(`utf-8`,{fatal:!1}).decode(e)}catch{return t(e)}}function $B(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 eV=1e4;function tV(){let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}}function nV(){let e=!1,t=tV();return{...t,settle:n=>{e||(e=!0,t.resolve(n))}}}function rV(e,t){return e.length?e.join(t)+t:``}function iV(e){return e.length?e.join(`
|
|
3337
3357
|
`)+`
|
|
3338
|
-
`:``}function
|
|
3339
|
-
`,a=
|
|
3340
|
-
`);if(!/^wss?:\/\//i.test(r.url))return
|
|
3341
|
-
`,exitCode:1}}function
|
|
3358
|
+
`:``}function aV(e,t,n){e.quiet||t.push(`websocat: ${n}`)}function oV(e,t){e.verbose<1||(e.customHeaders.length>0&&aV(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&&aV(e,t,`--ping-interval has no effect in browsers (no ping API exposed)`),e.insecure&&aV(e,t,`-k/--insecure has no effect in browsers`))}function sV(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 cV(e,t,n,r){if(n.outLines.length<eV){n.outLines.push(r);return}n.droppedForOverflow===0&&aV(e,t,`output buffer reached ${eV} 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 lV(e,n,r){let{bytes:i,isBinary:a}=$B(r);return i.length>e.bufferSize&&(aV(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):QB(i)}function uV(e,t){return e.maxMessages!==void 0&&t>=e.maxMessages||e.oneMessage}function dV(e,t,n){try{n===void 0?e.close(t):e.close(t,n)}catch{}}function fV(e,t){setTimeout(()=>{dV(t,e.closeStatus??1e3,e.closeReason)},0)}function pV(e,t,n){let r=XB(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=ZB(n,i,t.jsonrpcOmit),i+=1),t.binary?e.send(new TextEncoder().encode(r).buffer):e.send(r),a+=1}return a}function mV(e,t,n){!t.oneMessage&&!t.noClose&&(t.exitOnEof||n===0)&&fV(t,e)}async function hV(e,t,n){let r=[];oV(e,r);let i=e.nullTerminated?`\0`:`
|
|
3359
|
+
`,a=sV(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=tV(),u=nV(),d=0,f=!1,p=setTimeout(()=>{f=!0,dV(o,1e3),c||l.reject(Error(`connect timeout`))},e.connTimeoutMs),m=()=>{if(e.noClose){u.settle(d);return}dV(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=lV(e,r,t.data);cV(e,r,s,n)}s.received+=1,uV(e,s.received)&&(s.finishing=!0,m())}},o.onerror=()=>{f||(aV(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&&aV(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:rV(s.outLines,i),stderr:iV(r.concat([`websocat: ${t}`])),exitCode:t===`connect timeout`?124:1}}e.unidirectionalReverse?!e.noClose&&e.exitOnEof&&!e.oneMessage&&fV(e,o):mV(o,e,pV(o,e,t));let h=await u.promise;return s.droppedForOverflow>0&&aV(e,r,`dropped ${s.droppedForOverflow} inbound message(s) due to output buffer cap`),{stdout:rV(s.outLines,i),stderr:iV(r),exitCode:h}}function gV(e){return{stdout:``,stderr:e,exitCode:2}}function _V(e){return e.WebSocketCtor??(typeof WebSocket<`u`?WebSocket:void 0)}async function vV(e,t,n={}){let r=YB(e);if(r.showHelp)return IB();if(r.error)return gV(r.error);if(!r.url)return gV(`websocat: missing ws:// or wss:// URL (use --help for usage)
|
|
3360
|
+
`);if(!/^wss?:\/\//i.test(r.url))return gV(`websocat: URL must start with ws:// or wss://, got '${r.url}'\n`);let i=_V(n);return i?hV(r,t.stdin,i):{stdout:``,stderr:`websocat: no WebSocket implementation available in this runtime
|
|
3361
|
+
`,exitCode:1}}function yV(){return S(`websocat`,async(e,t)=>vV(e,{stdin:P(t.stdin)}))}function bV(){return S(`__wf_progress`,async()=>({stdout:``,stderr:``,exitCode:0}))}const xV={commands:new Map,collisions:[]};async function SV(e,t){let n=nr(t);return e.scriptCatalog?e.scriptCatalog.getJshIndex(n):e.fs?ar(e.fs,n):xV}async function CV(e){return e.scriptCatalog?e.scriptCatalog.getWorkflowCommands():e.fs?gi(e.fs):new Map}async function wV(e){return e.scriptCatalog?e.scriptCatalog.getWasmCommands():new Map}function TV(e,t){return`${e.glue} (wasm, ${e.pkg}${t?`, ${t}`:``})`}function EV(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 ${TV(r)})`),t){let e=n?[t,...n.shadowedPaths]:[t];for(let t of e)a.push(` (shadowed ${t})`)}return a}function DV(e,{collision:t,wasm:n,wf:r}){let i=[e];for(let e of t?.shadowedPaths??[])i.push(` (shadowed ${e})`);return n&&i.push(` ${TV(n,`shadowed by .jsh`)}`),r&&i.push(` ${r.path} (workflow, shadowed by .jsh)`),i}function OV(e,t,n,r,i){let{jshPath:a,wasm:o,wf:s}=t;if(n.has(e))return{lines:EV(e,t),found:!0};if(a)return{lines:DV(a,t),found:!0};if(o){let e=[TV(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 kV(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
|
|
3342
3362
|
|
|
3343
3363
|
Usage: which <command> [command...]
|
|
3344
3364
|
|
|
@@ -3350,9 +3370,9 @@ Prints the path of the given command(s).
|
|
|
3350
3370
|
|
|
3351
3371
|
Exit code 0 if all commands found, 1 if any not found.
|
|
3352
3372
|
`,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
|
|
3353
|
-
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await
|
|
3373
|
+
`,exitCode:1};let i=n.getRegisteredCommands?.()??[],a=new Set(i),o=await SV(t,n.env.get(`PATH`)),s=o.commands,c=new Map(o.collisions.map(e=>[e.name,e])),l=await CV(t),u=await wV(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=OV(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(`
|
|
3354
3374
|
`)+`
|
|
3355
|
-
`:``,stderr:``,exitCode:+!m}})}const
|
|
3375
|
+
`:``,stderr:``,exitCode:+!m}})}const AV=`__slicc_workflows`,jV=String.raw`
|
|
3356
3376
|
class WorkflowError extends Error {}
|
|
3357
3377
|
class WorkflowDeterminismError extends WorkflowError {}
|
|
3358
3378
|
class WorkflowAgentCapError extends WorkflowError {}
|
|
@@ -3465,40 +3485,40 @@ function log(message) {
|
|
|
3465
3485
|
}
|
|
3466
3486
|
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()); } };
|
|
3467
3487
|
function workflow() { throw new WorkflowNestingUnsupportedError('nested workflow() unsupported in SP1'); }
|
|
3468
|
-
`;function
|
|
3488
|
+
`;function MV(){return`WF_RESULT_${globalThis.crypto?.randomUUID?.()??`${Date.now().toString(36)}${Math.random().toString(36).slice(2)}`}`}function NV(e){let t=LV(e);return t===null?{name:null,description:null}:{name:RV(t,`name`),description:RV(t,`description`)}}function PV(e){return e.replace(/\bexport\s+(const|let|var|function|async\s+function|class)\b/g,`$1`)}function FV(e){return`const __emit = console.log.bind(console);
|
|
3469
3489
|
const __stringify = JSON.stringify.bind(JSON);
|
|
3470
|
-
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${
|
|
3490
|
+
const __WF = ${JSON.stringify(e.config)};\n${e.prelude}\nconst __r = await (async () => {\n${PV(e.body)}\n})();\n__emit(${JSON.stringify(e.sentinel)} + __stringify(__r ?? null));\n`}function IV(e,t){let n=e.split(`
|
|
3471
3491
|
`);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(`
|
|
3472
|
-
`).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
|
|
3492
|
+
`).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 LV(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 RV(e,t){let n=RegExp(`\\b${t}\\s*:\\s*(['"\\\`])((?:\\\\.|(?!\\1).)*)\\1`).exec(e);return n?n[2]:null}const zV=e(`workflow-command`),BV=`usage: workflow run <file.js> [--args <json>] [--budget <n>] [--concurrency <n>] [--wait]
|
|
3473
3493
|
workflow run --script '<inline js>' [...]
|
|
3474
3494
|
workflow list
|
|
3475
3495
|
workflow status <runId>
|
|
3476
3496
|
workflow stop <runId>
|
|
3477
3497
|
workflow save <runId> <name> [--force]
|
|
3478
3498
|
Runs a Claude-Code-format dynamic workflow. Default is non-blocking (returns a run id);
|
|
3479
|
-
pass --wait to block and print the full result.`,
|
|
3480
|
-
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return
|
|
3499
|
+
pass --wait to block and print the full result.`,VV=new Set([`list`,`status`,`stop`,`save`]);function HV(){return globalThis[AV]}function UV(){let e=globalThis.navigator?.hardwareConcurrency??8;return Math.min(16,Math.max(8,e*4))}function WV(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 GV(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=UV(),n={budget:null,cap:Math.min(8,t)};for(let r=1;r<e.length;r++){let i=WV(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(VV.has(t[0])&&w(t.slice(1)))return{stdout:BV+`
|
|
3500
|
+
`,stderr:``,exitCode:0};if(t[0]===`list`||t[0]===`status`||t[0]===`stop`)return QV(t,n);if(t[0]===`save`)return ZV(t,n,e);let r=GV(t);if(r.help)return{stdout:BV+`
|
|
3481
3501
|
`,stderr:``,exitCode:0};if(r.error)return{stdout:``,stderr:r.error+`
|
|
3482
|
-
`,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=
|
|
3483
|
-
`,exitCode:1};let s=
|
|
3484
|
-
`,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
|
|
3485
|
-
`,exitCode:1};if(!
|
|
3502
|
+
`,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=NV(i);if(!o.name)return{stdout:``,stderr:`workflow: script must define a meta block with a name (description optional)
|
|
3503
|
+
`,exitCode:1};let s=MV().slice(10,22),c=`/shared/workflow-runs/${s}/scratch/`;await n.fs.mkdir(c,{recursive:!0});let l=MV(),u=FV({prelude:jV,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?qV(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 qV(e,t,n,r,i){let a;try{a=await ti(e,[`workflow`,t],i,void 0,{filename:t})}catch(e){return zV.error(`workflow run failed`,e),{stdout:``,stderr:`workflow: ${e instanceof Error?e.message:String(e)}\n`,exitCode:1}}return $V(r,a,n)}async function JV(e){let t=HV();if(!t)return{stdout:``,stderr:`workflow: run manager not available
|
|
3504
|
+
`,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 YV=/^[a-z0-9][a-z0-9-]*$/,XV=`/workspace/.workflows`;async function ZV(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]
|
|
3505
|
+
`,exitCode:1};if(!YV.test(o))return{stdout:``,stderr:`workflow: invalid name '${o}' (use [a-z0-9][a-z0-9-]*)\n`,exitCode:1};let c=HV()?.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=`${XV}/${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(XV,{recursive:!0}),await t.fs.writeFile(l,c.source);try{await n.syncScriptCommands?.()}catch(e){zV.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 QV(e,t){let n=HV();if(e[0]===`list`){if(!n)return{stdout:``,stderr:`workflow: run manager not available
|
|
3486
3506
|
`,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(`
|
|
3487
3507
|
`):`(no runs)`)+`
|
|
3488
3508
|
`,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(`
|
|
3489
3509
|
`)+`
|
|
3490
|
-
`,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
|
|
3510
|
+
`,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 $V(e,t,n){let{result:r,log:i,hadResult:a}=IV(t.stdout,n),o=e.name?`workflow: ${e.name}${e.description?` — `+e.description:``}\n`:``,s=i?eH(i)+`
|
|
3491
3511
|
`:``;return t.exitCode!==0||!a?{stdout:o+s,stderr:t.stderr||(a?``:`workflow: script produced no result
|
|
3492
3512
|
`),exitCode:t.exitCode||1}:{stdout:o+s+(typeof r==`string`?r:JSON.stringify(r))+`
|
|
3493
|
-
`,stderr:t.stderr,exitCode:0}}function
|
|
3513
|
+
`,stderr:t.stderr,exitCode:0}}function eH(e){return e.split(`
|
|
3494
3514
|
`).map(e=>e.replace(/^WFPHASE/,`▸ `).replace(/^WFLOG/,`· `)).join(`
|
|
3495
|
-
`)}function
|
|
3515
|
+
`)}function tH(e){return{stdout:``,stderr:`xxd: ${e}\n`,exitCode:1}}function nH(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 rH(e,t){let n=e.toString(16).padStart(2,`0`);return t?n.toUpperCase():n}function iH(e){let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return t}function aH(e){return e.replace(/[^0-9a-zA-Z]/g,`_`)}function oH(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?rH(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(`
|
|
3496
3516
|
`)+`
|
|
3497
|
-
`:``}function
|
|
3498
|
-
`}return r}function
|
|
3517
|
+
`:``}function sH(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+=rH(e[i+r],n);r+=a+`
|
|
3518
|
+
`}return r}function cH(e,t,n,r){let i=Array.from(e,e=>`0x${rH(e,n)}`),a=[];for(let e=0;e<i.length;e+=t)a.push(` `+i.slice(e,e+t).join(`, `));let o=a.join(`,
|
|
3499
3519
|
`);return r===null?i.length?o+`
|
|
3500
|
-
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function
|
|
3501
|
-
`)){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
|
|
3520
|
+
`:``:`unsigned char ${r}[] = {\n${o}\n};\nunsigned int ${r}_len = ${e.length};\n`}function lH(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 uH(e){let t=[],n=0;for(let r of e.split(`
|
|
3521
|
+
`)){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 dH={"-u":`upper`,"-p":`plain`,"-ps":`plain`,"-postscript":`plain`,"-i":`include`,"-include":`include`,"-r":`revert`,"-revert":`revert`},fH=[{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 pH(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=dH[r];if(i){t[i]=!0;continue}let a=fH.find(e=>e.exact.includes(r)||e.attached.test(r));if(a){t[a.key]=nH(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 mH(e){return e.includes(`-h`)||e.includes(`--help`)||e.includes(`-help`)}async function hH(e,t,n){if(!n&&t)return e.fs.readFileBuffer(e.fs.resolvePath(e.cwd,t));let r=pi(e.stdin),i=new Uint8Array(r.length);for(let e=0;e<r.length;e++)i[e]=r.charCodeAt(e)&255;return i}function gH(e,t,n,r,i){let a=e.cols&&e.cols>0?e.cols:e.plain?30:e.include?12:16;return e.plain?sH(t,a,e.upper):e.include?cH(t,a,e.upper,i?null:aH(r??``)):oH(t,a,e.group!=null&&e.group>=0?e.group:2,e.upper,n)}function _H(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 vH(){return S(`xxd`,async(e,t)=>{if(mH(e))return{stdout:`usage: xxd [options] [infile [outfile]]
|
|
3502
3522
|
-c cols number of octets per line (default 16; 30 for -p; 12 for -i)
|
|
3503
3523
|
-g bytes number of octets per group (default 2; 0 disables grouping)
|
|
3504
3524
|
-l len stop after len octets
|
|
@@ -3508,8 +3528,8 @@ pass --wait to block and print the full result.`,BV=new Set([`list`,`status`,`st
|
|
|
3508
3528
|
-i output in C include style
|
|
3509
3529
|
-r reverse: convert a hex dump back to binary (-r -p for plain)
|
|
3510
3530
|
-h show this help
|
|
3511
|
-
`,stderr:``,exitCode:0};let n;try{n=
|
|
3512
|
-
`,stderr:``,exitCode:0}}function
|
|
3513
|
-
`,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(/^\.\//,``))||mr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await
|
|
3514
|
-
`,exitCode:1};let c=jt(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function xH(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function SH(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[VO(`ipk`,r),VO(`npm`,r),VO(`i`,r),Ak(`ipx`,{fs:t,fetch:n}),Ak(`npx`,{fs:t,fetch:n}),Lb(`di`,{fs:t,fetch:n}),Lb(`uv`,{fs:t,fetch:n}),qR({fs:t,fetch:n})]}function CH(e){let t={buildProcessConfig:e.buildProcessConfig};return[`python3`,`python`,`pyodide`].map(e=>tP(e,t))}function wH(e){let t=e.scriptCatalog;return{buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:t&&(()=>t.getWasmCommands()),gitIdentity:e.gitIdentity}}function TH(e={}){let t=[KE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),re(),PI(),$F(),KF(e.browserAPI,e.fs),zM(e.browserAPI),Qy(e.browserAPI),ZD(e),bH(),CR(),hL(e.fs?{fs:e.fs}:{}),VI(),JI(),GI(),qv(),vB(wH(e)),vC(wH(e)),_H(),OI(`sqlite3`),OI(`sqllite`),ML(),QL(),$x(),kv(),nM({buildProcessConfig:e.buildProcessConfig}),nM({buildProcessConfig:e.buildProcessConfig},`jsh`),...CH(e),...SH(e),...e.fs?[_C({fs:e.fs})]:[],...e.fs?[mj({fs:e.fs})]:[],...e.fetch?[rD({fetch:e.fetch,streamFetch:e.streamFetch})]:[],KS(),qS(),aC(),NB(e.webhook),vV(),Zy(e.crontask),SA({fs:e.fs,scriptCatalog:e.scriptCatalog}),aN({fs:e.fs,fetch:e.fetch}),gC(),yI(),BM(),VM(`pdftk`),VM(`pdf`),Av(`biscotto`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Av(`biscotti`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),ZM(`pdftoppm`),ZM(`pdftocairo`),QM(`pdftotext`),Fy(`convert`),Fy(`magick`),OV({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),nR(),vR(),qD(),JD(),yR(),hj(),aP(),gA(),wx(),_M(),gM(),pA(),_F(xH(e)),Bm(e.gitCredential),vP({fs:e.fs}),GP(),Wv(),Gv(),Kv(`xclip`),Kv(`xsel`),WP(),PC(),t_(),n_(),Hj(e.fs),ct(),sM(),S_({getParentJid:e.getParentJid}),Mx(),DN({processManager:e.processManager}),cz({processManager:e.processManager}),Nk({processManager:e.processManager}),jk({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...T_(),pj(),aA(),Nz(),kD(),PS(),Yz({processManager:e.processManager}),Xv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),GS(),Lv({registry:e.cherryRuntimeRegistry}),sb(),pb({fs:e.fs}),mb({fs:e.fs}),II(e.sudoCommand),GV({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),yV(),QF()];return e.fs&&(eN(),t.push(...Vn.map(t=>UE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let EH=null;function DH(e){EH=e}function OH(e){EH?.(e)}var kH=Ft();const AH=Reflect.get(nt,`DefenseInDepthBox`);function jH(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function MH(e,t){if(typeof e!=`string`)return e;let n=jH(t);if(n===`binary`||n===`latin1`){let t=_e(e);if(t)return t}return kH.Buffer.from(e,n)}function NH(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}var PH=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=Ve(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=NH(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=AH?.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=jH(t),o=kH.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&m(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 kH.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(NH(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(NH(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 He(`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 FH(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?FH(e.getUnderlyingFS?.()):null}async function IH(e){let t=ge(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function LH(){let e=ge(`github`);if(!e)return jm;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??jm,...t??[]]}const RH=e(`almost-bash-shell`),zH=`__SLICC_RUN_PID`,BH=`__SLICC_OUTPUT_TEE__`;function VH(e){let t=e?.get(zH);if(t===void 0)return;let n=Number.parseInt(t,10);return Number.isSafeInteger(n)&&n>0?n:void 0}function HH(e){if(!(zH in e)&&!(BH in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[zH]:t,[BH]:n,[mm]:r,[gp]:i,[_p]:a,...o}=e;return o}function UH(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 WH=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(VH(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:fp,PATH:rr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return TH({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands],fs:e.fs,fetch:t,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,terminal:e.terminal,gateNativeCommand:this.gateNativeCommand,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]},gitCredential:{githubToken:(e,t)=>this.gitCommands.githubCredential(e,t),githubDomains:LH},gitIdentity:()=>this.gitCommands.identity()})}constructor(t){this.options=t,this.vfsAdapter=new PH(t.fs),this.progress=new Op({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new ip({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:IH}),this.mountCommands=new js({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Gm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=FH(i)??FH(a);this.scriptCatalog=t.scriptCatalog??new vi({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||tr(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:Np(this.progress)}),l=_({progress:Np(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),zh(t.fs),Ig(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...it(),...rt()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new at({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:em(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:op(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin($m),this.allowedCommands!==null){let e=this.bash;for(let t of rt())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let m=d.map(e=>e.name),h=p??[...it(),...rt()];this.builtinCommandNames=new Set([...h,...m]),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 Qr(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 ir(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 pp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=mp(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){RH.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(OH(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.usesGnuBash())return this.runOnGnuBash(e,t,n,r,i,a);let o=gm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[zH]:String(n)},...i===void 0?{}:{[BH]:i},...o?{[mm]:o}:{}},cwd:this.cwd,umask:this.umask,signal:t,...r===``?{}:{stdin:r,stdinKind:`bytes`}},c=this.lastEnv.PATH,l=UH([t,this.commandAbort.signal]);s.signal=l.signal,this.activeRunSignal=l.signal;let u=this.beginScriptRun(e),d;try{d=await this.bash.exec(Sp(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.flushPendingCommandGrants(),d=Cp(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=HH(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 wp(await e(d,this.cwd,this.vfsAdapter),d.pipeStatus)}return d}applyPendingEnvWrites(){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}async usesGnuBash(){return!this.options.gnuBash||this.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await this.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let{runWasmCommand:o,withoutRealmDefaults:s}=await import(`./run-CGZiR3xh.js`),c=gm(e),l={...this.lastEnv,...n===void 0?{}:{[zH]:String(n)},...c?{[mm]:c}:{}},u=i===void 0?void 0:this.outputTees.get(i),d=await dp(e,{env:l,run:(e,i,a)=>o(e,this.wasmContext(i,t,r),{processConfig:this.buildJshProcessConfig(n),gate:this.gateNativeCommand,onOutput:u,fds:a,commands:()=>this.scriptCatalog.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}),f=this.lastEnv.PATH;return d.state&&(this.cwd=d.state.cwd,this.lastEnv=lp(s(d.state.env,l),[zH,mm,BH])),this.lastEnv.PATH!==f&&await this.syncJshCommands().catch(()=>void 0),await this.flushPendingCommandGrants(),this.applyPendingEnvWrites(),{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:{...this.lastEnv},...a&&d.state?{pipeStatus:d.state.pipeStatus}:{}}}wasmContext(e,t,n){return{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>this.bash.exec(e,{...t,umask:this.umask})}}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.isTransparentGatingEnabled()||Am.has(e))return null;let r=await this.gateCommandDispatch(e,t,n[mm]);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`?im(t,this.progress):om(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(BH),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await cm(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(BH);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=Yp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Zp(t,this.progress,Xp(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()||Am.has(e.name))return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(mm))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=um(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await fm(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=ut(e);if(!n)return;let r=`${ft}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof He&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
3515
|
-
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(Am.get(e)??e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)
|
|
3531
|
+
`,stderr:``,exitCode:0};let n;try{n=pH(e)}catch(e){return tH(e.message)}let r=n.positional[0],i=n.positional[1],a=!r||r===`-`,o;try{o=await hH(t,r,a)}catch{return tH(`${r}: No such file or directory`)}if(n.revert){let e=iH(o),r=n.plain?lH(e):uH(e);return i?(await t.fs.writeFile(t.fs.resolvePath(t.cwd,i),r),{stdout:``,stderr:``,exitCode:0}):{stdout:iH(r),stderr:``,exitCode:0}}let{data:s,base:c}=_H(n,o),l=gH(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 yH(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=pr(t,o),s=n?`${n}/${o}`:o;a+=await yH(e,i,s,r)}return a}function bH(){return{stdout:`usage: zip [-r] <archive.zip> <path> [path...]
|
|
3532
|
+
`,stderr:``,exitCode:0}}function xH(){return S(`zip`,async(e,t)=>{if(e.length===0||e.includes(`--help`)||e.includes(`-h`))return bH();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
|
|
3533
|
+
`,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(/^\.\//,``))||mr(r);if(i.isDirectory&&!n)return{stdout:``,stderr:`zip: ${e} is a directory (use -r)\n`,exitCode:1};s+=await yH(t,r,a,o)}if(s===0)return{stdout:``,stderr:`zip: nothing to do
|
|
3534
|
+
`,exitCode:1};let c=jt(o);return await t.fs.writeFile(i,c),{stdout:`created ${i} (${s} file(s))\n`,stderr:``,exitCode:0}})}function SH(e){return{setEnv:e.setEnv,unsetEnv:e.unsetEnv,broker:e.sudoCommand?.broker}}function CH(e){let{fs:t,fetch:n}=e;if(!t||!n)return[];let r={fs:t,fetch:n,scriptCatalog:e.scriptCatalog,syncScriptCommands:e.syncScriptCommands};return[HO(`ipk`,r),HO(`npm`,r),HO(`i`,r),jk(`ipx`,{fs:t,fetch:n}),jk(`npx`,{fs:t,fetch:n}),Lb(`di`,{fs:t,fetch:n}),Lb(`uv`,{fs:t,fetch:n}),JR({fs:t,fetch:n})]}function wH(e){let t={buildProcessConfig:e.buildProcessConfig};return[`python3`,`python`,`pyodide`].map(e=>nP(e,t))}function TH(e){let t=e.scriptCatalog;return{buildProcessConfig:e.buildProcessConfig,terminal:e.terminal,gate:e.gateNativeCommand,commands:t&&(()=>t.getWasmCommands()),gitIdentity:e.gitIdentity}}function EH(e={}){let t=[qE({getJshCommands:e.getJshCommands,getWorkflowCommands:e.getWorkflowCommands}),re(),FI(),eI(),qF(e.browserAPI,e.fs),BM(e.browserAPI),Qy(e.browserAPI),QD(e),xH(),wR(),gL(e.fs?{fs:e.fs}:{}),HI(),YI(),KI(),qv(),yB(TH(e)),vC(TH(e)),vH(),kI(`sqlite3`),kI(`sqllite`),NL(),$L(),$x(),kv(),rM({buildProcessConfig:e.buildProcessConfig}),rM({buildProcessConfig:e.buildProcessConfig},`jsh`),...wH(e),...CH(e),...e.fs?[_C({fs:e.fs})]:[],...e.fs?[hj({fs:e.fs})]:[],...e.fetch?[iD({fetch:e.fetch,streamFetch:e.streamFetch})]:[],KS(),qS(),aC(),PB(e.webhook),yV(),Zy(e.crontask),CA({fs:e.fs,scriptCatalog:e.scriptCatalog}),oN({fs:e.fs,fetch:e.fetch}),gC(),bI(),VM(),HM(`pdftk`),HM(`pdf`),Av(`biscotto`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),Av(`biscotti`,{getParentJid:e.getParentJid,isScoop:e.isScoop}),QM(`pdftoppm`),QM(`pdftocairo`),$M(`pdftotext`),Fy(`convert`),Fy(`magick`),kV({fs:e.fs,scriptCatalog:e.scriptCatalog,getStaticBuiltins:e.getStaticBuiltins,getScriptRegisteredNames:e.getScriptRegisteredNames}),rR(),yR(),JD(),YD(),bR(),gj(),oP(),_A(),wx(),vM(),_M(),mA(),vF(SH(e)),Bm(e.gitCredential),yP({fs:e.fs}),KP(),Wv(),Gv(),Kv(`xclip`),Kv(`xsel`),GP(),PC(),t_(),n_(),Uj(e.fs),ct(),cM(),S_({getParentJid:e.getParentJid}),Mx(),ON({processManager:e.processManager}),lz({processManager:e.processManager}),Pk({processManager:e.processManager}),Mk({processManager:e.processManager,scriptCatalog:e.scriptCatalog}),...T_(),mj(),oA(),Pz(),AD(),PS(),Xz({processManager:e.processManager}),Xv({processManager:e.processManager,browser:e.browserAPI,sudoBroker:e.sudoCommand?.broker}),GS(),Lv({registry:e.cherryRuntimeRegistry}),sb(),pb({fs:e.fs}),mb({fs:e.fs}),LI(e.sudoCommand),KV({getParentJid:e.getParentJid,syncScriptCommands:e.syncScriptCommands}),bV(),$F()];return e.fs&&(tN(),t.push(...Vn.map(t=>WE(t,e.browserAPI,e.fs,{isScoop:e.isScoop})))),t}let DH=null;function OH(e){DH=e}function kH(e){DH?.(e)}var AH=Ft();const jH=Reflect.get(nt,`DefenseInDepthBox`);function MH(e){return(typeof e==`string`?e:e?.encoding)??`utf8`}function NH(e,t){if(typeof e!=`string`)return e;let n=MH(t);if(n===`binary`||n===`latin1`){let t=_e(e);if(t)return t}return AH.Buffer.from(e,n)}function PH(e){return e===`/bin`?`/usr/bin`:e.startsWith(`/bin/`)?`/usr${e}`:e}var FH=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=Ve(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=jH?.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=MH(t),o=AH.Buffer.from(i.buffer,i.byteOffset,i.byteLength).toString(a);return a!==`hex`&&a!==`base64`&&m(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 AH.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,NH(t,n))})}async appendFile(e,t,n){return this.dropListingStats(),this.trusted(()=>this.vfs.appendFile(b(e),NH(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 He(`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 IH(e){return e&&typeof e.getWatcher==`function`?e.getWatcher?.()??null:e&&typeof e.getUnderlyingFS==`function`?IH(e.getUnderlyingFS?.()):null}async function LH(e){let t=ge(`github`);if(t){if(e?.force){await t.onSilentRenew?.();return}await t.getValidAccessToken?.()}}function RH(){let e=ge(`github`);if(!e)return jm;let t=typeof localStorage>`u`?[]:l(localStorage).github;return[...e.oauthTokenDomains??jm,...t??[]]}const zH=e(`almost-bash-shell`),BH=`__SLICC_RUN_PID`,VH=`__SLICC_OUTPUT_TEE__`;function HH(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 UH(e){if(!(BH in e)&&!(VH in e)&&!(`__SLICC_SUDO_REASON`in e)&&!(`__SLICC_PIPESTATUS`in e)&&!(`__SLICC_PIPESTATUS_EX`in e))return{...e};let{[BH]:t,[VH]:n,[mm]:r,[gp]:i,[_p]: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 GH=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(HH(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:fp,PATH:rr,USER:`user`,SHELL:`/bin/bash`,TMPDIR:`/tmp`,PWD:t,...e.env}}buildSupplementalCommands(e,t,n){return EH({onMediaPreview:async e=>this.renderMediaPreview(e),getJshCommands:()=>this.getJshCommandNames(),getWorkflowCommands:()=>this.getWorkflowCommandNames(),syncScriptCommands:()=>this.syncJshCommands(),getStaticBuiltins:()=>[...this.staticBuiltinNames],getScriptRegisteredNames:()=>[...this.registeredJshCommands.keys(),...this.registeredWorkflowCommands,...this.registeredWasmCommands],fs:e.fs,fetch:t,streamFetch:n,scriptCatalog:this.scriptCatalog,browserAPI:e.browserAPI,webhook:e.webhook,crontask:e.crontask,getParentJid:e.getParentJid,isScoop:e.isScoop,buildProcessConfig:this.resolveJshProcessConfig,terminal:e.terminal,gateNativeCommand:this.gateNativeCommand,processManager:e.processManager,sudoCommand:e.sudo?{broker:e.sudo.broker,persistGrant:async e=>{this.pendingCommandGrants.push(e)},suppressNextGate:e=>this.registerSudoBypass(e)}:void 0,setEnv:(e,t)=>{this.pendingEnvWrites.set(e,t),this.lastEnv[e]=t},unsetEnv:e=>{this.pendingEnvWrites.set(e,null),delete this.lastEnv[e]},gitCredential:{githubToken:(e,t)=>this.gitCommands.githubCredential(e,t),githubDomains:RH},gitIdentity:()=>this.gitCommands.identity()})}constructor(t){this.options=t,this.vfsAdapter=new FH(t.fs),this.progress=new Op({scrubLabel:t.scrubProgressLabel}),this.allowedCommands=e.buildAllowedCommandSet(t);let n=t.cwd??`/`,r=e.buildInitialEnv(t,n);this.gitCommands=new ip({fs:t.fs,authorName:r.GIT_AUTHOR_NAME??`User`,authorEmail:r.GIT_AUTHOR_EMAIL??`user@example.com`,ensureFreshGithubToken:LH}),this.mountCommands=new js({fs:t.fs,isScoop:t.isScoop,acquireLocalMountViaToolUI:Gm});let i=t.jshDiscoveryFs??t.fs,a=t.bshDiscoveryFs??t.fs,o=IH(i)??IH(a);this.scriptCatalog=t.scriptCatalog??new vi({jshFs:i,bshFs:a,watcher:o}),this.ownsScriptCatalog=!t.scriptCatalog,o&&o.watch(`/`,e=>e.endsWith(`.jsh`)||e.endsWith(`.workflow.js`)||tr(e),()=>{this.syncJshCommands().catch(()=>void 0)});let s=this.createGitCustomCommand(),c=g({progress:Np(this.progress)}),l=_({progress:Np(this.progress)}),u=this.buildSupplementalCommands(t,c,l),d=[s,this.createMountCustomCommand(),this.createUmountCustomCommand(),zh(t.fs),Ig(t.fs,c,t.browserAPI),...u].filter(e=>this.isCommandAllowed(e.name)),f=[...it(),...rt()],p=this.allowedCommands?f.filter(e=>this.isCommandAllowed(e)):void 0;if(this.bash=new at({fs:this.vfsAdapter,cwd:n,env:{},fetch:c,commands:p,customCommands:d,sleep:em(this.progress,{isAborted:()=>this.activeRunSignal?.aborted??!1}),executionLimitProfile:t.executionLimitProfile,executionLimits:op(t.isScoop?.()??!1,t.executionLimits)}),this.bash.registerTransformPlugin($m),this.allowedCommands!==null){let e=this.bash;for(let t of rt())this.isCommandAllowed(t)||e.commands.delete(t)}{let e=this.bash;for(let[t,n]of e.commands)e.commands.set(t,this.wrapCommandForDispatch(n));this.registryNames=new Set(e.commands.keys())}let m=d.map(e=>e.name),h=p??[...it(),...rt()];this.builtinCommandNames=new Set([...h,...m]),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 Qr(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 ir(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 pp(e);this.lastEnv.HOME=t,this.options.env?.USER||(this.lastEnv.USER=mp(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){zH.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(kH(e.trim().split(/\s+/)[0]||`unknown`),v(),await this.waitForInitialJshSync(t),await this.usesGnuBash())return this.runOnGnuBash(e,t,n,r,i,a);let o=gm(e),s={env:{...this.lastEnv,...n===void 0?{}:{[BH]:String(n)},...i===void 0?{}:{[VH]:i},...o?{[mm]: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(Sp(e,a),s)}finally{l.release(),this.activeRunSignal===l.signal&&(this.activeRunSignal=void 0),this.endScriptRun(u)}if(await this.flushPendingCommandGrants(),d=Cp(d,a),typeof d.umask==`number`&&(this.umask=d.umask),d.env&&(this.lastEnv=UH(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 wp(await e(d,this.cwd,this.vfsAdapter),d.pipeStatus)}return d}applyPendingEnvWrites(){for(let[e,t]of this.pendingEnvWrites)t===null?delete this.lastEnv[e]:this.lastEnv[e]=t;this.pendingEnvWrites.clear()}async usesGnuBash(){return!this.options.gnuBash||this.lastEnv.SLICC_SHELL===`just-bash`||typeof SharedArrayBuffer!=`function`?!1:(await this.scriptCatalog.getWasmCommands()).has(`bash`)}async runOnGnuBash(e,t,n,r,i,a){let{runWasmCommand:o,withoutRealmDefaults:s}=await import(`./run-8y7BhTkZ.js`),c=gm(e),l={...this.lastEnv,...n===void 0?{}:{[BH]:String(n)},...c?{[mm]:c}:{}},u=i===void 0?void 0:this.outputTees.get(i),d=await dp(e,{env:l,run:(e,i,a)=>o(e,this.wasmContext(i,t,r),{processConfig:this.buildJshProcessConfig(n),gate:this.gateNativeCommand,onOutput:u,fds:a,commands:()=>this.scriptCatalog.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}),f=this.lastEnv.PATH;return d.state&&(this.cwd=d.state.cwd,this.lastEnv=lp(s(d.state.env,l),[BH,mm,VH])),this.lastEnv.PATH!==f&&await this.syncJshCommands().catch(()=>void 0),await this.flushPendingCommandGrants(),this.applyPendingEnvWrites(),{stdout:d.stdout,stderr:d.stderr,exitCode:d.exitCode,env:{...this.lastEnv},...a&&d.state?{pipeStatus:d.state.pipeStatus}:{}}}wasmContext(e,t,n){return{fs:this.vfsAdapter,cwd:this.cwd,env:new Map(Object.entries(e)),exportedEnv:e,stdin:n,signal:t,exec:(e,t)=>this.bash.exec(e,{...t,umask:this.umask})}}gateNativeCommand=async(e,t,n)=>{if(this.allowedCommands!==null&&!this.isCommandAllowed(e))return{stderr:`bash: ${e}: command not found\n`,exitCode:127};if(!this.isTransparentGatingEnabled()||Am.has(e))return null;let r=await this.gateCommandDispatch(e,t,n[mm]);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`?im(t,this.progress):om(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(VH),s=o?a.get(o):void 0;s&&(t.writeStdout=s);try{let r=await cm(()=>n.execute(e,t),t.signal);return i(t.env,r),r}finally{r()}}}}teeCommandOutput(e,t){let n=e?.get(VH);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=Yp(this.bash.transform(e).ast,this.registryNames)}catch{t={totalSteps:null}}return this.scriptRun=new Zp(t,this.progress,Xp(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()||Am.has(e.name))return e;let t=(t,n)=>this.gateCommandDispatch(e.name,t,n);return{...e,async execute(n,r){return await t(n,r.env?.get(mm))||e.execute(n,r)}}}async gateCommandDispatch(e,t,n){let r=this.options.sudo;if(!r)return null;let i=um(e,t);if(this.consumeSudoBypass(i))return null;let a=r.getPolicy();if(!a)return null;let o=await fm(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=ut(e);if(!n)return;let r=`${ft}/granted`,i=this.options.fs,a=``;try{await i.exists(r)&&(a=await i.readFile(r))}catch(e){if(!(e instanceof He&&e.code===`ENOENT`))throw e}let o=a&&!a.endsWith(`
|
|
3535
|
+
`)?`${a}\n`:a;await i.writeFile(r,`${o}NOPASSWD Cmnd ${n}\n`)}isCommandAllowed(e){return this.allowedCommands===null||this.allowedCommands.has(Am.get(e)??e)}async doSyncJshCommands(){try{let e=await this.scriptCatalog.getJshIndex(this.currentScanRoots()),t=e.commands;for(let t of e.collisions)zH.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 ti(t,[`node`,o,...e],{fs:i.fs,cwd:i.cwd,env:i.env,stdin:i.stdin,exec:a},this.buildJshProcessConfig(HH(i.env)))}let s=(await t.getWasmCommands()).get(r);if(s){let{runWasmCommand:n}=await import(`./run-8y7BhTkZ.js`);return n([`--argv0`,s.argv0,`--module`,s.wasm,s.glue,...e],i,{processConfig:this.buildJshProcessConfig(HH(i.env)),gate:this.gateNativeCommand,defaults:s.env,commands:()=>t.getWasmCommands(),gitIdentity:()=>this.gitCommands.identity()})}let c=(await t.getWorkflowCommands()).get(r);if(c){let t=_i(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?hp(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 ti(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{va as C,Do as S,Ho as _,IV as a,Oa as b,Dp as c,xs as d,ms as f,Uo as g,cs as h,MV as i,fp as l,us as m,FH as n,AV as o,ds as p,OH as r,pm as s,GH as t,Ss as u,No as v,Da as x,wa as y};
|